{"version":3,"sources":["vendor/ember-cli/app-prefix.js","adept-iq/adapters/-ada-adaManagement.js","adept-iq/adapters/-addressService.js","adept-iq/adapters/-avlService.js","adept-iq/adapters/-avlm-avlmService.js","adept-iq/adapters/-bs-bookingManagement.js","adept-iq/adapters/-cos-continuousOptService.js","adept-iq/adapters/-cs-configService.js","adept-iq/adapters/-dispatch.js","adept-iq/adapters/-driver.js","adept-iq/adapters/-dwh-dwhService.js","adept-iq/adapters/-iqux-iquxService.js","adept-iq/adapters/-neo4j-neo4jService.js","adept-iq/adapters/-playbackService.js","adept-iq/adapters/-reconciliationService.js","adept-iq/adapters/-rms-riderManagement.js","adept-iq/adapters/-ss-schedulingService.js","adept-iq/adapters/-sso-ssoService.js","adept-iq/adapters/-vehicleService.js","adept-iq/adapters/activity-log-type.js","adept-iq/adapters/activity-log.js","adept-iq/adapters/address.js","adept-iq/adapters/agency-service.js","adept-iq/adapters/agency.js","adept-iq/adapters/application.js","adept-iq/adapters/archived-activity-log.js","adept-iq/adapters/avl-location.js","adept-iq/adapters/avlm-address.js","adept-iq/adapters/avlm-alert.js","adept-iq/adapters/avlm-canned-message-template.js","adept-iq/adapters/avlm-canned-message.js","adept-iq/adapters/avlm-driver-state-event.js","adept-iq/adapters/avlm-emergency-message.js","adept-iq/adapters/avlm-event.js","adept-iq/adapters/avlm-route-break.js","adept-iq/adapters/avlm-route-vehicle-driver.js","adept-iq/adapters/avlm-route.js","adept-iq/adapters/avlm-schedule.js","adept-iq/adapters/avlm-stop-point.js","adept-iq/adapters/avlm-trip-rider-attribute.js","adept-iq/adapters/avlm-trip-rider.js","adept-iq/adapters/avlm-trip.js","adept-iq/adapters/avlm-vehicle-event.js","adept-iq/adapters/avlm-vehicle-info.js","adept-iq/adapters/avlm-vehicle-radius.js","adept-iq/adapters/avlm-vehicle.js","adept-iq/adapters/avlm-zone.js","adept-iq/adapters/booking.js","adept-iq/adapters/break-type.js","adept-iq/adapters/breakdown-type.js","adept-iq/adapters/bulk-operation.js","adept-iq/adapters/cancel-type.js","adept-iq/adapters/cancellation.js","adept-iq/adapters/classification-name.js","adept-iq/adapters/cluster.js","adept-iq/adapters/continous-opt-route-break.js","adept-iq/adapters/cs-config-category.js","adept-iq/adapters/cs-config-file.js","adept-iq/adapters/cs-config-item.js","adept-iq/adapters/cs-config-lookup-model.js","adept-iq/adapters/cs-config-model.js","adept-iq/adapters/cs-config-permission.js","adept-iq/adapters/dashboard.js","adept-iq/adapters/dispatch-route.js","adept-iq/adapters/dispatch-schedule.js","adept-iq/adapters/driver-19-a-review.js","adept-iq/adapters/driver-accident.js","adept-iq/adapters/driver-attribute.js","adept-iq/adapters/driver-availability.js","adept-iq/adapters/driver-emergency-contact.js","adept-iq/adapters/driver-health.js","adept-iq/adapters/driver-license.js","adept-iq/adapters/driver-log.js","adept-iq/adapters/driver-phone-number.js","adept-iq/adapters/driver-physical-type-name.js","adept-iq/adapters/driver-position-name.js","adept-iq/adapters/driver-position.js","adept-iq/adapters/driver-provider-note.js","adept-iq/adapters/driver-provider-notes.js","adept-iq/adapters/driver-provider.js","adept-iq/adapters/driver-suspension.js","adept-iq/adapters/driver-violation.js","adept-iq/adapters/driver.js","adept-iq/adapters/dwh-route.js","adept-iq/adapters/dwh-stop-point.js","adept-iq/adapters/dwh-trip.js","adept-iq/adapters/eligibility-category.js","adept-iq/adapters/eligibility-condition.js","adept-iq/adapters/eligibility-type.js","adept-iq/adapters/employment-status-name.js","adept-iq/adapters/etanav-route-break.js","adept-iq/adapters/etanav-route.js","adept-iq/adapters/etanav-stop-point.js","adept-iq/adapters/event.js","adept-iq/adapters/exam-type-name.js","adept-iq/adapters/fare-category.js","adept-iq/adapters/fare-type.js","adept-iq/adapters/funding-agency.js","adept-iq/adapters/generated-subscription-booking.js","adept-iq/adapters/group.js","adept-iq/adapters/inspection-category.js","adept-iq/adapters/inspector-name.js","adept-iq/adapters/internal-ui-config.js","adept-iq/adapters/lease-company.js","adept-iq/adapters/leg-service-need.js","adept-iq/adapters/leg-travel-need.js","adept-iq/adapters/leg.js","adept-iq/adapters/location.js","adept-iq/adapters/lock.js","adept-iq/adapters/maintenance-location-name.js","adept-iq/adapters/maintenance-status-name.js","adept-iq/adapters/maintenance-type-name.js","adept-iq/adapters/manufacturer-name.js","adept-iq/adapters/metric.js","adept-iq/adapters/no-show-reason-category.js","adept-iq/adapters/no-show-reason-code.js","adept-iq/adapters/passenger-type.js","adept-iq/adapters/perm-sso-role.js","adept-iq/adapters/perm-sso-user.js","adept-iq/adapters/place-category-type.js","adept-iq/adapters/place.js","adept-iq/adapters/playback-activity-log.js","adept-iq/adapters/playback-driver.js","adept-iq/adapters/playback-route.js","adept-iq/adapters/playback-vehicle.js","adept-iq/adapters/polyline.js","adept-iq/adapters/problem-identified-name.js","adept-iq/adapters/provider-type.js","adept-iq/adapters/provider.js","adept-iq/adapters/rear-axel-name.js","adept-iq/adapters/reconcile-driver.js","adept-iq/adapters/reconcile-passenger.js","adept-iq/adapters/reconcile-route-id.js","adept-iq/adapters/reconcile-route.js","adept-iq/adapters/reconcile-stop.js","adept-iq/adapters/reconcile-trip.js","adept-iq/adapters/reconcile-vehicle.js","adept-iq/adapters/reconcile-verify-route.js","adept-iq/adapters/rider-certification.js","adept-iq/adapters/rider-contact-info.js","adept-iq/adapters/rider-eligibility.js","adept-iq/adapters/rider-external-eligibility.js","adept-iq/adapters/rider-external.js","adept-iq/adapters/rider-funding.js","adept-iq/adapters/rider-phone-number.js","adept-iq/adapters/rider-place-type.js","adept-iq/adapters/rider-place.js","adept-iq/adapters/rider-profile.js","adept-iq/adapters/rider-service-need.js","adept-iq/adapters/rider-suspension.js","adept-iq/adapters/rider-travel-need.js","adept-iq/adapters/rider.js","adept-iq/adapters/road-call-code-name.js","adept-iq/adapters/role-permission.js","adept-iq/adapters/route-break.js","adept-iq/adapters/route-calendar.js","adept-iq/adapters/route-exec-event.js","adept-iq/adapters/route-shape.js","adept-iq/adapters/route-template-availability.js","adept-iq/adapters/route-template.js","adept-iq/adapters/route-vehicle-driver.js","adept-iq/adapters/route.js","adept-iq/adapters/schedule-configuration.js","adept-iq/adapters/schedule.js","adept-iq/adapters/segment-stop-phone-number.js","adept-iq/adapters/segment-stop.js","adept-iq/adapters/segment.js","adept-iq/adapters/service-need-type.js","adept-iq/adapters/service-window.js","adept-iq/adapters/shift-break.js","adept-iq/adapters/speed-region-group.js","adept-iq/adapters/ss-no-show-reason-code.js","adept-iq/adapters/sso-permission.js","adept-iq/adapters/sso-role.js","adept-iq/adapters/sso-user.js","adept-iq/adapters/stop-point.js","adept-iq/adapters/subscription-exclusion.js","adept-iq/adapters/subscription-group.js","adept-iq/adapters/subscription-phone-number.js","adept-iq/adapters/subscription-recurrence-pattern.js","adept-iq/adapters/subscription-service-need.js","adept-iq/adapters/subscription-travel-need.js","adept-iq/adapters/subscription.js","adept-iq/adapters/termination-reason-name.js","adept-iq/adapters/travel-need-type.js","adept-iq/adapters/trim-slack-contract-management.js","adept-iq/adapters/trip-noshow.js","adept-iq/adapters/trip-payment.js","adept-iq/adapters/trip-purpose.js","adept-iq/adapters/trip-route-assignment.js","adept-iq/adapters/trip-stop.js","adept-iq/adapters/trip-transfer.js","adept-iq/adapters/trip.js","adept-iq/adapters/vehicle-availability.js","adept-iq/adapters/vehicle-body-type.js","adept-iq/adapters/vehicle-body-width.js","adept-iq/adapters/vehicle-breakdown.js","adept-iq/adapters/vehicle-capacity-config.js","adept-iq/adapters/vehicle-capacity-type.js","adept-iq/adapters/vehicle-chassis.js","adept-iq/adapters/vehicle-dot-inspection.js","adept-iq/adapters/vehicle-equipment.js","adept-iq/adapters/vehicle-event.js","adept-iq/adapters/vehicle-fuel-cap.js","adept-iq/adapters/vehicle-fuel-type.js","adept-iq/adapters/vehicle-maintenance.js","adept-iq/adapters/vehicle-manufacturer-name.js","adept-iq/adapters/vehicle-model-name.js","adept-iq/adapters/vehicle-road-call.js","adept-iq/adapters/vehicle-route.js","adept-iq/adapters/vehicle-status-name.js","adept-iq/adapters/vehicle-tire-size.js","adept-iq/adapters/vehicle-transmission.js","adept-iq/adapters/vehicle-type.js","adept-iq/adapters/vehicle-wc-lift-type.js","adept-iq/adapters/vehicle-wheelbase-type.js","adept-iq/adapters/vehicle.js","adept-iq/adapters/zip-code.js","adept-iq/adapters/zone-type.js","adept-iq/adapters/zone.js","adept-iq/app.js","adept-iq/authenticators/sso.js","adept-iq/authorizers/sso.js","adept-iq/breakpoints.js","adept-iq/classes/active-contexts/avlm/avlm.js","adept-iq/classes/active-contexts/avlm/graph.js","adept-iq/classes/active-contexts/avlm/map-graph.js","adept-iq/classes/active-contexts/base/base.js","adept-iq/classes/active-contexts/booking/booking.js","adept-iq/classes/active-contexts/booking/graph.js","adept-iq/classes/active-contexts/booking/map-graph.js","adept-iq/classes/active-contexts/dispatch/dispatch.js","adept-iq/classes/active-contexts/dispatch/graph.js","adept-iq/classes/active-contexts/dispatch/map-graph.js","adept-iq/classes/active-contexts/permission/graph.js","adept-iq/classes/active-contexts/permission/map-graph.js","adept-iq/classes/active-contexts/permission/permission.js","adept-iq/classes/active-contexts/playback/graph.js","adept-iq/classes/active-contexts/playback/map-graph.js","adept-iq/classes/active-contexts/playback/playback.js","adept-iq/classes/active-contexts/reconcile/graph.js","adept-iq/classes/active-contexts/reconcile/map-graph.js","adept-iq/classes/active-contexts/reconcile/reconcile.js","adept-iq/classes/active-contexts/schedule/graph.js","adept-iq/classes/active-contexts/schedule/map-graph.js","adept-iq/classes/active-contexts/schedule/schedule.js","adept-iq/classes/dashboard-instance.js","adept-iq/classes/data-joins/base-table.js","adept-iq/classes/data-joins/base.js","adept-iq/classes/data-joins/column-widget.js","adept-iq/classes/data-joins/map/base.js","adept-iq/classes/data-joins/map/marker.js","adept-iq/classes/data-joins/map/polyline.js","adept-iq/classes/data-joins/map/shape.js","adept-iq/classes/data-joins/table.js","adept-iq/classes/impact-stop.js","adept-iq/classes/json-api-serializer/JSONAPISerializer.js","adept-iq/classes/json-api-serializer/helpers.js","adept-iq/classes/json-api-serializer/lru-cache.js","adept-iq/classes/json-api-serializer/validator.js","adept-iq/classes/map-contexts/base.js","adept-iq/classes/map-contexts/layered.js","adept-iq/classes/map-contexts/map-configs/avlm-layers.js","adept-iq/classes/map-contexts/map-configs/dispatch-layers.js","adept-iq/classes/map-contexts/map-configs/reconcile-layers.js","adept-iq/classes/map-contexts/map-configs/schedule-layers.js","adept-iq/classes/map-contexts/side-drawers/trip-transfer.js","adept-iq/classes/map-contexts/workspaces/avlm.js","adept-iq/classes/map-contexts/workspaces/booking.js","adept-iq/classes/map-contexts/workspaces/dispatch.js","adept-iq/classes/map-contexts/workspaces/permission.js","adept-iq/classes/map-contexts/workspaces/reconcile.js","adept-iq/classes/map-contexts/workspaces/schedule.js","adept-iq/classes/markers/agency.js","adept-iq/classes/markers/base.js","adept-iq/classes/markers/stops/avlm-stop-point.js","adept-iq/classes/markers/stops/base.js","adept-iq/classes/markers/stops/schedule-stop.js","adept-iq/classes/markers/stops/stop-point.js","adept-iq/classes/markers/vehicles/base.js","adept-iq/classes/markers/vehicles/iq.js","adept-iq/classes/markers/vehicles/road-supervisor.js","adept-iq/classes/polygons/base.js","adept-iq/classes/polygons/zone.js","adept-iq/classes/polylines/base.js","adept-iq/classes/polylines/routes/base.js","adept-iq/classes/polylines/routes/floatingBreak/base.js","adept-iq/classes/polylines/routes/floatingBreak/iq.js","adept-iq/classes/polylines/routes/navigation/base.js","adept-iq/classes/polylines/routes/navigation/iq.js","adept-iq/classes/polylines/routes/performed/base.js","adept-iq/classes/polylines/routes/performed/iq.js","adept-iq/classes/polylines/routes/planned/base.js","adept-iq/classes/polylines/routes/planned/iq.js","adept-iq/classes/polylines/routes/scheduled/base.js","adept-iq/classes/polylines/routes/scheduled/iq.js","adept-iq/classes/polylines/stops/base.js","adept-iq/classes/polylines/stops/iq.js","adept-iq/classes/polylines/trips/base.js","adept-iq/classes/polylines/trips/iq.js","adept-iq/classes/road-supervisor-api.js","adept-iq/classes/road-supervisor-instance.js","adept-iq/classes/road-supervisor-special-route-api.js","adept-iq/classes/rules/base-rule-context.js","adept-iq/classes/rules/base-rule.js","adept-iq/classes/rules/eligibility-rules/all-conditions-pass-rule.js","adept-iq/classes/rules/eligibility-rules/assessment-trip-rule.js","adept-iq/classes/rules/eligibility-rules/conditional-eligibility-rule.js","adept-iq/classes/rules/eligibility-rules/deny-eligibility-suspension-rule.js","adept-iq/classes/rules/eligibility-rules/eligibility-rule-builder.js","adept-iq/classes/rules/eligibility-rules/eligibility-rule-context.js","adept-iq/classes/rules/eligibility-rules/full-eligibility-rule.js","adept-iq/classes/rules/eligibility-rules/group-booking-rule.js","adept-iq/classes/rules/eligibility-rules/itp-blackout-rule.js","adept-iq/classes/rules/eligibility-rules/itp-conditions-rule.js","adept-iq/classes/rules/eligibility-rules/itp-enabled-rule.js","adept-iq/classes/rules/eligibility-rules/itp-include-feeder-rule.js","adept-iq/classes/rules/eligibility-rules/itp-request-rule.js","adept-iq/classes/rules/eligibility-rules/itp-resulttype-rule.js","adept-iq/classes/rules/eligibility-rules/itp-user-override-permissions-rule.js","adept-iq/classes/rules/eligibility-rules/no-eligibility-rule.js","adept-iq/classes/rules/eligibility-rules/rider-distance-condition-rule.js","adept-iq/classes/rules/eligibility-rules/rider-prefer-taxi-rule.js","adept-iq/classes/rules/eligibility-rules/taxi-allowed-rule.js","adept-iq/classes/rules/eligibility-rules/user-override-conditions-rule.js","adept-iq/classes/rules/eligibility-rules/user-override-permissions-rule.js","adept-iq/classes/rules/itinerary-type.js","adept-iq/classes/rules/rule-result-type.js","adept-iq/classes/rules/trip-type.js","adept-iq/classes/shapes/base.js","adept-iq/classes/shapes/zone.js","adept-iq/classes/socket-stream.js","adept-iq/classes/tree-nodes/base.js","adept-iq/classes/tree-nodes/category.js","adept-iq/classes/tree-nodes/object.js","adept-iq/classes/tree-nodes/value.js","adept-iq/classes/vertical-menu-models/operation-list-model.js","adept-iq/classes/widget.js","adept-iq/classes/work-queue.js","adept-iq/classes/work-queues/widget-refresh.js","adept-iq/components/-dynamic-element-alt.js","adept-iq/components/-dynamic-element.js","adept-iq/components/-ember-table-private/row-wrapper.js","adept-iq/components/-ember-table-private/scroll-indicators.js","adept-iq/components/-ember-table-private/simple-checkbox.js","adept-iq/components/as-scrollable.js","adept-iq/components/basic-dropdown-content.js","adept-iq/components/basic-dropdown-trigger.js","adept-iq/components/basic-dropdown.js","adept-iq/components/basic-dropdown/content-element.js","adept-iq/components/basic-dropdown/content.js","adept-iq/components/basic-dropdown/trigger.js","adept-iq/components/bs-accordion.js","adept-iq/components/bs-accordion/item.js","adept-iq/components/bs-accordion/item/body.js","adept-iq/components/bs-accordion/item/title.js","adept-iq/components/bs-alert.js","adept-iq/components/bs-button-group.js","adept-iq/components/bs-button-group/button.js","adept-iq/components/bs-button.js","adept-iq/components/bs-carousel.js","adept-iq/components/bs-carousel/slide.js","adept-iq/components/bs-collapse.js","adept-iq/components/bs-dropdown.js","adept-iq/components/bs-dropdown/button.js","adept-iq/components/bs-dropdown/menu.js","adept-iq/components/bs-dropdown/menu/divider.js","adept-iq/components/bs-dropdown/menu/item.js","adept-iq/components/bs-dropdown/menu/link-to.js","adept-iq/components/bs-dropdown/toggle.js","adept-iq/components/bs-form.js","adept-iq/components/bs-form/element.js","adept-iq/components/bs-form/element/control.js","adept-iq/components/bs-form/element/control/checkbox.js","adept-iq/components/bs-form/element/control/input.js","adept-iq/components/bs-form/element/control/textarea.js","adept-iq/components/bs-form/element/errors.js","adept-iq/components/bs-form/element/feedback-icon.js","adept-iq/components/bs-form/element/help-text.js","adept-iq/components/bs-form/element/label.js","adept-iq/components/bs-form/element/layout/horizontal.js","adept-iq/components/bs-form/element/layout/horizontal/checkbox.js","adept-iq/components/bs-form/element/layout/inline.js","adept-iq/components/bs-form/element/layout/inline/checkbox.js","adept-iq/components/bs-form/element/layout/vertical.js","adept-iq/components/bs-form/element/layout/vertical/checkbox.js","adept-iq/components/bs-form/group.js","adept-iq/components/bs-modal-simple.js","adept-iq/components/bs-modal.js","adept-iq/components/bs-modal/body.js","adept-iq/components/bs-modal/dialog.js","adept-iq/components/bs-modal/footer.js","adept-iq/components/bs-modal/header.js","adept-iq/components/bs-modal/header/close.js","adept-iq/components/bs-modal/header/title.js","adept-iq/components/bs-nav.js","adept-iq/components/bs-nav/item.js","adept-iq/components/bs-nav/link-to.js","adept-iq/components/bs-navbar.js","adept-iq/components/bs-navbar/content.js","adept-iq/components/bs-navbar/link-to.js","adept-iq/components/bs-navbar/nav.js","adept-iq/components/bs-navbar/toggle.js","adept-iq/components/bs-popover.js","adept-iq/components/bs-popover/element.js","adept-iq/components/bs-progress.js","adept-iq/components/bs-progress/bar.js","adept-iq/components/bs-tab.js","adept-iq/components/bs-tab/pane.js","adept-iq/components/bs-tooltip.js","adept-iq/components/bs-tooltip/element.js","adept-iq/components/credit-card-input.js","adept-iq/components/currency-input.js","adept-iq/components/date-input.js","adept-iq/components/email-input.js","adept-iq/components/ember-chart.js","adept-iq/components/ember-flatpickr.js","adept-iq/components/ember-modal-dialog-positioned-container.js","adept-iq/components/ember-modal-dialog/-basic-dialog.js","adept-iq/components/ember-modal-dialog/-in-place-dialog.js","adept-iq/components/ember-modal-dialog/-liquid-dialog.js","adept-iq/components/ember-modal-dialog/-liquid-tether-dialog.js","adept-iq/components/ember-modal-dialog/-tether-dialog.js","adept-iq/components/ember-popover.js","adept-iq/components/ember-popper-targeting-parent.js","adept-iq/components/ember-popper.js","adept-iq/components/ember-scrollable.js","adept-iq/components/ember-scrollbar.js","adept-iq/components/ember-table.js","adept-iq/components/ember-tbody.js","adept-iq/components/ember-td.js","adept-iq/components/ember-tfoot.js","adept-iq/components/ember-th.js","adept-iq/components/ember-th/resize-handle.js","adept-iq/components/ember-th/sort-indicator.js","adept-iq/components/ember-thead.js","adept-iq/components/ember-timepicker.js","adept-iq/components/ember-tooltip.js","adept-iq/components/ember-tr.js","adept-iq/components/ember-wormhole.js","adept-iq/components/flash-message.js","adept-iq/components/grid-stack-item.js","adept-iq/components/grid-stack.js","adept-iq/components/input-mask.js","adept-iq/components/labeled-radio-button.js","adept-iq/components/light-table.js","adept-iq/components/light-table/cells/base.js","adept-iq/components/light-table/columns/base.js","adept-iq/components/lt-body.js","adept-iq/components/lt-column-resizer.js","adept-iq/components/lt-foot.js","adept-iq/components/lt-head.js","adept-iq/components/lt-infinity.js","adept-iq/components/lt-row.js","adept-iq/components/lt-scrollable.js","adept-iq/components/lt-spanned-row.js","adept-iq/components/modal-container.js","adept-iq/components/modal-dialog.js","adept-iq/components/modal.js","adept-iq/components/number-input.js","adept-iq/components/one-way-credit-card-mask.js","adept-iq/components/one-way-currency-mask.js","adept-iq/components/one-way-date-mask.js","adept-iq/components/one-way-email-mask.js","adept-iq/components/one-way-input-mask.js","adept-iq/components/one-way-number-mask.js","adept-iq/components/one-way-phone-mask.js","adept-iq/components/one-way-ssn-mask.js","adept-iq/components/one-way-zip-code-mask.js","adept-iq/components/phone-number-input.js","adept-iq/components/power-calendar-multiple.js","adept-iq/components/power-calendar-multiple/days.js","adept-iq/components/power-calendar-range.js","adept-iq/components/power-calendar-range/days.js","adept-iq/components/power-calendar.js","adept-iq/components/power-calendar/days.js","adept-iq/components/power-calendar/nav.js","adept-iq/components/power-select-multiple-with-create.js","adept-iq/components/power-select-multiple.js","adept-iq/components/power-select-multiple/trigger.js","adept-iq/components/power-select-with-create.js","adept-iq/components/power-select-with-create/suggested-option.js","adept-iq/components/power-select.js","adept-iq/components/power-select/before-options.js","adept-iq/components/power-select/options.js","adept-iq/components/power-select/placeholder.js","adept-iq/components/power-select/power-select-group.js","adept-iq/components/power-select/search-message.js","adept-iq/components/power-select/trigger.js","adept-iq/components/radio-button-input.js","adept-iq/components/radio-button.js","adept-iq/components/range-slider.js","adept-iq/components/resize-detector.js","adept-iq/components/scroll-content-element.js","adept-iq/components/sortable-group.js","adept-iq/components/sortable-handle.js","adept-iq/components/sortable-item.js","adept-iq/components/spectrum-color-picker.js","adept-iq/components/ssn-input.js","adept-iq/components/step-manager.js","adept-iq/components/step-manager/step.js","adept-iq/components/ui-slider.js","adept-iq/components/vertical-collection.js","adept-iq/components/zip-code-input.js","adept-iq/config/api-urls.js","adept-iq/config/cell-item-types.js","adept-iq/config/column-types.js","adept-iq/config/comparison-functions.js","adept-iq/config/config-object-template.js","adept-iq/config/config-value-validation.js","adept-iq/config/cs-config-model-category.js","adept-iq/config/filter-types.js","adept-iq/config/icon-paths.js","adept-iq/config/itinerary-action.js","adept-iq/config/mapped-permIds.js","adept-iq/config/mapped-status.js","adept-iq/config/notifications.js","adept-iq/config/otp-criteria.js","adept-iq/config/phonetic-substitutions.js","adept-iq/config/placeholders.js","adept-iq/config/server-relationships.js","adept-iq/config/widget-events.js","adept-iq/config/widget-groups.js","adept-iq/config/widget-types.js","adept-iq/config/workspace-states.js","adept-iq/config/zone-polygon.js","adept-iq/data/driverData.js","adept-iq/data/providerData.js","adept-iq/data/road-supervisor.js","adept-iq/data/routeInformationData.js","adept-iq/data/routeType.js","adept-iq/data/routeTypeData.js","adept-iq/data/vehicleData.js","adept-iq/ember-hifi/tests/addon.lint-test.js","adept-iq/ember-hifi/tests/app.lint-test.js","adept-iq/ember-hifi/tests/test-support.lint-test.js","adept-iq/errors/version-error.js","adept-iq/flash/object.js","adept-iq/helpers/-element.js","adept-iq/helpers/abs.js","adept-iq/helpers/acos.js","adept-iq/helpers/acosh.js","adept-iq/helpers/add.js","adept-iq/helpers/and.js","adept-iq/helpers/app-version.js","adept-iq/helpers/append.js","adept-iq/helpers/array.js","adept-iq/helpers/asin.js","adept-iq/helpers/asinh.js","adept-iq/helpers/assign.js","adept-iq/helpers/atan.js","adept-iq/helpers/atan2.js","adept-iq/helpers/atanh.js","adept-iq/helpers/bs-contains.js","adept-iq/helpers/bs-eq.js","adept-iq/helpers/camelize.js","adept-iq/helpers/cancel-all.js","adept-iq/helpers/capitalize.js","adept-iq/helpers/cbrt.js","adept-iq/helpers/ceil.js","adept-iq/helpers/changeset-get.js","adept-iq/helpers/changeset-set.js","adept-iq/helpers/changeset.js","adept-iq/helpers/chunk.js","adept-iq/helpers/classify.js","adept-iq/helpers/clz32.js","adept-iq/helpers/compact.js","adept-iq/helpers/compute.js","adept-iq/helpers/contains.js","adept-iq/helpers/cos.js","adept-iq/helpers/cosh.js","adept-iq/helpers/dasherize.js","adept-iq/helpers/dec.js","adept-iq/helpers/div.js","adept-iq/helpers/drop.js","adept-iq/helpers/ember-power-select-is-group.js","adept-iq/helpers/ember-power-select-is-selected.js","adept-iq/helpers/ember-power-select-true-string-if-present.js","adept-iq/helpers/eq.js","adept-iq/helpers/exp.js","adept-iq/helpers/expm1.js","adept-iq/helpers/filter-by.js","adept-iq/helpers/filter.js","adept-iq/helpers/find-by.js","adept-iq/helpers/flatten.js","adept-iq/helpers/floor.js","adept-iq/helpers/format-address.js","adept-iq/helpers/fround.js","adept-iq/helpers/gcd.js","adept-iq/helpers/group-by.js","adept-iq/helpers/gt.js","adept-iq/helpers/gte.js","adept-iq/helpers/handle-dropdown.js","adept-iq/helpers/has-next.js","adept-iq/helpers/has-previous.js","adept-iq/helpers/has-role.js","adept-iq/helpers/html-safe.js","adept-iq/helpers/humanize.js","adept-iq/helpers/hypot.js","adept-iq/helpers/ignore-children.js","adept-iq/helpers/imul.js","adept-iq/helpers/inc.js","adept-iq/helpers/intersect.js","adept-iq/helpers/invoke.js","adept-iq/helpers/is-after.js","adept-iq/helpers/is-array.js","adept-iq/helpers/is-before.js","adept-iq/helpers/is-between.js","adept-iq/helpers/is-empty.js","adept-iq/helpers/is-equal.js","adept-iq/helpers/is-same-or-after.js","adept-iq/helpers/is-same-or-before.js","adept-iq/helpers/is-same.js","adept-iq/helpers/join.js","adept-iq/helpers/json-stringify.js","adept-iq/helpers/lcm.js","adept-iq/helpers/loc.js","adept-iq/helpers/log-e.js","adept-iq/helpers/log10.js","adept-iq/helpers/log1p.js","adept-iq/helpers/log2.js","adept-iq/helpers/lowercase.js","adept-iq/helpers/lt.js","adept-iq/helpers/lte.js","adept-iq/helpers/map-by.js","adept-iq/helpers/map.js","adept-iq/helpers/max.js","adept-iq/helpers/media.js","adept-iq/helpers/min.js","adept-iq/helpers/mod.js","adept-iq/helpers/moment-add.js","adept-iq/helpers/moment-calendar.js","adept-iq/helpers/moment-diff.js","adept-iq/helpers/moment-duration.js","adept-iq/helpers/moment-format.js","adept-iq/helpers/moment-from-now.js","adept-iq/helpers/moment-from.js","adept-iq/helpers/moment-subtract.js","adept-iq/helpers/moment-to-date.js","adept-iq/helpers/moment-to-now.js","adept-iq/helpers/moment-to.js","adept-iq/helpers/moment-unix.js","adept-iq/helpers/moment.js","adept-iq/helpers/mult.js","adept-iq/helpers/next.js","adept-iq/helpers/noop.js","adept-iq/helpers/not-eq.js","adept-iq/helpers/not.js","adept-iq/helpers/now.js","adept-iq/helpers/numeric-duration.js","adept-iq/helpers/object-at.js","adept-iq/helpers/one-at-a-time.js","adept-iq/helpers/optional.js","adept-iq/helpers/or.js","adept-iq/helpers/perform.js","adept-iq/helpers/pipe-action.js","adept-iq/helpers/pipe.js","adept-iq/helpers/pluralize.js","adept-iq/helpers/plus-one.js","adept-iq/helpers/pow.js","adept-iq/helpers/previous.js","adept-iq/helpers/queue.js","adept-iq/helpers/random.js","adept-iq/helpers/range.js","adept-iq/helpers/reduce.js","adept-iq/helpers/reject-by.js","adept-iq/helpers/repeat.js","adept-iq/helpers/reverse.js","adept-iq/helpers/round.js","adept-iq/helpers/route-action.js","adept-iq/helpers/send.js","adept-iq/helpers/shuffle.js","adept-iq/helpers/sign.js","adept-iq/helpers/sin.js","adept-iq/helpers/singularize.js","adept-iq/helpers/slice.js","adept-iq/helpers/sort-by.js","adept-iq/helpers/sqrt.js","adept-iq/helpers/sub.js","adept-iq/helpers/sum.js","adept-iq/helpers/svg-jar.js","adept-iq/helpers/take.js","adept-iq/helpers/tan.js","adept-iq/helpers/tanh.js","adept-iq/helpers/task.js","adept-iq/helpers/titleize.js","adept-iq/helpers/toggle-action.js","adept-iq/helpers/toggle.js","adept-iq/helpers/trim.js","adept-iq/helpers/trunc.js","adept-iq/helpers/truncate.js","adept-iq/helpers/underscore.js","adept-iq/helpers/union.js","adept-iq/helpers/unix.js","adept-iq/helpers/uppercase.js","adept-iq/helpers/utc.js","adept-iq/helpers/validate-transition.js","adept-iq/helpers/w.js","adept-iq/helpers/without.js","adept-iq/helpers/xor.js","adept-iq/initializers/add-modals-container.js","adept-iq/initializers/app-version.js","adept-iq/initializers/container-debug-adapter.js","adept-iq/initializers/debug.js","adept-iq/initializers/deprecations.js","adept-iq/initializers/ember-concurrency.js","adept-iq/initializers/ember-data-factory-guy.js","adept-iq/initializers/ember-data.js","adept-iq/initializers/ember-responsive-breakpoints.js","adept-iq/initializers/ember-simple-auth.js","adept-iq/initializers/export-application-global.js","adept-iq/initializers/flash-messages.js","adept-iq/initializers/load-bootstrap-config.js","adept-iq/initializers/model-fragments.js","adept-iq/initializers/objectProxy.js","adept-iq/initializers/tomtom.js","adept-iq/initializers/viewport-config.js","adept-iq/initializers/warnings.js","adept-iq/instance-initializers/ember-data.js","adept-iq/instance-initializers/ember-hifi.js","adept-iq/instance-initializers/ember-simple-auth.js","adept-iq/instance-initializers/work.js","adept-iq/mixins/active-context-binding.js","adept-iq/mixins/ada-boundary-layer.js","adept-iq/mixins/async-booking-operation.js","adept-iq/mixins/async-initiation-operation.js","adept-iq/mixins/async-schedule-operation.js","adept-iq/mixins/disable-record.js","adept-iq/mixins/fetch-vehicle-events.js","adept-iq/mixins/fetchAssignableVehicleDrivers.js","adept-iq/mixins/lookup-table-mixin.js","adept-iq/mixins/otp-label.js","adept-iq/mixins/password-validation.js","adept-iq/mixins/role-provider-validation.js","adept-iq/mixins/table-row-value.js","adept-iq/mixins/trip-transfer-promise-time.js","adept-iq/mixins/trip-transfer-reason.js","adept-iq/mixins/version-check.js","adept-iq/models/address.js","adept-iq/models/agency-marker.js","adept-iq/models/agency-service.js","adept-iq/models/agency.js","adept-iq/models/avl-location.js","adept-iq/models/avlm-address.js","adept-iq/models/avlm-alert.js","adept-iq/models/avlm-attribute.js","adept-iq/models/avlm-canned-message-template.js","adept-iq/models/avlm-canned-message.js","adept-iq/models/avlm-cluster.js","adept-iq/models/avlm-driver-app.js","adept-iq/models/avlm-driver-state-event.js","adept-iq/models/avlm-driver.js","adept-iq/models/avlm-emergency-message.js","adept-iq/models/avlm-event.js","adept-iq/models/avlm-phone-number.js","adept-iq/models/avlm-rider-event.js","adept-iq/models/avlm-rider.js","adept-iq/models/avlm-route-break.js","adept-iq/models/avlm-route-vehicle-driver.js","adept-iq/models/avlm-route.js","adept-iq/models/avlm-schedule.js","adept-iq/models/avlm-stop-point.js","adept-iq/models/avlm-trip-rider-attribute.js","adept-iq/models/avlm-trip-rider.js","adept-iq/models/avlm-trip.js","adept-iq/models/avlm-vehicle-event.js","adept-iq/models/avlm-vehicle-info.js","adept-iq/models/avlm-vehicle-radius.js","adept-iq/models/avlm-vehicle.js","adept-iq/models/avlm-zone.js","adept-iq/models/booking-activity-log-type.js","adept-iq/models/booking.js","adept-iq/models/break-type.js","adept-iq/models/breakdown-type.js","adept-iq/models/cancel-type.js","adept-iq/models/cancellation.js","adept-iq/models/classification-name.js","adept-iq/models/cluster.js","adept-iq/models/cs-config-category.js","adept-iq/models/cs-config-file.js","adept-iq/models/cs-config-item.js","adept-iq/models/cs-config-permission.js","adept-iq/models/cs-eligibility-category.js","adept-iq/models/cs-eligibility-type.js","adept-iq/models/cs-exam-type-name.js","adept-iq/models/cs-manufacturer-name.js","adept-iq/models/cs-passenger-type.js","adept-iq/models/cs-rider-place-type.js","adept-iq/models/cs-travel-need-type.js","adept-iq/models/cs-vehicle-status-name.js","adept-iq/models/dashboard.js","adept-iq/models/dispatch-route.js","adept-iq/models/dispatch-schedule.js","adept-iq/models/driver-19-a-review.js","adept-iq/models/driver-accident.js","adept-iq/models/driver-attribute.js","adept-iq/models/driver-availability.js","adept-iq/models/driver-emergency-contact.js","adept-iq/models/driver-health.js","adept-iq/models/driver-license.js","adept-iq/models/driver-log.js","adept-iq/models/driver-phone-number.js","adept-iq/models/driver-physical-type-name.js","adept-iq/models/driver-position-name.js","adept-iq/models/driver-provider-note.js","adept-iq/models/driver-provider-notes.js","adept-iq/models/driver-provider.js","adept-iq/models/driver-state-event.js","adept-iq/models/driver-suspension.js","adept-iq/models/driver-violation.js","adept-iq/models/driver.js","adept-iq/models/dwh-route.js","adept-iq/models/dwh-stop-point.js","adept-iq/models/dwh-trip.js","adept-iq/models/eligibility-category.js","adept-iq/models/eligibility-condition.js","adept-iq/models/eligibility-type.js","adept-iq/models/employment-status-name.js","adept-iq/models/etanav-route-break.js","adept-iq/models/etanav-route.js","adept-iq/models/etanav-stop-point.js","adept-iq/models/event.js","adept-iq/models/exam-type-name.js","adept-iq/models/fare-category.js","adept-iq/models/fare-type.js","adept-iq/models/funding-agency.js","adept-iq/models/generated-subscription-booking.js","adept-iq/models/group.js","adept-iq/models/inspection-category.js","adept-iq/models/inspector-name.js","adept-iq/models/internal-ui-config.js","adept-iq/models/invitation.js","adept-iq/models/lease-company.js","adept-iq/models/leg-service-need.js","adept-iq/models/leg-travel-need.js","adept-iq/models/leg.js","adept-iq/models/location.js","adept-iq/models/lock.js","adept-iq/models/maintenance-location-name.js","adept-iq/models/maintenance-status-name.js","adept-iq/models/maintenance-type-name.js","adept-iq/models/manufacturer-name.js","adept-iq/models/metric.js","adept-iq/models/modal.js","adept-iq/models/multientry-catchall.js","adept-iq/models/navigation-info.js","adept-iq/models/no-show-reason-category.js","adept-iq/models/no-show-reason-code.js","adept-iq/models/no-show.js","adept-iq/models/packet.js","adept-iq/models/passenger-type.js","adept-iq/models/perm-sso-role.js","adept-iq/models/perm-sso-user.js","adept-iq/models/place-category-type.js","adept-iq/models/place-type.js","adept-iq/models/place.js","adept-iq/models/playback-driver.js","adept-iq/models/playback-route.js","adept-iq/models/playback-vehicle.js","adept-iq/models/polyline.js","adept-iq/models/problem-identified-name.js","adept-iq/models/provider-type.js","adept-iq/models/provider.js","adept-iq/models/rear-axel-name.js","adept-iq/models/reconcile-address.js","adept-iq/models/reconcile-component.js","adept-iq/models/reconcile-driver.js","adept-iq/models/reconcile-passenger.js","adept-iq/models/reconcile-price.js","adept-iq/models/reconcile-route-id.js","adept-iq/models/reconcile-route.js","adept-iq/models/reconcile-stop.js","adept-iq/models/reconcile-trip.js","adept-iq/models/reconcile-used-attribute.js","adept-iq/models/reconcile-vehicle.js","adept-iq/models/reconcile-verify-route.js","adept-iq/models/report-list.js","adept-iq/models/rider-certification.js","adept-iq/models/rider-contact-info.js","adept-iq/models/rider-eligibility.js","adept-iq/models/rider-external-eligibility.js","adept-iq/models/rider-external.js","adept-iq/models/rider-funding.js","adept-iq/models/rider-phone-number.js","adept-iq/models/rider-place-type.js","adept-iq/models/rider-place.js","adept-iq/models/rider-service-need.js","adept-iq/models/rider-suspension.js","adept-iq/models/rider-travel-need.js","adept-iq/models/rider.js","adept-iq/models/road-call-code-name.js","adept-iq/models/road-call-code.js","adept-iq/models/road-supervisor-vehicle.js","adept-iq/models/role-permission.js","adept-iq/models/route-activity-log-type.js","adept-iq/models/route-break.js","adept-iq/models/route-calendar.js","adept-iq/models/route-exec-event.js","adept-iq/models/route-shape.js","adept-iq/models/route-template-availability.js","adept-iq/models/route-template.js","adept-iq/models/route-vehicle-driver.js","adept-iq/models/route.js","adept-iq/models/schedule-configuration.js","adept-iq/models/schedule-polyline.js","adept-iq/models/schedule.js","adept-iq/models/segment-stop-phone-number.js","adept-iq/models/segment-stop.js","adept-iq/models/segment.js","adept-iq/models/service-need-type.js","adept-iq/models/service-window.js","adept-iq/models/shift-break.js","adept-iq/models/speed-region-address.js","adept-iq/models/speed-region-group.js","adept-iq/models/speed-region.js","adept-iq/models/sso-permission.js","adept-iq/models/sso-role.js","adept-iq/models/sso-user.js","adept-iq/models/stop-point.js","adept-iq/models/subscription-activity-log-type.js","adept-iq/models/subscription-exclusion.js","adept-iq/models/subscription-group.js","adept-iq/models/subscription-phone-number.js","adept-iq/models/subscription-recurrence-pattern.js","adept-iq/models/subscription-service-need.js","adept-iq/models/subscription-travel-need.js","adept-iq/models/subscription.js","adept-iq/models/system-config-type.js","adept-iq/models/termination-reason-name.js","adept-iq/models/travel-need-type.js","adept-iq/models/travel-need.js","adept-iq/models/trim-slack-contract-management.js","adept-iq/models/trip-activity-log-type.js","adept-iq/models/trip-purpose.js","adept-iq/models/trip-route-assignment.js","adept-iq/models/trip-stop.js","adept-iq/models/trip.js","adept-iq/models/user-activity-log-type.js","adept-iq/models/user-event.js","adept-iq/models/vehicle-activity-log-type.js","adept-iq/models/vehicle-availability.js","adept-iq/models/vehicle-body-type.js","adept-iq/models/vehicle-body-width.js","adept-iq/models/vehicle-breakdown.js","adept-iq/models/vehicle-capacity-config.js","adept-iq/models/vehicle-capacity-type.js","adept-iq/models/vehicle-chassis.js","adept-iq/models/vehicle-dot-inspection.js","adept-iq/models/vehicle-equipment.js","adept-iq/models/vehicle-event.js","adept-iq/models/vehicle-fuel-cap.js","adept-iq/models/vehicle-fuel-type.js","adept-iq/models/vehicle-maintenance.js","adept-iq/models/vehicle-model-name.js","adept-iq/models/vehicle-road-call.js","adept-iq/models/vehicle-status-name.js","adept-iq/models/vehicle-tire-size.js","adept-iq/models/vehicle-transmission.js","adept-iq/models/vehicle-type.js","adept-iq/models/vehicle-wc-lift-type.js","adept-iq/models/vehicle-wheelbase-type.js","adept-iq/models/vehicle.js","adept-iq/models/widget-config.js","adept-iq/models/zip-code.js","adept-iq/models/zone-type.js","adept-iq/models/zone.js","adept-iq/modifiers/did-insert.js","adept-iq/modifiers/did-update.js","adept-iq/modifiers/sortable-group.js","adept-iq/modifiers/sortable-handle.js","adept-iq/modifiers/sortable-item.js","adept-iq/modifiers/will-destroy.js","adept-iq/pods/application/controller.js","adept-iq/pods/application/route.js","adept-iq/pods/application/template.js","adept-iq/pods/change-password-confirmation/route.js","adept-iq/pods/change-password-confirmation/template.js","adept-iq/pods/change-password/controller.js","adept-iq/pods/change-password/route.js","adept-iq/pods/change-password/template.js","adept-iq/pods/components/about-adept/component.js","adept-iq/pods/components/about-adept/template.js","adept-iq/pods/components/action-modal/component.js","adept-iq/pods/components/action-modal/template.js","adept-iq/pods/components/adhoc-reports-widget/component.js","adept-iq/pods/components/adhoc-reports-widget/template.js","adept-iq/pods/components/change-password-form/component.js","adept-iq/pods/components/change-password-form/template.js","adept-iq/pods/components/close-schedule/component.js","adept-iq/pods/components/close-schedule/template.js","adept-iq/pods/components/dashboard-edit-as/component.js","adept-iq/pods/components/dashboard-edit-as/template.js","adept-iq/pods/components/dashboard-picker/component.js","adept-iq/pods/components/dashboard-picker/template.js","adept-iq/pods/components/dashboard-save-as/component.js","adept-iq/pods/components/dashboard-save-as/template.js","adept-iq/pods/components/dropdown-provider/component.js","adept-iq/pods/components/dropdown-provider/template.js","adept-iq/pods/components/ember-chart-fix/component.js","adept-iq/pods/components/forgot-form/component.js","adept-iq/pods/components/forgot-form/template.js","adept-iq/pods/components/form-components/activity-log-entry/component.js","adept-iq/pods/components/form-components/activity-log-entry/enum/component.js","adept-iq/pods/components/form-components/activity-log-entry/enum/template.js","adept-iq/pods/components/form-components/activity-log-entry/section/component.js","adept-iq/pods/components/form-components/activity-log-entry/section/template.js","adept-iq/pods/components/form-components/activity-log-entry/template.js","adept-iq/pods/components/form-components/activity-log-entry/text-area/component.js","adept-iq/pods/components/form-components/activity-log-entry/text-area/template.js","adept-iq/pods/components/form-components/address-place-search/component.js","adept-iq/pods/components/form-components/address-place-search/template.js","adept-iq/pods/components/form-components/address-search/component.js","adept-iq/pods/components/form-components/address-search/template.js","adept-iq/pods/components/form-components/address-vehicle-place-search/component.js","adept-iq/pods/components/form-components/address-vehicle-place-search/template.js","adept-iq/pods/components/form-components/addresses/component.js","adept-iq/pods/components/form-components/addresses/template.js","adept-iq/pods/components/form-components/availabilities/component.js","adept-iq/pods/components/form-components/availabilities/template.js","adept-iq/pods/components/form-components/boolean-slider/component.js","adept-iq/pods/components/form-components/boolean-slider/template.js","adept-iq/pods/components/form-components/boolean/component.js","adept-iq/pods/components/form-components/boolean/template.js","adept-iq/pods/components/form-components/breakdown-location/component.js","adept-iq/pods/components/form-components/breakdown-location/template.js","adept-iq/pods/components/form-components/bs-subscriptions/component.js","adept-iq/pods/components/form-components/bs-subscriptions/template.js","adept-iq/pods/components/form-components/bs-travel-needs/component.js","adept-iq/pods/components/form-components/bs-travel-needs/template.js","adept-iq/pods/components/form-components/checkbox/template.js","adept-iq/pods/components/form-components/combobox/component.js","adept-iq/pods/components/form-components/combobox/template.js","adept-iq/pods/components/form-components/date/component.js","adept-iq/pods/components/form-components/date/template.js","adept-iq/pods/components/form-components/dateflatpickr/component.js","adept-iq/pods/components/form-components/dateflatpickr/template.js","adept-iq/pods/components/form-components/datetime/component.js","adept-iq/pods/components/form-components/datetime/template.js","adept-iq/pods/components/form-components/datetimeflatpickr/component.js","adept-iq/pods/components/form-components/datetimeflatpickr/template.js","adept-iq/pods/components/form-components/driverenum/component.js","adept-iq/pods/components/form-components/driverenum/template.js","adept-iq/pods/components/form-components/eligibilities/component.js","adept-iq/pods/components/form-components/eligibilities/template.js","adept-iq/pods/components/form-components/enum/component.js","adept-iq/pods/components/form-components/enum/template.js","adept-iq/pods/components/form-components/location-pick/component.js","adept-iq/pods/components/form-components/location-pick/template.js","adept-iq/pods/components/form-components/locations/component.js","adept-iq/pods/components/form-components/multi-select-dropdown/component.js","adept-iq/pods/components/form-components/multi-select-dropdown/template.js","adept-iq/pods/components/form-components/multientry/component.js","adept-iq/pods/components/form-components/multientry/template.js","adept-iq/pods/components/form-components/number-mask/component.js","adept-iq/pods/components/form-components/number-mask/template.js","adept-iq/pods/components/form-components/number/component.js","adept-iq/pods/components/form-components/number/template.js","adept-iq/pods/components/form-components/on-board-trips/component.js","adept-iq/pods/components/form-components/on-board-trips/template.js","adept-iq/pods/components/form-components/permission/component.js","adept-iq/pods/components/form-components/permission/template.js","adept-iq/pods/components/form-components/places/component.js","adept-iq/pods/components/form-components/playback-address-search/component.js","adept-iq/pods/components/form-components/playback-address-search/template.js","adept-iq/pods/components/form-components/quick-filters/component.js","adept-iq/pods/components/form-components/quick-filters/template.js","adept-iq/pods/components/form-components/routeenum/component.js","adept-iq/pods/components/form-components/routeenum/template.js","adept-iq/pods/components/form-components/scheduleavailabilities/component.js","adept-iq/pods/components/form-components/scheduleavailabilities/template.js","adept-iq/pods/components/form-components/searchable-enum/component.js","adept-iq/pods/components/form-components/searchable-enum/template.js","adept-iq/pods/components/form-components/select/component.js","adept-iq/pods/components/form-components/select/template.js","adept-iq/pods/components/form-components/shift-breaks/component.js","adept-iq/pods/components/form-components/shift-breaks/template.js","adept-iq/pods/components/form-components/text-area/component.js","adept-iq/pods/components/form-components/text-area/template.js","adept-iq/pods/components/form-components/text-mask/component.js","adept-iq/pods/components/form-components/text-mask/template.js","adept-iq/pods/components/form-components/text/component.js","adept-iq/pods/components/form-components/text/template.js","adept-iq/pods/components/form-components/time/component.js","adept-iq/pods/components/form-components/time/template.js","adept-iq/pods/components/form-components/timeflatpickr/component.js","adept-iq/pods/components/form-components/timeflatpickr/template.js","adept-iq/pods/components/form-components/travel-needs/component.js","adept-iq/pods/components/form-components/travel-needs/template.js","adept-iq/pods/components/form-components/vehicle-selection/component.js","adept-iq/pods/components/form-components/vehicle-selection/config.js","adept-iq/pods/components/form-components/vehicle-selection/template.js","adept-iq/pods/components/form-components/vehicle-selection/vehicle-cell/component.js","adept-iq/pods/components/form-components/vehicle-selection/vehicle-cell/template.js","adept-iq/pods/components/form-components/vehicle-selection/vehicle-header/component.js","adept-iq/pods/components/form-components/vehicle-selection/vehicle-header/template.js","adept-iq/pods/components/form-components/vehicle-selection/vehicle-row/component.js","adept-iq/pods/components/form-components/vehicleenum/component.js","adept-iq/pods/components/form-components/vehicleenum/template.js","adept-iq/pods/components/generic-components/availabilities/component.js","adept-iq/pods/components/generic-components/availabilities/template.js","adept-iq/pods/components/generic-components/base-table/component.js","adept-iq/pods/components/generic-components/content-overlay/component.js","adept-iq/pods/components/generic-components/content-overlay/template.js","adept-iq/pods/components/generic-components/datetimeflatpickr/component.js","adept-iq/pods/components/generic-components/datetimeflatpickr/template.js","adept-iq/pods/components/generic-components/number-format/component.js","adept-iq/pods/components/generic-components/number-format/template.js","adept-iq/pods/components/generic-components/panel/component.js","adept-iq/pods/components/generic-components/panel/template.js","adept-iq/pods/components/generic-components/progress-bar/component.js","adept-iq/pods/components/generic-components/progress-bar/template.js","adept-iq/pods/components/generic-components/ring-loader/component.js","adept-iq/pods/components/generic-components/ring-loader/template.js","adept-iq/pods/components/generic-components/solution-preview-table/component.js","adept-iq/pods/components/generic-components/solution-preview-table/template.js","adept-iq/pods/components/generic-components/tab-group/component.js","adept-iq/pods/components/generic-components/tab-group/tab-button/component.js","adept-iq/pods/components/generic-components/tab-group/tab-button/template.js","adept-iq/pods/components/generic-components/tab-group/template.js","adept-iq/pods/components/generic-components/table/cells/base-cell/component.js","adept-iq/pods/components/generic-components/table/cells/base-cell/template.js","adept-iq/pods/components/generic-components/table/cells/check-box/component.js","adept-iq/pods/components/generic-components/table/cells/check-box/template.js","adept-iq/pods/components/generic-components/table/cells/date-cell/component.js","adept-iq/pods/components/generic-components/table/cells/date-cell/template.js","adept-iq/pods/components/generic-components/table/cells/radio-button/component.js","adept-iq/pods/components/generic-components/table/cells/radio-button/template.js","adept-iq/pods/components/generic-components/table/cells/text-extension/component.js","adept-iq/pods/components/generic-components/table/cells/text-extension/template.js","adept-iq/pods/components/generic-components/table/classes/checkbox-row.js","adept-iq/pods/components/generic-components/table/classes/sort-column.js","adept-iq/pods/components/generic-components/table/columns/base-column/component.js","adept-iq/pods/components/generic-components/table/columns/check-box/component.js","adept-iq/pods/components/generic-components/table/columns/check-box/template.js","adept-iq/pods/components/generic-components/table/columns/sort-capable/component.js","adept-iq/pods/components/generic-components/table/columns/sort-capable/template.js","adept-iq/pods/components/generic-components/table/component.js","adept-iq/pods/components/generic-components/table/rows/base-row/component.js","adept-iq/pods/components/generic-components/table/rows/row/component.js","adept-iq/pods/components/generic-components/table/rows/row/template.js","adept-iq/pods/components/generic-components/table/template.js","adept-iq/pods/components/generic-components/vertical-menu/component.js","adept-iq/pods/components/generic-components/vertical-menu/item/component.js","adept-iq/pods/components/generic-components/vertical-menu/item/template.js","adept-iq/pods/components/generic-components/vertical-menu/template.js","adept-iq/pods/components/generic-widgets/base-widget/component.js","adept-iq/pods/components/generic-widgets/chartjs-widget/component.js","adept-iq/pods/components/generic-widgets/chartjs-widget/template.js","adept-iq/pods/components/generic-widgets/column-widget/classes/checkbox-row.js","adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column.js","adept-iq/pods/components/generic-widgets/column-widget/component.js","adept-iq/pods/components/generic-widgets/column-widget/template.js","adept-iq/pods/components/generic-widgets/dummy-widget/component.js","adept-iq/pods/components/generic-widgets/dummy-widget/template.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/availability-cell.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/base-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-check-box.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/cellrenderer.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/date-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/date-local-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/extra-spacer-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/fetch-util.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/grid-context-menu.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/gridwidget.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/header-cell.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/otp-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/otp-value-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/perform-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/portal.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/read-time-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/row-range-renderer.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/service-needs-cell.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/status-reason-cell.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/time-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/time-local-cell-item.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/tootip.js","adept-iq/pods/components/generic-widgets/ember-react-table/classes/travel-needs-cell.js","adept-iq/pods/components/generic-widgets/ember-react-table/component.js","adept-iq/pods/components/generic-widgets/ember-react-table/react-component.js","adept-iq/pods/components/generic-widgets/ember-react-widget/classes/checkbox-row.js","adept-iq/pods/components/generic-widgets/ember-react-widget/classes/filter-column.js","adept-iq/pods/components/generic-widgets/ember-react-widget/component.js","adept-iq/pods/components/generic-widgets/ember-react-widget/template.js","adept-iq/pods/components/generic-widgets/form-widget/component.js","adept-iq/pods/components/generic-widgets/form-widget/section/component.js","adept-iq/pods/components/generic-widgets/form-widget/section/template.js","adept-iq/pods/components/generic-widgets/form-widget/template.js","adept-iq/pods/components/generic-widgets/map-widget/component.js","adept-iq/pods/components/generic-widgets/map-widget/template.js","adept-iq/pods/components/generic-widgets/side-drawer/component.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-actions/component.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-body/component.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-header/component.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-header/template.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-panel/component.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-panel/template.js","adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-sub-header/component.js","adept-iq/pods/components/generic-widgets/side-drawer/template.js","adept-iq/pods/components/generic-widgets/tree-widget/component.js","adept-iq/pods/components/generic-widgets/tree-widget/template.js","adept-iq/pods/components/generic-widgets/tree-widget/tree-widget-row/component.js","adept-iq/pods/components/generic-widgets/tree-widget/tree-widget-row/template.js","adept-iq/pods/components/get-special-permission/component.js","adept-iq/pods/components/get-special-permission/template.js","adept-iq/pods/components/global-spinner/component.js","adept-iq/pods/components/global-spinner/template.js","adept-iq/pods/components/header-nav/component.js","adept-iq/pods/components/header-nav/template.js","adept-iq/pods/components/help-link/component.js","adept-iq/pods/components/help-link/template.js","adept-iq/pods/components/iq-widgets/add-route-form-widget/component.js","adept-iq/pods/components/iq-widgets/alert-widget/alerts-row/component.js","adept-iq/pods/components/iq-widgets/alert-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/alert-widget/component.js","adept-iq/pods/components/iq-widgets/alert-widget/config.js","adept-iq/pods/components/iq-widgets/bar-chart-widget/component.js","adept-iq/pods/components/iq-widgets/bar-chart-widget/template.js","adept-iq/pods/components/iq-widgets/booking-trips-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/component.js","adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/template.js","adept-iq/pods/components/iq-widgets/booking-trips-widget/component.js","adept-iq/pods/components/iq-widgets/booking-trips-widget/config.js","adept-iq/pods/components/iq-widgets/booking-widget/component.js","adept-iq/pods/components/iq-widgets/booking-widget/template.js","adept-iq/pods/components/iq-widgets/box-widget/box-metric/component.js","adept-iq/pods/components/iq-widgets/box-widget/box-metric/template.js","adept-iq/pods/components/iq-widgets/box-widget/component.js","adept-iq/pods/components/iq-widgets/box-widget/template.js","adept-iq/pods/components/iq-widgets/breakdown-replacement-form-widget/component.js","adept-iq/pods/components/iq-widgets/breakdown-replacement-form-widget/config.js","adept-iq/pods/components/iq-widgets/cancel-booking-form/booking-details/component.js","adept-iq/pods/components/iq-widgets/cancel-booking-form/booking-details/template.js","adept-iq/pods/components/iq-widgets/cancel-booking-form/cancel-reason/component.js","adept-iq/pods/components/iq-widgets/cancel-booking-form/cancel-reason/template.js","adept-iq/pods/components/iq-widgets/cancel-booking-form/component.js","adept-iq/pods/components/iq-widgets/cancel-booking-form/template.js","adept-iq/pods/components/iq-widgets/cancel-subscription-trips/cancel-related-trips/component.js","adept-iq/pods/components/iq-widgets/cancel-subscription-trips/cancel-related-trips/template.js","adept-iq/pods/components/iq-widgets/cancel-subscription-trips/component.js","adept-iq/pods/components/iq-widgets/cancel-subscription-trips/subscription-information/component.js","adept-iq/pods/components/iq-widgets/cancel-subscription-trips/subscription-information/template.js","adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.js","adept-iq/pods/components/iq-widgets/cancel-type-form-widget/component.js","adept-iq/pods/components/iq-widgets/cancel-type-form-widget/config.js","adept-iq/pods/components/iq-widgets/column-widget/component.js","adept-iq/pods/components/iq-widgets/delete-booking-form/booking-details/component.js","adept-iq/pods/components/iq-widgets/delete-booking-form/booking-details/template.js","adept-iq/pods/components/iq-widgets/delete-booking-form/component.js","adept-iq/pods/components/iq-widgets/delete-booking-form/delete-reason/component.js","adept-iq/pods/components/iq-widgets/delete-booking-form/delete-reason/template.js","adept-iq/pods/components/iq-widgets/delete-booking-form/template.js","adept-iq/pods/components/iq-widgets/delete-subscriptions-form/cancel-related-trips/component.js","adept-iq/pods/components/iq-widgets/delete-subscriptions-form/cancel-related-trips/template.js","adept-iq/pods/components/iq-widgets/delete-subscriptions-form/component.js","adept-iq/pods/components/iq-widgets/delete-subscriptions-form/subscription-information/component.js","adept-iq/pods/components/iq-widgets/delete-subscriptions-form/subscription-information/template.js","adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.js","adept-iq/pods/components/iq-widgets/donut-chart-widget/component.js","adept-iq/pods/components/iq-widgets/donut-chart-widget/template.js","adept-iq/pods/components/iq-widgets/driver-breaks-form-widget/component.js","adept-iq/pods/components/iq-widgets/driver-breaks-form-widget/config.js","adept-iq/pods/components/iq-widgets/drivers-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/drivers-widget/component.js","adept-iq/pods/components/iq-widgets/drivers-widget/config.js","adept-iq/pods/components/iq-widgets/edit-trip-form-widget/component.js","adept-iq/pods/components/iq-widgets/edit-trip-form-widget/config.js","adept-iq/pods/components/iq-widgets/eligibility-restriction-warning/component.js","adept-iq/pods/components/iq-widgets/eligibility-restriction-warning/template.js","adept-iq/pods/components/iq-widgets/ember-react-playback/component.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/label-options.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/layer-options.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/legend-options.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/circleMarker.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/config.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/current-polyline.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/gpsPingLayer.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/marker.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/movingMarker.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/pinCursor.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/post-polyline.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/pre-polyline.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/regionWithRadius.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/stops-layer.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/backward.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/forward.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/pause.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/play.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/slider.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/speed.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/action-button.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/csv-file.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/filter-button.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/playback-table.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/search-button.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/table-filter.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback/loader.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/addressPicker.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/confirm-box.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/datetimePicker.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchByLocation.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchByVehicle.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchModeSwitcher.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer/index.js","adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer/shrink.js","adept-iq/pods/components/iq-widgets/ember-react-playback/context/api.js","adept-iq/pods/components/iq-widgets/ember-react-playback/context/map.js","adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel.js","adept-iq/pods/components/iq-widgets/ember-react-playback/context/session.js","adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/useOutsideCanceler.js","adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/usePrevious.js","adept-iq/pods/components/iq-widgets/ember-react-playback/react-component.js","adept-iq/pods/components/iq-widgets/ember-react-widget/component.js","adept-iq/pods/components/iq-widgets/form-widget/component.js","adept-iq/pods/components/iq-widgets/gauge-widget/component.js","adept-iq/pods/components/iq-widgets/gauge-widget/gauge-chart/component.js","adept-iq/pods/components/iq-widgets/gauge-widget/template.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/base-cell/component.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/base-cell/template.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/editable/component.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/editable/template.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/component.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/template.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/radio-button/component.js","adept-iq/pods/components/iq-widgets/history-routes-widget/cells/radio-button/template.js","adept-iq/pods/components/iq-widgets/history-routes-widget/component.js","adept-iq/pods/components/iq-widgets/history-routes-widget/config.js","adept-iq/pods/components/iq-widgets/history-routes-widget/stubs.js","adept-iq/pods/components/iq-widgets/history-routes-widget/table-header/component.js","adept-iq/pods/components/iq-widgets/history-routes-widget/table-header/template.js","adept-iq/pods/components/iq-widgets/history-routes-widget/template.js","adept-iq/pods/components/iq-widgets/map-widget/component.js","adept-iq/pods/components/iq-widgets/map-widget/config/arrow.js","adept-iq/pods/components/iq-widgets/map-widget/config/circle.js","adept-iq/pods/components/iq-widgets/map-widget/config/colors.js","adept-iq/pods/components/iq-widgets/map-widget/config/marker-highlight.js","adept-iq/pods/components/iq-widgets/map-widget/config/marker-leaflet.js","adept-iq/pods/components/iq-widgets/map-widget/config/marker.js","adept-iq/pods/components/iq-widgets/map-widget/config/patterns.js","adept-iq/pods/components/iq-widgets/map-widget/config/polygon.js","adept-iq/pods/components/iq-widgets/map-widget/config/polyline.js","adept-iq/pods/components/iq-widgets/map-widget/decorations/arrow.js","adept-iq/pods/components/iq-widgets/map-widget/template.js","adept-iq/pods/components/iq-widgets/message-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/message-widget/component.js","adept-iq/pods/components/iq-widgets/message-widget/config.js","adept-iq/pods/components/iq-widgets/metrics-column-widget/component.js","adept-iq/pods/components/iq-widgets/metrics-column-widget/template.js","adept-iq/pods/components/iq-widgets/navigation-widget/component.js","adept-iq/pods/components/iq-widgets/navigation-widget/config/colors.js","adept-iq/pods/components/iq-widgets/navigation-widget/config/markers.js","adept-iq/pods/components/iq-widgets/navigation-widget/config/polyline.js","adept-iq/pods/components/iq-widgets/navigation-widget/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/ada-eligibility/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/ada-eligibility/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/columnConfig.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/riders-trips-table/config.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/booking-map/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/leg-form/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/leg-form/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/passenger-list/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/passenger-list/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/selected-item-schedule/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/service-needs-form/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/service-needs-form/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/travel-needs/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/travel-needs/template.js","adept-iq/pods/components/iq-widgets/new-booking-form/trip-details-form/component.js","adept-iq/pods/components/iq-widgets/new-booking-form/trip-details-form/template.js","adept-iq/pods/components/iq-widgets/new-trip-form-widget/component.js","adept-iq/pods/components/iq-widgets/new-trip-form-widget/config.js","adept-iq/pods/components/iq-widgets/no-show-reason-code/component.js","adept-iq/pods/components/iq-widgets/no-show-reason-code/config.js","adept-iq/pods/components/iq-widgets/noshow-event-stop-form-widget/component.js","adept-iq/pods/components/iq-widgets/noshow-event-stop-form-widget/config.js","adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/component.js","adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/config.js","adept-iq/pods/components/iq-widgets/passengers-booking-widget/active-passenger-cell/component.js","adept-iq/pods/components/iq-widgets/passengers-booking-widget/active-passenger-cell/template.js","adept-iq/pods/components/iq-widgets/passengers-booking-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/passengers-booking-widget/component.js","adept-iq/pods/components/iq-widgets/passengers-booking-widget/config.js","adept-iq/pods/components/iq-widgets/passengers-form-widget/component.js","adept-iq/pods/components/iq-widgets/passengers-form-widget/config.js","adept-iq/pods/components/iq-widgets/passengers-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/passengers-widget/component.js","adept-iq/pods/components/iq-widgets/passengers-widget/config.js","adept-iq/pods/components/iq-widgets/passengers-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/permissions-roles-widget/component.js","adept-iq/pods/components/iq-widgets/permissions-roles-widget/config.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/component.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/config.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/base-cell/component.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/base-cell/template.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/check-box/component.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/check-box/template.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/base-column/component.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/check-box/component.js","adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/check-box/template.js","adept-iq/pods/components/iq-widgets/playback-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/playback-widget/check-box/component.js","adept-iq/pods/components/iq-widgets/playback-widget/check-box/template.js","adept-iq/pods/components/iq-widgets/playback-widget/component.js","adept-iq/pods/components/iq-widgets/playback-widget/config.js","adept-iq/pods/components/iq-widgets/playback-widget/table-header/component.js","adept-iq/pods/components/iq-widgets/playback-widget/table-header/template.js","adept-iq/pods/components/iq-widgets/playback-widget/template.js","adept-iq/pods/components/iq-widgets/previous-bookings-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/previous-bookings-widget/component.js","adept-iq/pods/components/iq-widgets/previous-bookings-widget/config.js","adept-iq/pods/components/iq-widgets/reconcile-routes-widget/component.js","adept-iq/pods/components/iq-widgets/reconcile-routes-widget/config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/template.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/client-config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/client-search-config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/template.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/template.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/template.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/config.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/template.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/table-header/component.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/table-header/template.js","adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/template.js","adept-iq/pods/components/iq-widgets/reconcile-stops-widget/component.js","adept-iq/pods/components/iq-widgets/reconcile-stops-widget/config.js","adept-iq/pods/components/iq-widgets/reconcile-trips-widget/component.js","adept-iq/pods/components/iq-widgets/reconcile-trips-widget/config.js","adept-iq/pods/components/iq-widgets/reconcile-verify-route/component.js","adept-iq/pods/components/iq-widgets/reconcile-verify-route/config.js","adept-iq/pods/components/iq-widgets/reconcile-verify-route/table-header/component.js","adept-iq/pods/components/iq-widgets/reconcile-verify-route/table-header/template.js","adept-iq/pods/components/iq-widgets/reconcile-verify-route/template.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/booking-details/component.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/booking-details/template.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/component.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/passenger-list/component.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/passenger-list/template.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/component.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/template.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/check-box/component.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/check-box/template.js","adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.js","adept-iq/pods/components/iq-widgets/reportlist-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/reportlist-widget/component.js","adept-iq/pods/components/iq-widgets/reportlist-widget/config.js","adept-iq/pods/components/iq-widgets/reportlist-widget/hyperlink-cell/component.js","adept-iq/pods/components/iq-widgets/reportlist-widget/hyperlink-cell/template.js","adept-iq/pods/components/iq-widgets/reportlist-widget/template.js","adept-iq/pods/components/iq-widgets/roles-form-widget/component.js","adept-iq/pods/components/iq-widgets/roles-form-widget/config.js","adept-iq/pods/components/iq-widgets/roles-widget/component.js","adept-iq/pods/components/iq-widgets/roles-widget/config.js","adept-iq/pods/components/iq-widgets/route-information-widget/component.js","adept-iq/pods/components/iq-widgets/route-information-widget/config.js","adept-iq/pods/components/iq-widgets/route-information-widget/template.js","adept-iq/pods/components/iq-widgets/routes-end-form-widget/component.js","adept-iq/pods/components/iq-widgets/routes-end-form-widget/config.js","adept-iq/pods/components/iq-widgets/routes-form-widget/component.js","adept-iq/pods/components/iq-widgets/routes-form-widget/config.js","adept-iq/pods/components/iq-widgets/routes-form-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/routes-start-form-widget/component.js","adept-iq/pods/components/iq-widgets/routes-start-form-widget/config.js","adept-iq/pods/components/iq-widgets/routes-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/routes-widget/component.js","adept-iq/pods/components/iq-widgets/routes-widget/config.js","adept-iq/pods/components/iq-widgets/routes-widget/routes-row/component.js","adept-iq/pods/components/iq-widgets/routes-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/scatter-chart-widget/component.js","adept-iq/pods/components/iq-widgets/scatter-chart-widget/template.js","adept-iq/pods/components/iq-widgets/schedule-column-widget/component.js","adept-iq/pods/components/iq-widgets/schedule-column-widget/config.js","adept-iq/pods/components/iq-widgets/stops-form-widget/component.js","adept-iq/pods/components/iq-widgets/stops-form-widget/config.js","adept-iq/pods/components/iq-widgets/stops-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/stops-widget/component.js","adept-iq/pods/components/iq-widgets/stops-widget/config.js","adept-iq/pods/components/iq-widgets/stops-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/stops-widget/stops-row/component.js","adept-iq/pods/components/iq-widgets/subscription-form/booking-map/component.js","adept-iq/pods/components/iq-widgets/subscription-form/component.js","adept-iq/pods/components/iq-widgets/subscription-form/leg-form/component.js","adept-iq/pods/components/iq-widgets/subscription-form/leg-form/template.js","adept-iq/pods/components/iq-widgets/subscription-form/passenger-list/component.js","adept-iq/pods/components/iq-widgets/subscription-form/passenger-list/template.js","adept-iq/pods/components/iq-widgets/subscription-form/service-needs-form/component.js","adept-iq/pods/components/iq-widgets/subscription-form/service-needs-form/template.js","adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/component.js","adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/config.js","adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/template.js","adept-iq/pods/components/iq-widgets/subscription-form/subscription-form/component.js","adept-iq/pods/components/iq-widgets/subscription-form/subscription-form/template.js","adept-iq/pods/components/iq-widgets/subscription-form/template.js","adept-iq/pods/components/iq-widgets/subscription-form/travel-needs/component.js","adept-iq/pods/components/iq-widgets/subscription-form/travel-needs/template.js","adept-iq/pods/components/iq-widgets/subscription-form/trip-details-form/component.js","adept-iq/pods/components/iq-widgets/subscription-form/trip-details-form/template.js","adept-iq/pods/components/iq-widgets/subscription-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/subscription-widget/component.js","adept-iq/pods/components/iq-widgets/subscription-widget/config.js","adept-iq/pods/components/iq-widgets/subscriptions-form-widget/component.js","adept-iq/pods/components/iq-widgets/subscriptions-form-widget/config.js","adept-iq/pods/components/iq-widgets/subscriptions-widget/component.js","adept-iq/pods/components/iq-widgets/subscriptions-widget/config.js","adept-iq/pods/components/iq-widgets/trips-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/trips-widget/component.js","adept-iq/pods/components/iq-widgets/trips-widget/config.js","adept-iq/pods/components/iq-widgets/trips-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/users-form-widget/component.js","adept-iq/pods/components/iq-widgets/users-form-widget/config.js","adept-iq/pods/components/iq-widgets/users-widget/component.js","adept-iq/pods/components/iq-widgets/users-widget/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/vehicle-search-config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/availability/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/availability/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/health/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/health/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/driver-violation-search-config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/vehicle-search-config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/19a-review/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/19a-review/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-accident/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-accident/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-log/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-log/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-provider-notes/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-provider-notes/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-providers/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-providers/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-suspensions/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-suspensions/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-violations/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-violations/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/body-width-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/body-type-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/category-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/chassis-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/fuel-cap-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-group-table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-group-table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/table/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/table/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/availability/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/availability/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/dot-inspection-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/equipment-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/maintenance-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-driver-search-config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-route-search-config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/template.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/validation.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/dot-inspection/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/dot-inspection/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/equipment/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/equipment/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/maintenance/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/maintenance/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/road-call/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/road-call/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/vehicle/component.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/vehicle/config.js","adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/template.js","adept-iq/pods/components/iq-widgets/vehicle-event-form-widget/component.js","adept-iq/pods/components/iq-widgets/vehicle-event-form-widget/config.js","adept-iq/pods/components/iq-widgets/vehicle-events-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/vehicle-events-widget/component.js","adept-iq/pods/components/iq-widgets/vehicle-events-widget/config.js","adept-iq/pods/components/iq-widgets/vehicle-events-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/vehicle-events-widget/stops-row/component.js","adept-iq/pods/components/iq-widgets/vehicles-breakdown-form-widget/component.js","adept-iq/pods/components/iq-widgets/vehicles-breakdown-form-widget/config.js","adept-iq/pods/components/iq-widgets/vehicles-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/vehicles-widget/component.js","adept-iq/pods/components/iq-widgets/vehicles-widget/config.js","adept-iq/pods/components/iq-widgets/vehicles-widget/scheduleConfig.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/component.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/template.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/columnConfig.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/component.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-request-details/component.js","adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-request-details/template.js","adept-iq/pods/components/iq-widgets/zones-widget/avlmConfig.js","adept-iq/pods/components/iq-widgets/zones-widget/component.js","adept-iq/pods/components/iq-widgets/zones-widget/config.js","adept-iq/pods/components/login-form/component.js","adept-iq/pods/components/login-form/template.js","adept-iq/pods/components/maximize-widget/component.js","adept-iq/pods/components/maximize-widget/template.js","adept-iq/pods/components/notification-bar/component.js","adept-iq/pods/components/notification-bar/template.js","adept-iq/pods/components/reconcile-column-editor/component.js","adept-iq/pods/components/reconcile-column-editor/config.js","adept-iq/pods/components/reconcile-column-editor/stubs.js","adept-iq/pods/components/reconcile-column-editor/template.js","adept-iq/pods/components/reconcile-search-passenger/active-passenger-cell/component.js","adept-iq/pods/components/reconcile-search-passenger/active-passenger-cell/template.js","adept-iq/pods/components/reconcile-search-passenger/component.js","adept-iq/pods/components/reconcile-search-passenger/config.js","adept-iq/pods/components/reconcile-search-passenger/table-header/component.js","adept-iq/pods/components/reconcile-search-passenger/table-header/template.js","adept-iq/pods/components/reconcile-search-passenger/template.js","adept-iq/pods/components/reconcile-unscheduled-trips/component.js","adept-iq/pods/components/reconcile-unscheduled-trips/config.js","adept-iq/pods/components/reconcile-unscheduled-trips/table-header/component.js","adept-iq/pods/components/reconcile-unscheduled-trips/table-header/template.js","adept-iq/pods/components/reconcile-unscheduled-trips/template.js","adept-iq/pods/components/register-form/component.js","adept-iq/pods/components/register-form/template.js","adept-iq/pods/components/reoptimize-inprogress/component.js","adept-iq/pods/components/reoptimize-inprogress/template.js","adept-iq/pods/components/reoptimize-modal/component.js","adept-iq/pods/components/reoptimize-modal/operation-list/component.js","adept-iq/pods/components/reoptimize-modal/operation-list/config.js","adept-iq/pods/components/reoptimize-modal/operation-list/template.js","adept-iq/pods/components/reoptimize-modal/operation-tables/adjust-driver-break-table/component.js","adept-iq/pods/components/reoptimize-modal/operation-tables/adjust-driver-break-table/config.js","adept-iq/pods/components/reoptimize-modal/operation-tables/consolidate-routes-table/component.js","adept-iq/pods/components/reoptimize-modal/operation-tables/consolidate-routes-table/config.js","adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-provider-table/component.js","adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-provider-table/config.js","adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-table/component.js","adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-table/config.js","adept-iq/pods/components/reoptimize-modal/operation-tables/remove-driver-break-table/component.js","adept-iq/pods/components/reoptimize-modal/operation-tables/remove-driver-break-table/config.js","adept-iq/pods/components/reoptimize-modal/operation-tables/trim-slack-table/component.js","adept-iq/pods/components/reoptimize-modal/operation-tables/trim-slack-table/config.js","adept-iq/pods/components/reoptimize-modal/operation-views/adjust-driver-break/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/adjust-driver-break/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/consolidate-routes/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/consolidate-routes/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/illegal-to-waitlist/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/illegal-to-waitlist/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/open-zones/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/open-zones/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/recover-schedule/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/recover-schedule/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/release-routes/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/release-routes/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/remove-driver-break/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/remove-driver-break/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/table/provider/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/table/provider/config.js","adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/template.js","adept-iq/pods/components/reoptimize-modal/operation-views/trim-slack/component.js","adept-iq/pods/components/reoptimize-modal/operation-views/trim-slack/template.js","adept-iq/pods/components/reoptimize-modal/template.js","adept-iq/pods/components/reports-widget/component.js","adept-iq/pods/components/reports-widget/template.js","adept-iq/pods/components/reset-form/component.js","adept-iq/pods/components/reset-form/template.js","adept-iq/pods/components/rider-management-widget/activity-log/table/component.js","adept-iq/pods/components/rider-management-widget/activity-log/table/config.js","adept-iq/pods/components/rider-management-widget/component.js","adept-iq/pods/components/rider-management-widget/config.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/component.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/config.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/template.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/component.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/component.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/config.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/template.js","adept-iq/pods/components/rider-management-widget/rider-activity-log/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/appeal-process/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/appeal-process/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/approval-process/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/approval-process/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/certification-process/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/certification-process/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/config.js","adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/doctor-information/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/doctor-information/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/functional-assessment/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/functional-assessment/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/template.js","adept-iq/pods/components/rider-management-widget/rider-certification/verification/component.js","adept-iq/pods/components/rider-management-widget/rider-certification/verification/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/config.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/states.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-map/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-image-dialog/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-image-dialog/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-phone-number-dialog/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/new-phone-number-dialog/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/config.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-form/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-form/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/config.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/component.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/config.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/template.js","adept-iq/pods/components/rider-management-widget/rider-contact-information/validation.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/component.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-form-modal-dialog/component.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-form-modal-dialog/template.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/component.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/config.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/template.js","adept-iq/pods/components/rider-management-widget/rider-eligibility/template.js","adept-iq/pods/components/rider-management-widget/rider-funding/component.js","adept-iq/pods/components/rider-management-widget/rider-funding/funding-table/component.js","adept-iq/pods/components/rider-management-widget/rider-funding/funding-table/config.js","adept-iq/pods/components/rider-management-widget/rider-funding/template.js","adept-iq/pods/components/rider-management-widget/rider-modal-search/component.js","adept-iq/pods/components/rider-management-widget/rider-modal-search/rider-table/component.js","adept-iq/pods/components/rider-management-widget/rider-modal-search/rider-table/config.js","adept-iq/pods/components/rider-management-widget/rider-modal-search/template.js","adept-iq/pods/components/rider-management-widget/rider-notification/component.js","adept-iq/pods/components/rider-management-widget/rider-notification/template.js","adept-iq/pods/components/rider-management-widget/rider-suspension/component.js","adept-iq/pods/components/rider-management-widget/rider-suspension/suspension-table/component.js","adept-iq/pods/components/rider-management-widget/rider-suspension/suspension-table/config.js","adept-iq/pods/components/rider-management-widget/rider-suspension/template.js","adept-iq/pods/components/rider-management-widget/rider-travel-needs/component.js","adept-iq/pods/components/rider-management-widget/rider-travel-needs/table/component.js","adept-iq/pods/components/rider-management-widget/rider-travel-needs/table/config.js","adept-iq/pods/components/rider-management-widget/rider-travel-needs/template.js","adept-iq/pods/components/rider-management-widget/template.js","adept-iq/pods/components/road-supervisor-modal/component.js","adept-iq/pods/components/road-supervisor-modal/template.js","adept-iq/pods/components/schedule-generate-modal/component.js","adept-iq/pods/components/schedule-generate-modal/template.js","adept-iq/pods/components/search-modal/component.js","adept-iq/pods/components/search-modal/table/component.js","adept-iq/pods/components/search-modal/template.js","adept-iq/pods/components/secondary-window/component.js","adept-iq/pods/components/secondary-window/template.js","adept-iq/pods/components/side-drawer-container/component.js","adept-iq/pods/components/side-drawer-container/template.js","adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/config.js","adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.js","adept-iq/pods/components/side-drawer/activity-log/route-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/route-activity-log/config.js","adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.js","adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/config.js","adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.js","adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/config.js","adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.js","adept-iq/pods/components/side-drawer/activity-log/user-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/user-activity-log/config.js","adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.js","adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/component.js","adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/config.js","adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.js","adept-iq/pods/components/side-drawer/add-break/component.js","adept-iq/pods/components/side-drawer/add-break/config.js","adept-iq/pods/components/side-drawer/add-break/stubs.js","adept-iq/pods/components/side-drawer/add-break/template.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/component.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/config.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/component.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/template.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/check-box/component.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/check-box/template.js","adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.js","adept-iq/pods/components/side-drawer/add-edit-dispatch-route/component.js","adept-iq/pods/components/side-drawer/add-edit-dispatch-route/selected-item-schedule/template.js","adept-iq/pods/components/side-drawer/add-edit-dispatch-route/template.js","adept-iq/pods/components/side-drawer/add-edit-dispatch-route/zone-table/component.js","adept-iq/pods/components/side-drawer/add-edit-dispatch-route/zone-table/config.js","adept-iq/pods/components/side-drawer/add-edit-schedule-route/component.js","adept-iq/pods/components/side-drawer/add-edit-schedule-route/template.js","adept-iq/pods/components/side-drawer/add-edit-schedule-route/zone-table/component.js","adept-iq/pods/components/side-drawer/add-edit-schedule-route/zone-table/config.js","adept-iq/pods/components/side-drawer/add-new-message/component.js","adept-iq/pods/components/side-drawer/add-new-message/config.js","adept-iq/pods/components/side-drawer/add-new-message/template.js","adept-iq/pods/components/side-drawer/add-widget/component.js","adept-iq/pods/components/side-drawer/add-widget/template.js","adept-iq/pods/components/side-drawer/add-widget/widget-button-section/component.js","adept-iq/pods/components/side-drawer/add-widget/widget-button-section/template.js","adept-iq/pods/components/side-drawer/add-widget/widget-config-section/component.js","adept-iq/pods/components/side-drawer/add-widget/widget-config-section/template.js","adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/component.js","adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.js","adept-iq/pods/components/side-drawer/bar-chart-settings/component.js","adept-iq/pods/components/side-drawer/bar-chart-settings/config.js","adept-iq/pods/components/side-drawer/bar-chart-settings/template.js","adept-iq/pods/components/side-drawer/blockout-alternative-addresses/component.js","adept-iq/pods/components/side-drawer/blockout-alternative-addresses/template.js","adept-iq/pods/components/side-drawer/box-widget-settings/component.js","adept-iq/pods/components/side-drawer/box-widget-settings/config.js","adept-iq/pods/components/side-drawer/box-widget-settings/template.js","adept-iq/pods/components/side-drawer/bulk-trip-transfer/component.js","adept-iq/pods/components/side-drawer/bulk-trip-transfer/config.js","adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.js","adept-iq/pods/components/side-drawer/cancel-trip-form/cancel-related-trips/component.js","adept-iq/pods/components/side-drawer/cancel-trip-form/cancel-related-trips/template.js","adept-iq/pods/components/side-drawer/cancel-trip-form/component.js","adept-iq/pods/components/side-drawer/cancel-trip-form/config.js","adept-iq/pods/components/side-drawer/cancel-trip-form/template.js","adept-iq/pods/components/side-drawer/cancel-trip-form/validations.js","adept-iq/pods/components/side-drawer/compose-role/component.js","adept-iq/pods/components/side-drawer/compose-role/permission-section/component.js","adept-iq/pods/components/side-drawer/compose-role/permission-section/template.js","adept-iq/pods/components/side-drawer/compose-role/template.js","adept-iq/pods/components/side-drawer/compose-role/text/component.js","adept-iq/pods/components/side-drawer/compose-role/text/template.js","adept-iq/pods/components/side-drawer/donut-chart-settings/component.js","adept-iq/pods/components/side-drawer/donut-chart-settings/config.js","adept-iq/pods/components/side-drawer/donut-chart-settings/template.js","adept-iq/pods/components/side-drawer/edit-trip-widget/booking-map/component.js","adept-iq/pods/components/side-drawer/edit-trip-widget/component.js","adept-iq/pods/components/side-drawer/edit-trip-widget/config.js","adept-iq/pods/components/side-drawer/edit-trip-widget/template.js","adept-iq/pods/components/side-drawer/filter-settings/component.js","adept-iq/pods/components/side-drawer/filter-settings/template.js","adept-iq/pods/components/side-drawer/gauge-chart-settings/component.js","adept-iq/pods/components/side-drawer/gauge-chart-settings/config.js","adept-iq/pods/components/side-drawer/gauge-chart-settings/template.js","adept-iq/pods/components/side-drawer/map-filter/component.js","adept-iq/pods/components/side-drawer/map-filter/template.js","adept-iq/pods/components/side-drawer/map-label-preview/component.js","adept-iq/pods/components/side-drawer/map-label-preview/template.js","adept-iq/pods/components/side-drawer/map-label-settings/component.js","adept-iq/pods/components/side-drawer/map-label-settings/template.js","adept-iq/pods/components/side-drawer/map-legend-filter/component.js","adept-iq/pods/components/side-drawer/map-legend-filter/template.js","adept-iq/pods/components/side-drawer/no-show-form/component.js","adept-iq/pods/components/side-drawer/no-show-form/config.js","adept-iq/pods/components/side-drawer/no-show-form/enum/component.js","adept-iq/pods/components/side-drawer/no-show-form/enum/template.js","adept-iq/pods/components/side-drawer/no-show-form/template.js","adept-iq/pods/components/side-drawer/no-show-form/text-area/component.js","adept-iq/pods/components/side-drawer/no-show-form/text-area/template.js","adept-iq/pods/components/side-drawer/no-show-form/text/component.js","adept-iq/pods/components/side-drawer/no-show-form/text/template.js","adept-iq/pods/components/side-drawer/perform-stop/all/component.js","adept-iq/pods/components/side-drawer/perform-stop/all/template.js","adept-iq/pods/components/side-drawer/perform-stop/break/component.js","adept-iq/pods/components/side-drawer/perform-stop/break/container/component.js","adept-iq/pods/components/side-drawer/perform-stop/break/container/template.js","adept-iq/pods/components/side-drawer/perform-stop/break/template.js","adept-iq/pods/components/side-drawer/perform-stop/break/ui/component.js","adept-iq/pods/components/side-drawer/perform-stop/break/ui/config.js","adept-iq/pods/components/side-drawer/perform-stop/break/ui/template.js","adept-iq/pods/components/side-drawer/perform-stop/drop/component.js","adept-iq/pods/components/side-drawer/perform-stop/drop/container/component.js","adept-iq/pods/components/side-drawer/perform-stop/drop/container/template.js","adept-iq/pods/components/side-drawer/perform-stop/drop/template.js","adept-iq/pods/components/side-drawer/perform-stop/drop/ui/component.js","adept-iq/pods/components/side-drawer/perform-stop/drop/ui/template.js","adept-iq/pods/components/side-drawer/perform-stop/pick/component.js","adept-iq/pods/components/side-drawer/perform-stop/pick/container/component.js","adept-iq/pods/components/side-drawer/perform-stop/pick/container/template.js","adept-iq/pods/components/side-drawer/perform-stop/pick/template.js","adept-iq/pods/components/side-drawer/perform-stop/pick/travel-needs-picker/component.js","adept-iq/pods/components/side-drawer/perform-stop/pick/travel-needs-picker/template.js","adept-iq/pods/components/side-drawer/perform-stop/pick/ui/component.js","adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template.js","adept-iq/pods/components/side-drawer/permissions-add-role/component.js","adept-iq/pods/components/side-drawer/permissions-add-role/permission-section/component.js","adept-iq/pods/components/side-drawer/permissions-add-role/permission-section/template.js","adept-iq/pods/components/side-drawer/permissions-add-role/template.js","adept-iq/pods/components/side-drawer/permissions-add-role/text/component.js","adept-iq/pods/components/side-drawer/permissions-add-role/text/template.js","adept-iq/pods/components/side-drawer/permissions-add-user/component.js","adept-iq/pods/components/side-drawer/permissions-add-user/template.js","adept-iq/pods/components/side-drawer/permissions-edit-user/component.js","adept-iq/pods/components/side-drawer/permissions-edit-user/template.js","adept-iq/pods/components/side-drawer/permissions-filter-settings/component.js","adept-iq/pods/components/side-drawer/permissions-filter-settings/template.js","adept-iq/pods/components/side-drawer/playback-filter-settings/component.js","adept-iq/pods/components/side-drawer/playback-filter-settings/template.js","adept-iq/pods/components/side-drawer/reconcile-add-break/component.js","adept-iq/pods/components/side-drawer/reconcile-add-break/template.js","adept-iq/pods/components/side-drawer/reconcile-add-new-route/component.js","adept-iq/pods/components/side-drawer/reconcile-add-new-route/config.js","adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.js","adept-iq/pods/components/side-drawer/reconcile-add-new-trip/component.js","adept-iq/pods/components/side-drawer/reconcile-add-new-trip/stubs.js","adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.js","adept-iq/pods/components/side-drawer/reconcile-cancel-trip/component.js","adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.js","adept-iq/pods/components/side-drawer/reconcile-close-dates/component.js","adept-iq/pods/components/side-drawer/reconcile-close-dates/config.js","adept-iq/pods/components/side-drawer/reconcile-close-dates/stubs.js","adept-iq/pods/components/side-drawer/reconcile-close-dates/template.js","adept-iq/pods/components/side-drawer/reconcile-edit-trip/component.js","adept-iq/pods/components/side-drawer/reconcile-edit-trip/stubs.js","adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.js","adept-iq/pods/components/side-drawer/reconcile-filter-settings/component.js","adept-iq/pods/components/side-drawer/reconcile-filter-settings/template.js","adept-iq/pods/components/side-drawer/reconcile-noshow-trip/component.js","adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.js","adept-iq/pods/components/side-drawer/reconcile-reopen-dates/component.js","adept-iq/pods/components/side-drawer/reconcile-reopen-dates/config.js","adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.js","adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/component.js","adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/stubs.js","adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/component.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/config.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/stubs.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/base-cell/component.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/base-cell/template.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/check-box/component.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/check-box/template.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/base-column/component.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/check-box/component.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/check-box/template.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/row/component.js","adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.js","adept-iq/pods/components/side-drawer/reconcile-route-log/component.js","adept-iq/pods/components/side-drawer/reconcile-route-log/config.js","adept-iq/pods/components/side-drawer/reconcile-route-log/template.js","adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/component.js","adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/config.js","adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.js","adept-iq/pods/components/side-drawer/reconcile-trip-log/component.js","adept-iq/pods/components/side-drawer/reconcile-trip-log/config.js","adept-iq/pods/components/side-drawer/reconcile-trip-log/template.js","adept-iq/pods/components/side-drawer/reconcile-trip-transfer/component.js","adept-iq/pods/components/side-drawer/reconcile-trip-transfer/config.js","adept-iq/pods/components/side-drawer/reconcile-trip-transfer/stubs.js","adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.js","adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/component.js","adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template.js","adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/component.js","adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.js","adept-iq/pods/components/side-drawer/rescue-route/component.js","adept-iq/pods/components/side-drawer/rescue-route/config.js","adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/component.js","adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/template.js","adept-iq/pods/components/side-drawer/rescue-route/table/cells/check-box/component.js","adept-iq/pods/components/side-drawer/rescue-route/table/cells/check-box/template.js","adept-iq/pods/components/side-drawer/rescue-route/table/columns/base-column/component.js","adept-iq/pods/components/side-drawer/rescue-route/table/columns/check-box/component.js","adept-iq/pods/components/side-drawer/rescue-route/table/columns/check-box/template.js","adept-iq/pods/components/side-drawer/rescue-route/table/row/component.js","adept-iq/pods/components/side-drawer/rescue-route/template.js","adept-iq/pods/components/side-drawer/scatter-chart-settings/component.js","adept-iq/pods/components/side-drawer/scatter-chart-settings/config.js","adept-iq/pods/components/side-drawer/scatter-chart-settings/template.js","adept-iq/pods/components/side-drawer/scheduling-add-break/component.js","adept-iq/pods/components/side-drawer/scheduling-add-break/config.js","adept-iq/pods/components/side-drawer/scheduling-add-break/template.js","adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/component.js","adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/config.js","adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.js","adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/component.js","adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/config.js","adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.js","adept-iq/pods/components/side-drawer/scheduling-trip-transfer/component.js","adept-iq/pods/components/side-drawer/scheduling-trip-transfer/config.js","adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundaries-table/component.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundaries-table/config.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell/component.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell/template.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/component.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/config.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-map/component.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-map/template.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/component.js","adept-iq/pods/components/side-drawer/system-config/ada-boundaries/template.js","adept-iq/pods/components/side-drawer/system-config/component.js","adept-iq/pods/components/side-drawer/system-config/contract-management/component.js","adept-iq/pods/components/side-drawer/system-config/contract-management/table/component.js","adept-iq/pods/components/side-drawer/system-config/contract-management/table/config.js","adept-iq/pods/components/side-drawer/system-config/contract-management/template.js","adept-iq/pods/components/side-drawer/system-config/emergency-settings/component.js","adept-iq/pods/components/side-drawer/system-config/emergency-settings/template.js","adept-iq/pods/components/side-drawer/system-config/ivr/component.js","adept-iq/pods/components/side-drawer/system-config/ivr/day-hours-edit/component.js","adept-iq/pods/components/side-drawer/system-config/ivr/day-hours-edit/template.js","adept-iq/pods/components/side-drawer/system-config/ivr/messages.js","adept-iq/pods/components/side-drawer/system-config/ivr/template.js","adept-iq/pods/components/side-drawer/system-config/ivr/validation.js","adept-iq/pods/components/side-drawer/system-config/modals/break-days-action-modal/component.js","adept-iq/pods/components/side-drawer/system-config/modals/break-days-action-modal/template.js","adept-iq/pods/components/side-drawer/system-config/modals/driver-master/component.js","adept-iq/pods/components/side-drawer/system-config/modals/driver-master/config.js","adept-iq/pods/components/side-drawer/system-config/modals/driver-master/table/component.js","adept-iq/pods/components/side-drawer/system-config/modals/driver-master/table/config.js","adept-iq/pods/components/side-drawer/system-config/modals/driver-master/template.js","adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/component.js","adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/table/component.js","adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/table/config.js","adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/template.js","adept-iq/pods/components/side-drawer/system-config/places/component.js","adept-iq/pods/components/side-drawer/system-config/places/config.js","adept-iq/pods/components/side-drawer/system-config/places/table/component.js","adept-iq/pods/components/side-drawer/system-config/places/table/config.js","adept-iq/pods/components/side-drawer/system-config/places/template.js","adept-iq/pods/components/side-drawer/system-config/providers/component.js","adept-iq/pods/components/side-drawer/system-config/providers/table/component.js","adept-iq/pods/components/side-drawer/system-config/providers/table/config.js","adept-iq/pods/components/side-drawer/system-config/providers/template.js","adept-iq/pods/components/side-drawer/system-config/route-master/component.js","adept-iq/pods/components/side-drawer/system-config/route-master/driver-search-config.js","adept-iq/pods/components/side-drawer/system-config/route-master/table/component.js","adept-iq/pods/components/side-drawer/system-config/route-master/table/config.js","adept-iq/pods/components/side-drawer/system-config/route-master/template.js","adept-iq/pods/components/side-drawer/system-config/route-master/vehicle-search-config.js","adept-iq/pods/components/side-drawer/system-config/route-master/zone-table/component.js","adept-iq/pods/components/side-drawer/system-config/route-master/zone-table/config.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/component.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/config.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/speed-region-map/component.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/addresses/component.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/addresses/config.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-region-groups/component.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-region-groups/config.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-zones/component.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-zones/config.js","adept-iq/pods/components/side-drawer/system-config/speed-region-groups/template.js","adept-iq/pods/components/side-drawer/system-config/system-config-header/component.js","adept-iq/pods/components/side-drawer/system-config/system-config-header/template.js","adept-iq/pods/components/side-drawer/system-config/template.js","adept-iq/pods/components/side-drawer/trip-transfer/base-cell/component.js","adept-iq/pods/components/side-drawer/trip-transfer/base-cell/template.js","adept-iq/pods/components/side-drawer/trip-transfer/component.js","adept-iq/pods/components/side-drawer/trip-transfer/config.js","adept-iq/pods/components/side-drawer/trip-transfer/radio-button/component.js","adept-iq/pods/components/side-drawer/trip-transfer/radio-button/template.js","adept-iq/pods/components/side-drawer/trip-transfer/stubs.js","adept-iq/pods/components/side-drawer/trip-transfer/template.js","adept-iq/pods/components/side-drawer/unperform-break-stop/component.js","adept-iq/pods/components/side-drawer/unperform-break-stop/config.js","adept-iq/pods/components/side-drawer/unperform-break-stop/locations/component.js","adept-iq/pods/components/side-drawer/unperform-break-stop/locations/template.js","adept-iq/pods/components/side-drawer/unperform-break-stop/template.js","adept-iq/pods/components/side-drawer/unperform-drop-stop/component.js","adept-iq/pods/components/side-drawer/unperform-drop-stop/template.js","adept-iq/pods/components/side-drawer/unperform-no-show/component.js","adept-iq/pods/components/side-drawer/unperform-no-show/template.js","adept-iq/pods/components/side-drawer/unperform-pick-stop/component.js","adept-iq/pods/components/side-drawer/unperform-pick-stop/template.js","adept-iq/pods/components/table/cells/base-cell/component.js","adept-iq/pods/components/table/cells/base-cell/template.js","adept-iq/pods/components/table/cells/check-box/component.js","adept-iq/pods/components/table/cells/check-box/template.js","adept-iq/pods/components/table/cells/date-cell/component.js","adept-iq/pods/components/table/cells/date-cell/template.js","adept-iq/pods/components/table/cells/icon-cell/component.js","adept-iq/pods/components/table/cells/icon-cell/template.js","adept-iq/pods/components/table/cells/radio-button/component.js","adept-iq/pods/components/table/cells/radio-button/template.js","adept-iq/pods/components/table/cells/text-break/component.js","adept-iq/pods/components/table/cells/text-break/template.js","adept-iq/pods/components/table/cells/text-extension/component.js","adept-iq/pods/components/table/cells/text-extension/template.js","adept-iq/pods/components/table/cells/trip-eta/component.js","adept-iq/pods/components/table/cells/trip-eta/template.js","adept-iq/pods/components/table/cells/user-editable-enum/component.js","adept-iq/pods/components/table/cells/user-editable-enum/template.js","adept-iq/pods/components/table/cells/user-editable/component.js","adept-iq/pods/components/table/cells/user-editable/template.js","adept-iq/pods/components/table/columns/base-column/component.js","adept-iq/pods/components/table/columns/check-box/component.js","adept-iq/pods/components/table/columns/check-box/template.js","adept-iq/pods/components/table/columns/filter-capable/component.js","adept-iq/pods/components/table/columns/filter-capable/template.js","adept-iq/pods/components/table/rows/action-row/component.js","adept-iq/pods/components/table/rows/action-row/template.js","adept-iq/pods/components/table/rows/base-row/component.js","adept-iq/pods/components/table/rows/colored-row/component.js","adept-iq/pods/components/table/rows/text-formatted-row/component.js","adept-iq/pods/components/table/rows/zonestat-formatted-row/component.js","adept-iq/pods/components/tile-dashboard/component.js","adept-iq/pods/components/tile-dashboard/template.js","adept-iq/pods/components/timeline-picker/component.js","adept-iq/pods/components/timeline-picker/date-picker/component.js","adept-iq/pods/components/timeline-picker/date-picker/template.js","adept-iq/pods/components/timeline-picker/relative-time-input/component.js","adept-iq/pods/components/timeline-picker/relative-time-input/template.js","adept-iq/pods/components/timeline-picker/relative-time-picker/component.js","adept-iq/pods/components/timeline-picker/relative-time-picker/template.js","adept-iq/pods/components/timeline-picker/template.js","adept-iq/pods/components/timeline-picker/time-bar/component.js","adept-iq/pods/components/timeline-picker/time-bar/template.js","adept-iq/pods/components/timeline-picker/time-picker/component.js","adept-iq/pods/components/timeline-picker/time-picker/template.js","adept-iq/pods/components/toggle-switch/component.js","adept-iq/pods/components/toggle-switch/template.js","adept-iq/pods/components/wootric-survey/component.js","adept-iq/pods/components/wootric-survey/template.js","adept-iq/pods/components/workspace-navbar-reconcile-csv-only/component.js","adept-iq/pods/components/workspace-navbar-reconcile-csv-only/config.js","adept-iq/pods/components/workspace-navbar-reconcile-csv-only/template.js","adept-iq/pods/components/workspace-navbar-reconcile/component.js","adept-iq/pods/components/workspace-navbar-reconcile/stub.js","adept-iq/pods/components/workspace-navbar-reconcile/template.js","adept-iq/pods/components/workspace-navbar/component.js","adept-iq/pods/components/workspace-navbar/notification-results/component.js","adept-iq/pods/components/workspace-navbar/notification-results/notification-responses-table/component.js","adept-iq/pods/components/workspace-navbar/notification-results/notification-responses-table/config.js","adept-iq/pods/components/workspace-navbar/notification-results/template.js","adept-iq/pods/components/workspace-navbar/template.js","adept-iq/pods/dashboard-info/route.js","adept-iq/pods/dashboard-info/template.js","adept-iq/pods/dashboard/controller.js","adept-iq/pods/dashboard/modals/edit-form/controller.js","adept-iq/pods/dashboard/modals/edit-form/resize-handle/component.js","adept-iq/pods/dashboard/modals/edit-form/resize-handle/template.js","adept-iq/pods/dashboard/modals/edit-form/template.js","adept-iq/pods/dashboard/route.js","adept-iq/pods/dashboard/template.js","adept-iq/pods/forgot-password/controller.js","adept-iq/pods/forgot-password/route.js","adept-iq/pods/forgot-password/template.js","adept-iq/pods/index/index/route.js","adept-iq/pods/index/modals/create-dashboard/controller.js","adept-iq/pods/index/modals/create-dashboard/route.js","adept-iq/pods/index/modals/create-dashboard/template.js","adept-iq/pods/index/modals/settings/controller.js","adept-iq/pods/index/modals/settings/template.js","adept-iq/pods/login/controller.js","adept-iq/pods/login/route.js","adept-iq/pods/login/template.js","adept-iq/pods/register/controller.js","adept-iq/pods/register/route.js","adept-iq/pods/register/template.js","adept-iq/pods/require-new-password/controller.js","adept-iq/pods/require-new-password/route.js","adept-iq/pods/require-new-password/template.js","adept-iq/pods/reset-password/controller.js","adept-iq/pods/reset-password/route.js","adept-iq/pods/reset-password/template.js","adept-iq/resolver.js","adept-iq/router.js","adept-iq/routes/application.js","adept-iq/scenarios/avlm-core-service.js","adept-iq/scenarios/avlm-service.js","adept-iq/scenarios/booking-service.js","adept-iq/scenarios/config-service.js","adept-iq/scenarios/dispatch-service.js","adept-iq/scenarios/driver-service.js","adept-iq/scenarios/main.js","adept-iq/scenarios/rider-management-service.js","adept-iq/scenarios/scheduling-service.js","adept-iq/scenarios/sso-service.js","adept-iq/scenarios/subscription-booking-service.js","adept-iq/scenarios/vehicle-service.js","adept-iq/scenarios/zone-service.js","adept-iq/serializers/-ada-adaManagement.js","adept-iq/serializers/-address.js","adept-iq/serializers/-avlService.js","adept-iq/serializers/-avlm-avlmService.js","adept-iq/serializers/-bs-bookingService.js","adept-iq/serializers/-cos-continuousOptService.js","adept-iq/serializers/-cs-configService.js","adept-iq/serializers/-dispatch.js","adept-iq/serializers/-driver.js","adept-iq/serializers/-dwh-dwhService.js","adept-iq/serializers/-playbackService.js","adept-iq/serializers/-reconciliationService.js","adept-iq/serializers/-rms-riderManagement.js","adept-iq/serializers/-ss-schedulingService.js","adept-iq/serializers/-sso-ssoService.js","adept-iq/serializers/-vehicle.js","adept-iq/serializers/address.js","adept-iq/serializers/agency-marker.js","adept-iq/serializers/application.js","adept-iq/serializers/avlm-alert.js","adept-iq/serializers/avlm-canned-message-template.js","adept-iq/serializers/avlm-canned-message.js","adept-iq/serializers/avlm-driver-app.js","adept-iq/serializers/avlm-driver-state-event.js","adept-iq/serializers/avlm-emergency-message.js","adept-iq/serializers/avlm-rider.js","adept-iq/serializers/avlm-route-vehicle-driver.js","adept-iq/serializers/avlm-route.js","adept-iq/serializers/avlm-schedule.js","adept-iq/serializers/avlm-stop-point.js","adept-iq/serializers/avlm-trip-rider-attribute.js","adept-iq/serializers/avlm-trip-rider.js","adept-iq/serializers/avlm-trip.js","adept-iq/serializers/avlm-vehicle-event.js","adept-iq/serializers/avlm-vehicle-info.js","adept-iq/serializers/avlm-vehicle-radius.js","adept-iq/serializers/avlm-vehicle.js","adept-iq/serializers/avlm-zone.js","adept-iq/serializers/booking-activity-log-type.js","adept-iq/serializers/booking.js","adept-iq/serializers/break-type.js","adept-iq/serializers/breakdown-type.js","adept-iq/serializers/cancel-type.js","adept-iq/serializers/cancellation.js","adept-iq/serializers/classification-name.js","adept-iq/serializers/cluster.js","adept-iq/serializers/cs-config-category.js","adept-iq/serializers/cs-config-file.js","adept-iq/serializers/cs-config-item.js","adept-iq/serializers/cs-config-model.js","adept-iq/serializers/cs-config-permission.js","adept-iq/serializers/dashboard.js","adept-iq/serializers/dispatch-route.js","adept-iq/serializers/dispatch-schedule.js","adept-iq/serializers/driver-19-a-review.js","adept-iq/serializers/driver-accident.js","adept-iq/serializers/driver-attribute.js","adept-iq/serializers/driver-availability.js","adept-iq/serializers/driver-emergency-contact.js","adept-iq/serializers/driver-health.js","adept-iq/serializers/driver-license.js","adept-iq/serializers/driver-log.js","adept-iq/serializers/driver-phone-number.js","adept-iq/serializers/driver-physical-type-name.js","adept-iq/serializers/driver-position-name.js","adept-iq/serializers/driver-provider-note.js","adept-iq/serializers/driver-provider-notes.js","adept-iq/serializers/driver-provider.js","adept-iq/serializers/driver.js","adept-iq/serializers/dwh-route.js","adept-iq/serializers/dwh-stop-point.js","adept-iq/serializers/dwh-trip.js","adept-iq/serializers/eligibility-category.js","adept-iq/serializers/eligibility-condition.js","adept-iq/serializers/eligibility-type.js","adept-iq/serializers/employment-status-name.js","adept-iq/serializers/emplyoment-status-name.js","adept-iq/serializers/etanav-route-break.js","adept-iq/serializers/etanav-route.js","adept-iq/serializers/etanav-stop-point.js","adept-iq/serializers/event.js","adept-iq/serializers/exam-type-name.js","adept-iq/serializers/fare-category.js","adept-iq/serializers/fare-type.js","adept-iq/serializers/funding-agency.js","adept-iq/serializers/generated-subscription-booking.js","adept-iq/serializers/group.js","adept-iq/serializers/inspection-category.js","adept-iq/serializers/inspector-name.js","adept-iq/serializers/internal-ui-config.js","adept-iq/serializers/lease-company.js","adept-iq/serializers/leg-service-need.js","adept-iq/serializers/leg-travel-need.js","adept-iq/serializers/leg.js","adept-iq/serializers/location.js","adept-iq/serializers/lock.js","adept-iq/serializers/maintenance-location-name.js","adept-iq/serializers/maintenance-status-name.js","adept-iq/serializers/maintenance-type-name.js","adept-iq/serializers/manufacturer-name.js","adept-iq/serializers/metric.js","adept-iq/serializers/no-show-reason-category.js","adept-iq/serializers/no-show-reason-code.js","adept-iq/serializers/passenger-type.js","adept-iq/serializers/perm-sso-role.js","adept-iq/serializers/perm-sso-user.js","adept-iq/serializers/place-category-type.js","adept-iq/serializers/place.js","adept-iq/serializers/playback-driver.js","adept-iq/serializers/playback-route.js","adept-iq/serializers/playback-vehicle.js","adept-iq/serializers/polyline.js","adept-iq/serializers/problem-identified-name.js","adept-iq/serializers/provider-type.js","adept-iq/serializers/provider.js","adept-iq/serializers/rear-axel-name.js","adept-iq/serializers/reconcile-address.js","adept-iq/serializers/reconcile-driver.js","adept-iq/serializers/reconcile-passenger.js","adept-iq/serializers/reconcile-price.js","adept-iq/serializers/reconcile-route-id.js","adept-iq/serializers/reconcile-route.js","adept-iq/serializers/reconcile-stop.js","adept-iq/serializers/reconcile-trip.js","adept-iq/serializers/reconcile-used-attributes.js","adept-iq/serializers/reconcile-vehicle.js","adept-iq/serializers/reconcile-verify-route.js","adept-iq/serializers/rider-certification.js","adept-iq/serializers/rider-contact-info.js","adept-iq/serializers/rider-eligibility.js","adept-iq/serializers/rider-external-eligibility.js","adept-iq/serializers/rider-external.js","adept-iq/serializers/rider-funding.js","adept-iq/serializers/rider-phone-number.js","adept-iq/serializers/rider-place-type.js","adept-iq/serializers/rider-place.js","adept-iq/serializers/rider-service-need.js","adept-iq/serializers/rider-suspension.js","adept-iq/serializers/rider-travel-need.js","adept-iq/serializers/rider.js","adept-iq/serializers/road-call-code-name.js","adept-iq/serializers/role-permission.js","adept-iq/serializers/route-activity-log-type.js","adept-iq/serializers/route-break.js","adept-iq/serializers/route-exec-event.js","adept-iq/serializers/route-template-availability.js","adept-iq/serializers/route-template.js","adept-iq/serializers/route-vehicle-driver.js","adept-iq/serializers/route.js","adept-iq/serializers/schedule-configuration.js","adept-iq/serializers/schedule.js","adept-iq/serializers/segment-stop-phone-number.js","adept-iq/serializers/segment-stop.js","adept-iq/serializers/segment.js","adept-iq/serializers/service-need-type.js","adept-iq/serializers/service-window.js","adept-iq/serializers/shift-break.js","adept-iq/serializers/speed-region-group.js","adept-iq/serializers/ss-service-window.js","adept-iq/serializers/sso-permission.js","adept-iq/serializers/sso-role.js","adept-iq/serializers/sso-user.js","adept-iq/serializers/stop-point.js","adept-iq/serializers/subscription-activity-log-type.js","adept-iq/serializers/subscription-exclusion.js","adept-iq/serializers/subscription-group.js","adept-iq/serializers/subscription-phone-number.js","adept-iq/serializers/subscription-recurrence-pattern.js","adept-iq/serializers/subscription-service-need.js","adept-iq/serializers/subscription-travel-need.js","adept-iq/serializers/subscription.js","adept-iq/serializers/termination-reason-name.js","adept-iq/serializers/travel-need-type.js","adept-iq/serializers/trim-slack-contract-management.js","adept-iq/serializers/trip-activity-log-type.js","adept-iq/serializers/trip-purpose.js","adept-iq/serializers/trip-route-assignment.js","adept-iq/serializers/trip-stop.js","adept-iq/serializers/trip.js","adept-iq/serializers/user-activity-log-type.js","adept-iq/serializers/vehicle-activity-log-type.js","adept-iq/serializers/vehicle-availability.js","adept-iq/serializers/vehicle-body-type.js","adept-iq/serializers/vehicle-body-width.js","adept-iq/serializers/vehicle-breakdown.js","adept-iq/serializers/vehicle-capacity-config.js","adept-iq/serializers/vehicle-capacity-type.js","adept-iq/serializers/vehicle-chassis.js","adept-iq/serializers/vehicle-dot-inspection.js","adept-iq/serializers/vehicle-equipment.js","adept-iq/serializers/vehicle-event.js","adept-iq/serializers/vehicle-fuel-cap.js","adept-iq/serializers/vehicle-fuel-type.js","adept-iq/serializers/vehicle-maintenance.js","adept-iq/serializers/vehicle-model-name.js","adept-iq/serializers/vehicle-road-call.js","adept-iq/serializers/vehicle-route.js","adept-iq/serializers/vehicle-status-name.js","adept-iq/serializers/vehicle-tire-size.js","adept-iq/serializers/vehicle-transmission.js","adept-iq/serializers/vehicle-type.js","adept-iq/serializers/vehicle-wc-lift-type.js","adept-iq/serializers/vehicle-wheelbase-type.js","adept-iq/serializers/vehicle.js","adept-iq/serializers/zip-code.js","adept-iq/serializers/zone-type.js","adept-iq/serializers/zone.js","adept-iq/services/-in-viewport.js","adept-iq/services/active-context.js","adept-iq/services/ada-service.js","adept-iq/services/address.js","adept-iq/services/ajax.js","adept-iq/services/api-context.js","adept-iq/services/audio-alert.js","adept-iq/services/booking.js","adept-iq/services/cookies.js","adept-iq/services/core-entity-populator.js","adept-iq/services/drag-coordinator.js","adept-iq/services/dwh-service.js","adept-iq/services/edit-modal.js","adept-iq/services/fare-calc.js","adept-iq/services/fixed-route-engine.js","adept-iq/services/flash-messages.js","adept-iq/services/geocode.js","adept-iq/services/gps-manual.js","adept-iq/services/gps-simulation.js","adept-iq/services/gps.js","adept-iq/services/hifi-cache.js","adept-iq/services/hifi.js","adept-iq/services/interaction.js","adept-iq/services/locks.js","adept-iq/services/map.js","adept-iq/services/maximizer.js","adept-iq/services/media.js","adept-iq/services/modal-dialog.js","adept-iq/services/modal.js","adept-iq/services/moment.js","adept-iq/services/notification-initiation.js","adept-iq/services/notifications.js","adept-iq/services/permission-layer.js","adept-iq/services/poll.js","adept-iq/services/polyline.js","adept-iq/services/power-calendar.js","adept-iq/services/reconcile-lambda.js","adept-iq/services/reconcile.js","adept-iq/services/report.js","adept-iq/services/resize-detector.js","adept-iq/services/rider.js","adept-iq/services/road-supervisor.js","adept-iq/services/routeexecevent.js","adept-iq/services/schedule-generation.js","adept-iq/services/scheduler.js","adept-iq/services/scheduling.js","adept-iq/services/scrollbar-thickness.js","adept-iq/services/session.js","adept-iq/services/socket-io.js","adept-iq/services/socket.js","adept-iq/services/speech.js","adept-iq/services/stops-reorder.js","adept-iq/services/subscription-activitylog-generation.js","adept-iq/services/subscription.js","adept-iq/services/system-config.js","adept-iq/services/text-measurer.js","adept-iq/services/time-span.js","adept-iq/services/tooltip.js","adept-iq/services/user.js","adept-iq/services/websockets.js","adept-iq/services/widget.js","adept-iq/services/window-resize.js","adept-iq/services/work.js","adept-iq/services/workspace-context.js","adept-iq/services/workspace.js","adept-iq/session-stores/application.js","adept-iq/templates/components/ember-popper-targeting-parent.js","adept-iq/templates/components/ember-popper.js","adept-iq/tests/factories/address.js","adept-iq/tests/factories/avl-location.js","adept-iq/tests/factories/avlm-address.js","adept-iq/tests/factories/avlm-alert.js","adept-iq/tests/factories/avlm-attribute.js","adept-iq/tests/factories/avlm-canned-message-template.js","adept-iq/tests/factories/avlm-canned-message.js","adept-iq/tests/factories/avlm-cluster.js","adept-iq/tests/factories/avlm-driver-app.js","adept-iq/tests/factories/avlm-driver-state-event.js","adept-iq/tests/factories/avlm-driver.js","adept-iq/tests/factories/avlm-emergency-message.js","adept-iq/tests/factories/avlm-phone-number.js","adept-iq/tests/factories/avlm-rider-event.js","adept-iq/tests/factories/avlm-rider.js","adept-iq/tests/factories/avlm-route-break.js","adept-iq/tests/factories/avlm-route-vehicle-driver.js","adept-iq/tests/factories/avlm-route.js","adept-iq/tests/factories/avlm-schedule.js","adept-iq/tests/factories/avlm-stop-point.js","adept-iq/tests/factories/avlm-trip-rider-attribute.js","adept-iq/tests/factories/avlm-trip-rider.js","adept-iq/tests/factories/avlm-trip.js","adept-iq/tests/factories/avlm-vehicle-event.js","adept-iq/tests/factories/avlm-vehicle-info.js","adept-iq/tests/factories/avlm-vehicle.js","adept-iq/tests/factories/avlm-zone.js","adept-iq/tests/factories/booking.js","adept-iq/tests/factories/break-type.js","adept-iq/tests/factories/cancel-type.js","adept-iq/tests/factories/cancellation.js","adept-iq/tests/factories/cluster.js","adept-iq/tests/factories/cs-config-category.js","adept-iq/tests/factories/cs-config-item.js","adept-iq/tests/factories/cs-config-permission.js","adept-iq/tests/factories/dashboard.js","adept-iq/tests/factories/dispatch-route.js","adept-iq/tests/factories/dispatch-schedule.js","adept-iq/tests/factories/driver-attribute.js","adept-iq/tests/factories/driver-availability.js","adept-iq/tests/factories/driver-phone-number.js","adept-iq/tests/factories/driver.js","adept-iq/tests/factories/eligibility-type.js","adept-iq/tests/factories/etanav-route.js","adept-iq/tests/factories/etanav-stop-point.js","adept-iq/tests/factories/fare-type.js","adept-iq/tests/factories/generated-subscription-booking.js","adept-iq/tests/factories/group.js","adept-iq/tests/factories/leg-travel-need.js","adept-iq/tests/factories/leg.js","adept-iq/tests/factories/location.js","adept-iq/tests/factories/lock.js","adept-iq/tests/factories/metric.js","adept-iq/tests/factories/no-show-reason-code.js","adept-iq/tests/factories/no-show.js","adept-iq/tests/factories/passenger-type.js","adept-iq/tests/factories/place-category-type.js","adept-iq/tests/factories/place-type.js","adept-iq/tests/factories/place.js","adept-iq/tests/factories/polyline.js","adept-iq/tests/factories/provider.js","adept-iq/tests/factories/rider-eligibility.js","adept-iq/tests/factories/rider-phone-number.js","adept-iq/tests/factories/rider-place-type.js","adept-iq/tests/factories/rider-place.js","adept-iq/tests/factories/rider-travel-need.js","adept-iq/tests/factories/rider.js","adept-iq/tests/factories/route-break.js","adept-iq/tests/factories/route-template.js","adept-iq/tests/factories/route-vehicle-driver.js","adept-iq/tests/factories/route.js","adept-iq/tests/factories/schedule-configuration.js","adept-iq/tests/factories/schedule.js","adept-iq/tests/factories/segment-stop-phone-number.js","adept-iq/tests/factories/segment-stop.js","adept-iq/tests/factories/segment.js","adept-iq/tests/factories/service-window.js","adept-iq/tests/factories/shift-break.js","adept-iq/tests/factories/sso-permission.js","adept-iq/tests/factories/sso-role.js","adept-iq/tests/factories/sso-user.js","adept-iq/tests/factories/stop-point.js","adept-iq/tests/factories/subscription-exclusion.js","adept-iq/tests/factories/subscription-group.js","adept-iq/tests/factories/subscription-recurrence-pattern.js","adept-iq/tests/factories/subscription-travel-need.js","adept-iq/tests/factories/subscription.js","adept-iq/tests/factories/travel-need-type.js","adept-iq/tests/factories/trim-slack-contract-management.js","adept-iq/tests/factories/trip-route-assignment.js","adept-iq/tests/factories/trip-stop.js","adept-iq/tests/factories/trip.js","adept-iq/tests/factories/vehicle-availability.js","adept-iq/tests/factories/vehicle-capacity-config.js","adept-iq/tests/factories/vehicle-capacity-type.js","adept-iq/tests/factories/vehicle-type.js","adept-iq/tests/factories/vehicle.js","adept-iq/tests/factories/zone.js","adept-iq/topic-transforms/avlm-alert.js","adept-iq/topic-transforms/avlm-event.js","adept-iq/topic-transforms/avlm-message.js","adept-iq/topic-transforms/avlm-rider-event.js","adept-iq/topic-transforms/avlm-route-break.js","adept-iq/topic-transforms/avlm-route-exec-event.js","adept-iq/topic-transforms/avlm-route.js","adept-iq/topic-transforms/avlm-stop-point.js","adept-iq/topic-transforms/avlm-trip-rider.js","adept-iq/topic-transforms/avlm-trip.js","adept-iq/topic-transforms/driver.js","adept-iq/topic-transforms/eta-route.js","adept-iq/topic-transforms/lock.js","adept-iq/topic-transforms/polyline.js","adept-iq/topic-transforms/rider.js","adept-iq/topic-transforms/stop-point.js","adept-iq/topic-transforms/subscription.js","adept-iq/topic-transforms/trip.js","adept-iq/topic-transforms/user.js","adept-iq/topic-transforms/vehicle.js","adept-iq/transforms/array.js","adept-iq/transforms/fragment-array.js","adept-iq/transforms/fragment.js","adept-iq/transforms/guidance.js","adept-iq/transforms/iso-date.js","adept-iq/transforms/nested.js","adept-iq/transforms/object.js","adept-iq/transforms/polyline.js","adept-iq/transforms/ss-date.js","adept-iq/utils/availability.js","adept-iq/utils/batch-load-riders.js","adept-iq/utils/calculate-position.js","adept-iq/utils/compute-ordered-ids.js","adept-iq/utils/config-validator.js","adept-iq/utils/convertDateTime.js","adept-iq/utils/convertDistance.js","adept-iq/utils/css-transitions/has-transitions.js","adept-iq/utils/css-transitions/index.js","adept-iq/utils/css-transitions/on-transition-end.js","adept-iq/utils/datetime-filters.js","adept-iq/utils/dds-map.js","adept-iq/utils/encoding.js","adept-iq/utils/filter-functions.js","adept-iq/utils/filters.js","adept-iq/utils/find-row-record.js","adept-iq/utils/flattenData.js","adept-iq/utils/format-function.js","adept-iq/utils/format-text-extension.js","adept-iq/utils/generate-unique-id.js","adept-iq/utils/geolib.js","adept-iq/utils/get-bearing.js","adept-iq/utils/graph.js","adept-iq/utils/guid.js","adept-iq/utils/help-page-redirect.js","adept-iq/utils/isRouteAssignable.js","adept-iq/utils/location-validation.js","adept-iq/utils/map-provider.js","adept-iq/utils/mime-types.js","adept-iq/utils/mobile.js","adept-iq/utils/name-parser.js","adept-iq/utils/name-split.js","adept-iq/utils/number-to-words.js","adept-iq/utils/number.js","adept-iq/utils/password-validator.js","adept-iq/utils/promise-race.js","adept-iq/utils/range.js","adept-iq/utils/regex-functions.js","adept-iq/utils/remove-focus.js","adept-iq/utils/rql-generators.js","adept-iq/utils/rql.js","adept-iq/utils/save-records.js","adept-iq/utils/shared-audio-access.js","adept-iq/utils/sorts.js","adept-iq/utils/status-error-code.js","adept-iq/utils/stringifyNumber.js","adept-iq/utils/titleize.js","adept-iq/utils/turn-by-turn-icon.js","adept-iq/utils/turn-by-turn.js","adept-iq/utils/unwrapProxy.js","adept-iq/utils/validator.js","adept-iq/utils/vehicle-info.js","adept-iq/utils/vehicleCapacity.js","adept-iq/utils/widget-placement.js","adept-iq/utils/workspace-availability.js","adept-iq/utils/zone-validation.js","adept-iq/validators/alias.js","adept-iq/validators/belongs-to.js","adept-iq/validators/collection.js","adept-iq/validators/confirmation.js","adept-iq/validators/date.js","adept-iq/validators/dependent.js","adept-iq/validators/ds-error.js","adept-iq/validators/exclusion.js","adept-iq/validators/format.js","adept-iq/validators/has-many.js","adept-iq/validators/inclusion.js","adept-iq/validators/length.js","adept-iq/validators/messages.js","adept-iq/validators/number.js","adept-iq/validators/presence.js","adept-iq/validators/unique-route-template-name.js","adept-iq/validators/validate-date.js","adept-iq/validators/validate-duplicate-field.js","adept-iq/workers/avl-ping.js","adept-iq/workers/socket.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["'use strict';\n\n\n","define(\"adept-iq/adapters/-ada-adaManagement\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-ada-adaManagement',\n    host: _apiUrls.API.adaService.host,\n    ajaxService: Ember.inject.service('ajax'),\n    headers: Ember.computed('ajaxService.headers', function () {\n      const result = this.get('ajaxService.headers');\n      delete result['AIQ-Client-Activity-ID'];\n      return result;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-addressService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-address',\n    host: _apiUrls.API.addressService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-avlService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-avlService',\n    host: _apiUrls.API.avlService.host,\n\n    pathForType(type) {\n      // trim 'bs' prefix from model type\n      const regEx = /^(?:avlm-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-avlm-avlmService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-avlm-avlmService',\n    host: _apiUrls.API.avlmService.host,\n\n    pathForType(type) {\n      // trim 'bs' prefix from model type\n      const regEx = /^(?:avlm-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-bs-bookingManagement\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-bs-bookingService',\n    host: _apiUrls.API.bookingService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-cos-continuousOptService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-cos-continuousOptService',\n    host: _apiUrls.API.continuousOptService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-cs-configService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-cs-configService',\n    host: _apiUrls.API.configService.host,\n    namespace: 'config',\n\n    pathForType(type) {\n      // trim 'cs' prefix from model type\n      const regEx = /^(?:cs-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-dispatch\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-dispatch',\n    host: _apiUrls.API.dispatchService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-driver\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-driver',\n    host: _apiUrls.API.driverService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-dwh-dwhService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-dwh-dwhService',\n    host: _apiUrls.API.dwhService.host,\n    pathForType: function (type) {\n      // trim 'sso' prefix from model type\n      const regEx = /^(?:dwh-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    },\n\n    query(store, type, query) {\n      const session = this.get('session');\n      const apiUrl = this.buildURL(type.modelName, null, null);\n      return this.get('ajaxService').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: query.data\n      }).then(res => {\n        if (res.data && Array.isArray(res.data) && res.data.length > 0) {\n          res.data.forEach(payload => {\n            payload.type = type.modelName;\n            payload.attributes = { ...payload.attributes,\n              provider: payload.provider\n            };\n            delete payload.provider;\n          });\n        }\n\n        return res;\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-iqux-iquxService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    host: _apiUrls.API.iquxService.host,\n\n    pathForType(type) {\n      // trim 'bs' prefix from model type\n      const regEx = /^(?:avlm-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    },\n\n    urlForFindRecord(id, modelName) {\n      const model = Ember.String.camelize(modelName);\n      const iquxServiceHost = this.get('host');\n      const baseUrl = `${iquxServiceHost}/${model}/${id}`;\n      return baseUrl;\n    },\n\n    urlForFindAll(modelName) {\n      const model = Ember.String.camelize(modelName);\n      const iquxServiceHost = this.get('host');\n      const baseUrl = `${iquxServiceHost}/${model}`;\n      return baseUrl;\n    },\n\n    /**\n     * this method is used to fetch the vehicle records directly from vehicle service\n     * @param query\n     * @param model\n     * @returns {string}\n     * @private\n     */\n    urlForQuery(query, modelName) {\n      const model = Ember.String.camelize(modelName);\n      return this._buildUrlForPath(query, model);\n    },\n\n    _buildUrlForPath(query, model) {\n      const iquxServiceHost = this.get('host');\n      const vehicleServiceHost = _apiUrls.API.vehicleService.host;\n      const baseUrl = `${iquxServiceHost}/${model}`;\n\n      if (query.useVehicleService) {\n        return `${vehicleServiceHost}/${model}`;\n      }\n\n      return baseUrl;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-neo4j-neo4jService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    host: _apiUrls.API.neo4jService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-playbackService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-playbackService',\n    host: _apiUrls.API.playbackService.host,\n\n    pathForType(type) {\n      // trim 'bs' prefix from model type\n      const regEx = /^(?:avlm-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-reconciliationService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-reconciliationService',\n    host: _apiUrls.API.reconciliationService.host,\n\n    pathForType(type) {\n      // trim 'bs' prefix from model type\n      const regEx = /^(?:avlm-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-rms-riderManagement\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-rms-riderManagement',\n    host: _apiUrls.API.riderManagementService.host,\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    /**\n     * Modified Performance Improvement, the API in the backend uses avlmMessage rather than\n     * avlmCannedMessage, and avlm-canned-message need to update avlmService.\n     * @param id\n     * @param modelName\n     * @param snapshot\n     * @returns {string}\n     */\n    urlForFindRecord(id, modelName) {\n      const host = this.get('host');\n      const baseUrl = `${host}/${modelName}/${id}`;\n      return baseUrl;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-ss-schedulingService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-ss-schedulingService',\n    host: _apiUrls.API.schedulingService.host,\n    pathForType: function (type) {\n      // trim 'ss' prefix from model type\n      const regEx = /^(?:ss-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-sso-ssoService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-sso-ssoService',\n    host: _apiUrls.API.ssoService.host,\n    pathForType: function (type) {\n      // trim 'sso' prefix from model type\n      const regEx = /^(?:sso-)?(.*)$/;\n      const match = regEx.exec(type)[1];\n      return this._super(match);\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/-vehicleService\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    defaultSerializer: '-vehicle',\n    host: _apiUrls.API.vehicleService.host\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/activity-log-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-activity_log_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/activity-log\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\", \"moment\"], function (_exports, _avlmAvlmService, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    getActivityLogs(query) {\n      const session = this.get('session');\n      var url = this.buildURL('event', null, null, 'query', query);\n      return this.get('ajax').post(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: query\n      });\n    },\n\n    createEventActivity(data) {\n      const session = this.get('session');\n      const json = {\n        data: data\n      };\n      const url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createRouteActivity(userInfo, routeInfo) {\n      let loggingType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'route';\n      const session = this.get('session');\n      const routeJson = this.buildRouteJson(userInfo, routeInfo, loggingType);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: routeJson\n      });\n    },\n\n    createUserRouteActivity(userInfo, routeInfo) {\n      let loggingType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'user';\n      const session = this.get('session');\n      const routeJson = this.buildUserRouteJson(userInfo, routeInfo, loggingType);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: routeJson\n      });\n    },\n\n    createUserTripActivity(userInfo, tripInfo) {\n      let addUserActionType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      const session = this.get('session');\n      const tripJson = this.buildTripJson(userInfo, tripInfo, addUserActionType);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: tripJson\n      });\n    },\n\n    createUserVehicleActivity(userInfo, vehicleInfo, actionKey) {\n      const session = this.get('session');\n      const vehicleJson = this.buildVehicleJson(userInfo, vehicleInfo, actionKey);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: vehicleJson\n      });\n    },\n\n    createUserbookingActivity(userInfo, bookingInfo, isOverrideEligible) {\n      const session = this.get('session');\n      const json = this.buildBookingJson(userInfo, bookingInfo, isOverrideEligible);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createUserSubscriptionActivity(userInfo, subscriptioInfo) {\n      const session = this.get('session');\n      const json = this.buildSubscriptionJson(userInfo, subscriptioInfo);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createGenericBookingActivity(bookingId, actions) {\n      const context = {\n        bookingId: bookingId\n      };\n      const content = {\n        userId: this.session.data.authenticated.userId,\n        actualTime: (0, _moment.default)().toDate(),\n        actions\n      };\n      return this.createGenericLoggingActivity(content, context, 'BE');\n    },\n\n    createGenericRiderActivity(riderId, actions) {\n      const context = {\n        riderId: riderId\n      };\n      const content = {\n        userId: this.session.data.authenticated.userId,\n        actualTime: (0, _moment.default)().toDate(),\n        actions\n      };\n      return this.createGenericLoggingActivity(content, context, 'UE');\n    },\n\n    createUserRiderActivity(userInfo, actionType, eventType) {\n      const session = this.get('session');\n      const json = this.buildRiderJson(userInfo, actionType, eventType);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createUserActivityLog(activity, details) {\n      const eventLog = {\n        type: 'event',\n        attributes: {\n          source: 'webApp',\n          eventType: 'UE',\n          actionType: 'genericLogging',\n          userId: this.get('session.data.authenticated.userId'),\n          receivedAt: (0, _moment.default)().toDate(),\n          eventLog: {\n            genericLogging: [{\n              activity: activity,\n              loggingType: 'user',\n              details: details\n            }]\n          }\n        }\n      };\n      return this.createEventActivity(eventLog);\n    },\n\n    createGenericLoggingActivity(userInfo, context) {\n      let eventType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'UE';\n      const session = this.get('session');\n      const json = this.buildGenericLoggingJson(userInfo, context, eventType);\n      const url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    removeBookingPassengers(riderIds, bookingId) {\n      const session = this.get('session');\n      const userId = this.get('session.data.authenticated.userId');\n      const receivedAt = (0, _moment.default)().toDate();\n      const beJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'GE',\n            actionType: 'genericLogging',\n            userId,\n            receivedAt,\n            bookingId,\n            eventLog: {\n              genericLogging: [{\n                activity: 'Remove Passengers',\n                loggingType: 'booking',\n                details: `Passenger(s) ${riderIds.join(',')} removed from group booking ${bookingId}.`\n              }]\n            }\n          }\n        }\n      };\n      const url = this.buildURL('event');\n      this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: beJson\n      });\n\n      for (const riderId of riderIds) {\n        const riderJson = {\n          data: {\n            type: 'event',\n            attributes: {\n              eventType: 'GE',\n              actionType: 'genericLogging',\n              userId,\n              receivedAt,\n              riderId,\n              eventLog: {\n                genericLogging: [{\n                  activity: 'Removed From Booking',\n                  loggingType: 'riderGeneric',\n                  details: `Removed from group booking ${bookingId}.`\n                }]\n              }\n            }\n          }\n        };\n        this.get('ajax').post(url, {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: riderJson\n        });\n      }\n    },\n\n    buildGenericLoggingJson(activityContent, context, eventType) {\n      const riderId = Ember.isPresent(context) ? context.riderId : null;\n      const bookingId = Ember.isPresent(context) ? context.bookingId : null;\n      const data = {\n        type: 'event',\n        attributes: {\n          eventType: eventType,\n          actionType: 'genericLogging',\n          userId: activityContent.userId,\n          riderId,\n          bookingId,\n          time: activityContent.actualTime,\n          createdAt: activityContent.actualTime,\n          receivedAt: activityContent.actualTime,\n          alertFlag: false,\n          alertFormat: null,\n          alertFlagDelete: false,\n          alertFlagInsert: false,\n          deleteAlertActionTypes: null,\n          eventLog: {\n            genericLogging: activityContent.actions\n          }\n        }\n      };\n      const eventJson = {\n        data: data\n      };\n      return eventJson;\n    },\n\n    createBookingActivity(userInfo, bookingInfo) {\n      const session = this.get('session');\n      const json = this.buildBookingJson2(userInfo, bookingInfo);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    buildUpdateSubscriptionJson(activityContent, subscriptionId) {\n      const subscriptionJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'SE',\n            actionType: 'change',\n            routeId: null,\n            subscriptionId: subscriptionId,\n            stopPointId: null,\n            scheduleId: null,\n            userId: activityContent.content.userId,\n            vehicleId: null,\n            time: activityContent.content.actualTime,\n            createdAt: activityContent.content.actualTime,\n            receivedAt: activityContent.content.actualTime,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: {\n              'change': [{\n                activity: activityContent.content.activity,\n                loggingType: 'subscription',\n                details: activityContent.content.details\n              }]\n            }\n          }\n        }\n      };\n      return subscriptionJson;\n    },\n\n    createUpdateSubscriptionActivity(activityContent, subscriptionId) {\n      const session = this.get('session');\n      const json = this.buildUpdateSubscriptionJson(activityContent, subscriptionId);\n      var url = this.buildURL('event');\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    buildBookingJson2(userInfo, bookingInfo) {\n      const bookingId = bookingInfo.booking.get('id');\n      const actionType = 'change';\n      const bookingJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'BE',\n            actionType: actionType,\n            bookingId: bookingId,\n            userId: userInfo.content.userId,\n            time: userInfo.content.actualTime,\n            createdAt: userInfo.content.actualTime,\n            receivedAt: userInfo.content.actualTime,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: {\n              actionType: [{\n                activity: userInfo.content.activity,\n                loggingType: 'user',\n                details: userInfo.content.details\n              }]\n            }\n          }\n        }\n      };\n      return bookingJson;\n    },\n\n    buildRiderJson(userInfo, actionType, eventType) {\n      const riderId = userInfo.content.riderId;\n      const bookingJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: eventType,\n            actionType: actionType,\n            userId: userInfo.content.userId,\n            riderId: riderId,\n            time: userInfo.content.actualTime,\n            createdAt: userInfo.content.actualTime,\n            receivedAt: userInfo.content.actualTime,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: {\n              actionType: [{\n                activity: userInfo.content.activity,\n                loggingType: 'user',\n                details: userInfo.content.details\n              }]\n            }\n          }\n        }\n      };\n      return bookingJson;\n    },\n\n    buildBookingJson(userInfo, bookingInfo, isOverrideEligible) {\n      const stopPointId = isOverrideEligible ? bookingInfo.booking.get('trips.firstObject.route.stopPoints.firstObject.id') : bookingInfo.booking.get('currentRoute.stopPoints.id');\n      const scheduleId = isOverrideEligible ? bookingInfo.booking.get('trips.firstObject.schedule.id') : bookingInfo.booking.get('schedule.id');\n      const vehicleId = isOverrideEligible ? bookingInfo.booking.get('trips.firstObject.route.vehicle.id') : bookingInfo.booking.get('currentRoute.vehicle.id');\n      const bookingId = isOverrideEligible ? bookingInfo.booking.get('id') : bookingInfo.booking.get('id');\n      const actionType = isOverrideEligible ? 'overrideEligibility' : 'change';\n      const bookingJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'BE',\n            actionType: actionType,\n            bookingId: bookingId,\n            stopPointId: stopPointId,\n            scheduleId: scheduleId,\n            userId: userInfo.content.userId,\n            vehicleId: vehicleId,\n            time: userInfo.content.actualTime,\n            createdAt: userInfo.content.actualTime,\n            receivedAt: userInfo.content.actualTime,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: {\n              actionType: [{\n                activity: userInfo.content.activity,\n                loggingType: 'booking',\n                details: userInfo.content.details\n              }, {\n                activity: userInfo.content.activity,\n                loggingType: 'user',\n                details: userInfo.content.details\n              }]\n            }\n          }\n        }\n      };\n      return bookingJson;\n    },\n\n    buildSubscriptionJson(userInfo, subscriptionInfo) {\n      const subscriptionJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'SE',\n            actionType: 'create',\n            routeId: subscriptionInfo.get('context.subscription.currentRoute.id'),\n            subscriptionId: subscriptionInfo.get('context.subscription.id'),\n            stopPointId: subscriptionInfo.get('context.subscription.currentRoute.stopPoints.id'),\n            scheduleId: subscriptionInfo.get('context.subscription.schedule.id'),\n            userId: userInfo.content.userId,\n            vehicleId: subscriptionInfo.get('context.subscription.currentRoute.vehicle.id'),\n            time: userInfo.content.actualTime,\n            createdAt: userInfo.content.actualTime,\n            receivedAt: userInfo.content.actualTime,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: {\n              'create': [{\n                activity: userInfo.content.activity,\n                loggingType: 'subscription',\n                details: userInfo.content.details\n              }]\n            }\n          }\n        }\n      };\n      return subscriptionJson;\n    },\n\n    buildTripJson(userInfo, tripInfo, addUserActionType) {\n      const userId = userInfo.content.userId;\n      const time = userInfo.content.actualTime;\n      const createdAt = userInfo.content.actualTime;\n      const receivedAt = userInfo.content.actualTime;\n      const actionType = userInfo.content.type;\n      const actionKey = this.getEventLogs(userInfo, actionType, 'trip', addUserActionType);\n      const tripJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'UE',\n            actionType: actionType,\n            routeId: tripInfo.get('context.trip.currentRoute.id'),\n            tripId: tripInfo.get('context.trip.id'),\n            stopPointId: tripInfo.get('context.trip.currentRoute.stopPoints.id'),\n            scheduleId: tripInfo.get('context.trip.schedule.id'),\n            userId: userId,\n            vehicleId: tripInfo.get('context.trip.currentRoute.vehicle.id'),\n            time: time,\n            createdAt: createdAt,\n            receivedAt: receivedAt,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: actionKey\n          }\n        }\n      };\n      return tripJson;\n    },\n\n    buildUserRouteJson(userInfo, routeInfo, loggingType) {\n      const userId = userInfo.content.userId;\n      const time = userInfo.content.actualTime;\n      const createdAt = userInfo.content.actualTime;\n      const receivedAt = userInfo.content.actualTime;\n      const actionType = userInfo.content.type;\n      const actionKey = this.getEventLogs(userInfo, actionType, loggingType);\n      const routeJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'UE',\n            actionType: actionType,\n            routeId: routeInfo ? routeInfo.get('context.route.id') : null,\n            scheduleId: routeInfo ? routeInfo.get('context.route.schedule.id') : null,\n            userId: userId,\n            vehicleId: routeInfo ? routeInfo.get('context.route.currentRoute.vehicle.id') : null,\n            time: time,\n            createdAt: createdAt,\n            receivedAt: receivedAt,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: actionKey\n          }\n        }\n      };\n      return routeJson;\n    },\n\n    buildRouteJson(userInfo, routeInfo, loggingType) {\n      const userId = userInfo.content.userId;\n      const time = userInfo.content.actualTime;\n      const createdAt = userInfo.content.actualTime;\n      const receivedAt = userInfo.content.actualTime;\n      const actionType = userInfo.content.type;\n      const actionKey = this.getEventLogs(userInfo, actionType, loggingType);\n      const routeJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            eventType: 'REE',\n            actionType: actionType,\n            routeId: routeInfo ? routeInfo.get('context.route.id') : null,\n            scheduleId: routeInfo ? routeInfo.get('context.route.schedule.id') : null,\n            userId: userId,\n            vehicleId: routeInfo ? routeInfo.get('context.route.currentRoute.vehicle.id') : null,\n            time: time,\n            createdAt: createdAt,\n            receivedAt: receivedAt,\n            alertFlag: false,\n            alertFormat: null,\n            alertFlagDelete: false,\n            alertFlagInsert: false,\n            deleteAlertActionTypes: null,\n            eventLog: actionKey\n          }\n        }\n      };\n      return routeJson;\n    },\n\n    buildVehicleJson(userInfo, vehicleInfo, actionKey) {\n      const userId = userInfo.content.userId;\n      const time = userInfo.content.actualTime;\n      const actionType = userInfo.content.type;\n      const vehicleJson = {\n        data: {\n          type: 'event',\n          attributes: {\n            source: 'webApp',\n            eventType: 'VE',\n            actionType: actionType,\n            userId: userId,\n            vehicleId: vehicleInfo.get('context.vehicle.id'),\n            time: time,\n            createdAt: time,\n            receivedAt: time,\n            eventLog: actionKey\n          }\n        }\n      };\n      return vehicleJson;\n    },\n\n    getEventLogs(userInfo, actionType, loggingType) {\n      let addUserActionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      const actionKey = {};\n      actionKey[actionType] = [{\n        activity: userInfo.content.activity,\n        loggingType: loggingType,\n        details: userInfo.content.details\n      }];\n\n      if (addUserActionType) {\n        actionKey.user = [{\n          activity: userInfo.content.activity,\n          loggingType: 'user',\n          details: userInfo.content.details\n        }];\n      }\n\n      return actionKey;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/address\", [\"exports\", \"adept-iq/adapters/-addressService\", \"adept-iq/config/api-urls\"], function (_exports, _addressService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _addressService.default.extend({\n    ajax1: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    postAddress(address) {\n      const session = this.get('session');\n      const zoneName = address.get('zoneName.id');\n      const json = {\n        attributes: {\n          alias: address.get('alias'),\n          premise: address.get('premise'),\n          streetNumber: address.get('streetNumber'),\n          streetAddress: address.get('streetAddress'),\n          locality: address.get('locality'),\n          subLocality: address.get('subLocality'),\n          subRegion: address.get('subRegion'),\n          region: address.get('region'),\n          postalCode: address.get('postalCode'),\n          country: address.get('country'),\n          notes: address.get('notes')\n        },\n        relationships: {\n          zoneName: {\n            data: {\n              type: 'zoneName',\n              id: zoneName\n            }\n          }\n        },\n        type: 'address'\n      };\n      return this.get('ajax1').post(_apiUrls.API.addressService.host + '/address', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    patchAddress(address) {\n      const session = this.get('session');\n      const id = address.get('id');\n      const json = {\n        attributes: {\n          alias: address.get('alias'),\n          premise: address.get('premise'),\n          streetNumber: address.get('streetNumber'),\n          streetAddress: address.get('streetAddress'),\n          locality: address.get('locality'),\n          subLocality: address.get('subLocality'),\n          subRegion: address.get('subRegion'),\n          region: address.get('region'),\n          postalCode: address.get('postalCode'),\n          country: address.get('country'),\n          notes: address.get('notes')\n        },\n        relationships: {\n          zoneName: {\n            data: {\n              type: 'zoneName',\n              id: address.get('zoneName.id')\n            }\n          }\n        },\n        type: 'address',\n        id\n      };\n      return this.get('ajax1').patch(_apiUrls.API.addressService.host + '/address/' + id, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    deleteAddress(addressId) {\n      const session = this.get('session');\n      return this.get('ajax1').delete(_apiUrls.API.addressService.host + '/address/' + addressId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    postAddressLocation(location, address, locationAndAddressIdData) {\n      const session = this.get('session');\n      const locationId = !locationAndAddressIdData ? location.data.id : locationAndAddressIdData.locationId;\n      const addressId = !locationAndAddressIdData ? address.data.id : locationAndAddressIdData.addressId;\n      const json = {\n        type: 'location',\n        id: locationId\n      };\n      return this.get('ajax1').post(_apiUrls.API.addressService.host + `/address/${addressId}/relationships/locations`, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    deleteAddressLocation(addressId) {\n      const session = this.get('session');\n      return this.get('ajax1').delete(_apiUrls.API.addressService.host + `/address/${addressId}/relationships/locations`, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/agency-service\", [\"exports\", \"adept-iq/adapters/-ada-adaManagement\"], function (_exports, _adaAdaManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _adaAdaManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/agency\", [\"exports\", \"adept-iq/adapters/-ada-adaManagement\"], function (_exports, _adaAdaManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _adaAdaManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/application\", [\"exports\", \"ember-data\", \"ember-simple-auth/mixins/data-adapter-mixin\"], function (_exports, _emberData, _dataAdapterMixin) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    JSONAPIAdapter\n  } = _emberData.default;\n\n  var _default = JSONAPIAdapter.extend(_dataAdapterMixin.default, {\n    notifications: Ember.inject.service(),\n    ajaxService: Ember.inject.service('ajax'),\n    authorizer: 'authorizer:sso',\n    preventSave: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    headers: Ember.computed('ajaxService.headers', function () {\n      const result = this.get('ajaxService.headers');\n      return result;\n    }),\n\n    normalizeErrorResponse(status, headers, payload) {\n      if (payload && typeof payload === 'object' && payload.errors) {\n        return payload.errors; // To deal with the API's error messages that do not comply to JSONAPI Standard.\n      } else if (Ember.isPresent(payload.message)) {\n        const error = {\n          status: `${status}`,\n          title: 'The backend responded with an error',\n          detail: payload.message\n        }; // notifications should happen at the level of the component\n        // console out the error instead for developer level debugging\n        // which will be already displayed at the network level tab\n\n        return [error];\n      }\n\n      return [{\n        status: `${status}`,\n        title: 'The backend responded with an error',\n        detail: `${payload}`\n      }];\n    },\n\n    pathForType(modelName) {\n      return Ember.String.dasherize(modelName);\n    },\n\n    ajaxOptions(url, type) {\n      const hash = this._super(...arguments); // this._super() handles all but the GET case; in this case, the data\n      // object is normally passed straight to $.ajax, but this encodes URI\n      // characters like + and -. Instead, we encode params to a string ourself.\n\n\n      if (hash.data && type === 'GET') {\n        hash.data = Object.entries(hash.data).filter(_ref => {\n          let [...value] = _ref;\n          return Ember.isPresent(value);\n        }).map(_ref2 => {\n          let [key, value] = _ref2;\n          return `${key}=${value}`;\n        }).join('&');\n        hash.data = encodeURI(hash.data);\n      }\n\n      return hash;\n    },\n\n    updateRecord(store, type, snapshot) {\n      if (!this.get('preventSave')) {\n        return this._super(store, type, snapshot);\n      }\n\n      return;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/archived-activity-log\", [\"exports\", \"adept-iq/adapters/-neo4j-neo4jService\"], function (_exports, _neo4jNeo4jService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _neo4jNeo4jService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    getActivityLogs(query) {\n      const session = this.get('session');\n      var url = this.buildURL('event', null, null, 'query', query);\n      return this.get('ajax').post(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: query\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avl-location\", [\"exports\", \"adept-iq/adapters/application\", \"adept-iq/config/api-urls\"], function (_exports, _application, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    reportVehicleLocation(vehicleId, latLng) {\n      const ajax = this.get('ajax');\n      const [lat, lng] = latLng;\n      const timestamp = new Date().toISOString();\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        data: {\n          type: 'avl',\n          attributes: {\n            vehicleId,\n            timestamp,\n            lat,\n            lng\n          }\n        }\n      }; // disabled for demo\n\n      return;\n      /* eslint-disable no-unreachable */\n\n      return ajax.post(`${_apiUrls.API.avlService.host}/avl`, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: json\n      });\n      /* eslint-enable no-unreachable */\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-address\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-alert\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-canned-message-template\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-canned-message\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\", \"adept-iq/config/api-urls\"], function (_exports, _avlmAvlmService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    /**\n       * Modified Performance Improvement, the API in the backend uses avlmMessage rather than\n       * avlmCannedMessage, and avlm-canned-message need to update avlmService.\n       * @param id\n       * @param modelName\n       * @param snapshot\n       * @returns {string}\n       */\n    urlForFindRecord(id\n    /*modelName*/\n    ) {\n      //modelName = camelize(modelName);\n      const model = 'avlmMessage';\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${model}/${id}`;\n      return baseUrl;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-driver-state-event\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-emergency-message\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-event\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-route-break\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-route-vehicle-driver\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-route\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-schedule\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-stop-point\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-trip-rider-attribute\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-trip-rider\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-trip\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-vehicle-event\", [\"exports\", \"adept-iq/adapters/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    findRecord() {\n      throw new Error('adapter method unsupported');\n    },\n\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/vehicle-event`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-vehicle-info\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-vehicle-radius\", [\"exports\", \"adept-iq/adapters/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    findRecord() {\n      throw new Error('adapter method unsupported');\n    },\n\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/vehicle-radius`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-vehicle\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\"], function (_exports, _iquxIquxService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _iquxIquxService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/avlm-zone\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/booking\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\", \"adept-iq/config/api-urls\"], function (_exports, _bsBookingManagement, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingManagement.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    queryRecord(store, type, id) {\n      const session = this.get('session');\n      return this.get('ajaxService').request(_apiUrls.API.bookingService.host + '/booking/' + id, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    postBooking(json) {\n      const session = this.get('session');\n      return this.get('ajaxService').post(_apiUrls.API.tasService.host + '/booking', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`,\n          'x-api-key': 'PXS7q1lfrt5RV2heb5ySc2QIQdqJ6I0M6C16kdXq'\n        },\n        data: json\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/break-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-break_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/breakdown-type\", [\"exports\", \"adept-iq/adapters/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    findAll(store\n    /* , type, sinceToken, snapshotRecordArray */\n    ) {\n      return store.query('cs-config-item', {\n        category: 'config-System_Configuration-breakdown_types'\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/bulk-operation\", [\"exports\", \"ember-concurrency\", \"adept-iq/adapters/-dispatch\"], function (_exports, _emberConcurrency, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TIMEOUT_DELAY = 1000; // 1 second delay\n\n  var _default = _dispatch.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    postRecipe(recipe) {\n      const session = this.get('session');\n      const url = `${this.host}/bulk-operation`;\n      const json = {\n        data: {\n          type: 'recipe',\n          attributes: recipe\n        }\n      };\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createBulkAsyncOperation: (0, _emberConcurrency.task)(function* (instructions) {\n      let ignoreCapacityViolation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const session = this.get('session');\n      const url = `${this.host}/bulk-operation?async=true&ignoreCapacityViolations=${ignoreCapacityViolation}`;\n      const json = {\n        data: {\n          type: 'recipe',\n          attributes: instructions\n        }\n      };\n      const job = yield this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n      return yield this.get('asyncBulkOperationState').perform(job);\n    }).enqueue(),\n    asyncBulkOperationState: (0, _emberConcurrency.task)(function* (job) {\n      const session = this.get('session');\n      const url = `${this.host}/bulk-operation/`;\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure') {\n        yield (0, _emberConcurrency.timeout)(TIMEOUT_DELAY);\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          job = yield this.get('ajax').request(url + job.data.id, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      const isJobSuccess = job.data.attributes.state === 'success';\n      return { ...job.data.attributes,\n        isJobSuccess\n      };\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cancel-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-cancel_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cancellation\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/classification-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-CDL_classifications'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cluster\", [\"exports\", \"adept-iq/adapters/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    preventSave: true // We don't save clusters to server from UI\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/continous-opt-route-break\", [\"exports\", \"adept-iq/config/api-urls\", \"adept-iq/adapters/-cos-continuousOptService\", \"ember-concurrency\"], function (_exports, _apiUrls, _cosContinuousOptService, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TIMEOUT_DELAY = 1000; // 1 second delay\n\n  const MAX_RETRIES = 180;\n\n  var _default = _cosContinuousOptService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    continuousOptHost: _apiUrls.API.continuousOptService.host,\n\n    postAddBreak(attributes) {\n      let async = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const session = this.get('session');\n      const url = async ? `${this.host}/cos-async-operation` : `${this.continuousOptHost}/optimizer/add-break`;\n      const json = async ? {\n        data: {\n          type: 'cosAsyncOperation',\n          attributes: {\n            operationType: 'addBreak',\n            entityType: 'route',\n            entityId: [attributes.destinationRouteId],\n            ...attributes\n          }\n        }\n      } : {\n        data: {\n          type: 'addBreak',\n          attributes\n        }\n      };\n      return this.get('ajaxService').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createAddBreakAsyncOperation: (0, _emberConcurrency.task)(function* (attributes) {\n      const job = yield this.postAddBreak(attributes, true);\n      return yield this.get('asyncAddBreakOperationState').perform(job);\n    }).enqueue(),\n    asyncAddBreakOperationState: (0, _emberConcurrency.task)(function* (job) {\n      const session = this.get('session');\n      const url = `${this.host}/cos-async-operation/`;\n      let count = 0;\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure' && job.data.attributes.state !== 'rejected' && count < MAX_RETRIES) {\n        yield (0, _emberConcurrency.timeout)(TIMEOUT_DELAY);\n        count++;\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          job = yield this.get('ajax').request(url + job.data.id, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      const isJobSuccess = job.data.attributes.state === 'success';\n\n      if (isJobSuccess) {\n        const results = JSON.parse(job.data.attributes.results);\n        return { ...results,\n          isJobSuccess\n        };\n      }\n\n      return {\n        payload: {\n          // if it is 'rejected' then there is no results.\n          message: job.data.attributes.results ? `${job.data.attributes.results}` : `${job.data.attributes.state}`\n        },\n        isJobSuccess\n      };\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cs-config-category\", [\"exports\", \"adept-iq/adapters/-cs-configService\"], function (_exports, _csConfigService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_CATEGORY = 'category';\n\n  var _default = _csConfigService.default.extend({\n    findRecord() {\n      throw new Error('adapter method unsupported');\n    },\n\n    query() {\n      throw new Error('adapter method unsupported');\n    },\n\n    urlForFindAll() {\n      // this isn't _really_ a findAll\n      return this._buildUrlForPath(DEFAULT_CATEGORY);\n    },\n\n    _buildUrlForPath(path) {\n      const host = this.get('host');\n      const namespace = this.get('namespace');\n      return `${host}/${namespace}/${path}`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cs-config-file\", [\"exports\", \"adept-iq/adapters/-cs-configService\", \"adept-iq/config/api-urls\"], function (_exports, _csConfigService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigService.default.extend({\n    buildURL(modelName, id, snapshot, requestType) {\n      if (requestType === 'findRecord' || requestType === 'deleteRecord') {\n        return `${_apiUrls.API.configService.host}/config-file/${id}`;\n      }\n\n      return this._super(...arguments);\n    },\n\n    async createRecord(store, type, snapshot) {\n      const file = snapshot.attr('file');\n      const url = `${_apiUrls.API.configService.host}/config-file`;\n      const formData = new FormData();\n      formData.append('file', file);\n      const response = await fetch(url, {\n        method: 'POST',\n        body: formData\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new Error(error || 'File upload failed');\n      }\n\n      return await response.json();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cs-config-item\", [\"exports\", \"adept-iq/adapters/-cs-configService\", \"lodash\"], function (_exports, _csConfigService, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_CATEGORY = 'config';\n\n  var _default = _csConfigService.default.extend({\n    updateRecord(store, type, snapshot) {\n      const payload = {};\n      const serializer = store.serializerFor(type.modelName);\n      serializer.serializeIntoHash(payload, type, snapshot, {\n        includeId: true\n      });\n\n      const patchPayload = _lodash.default.cloneDeep(payload); // config service does not allow `id` or `name` on update\n\n\n      delete patchPayload.data.id;\n      delete patchPayload.data.attributes.name;\n      const url = this.buildURL(type.modelName, snapshot.id, snapshot, 'updateRecord');\n      return this.ajax(url, 'PATCH', {\n        data: patchPayload\n      }).then(() => {\n        // refresh from server to ensure models are in sync\n        return store.findRecord('cs-config-item', payload.data.id);\n      }).then(() => {\n        // intentionally return nothing; we want the `findRecord` above to resolve\n        // before continuing execution and handle the push there\n        return;\n      });\n    },\n\n    ajaxOptions(url, type) {\n      const options = this._super(...arguments);\n\n      if (type === 'GET') {\n        // clear this stuff out; config API doesn't use it\n        options.data = null;\n      }\n\n      return options;\n    },\n\n    urlForCreateRecord(modelName, snapshot) {\n      const {\n        category\n      } = snapshot.attributes();\n      return this._buildUrlForPath(category);\n    },\n\n    urlForDeleteRecord(id\n    /* , modelName, snapshot */\n    ) {\n      return this._buildUrlForPath(id);\n    },\n\n    urlForFindAll() {\n      // this isn't _really_ a findAll\n      return this._buildUrlForPath(DEFAULT_CATEGORY);\n    },\n\n    urlForFindRecord(id\n    /* , modelName, snapshot */\n    ) {\n      return this._buildUrlForPath(id);\n    },\n\n    urlForQuery(query\n    /* , modelName */\n    ) {\n      const path = query.category || DEFAULT_CATEGORY;\n      return this._buildUrlForPath(path);\n    },\n\n    urlForQueryRecord(query\n    /* , modelName */\n    ) {\n      const path = query.category || DEFAULT_CATEGORY;\n      return this._buildUrlForPath(path);\n    },\n\n    urlForUpdateRecord(id\n    /* , modelName, snapshot */\n    ) {\n      return this._buildUrlForPath(id);\n    },\n\n    _buildUrlForPath(path) {\n      const host = this.get('host');\n      const namespace = this.get('namespace');\n      return `${host}/${namespace}/${path}`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cs-config-lookup-model\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    namespace: 'config',\n\n    // TODO: remove hack when ember data upgraded\n    //it doesn't call the delete API just remove the record form the ember store\n    deleteRecord() {}\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cs-config-model\", [\"exports\", \"adept-iq/adapters/-cs-configService\"], function (_exports, _csConfigService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigService.default.extend({\n    namespace: 'config',\n    categoryId: null,\n\n    buildURL(modelName, id) {\n      const host = this.get('host');\n      const namespace = this.get('namespace');\n      const categoryId = this.get('categoryId');\n      const baseUrl = `${host}/${namespace}/${categoryId}`;\n      return Ember.isPresent(id) ? `${baseUrl}/${id}` : baseUrl;\n    },\n\n    updateRecord() {\n      throw new Error('cannot update a cs-config-model; update the associated cs-config-item instead');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/cs-config-permission\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-UI_restrictions'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/dashboard\", [\"exports\", \"adept-iq/adapters/application\", \"lodash\", \"adept-iq/config/api-urls\"], function (_exports, _application, _lodash, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.DEFAULT_WORKSPACE_CATEGORIES = void 0;\n  const DEFAULT_WORKSPACE_CATEGORIES = ['workspaces-playback', 'workspaces-permissions', 'workspaces-reconcile', 'workspaces-reports', 'workspaces-adhocReports', 'workspaces-booking', 'workspaces-riderManagement', 'workspaces-schedule', 'workspaces-dispatch', 'workspaces-roadsup', 'workspaces-vehicleDriver', 'workspaces-default'];\n  _exports.DEFAULT_WORKSPACE_CATEGORIES = DEFAULT_WORKSPACE_CATEGORIES;\n  const USER_WORKSPACE_CATEGORIES = ['workspaces-users'];\n  const WORKSPACE_CATEGORIES = DEFAULT_WORKSPACE_CATEGORIES.concat(USER_WORKSPACE_CATEGORIES);\n\n  var _default = _application.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    host: _apiUrls.API.configService.host,\n\n    findRecord(store, type, id\n    /*, snapshot*/\n    ) {\n      return store.findRecord('cs-config-item', id).then(configItem => {\n        return _lodash.default.cloneDeep(configItem.get('value'));\n      });\n    },\n\n    findAll(store, type\n    /*, sinceToken, snapshotRecordArray*/\n    ) {\n      return this.query(store, type, {\n        categories: WORKSPACE_CATEGORIES\n      });\n    },\n\n    query(store, type) {\n      let query = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      let {\n        categories = WORKSPACE_CATEGORIES\n      } = query;\n\n      if (Ember.isPresent(query.privateWorkspace)) {\n        categories = categories.concat(query.privateWorkspace);\n      }\n\n      delete query.categories;\n      const promiseHash = categories.reduce((hash, category) => {\n        hash[category] = this.fetchConfigItemsByCategory(store, category);\n        return hash;\n      }, {});\n      return Ember.RSVP.hash(promiseHash).then(resultHash => {\n        return categories.reduce((obj, category) => {\n          resultHash[category].data.forEach(data => {\n            obj.data.push(data);\n          });\n          Ember.makeArray(resultHash[category].included).forEach(data => {\n            obj.included.push(data);\n          });\n          return obj;\n        }, {\n          data: [],\n          included: []\n        });\n      });\n    },\n\n    createRecord(store, type, snapshot) {\n      const {\n        name,\n        category\n      } = snapshot.attributes();\n      snapshot.id = `${category}/${this._keyForName(name)}`;\n      const data = {};\n      const serializer = store.serializerFor(type.modelName);\n      serializer.serializeIntoHash(data, type, snapshot, {\n        includeId: true\n      });\n      const record = store.createRecord('cs-config-item', {\n        name: this._keyForName(name),\n        displayName: name,\n        category,\n        type: 'json',\n        value: data\n      });\n      return record.save().then(configItem => {\n        return _lodash.default.cloneDeep(configItem.get('value'));\n      }).catch(e => {\n        console.log(e); //eslint-disable-line no-console\n\n        record.rollbackAttributes();\n        throw e;\n      });\n    },\n\n    deleteRecord(store, type, snapshot) {\n      const configItem = store.peekRecord('cs-config-item', snapshot.id);\n      return configItem.destroyRecord().then(() => {\n        // Avoid configItem model id not clear issue.\n        configItem.unloadRecord(); // TODO: remove hack when ember data upgraded. https://github.com/emberjs/data/issues/4972\n\n        store._removeFromIdMap(configItem._internalModel); // have to swallow promise return value so ED won't try to parse it\n\n\n        return null;\n      });\n    },\n\n    updateRecord(store, type, snapshot) {\n      const serialized = {};\n      const serializer = store.serializerFor(type.modelName);\n      serializer.serializeIntoHash(serialized, type, snapshot, {\n        includeId: true\n      });\n      const configItem = store.peekRecord('cs-config-item', snapshot.id);\n      configItem.set('value', serialized);\n      return configItem.save().then(() => {\n        return serialized;\n      });\n    },\n\n    fetchConfigItemsByCategory(store, category) {\n      return store.query('cs-config-item', {\n        category\n      }).then(configItems => {\n        return {\n          data: configItems.map(configItem => {\n            const {\n              data\n            } = _lodash.default.cloneDeep(configItem.get('value')); // use the configItem's category so we know if it is a default item.\n\n\n            data.attributes.category = configItem.category;\n            return data;\n          })\n        };\n      });\n    },\n\n    postUserCategory() {\n      const session = this.get('session');\n      const url = `${this.host}/config/userworkspace`;\n      const json = {\n        data: {\n          type: 'configItem'\n        }\n      };\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    _keyForName(name) {\n      // config service only accepts /[a-zA-Z0-9_]+/; note that this conversion\n      // is not injective, so collisions are possible\n      return escape(Ember.String.underscore(name)).replace(/%/g, '_');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/dispatch-route\", [\"exports\", \"adept-iq/adapters/-dispatch\", \"adept-iq/config/api-urls\", \"lodash\"], function (_exports, _dispatch, _apiUrls, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // export default DispatchAdapter;\n  var _default = _dispatch.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    // not using \"ajax\" so there won't be conflict with the base's ajax calls\n    session: Ember.inject.service(),\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    urlForFindRecord(id\n    /*modelName*/\n    ) {\n      //modelName = camelize(modelName);\n      const model = 'dispatchRoute';\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${model}/${id}`;\n      return baseUrl;\n    },\n\n    // TODO: This is a temporary solution for creating a route\n    // dispatch backend will have a proper endpoint for POST route\n    buildURL: function (modelType, id, snapshot, requestType) {\n      if (requestType === 'createRecord') {\n        return `${this.host}/schedule/${snapshot.record.get('schedule.id')}/route/clusterization`;\n      }\n\n      return this._super(...arguments);\n    },\n\n    createDispatchRoute(routePayload, dispatchRoute, dispatchSchedule) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const {\n        providerName\n      } = routePayload.data.relationships;\n      const json = {\n        data: {\n          type: 'dispatchRoute',\n          attributes: {\n            lockedForOptimization: false,\n            schedulingMode: dispatchRoute.get('schedulingMode'),\n            affinities: dispatchRoute.get('affinities'),\n            tripLimit: dispatchRoute.get('tripLimit'),\n            distanceLimit: dispatchRoute.get('distanceLimit')\n          },\n          relationships: {\n            route: {\n              data: {\n                id: routePayload.data.id,\n                type: 'route'\n              }\n            },\n            dispatchSchedule: {\n              data: {\n                id: dispatchSchedule.get('id'),\n                type: 'dispatchSchedule'\n              }\n            },\n            providerName: {\n              data: {\n                id: providerName.data.id,\n                type: 'providerName'\n              }\n            }\n          }\n        }\n      };\n      return ajax.post(_apiUrls.API.dispatchService.host + '/dispatch-route/', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    updateDispatchRoute(dispatchRoute) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const providerId = dispatchRoute.get('provider.id');\n      const dispatchRouteId = dispatchRoute.get('id');\n      const dispatchRouteVersion = dispatchRoute.get('version');\n      const json = {\n        data: {\n          id: dispatchRouteId,\n          type: 'dispatchRoute',\n          attributes: {\n            lockedForOptimization: false,\n            schedulingMode: dispatchRoute.get('schedulingMode'),\n            affinities: dispatchRoute.get('affinities'),\n            tripLimit: dispatchRoute.get('tripLimit'),\n            distanceLimit: dispatchRoute.get('distanceLimit'),\n            version: dispatchRouteVersion\n          },\n          relationships: {\n            providerName: {\n              data: {\n                id: providerId,\n                type: 'providerName'\n              }\n            }\n          }\n        }\n      };\n      return ajax.post(_apiUrls.API.dispatchService.host + `/dispatch-route/${dispatchRouteId}`, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    createDriverBreak(dispatchRoute, plannedRouteOrdinal, routeId, dispatchRouteVersion) {\n      const session = this.get('session');\n      const json = {\n        data: {\n          type: 'stopPoint',\n          attributes: {\n            routeOrdinal: plannedRouteOrdinal\n          },\n          relationships: {\n            routeBreak: {\n              data: {\n                id: routeId,\n                type: 'routeBreak'\n              }\n            }\n          }\n        }\n      };\n\n      if (dispatchRouteVersion) {\n        json.data.relationships.dispatchRoute = {\n          //the function \"createDriverBreak\" would call from different sources. as we are adding versioning gradually to the services and functions\n          // we want to be sure that we dont block other calling operation. so i add this \"IF\" to include this relation only if we provide the version.\n          data: {\n            type: 'dispatchRoute',\n            id: dispatchRoute.get('id')\n          }\n        };\n        json.included = [{\n          type: 'dispatchRoute',\n          id: dispatchRoute.get('id'),\n          attributes: {\n            version: dispatchRouteVersion\n          }\n        }];\n      }\n\n      return this.get('ajaxService').post(_apiUrls.API.dispatchService.host + `/dispatch-route/${dispatchRoute.get('id')}/break`, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).catch(_ref => {\n        let {\n          payload\n        } = _ref;\n        const error = new Error();\n        if (payload.message) error.message = payload.message;\n        if (payload.status) error.status = payload.status;\n        if (payload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    },\n\n    removeDriverBreak(dispatchRouteId, breakId, dispatchRouteVersion) {\n      const session = this.get('session');\n      const json = {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      };\n\n      if (dispatchRouteVersion) {\n        json.data = {\n          data: {\n            type: 'stopPoint',\n            id: breakId,\n            relationships: {\n              dispatchRoute: {\n                data: {\n                  type: 'dispatchRoute',\n                  id: dispatchRouteId\n                }\n              }\n            }\n          },\n          included: [{\n            type: 'dispatchRoute',\n            id: dispatchRouteId,\n            attributes: {\n              version: dispatchRouteVersion\n            }\n          }]\n        };\n      }\n\n      return this.get('ajaxService').post(_apiUrls.API.dispatchService.host + `/dispatch-route/${dispatchRouteId}/break/${breakId}`, json).catch(_ref2 => {\n        let {\n          payload\n        } = _ref2;\n        const error = new Error();\n        if (payload.message) error.message = payload.message;\n        if (payload.status) error.status = payload.status;\n        if (payload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    },\n\n    putRouteBreak(routeBreak) {\n      const session = this.get('session');\n      const dispatchRouteId = routeBreak.get('route.dispatchRoute.id');\n      const dispatchRouteVersion = routeBreak.get('route.dispatchRoute.version');\n      const json = {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      };\n\n      if (dispatchRouteVersion) {\n        json.data = {\n          data: {\n            type: 'stopPoint',\n            id: routeBreak.id,\n            relationships: {\n              dispatchRoute: {\n                data: {\n                  type: 'dispatchRoute',\n                  id: dispatchRouteId\n                }\n              }\n            }\n          },\n          included: [{\n            type: 'dispatchRoute',\n            id: dispatchRouteId,\n            attributes: {\n              version: dispatchRouteVersion\n            }\n          }]\n        };\n      }\n\n      return this.get('ajaxService').put(`${_apiUrls.API.dispatchService.host}/dispatch-route/${dispatchRouteId}/break/${routeBreak.id}?ordinal=${routeBreak.get('plannedRouteOrdinal')}`, json).catch(_ref3 => {\n        let {\n          payload\n        } = _ref3;\n        const error = new Error();\n        if (payload.message) error.message = payload.message;\n        if (payload.status) error.status = payload.status;\n        if (payload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    },\n\n    postBreakdown(dispatchRoute, breakdownPlaceId, vehicle) {\n      const session = this.get('session');\n      const firstUnDepartedStop = dispatchRoute.get('firstUnDepartedStop'); // edge case a user decides to mark a vehicle breakdown on a route with no trips\n\n      const breakdownOrdinal = firstUnDepartedStop ? firstUnDepartedStop.get('routeOrdinal') : 1;\n      const json = {\n        type: 'breakdown',\n        attributes: {\n          vehicleId: vehicle.get('id'),\n          description: vehicle.get('breakdownDescription'),\n          breakdownTypeName: vehicle.get('breakdownType.id'),\n          breakdownOrdinal,\n          breakdownTime: vehicle.get('breakdownTime'),\n          breakdownPlaceId: breakdownPlaceId\n        },\n        relationships: {\n          dispatchRoute: {\n            data: {\n              type: 'dispatchRoute',\n              id: dispatchRoute.id\n            }\n          }\n        }\n      };\n      const included = [{\n        type: 'dispatchRoute',\n        id: dispatchRoute.id,\n        attributes: {\n          version: dispatchRoute.version\n        }\n      }];\n\n      if (firstUnDepartedStop && firstUnDepartedStop.get('promisedTime')) {\n        json.attributes.pickupTime = firstUnDepartedStop.get('promisedTime');\n      }\n\n      return this.get('ajaxService').post(_apiUrls.API.dispatchService.host + `/dispatch-route/${dispatchRoute.id}/breakdown`, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json,\n          included: included\n        }\n      }).catch(_ref4 => {\n        let {\n          payload\n        } = _ref4;\n        const error = new Error();\n        if (payload.message) error.message = payload.message;\n        if (payload.status) error.status = payload.status;\n        if (payload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    },\n\n    formatSpecialRoutePayload(dispatchRoute\n    /**breakdownPlace = null*/\n    ) {\n      const included = [];\n      const data = {\n        data: {\n          type: 'specialRoute',\n          attributes: {\n            name: 'a route name',\n            routeType: 'breakdown replacement',\n            shiftStartTime: '2019-06-27T07:00:00-07:00',\n            shiftEndTime: '2019-06-27T17:00:00-07:00'\n          },\n          relationships: {}\n        }\n      };\n      data.data.attributes.name = dispatchRoute.get('replacementRouteId');\n      data.data.attributes.shiftStartTime = dispatchRoute.get('replacementStartTime');\n      data.data.attributes.shiftEndTime = dispatchRoute.get('replacementEndTime');\n\n      if (dispatchRoute.get('provider.id')) {\n        data.data.relationships.providerName = {\n          data: {\n            id: dispatchRoute.get('provider.id'),\n            type: 'providerName'\n          }\n        };\n      }\n\n      if (dispatchRoute.get('dispatchSchedule.id')) {\n        data.data.relationships.dispatchSchedule = {\n          data: {\n            id: dispatchRoute.get('dispatchSchedule.id'),\n            type: 'dispatchSchedule'\n          }\n        };\n      }\n\n      if (dispatchRoute.get('replacementDriver.id')) {\n        data.data.relationships.driver = {\n          data: {\n            id: dispatchRoute.get('replacementDriver.id'),\n            type: 'driver'\n          }\n        };\n      }\n\n      if (dispatchRoute.get('replacementVehicle.id')) {\n        data.data.relationships.vehicle = {\n          data: {\n            id: dispatchRoute.get('replacementVehicle.id'),\n            type: 'vehicle'\n          }\n        };\n      }\n\n      if (dispatchRoute.get('id')) {\n        data.data.relationships.replacedRoute = {\n          data: {\n            id: dispatchRoute.get('id'),\n            type: 'dispatchRoute'\n          }\n        };\n        included.push({\n          type: 'dispatchRoute',\n          id: dispatchRoute.get('id'),\n          attributes: {\n            version: dispatchRoute.get('version')\n          }\n        });\n      } // starting location should be where the dispatcher marked the breakdown at\n      // if not found, we use the start garage\n      // Update: AIQ-3880 we don't want to update vehicle start/end garage so remove garage relationships.\n\n\n      if (included.length) data.included = included;\n      return data;\n    },\n\n    postSpecialRoute(dispatchRoute) {\n      let breakdownPlace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      const session = this.get('session');\n      const data = this.formatSpecialRoutePayload(dispatchRoute, breakdownPlace);\n      const json = JSON.stringify(data);\n      return this.get('ajaxService').post(_apiUrls.API.dispatchService.host + '/special-route', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    postSupervisor(body) {\n      const session = this.get('session');\n      const json = JSON.stringify(body);\n      return this.get('ajaxService').post(_apiUrls.API.dispatchService.host + '/special-route', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    transferAllTripsToRouteFunction(dispatchRoute, newDispatchRoute, remainingStopPoints) {\n      let ignoreCapacityViolations = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      const data = {\n        data: {\n          type: 'recipe',\n          attributes: {\n            instructions: []\n          }\n        }\n      };\n\n      function formatBulkTransfer(remainingStops, sourceId, destinationId) {\n        let newOrdinal = 1;\n        remainingStops.forEach(stop => {\n          data.data.attributes.instructions.push({\n            id: stop.id,\n            type: 'stop',\n            source: sourceId,\n            destination: destinationId,\n            ordinal: newOrdinal\n          });\n          newOrdinal++;\n        });\n      }\n\n      return new Promise((resolve, reject) => {\n        formatBulkTransfer(remainingStopPoints, dispatchRoute.id, newDispatchRoute.data.id);\n        const bulkOperationAdapter = this.get('store').adapterFor('bulk-operation');\n        return bulkOperationAdapter.createBulkAsyncOperation.perform({\n          instructions: data.data.attributes.instructions\n        }, ignoreCapacityViolations).then(result => {\n          if (result.state === 'failure') {\n            reject(result);\n          } else {\n            return resolve(null);\n          }\n        }).catch(function (error) {\n          reject(error);\n        });\n      });\n    },\n\n    manualTripTransferForDispatch(routeId, tripId, pickOrdinal, dropOrdinal, ignoreCapacityViolation) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.dispatchService.host}/dispatch-route/${routeId}/tripTransfer/${tripId}?pickOrdinal=${pickOrdinal}&dropOrdinal=${dropOrdinal}&ignoreCapacityViolations=${ignoreCapacityViolation}`;\n      return this.get('ajaxService').put(url, {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    async getDispatchRoute(dispatchRouteId) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.dispatchService.host}/dispatch-route/${dispatchRouteId}`;\n      return this.get('ajaxService').request(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    async getVersion(routeId) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.dispatchService.host}/dispatch-route/${routeId}`;\n      const response = await this.get('ajaxService').request(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      });\n\n      const version = _lodash.default.get(response, 'data.attributes.version', null);\n\n      return version;\n    },\n\n    async updateVersion(routeId, version) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.dispatchService.host}/dispatch-route/${routeId}`;\n      const data = {\n        data: {\n          id: routeId,\n          type: 'dispatchRoute',\n          attributes: {\n            version: version\n          }\n        }\n      };\n      const response = await this.get('ajaxService').patch(url, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data\n      });\n      return response;\n    },\n\n    async syncAVLM(dispatchRouteId) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.dispatchService.host}/dispatch-route/${dispatchRouteId}/sync`;\n      return await this.get('ajaxService').request(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    async fetchStopPoints(routeId) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.dispatchService.host}/dispatch-route/${routeId}?include=clusters,clusters.stopPoints`;\n      let stopPoints = [];\n\n      try {\n        const response = await this.get('ajaxService').request(url, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          }\n        });\n        stopPoints = stopPoints.concat(response.included.filter(s => s.type === 'stopPoint'));\n        stopPoints.sort((a, b) => {\n          const ordinalA = a.attributes && a.attributes.routeOrdinal ? a.attributes.routeOrdinal : 0;\n          const ordinalB = b.attributes && b.attributes.routeOrdinal ? b.attributes.routeOrdinal : 0;\n          return ordinalA - ordinalB;\n        });\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error(e);\n      }\n\n      return stopPoints;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/dispatch-schedule\", [\"exports\", \"adept-iq/adapters/-dispatch\", \"adept-iq/config/api-urls\"], function (_exports, _dispatch, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    waitListTrip(tripId) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const url = `${this.host}/trip/${tripId}/waitlist`;\n      return ajax.delete(url, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    urlForFindRecord(id, modelName\n    /*snapshot*/\n    ) {\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${modelName}/${id}`;\n      return baseUrl;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-19-a-review\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    pathForType() {\n      return 'driver-19a-review';\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-accident\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-attribute\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-availability\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-emergency-contact\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-health\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-license\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-log\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-phone-number\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-physical-type-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-driver_physical_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-position-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-driver_positions'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-position\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-driver_positions'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-provider-note\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-provider-notes\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-provider\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-suspension\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver-violation\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/driver\", [\"exports\", \"adept-iq/adapters/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/dwh-route\", [\"exports\", \"adept-iq/adapters/-dwh-dwhService\", \"adept-iq/config/api-urls\", \"adept-iq/utils/rql-generators\"], function (_exports, _dwhDwhService, _apiUrls, _rqlGenerators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable camelcase */\n  var _default = _dwhDwhService.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    findRecord(store, type, id) {\n      return this.getDwhRouteById(id);\n    },\n\n    updateRecord(store, type, snapshot) {\n      const serialized = {};\n      const serializer = store.serializerFor(type.modelName);\n      serializer.serializeIntoHash(serialized, type, snapshot, {\n        includeId: true\n      }); // TODO: use real API to update\n\n      return Promise.resolve(serialized);\n    },\n\n    async getDwhRoutesByDate(date) {\n      const session = this.get('session');\n      const apiUrl = `${this.get('host')}/route`;\n      const fields = `\n      id,\n      provider,\n      attributes.routeName,\n      attributes.tenantId,\n      attributes.vehicleName,\n      attributes.driverId,\n      attributes.driverPhoneNumber,\n      attributes.plannedStartTime,\n      attributes.plannedEndTime,\n      attributes.actualstarttime,\n      attributes.actualendtime`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const json = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields\n        }\n      };\n      const res = await this.get('ajaxService').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: json\n      });\n      const data = res.data;\n      return data;\n    },\n\n    async getDwhRouteById(id) {\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.dwhService.host}/route`;\n      const fields = `\n      id,\n      provider,\n      startGarage,\n      endGarage,\n      breaks,\n      trips,\n      attributes.schedulename,\n      attributes.routeName,\n      attributes.tenantId,\n      attributes.vehicleName,\n      attributes.driverId,\n      attributes.driverFullName,\n      attributes.driverPhoneNumber,\n      attributes.plannedStartTime,\n      attributes.plannedEndTime,\n      attributes.actualstarttime,\n      attributes.actualendtime`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const json = {\n        data: {\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields,\n          rql_filter: (0, _rqlGenerators.eqRQL)('routeAdeptId', [id])\n        }\n      };\n      const res = await this.get('ajaxService').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: json\n      });\n      const data = res.data && res.data.length > 0 ? res.data.firstObject : null;\n      return data;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/dwh-stop-point\", [\"exports\", \"adept-iq/adapters/-dwh-dwhService\"], function (_exports, _dwhDwhService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dwhDwhService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/dwh-trip\", [\"exports\", \"adept-iq/adapters/-dwh-dwhService\"], function (_exports, _dwhDwhService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dwhDwhService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/eligibility-category\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-eligibility_categories'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/eligibility-condition\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-eligibility_conditions'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/eligibility-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-eligibility_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/employment-status-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-driver_statuses'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/etanav-route-break\", [\"exports\", \"adept-iq/adapters/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dispatch.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/etanav-route\", [\"exports\", \"adept-iq/adapters/-iqux-iquxService\", \"adept-iq/config/api-urls\"], function (_exports, _iquxIquxService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _iquxIquxService.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n\n    async fetchUnperformedStopPoints(routeId) {\n      const session = this.get('session');\n      const url = `${_apiUrls.API.etaService.host}/route/${routeId}`;\n      let stopPoints = [];\n\n      try {\n        const response = await this.get('ajaxService').request(url, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          }\n        });\n\n        if (response.data.attributes.stopPoints) {\n          stopPoints = stopPoints.concat(response.data.attributes.stopPoints.filter(s => !s.id.startsWith('G') && s.status === 'pending'));\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error(e);\n      }\n\n      return stopPoints;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/etanav-stop-point\", [\"exports\", \"adept-iq/adapters/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dispatch.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/event\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/exam-type-name\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-typeOfDate'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/fare-category\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-fare_categories'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/fare-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-fare_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/funding-agency\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-funding_agencies'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/generated-subscription-booking\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/group\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/inspection-category\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_inspector_categories'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/inspector-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_inspectors'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/internal-ui-config\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-internal_ui_configs'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/lease-company\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_lease_companies'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/leg-service-need\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/leg-travel-need\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/leg\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/location\", [\"exports\", \"adept-iq/adapters/-addressService\", \"adept-iq/config/api-urls\"], function (_exports, _addressService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _addressService.default.extend({\n    ajax1: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    postLocation(location) {\n      const session = this.get('session');\n      const json = {\n        type: 'location',\n        attributes: {\n          lat: location.get('lat'),\n          lng: location.get('lng'),\n          geoNode: 0\n        }\n      };\n      return this.get('ajax1').post(_apiUrls.API.addressService.host + '/location', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    patchLocation(location) {\n      const session = this.get('session');\n      const id = location.get('id');\n      const json = {\n        id,\n        type: 'location',\n        attributes: {\n          lat: location.get('lat'),\n          lng: location.get('lng'),\n          geoNode: location.get('geoNode')\n        }\n      };\n      return this.get('ajax1').patch(_apiUrls.API.addressService.host + '/location/' + id, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    deleteLocation(locationId) {\n      const session = this.get('session');\n      return this.get('ajax1').delete(_apiUrls.API.addressService.host + '/location/' + locationId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/lock\", [\"exports\", \"adept-iq/adapters/-dispatch\", \"adept-iq/config/api-urls\", \"ember-ajax/errors\", \"adept-iq/config/mapped-permIds\"], function (_exports, _dispatch, _apiUrls, _errors, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    // not using \"ajax\" so there won't be conflict with the base's ajax calls\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n\n    async doLockRoute(dispatchRoute) {\n      let persist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let forwardError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      let logging = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n      let ttl = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n      const ajax = this.get('ajaxService');\n      const session = this.get('session');\n      const notifications = this.get('notifications');\n      const timeoutParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeLockTimeout');\n      const routeLockTimeout = timeoutParam ? parseInt(timeoutParam.get('value'), 10) : 1800;\n      const json = {\n        data: {\n          type: 'lock',\n          id: dispatchRoute.get('id'),\n          attributes: {\n            entityId: dispatchRoute.get('id'),\n            entityType: 'dispatchRoute',\n            timeToLive: ttl ? ttl : routeLockTimeout,\n            persist: persist,\n            logging: logging\n          }\n        }\n      };\n\n      try {\n        const response = await ajax.post(_apiUrls.API.dispatchService.host + '/lock', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        });\n\n        if (response.data && response.data.length > 0) {\n          return response.data[0];\n        }\n      } catch (error) {\n        notifications.warning('Obtain route lock failed at this time, please retry operation.');\n\n        if (forwardError) {\n          throw error;\n        }\n      }\n    },\n\n    async doUnlockRoute(dispatchRoute) {\n      const ajax = this.get('ajaxService');\n      const session = this.get('session');\n      const notifications = this.get('notifications');\n      const userId = session.data.authenticated.userId;\n      const dispatchRouteLock = this.get('store').peekRecord('lock', dispatchRoute.get('id'));\n      const user = this.get('store').peekRecord('sso-user', userId);\n      const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.unlockOtherUserLocks, null);\n\n      if (Ember.isNone(dispatchRouteLock)) {\n        return;\n      }\n\n      if (userId !== dispatchRouteLock.get('owner.id') && !user.get('isAdmin') && !permGranted) {\n        notifications.info('You do not have permission to unlock this route.');\n        return;\n      }\n\n      if (!Ember.isNone(dispatchRouteLock)) {\n        try {\n          await ajax.delete(_apiUrls.API.dispatchService.host + '/lock/dispatchRoute/' + dispatchRouteLock.get('id'), {\n            method: 'DELETE',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (error) {\n          if ((0, _errors.isNotFoundError)(error)) {\n            // lock can be unlock from server so avoid pop up banner.\n            return;\n          }\n\n          notifications.warning(`Error removing route lock, ${error.message}`);\n          throw error;\n        }\n      }\n    },\n\n    async forceUnlockRoute(dispatchRoute) {\n      let logging = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const ajax = this.get('ajaxService');\n      const session = this.get('session');\n      const notifications = this.get('notifications');\n      const userId = session.data.authenticated.userId;\n      const dispatchRouteLock = this.get('store').peekRecord('lock', dispatchRoute.get('id'));\n      const user = this.get('store').peekRecord('sso-user', userId);\n      const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.unlockOtherUserLocks, null);\n\n      if (Ember.isNone(dispatchRouteLock)) {\n        return;\n      }\n\n      if (userId !== dispatchRouteLock.get('owner.id') && !user.get('isAdmin') && !permGranted) {\n        notifications.info('You do not have permission to unlock this route.');\n        return;\n      }\n\n      if (!Ember.isNone(dispatchRouteLock)) {\n        try {\n          await ajax.delete(_apiUrls.API.dispatchService.host + '/lock/force/dispatchRoute/' + dispatchRouteLock.get('id') + `?logging=${logging}`, {\n            method: 'DELETE',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (error) {\n          if ((0, _errors.isNotFoundError)(error)) {\n            // lock can be unlock from server so avoid pop up banner.\n            return;\n          }\n\n          notifications.warning(`Error removing route lock, ${error.message}`);\n          throw error;\n        }\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/maintenance-location-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_maint_locations'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/maintenance-status-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_maint_statuses'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/maintenance-type-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_maint_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/manufacturer-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_manufacturers'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/metric\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/no-show-reason-category\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-no_show_reason_categories'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/no-show-reason-code\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-no_show_reason_codes'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/passenger-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-passenger_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/perm-sso-role\", [\"exports\", \"adept-iq/adapters/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssoSsoService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/role`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/perm-sso-user\", [\"exports\", \"adept-iq/adapters/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssoSsoService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/user`;\n    },\n\n    postUser(payload) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/user', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: payload\n      }).catch(e => {\n        const {\n          payload: epayload,\n          status\n        } = e;\n        const error = new Error();\n        if (epayload.message) error.message = epayload.message;\n        if (status) error.status = status;\n        if (epayload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    },\n\n    patchUser(payload, userId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/user/' + userId, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: payload\n      });\n    },\n\n    deleteUser(userId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/user/' + userId + '/status/delete', {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      });\n    },\n\n    getRolesByUser(userId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/user/' + userId, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      });\n    },\n\n    deleteRolesByUser(userId, roleId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/user/' + userId + '/roles/' + roleId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      });\n    },\n\n    updateRolesByUser(userId, roleId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').request(this.get('host') + '/user/' + userId + '/roles/' + roleId, {\n        dataType: 'text',\n        method: 'PUT',\n        contentType: 'text',\n        headers: {\n          'Content-Type': 'text',\n          Accept: 'text',\n          Authorization: `Bearer ${token}`\n        },\n        data: null\n      }).catch(e => {\n        const {\n          payload,\n          status\n        } = e;\n        const error = new Error();\n        if (payload.message) error.message = payload.message;\n        if (status) error.status = status;\n        if (payload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    },\n\n    updateStatusByUser(userId, status) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/user/' + userId + '/status/' + status, {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: {\n          status\n        }\n      });\n    },\n\n    getSSOProvider() {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/provider', {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      });\n    },\n\n    updateUsernameAndPassword(payload, userId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').post(this.get('host') + '/basicUser/' + userId, {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: payload\n      });\n    },\n\n    updateProviders(userId, providerId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').request(this.get('host') + '/user/' + userId + '/providers/' + providerId, {\n        dataType: 'text',\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      });\n    },\n\n    deleteProviders(userId, providerId) {\n      const token = this.get('session.data.authenticated.token');\n      return this.get('ajaxService').request(this.get('host') + '/user/' + userId + '/providers/' + providerId, {\n        dataType: 'text',\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/place-category-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-place_category_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/place\", [\"exports\", \"adept-iq/adapters/-addressService\", \"adept-iq/config/api-urls\"], function (_exports, _addressService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _addressService.default.extend({\n    ajax1: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    postPlace(place, addressId, locationId, categoryTypeId) {\n      const session = this.get('session');\n      const json = {\n        type: 'place',\n        attributes: {\n          geocodingMethod: place.get('geocodingMethod')\n        },\n        relationships: {\n          placeCategoryTypeName: {\n            data: {\n              type: 'placeCategoryTypeName',\n              id: categoryTypeId\n            }\n          },\n          address: {\n            data: {\n              type: 'address',\n              id: addressId\n            }\n          },\n          location: {\n            data: {\n              type: 'location',\n              id: locationId\n            }\n          }\n        }\n      };\n      return this.get('ajax1').post(_apiUrls.API.addressService.host + '/place', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    patchPlace(place, addressId, locationId, categoryTypeId) {\n      const session = this.get('session');\n      const id = place.get('id');\n      const json = {\n        type: 'place',\n        id,\n        attributes: {\n          geocodingMethod: place.get('geocodingMethod')\n        },\n        relationships: {\n          placeCategoryTypeName: {\n            data: {\n              type: 'placeCategoryTypeName',\n              id: categoryTypeId\n            }\n          },\n          address: {\n            data: {\n              type: 'address',\n              id: addressId\n            }\n          },\n          location: {\n            data: {\n              type: 'location',\n              id: locationId\n            }\n          }\n        }\n      };\n      return this.get('ajax1').patch(_apiUrls.API.addressService.host + '/place/' + id, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    deletePlace(placeId) {\n      const session = this.get('session');\n      return this.get('ajax1').delete(_apiUrls.API.addressService.host + '/place/' + placeId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/playback-activity-log\", [\"exports\", \"adept-iq/adapters/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    getActivityLogs(query) {\n      const session = this.get('session');\n      const host = this.get('host');\n      const url = `${host}/trip-route-activity-log`;\n      return this.get('ajax').post(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: query\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/playback-driver\", [\"exports\", \"adept-iq/adapters/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    findRecord() {\n      throw new Error('adapter method unsupported');\n    },\n\n    buildURL() {\n      const host = this.get('host');\n      return `${host}/driver`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/playback-route\", [\"exports\", \"adept-iq/adapters/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    findRecord() {\n      throw new Error('adapter method unsupported');\n    },\n\n    buildURL() {\n      const host = this.get('host');\n      return `${host}/route`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/playback-vehicle\", [\"exports\", \"adept-iq/adapters/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    findRecord() {\n      throw new Error('adapter method unsupported');\n    },\n\n    buildURL() {\n      const host = this.get('host');\n      return `${host}/vehicle`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/polyline\", [\"exports\", \"adept-iq/adapters/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dispatch.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/problem-identified-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_problem_identified'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/provider-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-provider_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/provider\", [\"exports\", \"adept-iq/adapters/cs-config-model\", \"fuzzysearch\"], function (_exports, _csConfigModel, _fuzzysearch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-providers',\n\n    query(store, type, query) {\n      return this._super(...arguments).then(response => {\n        if (Ember.isEmpty(query.filter)) return response;\n        const needle = query.filter.split('%')[1];\n        response.data = response.data.filter(datum => {\n          try {\n            const value = JSON.parse(datum.attributes.value);\n            return (0, _fuzzysearch.default)(needle, value.name.toLowerCase());\n          } catch (e) {\n            return false;\n          }\n        });\n        return response;\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rear-axel-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_rear_axels'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-driver\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/driver`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-passenger\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/passenger`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-route-id\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/route`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-route\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL: function (modelType) {\n      if (modelType === 'reconcile-route') {\n        const host = this.get('host');\n        return `${host}/route`;\n      }\n\n      return this._super(...arguments);\n    },\n\n    getActivityLogs(query) {\n      const session = this.get('session');\n      var url = this.buildURL('event', null, null, 'query', query);\n      return this.get('ajaxService').post(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: query\n      });\n    },\n\n    createActivityLog(routePayload, type) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        type: type,\n        attributes: routePayload\n      };\n      var url = this.buildURL('event');\n\n      if (routePayload) {\n        return ajax.post(url, {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${token}`\n          },\n          data: {\n            data: json\n          }\n        });\n      }\n    },\n\n    putRoute(routePayload, type) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        type: type,\n        attributes: routePayload\n      };\n\n      if (routePayload) {\n        return ajax.put(this.get('host') + '/route/' + routePayload.id, {\n          method: 'PUT',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${token}`\n          },\n          data: {\n            data: json\n          }\n        });\n      }\n    },\n\n    patchRoute(routePayload, type) {\n      const session = this.get('session');\n      const json = {\n        type,\n        attributes: routePayload\n      };\n      return this.get('ajaxService').patch(this.get('host') + '/route/' + routePayload.id, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    postRoute(routePayload, type, replacedRouteId) {\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        type: type,\n        attributes: routePayload\n      };\n      const url = replacedRouteId ? `/route?oldRouteId=${replacedRouteId}` : '/route';\n      return this.get('ajaxService').post(this.get('host') + url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-stop\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/stop`;\n    },\n\n    postStop(routePayload, type) {\n      const session = this.get('session');\n      const json = {\n        type,\n        attributes: routePayload\n      };\n      return this.get('ajaxService').post(this.get('host') + '/stop', {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-trip\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/trip`;\n    },\n\n    patchTrip(tripPayload, type, oldRouteId) {\n      const session = this.get('session');\n      const json = {\n        type,\n        attributes: tripPayload\n      };\n      return this.get('ajaxService').patch(this.get('host') + '/trip/' + tripPayload.tripId + '?oldRouteId=' + oldRouteId, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    putTrip(tripPayload, type) {\n      const session = this.get('session');\n      const json = {\n        type: type,\n        attributes: tripPayload\n      };\n      return this.get('ajaxService').post(this.get('host') + '/trip/' + tripPayload.tripId, {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    postTrip(routePayload) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        type: routePayload.type,\n        attributes: routePayload\n      };\n      return ajax.post(this.get('host') + '/trip', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-vehicle\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/vehicle`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/reconcile-verify-route\", [\"exports\", \"adept-iq/adapters/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/verify`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-certification\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-contact-info\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-eligibility\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-external-eligibility\", [\"exports\", \"ember-data\", \"adept-iq/config/api-urls\"], function (_exports, _emberData, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var RESTAdapter = _emberData.default.RESTAdapter;\n\n  var _default = RESTAdapter.extend({\n    host: _apiUrls.API.riderManagementService.host,\n    session: Ember.inject.service(),\n\n    buildURL(type, id) {\n      return `${this.host}/nyct-rider-eligibility/${id}`;\n    },\n\n    headers: Ember.computed('session.data.authenticated.token', function () {\n      const session = this.get('session');\n      return {\n        'Authorization': `Bearer ${session.data.authenticated.token}`\n      };\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-external\", [\"exports\", \"ember-data\", \"adept-iq/config/api-urls\"], function (_exports, _emberData, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var RESTAdapter = _emberData.default.RESTAdapter;\n\n  var _default = RESTAdapter.extend({\n    host: _apiUrls.API.riderManagementService.host,\n    session: Ember.inject.service(),\n    ajaxService: Ember.inject.service('ajax'),\n\n    pathForType() {\n      return 'nyct-rider-long';\n    },\n\n    urlForQuery() {\n      return `${_apiUrls.API.bookingService.host}/rider-external/ShortVer?`;\n    },\n\n    queryRecord(store, type, id) {\n      const session = this.get('session');\n      return this.get('ajaxService').request(_apiUrls.API.riderManagementService.host + '/nyct-rider-long/' + id, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    query(store, type, params) {\n      const session = this.get('session');\n      return this.get('ajaxService').request(_apiUrls.API.riderManagementService.host + '/nyct-rider-short?' + params, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    queryRiderShort(query) {\n      const session = this.get('session');\n      return this.get('ajaxService').request(_apiUrls.API.riderManagementService.host + '/nyct-rider-short?' + query, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    headers: Ember.computed('session.data.authenticated.token', function () {\n      const session = this.get('session');\n      return {\n        'Authorization': `Bearer ${session.data.authenticated.token}`\n      };\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-funding\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-phone-number\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-place-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-rider_place_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-place\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-profile\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-service-need\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-suspension\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider-travel-need\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/rider\", [\"exports\", \"adept-iq/adapters/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _rmsRiderManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/road-call-code-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_road_call_codes'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/role-permission\", [\"exports\", \"adept-iq/adapters/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssoSsoService.default.extend({\n    buildURL(modelName\n    /*, id, snapshot, requestType, query*/\n    ) {\n      return this._buildUrlForPath(modelName);\n    },\n\n    _buildUrlForPath() {\n      const host = this.get('host');\n      return `${host}/role-permission`;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-break\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\", \"adept-iq/config/api-urls\"], function (_exports, _ssSchedulingService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    postRouteBreak(routeBreak, placeId) {\n      const session = this.get('session');\n      const json = {\n        attributes: {\n          state: routeBreak.get('state'),\n          status: routeBreak.get('status'),\n          plannedRouteOrdinal: routeBreak.get('plannedRouteOrdinal'),\n          requestTime: routeBreak.get('requestTime'),\n          promisedStart: routeBreak.get('promisedStart'),\n          estimatedStart: routeBreak.get('estimatedStart'),\n          estimatedEnd: routeBreak.get('estimatedEnd'),\n          plannedDuration: routeBreak.get('plannedDurationSeconds'),\n          //Payload request is passed in seconds,\n          notes: routeBreak.get('notes')\n        },\n        relationships: {\n          route: {\n            data: {\n              type: 'route',\n              id: routeBreak.get('route.id')\n            }\n          },\n          breakTypeName: {\n            data: {\n              type: 'breakTypeName',\n              id: routeBreak.get('breakType.id')\n            }\n          }\n        },\n        type: 'routeBreak'\n      };\n\n      if (!Ember.isEmpty(placeId)) {\n        json.relationships.place = {\n          data: {\n            type: 'place',\n            id: placeId\n          }\n        };\n      }\n\n      return this.get('ajaxService').post(_apiUrls.API.schedulingService.host + '/route-break', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    patchRouteBreak(routeBreak, placeId) {\n      const session = this.get('session');\n      const json = {\n        attributes: {\n          state: routeBreak.get('state'),\n          status: routeBreak.get('status'),\n          plannedRouteOrdinal: routeBreak.get('plannedRouteOrdinal'),\n          requestTime: routeBreak.get('requestTime'),\n          promisedStart: routeBreak.get('promisedStart'),\n          estimatedStart: routeBreak.get('estimatedStart'),\n          estimatedEnd: routeBreak.get('estimatedEnd'),\n          plannedDuration: routeBreak.get('plannedDurationSeconds'),\n          //Payload request is passed in seconds,\n          notes: routeBreak.get('notes')\n        },\n        relationships: {\n          route: {\n            data: {\n              type: 'route',\n              id: routeBreak.get('route.id')\n            }\n          },\n          breakTypeName: {\n            data: {\n              type: 'breakTypeName',\n              id: routeBreak.get('breakType.id')\n            }\n          }\n        },\n        type: 'routeBreak',\n        id: routeBreak.get('id')\n      };\n\n      if (!Ember.isEmpty(placeId)) {\n        json.relationships.place = {\n          data: {\n            type: 'place',\n            id: placeId\n          }\n        };\n      }\n\n      return this.get('ajaxService').post(_apiUrls.API.schedulingService.host + '/route-break/' + routeBreak.id, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      });\n    },\n\n    deleteRouteBreak(routeBreakId) {\n      const session = this.get('session');\n      return this.get('ajaxService').delete(_apiUrls.API.schedulingService.host + '/route-break/' + routeBreakId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-calendar\", [\"exports\", \"adept-iq/adapters/-ada-adaManagement\"], function (_exports, _adaAdaManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _adaAdaManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-exec-event\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\", \"adept-iq/errors/version-error\"], function (_exports, _avlmAvlmService, _versionError) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // TODO: remove this if possible\n    routeExecEvent: Ember.inject.service('routeexecevent'),\n\n    query(store, type, query) {\n      const session = this.get('session');\n      var url = this.buildURL(type.modelName, null, null, 'query', query);\n      return this.get('ajax').post(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: query\n      });\n    },\n\n    createStopArriveEvent(stopPoint, avlmVersion, dispatchRoute, activityLog) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.stopArriveData();\n      const preparedData = routeExecEvent.prepareStopArriveData(data, stopPoint, activityLog, dispatchRoute, avlmVersion);\n      return this._postRouteExecEvent(preparedData);\n    },\n\n    createStopDepartEvent(stopPoint, avlmVersion, dispatchRoute) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.stopDepartData();\n      const preparedData = routeExecEvent.prepareStopDepartData(data, stopPoint, dispatchRoute, avlmVersion);\n      return this._postRouteExecEvent(preparedData);\n    },\n\n    createAcceptEvent(stopPoint, avlmVersion, noShowTime, noShowNotes, activityLog) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.stopAcceptData();\n      const preparedData = routeExecEvent.prepareStopAcceptData(data, stopPoint, noShowTime, noShowNotes, activityLog, avlmVersion);\n      return this._postRouteExecEvent(preparedData);\n    },\n\n    createStopNoShowEvent(stopPoint, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.noShowData();\n      const preparedData = routeExecEvent.prepareStopNoShowData(data, stopPoint, avlmVersion);\n      return this._postRouteExecEvent(preparedData);\n    },\n\n    createTripNoShowRequestEvent(trip, noShowTypeDecision, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.noShowData();\n      const preparedData = routeExecEvent.prepareTripNoShowRequestData(data, trip, noShowTypeDecision, avlmVersion);\n      return this._postRouteExecEvent(preparedData);\n    },\n\n    createUndoNoShowEvent(stopPoint, noShowTime, noShowNotes, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const undoNoShowData = routeExecEvent.undoNoShowData();\n      const preparedUndoRouteStartData = routeExecEvent.prepareUndoNoShowData(undoNoShowData, stopPoint, noShowTime, noShowNotes, avlmVersion);\n      return this._postRouteExecEvent(preparedUndoRouteStartData);\n    },\n\n    createStartRouteEvent(route, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const routeStartData = routeExecEvent.routeStartData();\n      const preparedRouteStartData = routeExecEvent.prepareRouteStartData(routeStartData, route, avlmVersion);\n      return this._postRouteExecEvent(preparedRouteStartData);\n    },\n\n    createUndoStartRouteEvent(route, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const undoRouteStartData = routeExecEvent.undoRouteStartData();\n      const preparedUndoRouteStartData = routeExecEvent.prepareUndoRouteStartData(undoRouteStartData, route, avlmVersion);\n      return this._postRouteExecEvent(preparedUndoRouteStartData);\n    },\n\n    createEndRouteEvent(route, avlmVersion) {\n      const routeEndData = this.get('routeExecEvent').routeEndData();\n      const preparedRouteEndData = this.get('routeExecEvent').prepareRouteEndData(routeEndData, route, avlmVersion);\n      return this._postRouteExecEvent(preparedRouteEndData);\n    },\n\n    createUndoEndRouteEvent(route, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const undoRouteEndData = routeExecEvent.undoRouteEndData();\n      const prepareUndoRouteEndData = routeExecEvent.prepareUndoRouteEndData(undoRouteEndData, route, avlmVersion);\n      return this._postRouteExecEvent(prepareUndoRouteEndData);\n    },\n\n    createCompleteRouteEvent(route, avlmVersion) {\n      const routeCompleteData = this.get('routeExecEvent').routeCompleteData();\n      const preparedRouteCompleteData = this.get('routeExecEvent').prepareRouteCompleteData(routeCompleteData, route, avlmVersion);\n      return this._postRouteExecEvent(preparedRouteCompleteData);\n    },\n\n    createStartBreakEvent(stopPoint, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const startBreakData = routeExecEvent.onBreakData();\n      const preparedStartBreakData = routeExecEvent.prepareStartBreakData(startBreakData, stopPoint, avlmVersion);\n      return this._postRouteExecEvent(preparedStartBreakData);\n    },\n\n    createEndBreakEvent(stopPoint, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const endBreakData = routeExecEvent.offBreakData();\n      const preparedStartBreakData = routeExecEvent.prepareEndBreakData(endBreakData, stopPoint, avlmVersion);\n      return this._postRouteExecEvent(preparedStartBreakData);\n    },\n\n    createAcceptBreakEvent(stopPoint, noShowTime, noShowNotes, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.breakAcceptData();\n      const preparedData = routeExecEvent.prepareBreakAcceptData(data, stopPoint, noShowTime, noShowNotes, avlmVersion);\n      return this._postRouteExecEvent(preparedData);\n    },\n\n    async _postRouteExecEvent(data) {\n      const session = this.get('session');\n      const uri = this.buildURL('route-exec-event');\n\n      if (!data.data.attributes.routeVersion) {\n        throw new _versionError.default('missing avlmVersion');\n      }\n\n      try {\n        await this.get('ajax').post(uri, {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data\n        }); // return avlmVersion magic word so next perform won't fail\n\n        return '1-c';\n      } catch (err) {\n        if (err.payload && err.payload.includes('TIMEOUT')) {\n          return '1-c';\n        }\n\n        throw err;\n      }\n    },\n\n    // Batch perform: build ONE route-exec-event POST whose attributes.events = [{content}, ...]\n    // covers every arrive/depart (and break on/off) in order, sharing routeVersion/driver/vehicle/\n    // source. Collapses the old 2N per-stop posts to 1; AVLM performs each event explicitly.\n    // `events` = [{stopPoint, type:'arrive'|'depart'|'startBreak'|'endBreak'}].\n    // Contract mirrors avlmserver test/e2e/perform.js buildBatchEvent.\n    createBatchPerformEvents(events, avlmVersion) {\n      const routeExecEvent = this.get('routeExecEvent');\n      const prepared = events.map(_ref => {\n        let {\n          stopPoint,\n          type\n        } = _ref;\n\n        switch (type) {\n          case 'arrive':\n            return routeExecEvent.prepareStopArriveData(routeExecEvent.stopArriveData(), stopPoint, null, null, avlmVersion);\n\n          case 'depart':\n            return routeExecEvent.prepareStopDepartData(routeExecEvent.stopDepartData(), stopPoint, null, avlmVersion);\n\n          case 'startBreak':\n            return routeExecEvent.prepareStartBreakData(routeExecEvent.onBreakData(), stopPoint, avlmVersion);\n\n          case 'endBreak':\n            return routeExecEvent.prepareEndBreakData(routeExecEvent.offBreakData(), stopPoint, avlmVersion);\n\n          default:\n            throw new Error(`createBatchPerformEvents: unknown event type ${type}`);\n        }\n      });\n      return this._postBatchRouteExecEvent(prepared, avlmVersion);\n    },\n\n    async _postBatchRouteExecEvent(preparedList, avlmVersion) {\n      const session = this.get('session');\n      const uri = this.buildURL('route-exec-event');\n\n      if (!avlmVersion) {\n        throw new _versionError.default('missing avlmVersion');\n      } // Envelope = first prepared event (keeps a valid top-level content so AVLM's outer\n      // validateRequestBody passes), with one shared routeVersion and the events[] it loops over.\n\n\n      const base = preparedList[0];\n      base.data.attributes.routeVersion = avlmVersion;\n      base.data.attributes.events = preparedList.map(prepared => ({\n        content: prepared.data.attributes.content\n      }));\n\n      try {\n        await this.get('ajax').post(uri, {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: base\n        });\n        return '1-c';\n      } catch (err) {\n        if (err.payload && err.payload.includes('TIMEOUT')) {\n          return '1-c';\n        }\n\n        throw err;\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-shape\", [\"exports\", \"adept-iq/adapters/-ada-adaManagement\"], function (_exports, _adaAdaManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _adaAdaManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-template-availability\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\", \"adept-iq/config/api-urls\"], function (_exports, _ssSchedulingService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    getPath(url, defaults) {\n      // eslint-disable-next-line no-useless-escape\n      var reUrlPath = /(?:\\w+:)?\\/\\/[^\\/]+([^?#]+)/;\n      var urlParts = url.match(reUrlPath) || [url, defaults];\n      return urlParts.pop();\n    },\n\n    findBelongsTo(store, snapshot, url, relationship) {\n      const path = this.getPath(url);\n      const newUrl = this.iquxServiceHost + path;\n      return this._super(store, snapshot, newUrl, relationship);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-template\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route-vehicle-driver\", [\"exports\", \"adept-iq/adapters/-dispatch\", \"adept-iq/config/api-urls\", \"moment\", \"lodash\"], function (_exports, _dispatch, _apiUrls, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service('session'),\n\n    updateRecord(store, type, snapshot) {\n      const data = {};\n      const serializer = store.serializerFor(type.modelName);\n      const id = snapshot.id;\n      serializer.serializeIntoHash(data, type, snapshot, {\n        includeId: true\n      });\n      let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n      if (snapshot.adapterOptions && snapshot.adapterOptions.ignoreCapacityViolations) {\n        url += '?ignoreCapacityViolations=' + snapshot.adapterOptions.ignoreCapacityViolations;\n      }\n\n      return this.ajax(url, 'PATCH', {\n        data: data\n      });\n    },\n\n    createRouteVehicleDriver(dispatchRoutePayload, route, driver, canIgnoreCapacityViolation) {\n      const ajax = this.get('ajaxService');\n      const session = this.get('session');\n      const {\n        dispatchSchedule\n      } = dispatchRoutePayload.data.relationships; //added for behavioral consistency with PATCH\n\n      const url = _apiUrls.API.dispatchService.host + '/route-vehicle-driver' + (canIgnoreCapacityViolation ? '?ignoreCapacityViolations=true&newRoute=true' : '?newRoute=true');\n      const json = {\n        data: {\n          type: 'routeVehicleDriver',\n          attributes: {\n            startTime: (0, _moment.default)(route.get('plannedStartTime')).format(),\n            endTime: (0, _moment.default)(route.get('plannedEndTime')).format(),\n            dispatchTakeover: true\n          },\n          relationships: {\n            dispatchRoute: {\n              data: {\n                id: dispatchRoutePayload.data.id,\n                type: 'dispatchRoute'\n              }\n            },\n            dispatchSchedule: {\n              data: {\n                id: dispatchSchedule.data.id,\n                type: 'dispatchSchedule'\n              }\n            }\n          }\n        }\n      };\n\n      if (route.get('vehicle.isPlaceholder') === false) {\n        json.data.relationships = { ...json.data.relationships,\n          vehicle: {\n            data: {\n              id: route.get('vehicle.id'),\n              type: 'vehicle'\n            }\n          }\n        };\n      } else {\n        json.data.attributes.dispatchTakeover = false;\n      }\n\n      if (Ember.isPresent(driver) && Ember.isPresent(driver.get('id'))) {\n        json.data.relationships.driver = {\n          data: {\n            id: driver.get('id'),\n            type: 'driver'\n          }\n        };\n      }\n\n      return ajax.post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    async updateRouteVehicleDriver(dispatchRoute, vehicle, driver, dispatchRouteVersion) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const dispatchRouteId = dispatchRoute.get('id');\n      const dispatchScheduleId = dispatchRoute.get('dispatchSchedule.id');\n      const rvd = dispatchRoute.get('latestRouteVehicleDriver');\n      const rvdId = rvd.get('id');\n      const driverId = driver ? driver.get('id') : null;\n      const vehicleId = vehicle ? vehicle.get('id') : null;\n      const json = {\n        data: {\n          id: rvdId,\n          type: 'routeVehicleDriver',\n          attributes: {\n            startTime: (0, _moment.default)(rvd.get('startTime')).format(),\n            endTime: (0, _moment.default)(rvd.get('endTime')).format(),\n            dispatchTakeover: true\n          },\n          relationships: {\n            dispatchSchedule: {\n              data: {\n                id: dispatchScheduleId,\n                type: 'dispatchSchedule'\n              }\n            },\n            dispatchRoute: {\n              data: {\n                id: dispatchRouteId,\n                type: 'dispatchRoute'\n              }\n            }\n          }\n        }\n      };\n\n      if (dispatchRouteVersion) {\n        json.included = [{\n          type: 'dispatchRoute',\n          id: dispatchRoute.get('id'),\n          attributes: {\n            version: dispatchRouteVersion\n          }\n        }];\n      }\n\n      if (Ember.isPresent(vehicleId)) {\n        json.data.relationships.vehicle = {\n          data: {\n            id: vehicleId,\n            type: 'vehicle'\n          }\n        };\n      } else {\n        json.data.relationships.vehicle = {\n          data: null\n        };\n      }\n\n      if (Ember.isPresent(driverId)) {\n        json.data.relationships.driver = {\n          data: {\n            id: driverId,\n            type: 'driver'\n          }\n        };\n      } else {\n        json.data.relationships.driver = {\n          data: null\n        };\n      }\n\n      const response = await ajax.post(_apiUrls.API.dispatchService.host + `/route-vehicle-driver/${rvdId}`, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n      rvd.set('hasDirtyAttributes', false); // Clear the dirty state\n\n      rvd.rollbackAttributes();\n      return response;\n    },\n\n    normalizeErrorResponse(status, headers, payload) {\n      if (payload && typeof payload === 'object' && payload.errors) {\n        return payload.errors; // To deal with the API's error messages that do not comply to JSONAPI Standard.\n      } else if (Ember.isPresent(payload.message)) {\n        const error = {\n          status: `${status}`,\n          title: 'The backend responded with an error',\n          detail: payload.message\n        };\n\n        if (!_lodash.default.isNil(payload.message.status) && payload.message.status('409') < 0) {\n          this.get('notifications').warning(payload.message);\n        }\n\n        return [error];\n      }\n\n      return [{\n        status: `${status}`,\n        title: 'The backend responded with an error',\n        detail: `${payload}`\n      }];\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/route\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\", \"moment\", \"pako\", \"adept-iq/config/api-urls\", \"adept-iq/data/road-supervisor\"], function (_exports, _ssSchedulingService, _moment, _pako, _apiUrls, _roadSupervisor) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // polyline and guidance are stubbed using static data for now\n  const SIMULATED_POLYLINE = _roadSupervisor.Polyline.map(p => [p[1], p[0]]);\n\n  const SIMULATED_GUIDANCE = _roadSupervisor.Guidance;\n  let _id = 1; // simulates how guidance data will be received from /navigation-info\n\n  const SIMULATED_GUIDANCE_DEFLATED_BASE_64 = btoa(_pako.default.deflate(JSON.stringify(SIMULATED_GUIDANCE)));\n\n  var _default = _ssSchedulingService.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    // TODO: This is a temporary solution for creating a route\n    // dispatch backend will have a proper endpoint for POST router\n    buildURL(modelType, id, snapshot, requestType) {\n      if (requestType === 'createRecord') {\n        return `${this.host}/schedule/${snapshot.record.get('schedule.id')}/route/clusterization`;\n      }\n\n      return this._super(...arguments);\n    },\n\n    createScheduleRoute(route) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const type = route.get('type') ? route.get('type') : 'regular';\n      const schedulingMode = route.get('schedulingMode') ? route.get('schedulingMode') : 'automatic';\n      const json = {\n        data: {\n          type: 'route',\n          attributes: {\n            name: route.get('name'),\n            status: 'new',\n            plannedStartTime: (0, _moment.default)(route.get('plannedStartTime')).toDate(),\n            plannedEndTime: (0, _moment.default)(route.get('plannedEndTime')).toDate(),\n            type,\n            schedulingMode,\n            affinities: route.get('affinities'),\n            optimizationFlags: route.get('optimizationFlags'),\n            distanceLimit: route.get('distanceLimit'),\n            tripLimit: route.get('tripLimit')\n          },\n          relationships: {\n            vehicle: {\n              data: {\n                id: route.get('vehicle.id'),\n                type: 'vehicle'\n              }\n            },\n            schedule: {\n              data: {\n                id: route.get('schedule.id'),\n                type: 'schedule'\n              }\n            },\n            providerName: {\n              data: {\n                id: route.get('provider.id'),\n                type: 'providerName'\n              }\n            }\n          }\n        }\n      };\n\n      if (Ember.isPresent(route.get('driver.id'))) {\n        json.data.relationships.driver = {\n          data: {\n            id: route.get('driver.id'),\n            type: 'driver'\n          }\n        };\n      }\n\n      if (Ember.isPresent(route.get('routeTemplate.id'))) {\n        json.data.relationships.routeTemplate = {\n          data: {\n            id: route.get('routeTemplate.id'),\n            type: 'routeTemplate'\n          }\n        };\n      }\n\n      return ajax.post(`${_apiUrls.API.schedulingService.host}/route`, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: json\n      });\n    },\n\n    // Here actionType is an optional parameter.\n    // In backend, for Trimslack action we need to create activity logs.\n    // Inorder to differentiate trim-slack actions from other, here we are using 'actionType' param\n    updateScheduleRoute(route, actionType) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        data: {\n          type: 'route',\n          id: route.get('id'),\n          attributes: {\n            name: route.get('name'),\n            status: route.get('status'),\n            plannedStartTime: (0, _moment.default)(route.get('plannedStartTime')).toDate(),\n            plannedEndTime: (0, _moment.default)(route.get('plannedEndTime')).toDate(),\n            type: route.get('type'),\n            schedulingMode: route.get('schedulingMode'),\n            affinities: route.get('affinities'),\n            optimizationFlags: route.get('optimizationFlags'),\n            distanceLimit: route.get('distanceLimit'),\n            tripLimit: route.get('tripLimit')\n          }\n        }\n      };\n\n      if (Ember.isPresent(route.get('vehicle.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.vehicle = {\n          data: {\n            id: route.get('vehicle.id'),\n            type: 'vehicle'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isNone(route.get('driver.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.driver = {\n          data: {\n            id: 'deleted',\n            type: 'driver'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isPresent(route.get('driver.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.driver = {\n          data: {\n            id: route.get('driver.id'),\n            type: 'driver'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isPresent(route.get('schedule.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.schedule = {\n          data: {\n            id: route.get('schedule.id'),\n            type: 'schedule'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isPresent(route.get('provider.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.providerName = {\n          data: {\n            id: route.get('provider.id'),\n            type: 'providerName'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      let routeUrl = `${_apiUrls.API.schedulingService.host}/route/${route.get('id')}`;\n      routeUrl += actionType ? `?actionType=${actionType}` : '';\n      return ajax.patch(routeUrl, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: json\n      });\n    },\n\n    updateScheduleRouteFromDispatch(route) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const json = {\n        data: {\n          type: 'route',\n          id: route.get('id'),\n          attributes: {\n            name: route.get('name'),\n            status: route.get('status'),\n            plannedStartTime: (0, _moment.default)(route.get('plannedStartTime')).toDate(),\n            plannedEndTime: (0, _moment.default)(route.get('plannedEndTime')).toDate(),\n            type: route.get('type'),\n            optimizationFlags: route.get('optimizationFlags'),\n            distanceLimit: route.get('distanceLimit'),\n            tripLimit: route.get('tripLimit')\n          }\n        }\n      };\n\n      if (Ember.isPresent(route.get('vehicle.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.vehicle = {\n          data: {\n            id: route.get('vehicle.id'),\n            type: 'vehicle'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isPresent(route.get('driver.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.driver = {\n          data: {\n            id: route.get('driver.id'),\n            type: 'driver'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isPresent(route.get('schedule.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.schedule = {\n          data: {\n            id: route.get('schedule.id'),\n            type: 'schedule'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      if (Ember.isPresent(route.get('provider.id'))) {\n        const relationships = json.data.relationships || {};\n        relationships.providerName = {\n          data: {\n            id: route.get('provider.id'),\n            type: 'providerName'\n          }\n        };\n        json.data.relationships = relationships;\n      }\n\n      const routeUrl = `${_apiUrls.API.schedulingService.host}/route/${route.get('id')}`;\n      return ajax.patch(routeUrl, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: json\n      });\n    },\n\n    // WIP pending special-routes API\n    createSpecialRoute(driver, vehicle, dispatchSchedule) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const driverId = driver.get('id');\n      const vehicleId = vehicle.get('id');\n      const dispatchScheduleId = dispatchSchedule.get('id');\n      const providerNameId = vehicle.get('providerName'); // TODO: confirm if these come from driver\n\n      const shiftStartMoment = (0, _moment.default)();\n      const shiftEndMoment = shiftStartMoment.clone().add(1, 'hour');\n      const json = {\n        data: {\n          type: 'specialRoute',\n          attributes: {\n            name: `Supervisor ${driverId} / ${vehicleId}`,\n            // TODO: what goes here?\n            routeType: 'supervisor',\n            shiftStartTime: shiftStartMoment.format(),\n            shiftEndTime: shiftEndMoment.format()\n          },\n          relationships: {\n            dispatchSchedule: {\n              data: {\n                id: dispatchScheduleId,\n                type: 'dispatchSchedule'\n              }\n            },\n            driver: {\n              data: {\n                id: driverId,\n                type: 'driver'\n              }\n            },\n            providerName: {\n              data: {\n                id: providerNameId,\n                type: 'providerName'\n              }\n            },\n            vehicle: {\n              data: {\n                id: vehicleId,\n                type: 'vehicle'\n              }\n            }\n          }\n        }\n      };\n      return ajax.post(`${_apiUrls.API.dispatchService.host}/special-route`, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: json\n      }).then(response => {\n        // TODO: unpack and return Route model\n        return response;\n      }).catch(() => {\n        // API is not functional yet, so we stub the result here:\n        return Ember.Object.create({\n          id: '1'\n        });\n      });\n    },\n\n    // WIP pending special-routes API\n    updateSpecialRouteWaypoint(route, waypoint, dispatchSchedule) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const waypointId = waypoint.get('id');\n      const waypointModel = waypoint.constructor.modelName;\n      const dispatchScheduleId = dispatchSchedule.get('id');\n      let waypointType, waypointSource;\n\n      switch (waypointModel) {\n        case 'vehicle':\n          {\n            waypointType = 'dynamic';\n            waypointSource = 'vehicle';\n            break;\n          }\n\n        case 'address':\n          {\n            waypointType = 'fixed';\n            waypointSource = 'address';\n            break;\n          }\n\n        default:\n          throw new Error(`unknown waypoint type '${waypointModel}'`);\n      }\n\n      const json = {\n        data: {\n          type: 'stopPoint',\n          attributes: {\n            routeOrdinal: 1,\n            waypointType,\n            waypointSource\n          },\n          relationships: {\n            dispatchSchedule: {\n              data: {\n                id: dispatchScheduleId,\n                type: 'dispatchSchedule'\n              }\n            },\n            waypoint: {\n              data: {\n                id: waypointId,\n                type: 'waypoint'\n              }\n            }\n          }\n        }\n      };\n      const routeId = route.get('id');\n      const uri = `${_apiUrls.API.dispatchService.host}/special-route/${routeId}/waypoint`;\n      return ajax.put(uri, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: json\n      }).then(response => {\n        // TODO: return stopPoint model\n        return response;\n      }).catch(() => {\n        // API is not functional yet; stubbing result here;\n        // TODO: remove stub here\n        return Ember.Object.create({\n          id: '1'\n        });\n      });\n    },\n\n    fetchNavigationInfo() {\n      // const routeId = (typeof route) === 'string' ? route : get(route, 'id');\n      // const token = this.get('session.data.authenticated.token');\n      // const queryParams = [];\n      // const includeParams = [];\n      // if (opts.includePolyline) {\n      //   includeParams.push('polyline');\n      // }\n      // if (opts.includeGuidance) {\n      //   includeParams.push('guidance');\n      // }\n      // if (includeParams.length > 0) {\n      //   queryParams.push(`include=${includeParams.join(',')}`);\n      // }\n      // let uri = `${API.etaService.host}/navigation-info/${routeId}`;\n      // force update\n      // if (opts.update) {\n      //   uri = `${uri}/updatedNavInfo`;\n      // }\n      // if (queryParams.length > 0) {\n      //   uri = `${uri}?${queryParams.join('&')}`;\n      // }\n      // this.get('ajaxService').get(uri, {\n      //   headers: {\n      //     'Authorization': `Bearer ${token}`\n      //   }\n      // }).then((response) => {\n      //   const store = this.get('store');\n      //   store.pushPayload(response);\n      //   const navigationInfo = store.peekRecord('navigation-info', response.data.id);\n      //   return navigationInfo;\n      // });\n      // guidance decoding is done by the `guidance` transform;\n      // this is a work-around to use that functionality with stubs\n      const payload = {\n        data: {\n          id: _id++,\n          type: 'navigation-info',\n          attributes: {\n            guidance: SIMULATED_GUIDANCE_DEFLATED_BASE_64,\n            polyline: SIMULATED_POLYLINE\n          }\n        }\n      };\n      this.get('store').pushPayload('navigation-info', payload);\n      const navigationInfo = this.get('store').peekRecord('navigation-info', payload.data.id);\n      return Ember.RSVP.resolve(navigationInfo);\n    },\n\n    formatRouteDataforUpdate(route, routeId, schedulingMode) {\n      const routeData = {\n        type: 'route',\n        id: routeId,\n        attributes: {\n          name: route.get('name'),\n          status: route.get('status'),\n          plannedSlackTime: route.get('plannedSlackTime'),\n          plannedStartTime: route.get('plannedStartTime'),\n          plannedEndTime: route.get('plannedEndTime'),\n          type: route.get('type'),\n          schedulingMode: schedulingMode,\n          tripLimit: route.get('tripLimit'),\n          distanceLimit: route.get('distanceLimit'),\n          optimizationFlags: route.get('optimizationFlags')\n        },\n        relationships: {\n          schedule: {\n            data: {\n              type: 'schedule',\n              id: route.get('schedule.id')\n            }\n          },\n          providerName: {\n            data: {\n              type: 'providerName',\n              id: route.get('provider.id')\n            }\n          }\n        }\n      };\n\n      if (Ember.isPresent(route.get('vehicle.id'))) {\n        routeData.relationships.vehicle = {\n          data: {\n            type: 'vehicle',\n            id: route.get('vehicle.id')\n          }\n        };\n      }\n\n      return routeData;\n    },\n\n    updateBulkEditRoute(routes, schedulingMode) {\n      const ajax = this.get('ajaxService');\n      const token = this.get('session.data.authenticated.token');\n      const routeUrl = `${_apiUrls.API.schedulingService.host}/route?fields[route]=schedulingMode`;\n      const data = routes.map(route => {\n        const routeData = this.formatRouteDataforUpdate(route, route.get('id'), schedulingMode);\n        return routeData;\n      });\n      const json = {\n        data: data\n      };\n      return ajax.patch(routeUrl, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: json\n      });\n    },\n\n    urlForFindRecord(id, modelName\n    /*snapshot*/\n    ) {\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${modelName}/${id}`;\n      return baseUrl;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/schedule-configuration\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-Scheduling-schedule_configurations'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/schedule\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\", \"adept-iq/config/api-urls\"], function (_exports, _ssSchedulingService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    // not using \"ajax\" so there won't be conflict with the base's ajax calls\n    session: Ember.inject.service(),\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    /**\n       * Modified Performance Improvement, the API in the backend uses iqux service rather than\n       * scheduling.\n       * @param id\n       * @param modelName\n       * @param snapshot\n       * @returns {string}\n       */\n    urlForFindRecord(id, modelName) {\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${modelName}/${id}`;\n      return baseUrl;\n    },\n\n    hypoTrimSlack(currentSchedule) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const uri = this.buildURL('schedule');\n      return ajax.patch(`${uri}/${currentSchedule.get('id')}/trimslack`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    hypoRemoveBreak(currentSchedule) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const url = this.buildURL('schedule');\n      return ajax.patch(`${url}/${currentSchedule.get('id')}/remove-breaks`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    adjustDriverBreak(id, routes) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const uri = this.buildURL('schedule');\n      const type = 'adjustDriverBreaks';\n      const json = {\n        data: {\n          id,\n          type,\n          links: {},\n          meta: {},\n          attributes: {\n            routes\n          }\n        }\n      };\n      return ajax.patch(`${uri}/${id}/adjust-driver-breaks`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    consolidateRoutes(id, routes) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const uri = this.buildURL('schedule');\n      const type = 'routeConsolidation';\n      const json = {\n        data: {\n          id,\n          type,\n          links: {},\n          meta: {},\n          attributes: {\n            routes\n          }\n        }\n      };\n      return ajax.patch(`${uri}/${id}/route-consolidation`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    releaseRoutes(currentSchedule) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const uri = this.buildURL('schedule');\n      return ajax.patch(`${uri}/${currentSchedule.get('id')}/export`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    routeTripTransfer(tripId, routeId, data) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const url = `${this.host}/route/${routeId}/trip-transfer/${tripId}`;\n      return ajax.put(url, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: data\n      });\n    },\n\n    routeBulkTripTransfer(routeId, data) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const url = `${this.host}/route/${routeId}/block-transfer`;\n      return ajax.put(url, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: data\n      });\n    },\n\n    autoRescheduleTrip(tripId, payload) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const url = `${this.host}/trip/${tripId}/reschedule`;\n      return ajax.put(url, {\n        contentType: 'application/json',\n        dataType: 'text',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: payload\n      });\n    },\n\n    waitListTrip(tripId) {\n      const session = this.get('session');\n      const ajax = this.get('ajaxService');\n      const url = `${this.host}/trip/${tripId}/waitlist`;\n      return ajax.delete(url, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/segment-stop-phone-number\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/segment-stop\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/segment\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/service-need-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-service_needs_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/service-window\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-Scheduling-service_windows'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/shift-break\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/speed-region-group\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-speed_region_groups'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/ss-no-show-reason-code\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/sso-permission\", [\"exports\", \"adept-iq/adapters/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssoSsoService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/sso-role\", [\"exports\", \"adept-iq/adapters/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssoSsoService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/sso-user\", [\"exports\", \"adept-iq/adapters/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssoSsoService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/stop-point\", [\"exports\", \"adept-iq/adapters/-dispatch\", \"adept-iq/config/api-urls\"], function (_exports, _dispatch, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    session: Ember.inject.service(),\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    // Adapted from https://github.com/emberjs/data/blob/v3.1.1/addon/-private/adapters/build-url-mixin.js#L89-L109\n    urlForUpdateRecord(id, modelName) {\n      let path;\n      let url = [];\n      const host = Ember.get(this, 'host');\n      const prefix = this.urlPrefix();\n\n      if (modelName) {\n        path = this.pathForType(modelName);\n\n        if (path) {\n          url.push(path);\n        }\n      }\n\n      if (prefix) {\n        url.unshift(prefix);\n      }\n\n      url = url.join('/');\n\n      if (!host && url && url.charAt(0) !== '/') {\n        url = '/' + url;\n      }\n\n      return url;\n    },\n\n    handleResponse(status, headers, payload, requestData) {\n      let newStatus = status;\n      let newPayload = payload;\n\n      if (status === 400 && Ember.isPresent(payload.validation)) {\n        newStatus = 422;\n        newPayload = {\n          errors: [{\n            detail: payload.message\n          }]\n        };\n      }\n\n      return this._super(newStatus, headers, newPayload, requestData);\n    },\n\n    urlForFindRecord(id, modelName\n    /*snapshot*/\n    ) {\n      const model = Ember.String.camelize(modelName);\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${model}/${id}`;\n      return baseUrl;\n    },\n\n    /**\n     * this function get an stop point and calculates the max available capacity during the stopPoint trip.\n     *  based on previous and future shared trips. it can be calculated with  new travel needs overwritten\n     *  default leg.travelNeeds if provided.\n    @param stopPointId the stopPoint id that needs to be calculated\n    @param customTravelNeeds the travelNeeds are need to be overwritten.\n    @returns stopPoint available capacity (or deficiencies), and list the trips that are not going to be serviceable (if any).\n     */\n    getStopPointCapacity(stopPointId) {\n      let customTravelNeeds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      const session = this.get('session');\n      let payload = null;\n\n      if (customTravelNeeds) {\n        const customStopPointsPayload = [{\n          id: stopPointId,\n          travelNeeds: [{\n            travelNeedTypeName: 'ambulatory',\n            count: customTravelNeeds.ambulatory\n          }, {\n            travelNeedTypeName: 'wheelchair',\n            count: customTravelNeeds.wheelchair\n          }]\n        }];\n        payload = {\n          data: {\n            attributes: {\n              stopPoints: customStopPointsPayload\n            },\n            type: 'travelNeedRequirement'\n          }\n        };\n      }\n\n      return this.get('ajaxService').post(_apiUrls.API.dispatchService.host + '/stop-point/' + stopPointId + '/capacity-check', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: payload\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription-exclusion\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription-group\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription-phone-number\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription-recurrence-pattern\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription-service-need\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription-travel-need\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\"], function (_exports, _bsBookingManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _bsBookingManagement.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/subscription\", [\"exports\", \"adept-iq/adapters/-bs-bookingManagement\", \"adept-iq/config/api-urls\"], function (_exports, _bsBookingManagement, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingManagement.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    getPath(url, defaults) {\n      // eslint-disable-next-line no-useless-escape\n      var reUrlPath = /(?:\\w+:)?\\/\\/[^\\/]+([^?#]+)/;\n      var urlParts = url.match(reUrlPath) || [url, defaults];\n      return urlParts.pop();\n    },\n\n    findBelongsTo(store, snapshot, url, relationship) {\n      // this is because api endpoint returns the wrong relationshiop url\n      if (relationship._type === 'place') {\n        const path = this.getPath(url);\n        const newUrl = _apiUrls.API.addressService.host + path;\n        return this._super(store, snapshot, newUrl, relationship);\n      }\n\n      return this._super(store, snapshot, url, relationship);\n    },\n\n    queryRecord(store, type, id) {\n      const session = this.get('session');\n      return this.get('ajaxService').request(_apiUrls.API.bookingService.host + '/subscription/' + id, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/termination-reason-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-termination_reasons'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/travel-need-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-travel_need_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trim-slack-contract-management\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip-noshow\", [\"exports\", \"adept-iq/adapters/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    createTripNoShow(trip, noshowReason) {\n      const session = this.get('session');\n      const url = `${this.host}/trip/${trip.get('id')}/no-show`;\n      const dispatchSchedule = trip.get('schedule.dispatchSchedule');\n      const pickStopPoint = trip.get('pickStopPoint');\n      const hasLatLng = Ember.isPresent(pickStopPoint.get('lat')) && Ember.isPresent(pickStopPoint.get('lng'));\n      const json = {\n        data: {\n          id: trip.get('id'),\n          type: 'noShow',\n          attributes: {\n            notes: trip.get('noshowDetails'),\n            vehicleLat: hasLatLng ? pickStopPoint.get('lat') : 0,\n            vehicleLng: hasLatLng ? pickStopPoint.get('lng') : 0\n          },\n          relationships: {\n            noShowCodeName: {\n              data: {\n                id: noshowReason.get('id'),\n                type: 'noShowCodeName'\n              }\n            },\n            dispatchSchedule: {\n              data: {\n                id: dispatchSchedule.get('id'),\n                type: 'dispatchSchedule'\n              }\n            }\n          }\n        }\n      };\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    deleteTripNoShow(trip) {\n      const session = this.get('session');\n      const url = `${this.host}/trip/${trip.get('id')}/no-show`;\n      return this.get('ajax').del(url, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip-payment\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // there is no `trip-payment` model; this adapter is a container for AJAX call\n  var _default = _avlmAvlmService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // TODO: remove this if possible\n    routeExecEvent: Ember.inject.service('routeexecevent'),\n\n    createTripPaymentEvent(trip) {\n      const session = this.get('session');\n      const uri = this.buildURL('trip-payment'); // TODO: try to replace this with actual model\n\n      const routeExecEvent = this.get('routeExecEvent');\n      const data = routeExecEvent.tripPaymentData();\n      const preparedData = routeExecEvent.prepareTripPaymentData(data, trip);\n      return this.get('ajax').post(uri, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: preparedData\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip-purpose\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-Trip_Purposes'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip-route-assignment\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip-stop\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip-transfer\", [\"exports\", \"adept-iq/adapters/-cos-continuousOptService\", \"ember-concurrency\"], function (_exports, _cosContinuousOptService, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TIMEOUT_DELAY = 1000; // 1 second delay\n\n  const MAX_RETRIES = 180;\n\n  var _default = _cosContinuousOptService.default.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    createTripTransferAsyncOperation: (0, _emberConcurrency.task)(function* (tripIds, dispatchScheduleId, destinationRouteId, destinationProviderIds) {\n      const job = yield this.postTransfer(tripIds, dispatchScheduleId, destinationRouteId, destinationProviderIds, true);\n      return yield this.get('asyncTripTransferOperationState').perform(job);\n    }).enqueue(),\n    asyncTripTransferOperationState: (0, _emberConcurrency.task)(function* (job) {\n      const session = this.get('session');\n      const url = `${this.host}/cos-async-operation/`;\n      let count = 0;\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure' && job.data.attributes.state !== 'rejected' && count < MAX_RETRIES) {\n        yield (0, _emberConcurrency.timeout)(TIMEOUT_DELAY);\n        count++;\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          job = yield this.get('ajax').request(url + job.data.id, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      const isJobSuccess = job.data.attributes.state === 'success';\n\n      if (isJobSuccess) {\n        const results = JSON.parse(job.data.attributes.results);\n        return { ...results,\n          isJobSuccess\n        };\n      }\n\n      return {\n        payload: {\n          // if it is 'rejected' then there is no results.\n          message: job.data.attributes.results ? `${job.data.attributes.results}` : `${job.data.attributes.state}`\n        },\n        isJobSuccess\n      };\n    }).drop(),\n\n    postTransfer(tripIds, dispatchScheduleId, destinationRouteId, destinationProviderIds) {\n      let async = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      const session = this.get('session');\n      const url = async ? `${this.host}/cos-async-operation` : `${this.host}/optimizer/trip-transfer`;\n      const json = async ? {\n        data: {\n          type: 'cosAsyncOperation',\n          attributes: {\n            operationType: 'autoTripTransfer',\n            entityType: 'trip',\n            entityId: tripIds,\n            dispatchScheduleId,\n            destinationRouteId\n          }\n        }\n      } : {\n        data: {\n          type: 'autoTripTransfer',\n          attributes: {\n            dispatchScheduleId,\n            tripIds,\n            destinationRouteId\n          }\n        }\n      };\n\n      if (Ember.isPresent(destinationProviderIds)) {\n        json.data.attributes.destinationProviderIds = destinationProviderIds;\n      }\n\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    // Report the promise times of the accepted solution so that COS can store them in the services\n    // that own them (scheduling.Trip and booking.Segment). A promise time computed for a waitlisted\n    // trip only exists in the transfer solution, so the accepted values have to be sent back once\n    // the transfer itself has been committed.\n    postTripPromiseTimes(dispatchScheduleId, trips) {\n      const session = this.get('session');\n      const url = `${this.host}/optimizer/trip-promise-time`;\n      const json = {\n        data: {\n          type: 'tripPromiseTime',\n          attributes: {\n            dispatchScheduleId,\n            trips\n          }\n        }\n      };\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    postManualTransfer(trips, dispatchScheduleId, destinationRouteId) {\n      const session = this.get('session');\n      const url = `${this.host}/optimizer/manual-trip-transfer`;\n      const json = {\n        data: {\n          type: 'manualTripTransfer',\n          attributes: {\n            dispatchScheduleId,\n            trips,\n            destinationRouteId\n          }\n        }\n      };\n      return this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/trip\", [\"exports\", \"adept-iq/adapters/-ss-schedulingService\", \"adept-iq/config/api-urls\", \"adept-iq/transforms/object\"], function (_exports, _ssSchedulingService, _apiUrls, _object) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n    dispatchServiceHost: _apiUrls.API.dispatchService.host,\n\n    async findRecord(store, type, id\n    /*, snapshot*/\n    ) {\n      const iquxResponse = await this._super(...arguments);\n\n      if (iquxResponse.included && iquxResponse.included.some(entity => entity.type === 'dispatchRoute')) {\n        const tripCluster = await this.fetchTripClusterFromDispatch(id);\n\n        for (const stopPoint of tripCluster.data) {\n          const index = iquxResponse.included.findIndex(entity => entity.type === stopPoint.type && `${entity.id}` === `${stopPoint.id}`);\n\n          if (index > -1) {\n            iquxResponse.included[index] = stopPoint;\n          }\n        }\n\n        for (const obj of tripCluster.included) {\n          if (obj.type === 'route' || _object.default.type === 'cluster' || _object.default.type === 'dispatchRoute') {\n            const index = iquxResponse.included.findIndex(entity => entity.type === obj.type && `${entity.id}` === `${obj.id}`);\n\n            if (index === -1) {\n              iquxResponse.included.push(obj);\n            } else {\n              iquxResponse.included[index] = obj;\n            }\n          }\n        }\n      }\n\n      return iquxResponse;\n    },\n\n    urlForFindRecord(id) {\n      const model = 'trip';\n      const iquxServiceHost = this.get('iquxServiceHost');\n      const baseUrl = `${iquxServiceHost}/${model}/${id}`;\n      return baseUrl;\n    },\n\n    async fetchTripClusterFromDispatch(id) {\n      const session = this.get('session');\n      const dispatchServiceHost = this.get('dispatchServiceHost');\n      const requestUrl = `${dispatchServiceHost}/stop-point?filter=eq(tripId,'${id}')&include=cluster,cluster.dispatchRoute`;\n      const tripCluster = await this.get('ajaxService').request(requestUrl, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n      return tripCluster;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-availability\", [\"exports\", \"adept-iq/adapters/-vehicleService\"], function (_exports, _vehicleService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _vehicleService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-body-type\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_body_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-body-width\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_body_widths'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-breakdown\", [\"exports\", \"adept-iq/adapters/-vehicleService\", \"adept-iq/config/api-urls\"], function (_exports, _vehicleService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicleService.default.extend({\n    ajax1: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n\n    getAllVehicleBreakdown() {\n      const session = this.get('session');\n      return this.get('ajax1').post(_apiUrls.API.vehicleService.host + '/vehicle-breakdown', {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-capacity-config\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_capacity_configs'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-capacity-type\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_capacity_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-chassis\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_chassis'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-dot-inspection\", [\"exports\", \"adept-iq/adapters/-vehicleService\"], function (_exports, _vehicleService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _vehicleService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-equipment\", [\"exports\", \"adept-iq/adapters/-vehicleService\"], function (_exports, _vehicleService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _vehicleService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-event\", [\"exports\", \"adept-iq/adapters/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-fuel-cap\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_fuel_caps'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-fuel-type\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_fuel_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-maintenance\", [\"exports\", \"adept-iq/adapters/-vehicleService\"], function (_exports, _vehicleService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _vehicleService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-manufacturer-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_manufacturers'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-model-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_models'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-road-call\", [\"exports\", \"adept-iq/adapters/-vehicleService\"], function (_exports, _vehicleService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _vehicleService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-route\", [\"exports\", \"adept-iq/adapters/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dispatch.default;\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-status-name\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_statuses'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-tire-size\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_tire-sizes'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-transmission\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_transmission_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-type\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-wc-lift-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-wc_lift_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle-wheelbase-type\", [\"exports\", \"adept-iq/adapters/cs-config-lookup-model\"], function (_exports, _csConfigLookupModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigLookupModel.default.extend({\n    categoryId: 'config-System_Configuration-vehicle_wheel_base_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/vehicle\", [\"exports\", \"adept-iq/adapters/-vehicleService\", \"adept-iq/config/api-urls\"], function (_exports, _vehicleService, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicleService.default.extend({\n    iquxServiceHost: _apiUrls.API.iquxService.host,\n\n    getPath(url, defaults) {\n      // eslint-disable-next-line no-useless-escape\n      var reUrlPath = /(?:\\w+:)?\\/\\/[^\\/]+([^?#]+)/;\n      var urlParts = url.match(reUrlPath) || [url, defaults];\n      return urlParts.pop();\n    },\n\n    findBelongsTo(store, snapshot, url, relationship) {\n      const path = this.getPath(url);\n      const newUrl = this.iquxServiceHost + path;\n      return this._super(store, snapshot, newUrl, relationship);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/zip-code\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-Zip_Codes'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/zone-type\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-zone_types'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/adapters/zone\", [\"exports\", \"adept-iq/adapters/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    categoryId: 'config-System_Configuration-zones'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/app\", [\"exports\", \"adept-iq/resolver\", \"ember-load-initializers\", \"adept-iq/config/environment\"], function (_exports, _resolver, _emberLoadInitializers, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const App = Ember.Application.extend({\n    modulePrefix: _environment.default.modulePrefix,\n    podModulePrefix: _environment.default.podModulePrefix,\n    Resolver: _resolver.default\n  });\n  (0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);\n  var _default = App;\n  _exports.default = _default;\n});","define(\"adept-iq/authenticators/sso\", [\"exports\", \"ember-simple-auth/authenticators/base\", \"fetch\", \"adept-iq/config/api-urls\", \"adept-iq/config/mapped-permIds\"], function (_exports, _base, _fetch, _apiUrls, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    workspace: Ember.inject.service(),\n\n    authenticate(userName, password, tokenPayload) {\n      // Bypass login when token payload from /signup during registration passed.\n      if (Ember.isPresent(tokenPayload)) {\n        return Ember.RSVP.Promise.resolve(tokenPayload);\n      }\n\n      const {\n        host\n      } = _apiUrls.API.ssoService;\n      const url = host + '/auth-token';\n      const data = {\n        'plugin': 'internal;basic',\n        'internal': {\n          'email': userName,\n          'password': password\n        },\n        'basic': {\n          'username': userName,\n          'password': password\n        }\n      };\n      const options = {\n        headers: {\n          'Content-Type': 'application/json'\n        },\n        method: 'post',\n        body: JSON.stringify(data)\n      };\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        (0, _fetch.default)(url, options).then(response => {\n          response.json().then(body => {\n            if (!response.ok) {\n              console.log('User Authentication failed.'); //eslint-disable-line no-console\n\n              reject(body);\n            } else {\n              const tokenParts = body.token.split('.');\n              const tokenInfo = JSON.parse(atob(tokenParts[1])); // attach expiration time for JWT to session data\n\n              body.exp = tokenInfo.exp;\n              body.userId = tokenInfo.userId;\n              body.permissions = tokenInfo.permissions;\n              body.tokenInfo = tokenInfo;\n              const accessWorkspacesPermIdsHash = Object.entries(_mappedPermIds.default).reduce((hash, value) => {\n                if (/access.*Workspace/i.test(value[0])) {\n                  hash[value[1]] = true;\n                } // adding playback workspace role. The whole permission will be refactor later AIQ-1003\n\n\n                if (value[0] === 'accessPlaybackMode') {\n                  hash[value[1]] = true;\n                }\n\n                return hash;\n              }, {});\n\n              if (tokenInfo.permissions.some(p => accessWorkspacesPermIdsHash[p])) {\n                resolve(body);\n                return;\n              }\n\n              reject({\n                message: 'MissingWorkspacePermission'\n              });\n            }\n          });\n        }).catch(reject);\n      });\n    },\n\n    restore(data) {\n      const notAllowedToProceed = localStorage.getItem('notAllowedToProceed');\n      const notAllowedToProceedTarget = localStorage.getItem('notAllowedToProceedTarget');\n\n      if (notAllowedToProceed && notAllowedToProceedTarget) {\n        return this.transitionTo(notAllowedToProceedTarget);\n      }\n\n      const currentTime = Date.now() / 1000; // expired JWT invalidate session\n\n      if (currentTime >= data.exp) {\n        console.log('Token has expired.'); //eslint-disable-line no-console\n\n        return Ember.RSVP.Promise.reject(data);\n      }\n\n      return Ember.RSVP.Promise.resolve(data);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/authorizers/sso\", [\"exports\", \"ember-simple-auth/authorizers/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    session: Ember.inject.service(),\n\n    authorize(data, block) {\n      if (Ember.isPresent(data.token)) {\n        block('Authorization', `Bearer ${data.token}`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/breakpoints\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    mobile: '(max-width: 767px)',\n    tablet: '(min-width: 768px) and (max-width: 991px)',\n    desktop: '(min-width: 992px) and (max-width: 1600px)',\n    jumbo: '(min-width: 1601px) and (max-width: 9000px)'\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/avlm/avlm\", [\"exports\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"ember-concurrency\", \"adept-iq/classes/active-contexts/avlm/graph\", \"adept-iq/classes/active-contexts/avlm/map-graph\", \"adept-iq/utils/flattenData\"], function (_exports, _lodash, _base, _emberConcurrency, _graph, _mapGraph, _flattenData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const coreModelNameMap = {\n    'vehicle': 'avlm-vehicle',\n    'route': 'avlm-route',\n    'trip': 'avlm-trip',\n    'stop-point': 'avlm-stop-point',\n    'driver': 'avlm-driver',\n    'avlm-canned-message': 'avlm-canned-message'\n  };\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    workspaceData: Ember.computed.readOnly('workspaceContext._structuredWorkspace'),\n    consumedModelNames: Ember.computed('workspace.dashboardInstance.widgets.[]', function () {\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      return widgetModels;\n    }),\n    // structured data sets (grouped by model name)\n    structuredActiveData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeActiveContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredActiveData' + e);\n      }\n    }),\n    structuredImplicitData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeImplicitContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredImplicitData' + e);\n      }\n    }),\n    // flattened data sets for easy binding & interation\n    activeData: Ember.computed('structuredActiveData', function () {\n      const structuredActiveData = this.get('structuredActiveData');\n      return (0, _flattenData.flattenData)(structuredActiveData);\n    }),\n    activeVehicles: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (!workspaceData) return [];\n      return workspaceData['avlm-vehicle'];\n    }),\n    activeZones: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (!workspaceData) return [];\n      return workspaceData['nyct-zone'];\n    }),\n    // map-context uses to construct layered records\n    structuredMapData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      const workspaceData = this.get('workspaceData') || {};\n      const checkedItems = this.get('checkedItems') || [];\n      return this._computeMapContext(workspaceData, checkedItems);\n    }),\n    // map-context binds to this\n    implicitData: Ember.computed('structuredMapData', function () {\n      const structuredMapData = this.get('structuredMapData');\n      return (0, _flattenData.flattenData)(structuredMapData);\n    }),\n    hashImplicitData: Ember.computed('structuredImplicitData', function () {\n      const structuredImplicitData = this.get('structuredImplicitData');\n      const hash = this.get('emptyImplicitHash');\n\n      _lodash.default.forOwn(structuredImplicitData, (value, key) => {\n        hash[key] = {};\n        value.forEach(v => {\n          const id = v.get('id');\n          hash[key][id] = true;\n        });\n      });\n\n      return hash;\n    }),\n    // bound to computed property to implicitMarkers\n    implicitStops: Ember.computed('implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      return implicitData.filterBy('modelName', 'avlm-stop-point').mapBy('record');\n    }),\n    // bound to computed property to implicitMarkers\n    implicitVehicles: Ember.computed('workspaceData', 'implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      const vehicles = implicitData.filterBy('modelName', 'avlm-vehicle').mapBy('record');\n      const implicitVehicles = vehicles;\n      return implicitVehicles;\n    }),\n    // bind implicitContext property to boundary\n    implicitMarkers: Ember.computed('implicitVehicles.[]', 'implicitStops.[]', function () {\n      const implicitStops = this.get('implicitStops');\n      const implicitVehicles = this.get('implicitVehicles');\n      return implicitStops.concat(implicitVehicles);\n    }),\n\n    tripActiveContext() {\n      return this.get('checkedItems').some(record => {\n        return record.modelName === 'avlm-trip';\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n    },\n\n    willDestroyElement() {\n      if (this.get('setWidgetRecordsTask.isRunning')) {\n        this.get('setWidgetRecordsTask').cancelAll();\n      }\n    },\n\n    destroy() {\n      this._super(...arguments);\n    },\n\n    // Overwrite base clearCheckedItems\n    clearCheckedItems() {\n      const checkedItems = this.get('checkedItems');\n\n      for (const checkedItem of checkedItems) {\n        this.toggleHighLight(checkedItem.record, false);\n      }\n\n      this.set('checkedItems', []);\n      this.get('widget').deselectAllWidgets();\n      this.notifyPropertyChange('implicitData');\n      this.refreshAll();\n    },\n\n    setWidgetRecordsTask: (0, _emberConcurrency.task)(function* (widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked) {\n      yield this.setWidgetRecords(widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked);\n    }).enqueue(),\n\n    async setWidgetRecords(widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked) {\n      let checkedItems = this.get('checkedItems');\n\n      try {\n        const store = this.get('store');\n\n        for (const widgetRecord of widgetRecords) {\n          const coreModelName = this.getCoreModelNameByWidgetRecord(coreModelArgName, widgetRecord);\n\n          if (checked) {\n            await this.get('coreEntityPopulator').populateEntityGraph(widgetModelName, widgetRecord, {});\n            const storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n\n            if (storeRecord) {\n              if (coreModelName === 'avlm-alert') {\n                const vehicleRecord = store.peekRecord('avlm-vehicle', widgetRecord.vehicleId);\n                this.toggleHighLight(vehicleRecord, checked);\n              }\n\n              if (coreModelName === 'avlm-trip') {\n                const pickStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.pickStopPointId);\n                const dropStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.dropStopPointId);\n                this.toggleHighLight(pickStopPointRecord, checked);\n                this.toggleHighLight(dropStopPointRecord, checked);\n              }\n\n              this.toggleHighLight(storeRecord, checked);\n              checkedItems.push({\n                modelName: coreModelName,\n                record: storeRecord\n              });\n            }\n          } else {\n            const storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n\n            if (storeRecord) {\n              if (coreModelName === 'avlm-alert') {\n                const vehicleRecord = store.peekRecord('avlm-vehicle', widgetRecord.vehicleId);\n                this.toggleHighLight(vehicleRecord, checked);\n              }\n\n              if (coreModelName === 'avlm-trip') {\n                const pickStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.pickStopPointId);\n                const dropStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.dropStopPointId);\n                this.toggleHighLight(pickStopPointRecord, checked);\n                this.toggleHighLight(dropStopPointRecord, checked);\n              }\n\n              this.toggleHighLight(storeRecord, checked);\n            }\n\n            checkedItems = checkedItems.filter(data => !(data.modelName === coreModelName && storeRecord && data.record.id === storeRecord.id));\n          }\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error('Error occurred while populating data for the selected widget-record ' + e);\n      }\n\n      this.set('checkedItems', checkedItems.concat([]));\n\n      if (checked) {\n        this.get('widget').addTraversalFilter(widgetInstanceId, widgetModelName, widgetRecords);\n      } else {\n        this.get('widget').removeTraversalFilter(widgetInstanceId, widgetModelName, widgetRecords);\n      }\n\n      this.get('widget').updateUserSelection();\n    },\n\n    getCoreModelNameByWidgetRecord(coreModelName, widgetRecord) {\n      if (coreModelNameMap[coreModelName]) {\n        const mappedCoreModelName = coreModelNameMap[coreModelName];\n\n        if (mappedCoreModelName === 'avlm-canned-message' && widgetRecord.priority === 'E') {\n          return 'avlm-emergency-message';\n        }\n\n        return mappedCoreModelName;\n      }\n\n      return coreModelName;\n    },\n\n    getCoreModelNameByStoreRecord(coreModelName, storeRecord) {\n      if (coreModelNameMap[coreModelName]) {\n        const mappedCoreModelName = coreModelNameMap[coreModelName]; // The storeRecord not match the coreModelName\n\n        if (mappedCoreModelName === 'avlm-canned-message' && storeRecord.modelName === 'avlm-emergency-message') {\n          return 'avlm-emergency-message';\n        }\n\n        return mappedCoreModelName;\n      }\n\n      return coreModelName;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/avlm/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ssoUserNode = _exports.default = _exports.avlmVehicleNode = _exports.avlmTripRiderNode = _exports.avlmTripNode = _exports.avlmStopNode = _exports.avlmRouteVehicleDriverNode = _exports.avlmRouteNode = _exports.avlmRiderNode = _exports.avlmRiderEventNode = _exports.avlmMessageNode = _exports.avlmDriverNode = _exports.avlmClusterNode = _exports.alertNode = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  // Rider Managament Related Nodes\n  const avlmTripRiderNode = {\n    id: 'avlm-trip-rider',\n    modelName: 'avlm-trip-rider',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-trip',\n      path: 'avlmTrip'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-rider',\n      path: 'avlmRider'\n    }],\n    isActive: false,\n    providerFilterKey: false\n  };\n  _exports.avlmTripRiderNode = avlmTripRiderNode;\n  const avlmRiderNode = {\n    id: 'avlm-rider',\n    modelName: 'avlm-rider',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-trip-rider',\n      path: 'avlmTripRider'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-rider-event',\n      path: 'avlmRiderEvents'\n    }],\n    isActive: false,\n    providerFilterKey: false\n  };\n  _exports.avlmRiderNode = avlmRiderNode;\n  const avlmRiderEventNode = {\n    id: 'avlm-rider-event',\n    modelName: 'avlm-rider-event',\n    links: [],\n    isActive: false,\n    providerFilterKey: false\n  }; // Driver Related Nodes\n\n  _exports.avlmRiderEventNode = avlmRiderEventNode;\n  const avlmDriverNode = {\n    id: 'avlm-driver',\n    modelName: 'avlm-driver',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'avlm-route-vehicle-driver',\n      path: 'currentRouteVehicleDrivers'\n    }],\n    isActive: false,\n    providerFilterKey: false\n  }; // Vehicle Related Nodes\n\n  _exports.avlmDriverNode = avlmDriverNode;\n  const avlmVehicleNode = {\n    id: 'avlm-vehicle',\n    modelName: 'avlm-vehicle',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'avlm-route-vehicle-driver',\n      path: 'currentRouteVehicleDrivers'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-alert',\n      path: 'currentVehicleAlert'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-message',\n      path: 'cannedMessages'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-route',\n      path: 'latestRoute'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider'\n  };\n  _exports.avlmVehicleNode = avlmVehicleNode;\n  const avlmRouteNode = {\n    id: 'avlm-route',\n    modelName: 'avlm-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'latestVehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-driver',\n      path: 'latestDriver'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-stop',\n      path: 'orderedStopsWithGaragesAndBreaks'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-message',\n      path: 'cannedMessages'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: 'providerName'\n  };\n  _exports.avlmRouteNode = avlmRouteNode;\n  const avlmRouteVehicleDriverNode = {\n    id: 'avlm-route-vehicle-driver',\n    modelName: 'avlm-route-vehicle-driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'vehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-driver',\n      path: 'driver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-route',\n      path: 'route'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'startTime',\n    rightTimeConstraint: 'endTime',\n    providerFilterKey: false\n  };\n  _exports.avlmRouteVehicleDriverNode = avlmRouteVehicleDriverNode;\n  const avlmClusterNode = {\n    id: 'avlm-cluster',\n    modelName: 'avlm-cluster',\n    links: [],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: false\n  };\n  _exports.avlmClusterNode = avlmClusterNode;\n  const avlmStopNode = {\n    id: 'avlm-stop',\n    modelName: 'avlm-stop-point',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-cluster',\n      path: 'avlmCluster'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-trip',\n      path: 'avlmTrip'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-route',\n      path: 'stopRoute'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: 'provider'\n  };\n  _exports.avlmStopNode = avlmStopNode;\n  const avlmTripNode = {\n    id: 'avlm-trip',\n    modelName: 'avlm-trip',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-trip-rider',\n      path: 'avlmTripRider'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-stop',\n      path: 'avlmStopPoints'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime',\n    providerFilterKey: 'avlmRoute.providerName'\n  };\n  _exports.avlmTripNode = avlmTripNode;\n  const avlmMessageNode = {\n    id: 'avlm-message',\n    modelName: 'avlm-canned-message',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-driver',\n      path: 'avlmDriver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'avlmVehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'avlm-route',\n      path: 'avlmRoute'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: 'avlmRoute.providerName'\n  };\n  _exports.avlmMessageNode = avlmMessageNode;\n  const alertNode = {\n    id: 'avlm-alert',\n    modelName: 'avlm-alert',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'avlmVehicle'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'timestamp',\n    rightTimeConstraint: 'timestamp',\n    providerFilterKey: 'companyId'\n  };\n  _exports.alertNode = alertNode;\n  const ssoUserNode = {\n    id: 'sso-user',\n    modelName: 'sso-user',\n    links: [],\n    providerFilterKey: false\n  };\n  _exports.ssoUserNode = ssoUserNode;\n  const activeContextNodes = [// sign-on\n  ssoUserNode, // avlm graph\n  avlmRouteNode, avlmRouteVehicleDriverNode, avlmClusterNode, avlmTripNode, avlmStopNode, avlmMessageNode, // vehicle graph\n  avlmVehicleNode, // driver graph\n  avlmDriverNode, // rider graph\n  avlmRiderNode, avlmTripRiderNode, avlmRiderEventNode, // alerts\n  alertNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/avlm/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.mapContextNodes = _exports.mapContextGraph = _exports.default = _exports.avlmVehicleNode = _exports.avlmTripRiderNode = _exports.avlmTripNode = _exports.avlmStopNode = _exports.avlmRouteNode = _exports.avlmRiderNode = _exports.avlmMessageNode = _exports.avlmDriverNode = _exports.alertNode = void 0;\n  // Rider Managament Related Nodes\n  const avlmTripRiderNode = {\n    id: 'avlm-trip-rider',\n    modelName: 'avlm-trip-rider',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-trip',\n      path: 'avlmTrip'\n    }],\n    isActive: false,\n    providerFilterKey: false\n  };\n  _exports.avlmTripRiderNode = avlmTripRiderNode;\n  const avlmRiderNode = {\n    id: 'avlm-rider',\n    modelName: 'avlm-rider',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-trip-rider',\n      path: 'avlmTripRider'\n    }],\n    isActive: false,\n    providerFilterKey: false\n  }; // Driver Related Nodes\n\n  _exports.avlmRiderNode = avlmRiderNode;\n  const avlmDriverNode = {\n    id: 'avlm-driver',\n    modelName: 'avlm-driver',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'avlm-vehicle',\n      path: 'latestVehicle'\n    }],\n    isActive: false,\n    providerFilterKey: false\n  }; // Vehicle Related Nodes\n\n  _exports.avlmDriverNode = avlmDriverNode;\n  const avlmVehicleNode = {\n    id: 'avlm-vehicle',\n    modelName: 'avlm-vehicle',\n    links: [],\n    isActive: false,\n    providerFilterKey: 'providerName'\n  };\n  _exports.avlmVehicleNode = avlmVehicleNode;\n  const avlmRouteNode = {\n    id: 'avlm-route',\n    modelName: 'avlm-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'latestVehicle'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-stop',\n      path: 'orderedStopsWithGaragesAndBreaks'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: 'providerName'\n  };\n  _exports.avlmRouteNode = avlmRouteNode;\n  const avlmStopNode = {\n    id: 'avlm-stop',\n    modelName: 'avlm-stop-point',\n    links: [],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: 'providerName'\n  };\n  _exports.avlmStopNode = avlmStopNode;\n  const avlmTripNode = {\n    id: 'avlm-trip',\n    modelName: 'avlm-trip',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'avlm-stop',\n      path: 'avlmStopPoints'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime',\n    providerFilterKey: 'avlmRoute.providerName'\n  };\n  _exports.avlmTripNode = avlmTripNode;\n  const avlmMessageNode = {\n    id: 'avlm-message',\n    modelName: 'avlm-canned-message',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'avlmVehicle'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime',\n    providerFilterKey: 'avlmRoute.providerName'\n  };\n  _exports.avlmMessageNode = avlmMessageNode;\n  const alertNode = {\n    id: 'avlm-alert',\n    modelName: 'avlm-alert',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'avlmVehicle'\n    }],\n    isActive: true,\n    leftTimeConstraint: 'timestamp',\n    rightTimeConstraint: 'timestamp',\n    providerFilterKey: 'avlmVehicle.providerName'\n  };\n  _exports.alertNode = alertNode;\n  const mapContextNodes = [// avlm graph\n  avlmRouteNode, avlmTripNode, avlmStopNode, avlmVehicleNode, avlmMessageNode, // vehicle graph\n  avlmVehicleNode, // driver graph\n  avlmDriverNode, // rider graph\n  avlmRiderNode, avlmTripRiderNode, // alerts\n  alertNode];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/base/base\", [\"exports\", \"ember-data\", \"adept-iq/config/filter-types\", \"adept-iq/config/server-relationships\", \"adept-iq/utils/graph\", \"adept-iq/utils/sorts\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/filters\", \"lodash\", \"ember-concurrency\"], function (_exports, _emberData, _filterTypes, _serverRelationships, _graph, _sorts, _unwrapProxy, _filters, _lodash, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend(Ember.Evented, {\n    store: null,\n    session: null,\n    workspace: null,\n    workspaceContext: null,\n    user: null,\n    checkedItems: null,\n    refreshedModelNames: null,\n    refreshInProgress: false,\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    workspaceData: null,\n    graph: null,\n    mapGraph: null,\n    mapNodes: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    widget: null,\n    coreEntityPopulator: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('graph', {});\n      this.set('nodes', []);\n\n      this._onWorkspaceContextChange = modelNames => {\n        Ember.run.schedule('actions', this, 'onWorkspaceContextChange', modelNames);\n      };\n\n      this.get('workspaceContext').on('change', this._onWorkspaceContextChange);\n    },\n\n    reset() {\n      this.set('checkedItems', []);\n      this.notifyPropertyChange('implicitData');\n    },\n\n    destroy() {\n      this.get('workspaceContext').off('change', this._onWorkspaceContextChange);\n\n      this._super(...arguments);\n    },\n\n    async query(modelNames) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return await Ember.RSVP.resolve(this.queryLocal(modelNames, params));\n    },\n\n    queryLocal(modelNames) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      let isServerDataDependency = arguments.length > 2 ? arguments[2] : undefined;\n\n      if (isServerDataDependency) {\n        return Promise.resolve([]);\n      }\n\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = this.get('structuredActiveData');\n      if (!activeData) return [];\n      const records = modelNames.reduce((acu, modelName) => {\n        const data = Ember.makeArray(activeData[modelName]);\n        acu.push(...data);\n        return acu;\n      }, []);\n      const aggregatedData = records.filter(filterFn).sort(compareFn);\n      return aggregatedData;\n    },\n\n    refreshAll() {\n      const modelNames = this.get('nodes').mapBy('modelName');\n      this.refreshTableContent.perform(modelNames);\n    },\n\n    clearAll() {\n      const modelNames = this.get('nodes').mapBy('modelName');\n      this.clearTableContent.perform(modelNames);\n    },\n\n    // do not refresh if it is already on the list of\n    // refresh to do\n    addUniqueModelNamesRefresh(modelNames) {\n      const newModelNames = Ember.makeArray(modelNames); // remove any models that aren't actively being listened for\n\n      const consumedModels = this.get('consumedModelNames');\n\n      const filteredModelNames = _lodash.default.filter(newModelNames, model => consumedModels.includes(model));\n\n      const refreshedModelNames = this.get('refreshedModelNames');\n      filteredModelNames.forEach(modelName => {\n        if (!refreshedModelNames.includes(modelName)) {\n          refreshedModelNames.pushObject(modelName);\n        }\n      });\n    },\n\n    refreshTableContent: (0, _emberConcurrency.task)(function* (modelNames) {\n      this.addUniqueModelNamesRefresh(modelNames);\n      yield this.startRefreshQueue();\n    }).restartable(),\n    clearTableContent: (0, _emberConcurrency.task)(function* (modelNames) {\n      const newModelNames = Ember.makeArray(modelNames);\n      yield this.trigger('clear', newModelNames);\n    }).restartable(),\n\n    toggleHighLight(record, checked) {\n      if (record.get('isDestroyed')) return;\n      record.set('isHighLighted', checked);\n    },\n\n    isRecordChecked(record) {\n      if (!Ember.isNone(record)) {\n        const checkedItems = this.get('checkedItems');\n        const modelName = record.constructor.modelName;\n        const modelId = record.get('id');\n        return checkedItems.any(item => {\n          return item.modelName === modelName && item.record.get('id') === modelId;\n        });\n      }\n\n      return false;\n    },\n\n    isMultiRecordsChecked(record) {\n      if (!Ember.isNone(record)) {\n        const checkedItems = this.get('checkedItems');\n        const modelName = record.constructor.modelName;\n        let numRecordsChecked = 0;\n        checkedItems.forEach(item => {\n          if (item.modelName === modelName) {\n            numRecordsChecked++;\n          }\n        });\n        return numRecordsChecked > 1;\n      }\n\n      return false;\n    },\n\n    clearCheckedItems() {\n      this.set('checkedItems', []);\n      this.notifyPropertyChange('implicitData');\n      this.refreshAll();\n    },\n\n    setRecordsChecked(records, checked) {\n      const store = this.get('store');\n      const checkedItems = this.get('checkedItems').slice();\n      Ember.makeArray(records).forEach(record => {\n        const isChecked = this.isRecordChecked(record);\n        const storeRecord = store.peekRecord(record.constructor.modelName, record.get('id'));\n\n        if (isChecked === checked) {\n          return;\n        }\n\n        this.toggleHighLight(storeRecord, checked);\n\n        if (checked) {\n          checkedItems.push({\n            modelName: record.constructor.modelName,\n            record: storeRecord\n          });\n        } else {\n          const item = checkedItems.findBy('record', storeRecord);\n          checkedItems.removeObject(item);\n        }\n      });\n      this.set('checkedItems', checkedItems);\n      this.notifyPropertyChange('implicitData');\n      const modelNames = records.mapBy('constructor.modelName').uniq();\n      modelNames.forEach(modelName => {\n        const relatedModelNames = this._getRelatedModelNames(modelName);\n\n        this.addUniqueModelNamesRefresh(relatedModelNames);\n      });\n      this.refreshAll();\n    },\n\n    replaceCheckedRecordsByType(records) {\n      const modelNames = Ember.makeArray(records).mapBy('constructor.modelName').uniq(); // uncheck any records with modelName matching an argument element\n\n      const checkedItems = this.get('checkedItems').reject(_ref => {\n        let {\n          record\n        } = _ref;\n        return modelNames.includes(record.constructor.modelName);\n      });\n      records.forEach(record => {\n        checkedItems.pushObject({\n          modelName: record.constructor.modelName,\n          record\n        });\n      });\n      this.set('checkedItems', checkedItems);\n      modelNames.forEach(modelName => {\n        const relatedModelNames = this._getRelatedModelNames(modelName);\n\n        this.addUniqueModelNamesRefresh(relatedModelNames);\n      });\n      this.notifyPropertyChange('implicitData');\n    },\n\n    _getRelatedModelNames(modelName) {\n      const nodes = this.get('nodes');\n      const graph = this.get('graph');\n      const modelNode = nodes.findBy('modelName', modelName); // queue the neighbours of this modelName's active context node\n\n      const queue = Ember.makeArray(modelNode.links).map(_ref2 => {\n        let {\n          nodeId\n        } = _ref2;\n        return graph[nodeId];\n      }); // don't revisit originating node\n\n      const visited = [modelNode];\n\n      const getNeighbours = _ref3 => {\n        let {\n          links\n        } = _ref3;\n        return Ember.makeArray(links).map(_ref4 => {\n          let {\n            nodeId\n          } = _ref4;\n          return graph[nodeId];\n        });\n      };\n\n      const modelNames = [];\n      /*eslint-disable */\n\n      const visitNode = _ref5 => {\n        let {\n          modelName\n        } = _ref5;\n        modelNames.push(modelName);\n      };\n      /*eslint-enable */\n      // trigger refresh events for related models\n\n\n      (0, _graph.breadthFirstSearch)({\n        queue,\n        visited,\n        getNeighbours,\n        visitNode\n      });\n      return modelNames;\n    },\n\n    // Staggered column widget refresh so UI does not become\n    // unresponsive\n    startRefreshQueue() {\n      setTimeout(() => {\n        const refreshInProgress = this.get('refreshInProgress');\n\n        if (!refreshInProgress) {\n          const refreshedModelNames = this.get('refreshedModelNames');\n\n          if (refreshedModelNames.length > 0) {\n            this.set('refreshInProgress', true);\n            this.trigger('refresh', [refreshedModelNames[0]]);\n            this.get('refreshedModelNames').shift();\n            this.startRefreshQueue();\n          }\n        }\n      }, 10);\n    },\n\n    // only used for server-side queries\n    _buildActiveContextParams(modelName) {\n      const filters = [];\n      const includes = [];\n\n      _serverRelationships.serverRelationships[modelName].forEach(relationship => {\n        const items = this.get('checkedItems');\n        const relatedItems = items.filterBy('modelName', relationship.modelName);\n\n        if (Ember.isEmpty(relatedItems)) {\n          return;\n        }\n\n        let path; // push necessary includes for filter\n\n        if (relationship.type === 'belongsTo') {\n          path = `${relationship.path}Id`;\n          const pathSegments = relationship.path.split('.');\n\n          if (pathSegments.length > 1) {\n            const parentPath = pathSegments.slice(0, -1).join('.');\n            includes.push(parentPath);\n          }\n        }\n\n        if (relationship.type === 'hasMany') {\n          path = `${relationship.path}.id`;\n          includes.push(relationship.path);\n        } // build filter node\n\n\n        const values = relatedItems.mapBy('record.id');\n        const filter = (0, _filters.buildValueFilterNode)(_filterTypes.uuidIn, path, values);\n        filters.push(filter);\n      });\n\n      const filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n      return {\n        filter,\n        includes\n      };\n    },\n\n    _buildTimeFilter(modelName) {\n      const graph = this.get('graph');\n      const filters = [];\n      const node = graph[modelName]; // select entities that overlap time window, not just that are contained\n\n      if (node.leftTimeConstraint) {\n        const endDate = this.get('workspace.endDate').toISOString();\n        const filter = (0, _filters.buildValueFilterNode)(_filterTypes.dateLte, node.leftTimeConstraint, [endDate]);\n        filters.push(filter);\n      }\n\n      if (node.rightTimeConstraint) {\n        const startDate = this.get('workspace.startDate').toISOString();\n        const filter = (0, _filters.buildValueFilterNode)(_filterTypes.dateGte, node.rightTimeConstraint, [startDate]);\n        filters.push(filter);\n      }\n\n      return (0, _filters.buildCompoundFilterNode)('and', filters);\n    },\n\n    // this fires when the workspace context is modified\n    onWorkspaceContextChange(modelNames) {\n      const nodes = this.get('nodes');\n      const activeContextModelNames = nodes.mapBy('modelName');\n      const didChange = modelNames.any(modelName => {\n        return activeContextModelNames.includes(modelName);\n      });\n\n      if (didChange) {\n        // the debounce value needs to be higher than the one\n        // in workspace-context forceRefresh\n        this.refreshAll();\n      }\n    },\n\n    // Local Traversal BFS\n    _makeRecordSet(data) {\n      return data.reduce((obj, _ref6) => {\n        let {\n          modelName,\n          record\n        } = _ref6;\n        let arr = obj[modelName];\n\n        if (!arr) {\n          arr = [];\n          obj[modelName] = arr;\n        }\n\n        arr.push(record);\n        return obj;\n      }, {});\n    },\n\n    _localTraversalGetRelatedRecords(recordSet, modelName, link) {\n      return recordSet[modelName].reduce((arr, record) => {\n        let relation = null;\n\n        if (record instanceof _emberData.default.Model) {\n          relation = (0, _unwrapProxy.unwrapProxy)(record.get(link.path));\n        }\n\n        if (!relation) return arr;\n\n        switch (link.type) {\n          case 'belongsTo':\n            {\n              if (!relation.get('isRemoved')) arr.push(relation);\n              break;\n            }\n\n          case 'hasMany':\n            /*eslint-disable */\n            relation.forEach(record => {\n              record = (0, _unwrapProxy.unwrapProxy)(record);\n\n              if (record && !record.get('isRemoved')) {\n                arr.push(record);\n              }\n            });\n            break;\n\n          default:\n            /*eslint-disable */\n            throw `unknown relationship type '${link.type}'`;\n\n          /*eslint-enable */\n        }\n\n        return arr;\n      }, []);\n    },\n\n    /**\n     * Safely adds records of a single type to a record set in place.\n     * @param {RecordSet} recordSet\n     * @param {string} modelName\n     * @param {Array} records\n     * @returns {Boolean} whether or not records were added\n     */\n    _augmentRecordSet(recordSet, modelName, records) {\n      let collection = recordSet[modelName];\n\n      if (!collection) {\n        collection = [];\n        recordSet[modelName] = collection;\n      }\n\n      const lengthBefore = collection.length;\n      records.forEach(record => {\n        collection.addObject(record);\n      });\n      return collection.length - lengthBefore;\n    },\n\n    /**\n     * Traverses the domain relationship graph; this is not a true BFS!\n     * @param {RecordSet} recordSet - the set of records to augment\n     * @param {ModelNode[]} q - queue of model nodes to visit\n     * @param {ModelNode[]} blackList - model nodes to never visit\n     */\n    _expandGraph() {\n      let recordSet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      let q = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      let blackList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n      let graph = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      // don't mutate input queue\n\n      /*eslint-disable */\n      q = q.slice();\n      /*eslint-enable */\n      // for each node, keep track of which nodes we came from\n\n      const predecessors = {};\n\n      while (q.length > 0) {\n        const sourceNode = q.shift();\n        /*eslint-disable */\n\n        if (blackList.includes(sourceNode)) continue;\n        /*eslint-enable */\n        // eslint-disable-next-line no-loop-func\n\n        Ember.makeArray(sourceNode.links).forEach(link => {\n          const targetNode = graph[link.nodeId]; // don't backtrack across hasManys\n\n          if (link.type === 'hasMany') {\n            const ids = predecessors[sourceNode.id] || [];\n            if (ids.includes(targetNode.id) || predecessors[targetNode.id]) return;\n          }\n\n          const records = this._localTraversalGetRelatedRecords(recordSet, sourceNode.modelName, link);\n\n          const count = this._augmentRecordSet(recordSet, targetNode.modelName, records); // only [re-]visit target if we actually added something new\n\n\n          if (count > 0) {\n            q.addObject(targetNode);\n            predecessors[targetNode.id] = predecessors[targetNode.id] || [];\n            predecessors[targetNode.id].push(sourceNode.id);\n          }\n        });\n      }\n\n      return recordSet;\n    },\n\n    /**\n     * Computes the union of two or more record sets.\n     * @param {RecordSet[]} recordSets - record sets to combine\n     */\n    _unionRecordSets() {\n      for (var _len = arguments.length, recordSets = new Array(_len), _key = 0; _key < _len; _key++) {\n        recordSets[_key] = arguments[_key];\n      }\n\n      return recordSets.reduce((obj, recordSet) => {\n        Object.entries(recordSet).forEach(_ref7 => {\n          let [modelName, records] = _ref7;\n          let collection = obj[modelName];\n\n          if (!collection) {\n            collection = [];\n            obj[modelName] = collection;\n          }\n\n          if (Ember.isEmpty(records)) return;\n          records.forEach(record => {\n            if (collection.includes(record)) return;\n            collection.push(record);\n          });\n        });\n        return obj;\n      }, {});\n    },\n\n    /**\n     * Computes the intersection of two record sets used by implicit and active contexts.\n     * @param {RecordSet[]} recordSets - record sets to intersect\n     */\n    _intersectRecordSets() {\n      for (var _len2 = arguments.length, recordSets = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        recordSets[_key2] = arguments[_key2];\n      }\n\n      return recordSets.reduce((obj, recordSet, i) => {\n        if (i === 0) {\n          Object.entries(recordSet).forEach(_ref8 => {\n            let [modelName, records] = _ref8;\n            obj[modelName] = records.slice();\n          });\n          return obj;\n        }\n\n        Object.entries(recordSet).forEach(_ref9 => {\n          let [modelName, records] = _ref9;\n          let collection = obj[modelName];\n\n          if (Ember.isEmpty(collection)) {\n            collection = records || [];\n            obj[modelName] = collection;\n          } // find existing records that are not in the new set\n\n\n          const missingRecords = collection.reduce((arr, record) => {\n            if (records.includes(record)) return arr;\n            arr.push(record);\n            return arr;\n          }, []); // remove those from the existing set\n\n          missingRecords.forEach(record => {\n            const index = collection.indexOf(record);\n            collection.splice(index, 1);\n          });\n        });\n        return obj;\n      }, {});\n    },\n\n    /**\n     * Computes the intersection of two record sets be used by compute map context.\n     * @param {RecordSet[]} recordSets - record sets to intersect\n     */\n    _mapIntersectRecordSets(allData, recordSets) {\n      return recordSets.reduce((acu, set) => {\n        Object.entries(set).forEach(_ref10 => {\n          let [modelName, records] = _ref10;\n\n          const intersected = _lodash.default.intersection(allData[modelName], records); // find the intersection between the complete data\n\n\n          acu[modelName] = _lodash.default.union(intersected, acu[modelName]); // other record set may be seperate graphs merge any missing records\n        });\n        return acu;\n      }, {});\n    },\n\n    /**\n     * Computes the Implicit Context graph induced by a given selection of entities.\n     * @param {RecordSet} allData - the complete data set\n     * @param {Object[]} selectedData - the entities that have been \"checked\"\n     */\n    _computeImplicitContext(allData, selectedData) {\n      const nodes = this.get('nodes');\n      const graph = this.get('graph'); // implicit context is empty until something explicitly selected\n\n      if (Ember.isEmpty(selectedData)) return {};\n      let intersection = null;\n\n      const selectedRecordSet = this._makeRecordSet(selectedData);\n\n      try {\n        // compute induced subgraphs of each entity type group\n        const recordSets = Object.keys(selectedRecordSet).map(modelName => {\n          const modelNode = nodes.findBy('modelName', modelName);\n          const recordSet = {}; // for *implicit* data, we seed with only the selected records; this results\n          // in a smaller data set when only one type is selected\n\n          recordSet[modelName] = selectedRecordSet[modelName];\n          const queue = [];\n          Ember.makeArray(modelNode.links).forEach(link => {\n            // get related records of _selected_ items only\n            const records = this._localTraversalGetRelatedRecords(selectedRecordSet, modelName, link);\n\n            const linkModelName = graph[link.nodeId].modelName;\n            recordSet[linkModelName] = records;\n            const node = graph[link.nodeId];\n            queue.push(node);\n          });\n          const visited = [modelNode]; // push related records as far as they will go\n\n          const expandedRecordSet = this._expandGraph(recordSet, queue, visited, graph); // zero out any unvisited nodes *in this graph component*\n\n\n          (0, _graph.breadthFirstSearch)({\n            queue,\n            visited,\n            getNeighbours: _ref11 => {\n              let {\n                links\n              } = _ref11;\n              return Ember.makeArray(links).map(_ref12 => {\n                let {\n                  nodeId\n                } = _ref12;\n                return graph[nodeId];\n              });\n            },\n\n            /*eslint-disable */\n            visitNode: _ref13 => {\n              let {\n                modelName\n              } = _ref13;\n              expandedRecordSet[modelName] = expandedRecordSet[modelName] || [];\n            }\n            /*eslint-enable */\n\n          });\n          return expandedRecordSet;\n        });\n        intersection = this._intersectRecordSets(allData, ...recordSets);\n      } catch (error) {\n        console.log('Exception in computeImplicitContext in local-traversal.js' + error); // eslint-disable-line no-console\n      }\n\n      return intersection;\n    },\n\n    /**\n     * Computes the Implicit Context graph induced by a given selection of entities.\n     * @param {RecordSet} allData - the complete data set\n     * @param {Object[]} selectedData - the entities that have been \"checked\"\n     */\n    _computeMapContext(allData, selectedData) {\n      const nodes = this.get('mapNodes');\n      const graph = this.get('mapGraph'); // implicit context is empty until something explicitly selected\n\n      if (Ember.isEmpty(selectedData)) return {};\n      let intersection = null;\n\n      const selectedRecordSet = this._makeRecordSet(selectedData);\n\n      try {\n        // compute induced subgraphs of each entity type group\n        const recordSets = Object.keys(selectedRecordSet).map(modelName => {\n          const modelNode = nodes.findBy('modelName', modelName);\n          const recordSet = {}; // for *implicit* data, we seed with only the selected records; this results\n          // in a smaller data set when only one type is selected\n\n          recordSet[modelName] = selectedRecordSet[modelName];\n          const queue = [];\n          Ember.makeArray(modelNode.links).forEach(link => {\n            // get related records of _selected_ items only\n            const records = this._localTraversalGetRelatedRecords(selectedRecordSet, modelName, link);\n\n            const linkModelName = graph[link.nodeId].modelName;\n            recordSet[linkModelName] = records;\n            const node = graph[link.nodeId];\n            queue.push(node);\n          });\n          const visited = [modelNode]; // push related records as far as they will go\n\n          const expandedRecordSet = this._expandGraph(recordSet, queue, visited, graph); // zero out any unvisited nodes *in this graph component*\n\n\n          (0, _graph.breadthFirstSearch)({\n            queue,\n            visited,\n            getNeighbours: _ref14 => {\n              let {\n                links\n              } = _ref14;\n              return Ember.makeArray(links).map(_ref15 => {\n                let {\n                  nodeId\n                } = _ref15;\n                return graph[nodeId];\n              });\n            },\n\n            /*eslint-disable */\n            visitNode: _ref16 => {\n              let {\n                modelName\n              } = _ref16;\n              expandedRecordSet[modelName] = expandedRecordSet[modelName] || [];\n            }\n            /*eslint-enable */\n\n          });\n          return expandedRecordSet;\n        });\n        intersection = this._mapIntersectRecordSets(allData, recordSets);\n      } catch (error) {\n        console.log('Exception in computeImplicitContext in local-traversal.js' + error); // eslint-disable-line no-console\n      }\n\n      return intersection;\n    },\n\n    /**\n     * Computes the Active Context graph induced by a given selection of entities.\n     * @param {RecordSet} allData - the complete data set\n     * @param {Object[]} selectedData - the entities that have been \"checked\"\n     */\n    _computeActiveContext(allData, selectedData) {\n      let union = null;\n      let intersection = null;\n      const nodes = this.get('nodes');\n      const graph = this.get('graph');\n\n      const selectedRecordSet = this._makeRecordSet(selectedData);\n\n      try {\n        // compute induced subgraphs of each entity type group\n        const recordSets = Object.keys(selectedRecordSet).map(modelName => {\n          const modelNode = nodes.findBy('modelName', modelName);\n          const recordSet = {}; // for *full* active context, we seed with all data of this type\n\n          recordSet[modelName] = allData[modelName];\n          const queue = [];\n          Ember.makeArray(modelNode.links).forEach(link => {\n            // get related records of _selected_ items only\n            const records = this._localTraversalGetRelatedRecords(selectedRecordSet, modelName, link);\n\n            const linkModelName = graph[link.nodeId].modelName;\n            recordSet[linkModelName] = records;\n            const node = graph[link.nodeId];\n            queue.push(node);\n          });\n          const visited = [modelNode]; // push related records as far as they will go\n\n          const expandedRecordSet = this._expandGraph(recordSet, queue, visited, graph); // zero out any unvisited nodes *in this graph component*\n\n\n          (0, _graph.breadthFirstSearch)({\n            queue,\n            visited,\n            getNeighbours: _ref17 => {\n              let {\n                links\n              } = _ref17;\n              return Ember.makeArray(links).map(_ref18 => {\n                let {\n                  nodeId\n                } = _ref18;\n                return graph[nodeId];\n              });\n            },\n\n            /*eslint-disable */\n            visitNode: _ref19 => {\n              let {\n                modelName\n              } = _ref19;\n              expandedRecordSet[modelName] = expandedRecordSet[modelName] || [];\n            }\n            /*eslint-enable */\n\n          });\n          return expandedRecordSet;\n        });\n        intersection = this._intersectRecordSets(allData, ...recordSets); // add the selected records back in where missing\n\n        union = this._unionRecordSets(intersection, selectedRecordSet);\n      } catch (error) {\n        console.log('Exception in computeActiveContext in local-traversal.js' + error); // eslint-disable-line no-console\n      }\n\n      return union;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/booking/booking\", [\"exports\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"adept-iq/classes/active-contexts/booking/graph\", \"adept-iq/classes/active-contexts/booking/map-graph\", \"adept-iq/utils/flattenData\"], function (_exports, _lodash, _base, _graph, _mapGraph, _flattenData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    workspaceData: Ember.computed.readOnly('workspaceContext._structuredWorkspace'),\n    consumedModelNames: Ember.computed('workspace.dashboardInstance.widgets.[]', function () {\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      return widgetModels;\n    }),\n    // structured data sets (grouped by model name)\n    structuredActiveData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeActiveContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredActiveData' + e);\n      }\n    }),\n    structuredImplicitData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeImplicitContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredImplicitData' + e);\n      }\n    }),\n    // flattened data sets for easy binding & interation\n    activeData: Ember.computed('structuredActiveData', function () {\n      const structuredActiveData = this.get('structuredActiveData');\n      return (0, _flattenData.flattenData)(structuredActiveData);\n    }),\n    activeVehicles: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (!workspaceData) return [];\n      return workspaceData.vehicle;\n    }),\n    // map-context uses to construct layered records\n    structuredMapData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      const workspaceData = this.get('workspaceData') || {};\n      const checkedItems = this.get('checkedItems') || [];\n      return this._computeMapContext(workspaceData, checkedItems);\n    }),\n    // map-context binds to this\n    implicitData: Ember.computed('structuredMapData', function () {\n      const structuredMapData = this.get('structuredMapData');\n      return (0, _flattenData.flattenData)(structuredMapData);\n    }),\n    hashImplicitData: Ember.computed('structuredImplicitData', function () {\n      const structuredImplicitData = this.get('structuredImplicitData');\n      const hash = this.get('emptyImplicitHash');\n\n      _lodash.default.forOwn(structuredImplicitData, (value, key) => {\n        hash[key] = {};\n        value.forEach(v => {\n          const id = v.get('id');\n          hash[key][id] = true;\n        });\n      });\n\n      return hash;\n    }),\n    // bound to computed property to implicitMarkers\n    implicitStops: Ember.computed('implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      return implicitData.filterBy('modelName', 'stop-point').mapBy('record');\n    }),\n    // bound to computed property to implicitMarkers\n    implicitVehicles: Ember.computed('workspaceData', 'implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      const vehicles = implicitData.filterBy('modelName', 'vehicle').mapBy('record');\n      const implicitVehicles = vehicles;\n      return implicitVehicles;\n    }),\n    // bind implicitContext property to boundary\n    implicitMarkers: Ember.computed('implicitVehicles.[]', 'implicitStops.[]', function () {\n      const implicitStops = this.get('implicitStops');\n      const implicitVehicles = this.get('implicitVehicles');\n      return implicitStops.concat(implicitVehicles);\n    }),\n\n    tripActiveContext() {\n      return this.get('checkedItems').some(record => {\n        return record.modelName === 'trip';\n      });\n    },\n\n    // Overwrite base clearCheckedItems\n    async clearCheckedItems() {\n      const checkedItems = this.get('checkedItems');\n\n      for (const checkedItem of checkedItems) {\n        this.toggleHighLight(checkedItem.record, false);\n      }\n\n      this.set('checkedItems', []);\n      this.get('widget').deselectAllWidgets();\n      this.notifyPropertyChange('implicitData');\n      await this.refreshAll();\n      const allRows = document.querySelectorAll('.passengers-booking-widget .column-widget-body .ember-light-table .lt-row');\n      allRows.forEach(row => row.classList.remove('is-selected'));\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n    },\n\n    destroy() {\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/booking/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zoneNode = _exports.vehicleNode = _exports.ssoUserNode = _exports.ssoRoleNode = _exports.ssTripNode = _exports.ssRouteNode = _exports.riderNode = _exports.riderExternalNode = _exports.dsStopNode = _exports.dsRouteVehicleDriverNode = _exports.dsRouteNode = _exports.dsClusterNode = _exports.driverNode = _exports.default = _exports.bsSubscriptionNode = _exports.bsStopNode = _exports.bsSegmentNode = _exports.bsLegNode = _exports.bsBookingNode = _exports.avlmMessageNode = _exports.alertNode = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  // Rider Managament Related Nodes\n  const riderNode = {\n    id: 'rider',\n    modelName: 'rider',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'bs-leg',\n      path: 'legs'\n    }],\n    providerFilterKey: 'providers'\n  };\n  _exports.riderNode = riderNode;\n  const riderExternalNode = {\n    id: 'riderExternal',\n    modelName: 'rider-external',\n    links: []\n  }; // Driver Related Nodes\n\n  _exports.riderExternalNode = riderExternalNode;\n  const driverNode = {\n    id: 'driver',\n    modelName: 'driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route-vehicle-driver',\n      path: 'latestRouteVehicleDriver'\n    }],\n    providerFilterKey: 'provider'\n  }; // Vehicle Related Nodes\n\n  _exports.driverNode = driverNode;\n  const vehicleNode = {\n    id: 'vehicle',\n    modelName: 'vehicle',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route-vehicle-driver',\n      path: 'latestRouteVehicleDriver'\n    }],\n    providerFilterKey: 'provider'\n  }; // Zone Related Nodes\n\n  _exports.vehicleNode = vehicleNode;\n  const zoneNode = {\n    id: 'zone',\n    modelName: 'zone',\n    links: [],\n    providerFilterKey: false\n  }; // Dispatch Related Nodes\n  // used to traverse local data model\n\n  _exports.zoneNode = zoneNode;\n  const dsRouteNode = {\n    id: 'ds-route',\n    modelName: 'dispatch-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'assignedVehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'driver',\n      path: 'assignedDriver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'orderedStopsWithGaragesAndBreaks'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.dsRouteNode = dsRouteNode;\n  const dsRouteVehicleDriverNode = {\n    id: 'ds-route-vehicle-driver',\n    modelName: 'route-vehicle-driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route',\n      path: 'route'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'driver',\n      path: 'driver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    isActive: true,\n    providerFilterKey: 'dispatchRoute.provider',\n    leftTimeConstraint: 'dispatchRoute.tripStartTime',\n    rightTimeConstraint: 'dispatchRoute.tripEndTime'\n  };\n  _exports.dsRouteVehicleDriverNode = dsRouteVehicleDriverNode;\n  const dsClusterNode = {\n    id: 'ds-cluster',\n    modelName: 'cluster',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'dispatcherRoute.provider',\n    leftTimeConstraint: 'dispatchRoute.tripStartTime',\n    rightTimeConstraint: 'dispatchRoute.tripEndTime'\n  };\n  _exports.dsClusterNode = dsClusterNode;\n  const dsStopNode = {\n    id: 'ds-stop',\n    modelName: 'stop-point',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-cluster',\n      path: 'cluster'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-trip',\n      path: 'trip'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ds-route',\n      path: 'dispatchRoute'\n    }],\n    isActive: true,\n    showUnAssignedProvider: true,\n    providerFilterKey: 'computedProvider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // Scheduling Related Nodes\n\n  _exports.dsStopNode = dsStopNode;\n  const ssRouteNode = {\n    id: 'ss-route',\n    modelName: 'route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route',\n      path: 'dispatchRoute'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-message',\n      path: 'cannedMessages'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'plannedStartTime',\n    rightTimeConstraint: 'plannedEndTime'\n  };\n  _exports.ssRouteNode = ssRouteNode;\n  const ssTripNode = {\n    id: 'ss-trip',\n    modelName: 'trip',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-segment',\n      path: 'segment'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'stopPoints'\n    }],\n    isActive: true,\n    showUnAssignedProvider: true,\n    providerFilterKey: 'tripProvider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // booking service related nodes\n\n  _exports.ssTripNode = ssTripNode;\n  const bsBookingNode = {\n    id: 'bs-booking',\n    modelName: 'booking',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-subscription',\n      path: 'subscription'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsBookingNode = bsBookingNode;\n  const bsLegNode = {\n    id: 'bs-leg',\n    modelName: 'leg',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-booking',\n      path: 'booking'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'rider',\n      path: 'rider'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsLegNode = bsLegNode;\n  const bsSegmentNode = {\n    id: 'bs-segment',\n    modelName: 'segment',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-leg',\n      path: 'leg'\n    }, {\n      type: 'hasMany',\n      nodeId: 'bs-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsSegmentNode = bsSegmentNode;\n  const bsStopNode = {\n    id: 'bs-stop',\n    modelName: 'segment-stop',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-segment',\n      path: 'segment'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsStopNode = bsStopNode;\n  const bsSubscriptionNode = {\n    id: 'bs-subscription',\n    modelName: 'subscription',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'bs-booking',\n      path: 'bookings'\n    }],\n    providerFilterKey: false,\n    isActive: false\n  };\n  _exports.bsSubscriptionNode = bsSubscriptionNode;\n  const ssoUserNode = {\n    id: 'sso-user',\n    modelName: 'sso-user',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'sso-role',\n      path: 'roles'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoUserNode = ssoUserNode;\n  const ssoRoleNode = {\n    id: 'sso-role',\n    modelName: 'sso-role',\n    isActive: false,\n    links: [{\n      type: 'hasMany',\n      nodeId: 'sso-user',\n      path: 'users'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoRoleNode = ssoRoleNode;\n  const avlmMessageNode = {\n    id: 'avlm-message',\n    modelName: 'avlm-canned-message',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'driver',\n      path: 'driver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.avlmMessageNode = avlmMessageNode;\n  const alertNode = {\n    id: 'avlm-alert',\n    modelName: 'avlm-alert',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'timestamp',\n    rightTimeConstraint: 'timestamp'\n  };\n  _exports.alertNode = alertNode;\n  const activeContextNodes = [// vehicle graph\n  vehicleNode, // driver graph\n  driverNode, // zone graph,\n  zoneNode, // dispatch graph\n  dsRouteNode, dsRouteVehicleDriverNode, dsClusterNode, dsStopNode, // scheduling graph\n  ssTripNode, ssRouteNode, // rider management graph\n  riderNode, riderExternalNode, // sign-on\n  ssoUserNode, ssoRoleNode, // booking service graph\n  bsBookingNode, bsLegNode, bsSegmentNode, bsStopNode, bsSubscriptionNode, // avlm graph\n  avlmMessageNode, // alerts\n  alertNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/booking/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zoneNode = _exports.vehicleNode = _exports.ssTripNode = _exports.riderNode = _exports.riderExternalNode = _exports.mapContextNodes = _exports.mapContextModels = _exports.mapContextGraph = _exports.dsStopNode = _exports.dsRouteNode = _exports.driverNode = _exports.default = _exports.bsSubscriptionNode = _exports.bsStopNode = _exports.bsSegmentNode = _exports.bsLegNode = _exports.bsBookingNode = _exports.avlmMessageNode = _exports.alertNode = void 0;\n  // Rider Managament Related Nodes\n  const riderNode = {\n    id: 'rider',\n    modelName: 'rider',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    providerFilterKey: 'providers'\n  };\n  _exports.riderNode = riderNode;\n  const riderExternalNode = {\n    id: 'riderExternal',\n    modelName: 'rider-external',\n    links: []\n  }; // Driver Related Nodes\n\n  _exports.riderExternalNode = riderExternalNode;\n  const driverNode = {\n    id: 'driver',\n    modelName: 'driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'latestVehicle'\n    }],\n    providerFilterKey: 'provider'\n  }; // Vehicle Related Nodes\n\n  _exports.driverNode = driverNode;\n  const vehicleNode = {\n    id: 'vehicle',\n    modelName: 'vehicle',\n    links: [],\n    providerFilterKey: 'provider'\n  }; // Zone Related Nodes\n\n  _exports.vehicleNode = vehicleNode;\n  const zoneNode = {\n    id: 'zone',\n    modelName: 'zone',\n    links: [],\n    providerFilterKey: false\n  }; // Dispatch Related Nodes\n  // used to traverse local data model\n\n  _exports.zoneNode = zoneNode;\n  const dsRouteNode = {\n    id: 'ds-route',\n    modelName: 'dispatch-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'assignedVehicle'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'orderedStopsWithGaragesAndBreaks'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.dsRouteNode = dsRouteNode;\n  const dsStopNode = {\n    id: 'ds-stop',\n    modelName: 'stop-point',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'trip.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // Scheduling Related Nodes\n\n  _exports.dsStopNode = dsStopNode;\n  const ssTripNode = {\n    id: 'ss-trip',\n    modelName: 'trip',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'stopPoints'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssTripNode = ssTripNode;\n  const avlmMessageNode = {\n    id: 'avlm-message',\n    modelName: 'avlm-canned-message',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.avlmMessageNode = avlmMessageNode;\n  const alertNode = {\n    id: 'avlm-alert',\n    modelName: 'avlm-alert',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'timestamp',\n    rightTimeConstraint: 'timestamp'\n  }; // booking service related nodes\n\n  _exports.alertNode = alertNode;\n  const bsBookingNode = {\n    id: 'bs-booking',\n    modelName: 'booking',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-subscription',\n      path: 'subscription'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsBookingNode = bsBookingNode;\n  const bsLegNode = {\n    id: 'bs-leg',\n    modelName: 'leg',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-booking',\n      path: 'booking'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'rider',\n      path: 'rider'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsLegNode = bsLegNode;\n  const bsSegmentNode = {\n    id: 'bs-segment',\n    modelName: 'segment',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-leg',\n      path: 'leg'\n    }, {\n      type: 'hasMany',\n      nodeId: 'bs-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsSegmentNode = bsSegmentNode;\n  const bsStopNode = {\n    id: 'bs-stop',\n    modelName: 'segment-stop',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-segment',\n      path: 'segment'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsStopNode = bsStopNode;\n  const bsSubscriptionNode = {\n    id: 'bs-subscription',\n    modelName: 'subscription',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'bs-booking',\n      path: 'bookings'\n    }],\n    providerFilterKey: false,\n    isActive: false\n  };\n  _exports.bsSubscriptionNode = bsSubscriptionNode;\n  const mapContextNodes = [// vehicle graph\n  vehicleNode, // driver graph\n  driverNode, // zone graph,\n  zoneNode, // dispatch graph\n  dsRouteNode, dsStopNode, // scheduling graph\n  ssTripNode, // rider management graph\n  riderNode, riderExternalNode, // booking service graph\n  bsBookingNode, bsLegNode, bsSegmentNode, bsStopNode, bsSubscriptionNode, // avlm graph\n  avlmMessageNode, // alerts\n  alertNode];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  const mapContextModels = mapContextNodes.reduce((obj, node) => {\n    obj[node.modelName] = node;\n    return obj;\n  }, {});\n  _exports.mapContextModels = mapContextModels;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/dispatch/dispatch\", [\"exports\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"ember-concurrency\", \"adept-iq/utils/remove-focus\", \"adept-iq/config/environment\", \"adept-iq/classes/active-contexts/dispatch/graph\", \"adept-iq/classes/active-contexts/dispatch/map-graph\", \"adept-iq/utils/flattenData\"], function (_exports, _lodash, _base, _emberConcurrency, _removeFocus, _environment, _graph, _mapGraph, _flattenData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    workspaceData: Ember.computed.readOnly('workspaceContext._structuredWorkspace'),\n    consumedModelNames: Ember.computed('workspace.dashboardInstance.widgets.@each.models', function () {\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      return widgetModels;\n    }),\n    // structured data sets (grouped by model name)\n    structuredActiveData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeActiveContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredActiveData' + e);\n      }\n    }),\n    structuredImplicitData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeImplicitContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredImplicitData' + e);\n      }\n    }),\n    // flattened data sets for easy binding & interation\n    activeData: Ember.computed('structuredActiveData', function () {\n      const structuredActiveData = this.get('structuredActiveData');\n      return (0, _flattenData.flattenData)(structuredActiveData);\n    }),\n    activeVehicles: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (!workspaceData) return [];\n      return workspaceData.vehicle;\n    }),\n    // map-context uses to construct layered records\n    structuredMapData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      const workspaceData = this.get('workspaceData') || {};\n      const checkedItems = this.get('checkedItems') || [];\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      if (!_environment.default.APP.test && !isTraversalEnabled) return [];\n      return this._computeMapContext(workspaceData, checkedItems);\n    }),\n    // map-context binds to this\n    implicitData: Ember.computed('structuredMapData', function () {\n      const structuredMapData = this.get('structuredMapData');\n      return (0, _flattenData.flattenData)(structuredMapData);\n    }),\n    hashImplicitData: Ember.computed('structuredImplicitData', function () {\n      const structuredImplicitData = this.get('structuredImplicitData');\n      const hash = this.get('emptyImplicitHash');\n\n      _lodash.default.forOwn(structuredImplicitData, (value, key) => {\n        hash[key] = {};\n        value.forEach(v => {\n          const id = v.get('id');\n          hash[key][id] = true;\n        });\n      });\n\n      return hash;\n    }),\n    // bound to computed property to implicitMarkers\n    implicitStops: Ember.computed('implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      return implicitData.filter(item => item.modelName === 'stop-point' || item.modelName === 'trip-stop').mapBy('record');\n    }),\n    // bound to computed property to implicitMarkers\n    implicitVehicles: Ember.computed('workspaceData', 'implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      const vehicles = implicitData.filterBy('modelName', 'vehicle').mapBy('record');\n      const implicitVehicles = vehicles;\n      return implicitVehicles;\n    }),\n    // bind implicitContext property to boundary\n    implicitMarkers: Ember.computed('implicitVehicles.[]', 'implicitStops.[]', function () {\n      const implicitStops = this.get('implicitStops');\n      const implicitVehicles = this.get('implicitVehicles');\n      return implicitStops.concat(implicitVehicles);\n    }),\n\n    tripActiveContext() {\n      return this.get('checkedItems').some(record => {\n        return record.modelName === 'trip';\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n    },\n\n    destroy() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      if (this.get('setWidgetRecordsTask.isRunning')) {\n        this.get('setWidgetRecordsTask').cancelAll();\n      }\n    },\n\n    // Overwrite base clearCheckedItems\n    clearCheckedItems() {\n      let modelName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const modelNames = Array.isArray(modelName) ? modelName : [modelName];\n      const checkedItems = this.get('checkedItems');\n\n      for (const checkedItem of checkedItems) {\n        if (Ember.isNone(modelName) || modelNames.includes(checkedItem.modelName)) {\n          this.toggleHighLight(checkedItem.record, false);\n        }\n      }\n\n      if (Ember.isNone(modelName)) {\n        this.set('checkedItems', []);\n      } else {\n        const updatedCheckedItems = checkedItems.filter(checkedItem => {\n          return !modelName.includes(checkedItem.modelName);\n        });\n        this.set('checkedItems', updatedCheckedItems);\n      }\n\n      this.get('widget').deselectAllWidgets();\n      this.notifyPropertyChange('implicitData');\n      this.refreshAll();\n    },\n\n    setWidgetRecordsTask: (0, _emberConcurrency.task)(function* (widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, isNewCheck) {\n      this.set('isTraversalEnabled', isTraversalEnabled);\n      yield this.setWidgetRecords(widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, isNewCheck);\n    }).enqueue(),\n\n    async setWidgetRecords(widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, isNewCheck) {\n      let checkedItems = this.get('checkedItems');\n      const recordsToTraversal = [];\n      const widgetId = widgetInstanceId.split('_')[1];\n      (0, _removeFocus.cursorWait)();\n\n      try {\n        const store = this.get('store');\n\n        for (const widgetRecord of widgetRecords) {\n          const coreModelName = this.getCoreModelNameByWidgetRecord(coreModelArgName, widgetRecord);\n          if (checked) checkedItems = this.get('checkedItems');\n\n          if (checked) {\n            let storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n\n            if (Ember.isNone(storeRecord) || coreModelName === 'dispatch-route' && Ember.isNone(storeRecord.get('route.content'))) {\n              await this.get('coreEntityPopulator').populateEntityGraph(widgetModelName, widgetRecord, {});\n              storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n            }\n\n            this.get('workspaceContext').manualReloadContext();\n\n            if (storeRecord) {\n              if (coreModelName === 'avlm-alert') {\n                if (widgetRecord.vehicleId) {\n                  const vehicleRecord = store.peekRecord('vehicle', widgetRecord.vehicleId);\n                  this.toggleHighLight(vehicleRecord, checked);\n                }\n              }\n\n              if (coreModelName === 'avlm-trip') {\n                const pickStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.pickStopPointId);\n                const dropStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.dropStopPointId);\n                this.toggleHighLight(pickStopPointRecord, checked);\n                this.toggleHighLight(dropStopPointRecord, checked);\n              }\n\n              this.toggleHighLight(storeRecord, checked); // if record being updated is already in the checked items, we don't want to add it again\n\n              const foundItem = checkedItems.find(item => item.modelName === coreModelName && item._key === widgetRecord._key && widgetId === item.widgetId);\n              const checkedWidgetRecords = checkedItems.filter(item => item.modelName === coreModelName); // a newly added row check or an updated row that's already been checked before\n              // in a different widget of same type\n\n              if (!foundItem && isNewCheck) {\n                if (coreModelName === 'trip' || coreModelName === 'stop-point') {\n                  const selectedRouteSet = new Set();\n                  checkedWidgetRecords.forEach(data => {\n                    const routeId = data.record.get('route.id');\n                    if (routeId) selectedRouteSet.add(routeId);\n                  });\n\n                  if (!isTraversalEnabled || selectedRouteSet.size < selectedRowLimit && checkedWidgetRecords.length < maxLimitRouteAssociation) {\n                    checkedItems.push({\n                      modelName: coreModelName,\n                      record: storeRecord,\n                      _key: widgetRecord._key,\n                      widgetId\n                    });\n                    recordsToTraversal.push(widgetRecord);\n                  }\n                } else if (!isTraversalEnabled || checkedWidgetRecords.length < selectedRowLimit) {\n                  checkedItems.push({\n                    modelName: coreModelName,\n                    record: storeRecord,\n                    _key: widgetRecord._key,\n                    widgetId\n                  });\n                  recordsToTraversal.push(widgetRecord);\n                }\n              } else {\n                // Even it is not a new check, we need to update its data.\n                recordsToTraversal.push(widgetRecord);\n              }\n            }\n          } else {\n            // As in ember store we only have id , use id for finding the record\n            const storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n\n            if (storeRecord) {\n              if (coreModelName === 'avlm-alert') {\n                if (widgetRecord.vehicleId) {\n                  const vehicleRecord = store.peekRecord('vehicle', widgetRecord.vehicleId);\n                  this.toggleHighLight(vehicleRecord, checked);\n                }\n              }\n\n              if (coreModelName === 'avlm-trip') {\n                const pickStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.pickStopPointId);\n                const dropStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.dropStopPointId);\n                this.toggleHighLight(pickStopPointRecord, checked);\n                this.toggleHighLight(dropStopPointRecord, checked);\n              }\n\n              this.toggleHighLight(storeRecord, checked);\n            }\n\n            checkedItems = checkedItems.filter(data => !(data.modelName === coreModelName && widgetRecord && data._key === widgetRecord._key && widgetId === data.widgetId));\n            recordsToTraversal.push(widgetRecord);\n          }\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error('Error occurred while populating data for the selected widget-record ' + e);\n      }\n\n      this.set('checkedItems', checkedItems.concat([])); // add traversal if traversal flag is turned on for this widget\n\n      if (checked && isTraversalEnabled) {\n        this.get('widget').addTraversalFilter(widgetInstanceId, widgetModelName, recordsToTraversal);\n      } else {\n        this.get('widget').removeTraversalFilter(widgetInstanceId, widgetModelName, recordsToTraversal);\n      }\n\n      this.get('widget').updateUserSelection();\n      (0, _removeFocus.cursorDefault)();\n    },\n\n    setWidgetTraversalTask: (0, _emberConcurrency.task)(function* (widgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled) {\n      yield this.setWidgetTraversal(widgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled);\n    }).enqueue(),\n\n    async setWidgetTraversal(widgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled) {\n      // add traversal if traversal flag is turned on for this widget\n      if (isTraversalEnabled) {\n        this.get('widget').addTraversalFilter(widgetInstanceId, widgetModelName, widgetRecords);\n      } else {\n        this.get('widget').removeTraversalFilter(widgetInstanceId, widgetModelName, widgetRecords);\n      }\n    },\n\n    getCoreModelNameByWidgetRecord(coreModelName, widgetRecord) {\n      if (coreModelName === 'avlm-canned-message' && widgetRecord.priority === 'E') {\n        return 'avlm-emergency-message';\n      }\n\n      return coreModelName;\n    },\n\n    getCoreModelNameByStoreRecord(coreModelName, storeRecord) {\n      // The storeRecord not match the coreModelName\n      if (coreModelName === 'avlm-canned-message' && storeRecord.modelName === 'avlm-emergency-message') {\n        return 'avlm-emergency-message';\n      }\n\n      return coreModelName;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/dispatch/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zoneNode = _exports.vehicleNode = _exports.ssoUserNode = _exports.ssoRoleNode = _exports.ssTripStopNode = _exports.ssTripNode = _exports.ssRouteNode = _exports.riderNode = _exports.riderExternalNode = _exports.dsStopNode = _exports.dsRouteVehicleDriverNode = _exports.dsRouteNode = _exports.dsClusterNode = _exports.driverNode = _exports.default = _exports.bsSubscriptionNode = _exports.bsStopNode = _exports.bsSegmentNode = _exports.bsLegNode = _exports.bsBookingNode = _exports.avlmMessageNode = _exports.alertNode = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  // Rider Managament Related Nodes\n  const riderNode = {\n    id: 'rider',\n    modelName: 'rider',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'bs-leg',\n      path: 'legs'\n    }],\n    providerFilterKey: 'providers'\n  };\n  _exports.riderNode = riderNode;\n  const riderExternalNode = {\n    id: 'riderExternal',\n    modelName: 'rider-external',\n    links: []\n  }; // Driver Related Nodes\n\n  _exports.riderExternalNode = riderExternalNode;\n  const driverNode = {\n    id: 'driver',\n    modelName: 'driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route-vehicle-driver',\n      path: 'latestRouteVehicleDriver'\n    }],\n    providerFilterKey: 'provider'\n  }; // Vehicle Related Nodes\n\n  _exports.driverNode = driverNode;\n  const vehicleNode = {\n    id: 'vehicle',\n    modelName: 'vehicle',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route-vehicle-driver',\n      path: 'latestRouteVehicleDriver'\n    }],\n    providerFilterKey: 'provider'\n  }; // Zone Related Nodes\n\n  _exports.vehicleNode = vehicleNode;\n  const zoneNode = {\n    id: 'zone',\n    modelName: 'zone',\n    links: [],\n    providerFilterKey: false\n  }; // Dispatch Related Nodes\n  // used to traverse local data model\n\n  _exports.zoneNode = zoneNode;\n  const dsRouteNode = {\n    id: 'ds-route',\n    modelName: 'dispatch-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'assignedVehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'driver',\n      path: 'assignedDriver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'orderedStopsWithGaragesAndBreaks'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.dsRouteNode = dsRouteNode;\n  const dsRouteVehicleDriverNode = {\n    id: 'ds-route-vehicle-driver',\n    modelName: 'route-vehicle-driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route',\n      path: 'route'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'driver',\n      path: 'driver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    isActive: true,\n    providerFilterKey: 'dispatchRoute.provider',\n    leftTimeConstraint: 'dispatchRoute.tripStartTime',\n    rightTimeConstraint: 'dispatchRoute.tripEndTime'\n  };\n  _exports.dsRouteVehicleDriverNode = dsRouteVehicleDriverNode;\n  const dsClusterNode = {\n    id: 'ds-cluster',\n    modelName: 'cluster',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'dispatcherRoute.provider',\n    leftTimeConstraint: 'dispatchRoute.tripStartTime',\n    rightTimeConstraint: 'dispatchRoute.tripEndTime'\n  };\n  _exports.dsClusterNode = dsClusterNode;\n  const dsStopNode = {\n    id: 'ds-stop',\n    modelName: 'stop-point',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-cluster',\n      path: 'cluster'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-trip',\n      path: 'trip'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ds-route',\n      path: 'dispatchRoute'\n    }],\n    isActive: true,\n    showUnAssignedProvider: true,\n    providerFilterKey: 'computedProvider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // Scheduling Related Nodes\n\n  _exports.dsStopNode = dsStopNode;\n  const ssTripStopNode = {\n    id: 'ss-trip-stop',\n    modelName: 'trip-stop',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ss-trip',\n      path: 'trip'\n    }],\n    isActive: true,\n    providerFilterKey: 'trip.provider',\n    scheduleFilterKey: 'trip.schedule',\n    leftTimeConstraint: 'trip.routeTripStartTime',\n    rightTimeConstraint: 'trip.routeTripEndTime'\n  };\n  _exports.ssTripStopNode = ssTripStopNode;\n  const ssRouteNode = {\n    id: 'ss-route',\n    modelName: 'route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ds-route',\n      path: 'dispatchRoute'\n    }, {\n      type: 'hasMany',\n      nodeId: 'avlm-message',\n      path: 'cannedMessages'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'plannedStartTime',\n    rightTimeConstraint: 'plannedEndTime'\n  };\n  _exports.ssRouteNode = ssRouteNode;\n  const ssTripNode = {\n    id: 'ss-trip',\n    modelName: 'trip',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-segment',\n      path: 'segment'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'stopPoints'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    showUnAssignedProvider: true,\n    providerFilterKey: 'tripProvider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // booking service related nodes\n\n  _exports.ssTripNode = ssTripNode;\n  const bsBookingNode = {\n    id: 'bs-booking',\n    modelName: 'booking',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-subscription',\n      path: 'subscription'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsBookingNode = bsBookingNode;\n  const bsLegNode = {\n    id: 'bs-leg',\n    modelName: 'leg',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-booking',\n      path: 'booking'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'rider',\n      path: 'rider'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsLegNode = bsLegNode;\n  const bsSegmentNode = {\n    id: 'bs-segment',\n    modelName: 'segment',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-leg',\n      path: 'leg'\n    }, {\n      type: 'hasMany',\n      nodeId: 'bs-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsSegmentNode = bsSegmentNode;\n  const bsStopNode = {\n    id: 'bs-stop',\n    modelName: 'segment-stop',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-segment',\n      path: 'segment'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsStopNode = bsStopNode;\n  const bsSubscriptionNode = {\n    id: 'bs-subscription',\n    modelName: 'subscription',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'bs-booking',\n      path: 'bookings'\n    }],\n    providerFilterKey: false,\n    isActive: false\n  };\n  _exports.bsSubscriptionNode = bsSubscriptionNode;\n  const ssoUserNode = {\n    id: 'perm-sso-user',\n    modelName: 'perm-sso-user',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'perm-sso-role',\n      path: 'ssoRoles'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoUserNode = ssoUserNode;\n  const ssoRoleNode = {\n    id: 'perm-sso-role',\n    modelName: 'perm-sso-role',\n    isActive: false,\n    links: [{\n      type: 'hasMany',\n      nodeId: 'perm-sso-user',\n      path: 'users'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoRoleNode = ssoRoleNode;\n  const avlmMessageNode = {\n    id: 'avlm-message',\n    modelName: 'avlm-canned-message',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'driver',\n      path: 'driver'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.avlmMessageNode = avlmMessageNode;\n  const alertNode = {\n    id: 'avlm-alert',\n    modelName: 'avlm-alert',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'timestamp',\n    rightTimeConstraint: 'timestamp'\n  };\n  _exports.alertNode = alertNode;\n  const activeContextNodes = [// vehicle graph\n  vehicleNode, // driver graph\n  driverNode, // zone graph,\n  zoneNode, // dispatch graph\n  dsRouteNode, dsRouteVehicleDriverNode, dsClusterNode, dsStopNode, // scheduling graph\n  ssTripNode, ssRouteNode, ssTripStopNode, // rider management graph\n  riderNode, riderExternalNode, // sign-on\n  ssoUserNode, ssoRoleNode, // booking service graph\n  bsBookingNode, bsLegNode, bsSegmentNode, bsStopNode, bsSubscriptionNode, // avlm graph\n  avlmMessageNode, // alerts\n  alertNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/dispatch/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zoneNode = _exports.vehicleNode = _exports.ssTripStopNode = _exports.ssTripNode = _exports.riderNode = _exports.mapContextNodes = _exports.mapContextModels = _exports.mapContextGraph = _exports.dsStopNode = _exports.dsRouteNode = _exports.driverNode = _exports.default = _exports.avlmMessageNode = _exports.alertNode = void 0;\n  // Rider Managament Related Nodes\n  const riderNode = {\n    id: 'rider',\n    modelName: 'rider',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    providerFilterKey: 'providers'\n  }; // Driver Related Nodes\n\n  _exports.riderNode = riderNode;\n  const driverNode = {\n    id: 'driver',\n    modelName: 'driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'latestVehicle'\n    }],\n    providerFilterKey: 'provider'\n  }; // Vehicle Related Nodes\n\n  _exports.driverNode = driverNode;\n  const vehicleNode = {\n    id: 'vehicle',\n    modelName: 'vehicle',\n    links: [],\n    providerFilterKey: 'provider'\n  }; // Zone Related Nodes\n\n  _exports.vehicleNode = vehicleNode;\n  const zoneNode = {\n    id: 'zone',\n    modelName: 'zone',\n    links: [],\n    providerFilterKey: false\n  }; // Dispatch Related Nodes\n  // used to traverse local data model\n\n  _exports.zoneNode = zoneNode;\n  const dsRouteNode = {\n    id: 'ds-route',\n    modelName: 'dispatch-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'assignedVehicle'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'orderedStopsWithGaragesAndBreaks'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip-stop',\n      path: 'tripStops'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.dsRouteNode = dsRouteNode;\n  const dsStopNode = {\n    id: 'ds-stop',\n    modelName: 'stop-point',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'trip.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.dsStopNode = dsStopNode;\n  const ssTripStopNode = {\n    id: 'ss-trip-stop',\n    modelName: 'trip-stop',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'dispatchRoute.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // Scheduling Related Nodes\n\n  _exports.ssTripStopNode = ssTripStopNode;\n  const ssTripNode = {\n    id: 'ss-trip',\n    modelName: 'trip',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ds-stop',\n      path: 'stopPoints'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssTripNode = ssTripNode;\n  const avlmMessageNode = {\n    id: 'avlm-message',\n    modelName: 'avlm-canned-message',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.avlmMessageNode = avlmMessageNode;\n  const alertNode = {\n    id: 'avlm-alert',\n    modelName: 'avlm-alert',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'timestamp',\n    rightTimeConstraint: 'timestamp'\n  };\n  _exports.alertNode = alertNode;\n  const mapContextNodes = [// vehicle graph\n  vehicleNode, // driver graph\n  driverNode, // zone graph,\n  zoneNode, // dispatch graph\n  dsRouteNode, dsStopNode, // scheduling graph\n  ssTripNode, ssTripStopNode, // rider management graph\n  riderNode, // avlm graph\n  avlmMessageNode, // alerts\n  alertNode];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  const mapContextModels = mapContextNodes.reduce((obj, node) => {\n    obj[node.modelName] = node;\n    return obj;\n  }, {});\n  _exports.mapContextModels = mapContextModels;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/permission/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ssoUserNode = _exports.ssoRoleNode = _exports.default = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  const ssoUserNode = {\n    id: 'perm-sso-user',\n    modelName: 'perm-sso-user',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'perm-sso-role',\n      path: 'ssoRoles'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoUserNode = ssoUserNode;\n  const ssoRoleNode = {\n    id: 'perm-sso-role',\n    modelName: 'perm-sso-role',\n    isActive: false,\n    links: [{\n      type: 'hasMany',\n      nodeId: 'perm-sso-user',\n      path: 'users'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoRoleNode = ssoRoleNode;\n  const activeContextNodes = [// sign-on\n  ssoUserNode, ssoRoleNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/permission/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.mapContextNodes = _exports.mapContextModels = _exports.mapContextGraph = _exports.default = void 0;\n  const mapContextNodes = [];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  const mapContextModels = mapContextNodes.reduce((obj, node) => {\n    obj[node.modelName] = node;\n    return obj;\n  }, {});\n  _exports.mapContextModels = mapContextModels;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/permission/permission\", [\"exports\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"adept-iq/classes/active-contexts/permission/graph\", \"adept-iq/classes/active-contexts/permission/map-graph\"], function (_exports, _lodash, _base, _graph, _mapGraph) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    permSsoUsers: null,\n    permSsoRoles: null,\n    workspaceData: Ember.computed.readOnly('workspaceContext._structuredWorkspace'),\n    permissionActiveData: Ember.computed('permSsoUsers.[]', 'permSsoRoles.[]', 'checkedItems.[]', function () {\n      const permSSoUsers = this.get('permSsoUsers') || [];\n      const permSsoRoles = this.get('permSsoRoles') || [];\n      const checkedItems = this.get('checkedItems') || [];\n      const permissionData = {\n        'perm-sso-user': permSSoUsers,\n        'perm-sso-role': permSsoRoles\n      };\n\n      const data = this._computeActiveContext(permissionData, checkedItems);\n\n      return data;\n    }),\n    consumedModelNames: Ember.computed('workspace.dashboardInstance.widgets.@each.models', function () {\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      return widgetModels;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n    },\n\n    destroy() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      if (this.get('setWidgetRecordsTask.isRunning')) {\n        this.get('setWidgetRecordsTask').cancelAll();\n      }\n    },\n\n    // Overwrite base clearCheckedItems\n    clearCheckedItems() {\n      const checkedItems = this.get('checkedItems');\n\n      for (const checkedItem of checkedItems) {\n        this.toggleHighLight(checkedItem.record, false);\n      }\n\n      this.set('checkedItems', []);\n      this.get('widget').deselectAllWidgets();\n      this.notifyPropertyChange('implicitData');\n      this.refreshAll();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/playback/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ssoUserNode = _exports.default = _exports.avlmVehicleNode = _exports.avlmVehicleEventNode = _exports.avlmRouteNode = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  // Vehicle Related Nodes\n  const avlmVehicleNode = {\n    id: 'avlm-vehicle',\n    modelName: 'avlm-vehicle',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-route',\n      path: 'latestRoute'\n    }],\n    isActive: false,\n    providerFilterKey: 'provider'\n  };\n  _exports.avlmVehicleNode = avlmVehicleNode;\n  const avlmRouteNode = {\n    id: 'avlm-route',\n    modelName: 'avlm-route',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'avlm-vehicle',\n      path: 'latestVehicle'\n    }],\n    isActive: false,\n    providerFilterKey: 'provider'\n  };\n  _exports.avlmRouteNode = avlmRouteNode;\n  const avlmVehicleEventNode = {\n    id: 'avlm-vehicle-event',\n    modelName: 'avlm-vehicle-event',\n    links: [],\n    isActive: false,\n    providerFilterKey: null\n  };\n  _exports.avlmVehicleEventNode = avlmVehicleEventNode;\n  const ssoUserNode = {\n    id: 'sso-user',\n    modelName: 'sso-user',\n    links: [],\n    providerFilterKey: false\n  };\n  _exports.ssoUserNode = ssoUserNode;\n  const activeContextNodes = [// sign-on\n  ssoUserNode, // avlm graph\n  avlmRouteNode, // vehicle graph\n  avlmVehicleNode, // vehicle event graph\n  avlmVehicleEventNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/playback/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.mapContextNodes = _exports.mapContextGraph = _exports.default = void 0;\n  const mapContextNodes = [];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/playback/playback\", [\"exports\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"adept-iq/classes/active-contexts/playback/graph\", \"adept-iq/classes/active-contexts/playback/map-graph\", \"adept-iq/utils/flattenData\", \"moment\"], function (_exports, _lodash, _base, _graph, _mapGraph, _flattenData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    radiusVehicles: null,\n    vehicleEvents: null,\n    selectedAddress: null,\n    selectedRadius: null,\n    selectedDateTimeRage: null,\n    selectedProvider: null,\n    selectedRoute: null,\n    selectedVehicle: null,\n    selectedRadiusVehicle: null,\n    activeTabModeId: null,\n    workspaceData: Ember.computed.readOnly('workspaceContext._structuredWorkspace'),\n    selectedProviders: Ember.computed.readOnly('workspaceContext._selectedProviders'),\n    consumedModelNames: Ember.computed('workspace.{dashboardInstance.widgets.[],reoptimizeModalModelName}', function () {\n      const reoptimizeModalModelName = this.get('workspace.reoptimizeModalModelName');\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      if (reoptimizeModalModelName) widgetModels.push(reoptimizeModalModelName);\n      return widgetModels;\n    }),\n    // structured data sets (grouped by model name)\n    structuredActiveData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeActiveContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredActiveData' + e);\n      }\n    }),\n    structuredImplicitData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeImplicitContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredImplicitData' + e);\n      }\n    }),\n    // flattened data sets for easy binding & interation\n    activeData: Ember.computed('structuredActiveData', function () {\n      const structuredActiveData = this.get('structuredActiveData');\n      return (0, _flattenData.flattenData)(structuredActiveData);\n    }),\n    activeVehicles: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (!workspaceData) return [];\n      return workspaceData['avlm-vehicle'];\n    }),\n    // map-context uses to construct layered records\n    structuredMapData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      const workspaceData = this.get('workspaceData') || {};\n      const checkedItems = this.get('checkedItems') || [];\n      return this._computeMapContext(workspaceData, checkedItems);\n    }),\n    // map-context binds to this\n    implicitData: Ember.computed('structuredMapData', function () {\n      const structuredMapData = this.get('structuredMapData');\n      return (0, _flattenData.flattenData)(structuredMapData);\n    }),\n    hashImplicitData: Ember.computed('structuredImplicitData', function () {\n      const structuredImplicitData = this.get('structuredImplicitData');\n      const hash = this.get('emptyImplicitHash');\n\n      _lodash.default.forOwn(structuredImplicitData, (value, key) => {\n        hash[key] = {};\n        value.forEach(v => {\n          const id = v.get('id');\n          hash[key][id] = true;\n        });\n      });\n\n      return hash;\n    }),\n    // bound to computed property to implicitMarkers\n    implicitStops: Ember.computed('implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      return implicitData.filterBy('modelName', 'avlm-stop-point').mapBy('record');\n    }),\n    // bound to computed property to implicitMarkers\n    implicitVehicles: Ember.computed('workspaceData', 'implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      const vehicles = implicitData.filterBy('modelName', 'avlm-vehicle').mapBy('record');\n      const implicitVehicles = vehicles;\n      return implicitVehicles;\n    }),\n    // bind implicitContext property to boundary\n    implicitMarkers: Ember.computed('implicitVehicles.[]', 'implicitStops.[]', function () {\n      const implicitStops = this.get('implicitStops');\n      const implicitVehicles = this.get('implicitVehicles');\n      return implicitStops.concat(implicitVehicles);\n    }),\n\n    tripActiveContext() {\n      return this.get('checkedItems').some(record => {\n        return record.modelName === 'avlm-trip';\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n      this.set('radiusVehicles', []);\n      this.set('vehicleEvents', []);\n      this.set('activeTabModeId', 'byVehicle');\n      this.set('selectedDateTimeRage', {\n        today: (0, _moment.default)().hours(0).minutes(0).format('YYYY-MM-DD'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString()\n      });\n    },\n\n    restoreSearchContent() {\n      const jsonStr = localStorage.getItem('playback-info');\n\n      if (jsonStr) {\n        const json = JSON.parse(jsonStr);\n        this.set('selectedDateTimeRage', json.selectedDateTimeRage);\n        localStorage.removeItem('playback-info');\n      } else {\n        this.set('selectedDateTimeRage', {\n          today: (0, _moment.default)().hours(0).minutes(0).format('YYYY-MM-DD'),\n          date: null,\n          starttime: null,\n          endtime: null,\n          startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n          startofday: (0, _moment.default)().startOf('day').toISOString(),\n          endofday: (0, _moment.default)().endOf('day').toISOString()\n        });\n      }\n\n      const address = this.get('store').peekRecord('address', 'playback-address');\n\n      if (address) {\n        address.set('id', null);\n        this.set('selectedAddress', address);\n      }\n    },\n\n    saveSearchContent() {\n      const selectedDateTimeRage = this.get('selectedDateTimeRage');\n      const json = {\n        selectedDateTimeRage\n      };\n      localStorage.setItem('playback-info', JSON.stringify(json));\n\n      if (this.get('selectedAddress')) {\n        const address = this.get('selectedAddress');\n        address.set('id', 'playback-address');\n      }\n    },\n\n    destroy() {\n      this.saveSearchContent();\n\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/reconcile/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.dwhTripNode = _exports.dwhStopPointNode = _exports.dwhRouteNode = _exports.default = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  const dwhRouteNode = {\n    id: 'dwh-route',\n    modelName: 'dwh-route',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'dwh-trip',\n      path: 'dwhTrips'\n    }, {\n      type: 'hasMany',\n      nodeId: 'dwh-stop-point',\n      path: 'dwhStops'\n    }],\n    providerFilterKey: false\n  };\n  _exports.dwhRouteNode = dwhRouteNode;\n  const dwhTripNode = {\n    id: 'dwh-trip',\n    modelName: 'dwh-trip',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'dwh-stop-point',\n      path: 'dwhStops'\n    }],\n    providerFilterKey: false\n  };\n  _exports.dwhTripNode = dwhTripNode;\n  const dwhStopPointNode = {\n    id: 'dwh-stop-point',\n    modelName: 'dwh-stop-point',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'dwh-route',\n      path: 'dwhRoute'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'dwh-trip',\n      path: 'dwhTrip'\n    }],\n    providerFilterKey: false\n  };\n  _exports.dwhStopPointNode = dwhStopPointNode;\n  const activeContextNodes = [dwhRouteNode, dwhTripNode, dwhStopPointNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/reconcile/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.mapContextNodes = _exports.mapContextModels = _exports.mapContextGraph = _exports.default = void 0;\n  const mapContextNodes = [];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  const mapContextModels = mapContextNodes.reduce((obj, node) => {\n    obj[node.modelName] = node;\n    return obj;\n  }, {});\n  _exports.mapContextModels = mapContextModels;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/reconcile/reconcile\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"adept-iq/classes/active-contexts/reconcile/graph\", \"adept-iq/classes/active-contexts/reconcile/map-graph\", \"adept-iq/utils/flattenData\"], function (_exports, _emberConcurrency, _lodash, _base, _graph, _mapGraph, _flattenData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    consumedModelNames: Ember.computed('workspace.dashboardInstance.widgets.@each.models', function () {\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      return widgetModels;\n    }),\n    // flattened data sets for easy binding & interation\n    activeData: Ember.computed('structuredActiveData', function () {\n      const structuredActiveData = this.get('structuredActiveData');\n      return (0, _flattenData.flattenData)(structuredActiveData);\n    }),\n\n    getActiveData() {\n      if (this.get('unloadTask.isRunning')) {\n        return {\n          'dwh-route': [],\n          'dwh-trip': [],\n          'dwh-stop-point': []\n        };\n      }\n\n      const store = this.get('store');\n      const checkedItems = this.get('checkedItems');\n      const workspaceData = {\n        'dwh-route': store.peekAll('dwh-route').toArray(),\n        'dwh-trip': store.peekAll('dwh-trip').toArray(),\n        'dwh-stop-point': store.peekAll('dwh-stop-point').toArray()\n      };\n      return this._computeActiveContext(workspaceData, checkedItems);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n    },\n\n    destroy() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      if (this.get('setWidgetRecordsTask.isRunning')) {\n        this.get('setWidgetRecordsTask').cancelAll();\n      }\n    },\n\n    // Overwrite base clearCheckedItems\n    clearCheckedItems() {\n      let refreshAfterClear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      const checkedItems = this.get('checkedItems');\n\n      for (const checkedItem of checkedItems) {\n        this.toggleHighLight(checkedItem.record, false);\n      }\n\n      this.set('checkedItems', []);\n\n      if (refreshAfterClear) {\n        this.refreshAll();\n      }\n    },\n\n    async clearAndRefreshAll() {\n      await this.get('unloadTask').perform();\n    },\n\n    unloadTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const checkedItems = this.get('checkedItems');\n      const sleepTime = 500;\n\n      if (!Ember.isEmpty(checkedItems)) {\n        this.clearCheckedItems(false);\n      }\n\n      store.peekAll('dwh-stop-point').toArray().forEach(record => {\n        record.transitionTo('deleted.saved');\n      });\n      store.peekAll('dwh-trip').toArray().forEach(record => {\n        record.transitionTo('deleted.saved');\n      });\n      store.peekAll('dwh-route').toArray().forEach(record => {\n        record.transitionTo('deleted.saved');\n      });\n      store.unloadAll('dwh-stop-point');\n      store.unloadAll('dwh-trip');\n      store.unloadAll('dwh-route');\n      this.clearAll();\n      yield (0, _emberConcurrency.timeout)(sleepTime);\n      this.refreshAll();\n    }).keepLatest()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/schedule/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zoneNode = _exports.vehicleNode = _exports.ssoUserNode = _exports.ssoRoleNode = _exports.ssTripStopNode = _exports.ssTripNode = _exports.ssStopNode = _exports.ssRouteNode = _exports.ssRouteBreakNode = _exports.riderNode = _exports.driverNode = _exports.default = _exports.bsSubscriptionNode = _exports.bsStopNode = _exports.bsSegmentNode = _exports.bsLegNode = _exports.bsBookingNode = _exports.activeContextNodes = _exports.activeContextGraph = void 0;\n  // Rider Managament Related Nodes\n  const riderNode = {\n    id: 'rider',\n    modelName: 'rider',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    providerFilterKey: 'providers',\n    scheduleFilterKey: 'schedules'\n  }; // Driver Related Nodes\n\n  _exports.riderNode = riderNode;\n  const driverNode = {\n    id: 'driver',\n    modelName: 'driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'vehicle'\n    }],\n    providerFilterKey: 'provider'\n  }; // Vehicle Related Nodes\n\n  _exports.driverNode = driverNode;\n  const vehicleNode = {\n    id: 'vehicle',\n    modelName: 'vehicle',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-route',\n      path: 'routes'\n    }, {\n      type: 'hasMany',\n      nodeId: 'driver',\n      path: 'drivers'\n    }],\n    providerFilterKey: 'provider'\n  }; // Zone Related Nodes\n\n  _exports.vehicleNode = vehicleNode;\n  const zoneNode = {\n    id: 'zone',\n    modelName: 'zone',\n    links: [],\n    providerFilterKey: false\n  }; // Scheduling Related Nodes\n\n  _exports.zoneNode = zoneNode;\n  const ssRouteNode = {\n    id: 'ss-route',\n    modelName: 'route',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-route-break',\n      path: 'routeBreaks'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-stop',\n      path: 'stopPoints'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    scheduleFilterKey: 'schedule',\n    leftTimeConstraint: 'plannedStartTime',\n    rightTimeConstraint: 'plannedEndTime'\n  };\n  _exports.ssRouteNode = ssRouteNode;\n  const ssTripNode = {\n    id: 'ss-trip',\n    modelName: 'trip',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'bs-segment',\n      path: 'segment'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-trip-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    scheduleFilterKey: 'schedule',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssTripNode = ssTripNode;\n  const ssTripStopNode = {\n    id: 'ss-trip-stop',\n    modelName: 'trip-stop',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ss-trip',\n      path: 'trip'\n    }],\n    isActive: true,\n    providerFilterKey: 'trip.provider',\n    scheduleFilterKey: 'trip.schedule',\n    leftTimeConstraint: 'trip.routeTripStartTime',\n    rightTimeConstraint: 'trip.routeTripEndTime'\n  };\n  _exports.ssTripStopNode = ssTripStopNode;\n  const ssRouteBreakNode = {\n    id: 'ss-route-break',\n    modelName: 'route-break',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'ss-route',\n      path: 'route'\n    }],\n    isActive: true,\n    providerFilterKey: 'route.provider',\n    scheduleFilterKey: 'route.schedule',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssRouteBreakNode = ssRouteBreakNode;\n  const ssStopNode = {\n    id: 'ss-stop',\n    modelName: 'stop-point',\n    links: [],\n    isActive: true,\n    showUnAssignedProvider: true,\n    providerFilterKey: 'computedProvider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  }; // booking service related nodes\n\n  _exports.ssStopNode = ssStopNode;\n  const bsBookingNode = {\n    id: 'bs-booking',\n    modelName: 'booking',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-subscription',\n      path: 'subscription'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsBookingNode = bsBookingNode;\n  const bsLegNode = {\n    id: 'bs-leg',\n    modelName: 'leg',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-booking',\n      path: 'booking'\n    }, {\n      type: 'belongsTo',\n      nodeId: 'rider',\n      path: 'rider'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsLegNode = bsLegNode;\n  const bsSegmentNode = {\n    id: 'bs-segment',\n    modelName: 'segment',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'bs-leg',\n      path: 'leg'\n    }, {\n      type: 'hasMany',\n      nodeId: 'bs-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsSegmentNode = bsSegmentNode;\n  const bsStopNode = {\n    id: 'bs-stop',\n    modelName: 'segment-stop',\n    links: [],\n    isActive: true,\n    providerFilterKey: false,\n    leftTimeConstraint: 'tripStartTime',\n    rightTimeConstraint: 'tripEndTime'\n  };\n  _exports.bsStopNode = bsStopNode;\n  const bsSubscriptionNode = {\n    id: 'bs-subscription',\n    modelName: 'subscription',\n    links: [],\n    providerFilterKey: false,\n    isActive: false\n  };\n  _exports.bsSubscriptionNode = bsSubscriptionNode;\n  const ssoUserNode = {\n    id: 'sso-user',\n    modelName: 'sso-user',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'sso-role',\n      path: 'roles'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoUserNode = ssoUserNode;\n  const ssoRoleNode = {\n    id: 'sso-role',\n    modelName: 'sso-role',\n    isActive: false,\n    links: [{\n      type: 'hasMany',\n      nodeId: 'sso-user',\n      path: 'users'\n    }],\n    providerFilterKey: false\n  };\n  _exports.ssoRoleNode = ssoRoleNode;\n  const activeContextNodes = [// vehicle graph\n  vehicleNode, // driver graph\n  driverNode, // zone graph,\n  zoneNode, // scheduling graph\n  ssTripNode, ssRouteNode, ssRouteBreakNode, ssTripStopNode, ssStopNode, // rider management graph\n  riderNode, // sign-on\n  ssoUserNode, ssoRoleNode, // booking service graph\n  bsBookingNode, bsLegNode, bsSegmentNode, bsStopNode, bsSubscriptionNode];\n  _exports.activeContextNodes = activeContextNodes;\n  const activeContextGraph = activeContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.activeContextGraph = activeContextGraph;\n  var _default = activeContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/schedule/map-graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zoneNode = _exports.vehicleNode = _exports.ssTripStopNode = _exports.ssTripNode = _exports.ssStopNode = _exports.ssRouteNode = _exports.ssRouteBreakNode = _exports.riderNode = _exports.mapContextNodes = _exports.mapContextModels = _exports.mapContextGraph = _exports.driverNode = _exports.default = void 0;\n  // Rider Managament Related Nodes\n  const riderNode = {\n    id: 'rider',\n    modelName: 'rider',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip',\n      path: 'trips'\n    }],\n    providerFilterKey: 'providers'\n  }; // Driver Related Nodes\n\n  _exports.riderNode = riderNode;\n  const driverNode = {\n    id: 'driver',\n    modelName: 'driver',\n    links: [{\n      type: 'belongsTo',\n      nodeId: 'vehicle',\n      path: 'latestVehicle'\n    }],\n    providerFilterKey: 'provider'\n  }; // Vehicle Related Nodes\n\n  _exports.driverNode = driverNode;\n  const vehicleNode = {\n    id: 'vehicle',\n    modelName: 'vehicle',\n    links: [],\n    providerFilterKey: 'provider'\n  }; // Zone Related Nodes\n\n  _exports.vehicleNode = vehicleNode;\n  const zoneNode = {\n    id: 'zone',\n    modelName: 'zone',\n    links: [],\n    providerFilterKey: false\n  }; // Scheduling Related Nodes\n\n  _exports.zoneNode = zoneNode;\n  const ssRouteNode = {\n    id: 'ss-route',\n    modelName: 'route',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip-stop',\n      path: 'tripStops'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-route-break',\n      path: 'routeBreaks'\n    }, {\n      type: 'hasMany',\n      nodeId: 'ss-stop',\n      path: 'stopPoints'\n    }],\n    isActive: true,\n    providerFilterKey: 'provider',\n    leftTimeConstraint: 'plannedStartTime',\n    rightTimeConstraint: 'plannedEndTime'\n  };\n  _exports.ssRouteNode = ssRouteNode;\n  const ssTripNode = {\n    id: 'ss-trip',\n    modelName: 'trip',\n    links: [{\n      type: 'hasMany',\n      nodeId: 'ss-trip-stop',\n      path: 'stops'\n    }],\n    isActive: true,\n    providerFilterKey: 'pickStopPoint.dispatchRoute.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssTripNode = ssTripNode;\n  const ssTripStopNode = {\n    id: 'ss-trip-stop',\n    modelName: 'trip-stop',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'dispatchRoute.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssTripStopNode = ssTripStopNode;\n  const ssRouteBreakNode = {\n    id: 'ss-route-break',\n    modelName: 'route-break',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'dispatchRoute.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssRouteBreakNode = ssRouteBreakNode;\n  const ssStopNode = {\n    id: 'ss-stop',\n    modelName: 'stop-point',\n    links: [],\n    isActive: true,\n    providerFilterKey: 'trip.provider',\n    leftTimeConstraint: 'routeTripStartTime',\n    rightTimeConstraint: 'routeTripEndTime'\n  };\n  _exports.ssStopNode = ssStopNode;\n  const mapContextNodes = [// vehicle graph\n  vehicleNode, // driver graph\n  driverNode, // zone graph,\n  zoneNode, // scheduling graph\n  ssRouteNode, ssTripStopNode, ssTripNode, ssRouteBreakNode, ssStopNode, // rider management graph\n  riderNode];\n  _exports.mapContextNodes = mapContextNodes;\n  const mapContextGraph = mapContextNodes.reduce((obj, node) => {\n    obj[node.id] = node;\n    return obj;\n  }, {});\n  _exports.mapContextGraph = mapContextGraph;\n  const mapContextModels = mapContextNodes.reduce((obj, node) => {\n    obj[node.modelName] = node;\n    return obj;\n  }, {});\n  _exports.mapContextModels = mapContextModels;\n  var _default = mapContextGraph;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/active-contexts/schedule/schedule\", [\"exports\", \"lodash\", \"adept-iq/classes/active-contexts/base/base\", \"ember-concurrency\", \"adept-iq/utils/remove-focus\", \"adept-iq/config/environment\", \"adept-iq/classes/active-contexts/schedule/graph\", \"adept-iq/classes/active-contexts/schedule/map-graph\", \"adept-iq/utils/flattenData\"], function (_exports, _lodash, _base, _emberConcurrency, _removeFocus, _environment, _graph, _mapGraph, _flattenData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // overridden values based on extending sub classes\n    // computed.readOnly('workspaceContext._structuredWorkspace')\n    graph: null,\n    nodes: null,\n    emptyImplicitHash: null,\n    workspaceData: Ember.computed.readOnly('workspaceContext._structuredWorkspace'),\n    consumedModelNames: Ember.computed('workspace.dashboardInstance.widgets.[]', function () {\n      const widgets = this.get('workspace.dashboardInstance.widgets');\n\n      const widgetModels = _lodash.default.reduce(widgets, (acc, widget) => _lodash.default.union(acc, widget.get('models')), []);\n\n      return widgetModels;\n    }),\n    // structured data sets (grouped by model name)\n    structuredActiveData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeActiveContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredActiveData' + e);\n      }\n    }),\n    structuredImplicitData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      try {\n        const workspaceData = this.get('workspaceData') || {};\n        const checkedItems = this.get('checkedItems') || [];\n        return this._computeImplicitContext(workspaceData, checkedItems);\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('Exception occured while refreshing Workspace Data in structuredImplicitData' + e);\n      }\n    }),\n    // flattened data sets for easy binding & interation\n    activeData: Ember.computed('structuredActiveData', function () {\n      const structuredActiveData = this.get('structuredActiveData');\n      return (0, _flattenData.flattenData)(structuredActiveData);\n    }),\n    activeVehicles: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (!workspaceData) return [];\n      return workspaceData.vehicle;\n    }),\n    // map-context uses to construct layered records\n    structuredMapData: Ember.computed('workspaceData', 'checkedItems.[]', function () {\n      const workspaceData = this.get('workspaceData') || {};\n      const checkedItems = this.get('checkedItems') || [];\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      if (!_environment.default.APP.test && !isTraversalEnabled) return [];\n      return this._computeMapContext(workspaceData, checkedItems);\n    }),\n    // map-context binds to this\n    implicitData: Ember.computed('structuredMapData', function () {\n      const structuredMapData = this.get('structuredMapData') || {};\n      return (0, _flattenData.flattenData)(structuredMapData);\n    }),\n    hashImplicitData: Ember.computed('structuredImplicitData', function () {\n      const structuredImplicitData = this.get('structuredImplicitData') || {};\n      const hash = this.get('emptyImplicitHash');\n\n      _lodash.default.forOwn(structuredImplicitData, (value, key) => {\n        hash[key] = {};\n        value.forEach(v => {\n          const id = v.get('id');\n          hash[key][id] = true;\n        });\n      });\n\n      return hash;\n    }),\n    // bound to computed property to implicitMarkers\n    implicitStops: Ember.computed('implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      const stops = implicitData.filter(data => data.modelName === 'trip-stop' || data.modelName === 'route-break').mapBy('record');\n      return stops;\n    }),\n    // bound to computed property to implicitMarkers\n    implicitVehicles: Ember.computed('workspaceData', 'implicitData', function () {\n      const implicitData = Ember.makeArray(this.get('implicitData'));\n      const vehicles = implicitData.filterBy('modelName', 'vehicle').mapBy('record');\n      const implicitVehicles = vehicles;\n      return implicitVehicles;\n    }),\n    // bind implicitContext property to boundary\n    implicitMarkers: Ember.computed('implicitVehicles.[]', 'implicitStops.[]', function () {\n      const implicitStops = this.get('implicitStops');\n      const implicitVehicles = this.get('implicitVehicles');\n      return implicitStops.concat(implicitVehicles);\n    }),\n\n    tripActiveContext() {\n      return this.get('checkedItems').some(record => {\n        return record.modelName === 'trip';\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('checkedItems', []);\n      this.set('refreshedModelNames', []);\n      this.set('mapGraph', _mapGraph.mapContextGraph);\n      this.set('mapNodes', _mapGraph.mapContextNodes);\n      this.set('graph', _graph.activeContextGraph);\n      this.set('nodes', _graph.activeContextNodes);\n\n      const nodes = _graph.activeContextNodes.reduce((acu, node) => {\n        acu[node.modelName] = {};\n        return acu;\n      }, {});\n\n      this.set('emptyImplicitHash', nodes);\n      this.startRefreshQueue();\n    },\n\n    destroy() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      if (this.get('setWidgetRecordsTask.isRunning')) {\n        this.get('setWidgetRecordsTask').cancelAll();\n      }\n    },\n\n    // Overwrite base clearCheckedItems\n    clearCheckedItems() {\n      let modelName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const modelNames = Array.isArray(modelName) ? modelName : [modelName];\n      const checkedItems = this.get('checkedItems');\n\n      for (const checkedItem of checkedItems) {\n        if (Ember.isNone(modelName) || modelNames.includes(checkedItem.modelName)) {\n          this.toggleHighLight(checkedItem.record, false);\n        }\n      }\n\n      if (Ember.isNone(modelName)) {\n        this.set('checkedItems', []);\n      } else {\n        const updatedCheckedItems = checkedItems.filter(checkedItem => {\n          return !modelName.includes(checkedItem.modelName);\n        });\n        this.set('checkedItems', updatedCheckedItems);\n      }\n\n      const currentCheckedItems = this.get('checkedItems'); //if any of the widget records are selected,we dont need to deselect all widgets\n\n      if (!currentCheckedItems.length) {\n        this.get('widget').deselectAllWidgets();\n      }\n\n      this.notifyPropertyChange('implicitData');\n      this.refreshAll();\n    },\n\n    setWidgetRecordsTask: (0, _emberConcurrency.task)(function* (widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, isNewCheck) {\n      this.set('isTraversalEnabled', isTraversalEnabled);\n      yield this.setWidgetRecords(widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, isNewCheck);\n    }).enqueue(),\n\n    async setWidgetRecords(widgetRecords, widgetModelName, coreModelArgName, widgetInstanceId, checked, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, isNewCheck) {\n      let checkedItems = this.get('checkedItems');\n      const recordsToTraversal = [];\n      const widgetId = widgetInstanceId.split('_')[1];\n      (0, _removeFocus.cursorWait)();\n\n      try {\n        const store = this.get('store');\n\n        for (const widgetRecord of widgetRecords) {\n          const coreModelName = this.getCoreModelNameByWidgetRecord(coreModelArgName, widgetRecord);\n\n          if (checked) {\n            let storeRecord = store.peekRecord(coreModelName, widgetRecord.id); // call populator if route exist but tripStops does not\n\n            if (Ember.isNone(storeRecord) || Ember.isPresent(storeRecord) && coreModelName === 'route' && _lodash.default.get(storeRecord.get('tripStops'), 'length', 0) === 0) {\n              await this.get('coreEntityPopulator').populateEntityGraph(widgetModelName, widgetRecord, {});\n              storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n            }\n\n            this.get('workspaceContext').manualReloadContext();\n\n            if (storeRecord) {\n              if (coreModelName === 'avlm-alert') {\n                const vehicleRecord = store.peekRecord('avlm-vehicle', widgetRecord.vehicleId);\n                this.toggleHighLight(vehicleRecord, checked);\n              }\n\n              if (coreModelName === 'avlm-trip') {\n                const pickStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.pickStopPointId);\n                const dropStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.dropStopPointId);\n                this.toggleHighLight(pickStopPointRecord, checked);\n                this.toggleHighLight(dropStopPointRecord, checked);\n              }\n\n              this.toggleHighLight(storeRecord, checked);\n              const checkedWidgetRecords = checkedItems.filter(item => item.modelName === coreModelName); //filtering out checkedItems, if the storedRecord is already present in checkedItems\n\n              const foundItem = checkedItems.find(item => item.modelName === coreModelName && storeRecord && item.record.id === storeRecord.id && widgetId === item.widgetId); // a newly added row check or an updated row that's already been checked before\n              // in a different widget of same type\n\n              if (!foundItem && isNewCheck) {\n                if (coreModelName === 'trip' || coreModelName === 'trip-stop' || coreModelName === 'route-break') {\n                  const selectedRouteSet = new Set();\n                  checkedWidgetRecords.forEach(data => {\n                    const routeId = data.record.get('route.id');\n                    if (routeId) selectedRouteSet.add(routeId);\n                  });\n\n                  if (!isTraversalEnabled || selectedRouteSet.size < selectedRowLimit && checkedWidgetRecords.length < maxLimitRouteAssociation) {\n                    checkedItems.push({\n                      modelName: coreModelName,\n                      record: storeRecord,\n                      widgetId\n                    });\n                    recordsToTraversal.push(widgetRecord);\n                  }\n                } else if (!isTraversalEnabled || checkedWidgetRecords.length < selectedRowLimit) {\n                  checkedItems.push({\n                    modelName: coreModelName,\n                    record: storeRecord,\n                    widgetId\n                  });\n                  recordsToTraversal.push(widgetRecord);\n                }\n              } else {\n                // Even it is not a new check, we need to update its data.\n                recordsToTraversal.push(widgetRecord);\n              }\n            }\n          } else {\n            const storeRecord = store.peekRecord(coreModelName, widgetRecord.id);\n\n            if (storeRecord) {\n              if (coreModelName === 'avlm-alert') {\n                const vehicleRecord = store.peekRecord('avlm-vehicle', widgetRecord.vehicleId);\n                this.toggleHighLight(vehicleRecord, checked);\n              }\n\n              if (coreModelName === 'avlm-trip') {\n                const pickStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.pickStopPointId);\n                const dropStopPointRecord = store.peekRecord('avlm-stop-point', widgetRecord.dropStopPointId);\n                this.toggleHighLight(pickStopPointRecord, checked);\n                this.toggleHighLight(dropStopPointRecord, checked);\n              }\n\n              this.toggleHighLight(storeRecord, checked);\n            }\n\n            checkedItems = checkedItems.filter(data => !(data.modelName === coreModelName && storeRecord && data.record.id === storeRecord.id && widgetId === data.widgetId));\n            recordsToTraversal.push(widgetRecord);\n          }\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error('Error occurred while populating data for the selected widget-record ' + e);\n      }\n\n      this.set('checkedItems', checkedItems.concat([])); // add traversal if traversal flag is turned on for this widget\n\n      if (checked && isTraversalEnabled) {\n        this.get('widget').addTraversalFilter(widgetInstanceId, widgetModelName, recordsToTraversal);\n      } else {\n        this.get('widget').removeTraversalFilter(widgetInstanceId, widgetModelName, recordsToTraversal);\n      }\n\n      this.get('widget').updateUserSelection();\n      (0, _removeFocus.cursorDefault)();\n    },\n\n    setWidgetTraversalTask: (0, _emberConcurrency.task)(function* (widgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled) {\n      yield this.setWidgetTraversal(widgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled);\n    }).enqueue(),\n\n    async setWidgetTraversal(widgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled) {\n      if (isTraversalEnabled) {\n        this.get('widget').addTraversalFilter(widgetInstanceId, widgetModelName, widgetRecords);\n      } else {\n        this.get('widget').removeTraversalFilter(widgetInstanceId, widgetModelName, widgetRecords);\n      }\n    },\n\n    getCoreModelNameByWidgetRecord(coreModelName, widgetRecord) {\n      if (coreModelName === 'avlm-canned-message' && widgetRecord.priority === 'E') {\n        return 'avlm-emergency-message';\n      }\n\n      if (Array.isArray(coreModelName)) {\n        if (widgetRecord.type === 'break') {\n          return 'route-break';\n        } else if (widgetRecord.type === 'pick' || widgetRecord.type === 'drop') {\n          return 'trip-stop';\n        }\n\n        return 'stop-point';\n      }\n\n      return coreModelName;\n    },\n\n    getCoreModelNameByStoreRecord(coreModelName, storeRecord) {\n      // The storeRecord not match the coreModelName\n      if (coreModelName === 'avlm-canned-message' && storeRecord.modelName === 'avlm-emergency-message') {\n        return 'avlm-emergency-message';\n      }\n\n      return coreModelName;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/dashboard-instance\", [\"exports\", \"lodash\", \"adept-iq/classes/widget\", \"md5\", \"adept-iq/models/dashboard\"], function (_exports, _lodash, _widget, _md, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SCHEMA_VERSION = 1;\n  const DashboardInstance = Ember.Object.extend({\n    id: null,\n    name: null,\n    userId: null,\n    model: null,\n    // underlying ember-data model\n    startDate: null,\n    endDate: null,\n    referenceDate: null,\n    isDirty: false,\n    // TODO: implement\n    _mapState: null,\n    // POJO of map state\n    _widgets: null,\n    // array of Widget objects\n    _widgetStates: null,\n    _widgetsSavepoint: null,\n    // for rollback\n    mapState: Ember.computed('_mapState', {\n      get() {\n        let mapState = this.get('_mapState');\n\n        if (!mapState) {\n          mapState = {};\n          /*eslint-disable */\n\n          this.set('_mapState', mapState);\n          /*eslint-enable */\n        }\n\n        return mapState;\n      },\n\n      set(key, value) {\n        if (!value) {\n          /*eslint-disable */\n          value = {};\n          /*eslint-enable */\n        }\n\n        this.set('_mapState', value);\n        return value;\n      }\n\n    }),\n    widgets: Ember.computed('_widgets', {\n      get() {\n        let widgets = this.get('_widgets');\n\n        if (!widgets) {\n          widgets = [];\n          /*eslint-disable */\n\n          this.set('_widgets', widgets);\n          /*eslint-enable */\n        }\n\n        return widgets;\n      },\n\n      set(key, value) {\n        if (!value) {\n          /*eslint-disable */\n          value = [];\n          /*eslint-enable */\n        }\n\n        this.set('_widgets', value);\n        return value;\n      }\n\n    }),\n    widgetStates: Ember.computed('_widgetStates', {\n      get() {\n        let widgetStates = this.get('_widgetStates');\n\n        if (!widgetStates || Ember.isEmpty(widgetStates)) {\n          widgetStates = {};\n          /*eslint-disable */\n\n          this.set('_widgetStates', widgetStates);\n          /*eslint-enable */\n        }\n\n        return widgetStates;\n      },\n\n      set(key, value) {\n        if (!value || Ember.isEmpty(value)) {\n          /*eslint-disable */\n          value = {};\n          /*eslint-enable */\n        }\n\n        this.set('_widgetStates', value);\n        return value;\n      }\n\n    }),\n    height: Ember.computed('widgets.@each.{y,height}', function () {\n      return this.get('widgets').reduce((max, widget) => {\n        const y = widget.get('y');\n        const height = widget.get('height');\n        return Math.max(max, y + height);\n      }, 0);\n    }),\n    width: Ember.computed('widgets.@each.{x,width}', function () {\n      return this.get('widgets').reduce((max, widget) => {\n        const x = widget.get('x');\n        const width = widget.get('width');\n        return Math.max(max, x + width);\n      }, 0);\n    }),\n\n    // TODO: this should live in map widget state\n    mergeMapState() {\n      let changes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const mapState = this.get('mapState');\n\n      const mergedState = _lodash.default.merge({}, mapState, changes);\n\n      this.set('mapState', mergedState); // TODO: check if this is necessary\n\n      this.notifyPropertyChange('mapState');\n      this.set('hasDirtyWidgets', true);\n    },\n\n    makeWidgetsSavepoint() {\n      const widgetsSavepoint = this.get('widgets').map(widget => widget.serialize());\n      this.set('_widgetsSavepoint', widgetsSavepoint);\n    },\n\n    rollbackWidgets() {\n      const widgetsSavepoint = this.get('_widgetsSavepoint');\n\n      if (!widgetsSavepoint) {\n        /*eslint-disable */\n        throw 'no dashboard savepoint; must call makeWidgetsSavepoint() first';\n        /*eslint-enable */\n      }\n\n      this.get('widgets').clear();\n      widgetsSavepoint.forEach(_ref => {\n        let {\n          attributes\n        } = _ref;\n        this.addWidget(attributes);\n      });\n    },\n\n    addWidget(options) {\n      const widget = this.makeWidget(options);\n      this.get('widgets').pushObject(widget);\n    },\n\n    removeWidget(widget) {\n      this.get('widgets').removeObject(widget);\n    },\n\n    makeWidget(options) {\n      const extendedOptions = Object.assign({}, options, {\n        dashboard: this\n      });\n\n      const widget = _widget.default.create(extendedOptions);\n\n      return widget;\n    },\n\n    serialize() {\n      const attributes = {\n        id: this.get('id'),\n        name: this.get('name'),\n        role: this.get('role'),\n        startDate: this.get('startDate').toISOString(),\n        endDate: this.get('endDate').toISOString(),\n        referenceDate: this.get('referenceDate').toISOString(),\n        widgets: this.get('widgets').map(widget => widget.serialize().attributes),\n        mapState: _lodash.default.cloneDeep(this.get('mapState')),\n        widgetStates: _lodash.default.cloneDeep(this.get('widgetStates'))\n      };\n      const serialized = {\n        schemaVersion: SCHEMA_VERSION,\n        timestamp: new Date().getTime(),\n        hash: (0, _md.default)(JSON.stringify(attributes)),\n        attributes\n      };\n      return serialized;\n    }\n\n  });\n  DashboardInstance.reopenClass({\n    deserialize(serialized) {\n      // for legacy, assume missing schema version means 1\n      const {\n        schemaVersion = 1\n      } = serialized;\n\n      if (schemaVersion !== 1) {\n        /*eslint-disable */\n        throw 'unknown schema version';\n        /*eslint-enable */\n      }\n\n      const {\n        id,\n        name,\n        role,\n        startDate,\n        endDate,\n        referenceDate,\n        mapState,\n        widgets,\n        widgetStates\n      } = serialized.attributes;\n      const dashboardInstance = DashboardInstance.create({\n        id,\n        name,\n        role,\n        startDate: new Date(startDate),\n        endDate: new Date(endDate),\n        referenceDate: new Date(referenceDate),\n        mapState: _lodash.default.cloneDeep(mapState),\n        widgetStates: _lodash.default.cloneDeep(widgetStates)\n      }); //In schedule workspace  should not show message and alert widgets\n\n      const filteredWidgets = role === _dashboard.SCHEDULE_ROLENAME ? widgets.filter(widget => !_dashboard.SCHEDULE_WORSPACE_RESTRICT_WIDGETS.includes(widget.typeId)) : widgets;\n      dashboardInstance.set('widgets', filteredWidgets.map(attributes => {\n        const widget = _widget.default.deserialize({\n          schemaVersion,\n          attributes\n        });\n\n        widget.set('dashboard', dashboardInstance);\n        return widget;\n      }));\n      return dashboardInstance;\n    }\n\n  });\n  var _default = DashboardInstance;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/base-table\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend({\n    cache: null,\n    nodes: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('cache', {});\n      this.set('nodes', []);\n    },\n\n    destroy() {\n      this.clear();\n      this.purgeCache();\n\n      this._super(...arguments);\n    },\n\n    clear() {\n      this.join([]);\n    },\n\n    // override initialize, enter, update, and exit with custom behaviour\n    initialize: data => data,\n\n    enter() {},\n\n    update() {},\n\n    exit() {},\n\n    release() {},\n\n    keyForNode: node => {\n      const key = Ember.get(node, 'id') || Ember.guidFor(node);\n      return key;\n    },\n    keyForData: data => {\n      const key = Ember.get(data, 'id') || Ember.guidFor(data);\n      return key;\n    },\n\n    join(collection\n    /*, opts */\n    ) {\n      const cache = this.get('cache');\n      const nodes = this.get('nodes'); // build lookup tables\n\n      const wasInNodes = {};\n\n      for (let i = 0; i < nodes.length; i++) {\n        wasInNodes[this.keyForNode(nodes[i])] = true;\n      }\n\n      const isInCollection = {};\n\n      for (let i = 0; i < collection.length; i++) {\n        isInCollection[this.keyForNode(collection[i])] = true;\n      } // exit outgoing nodes first\n\n\n      for (let i = nodes.length - 1; i >= 0; i--) {\n        const node = nodes[i];\n        const key = this.keyForNode(node);\n\n        if (!isInCollection[key]) {\n          this.exit(node);\n        }\n      }\n\n      nodes.clear();\n      collection.forEach((data, i) => {\n        const key = this.keyForData(data);\n        let node = cache[key];\n\n        if (!node) {\n          node = this.initialize(data);\n          cache[key] = node;\n        }\n\n        nodes.push(node);\n\n        if (wasInNodes[key]) {\n          this.update(node, data, i);\n        } else {\n          this.enter(node, i);\n        }\n      });\n      return this;\n    },\n\n    // removes any exited nodes from cache\n    purgeCache() {\n      const nodes = this.get('nodes');\n      const cache = this.get('cache'); // build lookup table\n\n      const inNodes = {};\n\n      for (let i = 0; i < nodes.length; i++) {\n        inNodes[this.keyForNode(nodes[i])] = true;\n      }\n\n      Object.entries(cache).forEach(_ref => {\n        let [key, node] = _ref;\n\n        if (!inNodes[key]) {\n          this.release(node);\n          delete cache[key];\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/base\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend({\n    cache: null,\n    nodes: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('cache', {});\n      this.set('nodes', []);\n    },\n\n    destroy() {\n      this.clear();\n      this.purgeCache();\n\n      this._super(...arguments);\n    },\n\n    clear() {\n      this.join([]);\n    },\n\n    // override initialize, enter, update, and exit with custom behaviour\n    initialize: data => data,\n\n    enter() {},\n\n    update() {},\n\n    exit() {},\n\n    release() {},\n\n    keyForNode: node => {\n      const key = Ember.get(node, 'id') || Ember.guidFor(node);\n      return `${key}`;\n    },\n    keyForData: data => {\n      const key = Ember.get(data, 'id') || Ember.guidFor(data);\n      return `${key}`;\n    },\n\n    printCache(text) {\n      const cache = this.get('cache');\n      const printableCache = {};\n\n      for (const key in cache) {\n        if (cache.hasOwnProperty(key)) {\n          printableCache[key] = {\n            id: cache[key].get('id'),\n            model: cache[key].get('_internalModel.constructor.modelName')\n          };\n        }\n      } // eslint-disable-next-line no-console\n\n\n      console.log(`cache....${text}`, JSON.stringify(printableCache));\n    },\n\n    printNodes(text) {\n      const nodes = this.get('nodes');\n      const printableNodes = nodes.map(n => {\n        return {\n          id: n.get('id'),\n          model: n.get('_internalModel.constructor.modelName')\n        };\n      }); // eslint-disable-next-line no-console\n\n      console.log(`nodes....${text}`, JSON.stringify(printableNodes));\n    },\n\n    join(collection\n    /*, opts */\n    ) {\n      const cache = this.get('cache');\n      const nodes = this.get('nodes'); // this.printCache('beforeJoin');\n      // this.printNodes('beforeJoin');\n      // build lookup tables\n\n      const wasInNodes = {};\n\n      for (let i = 0; i < nodes.length; i++) {\n        wasInNodes[this.keyForNode(nodes[i])] = true;\n      }\n\n      const isInCollection = {};\n\n      for (let i = 0; i < collection.length; i++) {\n        isInCollection[this.keyForNode(collection[i])] = true;\n      } // exit outgoing nodes first\n\n\n      for (let i = nodes.length - 1; i >= 0; i--) {\n        const node = nodes[i];\n        const key = this.keyForNode(node);\n\n        if (!isInCollection[key]) {\n          this.exit(node);\n        }\n      }\n\n      nodes.clear();\n      collection.forEach((data, i) => {\n        if (!data.get('isDestroyed') && !data.get('isDestroying') && !data.get('isRemoved')) {\n          const key = this.keyForData(data);\n          let node = cache[key]; // If constructor.modelName is missing means the record had been unloaded.\n\n          if (!node || Ember.isEmpty(node.get('record.constructor.modelName'))) {\n            node = this.initialize(data);\n          }\n\n          if (node) {\n            nodes.push(node);\n            cache[key] = node;\n          }\n\n          if (wasInNodes[key]) {\n            this.update(node, data, i);\n          } else {\n            this.enter(node, i);\n          }\n        }\n      });\n      return this;\n    },\n\n    // removes any exited nodes from cache\n    purgeCache() {\n      const nodes = this.get('nodes') || [];\n      const cache = this.get('cache');\n\n      for (let i = nodes.length - 1; i >= 0; i--) {\n        const node = nodes[i];\n\n        if (node.get('record.isDestroyed') || node.get('record.isDestroying') || !node.get('record')) {\n          const key = this.keyForData(node.get('record'));\n\n          if (cache.hasOwnProperty(key)) {\n            delete cache[key];\n          }\n\n          this.release(node);\n          nodes.splice(i, 1);\n        }\n      }\n\n      for (const key in cache) {\n        if (cache.hasOwnProperty(key)) {\n          const node = cache[key];\n\n          if (node.get('record.isDestroyed') || node.get('record.isDestroying') || !node.get('record')) {\n            this.release(node);\n            delete cache[key];\n          }\n        }\n      } // this.printCache('afterPurge');\n\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/column-widget\", [\"exports\", \"adept-iq/classes/data-joins/base\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/checkbox-row\", \"adept-iq/config/environment\"], function (_exports, _base, _checkboxRow, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // should move this\n  const QUEUE_ID = 'wgt-refresh';\n\n  var _default = _base.default.extend({\n    table: null,\n    activeContext: null,\n    work: null,\n    modelName: null,\n    forceSync: _environment.default.APP.test,\n\n    initialize(record) {\n      const row = new _checkboxRow.default(record);\n      row.set('activeContext', this.get('activeContext'));\n      return row;\n    },\n\n    update(node, data) {\n      node.set('content', data);\n    },\n\n    clear() {\n      // Make sure delete data not in the job queues.\n      const queue = this.get('work.queues').findBy('name', QUEUE_ID);\n\n      if (queue) {\n        queue.clearJobs();\n      }\n\n      this.join([], {\n        sync: true\n      });\n    },\n\n    join(collection) {\n      let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        sync: false\n      };\n      const workQueues = this.get('work.queues') || [];\n\n      if (opts.sync || this.get('forceSync')) {\n        // unloads memory from exited rows\n        this.purgeCache(); // syncs & destroys some rows\n\n        this._super(...arguments); // at this point, table probably contains some destroyed rows\n\n\n        const tableRows = this.get('table.rows');\n        const rows = this.get('nodes');\n        if (!tableRows || !rows) return false; // skip update if possible\n\n        if (rows.length === tableRows.length) {\n          let isDifferent = false;\n\n          for (let i = 0; i < rows.length; i++) {\n            if (rows[i] !== tableRows[i]) {\n              isDifferent = true;\n              break;\n            }\n          }\n\n          if (!isDifferent) return false;\n        }\n\n        tableRows.setObjects(rows);\n        const queue = this.get('work.queues').findBy('name', QUEUE_ID);\n\n        if (queue) {\n          queue.addJob({\n            collection,\n            dataJoin: this\n          });\n          this.get('work').start();\n        }\n\n        return true;\n      }\n\n      const queue = workQueues.findBy('name', QUEUE_ID);\n\n      if (!queue) {\n        console.error(`queue '${QUEUE_ID}' not registered`); // eslint-disable-line no-console\n      }\n\n      if (queue) {\n        queue.addJob({\n          collection,\n          dataJoin: this\n        });\n        this.get('work').start();\n      }\n    },\n\n    exit(row) {\n      row.setProperties({\n        isSelected: false,\n        isLastChecked: false\n      });\n    },\n\n    release(row) {\n      row.destroy();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/map/base\", [\"exports\", \"adept-iq/classes/data-joins/base\", \"adept-iq/config/environment\", \"adept-iq/classes/work-queue\"], function (_exports, _base, _environment, _workQueue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    map: null,\n    // tomtom `map` object\n    mapService: null,\n    work: null,\n    // `work` service\n    workspace: null,\n    // `workspace` service\n    queue: null,\n    // `WorkQueue` instance\n    vehicleCluster: null,\n    queueName: null,\n\n    // set in subclass!\n    init() {\n      this._super(...arguments);\n\n      const queue = this.createWorkQueue();\n      this.get('work').registerQueue(queue);\n      this.set('queue', queue);\n    },\n\n    destroy() {\n      // remove all observers\n      this.get('nodes').forEach(node => {\n        const dynamicProperties = node.get('dynamicProperties');\n        Ember.makeArray(dynamicProperties).forEach(propertyName => {\n          node.removeObserver(propertyName, this, '_nodePropertyChanged');\n        });\n      }); // eliminate queue\n\n      const work = this.get('work');\n      const queue = this.get('queue');\n      work.unregisterQueue(queue);\n      queue.destroy();\n\n      this._super(...arguments);\n    },\n\n    createWorkQueue() {\n      const name = this.get('queueName');\n\n      if (Ember.isBlank(name)) {\n        throw new Error('queueName cannot be blank');\n      }\n\n      const envOptions = _environment.default.work[name];\n\n      if (!envOptions) {\n        throw new Error(`no environment options for queue '${name}'`);\n      }\n\n      const options = Object.assign({}, envOptions, {\n        name,\n        workspace: this.get('workspace'),\n        perform: jobs => {\n          // returns # of non-trivial refreshes performed\n          return jobs.reduce((count, node) => {\n            return this.refresh(node) ? count + 1 : count;\n          }, 0);\n        }\n      });\n      return _workQueue.default.extend({\n        isDisabled: Ember.computed.readOnly('workspace.isRoadSupervisorModeEnabled')\n      }).create(options);\n    },\n\n    join() {\n      this._super(...arguments);\n\n      this.get('work').start();\n    },\n\n    enter(node) {\n      this._super(...arguments);\n\n      delete node.markerMaximized;\n      delete node.polylineMaximized;\n      delete node.shapeMaximized;\n      delete node.decoratorMaximized;\n      const dynamicProperties = node.get('dynamicProperties');\n      Ember.makeArray(dynamicProperties).forEach(propertyName => {\n        node.addObserver(propertyName, this, '_nodePropertyChanged');\n      });\n      node.set('isJoined', true);\n      this.get('queue').addJob(node);\n    },\n\n    update(node) {\n      this._super(...arguments);\n\n      this.get('queue').addJob(node);\n    },\n\n    exit(node) {\n      const dynamicProperties = node.get('dynamicProperties');\n      Ember.makeArray(dynamicProperties).forEach(propertyName => {\n        node.removeObserver(propertyName, this, '_nodePropertyChanged');\n      });\n      node.set('isJoined', false);\n      this.refresh(node);\n\n      this._super(...arguments);\n    },\n\n    refresh() {\n      throw new Error('not implemented');\n    },\n\n    _nodePropertyChanged(node\n    /*, propertyName */\n    ) {\n      this.update(node);\n      this.get('work').start();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/map/marker\", [\"exports\", \"adept-iq/classes/data-joins/map/base\", \"lodash\", \"adept-iq/pods/components/iq-widgets/map-widget/config/marker\", \"adept-iq/pods/components/iq-widgets/map-widget/config/marker-highlight\", \"adept-iq/pods/components/iq-widgets/map-widget/config/marker-leaflet\"], function (_exports, _base, _lodash, _marker, _markerHighlight, _markerLeaflet) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n  const MARKER_UPDATE_THROTTLE = 10000; // do not update marker more than once per N ms\n\n  const ON_BREAK_TYPE = 'onBreak';\n  const OFF_BREAK_TYPE = 'offBreak';\n\n  var _default = _base.default.extend({\n    onContextMenu: null,\n    onDblClick: null,\n    options: null,\n    queueName: 'map-marker',\n\n    refresh(node) {\n      const isMaximized = this.get('options.isMaximized');\n      const isJoined = node.get('isJoined');\n      const isHidden = node.get('isHidden');\n      const marker = isMaximized ? node.get('markerMaximized') : node.get('marker'); // float break do not have lat/lng so need to get from estimatedBreaklat/Lng\n\n      const lat = node.get('lat') || node.get('stopPoint.lat');\n      const lng = node.get('lng') || node.get('stopPoint.lng');\n\n      if (!isJoined || isHidden || Ember.isNone(lat) || Ember.isNone(lng)) {\n        if (marker) {\n          if (node.isBreak) {\n            return this.processRemoveBreakMarker(node, isMaximized);\n          }\n\n          return this.removeMarker(node, isMaximized);\n        }\n\n        return false;\n      }\n\n      if (node.get('layer.isHighLighted')) node.set('isHighLighted', node.get('layer.isHighLighted'));\n\n      if (!marker) {\n        if (node.isBreak) {\n          // process breaks separately because this single node and stopPoint record\n          // can possible have 2 separate markers. break on and break off\n          return this.processCreateBreakMarker(node, isMaximized);\n        }\n\n        return this.createMarker(node, isMaximized);\n      }\n\n      if (node.isBreak) {\n        // process breaks separately because this single node and stopPoint record\n        // can possible have 2 separate markers. break on and break off\n        return this.processUpdateBreakMarker(node, isMaximized);\n      }\n\n      return this.updateMarker(node, isMaximized);\n    },\n\n    processRemoveBreakMarker(node, isMaximized) {\n      this.removeBreakMarker(node, ON_BREAK_TYPE, isMaximized);\n      this.removeBreakMarker(node, OFF_BREAK_TYPE, isMaximized);\n    },\n\n    processCreateBreakMarker(node, isMaximized) {\n      const breakOnLat = node.get('lat');\n      const breakOnLng = node.get('lng'); // create the break on marker\n\n      this.createBreakMarker(node, ON_BREAK_TYPE, breakOnLat, breakOnLng, isMaximized);\n      const breakOffLat = node.get('record.actualDepartLat');\n      const breakOffLng = node.get('record.actualDepartLng'); // create the break off marker\n\n      this.createBreakMarker(node, OFF_BREAK_TYPE, breakOffLat, breakOffLng, isMaximized);\n    },\n\n    processUpdateBreakMarker(node, isMaximized) {\n      const breakOnLat = node.get('lat');\n      const breakOnLng = node.get('lng'); // update the break on marker\n\n      this.updateBreakMarker(node, ON_BREAK_TYPE, breakOnLat, breakOnLng, isMaximized);\n      const breakOffMarker = node.get('breakOffMarker');\n      const breakOffLat = node.get('record.actualDepartLat');\n      const breakOffLng = node.get('record.actualDepartLng'); // create/update/delete the break off marker\n\n      if (Ember.isNone(breakOffMarker) && !Ember.isNone(breakOffLat) && !Ember.isNone(breakOffLng)) {\n        this.createBreakMarker(node, OFF_BREAK_TYPE, breakOffLat, breakOffLng, isMaximized);\n      } else if (!Ember.isNone(breakOffMarker) && (Ember.isNone(breakOffLat) || Ember.isNone(breakOffLng))) {\n        this.removeBreakMarker(node, OFF_BREAK_TYPE, isMaximized);\n      } else {\n        this.updateBreakMarker(node, OFF_BREAK_TYPE, breakOffLat, breakOffLng, isMaximized);\n      }\n    },\n\n    createBreakMarker(node, breakType, lat, lng, isMaximized) {\n      const vehicleCluster = this.get('vehicleCluster');\n      if (Ember.isNone(lat) || Ember.isNone(lng)) return;\n\n      const options = this._computeMarkerOptions(node);\n\n      const highlightOptions = this._computeMarkerHighLightOptions(node);\n\n      const icon = new bemap.Icon(options.icon);\n      const coord = new bemap.Coordinate(lng, lat);\n      const map = this.get('map');\n      const marker = new bemap.Marker(coord, {\n        icon\n      });\n\n      if (breakType === ON_BREAK_TYPE) {\n        if (isMaximized) {\n          node.set('markerMaximized', marker);\n        } else {\n          node.set('marker', marker);\n        }\n      } else {\n        node.set('breakOffMarker', marker);\n      }\n\n      if (vehicleCluster && node.get('isGrouped')) {\n        map.addMarker(marker, {\n          layer: vehicleCluster\n        });\n        node.set('inCluster', true);\n      } else {\n        map.addMarker(marker);\n        node.set('inCluster', false);\n      }\n\n      if (node.get('isHighLighted') && marker.native._icon) {\n        marker.native.setIcon(highlightOptions.icon);\n      } else if (marker.native._icon) {\n        marker.setIcon(icon);\n      } // append iq info for active context callback\n\n\n      const record = node.get('record');\n      marker.native.iq = {\n        isActive: node.get('isActive'),\n        modelName: record ? record.constructor.modelName : null,\n        modelId: record ? record.get('id') : null\n      };\n      this.initZIndexAndRotationAngleToMarker(node, marker); // bind popup & tooltip\n\n      const label = node.get('label');\n\n      if (label) {\n        this.addPopUpAndTooltipToMarker(node, marker, label);\n      }\n\n      this.bindClickHandlersToMarker(node, marker);\n      const zIndexOffset = node.get('zIndexOffset');\n      const rotationAngle = node.get('rotationAngle');\n\n      if (breakType === ON_BREAK_TYPE) {\n        node.cache = {\n          lat,\n          lng,\n          label,\n          rotationAngle,\n          zIndexOffset\n        };\n      } else {\n        node.breakOffCache = {\n          lat,\n          lng,\n          label,\n          rotationAngle,\n          zIndexOffset\n        };\n      }\n\n      return true;\n    },\n\n    createMarker(node, isMaximized) {\n      const vehicleCluster = this.get('vehicleCluster');\n      const lat = node.get('lat');\n      const lng = node.get('lng');\n\n      const options = this._computeMarkerOptions(node);\n\n      const highlightOptions = this._computeMarkerHighLightOptions(node);\n\n      const icon = new bemap.Icon(options.icon);\n      const coord = new bemap.Coordinate(lng, lat);\n      const map = this.get('map');\n      const marker = new bemap.Marker(coord, {\n        icon\n      });\n\n      if (isMaximized) {\n        node.set('markerMaximized', marker);\n      } else {\n        node.set('marker', marker);\n      }\n\n      if (vehicleCluster && node.get('isGrouped')) {\n        map.addMarker(marker, {\n          layer: vehicleCluster\n        });\n        node.set('inCluster', true);\n      } else {\n        map.addMarker(marker);\n        node.set('inCluster', false);\n      }\n\n      if (node.get('isHighLighted') && marker.native._icon) {\n        marker.native.setIcon(highlightOptions.icon);\n      } else if (marker.native._icon) {\n        marker.setIcon(icon);\n      } // append iq info for active context callback\n\n\n      const record = node.get('record');\n      marker.native.iq = {\n        isActive: node.get('isActive'),\n        modelName: record ? record.constructor.modelName : null,\n        modelId: record ? record.get('id') : null\n      };\n      this.initZIndexAndRotationAngleToMarker(node, marker); // bind popup & tooltip\n\n      const label = node.get('label');\n\n      if (label) {\n        this.addPopUpAndTooltipToMarker(node, marker, label);\n      }\n\n      this.bindClickHandlersToMarker(node, marker);\n      const zIndexOffset = node.get('zIndexOffset');\n      const rotationAngle = node.get('rotationAngle');\n      node.cache = {\n        lat,\n        lng,\n        label,\n        rotationAngle,\n        zIndexOffset\n      };\n      return true;\n    },\n\n    updateBreakMarker(node, breakType, lat, lng, isMaximized) {\n      const vehicleCluster = this.get('vehicleCluster');\n      const cache = breakType === ON_BREAK_TYPE ? node.cache : node.breakOffCache;\n      const needUpdateNow = !node.get('isGrouped') || node.get('isGrouped') && !node.get('inCluster'); // Update not Groupded vehicle everytime\n\n      const map = this.get('map');\n      let marker;\n      let isDirty = false; // Check marker last update time\n\n      const lastUpdatedAt = node.get('lastUpdatedAt');\n      const t = new Date().getTime();\n      if (Ember.isNone(lat) || Ember.isNone(lng)) return;\n\n      if (!needUpdateNow && lastUpdatedAt && t - lastUpdatedAt < MARKER_UPDATE_THROTTLE) {\n        // skip marker update\n        return;\n      }\n\n      if (breakType === ON_BREAK_TYPE) {\n        marker = isMaximized ? node.get('markerMaximized') : node.get('marker');\n      } else {\n        marker = node.get('breakOffMarker');\n      } // update position\n\n\n      const options = this._computeMarkerOptions(node);\n\n      const highlightOptions = this._computeMarkerHighLightOptions(node);\n\n      const coord = new bemap.Coordinate(lng, lat);\n\n      if (lat !== cache.lat || lng !== cache.lng) {\n        marker.setCoordinate(coord);\n        cache.lat = lat;\n        cache.lng = lng;\n        isDirty = true;\n      } // update marker icon\n\n\n      if (Ember.isNone(options) || Ember.isNone(options.icon)) return false;\n\n      if (!node.get('isGrouped') && node.get('inCluster')) {\n        vehicleCluster.native.removeLayer(marker.native);\n        map.addMarker(marker);\n        node.set('inCluster', false);\n        isDirty = true;\n      } else if (node.get('isGrouped') && !node.get('inCluster')) {\n        vehicleCluster.native.addLayer(marker.native);\n        map.removeLayer(marker);\n        node.set('inCluster', true);\n        isDirty = true;\n      } // update marker icon\n\n\n      const iconDigest = JSON.stringify(options);\n\n      if (iconDigest !== cache.iconDigest) {\n        const icon = new bemap.Icon(options.icon);\n\n        if (node.get('isHighLighted')) {\n          marker.native.setIcon(highlightOptions.icon);\n        } else {\n          marker.native.setIcon(options.leaflet.icon);\n          marker.setIcon(icon);\n        }\n\n        cache.iconDigest = iconDigest;\n        isDirty = true;\n      }\n\n      if (node.get('isHighLighted') && marker.native._icon) {\n        window.L.DomUtil.addClass(marker.native._icon, 'high-lighted');\n      } else if (marker.native._icon) {\n        window.L.DomUtil.removeClass(marker.native._icon, 'high-lighted');\n      } // update front-to-back z-index, e.g. render vehicles on top of stops\n\n\n      const zIndexOffset = node.get('zIndexOffset');\n\n      if (!Ember.isNone(zIndexOffset) && zIndexOffset !== cache.zIndexOffset) {\n        marker.native.setZIndexOffset(zIndexOffset);\n        cache.zIndex = zIndexOffset;\n        isDirty = true;\n      } // update icon rotation, e.g. vehicle heading\n\n\n      const rotationAngle = node.get('rotationAngle');\n\n      if (!Ember.isNone(rotationAngle) && rotationAngle !== cache.rotationAngle) {\n        marker.native.setRotationAngle(rotationAngle / 2);\n        cache.rotationAngle = rotationAngle;\n        isDirty = true;\n      } // once isDirty property is true for any different icon change, rotation angle, lat-lng, or zindex\n      // update the vehicle cluster\n\n\n      if (isDirty) {\n        vehicleCluster.native.refreshClusters(marker.native); // not working natively, either it refreshes when child marker updates possibly?\n      } // update opacity; emergency/highlighted vehicles are always full opacity\n\n\n      const isEmergencyVehicle = node.get('record.isGrouped');\n      const opacity = isEmergencyVehicle ? 1.0 : node.get('opacity');\n\n      if (opacity !== cache.opacity) {\n        marker.native.setOpacity(opacity);\n        cache.opacity = opacity;\n        isDirty = true;\n      }\n\n      const setIsDirty = () => {\n        isDirty = true;\n      };\n\n      this.setLabelAndPopUp(node, cache, marker, setIsDirty);\n      node.set('lastUpdatedAt', t);\n      return isDirty;\n    },\n\n    updateMarker(node, isMaximized) {\n      const vehicleCluster = this.get('vehicleCluster');\n      const marker = isMaximized ? node.get('markerMaximized') : node.get('marker');\n      const cache = node.cache;\n      const map = this.get('map');\n      const needUpdateNow = !node.get('isGrouped') || node.get('isGrouped') && !node.get('inCluster'); // Update not Groupded vehicle everytime\n\n      let isDirty = false; // Check marker last update time\n\n      const lastUpdatedAt = node.get('lastUpdatedAt');\n      const t = new Date().getTime();\n\n      if (!needUpdateNow && lastUpdatedAt && t - lastUpdatedAt < MARKER_UPDATE_THROTTLE) {\n        // skip marker update\n        return;\n      } // update position\n\n\n      const lat = node.get('lat');\n      const lng = node.get('lng');\n\n      const options = this._computeMarkerOptions(node);\n\n      const highlightOptions = this._computeMarkerHighLightOptions(node);\n\n      const coord = new bemap.Coordinate(lng, lat);\n\n      if (lat !== cache.lat || lng !== cache.lng) {\n        marker.setCoordinate(coord);\n        cache.lat = lat;\n        cache.lng = lng;\n        isDirty = true;\n      }\n\n      if (Ember.isNone(options) || Ember.isNone(options.icon)) return false;\n      const _popup = marker.native._popup;\n\n      if (!node.get('isGrouped') && node.get('inCluster')) {\n        vehicleCluster.native.removeLayer(marker.native);\n        map.addMarker(marker);\n        node.set('inCluster', false); // benomad library clobbers the popup during remvoing of markers,\n        // we will add this again on switching from cluster to non-clusters\n\n        if (!Ember.isNone(_popup) && Ember.isNone(marker.native._popup)) {\n          marker.native._popup = _popup;\n        }\n\n        isDirty = true;\n      } else if (node.get('isGrouped') && !node.get('inCluster')) {\n        vehicleCluster.native.addLayer(marker.native);\n        map.removeLayer(marker);\n        node.set('inCluster', true); // benomad library clobbers the popup during remvoing of markers,\n        // we will add this again on switching from cluster to non-clusters\n\n        if (!Ember.isNone(_popup) && Ember.isNone(marker.native._popup)) {\n          marker.native._popup = _popup;\n        }\n\n        isDirty = true;\n      } // benomad library clobbers the highlighted icon,\n      // we should add this after removing and adding of markers\n      // update marker icon\n\n\n      const iconDigest = JSON.stringify(options);\n\n      if (iconDigest !== cache.iconDigest) {\n        const icon = new bemap.Icon(options.icon);\n\n        if (node.get('isHighLighted')) {\n          marker.native.setIcon(highlightOptions.icon);\n        } else {\n          marker.native.setIcon(options.leaflet.icon);\n          marker.setIcon(icon);\n        }\n\n        cache.iconDigest = iconDigest;\n        isDirty = true;\n      }\n\n      if (node.get('isHighLighted') && marker.native._icon) {\n        window.L.DomUtil.addClass(marker.native._icon, 'high-lighted');\n      } else if (marker.native._icon) {\n        window.L.DomUtil.removeClass(marker.native._icon, 'high-lighted');\n      } // update front-to-back z-index, e.g. render vehicles on top of stops\n\n\n      const zIndexOffset = node.get('zIndexOffset');\n\n      if (!Ember.isNone(zIndexOffset) && zIndexOffset !== cache.zIndexOffset) {\n        marker.native.setZIndexOffset(zIndexOffset);\n        cache.zIndex = zIndexOffset;\n        isDirty = true;\n      } // update icon rotation, e.g. vehicle heading\n\n\n      const rotationAngle = node.get('rotationAngle');\n\n      if (!Ember.isNone(rotationAngle) && rotationAngle !== cache.rotationAngle) {\n        marker.native.setRotationAngle(rotationAngle / 2);\n        cache.rotationAngle = rotationAngle;\n        isDirty = true;\n      } // once isDirty property is true for any different icon change, rotation angle, lat-lng, or zindex\n      // update the vehicle cluster\n\n\n      if (isDirty) {\n        vehicleCluster.native.refreshClusters(marker.native); // not working natively, either it refreshes when child marker updates possibly?\n      } // update opacity; emergency/highlighted vehicles are always full opacity\n\n\n      const isEmergencyVehicle = node.get('record.isGrouped');\n      const opacity = isEmergencyVehicle ? 1.0 : node.get('opacity');\n\n      if (opacity !== cache.opacity) {\n        marker.native.setOpacity(opacity);\n        cache.opacity = opacity;\n        isDirty = true;\n      }\n\n      const setIsDirty = () => {\n        isDirty = true;\n      };\n\n      this.setLabelAndPopUp(node, cache, marker, setIsDirty);\n      node.set('lastUpdatedAt', t);\n      return isDirty;\n    },\n\n    removeBreakMarker(node, breakType, isMaximized) {\n      const vehicleCluster = this.get('vehicleCluster');\n      const map = this.get('map');\n      let marker = node.get('breakOffMarker');\n\n      if (breakType === ON_BREAK_TYPE) {\n        marker = isMaximized ? node.get('markerMaximized') : node.get('marker');\n      }\n\n      if (Ember.isNone(marker)) return;\n      marker.native.iq = null;\n      marker.native.off('contextmenu');\n      marker.native.off('dblclick');\n\n      if (vehicleCluster && node.get('inCluster')) {\n        vehicleCluster.native.removeLayer(marker.native);\n      }\n\n      map.removeMarker(marker);\n\n      if (breakType === ON_BREAK_TYPE) {\n        node.cache = null;\n        node.set('marker', null);\n      } else {\n        node.set('breakOffMarker', null);\n        node.set('breakOffCache', null);\n      }\n\n      return true;\n    },\n\n    removeMarker(node, isMaximized) {\n      const vehicleCluster = this.get('vehicleCluster');\n      const marker = isMaximized ? node.get('markerMaximized') : node.get('marker');\n      const map = this.get('map');\n      marker.native.iq = null;\n      marker.native.off('contextmenu');\n      marker.native.off('dblclick');\n\n      if (vehicleCluster && node.get('isGrouped')) {\n        map.removeMarker(marker, {\n          layer: vehicleCluster\n        });\n        vehicleCluster.native.removeLayer(marker.native);\n      } else {\n        map.removeMarker(marker);\n      }\n\n      node.cache = null;\n      node.set('marker', null);\n      return true;\n    },\n\n    /**\n     *\n     * @param node\n     * @param marker\n     * @param label\n     */\n    addPopUpAndTooltipToMarker(node, marker, label) {\n      // popup label if display label set to 'always'\n      if (node.get('layer.isDisplayMapIconLabel')) {\n        marker.native.bindPopup(label, {\n          closeButton: false,\n          autoClose: false,\n          closeOnClick: false,\n          autoPan: false\n        }).openPopup();\n      } else {\n        marker.native.bindPopup(label, {\n          closeButton: false\n        });\n      }\n\n      marker.native.bindTooltip(label);\n    },\n\n    /**\n     *\n     * @param node\n     * @param marker\n     */\n    bindClickHandlersToMarker(node, marker) {\n      // bind click handlers\n      marker.native.on('contextmenu', e => {\n        node.trigger('contextmenu', e);\n\n        if (this.onContextMenu) {\n          Ember.run(() => this.onContextMenu(e, node));\n        }\n      });\n      marker.native.on('dblclick', e => {\n        node.trigger('dblclick', e);\n\n        if (this.onDblClick) {\n          window.L.DomEvent.stop(e);\n          Ember.run(() => this.onDblClick(e, node));\n        }\n      });\n    },\n\n    /**\n     *\n     * @param node\n     * @param marker\n     */\n    initZIndexAndRotationAngleToMarker(node, marker) {\n      // init z-index\n      const zIndexOffset = node.get('zIndexOffset');\n\n      if (!Ember.isNone(zIndexOffset)) {\n        marker.native.setZIndexOffset(zIndexOffset);\n      } // init rotation angle\n\n\n      const rotationAngle = node.get('rotationAngle');\n\n      if (!Ember.isNone(rotationAngle)) {\n        marker.native.setRotationAngle(rotationAngle / 2);\n      }\n    },\n\n    /**\n     *\n     * @param node\n     * @param cache\n     * @param marker\n     * @param cb // setIsDirty Callback\n     */\n    setLabelAndPopUp(node, cache, marker, cb) {\n      // update popup & tooltip\n      const label = node.get('label');\n\n      if (label !== cache.label) {\n        if (!label || label === '<br/>') {\n          marker.native.closePopup();\n          marker.native.unbindTooltip();\n        } else if (!cache.label) {\n          marker.native.bindTooltip(label);\n        } else {\n          marker.native.setPopupContent(label);\n          marker.native.setTooltipContent(label);\n        }\n\n        cache.label = label;\n        cb();\n      }\n    },\n\n    _computeMarkerOptions(node) {\n      const optionSets = [];\n      const opacity = node.get('opacity');\n\n      if (!Ember.isNone(opacity)) {\n        optionSets.push({\n          opacity\n        });\n      }\n\n      optionSets.push({\n        highlight: node.get('isHighLighted')\n      });\n      const nodeOptions = node.get('options');\n\n      if (nodeOptions) {\n        optionSets.push(nodeOptions);\n      }\n\n      const style = node.get('style');\n      const layerType = node.get('layerType');\n\n      if (style) {\n        const markerOptions = _marker.default[style];\n\n        if (!markerOptions) {\n          throw new Error(`no marker style found with key '${style}'`);\n        }\n\n        optionSets.push(markerOptions);\n      } else if (layerType && layerType.style) {\n        const layerTypeOptions = _marker.default[layerType.style];\n\n        if (!layerTypeOptions) {\n          throw new Error(`no marker style found with key ${layerType.style}`);\n        }\n\n        optionSets.push(layerTypeOptions);\n      }\n\n      if (style) {\n        const leaflet = {\n          leaflet: _markerLeaflet.default[style]\n        };\n\n        if (node.isBreak) {\n          const isDispatchDashboard = this.get('workspace.isDispatchDashboard');\n          const isFloating = isDispatchDashboard ? node.stopPoint.get('routeBreak.breakType.isFloating') : node.isFloatingBreak;\n          const polyline = isDispatchDashboard ? node.stopPoint.get('polylinePoints') : null;\n\n          if (isFloating && Ember.isNone(polyline)) {\n            leaflet.leaflet.icon.options.className = 'floating-break-no-location';\n          }\n        }\n\n        optionSets.push(leaflet);\n      }\n\n      return _lodash.default.defaultsDeep({}, ...optionSets);\n    },\n\n    _computeMarkerHighLightOptions(node) {\n      const optionSets = [];\n      const opacity = node.get('opacity');\n\n      if (!Ember.isNone(opacity)) {\n        optionSets.push({\n          opacity\n        });\n      }\n\n      const nodeOptions = node.get('options');\n\n      if (nodeOptions) {\n        optionSets.push(nodeOptions);\n      }\n\n      const style = node.get('style');\n      const layerType = node.get('layerType');\n\n      if (style) {\n        const markerOptions = _markerHighlight.default[style];\n\n        if (node.isBreak) {\n          const isDispatchDashboard = this.get('workspace.isDispatchDashboard');\n          const isFloating = isDispatchDashboard ? node.stopPoint.get('routeBreak.breakType.isFloating') : node.isFloatingBreak;\n          const polyline = isDispatchDashboard ? node.stopPoint.get('polylinePoints') : null;\n\n          if (isFloating && Ember.isNone(polyline)) {\n            markerOptions.icon.options.className = 'floating-break-no-location';\n          }\n        }\n\n        if (!markerOptions) {\n          throw new Error(`no marker style found with key '${style}'`);\n        }\n\n        optionSets.push(markerOptions);\n      } else if (layerType && layerType.style) {\n        const layerTypeOptions = _marker.default[layerType.style];\n\n        if (!layerTypeOptions) {\n          throw new Error(`no marker style found with key ${layerType.style}`);\n        }\n\n        optionSets.push(layerTypeOptions);\n      }\n\n      return _lodash.default.defaultsDeep({}, ...optionSets);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/map/polyline\", [\"exports\", \"adept-iq/classes/data-joins/map/base\", \"lodash\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\", \"adept-iq/pods/components/iq-widgets/map-widget/config/patterns\"], function (_exports, _base, _lodash, _polyline, _patterns) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n\n  var _default = _base.default.extend({\n    onContextMenu: null,\n    onDblClick: null,\n    queueName: 'map-polyline',\n\n    refresh(node) {\n      this.reorderPolyline(node);\n      return [this.refreshPolyline(node), this.refreshDecorator(node)].any(Boolean);\n    },\n\n    reorderPolyline(node) {\n      //On each merging state, the new updated polyline would place on top of the layers and makes the polylines to get out of orders.\n      //As the polylines will refresh one by one in the order that has been defined in the layer's config, here by bringing each polyline to the front,\n      // we make sure that at the end of refresh cycle, the polylines order stays the same as what it was defined.\n      if (node.polyline && node.polyline.native && _lodash.default.isFunction(node.polyline.native.bringToFront)) {\n        node.polyline.native.bringToFront();\n      }\n    },\n\n    refreshPolyline(node) {\n      const isMaximized = this.get('options.isMaximized');\n      const isJoined = node.get('isJoined');\n      const isHidden = node.get('isHidden');\n      const points = node.get('points');\n      const polyline = isMaximized ? node.get('polylineMaximized') : node.get('polyline');\n\n      if (!isJoined || isHidden || Ember.isEmpty(points)) {\n        if (polyline) {\n          return this.removePolyline(node, isMaximized);\n        }\n\n        return false;\n      }\n\n      if (!polyline) {\n        return this.createPolyline(node, isMaximized);\n      }\n\n      return this.updatePolyline(node, isMaximized);\n    },\n\n    refreshDecorator(node) {\n      const isMaximized = this.get('options.isMaximized');\n      const isJoined = node.get('isJoined');\n      const isHidden = node.get('isHidden');\n      const pattern = node.get('pattern');\n      const polyline = node.get('polyline');\n      const decorator = isMaximized ? node.get('decoratorMaximized') : node.get('decorator');\n\n      if (!isJoined || isHidden || !polyline || !pattern) {\n        if (decorator) {\n          return this.removeDecorator(node, isMaximized);\n        }\n\n        return false;\n      }\n\n      if (!decorator) {\n        return this.createDecorator(node, isMaximized);\n      }\n\n      return this.updateDecorator(node, isMaximized);\n    },\n\n    createPolylineTripStatus(node) {\n      let polylineAttribute = '';\n      let filteredPolyline = '';\n      let styleOtp = node.style;\n      const otpStatus = node.otpStatus;\n      styleOtp = styleOtp.replace(otpStatus, '');\n\n      switch (styleOtp) {\n        case 'tripWaitlisted':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [1.5, 9];\n          break;\n\n        case 'tripCallback':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [3, 4];\n          break;\n\n        case 'tripDispatched':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [3.2, 3];\n          break;\n\n        case 'tripEnRoute':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [2, 3];\n          break;\n\n        case 'tripActive':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [1, 4.5];\n          break;\n\n        case 'tripIllegal':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = 3;\n          break;\n\n        case 'tripNoshowed':\n        case 'tripNoshowedLate':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [1, 4, 8, 4];\n          break;\n\n        case 'tripNoshowrequested':\n        case 'tripNoshowrequestedLate':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [1, 4, 8, 4];\n          break;\n\n        case 'tripCanceled':\n        case 'tripCanceledLate':\n        case 'tripLatecanceled':\n        case 'tripLatecanceledLate':\n          polylineAttribute = node.polyline.native._path.attributes;\n          filteredPolyline = Object.values(polylineAttribute).filter(ele => ele.name === 'stroke-dasharray');\n          filteredPolyline.firstObject.nodeValue = [1, 4, 6, 4];\n          break;\n\n        default:\n          break;\n      }\n    },\n\n    createPolyline(node, isMaximized) {\n      const options = this._computePolylineOptions(node);\n\n      const polyline = new bemap.Polyline(node.get('bemapCoords'), {\n        style: options\n      });\n      const map = this.get('map');\n\n      if (isMaximized) {\n        node.set('polylineMaximized', polyline);\n      } else {\n        node.set('polyline', polyline);\n      } // polyline.addTo(this.get('map'));\n\n\n      map.addPolyline(polyline); // bind tooltip & pop-up\n\n      const label = node.get('label');\n\n      if (label) {\n        polyline.native.bindPopup(label, {\n          closeButton: false\n        });\n        polyline.native.bindTooltip(label);\n      } // used for click handler callbacks\n\n\n      const record = node.get('record');\n      polyline.iq = {\n        isActive: node.get('isActive'),\n        modelId: record ? record.get('id') : null,\n        modelName: record ? record.constructor.modelName : null\n      }; // register click handlers\n\n      polyline.native.on('contextmenu', e => {\n        node.trigger('contextmenu', e);\n\n        if (this.onContextMenu) {\n          Ember.run(() => this.onContextMenu(e, node));\n        }\n      });\n      polyline.native.on('dblclick', e => {\n        node.trigger('dblclick', e);\n\n        if (this.onDblClick) {\n          window.L.DomEvent.stop(e);\n          Ember.run(() => this.onDblClick(e, node));\n        }\n      }); // initialize cache\n\n      node.cache = node.cache || {};\n      node.cache.polyline = {\n        label,\n        optionsDigest: JSON.stringify(options),\n        pointsDigest: node.get('isDynamic') ? node.get('pointsDigest') : null\n      };\n      return true;\n    },\n\n    updatePolyline(node, isMaximized) {\n      const polyline = isMaximized ? node.get('polylineMaximized') : node.get('polyline');\n      const cache = node.cache.polyline;\n      let isDirty = false; // update style options\n\n      const options = this._computePolylineOptions(node);\n\n      const optionsDigest = JSON.stringify(options);\n\n      if (optionsDigest !== cache.optionsDigest) {\n        polyline.setStyle({\n          style: options\n        });\n        cache.optionsDigest = optionsDigest;\n        isDirty = true;\n      } // update polyline points; only if dynamic!\n\n\n      if (node.get('isDynamic')) {\n        const pointsDigest = node.get('pointsDigest');\n\n        if (pointsDigest !== cache.pointsDigest) {\n          polyline.native.setLatLngs(node.get('bemapCoords'));\n          cache.pointsDigest = pointsDigest;\n          isDirty = true;\n        }\n      }\n\n      if (polyline.native._popup && !polyline.native._popup._container) {\n        if (polyline.map.native._popup) {\n          const _popup = polyline.map.native._popup;\n          polyline.native._popup = _popup;\n        }\n      } // update popup & tooltip\n\n\n      const label = node.get('label'); //for removing the blank popup when label has empty string\n\n      if (polyline.native._popup && !label) {\n        const container = polyline.native._popup._container;\n\n        if (container.innerHTML) {\n          container.innerHTML = '';\n        }\n      }\n\n      if (label !== cache.label) {\n        if (!label) {\n          polyline.native.unbindPopup();\n          polyline.native.unbindTooltip();\n        } else if (!cache.label) {\n          polyline.native.bindPopup(label, {\n            closeButton: false\n          });\n          polyline.native.bindTooltip(label);\n        } else {\n          polyline.native.setPopupContent(label);\n          polyline.native.setTooltipContent(label);\n        }\n\n        cache.label = label;\n        isDirty = true;\n      }\n\n      return isDirty;\n    },\n\n    removePolyline(node, isMaximized) {\n      const polyline = isMaximized ? node.get('polylineMaximized') : node.get('polyline');\n      polyline.iq = null;\n      polyline.native.off('contextmenu');\n      polyline.native.off('dblclick');\n      polyline.remove();\n\n      if (isMaximized) {\n        node.set('polylineMaximized', null);\n      } else {\n        node.set('polyline', null);\n      }\n\n      if (!node.cache && !node.cache.polyline) {\n        node.cache.polyline = null;\n      }\n\n      if (!node.cache.decorator) {\n        node.cache = null;\n      }\n\n      return true;\n    },\n\n    createDecorator(node, isMaximized) {\n      const polyline = isMaximized ? node.get('polylineMaximized') : node.get('polyline');\n\n      const options = this._computeDecoratorOptions(node);\n\n      const decorator = window.L.polylineDecorator(polyline.native, options);\n      const map = this.get('map');\n\n      if (isMaximized) {\n        node.set('decoratorMaximized', decorator);\n      } else {\n        node.set('decorator', decorator);\n      }\n\n      decorator.addTo(map.native);\n      node.cache = node.cache || {};\n      node.cache.decorator = {\n        patternsDigest: JSON.stringify(options.patterns),\n        pointsDigest: node.get('isDynamic') ? node.get('pointsDigest') : null\n      };\n      return true;\n    },\n\n    updateDecorator(node, isMaximized) {\n      const decorator = isMaximized ? node.get('decoratorMaximized') : node.get('decorator');\n      const cache = node.cache.decorator;\n      let isDirty = false; // update patterns; this includes opacity\n\n      const {\n        patterns\n      } = this._computeDecoratorOptions(node);\n\n      const patternsDigest = JSON.stringify(patterns);\n\n      if (patternsDigest !== cache.patternsDigest) {\n        decorator.setPatterns(patterns);\n        cache.patternsDigest = patternsDigest;\n        isDirty = true;\n      } // update points, but only if dynamic\n\n\n      if (node.get('isDynamic')) {\n        const pointsDigest = node.get('pointsDigest');\n\n        if (pointsDigest !== cache.pointsDigest) {\n          const points = node.get('points');\n          decorator.setPaths(points);\n          cache.pointsDigest = pointsDigest;\n          isDirty = true;\n        }\n      }\n\n      return isDirty;\n    },\n\n    removeDecorator(node, isMaximized) {\n      const decorator = isMaximized ? node.get('decoratorMaximized') : node.get('decorator');\n      decorator.remove();\n\n      if (isMaximized) {\n        node.set('decoratorMaximized', null);\n      } else {\n        node.set('decorator', null);\n      }\n\n      if (!node.cache && !node.cache.decorato) {\n        node.cache.decorator = null;\n      }\n\n      if (!node.cache.polyline) {\n        node.cache = null;\n      }\n\n      return true;\n    },\n\n    _computeDecoratorOptions(node) {\n      const patternName = node.get('pattern');\n\n      if (!_patterns.default.hasOwnProperty(patternName)) {\n        throw new Error(`no pattern preset matching '${patternName}'`);\n      }\n\n      const presetPatterns = _patterns.default[patternName];\n      const opacity = node.get('opacity');\n      const patterns = presetPatterns.map(presetPattern => {\n        const pattern = _lodash.default.cloneDeep(presetPattern);\n\n        const pathOptions = Ember.get(pattern, 'symbol.options.pathOptions');\n        if (!pathOptions) return pattern; // some pattern presets have both opacities, some only one; this is why\n        // we need to bake opacity into the patterns array\n\n        if (pathOptions.hasOwnProperty('opacity')) {\n          pathOptions.opacity = opacity;\n        }\n\n        if (pathOptions.hasOwnProperty('fillOpacity')) {\n          pathOptions.fillOpacity = opacity;\n        }\n\n        return pattern;\n      });\n      return {\n        patterns\n      };\n    },\n\n    _computePolylineOptions(node) {\n      const styleObjects = [];\n      const opacity = node.get('opacity');\n\n      if (!Ember.isNone(opacity)) {\n        styleObjects.push({\n          opacity\n        });\n      }\n\n      const nodeOptions = node.get('options');\n\n      if (nodeOptions) {\n        styleObjects.push(nodeOptions);\n      }\n\n      const style = node.get('style');\n      if (node.polyline) this.createPolylineTripStatus(node);\n\n      if (style) {\n        const presetOptions = _polyline.default[style];\n\n        if (!presetOptions) {\n          throw new Error(`no style preset matching '${style}'`);\n        }\n\n        styleObjects.push(presetOptions);\n      }\n\n      return _lodash.default.defaultsDeep({}, ...styleObjects);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/map/shape\", [\"exports\", \"adept-iq/classes/data-joins/map/base\", \"lodash\", \"adept-iq/pods/components/iq-widgets/map-widget/config/circle\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polygon\"], function (_exports, _base, _lodash, _circle, _polygon) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n\n  var _default = _base.default.extend({\n    queueName: 'map-shape',\n\n    refresh(node) {\n      const isMaximized = this.get('options.isMaximized');\n      const isJoined = node.get('isJoined');\n      const isHidden = node.get('isHidden');\n      const points = node.get('points');\n      const shape = isMaximized ? node.get('shapeMaximized') : node.get('shape');\n\n      if (!isJoined || isHidden || Ember.isEmpty(points)) {\n        if (shape) {\n          return this.removeShape(node, isMaximized);\n        }\n\n        return false;\n      }\n\n      if (!shape) {\n        return this.createShape(node, isMaximized);\n      }\n\n      return this.updateShape(node, isMaximized);\n    },\n\n    createShape(node, isMaximized) {\n      const map = this.map;\n      const label = node.get('label');\n      const record = node.get('record');\n      let style = node.get('style');\n      const parentLabel = node.get('parentLabel');\n      let points = node.get('points');\n      const radius = node.get('radius');\n      const noOfPoints = node.get('noOfPoints');\n\n      if (typeof record.get('style') !== 'undefined' && record.get('style')) {\n        style = record.get('style');\n      }\n\n      let defaultOptions, shape;\n      const nodeOptions = node.get('options') || {};\n      const modelName = record.constructor.modelName;\n      let parentLabelFormatted = '<table  style=\"position:relative;\"><tr></tr><tr>' + '<td rowspan=\"2\" style=\"font-weight: bold; font-size: 2em;text-align: center;\">' + parentLabel + '</td><td rowspan=\"2\">&nbsp;</td><td rowspan=\"2\">' + label + '</td></tr></table>';\n\n      if (noOfPoints === 1) {\n        defaultOptions = _circle.default[style] || {};\n\n        const options = _lodash.default.merge(defaultOptions, nodeOptions, {\n          label,\n          opacity: node.get('opacity'),\n          // for active context clicks\n          isActive: node.get('isActive'),\n          isTraversal: node.get('isTraversal'),\n          modelId: record.get('id'),\n          modelName\n        });\n\n        options.isMaximized = this.get('options.isMaximized');\n        shape = new bemap.Circle([points.lat, points.lng], radius, options);\n        parentLabelFormatted = '<table  style=\"position:relative;\"><tr></tr><tr>' + '<td rowspan=\"2\" style=\"font-weight: bold; font-size: 0.7em;text-align: center;\">' + parentLabel + '</td><td rowspan=\"2\">&nbsp;</td><td rowspan=\"2\">' + label + '</td></tr></table>';\n      } else {\n        defaultOptions = _polygon.default[style] || {};\n        points = [node.get('points')];\n\n        const options = _lodash.default.merge(defaultOptions, nodeOptions, {\n          label,\n          opacity: node.get('opacity'),\n          // for active context clicks\n          isActive: node.get('isActive'),\n          isTraversal: node.get('isTraversal'),\n          modelId: record.get('id'),\n          modelName\n        });\n\n        shape = new bemap.Polygon(points, options);\n      }\n\n      shape.setStyle(style);\n\n      if (isMaximized) {\n        node.set('shapeMaximized', shape);\n      } else {\n        node.set('shape', shape);\n      }\n\n      shape.addTo(map);\n      shape.bindTooltip(parentLabelFormatted, {\n        permanent: true,\n        direction: 'center',\n        opacity: 0.4\n      }).openTooltip();\n      return true;\n    },\n\n    updateShape(node, isMaximized) {\n      const opacity = node.get('opacity');\n      const shape = isMaximized ? node.get('shapeMaximized') : node.get('shape');\n      const label = node.get('label');\n      const parentLabel = node.get('parentLabel');\n      let style = node.get('style');\n      const record = node.get('record');\n      const noOfPoints = node.get('noOfPoints');\n\n      if (typeof record.get('style') !== 'undefined' && record.get('style')) {\n        style = record.get('style');\n      }\n\n      let parentLabelFormatted = '<table  style=\"position:relative;\"><tr></tr><tr>' + '<td rowspan=\"2\" style=\"font-weight: bold; font-size: 2em;text-align: center;\">' + parentLabel + '</td><td rowspan=\"2\">&nbsp;</td><td rowspan=\"2\">' + label + '</td></tr></table>';\n      let defaultOptions;\n\n      if (noOfPoints === 1) {\n        defaultOptions = _circle.default[style] || {};\n        parentLabelFormatted = '<table  style=\"position:relative;\"><tr></tr><tr>' + '<td rowspan=\"2\" style=\"font-weight: bold; font-size: 0.7em;text-align: center;\">' + parentLabel + '</td><td rowspan=\"2\">&nbsp;</td><td rowspan=\"2\">' + label + '</td></tr></table>';\n      } else {\n        defaultOptions = _polygon.default[style] || {};\n      }\n\n      const nodeOptions = node.get('options') || {};\n      const modelName = record.constructor.modelName;\n\n      const options = _lodash.default.merge(defaultOptions, nodeOptions, {\n        label,\n        opacity: opacity,\n        // for active context clicks\n        isActive: node.get('isActive'),\n        isTraversal: node.get('isTraversal'),\n        modelId: record.get('id'),\n        modelName\n      });\n\n      shape.setStyle(options);\n      shape.setTooltipContent(parentLabelFormatted);\n      return true;\n    },\n\n    removeShape(node, isMaximized) {\n      const shape = isMaximized ? node.get('shapeMaximized') : node.get('shape');\n      shape.remove();\n\n      if (isMaximized) {\n        node.set('shapeMaximized', null);\n      } else {\n        node.set('shape', null);\n      }\n\n      return true;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/data-joins/table\", [\"exports\", \"adept-iq/classes/data-joins/base-table\", \"adept-iq/config/environment\"], function (_exports, _baseTable, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const QUEUE_ID = 'wgt-refresh';\n\n  var _default = _baseTable.default.extend({\n    // passed in from generic table component\n    table: null,\n    activeContext: null,\n    work: null,\n    Row: null,\n    forceSync: _environment.default.APP.test,\n\n    initialize(record) {\n      const Row = this.get('Row'); // a row class passed into data join\n\n      const row = new Row(record);\n      return row;\n    },\n\n    clear() {\n      this.join([], {\n        sync: true\n      });\n    },\n\n    join(collection) {\n      let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        sync: false\n      };\n\n      if (opts.sync || this.get('forceSync')) {\n        this._super(...arguments); // at this point, table probably contains some destroyed rows\n\n\n        const tableRows = this.get('table.rows');\n        const rows = this.get('nodes');\n        if (!tableRows || !rows) return false; // skip update if possible\n\n        if (rows.length === tableRows.length) {\n          let isDifferent = false;\n\n          for (let i = 0; i < rows.length; i++) {\n            if (rows[i] !== tableRows[i]) {\n              isDifferent = true;\n              break;\n            }\n          }\n\n          if (!isDifferent) return false;\n        }\n\n        tableRows.setObjects(rows);\n        const queue = this.get('work.queues').findBy('name', QUEUE_ID);\n\n        if (queue) {\n          queue.addJob({\n            collection,\n            dataJoin: this\n          });\n          this.get('work').start();\n        } // FIXME: this causes an exception purporting that a tag cannot be\n        // created for a destroyed element. This should not be the case.\n        // Possibly an Ember or LightTable bug.\n        // unloads memory from exited rows\n        // this.purgeCache();\n\n\n        return true;\n      }\n\n      const queue = this.get('work.queues').findBy('name', QUEUE_ID);\n\n      if (!queue) {\n        throw new Error(`queue '${QUEUE_ID}' not registered`);\n      }\n\n      queue.addJob({\n        collection,\n        dataJoin: this\n      });\n      this.get('work').start();\n    },\n\n    exit(row) {\n      row.setProperties({\n        isSelected: false,\n        isLastChecked: false,\n        selected: false\n      });\n    },\n\n    release(row) {\n      row.destroy();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/impact-stop\", [\"exports\", \"adept-iq/utils/unwrapProxy\", \"@mapbox/polyline\"], function (_exports, _unwrapProxy, _polyline) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // will need this to decode impact payload polylines\n  var _default = Ember.Object.extend({\n    // passed by the impact payload\n    id: null,\n    eta: null,\n    promiseTime: null,\n    otpValue: null,\n    polyline: null,\n    mrt: null,\n    stopPoint: null,\n    // original values obtained by wrapping stopPoint class\n    status: Ember.computed.readOnly('stopPoint.status'),\n    stopType: Ember.computed.readOnly('stopPoint.stopType'),\n    // `stopPoint.computedPromiseTime` reads the trip's promise time as stored in the DB, which is\n    // what a trip waitlisted after being scheduled keeps and should keep showing. A trip waitlisted\n    // without one instead has a promise time assigned by the back end as part of the transfer\n    // solution, which only ever reaches us in the impact payload -- so use that as a fallback.\n    computedPromiseTime: Ember.computed('promiseTime', 'stopPoint.{isPick,computedPromiseTime}', function () {\n      if (!this.get('stopPoint.isPick')) return '';\n      return this.get('stopPoint.computedPromiseTime') || this.get('promiseTime') || '';\n    }),\n    lat: Ember.computed('stopPoint.{estimatedBreakLatLng,place.location.lat,etaNavStopPoint.lat}', function () {\n      const stopPointLat = this.get('stopPoint.place.location.lat');\n      const breakLatLng = this.get('stopPoint.estimatedBreakLatLng');\n      const etaLat = this.get('etaNavStopPoint.lat'); // Remove For AVLM 2.1\n\n      if (!stopPointLat && breakLatLng) {\n        return breakLatLng[0];\n      }\n\n      if (etaLat) return etaLat;\n      return stopPointLat;\n    }),\n    lng: Ember.computed('stopPoint.{estimatedBreakLatLng,place.location.lng,etaNavStopPoint.lng}', function () {\n      const stopPointLng = this.get('stopPoint.place.location.lng');\n      const breakLatLng = this.get('stopPoint.estimatedBreakLatLng');\n      const etaLng = this.get('etaNavStopPoint.lng');\n\n      if (!stopPointLng && breakLatLng) {\n        return breakLatLng[1];\n      }\n\n      if (etaLng) return etaLng;\n      return stopPointLng;\n    }),\n    currentPolyline: Ember.computed('stopPoint.polyline', 'polyline', function () {\n      const polyline = this.get('polyline');\n      const stopPointPolyline = (0, _unwrapProxy.unwrapProxy)(this.get('stopPoint.polyline'));\n\n      if (polyline) {\n        return {\n          coords: _polyline.default.decode(polyline)\n        };\n      }\n\n      return stopPointPolyline;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/json-api-serializer/JSONAPISerializer\", [\"exports\", \"adept-iq/classes/json-api-serializer/helpers\", \"adept-iq/classes/json-api-serializer/lru-cache\", \"adept-iq/classes/json-api-serializer/validator\"], function (_exports, _helpers, _lruCache, _validator) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable */\n  const {\n    validateOptions,\n    validateDynamicTypeOptions,\n    validateError\n  } = _validator.default;\n  const {\n    pick,\n    isEmpty,\n    omit,\n    isPlainObject,\n    isObjectLike,\n    transform,\n    get,\n    set,\n    toCamelCase,\n    toKebabCase,\n    toSnakeCase\n  } = _helpers.default;\n  /**\n   * JSONAPISerializer class.\n   *\n   * @example\n   * const JSONAPISerializer = require('json-api-serializer');\n   *\n   * // Create an instance of JSONAPISerializer with default settings\n   * const serializer = new JSONAPISerializer();\n   *\n   * @class JSONAPISerializer\n   * @param {Options} [opts] Global options.\n   */\n\n  class JSONAPISerializer {\n    constructor(opts) {\n      this.opts = opts || {};\n      this.schemas = {}; // Size of cache used for convertCase, 0 results in an infinitely sized cache\n\n      const {\n        convertCaseCacheSize = 5000\n      } = this.opts; // Cache of strings to convert to their converted values per conversion type\n\n      this.convertCaseMap = {\n        camelCase: new _lruCache.default(convertCaseCacheSize),\n        kebabCase: new _lruCache.default(convertCaseCacheSize),\n        snakeCase: new _lruCache.default(convertCaseCacheSize)\n      };\n    }\n    /**\n     * Register a resource with its type, schema name, and configuration options.\n     *\n     * @function JSONAPISerializer#register\n     * @param {string} type resource's type.\n     * @param {string|Options} [schema='default'] schema name.\n     * @param {Options} [options] options.\n     */\n\n\n    register(type, schema, options) {\n      if (typeof schema === 'object') {\n        options = schema;\n        schema = 'default';\n      }\n\n      schema = schema || 'default';\n      options = { ...this.opts,\n        ...options\n      };\n      this.schemas[type] = this.schemas[type] || {};\n      this.schemas[type][schema] = validateOptions(options);\n    }\n    /**\n     * Serialze input data to a JSON API compliant response.\n     * Input data can be a simple object or an array of objects.\n     *\n     * @see {@link http://jsonapi.org/format/#document-top-level}\n     * @function JSONAPISerializer#serialize\n     * @param {string|DynamicTypeOptions} type resource's type as string or a dynamic type options as object.\n     * @param {object|object[]} data input data.\n     * @param {string|object} [schema='default'] resource's schema name.\n     * @param {object} [extraData] additional data that can be used in topLevelMeta options.\n     * @param {boolean} [excludeData] boolean that can be set to exclude the `data` property in serialized data.\n     * @param {object} [overrideSchemaOptions={}] additional schema options, a map of types with options to override.\n     * @returns {object|object[]} serialized data.\n     */\n\n\n    serialize(type, data, schema, extraData, excludeData) {\n      let overrideSchemaOptions = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      // Support optional arguments (schema)\n      if (arguments.length === 3) {\n        if (typeof schema === 'object') {\n          extraData = schema;\n          schema = 'default';\n        }\n      }\n\n      schema = schema || 'default';\n      extraData = extraData || {};\n      const included = new Map();\n      const isDynamicType = typeof type === 'object';\n      let options;\n\n      if (isDynamicType) {\n        // Dynamic type option\n        options = validateDynamicTypeOptions(type);\n      } else {\n        // Serialize data with the defined type\n        if (!this.schemas[type]) {\n          throw new Error(`No type registered for ${type}`);\n        }\n\n        if (schema && !this.schemas[type][schema]) {\n          throw new Error(`No schema ${schema} registered for ${type}`);\n        }\n\n        options = this.schemas[type][schema];\n      }\n\n      const overrideType = isDynamicType ? type.type : type;\n\n      if (overrideSchemaOptions[overrideType]) {\n        // Merge default (registered) options and extra options into new options object\n        options = { ...options,\n          ...overrideSchemaOptions[overrideType]\n        };\n      }\n\n      let dataProperty;\n\n      if (excludeData) {\n        dataProperty = undefined;\n      } else if (isDynamicType) {\n        dataProperty = this.serializeMixedResource(options, data, included, extraData, overrideSchemaOptions);\n      } else {\n        dataProperty = this.serializeResource(type, data, options, included, extraData, overrideSchemaOptions);\n      }\n\n      return {\n        jsonapi: options.jsonapiObject ? {\n          version: '1.0'\n        } : undefined,\n        meta: this.processOptionsValues(data, extraData, options.topLevelMeta, 'extraData'),\n        links: this.processOptionsValues(data, extraData, options.topLevelLinks, 'extraData'),\n        data: dataProperty,\n        included: included.size ? [...included.values()] : undefined\n      };\n    }\n    /**\n     * Asynchronously serialize input data to a JSON API compliant response.\n     * Input data can be a simple object or an array of objects.\n     *\n     * @see {@link http://jsonapi.org/format/#document-top-level}\n     * @function JSONAPISerializer#serializeAsync\n     * @param {string|DynamicTypeOptions} type resource's type as string or a dynamic type options as object.\n     * @param {object|object[]} data input data.\n     * @param {string} [schema='default'] resource's schema name.\n     * @param {object} [extraData] additional data that can be used in topLevelMeta options.\n     * @param {boolean} [excludeData] boolean that can be set to exclude the `data` property in serialized data.\n     * @param {object} [overrideSchemaOptions={}] additional schema options, a map of types with options to override.\n     * @returns {Promise} resolves with serialized data.\n     */\n\n\n    serializeAsync(type, data, schema, extraData, excludeData) {\n      let overrideSchemaOptions = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      // Support optional arguments (schema)\n      if (arguments.length === 3) {\n        if (typeof schema === 'object') {\n          extraData = schema;\n          schema = 'default';\n        }\n      }\n\n      schema = schema || 'default';\n      extraData = extraData || {};\n      const included = new Map();\n      const isDataArray = Array.isArray(data);\n      const isDynamicType = typeof type === 'object';\n      const arrayData = isDataArray ? data : [data];\n      const serializedData = [];\n      const that = this;\n      let i = 0;\n      let options;\n\n      if (isDynamicType) {\n        options = validateDynamicTypeOptions(type);\n      } else {\n        if (!this.schemas[type]) {\n          throw new Error(`No type registered for ${type}`);\n        }\n\n        if (schema && !this.schemas[type][schema]) {\n          throw new Error(`No schema ${schema} registered for ${type}`);\n        }\n\n        options = this.schemas[type][schema];\n      }\n\n      const overrideType = isDynamicType ? type.type : type;\n\n      if (overrideSchemaOptions[overrideType]) {\n        // Merge default (registered) options and extra options into new options object\n        options = { ...options,\n          ...overrideSchemaOptions[overrideType]\n        };\n      }\n\n      return new Promise((resolve, reject) => {\n        /**\n         * Non-blocking serialization using the immediate queue.\n         *\n         * @see {@link https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/}\n         */\n        function next() {\n          setImmediate(() => {\n            if (excludeData) {\n              return resolve();\n            }\n\n            if (i >= arrayData.length) {\n              return resolve(serializedData);\n            }\n\n            try {\n              // Serialize a single item of the data-array.\n              const serializedItem = isDynamicType ? that.serializeMixedResource(type, arrayData[i], included, extraData, overrideSchemaOptions) : that.serializeResource(type, arrayData[i], options, included, extraData, overrideSchemaOptions);\n\n              if (serializedItem !== null) {\n                serializedData.push(serializedItem);\n              }\n\n              i += 1;\n              return next();\n            } catch (e) {\n              return reject(e);\n            }\n          });\n        }\n\n        next();\n      }).then(result => {\n        let dataProperty;\n\n        if (typeof result === 'undefined') {\n          dataProperty = undefined;\n        } else if (isDataArray) {\n          dataProperty = result;\n        } else {\n          dataProperty = result[0] || null;\n        }\n\n        return {\n          jsonapi: options.jsonapiObject ? {\n            version: '1.0'\n          } : undefined,\n          meta: this.processOptionsValues(data, extraData, options.topLevelMeta, 'extraData'),\n          links: this.processOptionsValues(data, extraData, options.topLevelLinks, 'extraData'),\n          // If the source data was an array, we just pass the serialized data array.\n          // Otherwise we try to take the first (and only) item of it or pass null.\n          data: dataProperty,\n          included: included.size ? [...included.values()] : undefined\n        };\n      });\n    }\n    /**\n     * Deserialize JSON API document data.\n     * Input data can be a simple object or an array of objects.\n     *\n     * @function JSONAPISerializer#deserialize\n     * @param {string|DynamicTypeOptions} type resource's type as string or a dynamic type options as object.\n     * @param {object} data JSON API input data.\n     * @param {string} [schema='default'] resource's schema name.\n     * @returns {object} deserialized data.\n     */\n\n\n    deserialize(type, data, schema) {\n      schema = schema || 'default';\n\n      if (typeof type === 'object') {\n        type = validateDynamicTypeOptions(type);\n      } else {\n        if (!this.schemas[type]) {\n          throw new Error(`No type registered for ${type}`);\n        }\n\n        if (schema && !this.schemas[type][schema]) {\n          throw new Error(`No schema ${schema} registered for ${type}`);\n        }\n      }\n\n      let deserializedData = {};\n\n      if (data.data) {\n        deserializedData = Array.isArray(data.data) ? data.data.map(resource => this.deserializeResource(type, resource, schema, data.included)) : this.deserializeResource(type, data.data, schema, data.included);\n      }\n\n      return deserializedData;\n    }\n    /**\n     * Asynchronously Deserialize JSON API document data.\n     * Input data can be a simple object or an array of objects.\n     *\n     * @function JSONAPISerializer#deserializeAsync\n     * @param {string|DynamicTypeOptions} type resource's type as string or a dynamic type options as object.\n     * @param {object} data JSON API input data.\n     * @param {string} [schema='default'] resource's schema name.\n     * @returns {Promise} resolves with serialized data.\n     */\n\n\n    deserializeAsync(type, data, schema) {\n      schema = schema || 'default';\n\n      if (typeof type === 'object') {\n        type = validateDynamicTypeOptions(type);\n      } else {\n        if (!this.schemas[type]) {\n          throw new Error(`No type registered for ${type}`);\n        }\n\n        if (schema && !this.schemas[type][schema]) {\n          throw new Error(`No schema ${schema} registered for ${type}`);\n        }\n      }\n\n      const isDataArray = Array.isArray(data.data);\n      let i = 0;\n      const arrayData = isDataArray ? data.data : [data.data];\n      const deserializedData = [];\n      const that = this;\n      return new Promise((resolve, reject) => {\n        /**\n         * Non-blocking deserialization using the immediate queue.\n         *\n         * @see {@link https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/}\n         */\n        function next() {\n          setImmediate(() => {\n            if (i >= arrayData.length) {\n              return resolve(isDataArray ? deserializedData : deserializedData[0]);\n            }\n\n            try {\n              // Serialize a single item of the data-array.\n              const deserializedItem = that.deserializeResource(type, arrayData[i], schema, data.included);\n              deserializedData.push(deserializedItem);\n              i += 1;\n              return next();\n            } catch (e) {\n              return reject(e);\n            }\n          });\n        }\n\n        next();\n      });\n    }\n    /**\n     * Serialize any error into a JSON API error document.\n     * Input data can be:\n     *  - An `Error` or an array of `Error` instances.\n     *  - A JSON API error object or an array of JSON API error objects.\n     *\n     * @see {@link http://jsonapi.org/format/#errors}\n     * @function JSONAPISerializer#serializeError\n     * @param {Error|Error[]|object|object[]} error an Error, an array of Error, a JSON API error object, an array of JSON API error object.\n     * @returns {object} resolves with serialized error.\n     */\n\n\n    serializeError(error) {\n      return {\n        errors: Array.isArray(error) ? error.map(err => validateError(err)) : [validateError(error)]\n      };\n    }\n    /**\n     * Deserialize a single JSON API resource.\n     * Input data must be a simple object.\n     *\n     * @function JSONAPISerializer#deserializeResource\n     * @private\n     * @param {string|DynamicTypeOptions} type resource's type as string or an object with a dynamic type resolved from data.\n     * @param {object} data JSON API resource data.\n     * @param {string} [schema='default'] resource's schema name.\n     * @param {Map<string, object>} included Included resources.\n     * @param {string[]} lineage resource identifiers already deserialized to prevent circular references.\n     * @returns {object} deserialized data.\n     */\n\n\n    deserializeResource(type, data) {\n      let schema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default';\n      let included = arguments.length > 3 ? arguments[3] : undefined;\n      let lineage = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n\n      if (typeof type === 'object') {\n        type = typeof type.type === 'function' ? type.type(data) : get(data, type.type);\n      }\n\n      if (!type) {\n        throw new Error(`No type can be resolved from data: ${JSON.stringify(data)}`);\n      }\n\n      if (!this.schemas[type]) {\n        throw new Error(`No type registered for ${type}`);\n      }\n\n      const options = this.schemas[type][schema];\n      let deserializedData = {};\n      deserializedData[options.id] = data.id || undefined;\n\n      if (data.attributes && options.whitelistOnDeserialize.length) {\n        data.attributes = pick(data.attributes, options.whitelistOnDeserialize);\n      }\n\n      if (data.attributes && options.blacklistOnDeserialize.length) {\n        data.attributes = omit(data.attributes, options.blacklistOnDeserialize);\n      }\n\n      Object.assign(deserializedData, data.attributes); // Deserialize relationships\n\n      if (data.relationships) {\n        Object.keys(data.relationships).forEach(relationshipProperty => {\n          const relationship = data.relationships[relationshipProperty];\n          const relationshipKey = options.unconvertCase ? this._convertCase(relationshipProperty, options.unconvertCase) : relationshipProperty;\n          const relationshipOptions = options.relationships[relationshipKey];\n\n          const deserializeFunction = relationshipData => {\n            if (relationshipOptions && relationshipOptions.deserialize) {\n              return relationshipOptions.deserialize(relationshipData);\n            }\n\n            return relationshipData.id;\n          };\n\n          if (relationship.data !== undefined) {\n            if (relationship.data === null) {\n              // null data\n              set(deserializedData, relationshipOptions && relationshipOptions.alternativeKey || relationshipKey, null);\n            } else {\n              if (relationshipOptions && relationshipOptions.alternativeKey || !included) {\n                set(deserializedData, relationshipOptions && relationshipOptions.alternativeKey || relationshipKey, Array.isArray(relationship.data) ? relationship.data.map(d => deserializeFunction(d)) : deserializeFunction(relationship.data));\n              }\n\n              if (included) {\n                const deserializeIncludedRelationship = relationshipData => {\n                  const lineageCopy = [...lineage]; // Prevent circular relationships\n\n                  const lineageKey = `${relationshipData.type}-${relationshipData.id}`;\n                  const isCircular = lineageCopy.includes(lineageKey);\n\n                  if (isCircular) {\n                    return deserializeFunction(relationshipData);\n                  }\n\n                  lineageCopy.push(lineageKey);\n                  return this.deserializeIncluded(relationshipData.type, relationshipData.id, relationshipOptions, included, lineageCopy);\n                };\n\n                set(deserializedData, relationshipKey, Array.isArray(relationship.data) ? relationship.data.map(d => deserializeIncludedRelationship(d)) : deserializeIncludedRelationship(relationship.data));\n              }\n            }\n          }\n        });\n      }\n\n      if (options.unconvertCase) {\n        deserializedData = this._convertCase(deserializedData, options.unconvertCase);\n      }\n\n      if (data.links) {\n        deserializedData.links = data.links;\n      }\n\n      if (data.meta) {\n        deserializedData.meta = data.meta;\n      }\n\n      if (options.afterDeserialize) {\n        return options.afterDeserialize(deserializedData);\n      }\n\n      return deserializedData;\n    }\n    /**\n     * Deserialize included\n     *\n     * @function JSONAPISerializer#deserializeIncluded\n     * @private\n     * @param {string} type resource's type as string or an object with a dynamic type resolved from data.\n     * @param {string} id identifier of the resource.\n     * @param {RelationshipOptions} relationshipOpts relationship option.\n     * @param {Map<string, object>} included Included resources.\n     * @param {string[]} lineage resource identifiers already deserialized to prevent circular references.\n     * @returns {object} deserialized data.\n     */\n\n\n    deserializeIncluded(type, id, relationshipOpts, included, lineage) {\n      const includedResource = included.find(resource => resource.type === type && resource.id === id);\n\n      if (!includedResource) {\n        return id;\n      }\n\n      return this.deserializeResource(type, includedResource, relationshipOpts.schema, included, lineage);\n    }\n    /**\n     * Serialize resource objects.\n     *\n     * @see {@link http://jsonapi.org/format/#document-resource-objects}\n     * @function JSONAPISerializer#serializeDocument\n     * @private\n     * @param {string} type resource's type.\n     * @param {object|object[]} data input data.\n     * @param {Options} options resource's configuration options.\n     * @param {Map<string, object>} [included] Included resources.\n     * @param {object} [extraData] additional data.\n     * @param {object} [overrideSchemaOptions={}] additional schema options, a map of types with options to override.\n     * @returns {object|object[]} serialized data.\n     */\n\n\n    serializeResource(type, data, options, included, extraData) {\n      let overrideSchemaOptions = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      if (isEmpty(data)) {\n        // Return [] or null\n        return Array.isArray(data) ? data : null;\n      }\n\n      if (Array.isArray(data)) {\n        return data.map(d => this.serializeResource(type, d, options, included, extraData, overrideSchemaOptions));\n      }\n\n      if (options.beforeSerialize) {\n        data = options.beforeSerialize(data);\n      }\n\n      return {\n        type,\n        id: data[options.id] ? data[options.id].toString() : undefined,\n        attributes: this.serializeAttributes(data, options),\n        relationships: this.serializeRelationships(data, options, included, extraData, overrideSchemaOptions),\n        meta: this.processOptionsValues(data, extraData, options.meta),\n        links: this.processOptionsValues(data, extraData, options.links)\n      };\n    }\n    /**\n     * Serialize mixed resource object with a dynamic type resolved from data\n     *\n     * @see {@link http://jsonapi.org/format/#document-resource-objects}\n     * @function JSONAPISerializer#serializeMixedResource\n     * @private\n     * @param {DynamicTypeOptions} typeOption a dynamic type options.\n     * @param {object|object[]} data input data.\n     * @param {Map<string, object>} [included] Included resources.\n     * @param {object} [extraData] additional data.\n     * @param {object} [overrideSchemaOptions={}] additional schema options, a map of types with options to override.\n     * @returns {object|object[]} serialized data.\n     */\n\n\n    serializeMixedResource(typeOption, data, included, extraData) {\n      let overrideSchemaOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n      if (isEmpty(data)) {\n        // Return [] or null\n        return Array.isArray(data) ? data : null;\n      }\n\n      if (Array.isArray(data)) {\n        return data.map(d => this.serializeMixedResource(typeOption, d, included, extraData, overrideSchemaOptions));\n      } // Resolve type from data (can be a string or a function deriving a type-string from each data-item)\n\n\n      const type = typeof typeOption.type === 'function' ? typeOption.type(data) : get(data, typeOption.type);\n\n      if (!type) {\n        throw new Error(`No type can be resolved from data: ${JSON.stringify(data)}`);\n      }\n\n      if (!this.schemas[type]) {\n        throw new Error(`No type registered for ${type}`);\n      }\n\n      let options = this.schemas[type].default;\n\n      if (overrideSchemaOptions[type]) {\n        // Merge default (registered) options and extra options into new options object\n        options = { ...options,\n          ...overrideSchemaOptions[type]\n        };\n      }\n\n      return this.serializeResource(type, data, options, included, extraData, overrideSchemaOptions);\n    }\n    /**\n     * Serialize 'attributes' key of resource objects: an attributes object representing some of the resource's data.\n     *\n     * @see {@link http://jsonapi.org/format/#document-resource-object-attributes}\n     * @function JSONAPISerializer#serializeAttributes\n     * @private\n     * @param {object|object[]} data input data.\n     * @param {Options} options resource's configuration options.\n     * @returns {object} serialized attributes.\n     */\n\n\n    serializeAttributes(data, options) {\n      if (options.whitelist && options.whitelist.length) {\n        data = pick(data, options.whitelist);\n      } // Support alternativeKey options for relationships\n\n\n      const alternativeKeys = [];\n      Object.keys(options.relationships).forEach(key => {\n        const rOptions = options.relationships[key];\n\n        if (rOptions.alternativeKey) {\n          alternativeKeys.push(rOptions.alternativeKey);\n        }\n      }); // Remove unwanted keys\n\n      let serializedAttributes = omit(data, [options.id, ...Object.keys(options.relationships), ...alternativeKeys, ...options.blacklist]);\n\n      if (options.convertCase) {\n        serializedAttributes = this._convertCase(serializedAttributes, options.convertCase);\n      }\n\n      return Object.keys(serializedAttributes).length ? serializedAttributes : undefined;\n    }\n    /**\n     * Serialize 'relationships' key of resource objects: a relationships object describing relationships between the resource and other JSON API resources.\n     *\n     * @see {@link http://jsonapi.org/format/#document-resource-object-relationships}\n     * @function JSONAPISerializer#serializeRelationships\n     * @private\n     * @param {object|object[]} data input data.\n     * @param {Options} options resource's configuration options.\n     * @param {Map<string, object>} [included]  Included resources.\n     * @param {object} [extraData] additional data.\n     * @param {object} [overrideSchemaOptions={}] additional schema options, a map of types with options to override.\n     * @returns {object} serialized relationships.\n     */\n\n\n    serializeRelationships(data, options, included, extraData) {\n      let overrideSchemaOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n      const serializedRelationships = {};\n      Object.keys(options.relationships).forEach(relationship => {\n        const relationshipOptions = options.relationships[relationship]; // Support alternativeKey options for relationships\n\n        let relationshipKey = relationship;\n\n        if (!data[relationship] && relationshipOptions.alternativeKey) {\n          relationshipKey = relationshipOptions.alternativeKey;\n        }\n\n        const serializeRelationship = {\n          links: this.processOptionsValues(data, extraData, relationshipOptions.links),\n          meta: this.processOptionsValues(data, extraData, relationshipOptions.meta),\n          data: this.serializeRelationship(relationshipOptions.type, relationshipOptions.schema, get(data, relationshipKey), included, data, extraData, overrideSchemaOptions)\n        };\n\n        if (serializeRelationship.data !== undefined || serializeRelationship.links !== undefined || serializeRelationship.meta !== undefined) {\n          // Convert case\n          relationship = options.convertCase ? this._convertCase(relationship, options.convertCase) : relationship;\n          serializedRelationships[relationship] = serializeRelationship;\n        }\n      });\n      return Object.keys(serializedRelationships).length ? serializedRelationships : undefined;\n    }\n    /**\n     * Serialize 'data' key of relationship's resource objects.\n     *\n     * @see {@link http://jsonapi.org/format/#document-resource-object-linkage}\n     * @function JSONAPISerializer#serializeRelationship\n     * @private\n     * @param {string|Function} rType the relationship's type.\n     * @param {string} rSchema the relationship's schema\n     * @param {object|object[]} rData relationship's data.\n     * @param {Map<string, object>} [included] Included resources.\n     * @param {object} [data] the entire resource's data.\n     * @param {object} [extraData] additional data.\n     * @param {object} [overrideSchemaOptions={}] additional schema options, a map of types with options to override.\n     * @returns {object|object[]} serialized relationship data.\n     */\n\n\n    serializeRelationship(rType, rSchema, rData, included, data, extraData) {\n      let overrideSchemaOptions = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};\n      included = included || new Map();\n      const schema = rSchema || 'default'; // No relationship data\n\n      if (rData === undefined || rData === null) {\n        return rData;\n      }\n\n      if (typeof rData === 'object' && isEmpty(rData)) {\n        // Return [] or null\n        return Array.isArray(rData) ? [] : null;\n      }\n\n      if (Array.isArray(rData)) {\n        return rData.map(d => this.serializeRelationship(rType, schema, d, included, data, extraData, overrideSchemaOptions));\n      } // Resolve relationship type\n\n\n      const type = typeof rType === 'function' ? rType(rData, data) : rType;\n\n      if (!type) {\n        throw new Error(`No type can be resolved from relationship's data: ${JSON.stringify(rData)}`);\n      }\n\n      if (!this.schemas[type]) {\n        throw new Error(`No type registered for \"${type}\"`);\n      }\n\n      if (!this.schemas[type][schema]) {\n        throw new Error(`No schema \"${schema}\" registered for type \"${type}\"`);\n      }\n\n      let rOptions = this.schemas[type][schema];\n\n      if (overrideSchemaOptions[type]) {\n        // Merge default (registered) options and extra options into new options object\n        rOptions = { ...rOptions,\n          ...overrideSchemaOptions[type]\n        };\n      }\n\n      const serializedRelationship = {\n        type\n      }; // Support for unpopulated relationships (an id, or array of ids)\n\n      if (!isObjectLike(rData)) {\n        serializedRelationship.id = rData.toString();\n      } else {\n        const serializedIncluded = this.serializeResource(type, rData, rOptions, included, extraData, overrideSchemaOptions);\n        serializedRelationship.id = serializedIncluded.id;\n        const identifier = `${type}-${serializedRelationship.id}`; // Not include relationship object which only contains an id\n\n        if (serializedIncluded.attributes && Object.keys(serializedIncluded.attributes).length) {\n          // Merge relationships data if already included\n          if (included.has(identifier)) {\n            const alreadyIncluded = included.get(identifier);\n\n            if (serializedIncluded.relationships) {\n              alreadyIncluded.relationships = { ...alreadyIncluded.relationships,\n                ...serializedIncluded.relationships\n              };\n              included.set(identifier, alreadyIncluded);\n            }\n          } else {\n            included.set(identifier, serializedIncluded);\n          }\n        }\n      }\n\n      return serializedRelationship;\n    }\n    /**\n     * Process options values.\n     * Allows options to be an object or a function with 1 or 2 arguments\n     *\n     * @function JSONAPISerializer#processOptionsValues\n     * @private\n     * @param {object} data data passed to functions options.\n     * @param {object} extraData additional data passed to functions options.\n     * @param {object} options configuration options.\n     * @param {string} [fallbackModeIfOneArg] fallback mode if only one argument is passed to function.\n     * Avoid breaking changes with issue https://github.com/danivek/json-api-serializer/issues/27.\n     * @returns {object} processed options.\n     */\n\n\n    processOptionsValues(data, extraData, options, fallbackModeIfOneArg) {\n      let processedOptions = {};\n\n      if (options && typeof options === 'function') {\n        // Backward compatible with functions with one 'extraData' argument\n        processedOptions = fallbackModeIfOneArg === 'extraData' && options.length === 1 ? options(extraData) : options(data, extraData);\n      } else {\n        Object.keys(options).forEach(key => {\n          let processedValue = {};\n\n          if (options[key] && typeof options[key] === 'function') {\n            // Backward compatible with functions with one 'extraData' argument\n            processedValue = fallbackModeIfOneArg === 'extraData' && options[key].length === 1 ? options[key](extraData) : options[key](data, extraData);\n          } else {\n            processedValue = options[key];\n          }\n\n          Object.assign(processedOptions, {\n            [key]: processedValue\n          });\n        });\n      }\n\n      return processedOptions && Object.keys(processedOptions).length ? processedOptions : undefined;\n    }\n    /**\n     * Recursively convert object keys case\n     *\n     * @function JSONAPISerializer#_convertCase\n     * @private\n     * @param {object|object[]|string} data to convert\n     * @param {string} convertCaseOptions can be snake_case', 'kebab-case' or 'camelCase' format.\n     * @returns {object} Object with it's keys converted as per the convertCaseOptions\n     */\n\n\n    _convertCase(data, convertCaseOptions) {\n      if (Array.isArray(data)) {\n        return data.map(item => {\n          if (item && (Array.isArray(item) || isPlainObject(item))) {\n            return this._convertCase(item, convertCaseOptions);\n          }\n\n          return item;\n        });\n      }\n\n      if (isPlainObject(data)) {\n        return transform(data, (result, value, key) => {\n          let converted;\n\n          if (value && (Array.isArray(value) || isPlainObject(value))) {\n            converted = this._convertCase(value, convertCaseOptions);\n          } else {\n            converted = value;\n          }\n\n          result[this._convertCase(key, convertCaseOptions)] = converted;\n          return result;\n        }, {});\n      }\n\n      if (typeof data === 'string') {\n        let converted;\n\n        switch (convertCaseOptions) {\n          case 'snake_case':\n            converted = this.convertCaseMap.snakeCase.get(data);\n\n            if (!converted) {\n              converted = toSnakeCase(data);\n              this.convertCaseMap.snakeCase.set(data, converted);\n            }\n\n            break;\n\n          case 'kebab-case':\n            converted = this.convertCaseMap.kebabCase.get(data);\n\n            if (!converted) {\n              converted = toKebabCase(data);\n              this.convertCaseMap.kebabCase.set(data, converted);\n            }\n\n            break;\n\n          case 'camelCase':\n            converted = this.convertCaseMap.camelCase.get(data);\n\n            if (!converted) {\n              converted = toCamelCase(data);\n              this.convertCaseMap.camelCase.set(data, converted);\n            }\n\n            break;\n\n          default: // Do nothing\n\n        }\n\n        return converted;\n      }\n\n      return data;\n    }\n\n  }\n  /**\n   * @typedef {object} Options\n   * @property {string} [id='id'] the key to use as the reference. Default = 'id'\n   * @property {string[]} [blacklist=[]] an array of blacklisted attributes. Default = []\n   * @property {string[]} [whitelist=[]] an array of whitelisted attributes. Default = []\n   * @property {boolean} [jsonapiObject=true] enable/Disable JSON API Object. Default = true\n   * @property {Function|object} [links] describes the links inside data\n   * @property {Function|object} [topLevelLinks] describes the top-level links\n   * @property {Function|object} [topLevelMeta] describes the top-level meta\n   * @property {Function|object} [meta] describes resource-level meta\n   * @property {object.<string, RelationshipOptions>} [relationships] an object defining some relationships\n   * @property {string[]} [blacklistOnDeserialize=[]] an array of blacklisted attributes. Default = []\n   * @property {string[]} [whitelistOnDeserialize=[]] an array of whitelisted attributes. Default = []\n   * @property {('kebab-case'|'snake_case'|'camelCase')} [convertCase] case conversion for serializing data\n   * @property {('kebab-case'|'snake_case'|'camelCase')} [unconvertCase] case conversion for deserializing data\n   * @property {number} [convertCaseCacheSize=5000] When using convertCase, a LRU cache is utilized for optimization. The default size of the cache is 5000 per conversion type.\n   * @property {Function} [beforeSerialize] a function to transform data before serialization.\n   * @property {Function} [afterDeserialize] a function to transform data after deserialization.\n   */\n\n  /**\n   * @typedef {object} RelationshipOptions\n   * @property {string|Function} type a string or a function for the type to use for serializing the relationship (type need to be register)\n   * @property {string} [alternativeKey] an alternative key (string or path) to use if relationship key not exist (example: 'author_id' as an alternative key for 'author' relationship)\n   * @property {string} [schema] a custom schema for serializing the relationship. If no schema define, it use the default one.\n   * @property {Function|object} [links] describes the links for the relationship\n   * @property {Function|object} [meta] describes meta that contains non-standard meta-information about the relationship\n   * @property {Function} [deserialize] describes the function which should be used to deserialize a related property which is not included in the JSON:API document\n   */\n\n  /**\n   *\n   * @typedef {object} DynamicTypeOptions\n   * @property {string} id a string for the path to the key to use to determine type or a function deriving a type-string from each data-item.\n   * @property {boolean} [jsonapiObject=true] enable/Disable JSON API Object.\n   * @property {Function|object} [topLevelLinks] describes the top-level links\n   * @property {Function|object} [topLevelMeta] describes the top-level meta.\n   */\n\n\n  var _default = JSONAPISerializer;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/json-api-serializer/helpers\", [\"exports\", \"adept-iq/classes/json-api-serializer/lru-cache\"], function (_exports, _lruCache) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable */\n\n  /* eslint-disable no-sequences */\n\n  /* eslint-disable no-return-assign */\n  // https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_get\n  const get = (obj, path, defaultValue) => {\n    const result = String.prototype.split.call(path, /[,[\\].]+?/).filter(Boolean).reduce((res, key) => res !== null && res !== undefined ? res[key] : res, obj);\n    return result === undefined || result === obj ? defaultValue : result;\n  }; // https://stackoverflow.com/questions/54733539/javascript-implementation-of-lodash-set-method\n\n\n  const set = (obj, path, value) => {\n    if (Object(obj) !== obj) return obj; // When obj is not an object\n    // If not yet an array, get the keys from the string-path\n\n    if (!Array.isArray(path)) path = path.toString().match(/[^.[\\]]+/g) || [];\n    path.slice(0, -1).reduce((a, c, i // Iterate all of them except the last one\n    ) => Object(a[c]) === a[c] // Does the key exist and is its value an object?\n    ? // Yes: then follow that path\n    a[c] : // No: create the key. Is the next key a potential array-index?\n    a[c] = // eslint-disable-next-line no-bitwise\n    Math.abs(path[i + 1]) >> 0 === +path[i + 1] ? [] // Yes: assign a new array object\n    : {}, // No: assign a new plain object\n    obj)[path[path.length - 1]] = value; // Finally assign the value to the last key\n\n    return obj; // Return the top-level object to allow chaining\n  }; // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/pick.md\n\n\n  const pick = (obj, arr) => arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {}); // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/isEmpty.md\n\n\n  const isEmpty = val => val == null || !(Object.keys(val) || val).length; // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/omit.md\n\n\n  const omit = (obj, arr) => Object.keys(obj).filter(k => !arr.includes(k)).reduce((acc, key) => (acc[key] = obj[key], acc), {}); // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/isObjectLike.md\n\n\n  const isObjectLike = val => val !== null && typeof val === 'object'; // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/isPlainObject.md\n\n\n  const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object; // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/transform.md\n\n\n  const transform = (obj, fn, acc) => Object.keys(obj).reduce((a, k) => fn(a, obj[k], k, obj), acc); // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/toKebabCase.md\n\n\n  const toKebabCase = str => str && str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).map(x => x.toLowerCase()).join('-'); // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/toSnakeCase.md\n\n\n  const toSnakeCase = str => str && str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).map(x => x.toLowerCase()).join('_'); // https://github.com/30-seconds/30-seconds-of-code/blob/master/snippets/toCamelCase.md\n\n\n  const toCamelCase = str => {\n    const s = str && str.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g).map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase()).join('');\n    return s.slice(0, 1).toLowerCase() + s.slice(1);\n  };\n\n  var _default = {\n    get,\n    set,\n    pick,\n    isEmpty,\n    omit,\n    isPlainObject,\n    isObjectLike,\n    transform,\n    toKebabCase,\n    toSnakeCase,\n    toCamelCase,\n    LRU: _lruCache.default\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/classes/json-api-serializer/lru-cache\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable */\n  // Influenced by http://jsfiddle.net/2baax9nk/5/\n  class Node {\n    constructor(key, data) {\n      this.key = key;\n      this.data = data;\n      this.previous = null;\n      this.next = null;\n    }\n\n  }\n\n  class LRU {\n    constructor(capacity) {\n      this.capacity = capacity === 0 ? Infinity : capacity;\n      this.map = {};\n      this.head = null;\n      this.tail = null;\n    }\n\n    get(key) {\n      // Existing item\n      if (this.map[key] !== undefined) {\n        // Move to the first place\n        const node = this.map[key];\n\n        this._moveFirst(node); // Return\n\n\n        return node.data;\n      } // Not found\n\n\n      return undefined;\n    }\n\n    set(key, value) {\n      // Existing item\n      if (this.map[key] !== undefined) {\n        // Move to the first place\n        const node = this.map[key];\n        node.data = value;\n\n        this._moveFirst(node);\n\n        return;\n      } // Ensuring the cache is within capacity\n\n\n      if (Object.keys(this.map).length >= this.capacity) {\n        const id = this.tail.key;\n\n        this._removeLast();\n\n        delete this.map[id];\n      } // New Item\n\n\n      const node = new Node(key, value);\n\n      this._add(node);\n\n      this.map[key] = node;\n    }\n\n    _add(node) {\n      node.next = null;\n      node.previous = node.next; // first item\n\n      if (this.head === null) {\n        this.head = node;\n        this.tail = node;\n      } else {\n        // adding to existing items\n        this.head.previous = node;\n        node.next = this.head;\n        this.head = node;\n      }\n    }\n\n    _remove(node) {\n      // only item in the cache\n      if (this.head === node && this.tail === node) {\n        this.tail = null;\n        this.head = this.tail;\n        return;\n      } // remove from head\n\n\n      if (this.head === node) {\n        this.head.next.previous = null;\n        this.head = this.head.next;\n        return;\n      } // remove from tail\n\n\n      if (this.tail === node) {\n        this.tail.previous.next = null;\n        this.tail = this.tail.previous;\n        return;\n      } // remove from middle\n\n\n      node.previous.next = node.next;\n      node.next.previous = node.previous;\n    }\n\n    _moveFirst(node) {\n      this._remove(node);\n\n      this._add(node);\n    }\n\n    _removeLast() {\n      this._remove(this.tail);\n    }\n\n  }\n\n  ;\n  var _default = LRU;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/json-api-serializer/validator\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable */\n\n  /**\n   * Validate and apply default values to resource's configuration options.\n   *\n   * @function validateOptions\n   * @private\n   * @param {object} options Configuration options.\n   * @returns {object} valid configuration options.\n   */\n  function validateOptions(options) {\n    options = {\n      id: 'id',\n      blacklist: [],\n      whitelist: [],\n      links: {},\n      relationships: {},\n      topLevelLinks: {},\n      topLevelMeta: {},\n      meta: {},\n      blacklistOnDeserialize: [],\n      whitelistOnDeserialize: [],\n      jsonapiObject: true,\n      ...options\n    };\n    if (!Array.isArray(options.blacklist)) throw new Error(\"option 'blacklist' must be an array\");\n    if (!Array.isArray(options.whitelist)) throw new Error(\"option 'whitelist' must be an array\");\n    if (typeof options.links !== 'object' && typeof options.links !== 'function') throw new Error(\"option 'links' must be an object or a function\");\n    if (!Array.isArray(options.blacklistOnDeserialize)) throw new Error(\"option 'blacklistOnDeserialize' must be an array\");\n    if (!Array.isArray(options.whitelistOnDeserialize)) throw new Error(\"option 'whitelistOnDeserialize' must be an array\");\n    if (options.topLevelLinks && typeof options.topLevelLinks !== 'object' && typeof options.topLevelLinks !== 'function') throw new Error(\"option 'topLevelLinks' must be an object or a function\");\n    if (options.topLevelMeta && typeof options.topLevelMeta !== 'object' && typeof options.topLevelMeta !== 'function') throw new Error(\"option 'topLevelMeta' must be an object or a function\");\n    if (options.meta && typeof options.meta !== 'object' && typeof options.meta !== 'function') throw new Error(\"option 'meta' must be an object or a function\");\n    if (typeof options.jsonapiObject !== 'boolean') throw new Error(\"option 'jsonapiObject' must a boolean\");\n    if (options.convertCase && !['kebab-case', 'snake_case', 'camelCase'].includes(options.convertCase)) throw new Error(\"option 'convertCase' must be one of 'kebab-case', 'snake_case', 'camelCase'\");\n    if (options.unconvertCase && !['kebab-case', 'snake_case', 'camelCase'].includes(options.unconvertCase)) throw new Error(\"option 'unconvertCase' must be one of 'kebab-case', 'snake_case', 'camelCase'\");\n    if (options.beforeSerialize && typeof options.beforeSerialize !== 'function') throw new Error(\"option 'beforeSerialize' must be function\");\n    if (options.afterDeserialize && typeof options.afterDeserialize !== 'function') throw new Error(\"option 'afterDeserialize' must be function\");\n    const {\n      relationships\n    } = options;\n    Object.keys(relationships).forEach(key => {\n      relationships[key] = {\n        schema: 'default',\n        links: {},\n        meta: {},\n        ...relationships[key]\n      };\n      if (!relationships[key].type) throw new Error(`option 'type' for relationship '${key}' is required`);\n      if (typeof relationships[key].type !== 'string' && typeof relationships[key].type !== 'function') throw new Error(`option 'type' for relationship '${key}' must be a string or a function`);\n      if (relationships[key].alternativeKey && typeof relationships[key].alternativeKey !== 'string') throw new Error(`option 'alternativeKey' for relationship '${key}' must be a string`);\n      if (relationships[key].schema && typeof relationships[key].schema !== 'string') throw new Error(`option 'schema' for relationship '${key}' must be a string`);\n      if (typeof relationships[key].links !== 'object' && typeof relationships[key].links !== 'function') throw new Error(`option 'links' for relationship '${key}' must be an object or a function`);\n      if (typeof relationships[key].meta !== 'object' && typeof relationships[key].meta !== 'function') throw new Error(`option 'meta' for relationship '${key}' must be an object or a function`);\n      if (relationships[key].deserialize && typeof relationships[key].deserialize !== 'function') throw new Error(`option 'deserialize' for relationship '${key}' must be a function`);\n    });\n    return options;\n  }\n  /**\n   * Validate and apply default values to the dynamic type object option.\n   *\n   * @function validateDynamicTypeOptions\n   * @private\n   * @param {object} options dynamic type object option.\n   * @returns {object} valid dynamic type options.\n   */\n\n\n  function validateDynamicTypeOptions(options) {\n    options = {\n      topLevelLinks: {},\n      topLevelMeta: {},\n      jsonapiObject: true,\n      ...options\n    };\n    if (!options.type) throw new Error(\"option 'type' is required\");\n\n    if (typeof options.type !== 'string' && typeof options.type !== 'function') {\n      throw new Error(\"option 'type' must be a string or a function\");\n    }\n\n    if (options.topLevelLinks && typeof options.topLevelLinks !== 'object' && typeof options.topLevelLinks !== 'function') throw new Error(\"option 'topLevelLinks' must be an object or a function\");\n    if (options.topLevelMeta && typeof options.topLevelMeta !== 'object' && typeof options.topLevelMeta !== 'function') throw new Error(\"option 'topLevelMeta' must be an object or a function\");\n    if (options.meta && typeof options.meta !== 'object' && typeof options.meta !== 'function') throw new Error(\"option 'meta' must be an object or a function\");\n    if (typeof options.jsonapiObject !== 'boolean') throw new Error(\"option 'jsonapiObject' must a boolean\");\n    return options;\n  }\n  /**\n   * Validate a JSON:API error object\n   *\n   * @function validateError\n   * @private\n   * @throws Will throw an error if the argument is not an object\n   * @param {object} err a JSONAPI error object\n   * @returns {object} JSONAPI  valid error object\n   */\n\n\n  function validateError(err) {\n    if (typeof err !== 'object') {\n      throw new Error('error must be an object');\n    }\n\n    const {\n      id,\n      links,\n      status,\n      statusCode,\n      code,\n      title,\n      detail,\n      source,\n      meta\n    } = err;\n    /**\n     * Validates the `links` property, ensuring that it is an object and,\n     * if present, contains valid members. From the JSON:API spec:\n     *\n     * links: a links object containing the following members:\n     *   about: a link that leads to further details about this particular\n     *          occurrence of the problem.\n     *\n     * @function isValidLink\n     * @private\n     * @see https://jsonapi.org/format/#error-objects\n     * @throws Will throw an error if the argument is not an object\n     * @throws Will throw an error if the argument contains unpermitted members\n     * @throws Will throw an error if `links.about` is present but not a string\n     * @param {object} linksObj links object\n     * @returns {object} validated links\n     */\n\n    const isValidLink = function isValidLink(linksObj) {\n      const permittedMembers = ['about'];\n\n      if (typeof linksObj !== 'object') {\n        throw new Error(\"error 'link' property must be an object\");\n      }\n\n      Object.keys(linksObj).forEach(key => {\n        if (!permittedMembers.includes(key)) {\n          throw new Error(`error 'links.${key}' is not permitted`);\n        }\n      });\n\n      if (linksObj.about && typeof linksObj.about !== 'string') {\n        throw new Error(\"'links.about' property must be a string\");\n      }\n\n      return links;\n    };\n    /**\n     * Validates the `source` property, ensuring that it is an object and,\n     * if present, contains valid members. From the JSON:API spec:\n     *\n     * source: an object containing references to the source of the error,\n     *         optionally including any of the following members:\n     *   pointer: a JSON Pointer [RFC6901] to the associated entity in the\n     *            request document [e.g. \"/data\" for a primary data object,\n     *            or \"/data/attributes/title\" for a specific attribute].\n     *   parameter: a string indicating which URI query parameter caused the\n     *              error.\n     *\n     * @function isValidSource\n     * @private\n     * @see https://jsonapi.org/format/#error-objects\n     * @param {object} sourceObj source object\n     * @throws Will throw an error if the argument is not an object\n     * @throws Will throw an error if the argument contains unpermitted members\n     * @throws Will throw an error if `sourceObj.pointer` is present but not a string\n     * @throws Will throw an error if `sourceObj.parameter` is present but not a string\n     * @returns {object} validated source\n     */\n\n\n    const isValidSource = function isValidSource(sourceObj) {\n      const permittedMembers = ['pointer', 'parameter'];\n\n      if (typeof sourceObj !== 'object') {\n        throw new Error(\"error 'source' property must be an object\");\n      }\n\n      Object.keys(sourceObj).forEach(key => {\n        if (!permittedMembers.includes(key)) {\n          throw new Error(`error 'source.${key}' is not permitted`);\n        }\n      });\n\n      if (sourceObj.pointer && typeof sourceObj.pointer !== 'string') {\n        throw new Error(\"error 'source.pointer' property must be a string\");\n      }\n\n      if (sourceObj.parameter && typeof sourceObj.parameter !== 'string') {\n        throw new Error(\"error 'source.parameter' property must be a string\");\n      }\n\n      return source;\n    };\n    /**\n     * Validates the `meta` property, ensuring that it is an object. From\n     * the JSON:API spec:\n     *\n     * meta: a meta object containing non-standard meta-information about\n     *       the error.\n     *\n     * @function isValidMeta\n     * @private\n     * @see https://jsonapi.org/format/#error-objects\n     * @param {object} metaObj meta object\n     * @throws Will throw an error if the argument is not an object\n     * @returns {object} validated meta\n     */\n\n\n    const isValidMeta = function isValidMeta(metaObj) {\n      if (typeof metaObj !== 'object') {\n        throw new Error(\"error 'meta' property must be an object\");\n      }\n\n      return meta;\n    };\n    /**\n     * Determines if the provided number is a valid HTTP status code.\n     *\n     * @function isValidHttpStatusCode\n     * @private\n     * @see https://jsonapi.org/format/#error-objects\n     * @param {number} theStatusCode The status code to validate\n     * @returns {boolean} is valid\n     */\n\n\n    const isValidHttpStatusCode = function isValidHttpStatusCode(theStatusCode) {\n      const validHttpStatusCodes = [// 1XX: Informational\n      100, 101, 102, // eslint-disable-line\n      // 2XX: Success\n      200, 201, 202, 203, 204, 205, 206, 207, 208, 226, // eslint-disable-line\n      // 3XX: Redirection\n      300, 301, 302, 303, 304, 305, 307, 308, // eslint-disable-line\n      // 4XX: Client Error\n      400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, // eslint-disable-line\n      413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 426, 428, 429, // eslint-disable-line\n      431, 444, 451, 499, // eslint-disable-line\n      // 5XX: Server Error\n      500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511, 599 // eslint-disable-line\n      ];\n      return validHttpStatusCodes.includes(theStatusCode);\n    };\n    /**\n     * Validates a status code, ensuring that it is both a number and a valid\n     * HTTP status code. From the JSON:API spec:\n     *\n     * status: the HTTP status code applicable to this problem, expressed\n     *         as a string value.\n     *\n     * @function isValidStatus\n     * @private\n     * @see https://jsonapi.org/format/#error-objects\n     * @param {string|number} theStatusCode status code\n     * @throws Will throw an error if the argument is not number-like\n     * @throws Will throw an error if the argument is not a valid HTTP status code\n     * @returns {string} validated status\n     */\n\n\n    const isValidStatus = function isValidStatus(theStatusCode) {\n      const statusAsNumber = Number(theStatusCode);\n\n      if (Number.isNaN(statusAsNumber)) {\n        throw new Error(\"error 'status' must be a number\");\n      }\n\n      if (!isValidHttpStatusCode(statusAsNumber)) {\n        throw new Error(\"error 'status' must be a valid HTTP status code\");\n      }\n\n      return statusAsNumber.toString();\n    };\n\n    const error = {};\n    if (id) error.id = id;\n    if (links && Object.keys(links).length) error.links = isValidLink(links);\n    if (status || statusCode) error.status = isValidStatus(status || statusCode);\n    if (code) error.code = code.toString();\n\n    if (title) {\n      error.title = title.toString();\n    } else if (err.constructor.name !== 'Object') {\n      error.title = err.constructor.name;\n    }\n\n    error.detail = detail ? detail.toString() : err.message;\n    if (source && Object.keys(source).length) error.source = isValidSource(source);\n    if (meta && Object.keys(meta).length) error.meta = isValidMeta(meta);\n    return error;\n  }\n\n  var _default = {\n    validateOptions,\n    validateDynamicTypeOptions,\n    validateError\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/base\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend(Ember.Evented, {\n    isSearchAllowed: false,\n    isFilterAllowed: false,\n    // can be ignored if unneeded\n    isSearchEnabled: false,\n    searchText: null,\n    // override these in subclasses\n    isCenterReadOnly: false,\n    centerLat: _environment.default.tomtom.search.center.lat,\n    centerLng: _environment.default.tomtom.search.center.lon,\n    markers: Ember.computed('', () => []),\n    polylines: Ember.computed('', () => []),\n    contextMenuOptions: null,\n    mapStateProvider: null,\n    mapState: Ember.computed.readOnly('mapStateProvider.mapState'),\n    onChange: Ember.observer('markers', 'polylines', 'shapes', function () {\n      this.trigger('refresh');\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const center = this.get('map.center');\n\n      if (center) {\n        if (!this.get('isCenterReadOnly')) {\n          this.set('centerLat', center.lat);\n          this.set('centerLng', center.lon);\n        }\n      } // initialize observer\n\n\n      this.onChange();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/layered\", [\"exports\", \"adept-iq/classes/map-contexts/base\", \"adept-iq/classes/markers/vehicles/road-supervisor\", \"adept-iq/config/column-types\", \"adept-iq/config/filter-types\", \"adept-iq/utils/compute-ordered-ids\", \"moment\", \"lodash\", \"cheap-ruler\", \"ember-inflector\", \"adept-iq/utils/filters\"], function (_exports, _base, _roadSupervisor, _columnTypes, _filterTypes, _computeOrderedIds, _moment, _lodash, _cheapRuler, _emberInflector, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // base class for layered map contexts; use this when lots of entities are\n  // present, or where filtering/opacity is required\n  // need to understand what this is\n  const CIRCLE_RADIUS_FOR_MARKER_BOUNDARY = 100; // Street Details Scale at 100m a single marker\n\n  const DEFAULT_ZOOM_PAD_BUFFER_RATIO = 0.5; // Leave some space from invisible rectangular box\n\n  var _default = _base.default.extend({\n    polylineService: null,\n    // set these in extending subclass\n    markersData: Ember.computed('', () => []),\n    polylineData: Ember.computed('', () => []),\n    shapeData: Ember.computed('', () => []),\n    polygonData: Ember.computed('', () => []),\n    layeredRecords: Ember.computed('', () => []),\n    //used to render rs vehicle if required\n    roadSupervisor: null,\n    mapStateProvider: Ember.computed.readOnly('workspace.dashboard'),\n    isSearchAllowed: Ember.computed.bool('workspace.configPermissions.map.searchAllowed'),\n    isFilterAllowed: Ember.computed.bool('workspace.configPermissions.map.filterAllowed'),\n    editContextMenuOption: Ember.computed('', function () {\n      return {\n        id: 'edit',\n        name: 'Edit',\n        action: model => {\n          const inflector = new _emberInflector.default(_emberInflector.default.defaultRules);\n          const modelName = inflector.pluralize(model.constructor.modelName); // TODO: this was the existing behaviour, but it is insufficient;\n          // generally, iq-models are passed in, which results in an incorrect\n          // widget component name\n\n          const component = `iq-widgets/${modelName}-form-widget`;\n          this.get('editModal').open(component, [model]);\n        }\n      };\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const layerConfig = this.get('layersConfig'); // these are needed for all related computed properties\n\n      const objectForFunctions = ['polygon', 'polyline', 'marker', 'shape'];\n      const classForFunctions = ['polygon', 'polyline', 'marker', 'shape'];\n      objectForFunctions.forEach(name => {\n        const func = this.get(`_${name}ObjectFor`);\n        (true && !(Ember.isPresent(func)) && Ember.assert(`base class layered requires derived classes to override function _${name}ObjectForLayer`, Ember.isPresent(func)));\n      });\n      classForFunctions.forEach(name => {\n        const func = this.get(`_${name}ClassForLayer`);\n        (true && !(Ember.isPresent(func)) && Ember.assert(`base class layered requires derived classes to override function _${name}ClassForLayer`, Ember.isPresent(func)));\n      });\n      (true && !(Ember.isPresent(layerConfig)) && Ember.assert('base class layered requires derived classes to override layer config property', Ember.isPresent(layerConfig)));\n    },\n\n    bounds: Ember.computed('activeContext.topActiveContext.implicitMarkers', function () {\n      let markers = this.get('activeContext.topActiveContext.implicitMarkers') || [];\n      const bounds = window.L.latLngBounds(); // if no markers are available return the lat and lng bounds value\n\n      if (markers.length === 0) {\n        return bounds;\n      }\n\n      const padRatio = DEFAULT_ZOOM_PAD_BUFFER_RATIO / markers.length;\n      markers = markers.filter(marker => {\n        if (marker.lat && marker.lng) {\n          bounds.extend([marker.lat, marker.lng]);\n          return marker;\n        }\n      });\n\n      if (markers.length === 1) {\n        const circleBounds = this._createBounds(markers[0]);\n\n        if (circleBounds) {\n          return circleBounds.pad(padRatio);\n        }\n      }\n\n      return bounds._southWest ? bounds.pad(padRatio) : bounds;\n    }),\n    boundsID: Ember.computed('activeContext.topActiveContext.checkedItems.[]', function () {\n      const itemsSelected = this.get('activeContext.topActiveContext.checkedItems') || [];\n      return itemsSelected.map(item => item.record.id).join(',');\n    }),\n    contextMenuOptions: Ember.computed('workspace.configPermissions.map.singleActions.[]', function () {\n      const contextMenuOptions = [this.get('editContextMenuOption')];\n      const permittedSingleActions = this.get('workspace.configPermissions.map.singleActions');\n      if (Ember.isEmpty(permittedSingleActions)) return [];\n      if (permittedSingleActions.includes('all')) return contextMenuOptions;\n      return contextMenuOptions.filter(_ref => {\n        let {\n          id\n        } = _ref;\n        return permittedSingleActions.includes(id);\n      });\n    }),\n    isFiltered: Ember.computed('layers', function () {\n      return this.get('layers').any(_ref2 => {\n        let {\n          labels\n        } = _ref2;\n        return labels.any(label => {\n          const {\n            filterTypeId,\n            filterValues\n          } = label;\n          const filterType = _filterTypes.filterTypesHash[filterTypeId];\n          return (0, _filters.testFilterValues)(filterType, filterValues);\n        });\n      });\n    }),\n    // merges the map state on top of the layers config; re-computed every time\n    // the underlying state changes\n    layers: Ember.computed('mapState', 'layersConfig', function () {\n      const config = _lodash.default.cloneDeep(this.get('layersConfig'));\n\n      const mapState = this.get('mapState'); // remove labels that are un-available\n\n      config.forEach(currConfig => {\n        const labels = [];\n        currConfig.labels.forEach(label => {\n          if (!label.unAvailable) {\n            labels.push(label);\n          }\n        });\n\n        if (labels.length > 0) {\n          currConfig.labels = labels;\n        }\n      });\n      if (!mapState) return config;\n      Object.entries(mapState).forEach(_ref3 => {\n        let [layerId, layerState] = _ref3;\n        const layer = config.findBy('id', layerId);\n        if (!layer) return;\n        ['isVisible', 'opacity', 'isDisplayMapIconLabel'].forEach(property => {\n          if (Ember.isNone(layerState[property])) return;\n          layer[property] = layerState[property];\n        });\n\n        if (layerState.isDisplayMapIconLabel) {\n          layer.selectedDisplay = 'Always';\n        } else {\n          layer.selectedDisplay = 'On Left Click';\n        }\n\n        if (layerState.types) {\n          Object.entries(layerState.types).forEach(_ref4 => {\n            let [typeId, typeState] = _ref4;\n            const type = layer.types.findBy('id', typeId);\n            if (!type) return;\n            ['isVisible'].forEach(property => {\n              if (Ember.isNone(typeState[property])) return;\n              type[property] = typeState[property];\n            });\n          });\n        }\n\n        if (layerState.labels) {\n          Object.entries(layerState.labels).forEach(_ref5 => {\n            let [labelId, labelState] = _ref5;\n            const label = layer.labels.findBy('id', labelId);\n            if (!label) return;\n            ['isVisible', 'index', 'filterTypeId', 'filterValues'].forEach(property => {\n              if (Ember.isNone(labelState[property])) return;\n              label[property] = labelState[property];\n            });\n          });\n        }\n\n        layer.labels = layer.labels || []; // ensure every label has index\n\n        const orderedIds = (0, _computeOrderedIds.default)(layer.labels);\n        orderedIds.forEach((labelId, index) => {\n          const label = layer.labels.findBy('id', labelId);\n          label.index = index;\n        });\n      });\n      return config;\n    }),\n    markers: Ember.computed('layers', 'layeredRecords', 'searchText', function () {\n      const searchText = this.get('searchText');\n      const layers = this.get('layers').filterBy('type', 'markers');\n      const layeredRecords = this.get('layeredRecords');\n      const layerMarkers = layers.map(layer => {\n        const layerRecords = layeredRecords[layer.id] || [];\n        const labels = layer.labels;\n\n        const hasSelectedActiveLabel = _lodash.default.filter(labels, value => value.isVisible).length;\n\n        const filterNode = (0, _filters.buildCompoundFilterNode)('and', [this._buildSearchFilterNode(layer, searchText), this._buildColumnFilterNode(layer)]);\n        const filter = (0, _filters.buildFilterFunction)(filterNode);\n        return layer.types.map(type => {\n          if (type.isVisible === false) return [];\n          let typeRecords = layerRecords;\n\n          if (type.filterKey) {\n            typeRecords = layerRecords.filter(record => {\n              if (type.hasOwnProperty('filterValue')) {\n                return record.get(type.filterKey) === type.filterValue;\n              }\n\n              return record.get(type.filterKey);\n            });\n          }\n\n          const filteredRecords = typeRecords.filter(filter);\n          return filteredRecords.reduce((arr, record) => {\n            const marker = this._markerObjectFor(layer, type, record); // @TODO refactored into the data join class rather than here\n\n\n            if (marker.get('marker')) {\n              const nativeMarker = marker.get('marker').native;\n              const popup = nativeMarker.getPopup();\n\n              const label = this._getLabel(record, layer);\n\n              if (Ember.isPresent(popup)) {\n                if (layer.isDisplayMapIconLabel && hasSelectedActiveLabel) {\n                  if (!popup.isOpen()) nativeMarker.bindPopup(label, {\n                    closeButton: false,\n                    autoClose: false,\n                    closeOnClick: false,\n                    autoPan: false\n                  }).openPopup();\n                } else if (popup.isOpen()) {\n                  nativeMarker.closePopup();\n                }\n\n                if (label === '') {\n                  // set a blank line so it would be able to update content\n                  popup.setContent('<br/>');\n                } else {\n                  popup.setContent(label);\n                }\n              }\n            }\n\n            marker.setProperties({\n              opacity: layer.opacity,\n              // marker can update its own style based on layer config\n              layer,\n              layerType: type,\n              // tells marker that it may appear/disappear based on AC\n              isActive: layer.isActive,\n              label: this._getLabel(record, layer)\n            });\n            arr.push(marker);\n            return arr;\n          }, []);\n        });\n      }); // @TODO might be better to create a different context, this automatically creates a bunch rs vehicle markers for no reason other than vehicles\n\n      layerMarkers.push(_roadSupervisor.default.create({\n        record: this.get('roadSupervisor.rsVehicle')\n      }));\n      return _lodash.default.flattenDeep(layerMarkers);\n    }),\n    polylines: Ember.computed('layeredRecords', 'layers', 'searchText', function () {\n      // each item is a store record, with `otp` if so endowed\n      const searchText = this.get('searchText');\n      const layers = this.get('layers').filterBy('type', 'polylines');\n      const marker = this.get('layers').filterBy('type', 'markers');\n      const layeredRecords = this.get('layeredRecords');\n      const layerPolylines = layers.map(layer => {\n        if (layer.isVisible === false) return [];\n        const layerRecords = layeredRecords[layer.id] || [];\n        const filterNode = (0, _filters.buildCompoundFilterNode)('and', [this._buildSearchFilterNode(layer, searchText), this._buildColumnFilterNode(layer)]);\n        const filter = (0, _filters.buildFilterFunction)(filterNode);\n        const stopsIsVisible = this.get('layers').findBy('id', 'stops').isVisible;\n        return layer.types.map(type => {\n          if (!type.isVisible) return [];\n          let typeRecords = layerRecords;\n\n          if (type.filterKey) {\n            typeRecords = typeRecords.filter(record => {\n              if (record.get(type.filterKey) && type.hasOwnProperty('filterValue')) {\n                return record.get(type.filterKey).toLowerCase() === type.filterValue.toLowerCase();\n              }\n\n              return record.get(type.filterKey);\n            });\n          }\n\n          const filteredRecords = typeRecords.filter(filter);\n          return filteredRecords.map(record => {\n            const polyline = this._polylineObjectFor(layer, type, record);\n\n            const label = this._getLabel(record, layer);\n\n            const markersWithAlwaysDisplay = marker.filterBy('selectedDisplay', 'Always'); // regarding NYAAR-17876\n\n            if (markersWithAlwaysDisplay.length) {\n              return polyline;\n            } // @TODO refactor into data-join polyline\n            else if (polyline.get('polyline')) {\n              if (layer.isDisplayMapIconLabel) {\n                if (!polyline.get('polyline').native.isPopupOpen()) polyline.get('polyline').native.bindPopup(this._getLabel(record, layer), {\n                  closeButton: false,\n                  autoClose: false,\n                  closeOnClick: false,\n                  autoPan: false\n                }).openPopup();\n              } else if (polyline.get('polyline').native.isPopupOpen() && !polyline.get('polyline.native._popup.options.autoPan')) {\n                polyline.get('polyline').native.closePopup();\n\n                const container = polyline.get('polyline').native._popup._container; //for removing the popup after switching from  always to left click\n\n\n                if (container.offsetParent) {\n                  container.offsetParent.innerHTML = '';\n                }\n\n                polyline.get('polyline').native.bindPopup(this._getLabel(record, layer), {\n                  closeButton: false\n                });\n              } else {\n                const cachePolyline = polyline.get('cache').polyline;\n\n                const closePolyline = () => {\n                  polyline.get('polyline').native.closePopup();\n                  polyline.get('polyline').native.unbindPopup();\n                  polyline.get('polyline').native.unbindTooltip();\n                }; //regarding this bug (NYAAR-10973)\n                //removing  Last unchecked label from the Map widget.\n\n\n                if (!label) {\n                  if (cachePolyline.label) {\n                    closePolyline();\n                  } else {\n                    closePolyline();\n                  }\n                } else {\n                  polyline.get('polyline').native.bindPopup(this._getLabel(record, layer), {\n                    closeButton: false\n                  });\n                }\n              } // regarding this bug (NYAAR-10973)\n              // if all fields are unchecked in the map layers there will be no labels to display in the popup\n              // so, label is empty and popup is open\n              // empty the innerHTML of the parentElement (div.leaflet-pane.leaflet-popup-pane )\n\n\n              if (!label && polyline.get('polyline').native.isPopupOpen()) {\n                polyline.get('polyline').native.closePopup();\n\n                const container = polyline.get('polyline').native._popup._container;\n\n                if (container.offsetParent) {\n                  container.offsetParent.innerHTML = '';\n                }\n              }\n            }\n\n            polyline.setProperties({\n              layer,\n              layerType: type,\n              label: label,\n              opacity: layer.opacity\n            });\n\n            if (layer.id === 'trips') {\n              polyline.set('stopsIsVisible', stopsIsVisible);\n            }\n\n            return polyline;\n          });\n        });\n      });\n      return _lodash.default.flattenDeep(layerPolylines);\n    }),\n    polygons: Ember.computed('layeredRecords', 'layers', 'searchText', function () {\n      const searchText = this.get('searchText');\n      const layers = this.get('layers').filterBy('type', 'polygons');\n      const layeredRecords = this.get('layeredRecords');\n      const layerPolygons = layers.map(layer => {\n        if (layer.isVisible === false) return [];\n        let layerRecords;\n\n        if (layer.isActive) {\n          layerRecords = layeredRecords[layer.id] || [];\n        } else {\n          // TODO: query `workspace-context` instead of store\n          layerRecords = this.get('store').peekAll(layer.modelName);\n        }\n\n        const filterNode = (0, _filters.buildCompoundFilterNode)('and', [this._buildSearchFilterNode(layer, searchText), this._buildColumnFilterNode(layer)]);\n        const filter = (0, _filters.buildFilterFunction)(filterNode);\n        return layer.types.map(type => {\n          if (type.isVisible === false) return [];\n          let typeRecords = layerRecords;\n\n          if (type.filterKey) {\n            typeRecords = typeRecords.filter(record => {\n              if (type.hasOwnProperty('filterValue')) {\n                return record.get(type.filterKey) === type.filterValue;\n              }\n\n              return record.get(type.filterKey);\n            });\n          }\n\n          const filteredRecords = typeRecords.filter(filter);\n          return filteredRecords.reduce((arr, record) => {\n            const polygon = this._polygonObjectFor(layer, type, record); // TODO: move this to polygon model\n\n\n            const polygonStyle = type.style;\n            polygon.setProperties({\n              style: polygonStyle,\n              type: type.id,\n              label: this._getLabel(record, layer),\n              parentLabel: this._getParentLabel(record, layer),\n              opacity: layer.opacity,\n              isActive: layer.isActive\n            });\n            arr.push(polygon);\n            return arr;\n          }, []);\n        });\n      });\n      return _lodash.default.flattenDeep(layerPolygons);\n    }),\n    shapes: Ember.computed('layeredRecords', 'layers', 'searchText', function () {\n      const searchText = this.get('searchText');\n      const layers = this.get('layers').filterBy('type', 'shapes');\n      const layeredRecords = this.get('layeredRecords');\n      const layerShapes = layers.map(layer => {\n        if (!layer.isVisible || !layer.isActive) return [];\n        const layerRecords = layeredRecords[layer.id] || [];\n        const filterNode = (0, _filters.buildCompoundFilterNode)('and', [this._buildSearchFilterNode(layer, searchText), this._buildColumnFilterNode(layer)]);\n        const filter = (0, _filters.buildFilterFunction)(filterNode);\n        return layer.types.map(type => {\n          if (type.isVisible === false) return [];\n          let typeRecords = layerRecords;\n\n          if (type.filterKey) {\n            typeRecords = typeRecords.filter(record => {\n              if (type.hasOwnProperty('filterValue')) {\n                return record.get(type.filterKey) === type.filterValue;\n              }\n\n              return record.get(type.filterKey);\n            });\n          }\n\n          const filteredRecords = typeRecords.filter(filter);\n          return filteredRecords.reduce((arr, record) => {\n            const shape = this._shapeObjectFor(layer, type, record);\n\n            const shapeStyle = type.style;\n            shape.setProperties({\n              style: shapeStyle,\n              type: type.id,\n              label: this._getLabel(record, layer),\n              parentLabel: this._getParentLabel(record, layer),\n              opacity: layer.opacity,\n              isActive: layer.isActive,\n              radius: record.get('radius'),\n              noOfPoints: record.get('noOfPoints')\n            });\n            arr.push(shape);\n            return arr;\n          }, []);\n        });\n      });\n      return _lodash.default.flattenDeep(layerShapes);\n    }),\n\n    setLayerVisibility(layerId, isVisible) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          isVisible\n        }\n      });\n    },\n\n    setDisplayMapIconLabelAllTime(layerId, isDisplayMapIconLabel) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          isDisplayMapIconLabel\n        }\n      });\n    },\n\n    setDisplayMapLabelUpdated(layerId, markerUpdated) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          markerUpdated\n        }\n      });\n    },\n\n    setLayerOpacity(layerId, opacity) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          opacity\n        }\n      });\n    },\n\n    setLayerTypeVisibility(layerId, typeId, isVisible) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          types: {\n            [typeId]: {\n              isVisible\n            }\n          }\n        }\n      });\n    },\n\n    setLayerLabelVisibility(layerId, labelId, isVisible) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          labels: {\n            [labelId]: {\n              isVisible\n            }\n          }\n        }\n      });\n    },\n\n    setLayerLabelFilterType(layerId, labelId, filterTypeId) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          labels: {\n            [labelId]: {\n              filterTypeId\n            }\n          }\n        }\n      });\n    },\n\n    setLayerLabelFilterValues(layerId, labelId, filterValues) {\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          labels: {\n            [labelId]: {\n              filterValues\n            }\n          }\n        }\n      });\n    },\n\n    setLayerLabelsOrder(layerId, labelIds) {\n      const labels = labelIds.reduce((obj, labelId, index) => {\n        obj[labelId] = {\n          index\n        };\n        return obj;\n      }, {});\n      this.get('mapStateProvider').mergeMapState({\n        [layerId]: {\n          labels\n        }\n      });\n    },\n\n    _buildSearchFilterNode(layer, searchText) {\n      if (Ember.isBlank(searchText) || !layer.isVisible) return null;\n      if (!layer.isVisible) return null;\n      const filterNodes = layer.labels.reduce((arr, label) => {\n        if (!label.isSearchable) return arr; // TODO: determine if we shuld be searching hidden labels\n        // if (!label.isVisible) return arr;\n\n        const filterType = _columnTypes.columnTypesHash[label.type].searchFilterType;\n        const filterNode = (0, _filters.buildValueFilterNode)(filterType, label.valuePath, searchText);\n        arr.push(filterNode);\n        return arr;\n      }, []);\n      return (0, _filters.buildCompoundFilterNode)('or', filterNodes);\n    },\n\n    _buildColumnFilterNode(layer) {\n      if (!layer.isVisible) return null;\n      const filterNodes = layer.labels.reduce((arr, label) => {\n        if (!label.isVisible || !label.isSearchable) return arr;\n        const filterType = _filterTypes.filterTypesHash[label.filterTypeId];\n        let filterValues = label.filterValues;\n        if (!(0, _filters.testFilterValues)(filterType, filterValues)) return arr;\n        filterValues = label.filterValues.map(filterType.parseValue);\n        const filterNode = (0, _filters.buildValueFilterNode)(filterType, label.valuePath, filterValues);\n        arr.push(filterNode);\n        return arr;\n      }, []);\n      return (0, _filters.buildCompoundFilterNode)('and', filterNodes);\n    },\n\n    _getLabel(record, layer) {\n      const lines = [];\n      const sortedLabels = layer.labels.sort((a, b) => a.index - b.index);\n      sortedLabels.forEach(label => {\n        if (!label.isVisible) {\n          return;\n        } // the widgetRecord valuePath is not the same as ember model valuePath\n\n\n        const valuePath = label.mapValuePath || label.valuePath;\n        let recordValue = record.get(`${valuePath}`); // We do not have enums such as vehicle availabilities etc in avlmlite\n        // This only prevents enums from displaying on the map label\n\n        if ((label.type === 'enum' || label.type === 'enum-date') && Ember.isPresent(recordValue)) {\n          const values = Ember.isArray(recordValue) ? recordValue : recordValue.values;\n          let header = `${label.label}:`;\n          const listItems = [];\n          values.forEach(value => {\n            if (value.className === 'mainItem') {\n              header = `${label.label}: ${value.value}`;\n            } else {\n              listItems.push(value.value);\n            }\n          });\n          const list = `${header} ${listItems.join('')}`;\n          lines.push(list);\n        } else {\n          if (label.format) {\n            if (!Ember.isBlank(recordValue)) {\n              recordValue = (0, _moment.default)(recordValue).format(label.format);\n            }\n          }\n\n          lines.push(`${label.label}: ${recordValue || recordValue === false || recordValue === 0 ? recordValue : ''}`);\n        }\n      });\n      return `${lines.join('<br/>')}`;\n    },\n\n    _getParentLabel(record, layer) {\n      const lines = [];\n      const sortedLabels = layer.labels.sort((a, b) => a.index - b.index);\n      sortedLabels.forEach(label => {\n        if (!label.isVisible || !label.parentLabel) return;\n        lines.push(`${record.get(label.valuePath)}`);\n      });\n      return `${lines.join('<br/>')}`;\n    },\n\n    _createBounds(marker) {\n      const {\n        lat,\n        lng\n      } = marker;\n\n      if (lat && lng) {\n        const ruler = (0, _cheapRuler.default)(lat, 'meters');\n        const bbox = ruler.bufferPoint([lat, lng], CIRCLE_RADIUS_FOR_MARKER_BOUNDARY);\n        const p1 = window.L.latLng(bbox[0], bbox[1]);\n        const p2 = window.L.latLng(bbox[2], bbox[3]);\n        return window.L.latLngBounds(p1, p2);\n      }\n\n      return null;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/map-configs/avlm-layers\", [\"exports\", \"adept-iq/config/icon-paths\", \"adept-iq/pods/components/iq-widgets/routes-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/trips-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/stops-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/vehicles-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/zones-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/vehicle-events-widget/avlmConfig\"], function (_exports, _iconPaths, _avlmConfig, _avlmConfig2, _avlmConfig3, _avlmConfig4, _avlmConfig5, _avlmConfig6) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // @TODO: make this JSON-only\n  // @TODO: it would be better to look up values from static config at time of use,\n  // but for now this handles the differences in config format\n  const extractLabelsFromWidgetConfig = widgetConfig => {\n    return widgetConfig.columns.map(columnConfig => {\n      const {\n        id,\n        index,\n        type,\n        label,\n        valuePath,\n        mapValuePath,\n        valuePreview,\n        searchable,\n        isMapLabelVisible,\n        unAvailable\n      } = columnConfig;\n      return {\n        id,\n        index,\n        type,\n        label,\n        valuePath,\n        mapValuePath,\n        valuePreview,\n        isSearchable: searchable,\n        isVisible: isMapLabelVisible,\n        unAvailable: unAvailable\n      };\n    });\n  };\n\n  const layers = [{\n    id: 'agency',\n    type: 'markers',\n    label: 'Agency',\n    modelName: 'agency-marker',\n    isVisible: false,\n    isActive: false,\n    // does not respond to active context\n    opacity: 1,\n    selectedDisplay: 'On Click',\n    types: [{\n      id: 'location',\n      label: 'Agency Location',\n      style: 'location',\n      isVisible: true,\n      display: true,\n      canFilter: true\n    }],\n    labelDisplay: 'select',\n    labels: []\n  }, {\n    id: 'stops',\n    type: 'markers',\n    label: 'Stops',\n    modelName: 'avlm-stop-point',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    selectedDisplay: 'On Click',\n    types: [{\n      id: 'pullinGarage',\n      label: 'Pullin Garage',\n      filterKey: 'mapId',\n      filterValue: 'pullinGarage',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.garagePlanned\n    }, {\n      id: 'pulloutGarage',\n      label: 'Pullout Garage',\n      filterKey: 'mapId',\n      filterValue: 'pulloutGarage',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.garagePlanned\n    }, {\n      id: 'break',\n      label: 'Break',\n      filterKey: 'mapId',\n      filterValue: 'break',\n      style: 'break',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.break\n    }, {\n      id: 'deployStop',\n      label: 'Deploy Stop',\n      filterKey: 'mapId',\n      filterValue: 'deployStop',\n      style: 'pick',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.planned\n    }, {\n      id: 'pick',\n      label: 'Pickup',\n      filterKey: 'mapId',\n      filterValue: 'pick',\n      style: 'pick',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.pickPlanned\n    }, {\n      id: 'drop',\n      label: 'Drop Off',\n      filterKey: 'mapId',\n      filterValue: 'drop',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.dropPlanned\n    }, {\n      id: 'performedStop',\n      label: 'Performed Stop',\n      filterKey: 'mapId',\n      filterValue: 'performedStop',\n      style: 'Depart',\n      canFilter: true,\n      isVisible: true,\n      display: true,\n      iconPath: _iconPaths.default.stops.pickCompleted\n    }, {\n      id: 'next',\n      label: 'Next Stop',\n      filterKey: 'mapId',\n      filterValue: 'next',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.pickNext\n    }, {\n      id: 'wheelchair',\n      label: 'Wheelchair Stop',\n      filterKey: 'mapId',\n      filterValue: 'wheelchair',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.pickPlannedWheelchair\n    }, {\n      id: 'NextWheelchair',\n      label: 'Wheelchair Next Stop',\n      filterKey: 'mapId',\n      filterValue: 'NextWheelchair',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.pickNextWheelchair\n    }, {\n      id: 'noshow',\n      label: 'No Show Stop',\n      filterKey: 'mapId',\n      filterValue: 'noshow',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.noshow\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_avlmConfig3.default)\n  }, {\n    id: 'routes',\n    type: 'polylines',\n    label: 'Routes',\n    modelName: 'avlm-route',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    selectedDisplay: 'On Left Click',\n    types: [{\n      id: 'planned',\n      label: 'Day of Service - Planned',\n      style: 'solid',\n      styleDecorator: 'solidPlanned',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.planned,\n      linePath: _iconPaths.default.routes.plannedLine\n    }, {\n      id: 'navigation',\n      label: 'Navigation',\n      style: 'solid',\n      styleDecorator: 'solidNavigation',\n      isVisible: true,\n      canFilter: true,\n      filterKey: 'status',\n      filterValue: 'Active',\n      display: true,\n      iconPath: _iconPaths.default.routes.navigation,\n      linePath: _iconPaths.default.routes.navigationLine\n    }, {\n      id: 'performed',\n      label: 'Performed',\n      // needs to be present for any selected routes, even if it has no data\n      // filterKey: 'isPerformed',\n      isVisible: false,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.performed,\n      linePath: _iconPaths.default.routes.performedLine\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_avlmConfig.default)\n  }, {\n    id: 'trips',\n    type: 'polylines',\n    label: 'Trips',\n    modelName: 'avlm-trip',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    selectedDisplay: 'On Left Click',\n    types: [{\n      id: 'Waitlisted',\n      label: 'Waitlist',\n      filterKey: 'mapId',\n      filterValue: 'Waitlisted',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.planned\n    }, {\n      id: 'Scheduled',\n      label: 'Scheduled',\n      filterKey: 'mapId',\n      filterValue: 'Scheduled',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.planned\n    }, {\n      id: 'Active',\n      label: 'Active',\n      filterKey: 'mapId',\n      filterValue: 'Active',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.performed\n    }, {\n      id: 'Completed',\n      label: 'Completed',\n      filterKey: 'mapId',\n      filterValue: 'Completed',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.performed\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_avlmConfig2.default)\n  }, {\n    id: 'vehicles',\n    type: 'markers',\n    label: 'Vehicles',\n    modelName: 'avlm-vehicle',\n    isVisible: true,\n    isActive: true,\n    selectedDisplay: 'On Left Click',\n    opacity: 1,\n    types: [{\n      id: 'avlm-vehicle-communication-failure',\n      label: 'Communication failure',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-communication-failure',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleCommunicationFailed\n    }, {\n      id: 'avlm-vehicle-gps-failure',\n      label: 'Vehicle failed to ping GPS',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-gps-failure',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleGPSFailed\n    }, {\n      id: 'avlm-vehicle-not-signedin',\n      label: 'Vehicle not signed-on',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-not-signedin',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleNotSigned\n    }, {\n      id: 'avlm-vehicle',\n      label: 'Vehicle route started. OTP on time.',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWork\n    }, {\n      id: 'avlm-vehicle-danger',\n      label: 'Vehicle route started. OTP getting late.',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-danger',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkDanger\n    }, {\n      id: 'avlm-vehicle-late',\n      label: 'Vehicle route started. OTP late.',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-late',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkLate\n    }, {\n      id: 'avlm-vehicle-emergency',\n      label: 'Vehicle Emergency',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-emergency',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: false,\n      iconPath: _iconPaths.default.vehicles.atWorkEmergency\n    }, {\n      id: 'avlm-vehicle-break',\n      label: 'Vehicle on break',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-break',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.onBreak\n    }, {\n      id: 'avlm-vehicle-breakdown',\n      label: 'Vehicle broken down',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-breakdown',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleBreakdown\n    }, {\n      id: 'avlm-vehicle-roadsup',\n      label: 'Road Supervisor',\n      filterKey: 'mapId',\n      filterValue: 'avlm-vehicle-roadsup',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.loggedRoadSupervisor\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_avlmConfig4.default)\n  }, {\n    id: 'zones',\n    type: 'shapes',\n    label: 'Zones',\n    modelName: 'nyct-zone',\n    isVisible: true,\n    isActive: true,\n    isTraversal: true,\n    selectedDisplay: 'On Left Click',\n    opacity: 1,\n    types: [{\n      id: 'service',\n      label: 'Service',\n      filterKey: 'type',\n      filterValue: 'service',\n      style: 'service',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.zones.service\n    } // TODO: enable ADA and Speed\n    // {\n    //   id: 'ada',\n    //   label: 'ADA',\n    //   filterKey: 'type',\n    //   filterValue: 'ada',\n    //   style: 'ada',\n    //   isVisible: true,\n    //   display: true,\n    //   canFilter: true,\n    //   iconPath: IconPaths.zones.ada\n    // },\n    // {\n    //   id: 'speed',\n    //   label: 'Speed',\n    //   filterKey: 'type',\n    //   filterValue: 'speed',\n    //   style: 'speed',\n    //   isVisible: true,\n    //   display: true,\n    //   canFilter: true,\n    //   iconPath: IconPaths.zones.speed\n    // }\n    ],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_avlmConfig5.default)\n  }, {\n    id: 'vehicle-events',\n    type: 'markers',\n    label: 'Vehicle Event',\n    modelName: 'avlm-stop-point',\n    isVisible: true,\n    isActive: true,\n    selectedDisplay: 'On Click',\n    types: [{\n      id: 'pullinGarage',\n      label: 'Pullin Garage',\n      filterKey: 'mapId',\n      filterValue: 'pullIn',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.garagePlanned\n    }, {\n      id: 'vehicle',\n      label: 'Vehicle',\n      filterKey: 'mapId',\n      filterValue: 'vehicle',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.vehicle\n    }, {\n      id: 'pulloutGarage',\n      label: 'Pullout Garage',\n      filterKey: 'mapId',\n      filterValue: 'pullOut',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.garagePlanned\n    }, {\n      id: 'offBreak',\n      label: 'Off Break',\n      filterKey: 'mapId',\n      filterValue: 'offBreak',\n      style: 'break',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.break\n    }, {\n      id: 'onBreak',\n      label: 'On Break',\n      filterKey: 'mapId',\n      filterValue: 'onBreak',\n      style: 'break',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.break\n    }, {\n      id: 'pick',\n      label: 'Pickup',\n      filterKey: 'mapId',\n      filterValue: 'pick',\n      style: 'pick',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.pickPlanned\n    }, {\n      id: 'drop',\n      label: 'Drop Off',\n      filterKey: 'mapId',\n      filterValue: 'drop',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.dropPlanned\n    }, {\n      id: 'wheelchairPick',\n      label: 'Wheelchair Pickup',\n      filterKey: 'mapId',\n      filterValue: 'wheelchair-pick',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.pickPlannedWheelchair\n    }, {\n      id: 'wheelchairDrop',\n      label: 'Wheelchair Dropoff',\n      filterKey: 'mapId',\n      filterValue: 'wheelchair-drop',\n      style: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicleEvents.dropPlannedWheelchair\n    }, {\n      id: 'performedPick',\n      label: 'Performed Pickup',\n      filterKey: 'mapId',\n      filterValue: 'performedPick',\n      style: 'Depart',\n      canFilter: true,\n      isVisible: true,\n      display: true,\n      iconPath: _iconPaths.default.vehicleEvents.pickCompleted\n    }, {\n      id: 'performedDrop',\n      label: 'Performed Dropoff',\n      filterKey: 'mapId',\n      filterValue: 'performedDrop',\n      style: 'Depart',\n      canFilter: true,\n      isVisible: true,\n      display: true,\n      iconPath: _iconPaths.default.vehicleEvents.dropCompleted\n    }, {\n      id: 'noShow',\n      label: 'No Show Stop',\n      filterKey: 'mapId',\n      filterValue: 'noShow',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.noshow\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_avlmConfig6.default)\n  }];\n  var _default = layers;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/map-configs/dispatch-layers\", [\"exports\", \"adept-iq/config/icon-paths\", \"adept-iq/pods/components/iq-widgets/routes-widget/config\", \"adept-iq/pods/components/iq-widgets/trips-widget/config\", \"adept-iq/pods/components/iq-widgets/stops-widget/config\", \"adept-iq/pods/components/iq-widgets/vehicles-widget/config\", \"adept-iq/pods/components/iq-widgets/zones-widget/config\"], function (_exports, _iconPaths, _config, _config2, _config3, _config4, _config5) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // @TODO: make this JSON-only\n  // @TODO: it would be better to look up values from static config at time of use,\n  // but for now this handles the differences in config format\n  const extractLabelsFromWidgetConfig = widgetConfig => {\n    return widgetConfig.columns.map(columnConfig => {\n      const {\n        id,\n        index,\n        type,\n        label,\n        valuePath,\n        mapValuePath,\n        valuePreview,\n        searchable,\n        isMapLabelVisible,\n        unAvailable,\n        format\n      } = columnConfig;\n      return {\n        id,\n        index,\n        type,\n        label,\n        valuePath,\n        mapValuePath,\n        valuePreview,\n        format,\n        isSearchable: searchable,\n        isVisible: isMapLabelVisible,\n        unAvailable: unAvailable\n      };\n    });\n  };\n\n  const layers = [{\n    id: 'agency',\n    type: 'markers',\n    label: 'Agency',\n    modelName: 'agency-marker',\n    isVisible: false,\n    isActive: false,\n    // does not respond to active context\n    opacity: 1,\n    types: [{\n      id: 'location',\n      label: 'Agency Location',\n      style: 'location',\n      isVisible: true,\n      display: true,\n      canFilter: true\n    }],\n    labelDisplay: 'select',\n    labels: []\n  }, {\n    id: 'stops',\n    type: 'markers',\n    label: 'Stops',\n    modelName: 'stop-point',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'pullinGarage',\n      label: 'Pullin Garage',\n      filterKey: 'mapId',\n      filterValue: 'pullinGarage',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.garagePlanned\n    }, {\n      id: 'pulloutGarage',\n      label: 'Pullout Garage',\n      filterKey: 'mapId',\n      filterValue: 'pulloutGarage',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.garagePlanned\n    }, {\n      id: 'break',\n      label: 'Break',\n      filterKey: 'mapId',\n      filterValue: 'break',\n      style: 'break',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.break\n    }, {\n      id: 'pick',\n      label: 'Pickup',\n      filterKey: 'mapId',\n      filterValue: 'pick',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.pickPlanned\n    }, {\n      id: 'drop',\n      label: 'Drop Off',\n      filterKey: 'mapId',\n      filterValue: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.dropPlanned\n    }, {\n      id: 'noshow',\n      label: 'No Show Stop',\n      filterKey: 'mapId',\n      filterValue: 'noshow',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.noshow\n    }, {\n      id: 'performedStop',\n      label: 'Performed Stop',\n      filterKey: 'mapId',\n      filterValue: 'performedStop',\n      canFilter: true,\n      isVisible: true,\n      display: true,\n      iconPath: _iconPaths.default.stops.pickCompleted\n    }, {\n      id: 'next',\n      label: 'Next Stop',\n      filterKey: 'mapId',\n      filterValue: 'next',\n      isVisible: true,\n      display: true,\n      canFilter: false,\n      iconPath: _iconPaths.default.stops.pickNext\n    }, {\n      id: 'wheelchair',\n      label: 'Wheelchair Stop',\n      filterKey: 'mapId',\n      filterValue: 'wheelchair',\n      isVisible: true,\n      display: true,\n      canFilter: false,\n      iconPath: _iconPaths.default.stops.pickPlannedWheelchair\n    }, {\n      id: 'NextWheelchair',\n      label: 'Wheelchair Next Stop',\n      filterKey: 'mapId',\n      filterValue: 'NextWheelchair',\n      isVisible: true,\n      display: true,\n      canFilter: false,\n      iconPath: _iconPaths.default.stops.pickNextWheelchair\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config3.default)\n  }, {\n    id: 'routes',\n    type: 'polylines',\n    label: 'Routes',\n    modelName: 'dispatch-route',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'planned',\n      label: 'Day of Service - Planned',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.planned,\n      linePath: _iconPaths.default.routes.plannedLine\n    }, {\n      id: 'navigation',\n      label: 'Navigation',\n      filterKey: 'isNavigating',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.navigation,\n      linePath: _iconPaths.default.routes.navigationLine\n    }, {\n      id: 'floatingBreak',\n      label: 'Floating Break',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.performed,\n      linePath: _iconPaths.default.routes.floatingBreak\n    }, {\n      id: 'performed',\n      label: 'Performed',\n      // needs to be present for any selected routes, even if it has no data\n      filterKey: 'isPerformed',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.performed,\n      linePath: _iconPaths.default.routes.performedLine\n    }, {\n      id: 'scheduled',\n      label: 'Scheduled Route',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.scheduled\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config.default)\n  }, {\n    id: 'trips',\n    type: 'polylines',\n    label: 'Trips',\n    modelName: 'trip',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'Completed',\n      label: 'Completed',\n      filterKey: 'tripStatus',\n      filterValue: 'Completed',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.completed\n    }, {\n      id: 'Scheduled',\n      label: 'Scheduled',\n      filterKey: 'tripStatus',\n      filterValue: 'Scheduled',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.scheduled\n    }, {\n      id: 'Waitlisted',\n      label: 'Waitlisted',\n      filterKey: 'tripStatus',\n      filterValue: 'Waitlisted',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.waitListed\n    }, {\n      id: 'Callback',\n      label: 'Callback',\n      filterKey: 'tripStatus',\n      filterValue: 'Callback',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.callback\n    }, {\n      id: 'Dispatched',\n      label: 'Dispatched',\n      filterKey: 'tripStatus',\n      filterValue: 'Dispatched',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.dispatched\n    }, {\n      id: 'EnRoute',\n      label: 'En Route',\n      filterKey: 'tripStatus',\n      filterValue: 'En route',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.enRoute\n    }, {\n      id: 'Active',\n      label: 'Active',\n      filterKey: 'tripStatus',\n      filterValue: 'Active',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.active\n    }, {\n      id: 'NoShowed',\n      label: 'No Showed',\n      filterKey: 'tripStatus',\n      filterValue: 'No showed',\n      style: 'dotted',\n      isVisible: false,\n      display: false,\n      canFilter: false,\n      iconPath: _iconPaths.default.trips.noShowed\n    }, {\n      id: 'NoShowRequested',\n      label: 'No Show Requested',\n      filterKey: 'tripStatus',\n      filterValue: 'No show requested',\n      style: 'dotted',\n      isVisible: false,\n      display: false,\n      canFilter: false,\n      iconPath: _iconPaths.default.trips.noShowRequest\n    }, {\n      id: 'Illegal',\n      label: 'Illegal',\n      filterKey: 'tripStatus',\n      filterValue: 'Illegal',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.illegal\n    }, {\n      id: 'UnScheduled',\n      label: 'UnScheduled',\n      filterKey: 'tripStatus',\n      filterValue: 'UnScheduled',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.unScheduled\n    }, {\n      id: 'Canceled',\n      label: 'Canceled',\n      filterKey: 'tripStatus',\n      filterValue: 'Canceled',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.canceled\n    }, {\n      id: 'Latecanceled',\n      label: 'Late Canceled',\n      filterKey: 'tripStatus',\n      filterValue: 'Late canceled',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.lateCanceled\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config2.default)\n  }, {\n    id: 'vehicles',\n    type: 'markers',\n    label: 'Vehicles',\n    modelName: 'vehicle',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'iq-vehicle',\n      label: 'Vehicle',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWork\n    }, {\n      id: 'iq-vehicle-danger',\n      label: 'Vehicle OTP Yellow (Danger)',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-danger',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkDanger\n    }, {\n      id: 'iq-vehicle-late',\n      label: 'Vehicle OTP Red (Late)',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-late',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkLate\n    }, {\n      id: 'iq-vehicle-emergency',\n      label: 'Vehicle in Emergency',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-emergency',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkEmergency\n    }, {\n      id: 'iq-vehicle-emergency-danger',\n      label: 'Vehicle in Emergency w/ OTP Danger',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-emergency-danger',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkEmergencyDanger\n    }, {\n      id: 'iq-vehicle-emergency-late',\n      label: 'Vehicle in Emergency w/ OTP Late',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-emergency-late',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.atWorkEmergencyLate\n    }, {\n      id: 'iq-vehicle-break',\n      label: 'Vehicle on Break',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-break',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.onBreak\n    }, {\n      id: 'iq-vehicle-breakdown',\n      label: 'Vehicle Breakdown',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-breakdown',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleBreakdown\n    }, {\n      id: 'iq-vehicle-powered-on',\n      label: 'Powered On',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-powered-on',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleNotSigned\n    }, {\n      id: 'iq-vehicle-gps-failure',\n      label: 'No GPS',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-gps-failure',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleGPSFailed\n    }, {\n      id: 'iq-vehicle-roadsup',\n      label: 'Road Supervisor',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-roadsup',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.loggedRoadSupervisor\n    }, {\n      id: 'iq-vehicle-communication-failure',\n      label: 'No Communication',\n      filterKey: 'mapId',\n      filterValue: 'iq-vehicle-communication-failure',\n      style: 'vehicle',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.vehicles.vehicleCommunicationFailed\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config4.default)\n  }, {\n    id: 'zones',\n    type: 'shapes',\n    label: 'Zones',\n    modelName: 'zone',\n    isVisible: true,\n    isActive: false,\n    isTraversal: true,\n    opacity: 1,\n    types: [{\n      id: 'normal',\n      label: 'Normal',\n      filterKey: 'status',\n      filterValue: 'normal',\n      style: 'normal',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.zones.normal\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config5.default)\n  }];\n  var _default = layers;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/map-configs/reconcile-layers\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const layers = [];\n  var _default = layers;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/map-configs/schedule-layers\", [\"exports\", \"adept-iq/config/icon-paths\", \"adept-iq/pods/components/iq-widgets/routes-widget/scheduleConfig\", \"adept-iq/pods/components/iq-widgets/trips-widget/config\", \"adept-iq/pods/components/iq-widgets/stops-widget/scheduleConfig\", \"adept-iq/pods/components/iq-widgets/zones-widget/config\"], function (_exports, _iconPaths, _scheduleConfig, _config, _scheduleConfig2, _config2) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // @TODO: make this JSON-only\n  // @TODO: it would be better to look up values from static config at time of use,\n  // but for now this handles the differences in config format\n  const extractLabelsFromWidgetConfig = widgetConfig => {\n    return widgetConfig.columns.map(columnConfig => {\n      const {\n        id,\n        index,\n        type,\n        label,\n        valuePath,\n        mapValuePath,\n        valuePreview,\n        searchable,\n        isMapLabelVisible,\n        unAvailable,\n        format\n      } = columnConfig;\n      return {\n        id,\n        index,\n        type,\n        label,\n        valuePath,\n        mapValuePath,\n        valuePreview,\n        format,\n        isSearchable: searchable,\n        isVisible: isMapLabelVisible,\n        unAvailable: unAvailable\n      };\n    });\n  };\n\n  const layers = [{\n    id: 'agency',\n    type: 'markers',\n    label: 'Agency',\n    modelName: 'agency-marker',\n    isVisible: false,\n    isActive: false,\n    // does not respond to active context\n    opacity: 1,\n    types: [{\n      id: 'location',\n      label: 'Agency Location',\n      style: 'location',\n      isVisible: true,\n      display: true,\n      canFilter: true\n    }],\n    labelDisplay: 'select',\n    labels: []\n  }, {\n    id: 'stops',\n    type: 'markers',\n    label: 'Stops',\n    modelName: ['trip-stop', 'route-break', 'stop-point'],\n    // needs to aggregate different types of models\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'break',\n      label: 'Break',\n      filterKey: 'mapId',\n      filterValue: 'break',\n      style: 'break',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.break\n    }, {\n      id: 'pick',\n      label: 'Pickup',\n      filterKey: 'mapId',\n      filterValue: 'pick',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.pickPlanned\n    }, {\n      id: 'drop',\n      label: 'Drop Off',\n      filterKey: 'mapId',\n      filterValue: 'drop',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.dropPlanned\n    }, {\n      id: 'pullinGarage',\n      label: 'Pullin Garage',\n      filterKey: 'mapId',\n      filterValue: 'pullinGarage',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.garagePlanned\n    }, {\n      id: 'pulloutGarage',\n      label: 'Pullout Garage',\n      filterKey: 'mapId',\n      filterValue: 'pulloutGarage',\n      style: 'garage',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.stops.garagePlanned\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_scheduleConfig2.default)\n  }, {\n    id: 'routes',\n    type: 'polylines',\n    label: 'Routes',\n    modelName: 'route',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'scheduled',\n      label: 'Scheduled Route',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.scheduled\n    }, {\n      id: 'planned',\n      label: 'Planned Route',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.planned,\n      linePath: _iconPaths.default.routes.plannedLine\n    }, {\n      id: 'navigation',\n      label: 'Navigation Route',\n      filterKey: 'isNavigating',\n      isVisible: true,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.navigation,\n      linePath: _iconPaths.default.routes.navigationLine\n    }, {\n      id: 'performed',\n      label: 'Performed Route',\n      // needs to be present for any selected routes, even if it has no data\n      // filterKey: 'isPerformed',\n      isVisible: false,\n      canFilter: true,\n      display: true,\n      iconPath: _iconPaths.default.routes.performed,\n      linePath: _iconPaths.default.routes.performedLine\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_scheduleConfig.default)\n  }, {\n    id: 'trips',\n    type: 'polylines',\n    label: 'Trips',\n    modelName: 'trip',\n    isVisible: true,\n    isActive: true,\n    opacity: 1,\n    types: [{\n      id: 'Completed',\n      label: 'Completed',\n      filterKey: 'tripStatus',\n      filterValue: 'Completed',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.completed\n    }, {\n      id: 'Scheduled',\n      label: 'Scheduled',\n      filterKey: 'tripStatus',\n      filterValue: 'Scheduled',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.scheduled\n    }, {\n      id: 'Waitlisted',\n      label: 'Waitlisted',\n      filterKey: 'tripStatus',\n      filterValue: 'Waitlisted',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.waitListed\n    }, {\n      id: 'Callback',\n      label: 'Callback',\n      filterKey: 'tripStatus',\n      filterValue: 'Callback',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.callback\n    }, {\n      id: 'Dispatched',\n      label: 'Dispatched',\n      filterKey: 'tripStatus',\n      filterValue: 'Dispatched',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.dispatched\n    }, {\n      id: 'EnRoute',\n      label: 'En Route',\n      filterKey: 'tripStatus',\n      filterValue: 'En route',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.enRoute\n    }, {\n      id: 'Active',\n      label: 'Active',\n      filterKey: 'tripStatus',\n      filterValue: 'Active',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.active\n    }, {\n      id: 'NoShowed',\n      label: 'No Showed',\n      filterKey: 'tripStatus',\n      filterValue: 'No showed',\n      style: 'dotted',\n      isVisible: false,\n      display: false,\n      canFilter: false,\n      iconPath: _iconPaths.default.trips.noShowed\n    }, {\n      id: 'NoShowRequested',\n      label: 'No Show Requested',\n      filterKey: 'tripStatus',\n      filterValue: 'No show requested',\n      style: 'dotted',\n      isVisible: false,\n      display: false,\n      canFilter: false,\n      iconPath: _iconPaths.default.trips.noShowRequest\n    }, {\n      id: 'Illegal',\n      label: 'Illegal',\n      filterKey: 'tripStatus',\n      filterValue: 'Illegal',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.illegal\n    }, {\n      id: 'UnScheduled',\n      label: 'UnScheduled',\n      filterKey: 'tripStatus',\n      filterValue: 'UnScheduled',\n      style: 'solid',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.unScheduled\n    }, {\n      id: 'Canceled',\n      label: 'Canceled',\n      filterKey: 'tripStatus',\n      filterValue: 'Canceled',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.canceled\n    }, {\n      id: 'Latecanceled',\n      label: 'Late Canceled',\n      filterKey: 'tripStatus',\n      filterValue: 'Late canceled',\n      style: 'dotted',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.trips.lateCanceled\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config.default)\n  }, {\n    id: 'zones',\n    type: 'shapes',\n    label: 'Zones',\n    modelName: 'zone',\n    isVisible: true,\n    isActive: false,\n    isTraversal: true,\n    opacity: 1,\n    types: [{\n      id: 'normal',\n      label: 'Normal',\n      filterKey: 'status',\n      filterValue: 'normal',\n      style: 'normal',\n      isVisible: true,\n      display: true,\n      canFilter: true,\n      iconPath: _iconPaths.default.zones.normal\n    }],\n    labelDisplay: 'select',\n    labels: extractLabelsFromWidgetConfig(_config2.default)\n  }];\n  var _default = layers;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/side-drawers/trip-transfer\", [\"exports\", \"adept-iq/classes/map-contexts/base\", \"adept-iq/config/environment\", \"adept-iq/classes/markers/stops/stop-point\", \"adept-iq/classes/markers/vehicles/iq\", \"adept-iq/classes/polylines/stops/iq\"], function (_exports, _base, _environment, _stopPoint, _iq, _iq2) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // will need this to decode impact payload polylines\n  // import mapbox from '@mapbox/polyline';\n  // will need this to render impact payload polylines\n  // import BaseStopMarker from 'adept-iq/classes/markers/stops/base';\n  var _default = _base.default.extend({\n    currentIqRoute: null,\n    destinationIqRoute: null,\n    selectedImpactPeriod: 'after',\n    // 'before' or 'after',\n    selectedImpactView: 'destination',\n    // 'current' or 'destination'\n    impactPayload: null,\n    // set this from trip-transfer component\n    // `BaseMapContext` overrides\n    isCenterReadOnly: true,\n    centerLat: Ember.computed.readOnly('polylinesCenterLat'),\n    centerLng: Ember.computed.readOnly('polylinesCenterLng'),\n    polylines: Ember.computed.readOnly('stopPolylines'),\n    markers: Ember.computed.readOnly('aggregatedMarkers'),\n    // local properties\n    polylinesCenterLat: Ember.computed('polylines.@each.points', function () {\n      const lats = this.get('polylines').mapBy('points').reduce((arr, points) => {\n        if (Ember.isEmpty(points)) return arr;\n        const polylineLats = points.map(p => p[0]);\n        arr.push(...polylineLats);\n        return arr;\n      }, []);\n      if (Ember.isEmpty(lats)) return _environment.default.tomtom.search.center.lat;\n      return (Math.min(...lats) + Math.max(...lats)) / 2;\n    }),\n    polylinesCenterLng: Ember.computed('polylines.@each.points', function () {\n      const lngs = this.get('polylines').mapBy('points').reduce((arr, points) => {\n        if (Ember.isEmpty(points)) return arr;\n        const polylineLngs = points.map(p => p[1]);\n        arr.push(...polylineLngs);\n        return arr;\n      }, []);\n      if (Ember.isEmpty(lngs)) return _environment.default.tomtom.search.center.lon;\n      return (Math.min(...lngs) + Math.max(...lngs)) / 2;\n    }),\n    aggregatedMarkers: Ember.computed('stopMarkers', 'vehicleMarker', function () {\n      const stopMarkers = this.get('stopMarkers');\n      const vehicleMarker = this.get('vehicleMarker');\n      const markers = [vehicleMarker, ...stopMarkers].compact();\n      return markers;\n    }),\n    vehicleMarker: Ember.computed('selectedImpactView', 'currentIqRoute.avlmRoute.avlmVehicle.iqVehicle', 'destinationIqRoute.avlmRoute.avlmVehicle.iqVehicle', function () {\n      const iqRoute = this.get('selectedImpactView') === 'current' ? this.get('currentIqRoute.iqRoute') : this.get('destinationIqRoute');\n      if (Ember.isNone(iqRoute) || Ember.isBlank(iqRoute.get('id'))) return null;\n      const iqVehicle = iqRoute.get('avlmRoute.avlmVehicle.iqVehicle') || iqRoute.get('dispatchRoute.assignedVehicle.iqVehicle');\n      if (Ember.isNone(iqVehicle) || Ember.isBlank(iqVehicle.get('id'))) return null;\n      return _iq.default.create({\n        id: `${Ember.guidFor(this)}-vehicle-${iqVehicle.get('id')}`,\n        record: iqVehicle\n      });\n    }),\n    stopMarkers: Ember.computed('selectedImpactPeriod', 'selectedImpactView', 'currentStopMarkersBefore', 'currentStopMarkersAfter', 'destinationStopMarkersBefore', 'destinationStopMarkersAfter', function () {\n      const period = this.get('selectedImpactPeriod');\n      const view = this.get('selectedImpactView');\n\n      switch (`${view}-${period}`) {\n        case 'current-before':\n          return this.get('currentStopMarkersBefore');\n\n        case 'current-after':\n          return this.get('currentStopMarkersAfter');\n\n        case 'destination-before':\n          return this.get('destinationStopMarkersBefore');\n\n        case 'destination-after':\n          return this.get('destinationStopMarkersAfter');\n\n        default:\n          return [];\n      }\n    }),\n    currentStopMarkersBefore: Ember.computed('impactPayload', function () {\n      const impactBefore = this.get('impactPayload.before');\n      if (Ember.isEmpty(impactBefore)) return [];\n      const stopPoints = impactBefore.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      return stopPoints.map(stopPoint => {\n        return _stopPoint.default.create({\n          id: `${contextGuid}-destination-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n      });\n    }),\n    currentStopMarkersAfter: Ember.computed('impactPayload', function () {\n      const impactAfter = this.get('impactPayload.after');\n      if (Ember.isEmpty(impactAfter)) return [];\n      const stopPoints = impactAfter.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      return stopPoints.map(stopPoint => {\n        return _stopPoint.default.create({\n          id: `${contextGuid}-destination-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n      });\n    }),\n    destinationStopMarkersBefore: Ember.computed('impactPayload', function () {\n      const impactBefore = this.get('impactPayload.before');\n      if (Ember.isEmpty(impactBefore)) return [];\n      const stopPoints = impactBefore.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      return stopPoints.map(stopPoint => {\n        return _stopPoint.default.create({\n          id: `${contextGuid}-destination-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n      });\n    }),\n    destinationStopMarkersAfter: Ember.computed('impactPayload', function () {\n      const impactAfter = this.get('impactPayload.after');\n      if (Ember.isEmpty(impactAfter)) return [];\n      const stopPoints = impactAfter.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      return stopPoints.map(stopPoint => {\n        return _stopPoint.default.create({\n          id: `${contextGuid}-destination-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n      });\n    }),\n    stopPolylines: Ember.computed('selectedImpactPeriod', 'selectedImpactView', 'currentStopPolylinesBefore', 'currentStopPolylinesAfter', 'destinationStopPolylinesBefore', 'destinationStopPolylinesAfter', function () {\n      const period = this.get('selectedImpactPeriod');\n      const view = this.get('selectedImpactView');\n\n      switch (`${view}-${period}`) {\n        case 'current-before':\n          return this.get('currentStopPolylinesBefore');\n\n        case 'current-after':\n          return this.get('currentStopPolylinesAfter');\n\n        case 'destination-before':\n          return this.get('destinationStopPolylinesBefore');\n\n        case 'destination-after':\n          return this.get('destinationStopPolylinesAfter');\n\n        default:\n          return [];\n      }\n    }),\n    currentStopPolylinesBefore: Ember.computed('impactPayload', function () {\n      const impactBefore = this.get('impactPayload.before');\n      if (Ember.isEmpty(impactBefore)) return [];\n      const stopPoints = impactBefore.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      const polylines = stopPoints.reduce((arr, stopPoint) => {\n        const polyline = _iq2.default.create({\n          id: `${contextGuid}-current-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n\n        arr.push(polyline);\n        return arr;\n      }, []);\n      return polylines;\n    }),\n    // TODO: derive from impact payload\n    // need Source Impact Payload\n    currentStopPolylinesAfter: Ember.computed('impactPayload', function () {\n      const impactAfter = this.get('impactPayload.after');\n      if (Ember.isEmpty(impactAfter)) return [];\n      const stopPoints = impactAfter.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      const polylines = stopPoints.reduce((arr, stopPoint) => {\n        const polyline = _iq2.default.create({\n          id: `${contextGuid}-current-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n\n        arr.push(polyline);\n        return arr;\n      }, []);\n      return polylines;\n    }),\n    destinationStopPolylinesBefore: Ember.computed('impactPayload.before', function () {\n      const impactBefore = this.get('impactPayload.before');\n      if (Ember.isEmpty(impactBefore)) return [];\n      const stopPoints = impactBefore.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      const polylines = stopPoints.reduce((arr, stopPoint) => {\n        const polyline = _iq2.default.create({\n          id: `${contextGuid}-current-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n\n        arr.push(polyline);\n        return arr;\n      }, []);\n      return polylines;\n    }),\n    // TODO: derive from impact payload\n    destinationStopPolylinesAfter: Ember.computed('impactPayload', function () {\n      const impactAfter = this.get('impactPayload.after');\n      if (Ember.isEmpty(impactAfter)) return [];\n      const stopPoints = impactAfter.stops;\n      const contextGuid = Ember.guidFor(this);\n      if (Ember.isEmpty(stopPoints)) return [];\n      const polylines = stopPoints.reduce((arr, stopPoint) => {\n        const polyline = _iq2.default.create({\n          id: `${contextGuid}-destination-after-${stopPoint.id}`,\n          record: stopPoint\n        });\n\n        arr.push(polyline);\n        return arr;\n      }, []);\n      return polylines;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/workspaces/avlm\", [\"exports\", \"adept-iq/classes/map-contexts/layered\", \"adept-iq/classes/markers/agency\", \"adept-iq/classes/markers/stops/avlm-stop-point\", \"adept-iq/classes/markers/vehicles/iq\", \"adept-iq/classes/polylines/trips/iq\", \"adept-iq/classes/polylines/routes/planned/iq\", \"adept-iq/classes/polylines/routes/navigation/iq\", \"adept-iq/classes/polylines/routes/performed/iq\", \"adept-iq/classes/polygons/zone\", \"adept-iq/classes/shapes/zone\", \"adept-iq/classes/map-contexts/map-configs/avlm-layers\"], function (_exports, _layered, _agency, _avlmStopPoint, _iq, _iq2, _iq3, _iq4, _iq5, _zone, _zone2, _avlmLayers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _layered.default.extend({\n    // must be passed on init\n    activeContext: null,\n    store: null,\n    workspace: null,\n    layersConfig: _avlmLayers.default,\n    polylineData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    markerData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    polygonData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    shapeData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    layeredRecords: Ember.computed('activeContext.topActiveContext.{implicitData,activeVehicles}', 'layers', function () {\n      return this.get('layers').reduce((obj, layer) => {\n        obj[layer.id] = this._recordsForLayer(layer);\n        return obj;\n      }, {});\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n\n      this.focusActiveContext = e => {\n        const activeContext = this.get('activeContext.topActiveContext'); // this `iq` object gets attached by the marker/polyline data join\n\n        if (!e.target.iq) return;\n        const {\n          isActive,\n          modelName,\n          modelId\n        } = e.target.iq;\n        if (!isActive) return;\n        const record = store.peekRecord(modelName, modelId);\n        if (!record) return;\n        activeContext.replaceCheckedRecordsByType([record]);\n      };\n    },\n\n    destroy() {\n      this.focusActiveContext = null;\n\n      this._super(...arguments);\n    },\n\n    // handle dbl click events for markers\n    markerObjectFor() {\n      const marker = this._super(...arguments);\n\n      if (!marker.get('_dblclickHandlerInitialized')) {\n        marker.on('dblclick', this.focusActiveContext);\n        marker.set('_dblclickHandlerInitialized', true);\n      }\n\n      return marker;\n    },\n\n    // handle dbl click events for polylines\n    polylineObjectFor() {\n      const polyline = this._super(...arguments);\n\n      if (!polyline.get('_dblclickHandlerInitialized')) {\n        polyline.on('dblclick', this.focusActiveContext);\n        polyline.set('_dblclickHandlerInitialized', true);\n      }\n\n      return polyline;\n    },\n\n    _recordsForLayer(layer) {\n      switch (layer.id) {\n        case 'stops':\n          return this._recordsForStopsLayer(layer);\n\n        case 'vehicles':\n          return this._recordsForVehicleLayer(layer);\n\n        default:\n          return this._recordsForOtherLayer(layer);\n      }\n    },\n\n    _recordsForStopsLayer(layer) {\n      const stopPoints = this._recordsForOtherLayer(layer); // if it is a trip active context\n      // only include the pick and drop stops\n\n\n      if (this.get('activeContext.topActiveContext').tripActiveContext()) {\n        return stopPoints.filter(stopPoint => {\n          return ['pick', 'drop'].includes(stopPoint.get('stopType'));\n        });\n      }\n\n      return stopPoints;\n    },\n\n    _recordsForVehicleLayer(layer) {\n      if (!layer.isVisible) return []; // we are constantly displaying all vehicles\n\n      const structuredData = this.get('activeContext.topActiveContext.workspaceData'); // TODO: read `workspace-context` structured data instead of store\n\n      const records = layer.isActive && structuredData ? structuredData[layer.modelName] : [];\n      return records;\n    },\n\n    _recordsForOtherLayer(layer) {\n      if (!layer.isVisible || !layer.isActive) return [];\n      const structuredData = this.get('activeContext.topActiveContext.structuredMapData');\n      const records = structuredData ? structuredData[layer.modelName] : this.get('store').peekAll(layer.modelName);\n      if (Ember.isEmpty(records)) return [];\n      return records;\n    },\n\n    // used to create marker, polyline, etc objects for data join\n    _polygonObjectFor(layer, layerType, record) {\n      if (!this._polygonCache) {\n        this._polygonCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polygon = this._polygonCache[id];\n\n      if (!polygon) {\n        const polygonClass = this._polygonClassForLayer(layer);\n\n        polygon = polygonClass.create({\n          id,\n          record\n        });\n        this._polygonCache[id] = polygon;\n      }\n\n      return polygon;\n    },\n\n    _markerObjectFor(layer, layerType, record) {\n      if (!this._markerCache) {\n        this._markerCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let marker = this._markerCache[id];\n\n      if (!marker) {\n        const markerClass = this._markerClassForLayer(layer);\n\n        marker = markerClass.create({\n          id,\n          record\n        });\n        this._markerCache[id] = marker;\n      }\n\n      return marker;\n    },\n\n    _shapeObjectFor(layer, layerType, record) {\n      if (!this._shapeCache) {\n        this._shapeCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let shape = this._shapeCache[id];\n\n      if (!shape) {\n        const shapeClass = this._shapeClassForLayer(layer);\n\n        shape = shapeClass.create({\n          id,\n          record\n        });\n        this._shapeCache[id] = shape;\n      }\n\n      return shape;\n    },\n\n    _polylineObjectFor(layer, layerType, record) {\n      if (!this._polylineCache) {\n        this._polylineCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polyline = this._polylineCache[id];\n\n      if (!polyline) {\n        const polylineClass = this._polylineClassForLayer(layer, layerType);\n\n        polyline = polylineClass.create({\n          id,\n          record,\n          polylineService: this.get('polylineService')\n        });\n        this._polylineCache[id] = polyline;\n      }\n\n      return polyline;\n    },\n\n    _markerClassForLayer(layer) {\n      switch (layer.id) {\n        case 'agency':\n          return _agency.default;\n\n        case 'vehicles':\n          return _iq.default;\n\n        case 'stops':\n          return _avlmStopPoint.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polylineClassForLayer(layer, layerType) {\n      switch (layer.id) {\n        case 'routes':\n          return this._routePolylineClassForLayerType(layerType);\n\n        case 'trips':\n          return _iq2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _routePolylineClassForLayerType(layerType) {\n      switch (layerType.id) {\n        case 'planned':\n          return _iq3.default;\n\n        case 'navigation':\n          return _iq4.default;\n\n        case 'performed':\n          return _iq5.default;\n\n        default:\n          throw new Error(`unhandled route layerType id '${layerType.id}'`);\n      }\n    },\n\n    _shapeClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polygonClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/workspaces/booking\", [\"exports\", \"adept-iq/classes/map-contexts/layered\", \"adept-iq/classes/markers/agency\", \"adept-iq/classes/markers/stops/avlm-stop-point\", \"adept-iq/classes/markers/vehicles/iq\", \"adept-iq/classes/polylines/trips/iq\", \"adept-iq/classes/polylines/routes/planned/iq\", \"adept-iq/classes/polylines/routes/navigation/iq\", \"adept-iq/classes/polylines/routes/performed/iq\", \"adept-iq/classes/polygons/zone\", \"adept-iq/classes/shapes/zone\", \"tomtom\", \"adept-iq/classes/map-contexts/map-configs/avlm-layers\"], function (_exports, _layered, _agency, _avlmStopPoint, _iq, _iq2, _iq3, _iq4, _iq5, _zone, _zone2, _tomtom, _avlmLayers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _layered.default.extend({\n    // must be passed on init\n    activeContext: null,\n    store: null,\n    workspace: null,\n    layersConfig: _avlmLayers.default,\n    vehicleCluster: _tomtom.default.L.markerClusterGroup({\n      showCoverageOnHover: false\n    }),\n    polylineData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    markerData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    polygonData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    shapeData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    layeredRecords: Ember.computed('activeContext.topActiveContext.{implicitData,activeVehicles}', 'layers', function () {\n      return this.get('layers').reduce((obj, layer) => {\n        obj[layer.id] = this._recordsForLayer(layer);\n        return obj;\n      }, {});\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n\n      this.focusActiveContext = e => {\n        const activeContext = this.get('activeContext.topActiveContext'); // this `iq` object gets attached by the marker/polyline data join\n\n        if (!e.target.iq) return;\n        const {\n          isActive,\n          modelName,\n          modelId\n        } = e.target.iq;\n        if (!isActive) return;\n        const record = store.peekRecord(modelName, modelId);\n        if (!record) return;\n        activeContext.replaceCheckedRecordsByType([record]);\n      };\n    },\n\n    destroy() {\n      this.focusActiveContext = null;\n\n      this._super(...arguments);\n    },\n\n    // handle dbl click events for markers\n    markerObjectFor() {\n      const marker = this._super(...arguments);\n\n      if (!marker.get('_dblclickHandlerInitialized')) {\n        marker.on('dblclick', this.focusActiveContext);\n        marker.set('_dblclickHandlerInitialized', true);\n      }\n\n      return marker;\n    },\n\n    // handle dbl click events for polylines\n    polylineObjectFor() {\n      const polyline = this._super(...arguments);\n\n      if (!polyline.get('_dblclickHandlerInitialized')) {\n        polyline.on('dblclick', this.focusActiveContext);\n        polyline.set('_dblclickHandlerInitialized', true);\n      }\n\n      return polyline;\n    },\n\n    _recordsForLayer(layer) {\n      switch (layer.id) {\n        case 'stops':\n          return this._recordsForStopsLayer(layer);\n\n        case 'vehicles':\n          return this._recordsForVehicleLayer(layer);\n\n        default:\n          return this._recordsForOtherLayer(layer);\n      }\n    },\n\n    _recordsForStopsLayer(layer) {\n      const stopPoints = this._recordsForOtherLayer(layer); // if it is a trip active context\n      // only include the pick and drop stops\n\n\n      if (this.get('activeContext.topActiveContext').tripActiveContext()) {\n        return stopPoints.filter(stopPoint => {\n          return ['pick', 'drop'].includes(stopPoint.get('stopType'));\n        });\n      }\n\n      return stopPoints;\n    },\n\n    _recordsForVehicleLayer(layer) {\n      if (!layer.isVisible) return []; // we are constantly displaying all vehicles\n\n      const structuredData = this.get('activeContext.topActiveContext.workspaceData'); // TODO: read `workspace-context` structured data instead of store\n\n      const records = layer.isActive && structuredData ? structuredData[layer.modelName] : [];\n      return records;\n    },\n\n    _recordsForOtherLayer(layer) {\n      if (!layer.isVisible || !layer.isActive) return [];\n      const structuredData = this.get('activeContext.topActiveContext.structuredMapData');\n      const records = structuredData ? structuredData[layer.modelName] : this.get('store').peekAll(layer.modelName);\n      if (Ember.isEmpty(records)) return [];\n      return records;\n    },\n\n    // used to create marker, polyline, etc objects for data join\n    _polygonObjectFor(layer, layerType, record) {\n      if (!this._polygonCache) {\n        this._polygonCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polygon = this._polygonCache[id];\n\n      if (!polygon) {\n        const polygonClass = this._polygonClassForLayer(layer);\n\n        polygon = polygonClass.create({\n          id,\n          record\n        });\n        this._polygonCache[id] = polygon;\n      }\n\n      return polygon;\n    },\n\n    _markerObjectFor(layer, layerType, record) {\n      if (!this._markerCache) {\n        this._markerCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let marker = this._markerCache[id];\n\n      if (!marker) {\n        const markerClass = this._markerClassForLayer(layer);\n\n        marker = markerClass.create({\n          id,\n          record\n        });\n        this._markerCache[id] = marker;\n      }\n\n      return marker;\n    },\n\n    _shapeObjectFor(layer, layerType, record) {\n      if (!this._shapeCache) {\n        this._shapeCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let shape = this._shapeCache[id];\n\n      if (!shape) {\n        const shapeClass = this._shapeClassForLayer(layer);\n\n        shape = shapeClass.create({\n          id,\n          record\n        });\n        this._shapeCache[id] = shape;\n      }\n\n      return shape;\n    },\n\n    _polylineObjectFor(layer, layerType, record) {\n      if (!this._polylineCache) {\n        this._polylineCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polyline = this._polylineCache[id];\n\n      if (!polyline) {\n        const polylineClass = this._polylineClassForLayer(layer, layerType);\n\n        polyline = polylineClass.create({\n          id,\n          record,\n          polylineService: this.get('polylineService')\n        });\n        this._polylineCache[id] = polyline;\n      }\n\n      return polyline;\n    },\n\n    _markerClassForLayer(layer) {\n      switch (layer.id) {\n        case 'agency':\n          return _agency.default;\n\n        case 'vehicles':\n          return _iq.default;\n\n        case 'stops':\n          return _avlmStopPoint.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polylineClassForLayer(layer, layerType) {\n      switch (layer.id) {\n        case 'routes':\n          return this._routePolylineClassForLayerType(layerType);\n\n        case 'trips':\n          return _iq2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _routePolylineClassForLayerType(layerType) {\n      switch (layerType.id) {\n        case 'planned':\n          return _iq3.default;\n\n        case 'navigation':\n          return _iq4.default;\n\n        case 'performed':\n          return _iq5.default;\n\n        default:\n          throw new Error(`unhandled route layerType id '${layerType.id}'`);\n      }\n    },\n\n    _shapeClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polygonClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/workspaces/dispatch\", [\"exports\", \"adept-iq/classes/map-contexts/layered\", \"adept-iq/classes/markers/agency\", \"adept-iq/classes/markers/stops/stop-point\", \"adept-iq/classes/markers/vehicles/iq\", \"adept-iq/classes/polylines/trips/iq\", \"adept-iq/classes/polylines/routes/planned/iq\", \"adept-iq/classes/polylines/routes/floatingBreak/iq\", \"adept-iq/classes/polylines/routes/navigation/iq\", \"adept-iq/classes/polylines/routes/performed/iq\", \"adept-iq/classes/polylines/routes/scheduled/iq\", \"adept-iq/classes/polygons/zone\", \"adept-iq/classes/shapes/zone\", \"adept-iq/classes/map-contexts/map-configs/dispatch-layers\"], function (_exports, _layered, _agency, _stopPoint, _iq, _iq2, _iq3, _iq4, _iq5, _iq6, _iq7, _zone, _zone2, _dispatchLayers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _layered.default.extend({\n    // must be passed on init\n    activeContext: null,\n    store: null,\n    workspace: null,\n    layersConfig: _dispatchLayers.default,\n    polylineData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    markerData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    polygonData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    shapeData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    layeredRecords: Ember.computed('activeContext.topActiveContext.{implicitData,activeVehicles}', 'layers', function () {\n      return this.get('layers').reduce((obj, layer) => {\n        obj[layer.id] = this._recordsForLayer(layer);\n        return obj;\n      }, {});\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n\n      this.focusActiveContext = e => {\n        const activeContext = this.get('activeContext.topActiveContext'); // this `iq` object gets attached by the marker/polyline data join\n\n        if (!e.target.iq) return;\n        const {\n          isActive,\n          modelName,\n          modelId\n        } = e.target.iq;\n        if (!isActive) return;\n        const record = store.peekRecord(modelName, modelId);\n        if (!record) return;\n        activeContext.replaceCheckedRecordsByType([record]);\n      };\n    },\n\n    destroy() {\n      this.focusActiveContext = null;\n\n      this._super(...arguments);\n    },\n\n    // handle dbl click events for markers\n    markerObjectFor() {\n      const marker = this._super(...arguments);\n\n      if (!marker.get('_dblclickHandlerInitialized')) {\n        marker.on('dblclick', this.focusActiveContext);\n        marker.set('_dblclickHandlerInitialized', true);\n      }\n\n      return marker;\n    },\n\n    // handle dbl click events for polylines\n    polylineObjectFor() {\n      const polyline = this._super(...arguments);\n\n      if (!polyline.get('_dblclickHandlerInitialized')) {\n        polyline.on('dblclick', this.focusActiveContext);\n        polyline.set('_dblclickHandlerInitialized', true);\n      }\n\n      return polyline;\n    },\n\n    _recordsForLayer(layer) {\n      switch (layer.id) {\n        case 'stops':\n          return this._recordsForStopsLayer(layer);\n\n        case 'vehicles':\n          return this._recordsForVehicleLayer(layer);\n\n        default:\n          return this._recordsForOtherLayer(layer);\n      }\n    },\n\n    _recordsForStopsLayer(layer) {\n      let stopPoints = this._recordsForOtherLayer(layer); //in case the trip does not belong to any route and is not scheduled, it wouldn't have any StopPoints associated to it.\n      //  so we add trip-stop model if the stop-points have been empty.\n\n\n      const tripIds = stopPoints.map(stopPoint => stopPoint.get('trip.id'));\n\n      const tripStops = this._recordsForOtherLayer({ ...layer,\n        modelName: 'trip-stop'\n      }).filter(tripStop => {\n        return !tripIds.includes(tripStop.get('trip.id'));\n      });\n\n      stopPoints = stopPoints.concat(tripStops);\n      return stopPoints;\n    },\n\n    _recordsForVehicleLayer(layer) {\n      if (!layer.isVisible) return []; // we are constantly displaying all vehicles\n\n      const structuredData = this.get('activeContext.topActiveContext.workspaceData'); // TODO: read `workspace-context` structured data instead of store\n\n      const records = layer.isActive && structuredData ? structuredData[layer.modelName] : [];\n      return records;\n    },\n\n    _recordsForOtherLayer(layer) {\n      if (!layer.isVisible || !layer.isActive) return [];\n      const modelNames = Ember.makeArray(layer.modelName);\n      const structuredData = this.get('activeContext.topActiveContext.structuredMapData');\n      const records = modelNames.reduce((record, modelName) => {\n        const data = structuredData ? structuredData[modelName] || [] : [];\n        record.push(...data);\n        return record;\n      }, []);\n      if (Ember.isEmpty(records)) return [];\n      return records;\n    },\n\n    // used to create marker, polyline, etc objects for data join\n    _polygonObjectFor(layer, layerType, record) {\n      if (!this._polygonCache) {\n        this._polygonCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polygon = this._polygonCache[id];\n\n      if (!polygon) {\n        const polygonClass = this._polygonClassForLayer(layer);\n\n        polygon = polygonClass.create({\n          id,\n          record\n        });\n        this._polygonCache[id] = polygon;\n      }\n\n      return polygon;\n    },\n\n    _markerObjectFor(layer, layerType, record) {\n      if (!this._markerCache) {\n        this._markerCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let marker = this._markerCache[id];\n\n      if (!marker) {\n        const markerClass = this._markerClassForLayer(layer);\n\n        marker = markerClass.create({\n          id,\n          record\n        });\n        this._markerCache[id] = marker;\n      }\n\n      return marker;\n    },\n\n    _shapeObjectFor(layer, layerType, record) {\n      if (!this._shapeCache) {\n        this._shapeCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let shape = this._shapeCache[id];\n\n      if (!shape) {\n        const shapeClass = this._shapeClassForLayer(layer);\n\n        shape = shapeClass.create({\n          id,\n          record\n        });\n        this._shapeCache[id] = shape;\n      }\n\n      return shape;\n    },\n\n    _polylineObjectFor(layer, layerType, record) {\n      if (!this._polylineCache) {\n        this._polylineCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polyline = this._polylineCache[id];\n\n      if (!polyline) {\n        const polylineClass = this._polylineClassForLayer(layer, layerType);\n\n        polyline = polylineClass.create({\n          id,\n          record,\n          polylineService: this.get('polylineService')\n        });\n        this._polylineCache[id] = polyline;\n      }\n\n      return polyline;\n    },\n\n    _markerClassForLayer(layer) {\n      switch (layer.id) {\n        case 'agency':\n          return _agency.default;\n\n        case 'vehicles':\n          return _iq.default;\n\n        case 'stops':\n          return _stopPoint.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polylineClassForLayer(layer, layerType) {\n      switch (layer.id) {\n        case 'routes':\n          return this._routePolylineClassForLayerType(layerType);\n\n        case 'trips':\n          return _iq2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _routePolylineClassForLayerType(layerType) {\n      switch (layerType.id) {\n        case 'planned':\n          return _iq3.default;\n\n        case 'navigation':\n          return _iq5.default;\n\n        case 'performed':\n          return _iq6.default;\n\n        case 'scheduled':\n          return _iq7.default;\n\n        case 'floatingBreak':\n          return _iq4.default;\n\n        default:\n          throw new Error(`unhandled route layerType id '${layerType.id}'`);\n      }\n    },\n\n    _shapeClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polygonClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/workspaces/permission\", [\"exports\", \"adept-iq/classes/map-contexts/layered\", \"adept-iq/classes/markers/agency\", \"adept-iq/classes/markers/stops/stop-point\", \"adept-iq/classes/markers/vehicles/iq\", \"adept-iq/classes/polylines/trips/iq\", \"adept-iq/classes/polylines/routes/planned/iq\", \"adept-iq/classes/polylines/routes/floatingBreak/iq\", \"adept-iq/classes/polylines/routes/navigation/iq\", \"adept-iq/classes/polylines/routes/performed/iq\", \"adept-iq/classes/polylines/routes/scheduled/iq\", \"adept-iq/classes/polygons/zone\", \"adept-iq/classes/shapes/zone\", \"adept-iq/classes/map-contexts/map-configs/dispatch-layers\"], function (_exports, _layered, _agency, _stopPoint, _iq, _iq2, _iq3, _iq4, _iq5, _iq6, _iq7, _zone, _zone2, _dispatchLayers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _layered.default.extend({\n    // must be passed on init\n    activeContext: null,\n    store: null,\n    workspace: null,\n    layersConfig: _dispatchLayers.default,\n    polylineData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    markerData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    polygonData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    shapeData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    layeredRecords: Ember.computed('activeContext.topActiveContext.{implicitData,activeVehicles}', 'layers', function () {\n      return this.get('layers').reduce((obj, layer) => {\n        obj[layer.id] = this._recordsForLayer(layer);\n        return obj;\n      }, {});\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n\n      this.focusActiveContext = e => {\n        const activeContext = this.get('activeContext.topActiveContext'); // this `iq` object gets attached by the marker/polyline data join\n\n        if (!e.target.iq) return;\n        const {\n          isActive,\n          modelName,\n          modelId\n        } = e.target.iq;\n        if (!isActive) return;\n        const record = store.peekRecord(modelName, modelId);\n        if (!record) return;\n        activeContext.replaceCheckedRecordsByType([record]);\n      };\n    },\n\n    destroy() {\n      this.focusActiveContext = null;\n\n      this._super(...arguments);\n    },\n\n    // handle dbl click events for markers\n    markerObjectFor() {\n      const marker = this._super(...arguments);\n\n      if (!marker.get('_dblclickHandlerInitialized')) {\n        marker.on('dblclick', this.focusActiveContext);\n        marker.set('_dblclickHandlerInitialized', true);\n      }\n\n      return marker;\n    },\n\n    // handle dbl click events for polylines\n    polylineObjectFor() {\n      const polyline = this._super(...arguments);\n\n      if (!polyline.get('_dblclickHandlerInitialized')) {\n        polyline.on('dblclick', this.focusActiveContext);\n        polyline.set('_dblclickHandlerInitialized', true);\n      }\n\n      return polyline;\n    },\n\n    _recordsForLayer(layer) {\n      return this._recordsForOtherLayer(layer);\n    },\n\n    _recordsForOtherLayer(layer) {\n      if (!layer.isVisible || !layer.isActive) return [];\n      const modelNames = Ember.makeArray(layer.modelName);\n      const structuredData = this.get('activeContext.topActiveContext.structuredMapData');\n      const records = modelNames.reduce((record, modelName) => {\n        const data = structuredData ? structuredData[modelName] || [] : [];\n        record.push(...data);\n        return record;\n      }, []);\n      if (Ember.isEmpty(records)) return [];\n      return records;\n    },\n\n    // used to create marker, polyline, etc objects for data join\n    _polygonObjectFor(layer, layerType, record) {\n      if (!this._polygonCache) {\n        this._polygonCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polygon = this._polygonCache[id];\n\n      if (!polygon) {\n        const polygonClass = this._polygonClassForLayer(layer);\n\n        polygon = polygonClass.create({\n          id,\n          record\n        });\n        this._polygonCache[id] = polygon;\n      }\n\n      return polygon;\n    },\n\n    _markerObjectFor(layer, layerType, record) {\n      if (!this._markerCache) {\n        this._markerCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let marker = this._markerCache[id];\n\n      if (!marker) {\n        const markerClass = this._markerClassForLayer(layer);\n\n        marker = markerClass.create({\n          id,\n          record\n        });\n        this._markerCache[id] = marker;\n      }\n\n      return marker;\n    },\n\n    _shapeObjectFor(layer, layerType, record) {\n      if (!this._shapeCache) {\n        this._shapeCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let shape = this._shapeCache[id];\n\n      if (!shape) {\n        const shapeClass = this._shapeClassForLayer(layer);\n\n        shape = shapeClass.create({\n          id,\n          record\n        });\n        this._shapeCache[id] = shape;\n      }\n\n      return shape;\n    },\n\n    _polylineObjectFor(layer, layerType, record) {\n      if (!this._polylineCache) {\n        this._polylineCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polyline = this._polylineCache[id];\n\n      if (!polyline) {\n        const polylineClass = this._polylineClassForLayer(layer, layerType);\n\n        polyline = polylineClass.create({\n          id,\n          record,\n          polylineService: this.get('polylineService')\n        });\n        this._polylineCache[id] = polyline;\n      }\n\n      return polyline;\n    },\n\n    _markerClassForLayer(layer) {\n      switch (layer.id) {\n        case 'agency':\n          return _agency.default;\n\n        case 'vehicles':\n          return _iq.default;\n\n        case 'stops':\n          return _stopPoint.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polylineClassForLayer(layer, layerType) {\n      switch (layer.id) {\n        case 'routes':\n          return this._routePolylineClassForLayerType(layerType);\n\n        case 'trips':\n          return _iq2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _routePolylineClassForLayerType(layerType) {\n      switch (layerType.id) {\n        case 'planned':\n          return _iq3.default;\n\n        case 'navigation':\n          return _iq5.default;\n\n        case 'performed':\n          return _iq6.default;\n\n        case 'scheduled':\n          return _iq7.default;\n\n        case 'floatingBreak':\n          return _iq4.default;\n\n        default:\n          throw new Error(`unhandled route layerType id '${layerType.id}'`);\n      }\n    },\n\n    _shapeClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polygonClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/workspaces/reconcile\", [\"exports\", \"adept-iq/classes/map-contexts/layered\", \"adept-iq/classes/markers/agency\", \"adept-iq/classes/markers/stops/avlm-stop-point\", \"adept-iq/classes/polylines/trips/iq\", \"adept-iq/classes/polylines/routes/planned/iq\", \"adept-iq/classes/polylines/routes/navigation/iq\", \"adept-iq/classes/polylines/routes/performed/iq\", \"adept-iq/classes/polygons/zone\", \"adept-iq/classes/shapes/zone\", \"adept-iq/classes/map-contexts/map-configs/reconcile-layers\"], function (_exports, _layered, _agency, _avlmStopPoint, _iq, _iq2, _iq3, _iq4, _zone, _zone2, _reconcileLayers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _layered.default.extend({\n    // must be passed on init\n    activeContext: null,\n    store: null,\n    workspace: null,\n    layersConfig: _reconcileLayers.default,\n    vehicleCluster: window.L.markerClusterGroup({\n      showCoverageOnHover: false\n    }),\n    polylineData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    markerData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    polygonData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    shapeData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    layeredRecords: Ember.computed('activeContext.topActiveContext.{implicitData,activeVehicles}', 'layers', function () {\n      return this.get('layers').reduce((obj, layer) => {\n        obj[layer.id] = this._recordsForLayer(layer);\n        return obj;\n      }, {});\n    }),\n    updateMap: Ember.observer('activeContext.topActiveContext.structuredMapData', function () {\n      this.notifyPropertyChange('layers');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n\n      this.focusActiveContext = e => {\n        const activeContext = this.get('activeContext.topActiveContext'); // this `iq` object gets attached by the marker/polyline data join\n\n        if (!e.target.iq) return;\n        const {\n          isActive,\n          modelName,\n          modelId\n        } = e.target.iq;\n        if (!isActive) return;\n        const record = store.peekRecord(modelName, modelId);\n        if (!record) return;\n        activeContext.replaceCheckedRecordsByType([record]);\n      };\n    },\n\n    destroy() {\n      this.focusActiveContext = null;\n\n      this._super(...arguments);\n    },\n\n    // handle dbl click events for markers\n    markerObjectFor() {\n      const marker = this._super(...arguments);\n\n      if (!marker.get('_dblclickHandlerInitialized')) {\n        marker.on('dblclick', this.focusActiveContext);\n        marker.set('_dblclickHandlerInitialized', true);\n      }\n\n      return marker;\n    },\n\n    // handle dbl click events for polylines\n    polylineObjectFor() {\n      const polyline = this._super(...arguments);\n\n      if (!polyline.get('_dblclickHandlerInitialized')) {\n        polyline.on('dblclick', this.focusActiveContext);\n        polyline.set('_dblclickHandlerInitialized', true);\n      }\n\n      return polyline;\n    },\n\n    _recordsForLayer(layer) {\n      switch (layer.id) {\n        case 'stops':\n          return this._recordsForStopsLayer(layer);\n\n        default:\n          return this._recordsForOtherLayer(layer);\n      }\n    },\n\n    _recordsForStopsLayer(layer) {\n      const stopPoints = this._recordsForOtherLayer(layer); // if it is a trip active context\n      // only include the pick and drop stops\n\n\n      if (this.get('activeContext.topActiveContext').tripActiveContext()) {\n        return stopPoints.filter(stopPoint => {\n          return ['pick', 'drop'].includes(stopPoint.get('stopType'));\n        });\n      }\n\n      return stopPoints;\n    },\n\n    _recordsForOtherLayer(layer) {\n      if (!layer.isVisible || !layer.isActive) return [];\n      const structuredData = this.get('activeContext.topActiveContext.structuredMapData');\n      const records = structuredData ? structuredData[layer.modelName] : this.get('store').peekAll(layer.modelName);\n      if (Ember.isEmpty(records)) return [];\n      return records;\n    },\n\n    // used to create marker, polyline, etc objects for data join\n    _polygonObjectFor(layer, layerType, record) {\n      if (!this._polygonCache) {\n        this._polygonCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polygon = this._polygonCache[id];\n\n      if (!polygon) {\n        const polygonClass = this._polygonClassForLayer(layer);\n\n        polygon = polygonClass.create({\n          id,\n          record\n        });\n        this._polygonCache[id] = polygon;\n      }\n\n      return polygon;\n    },\n\n    _markerObjectFor(layer, layerType, record) {\n      if (!this._markerCache) {\n        this._markerCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let marker = this._markerCache[id];\n\n      if (this._markerCache[id] && (!this._markerCache[id].lat || !this._markerCache[id].lng) || this._markerCache[id] && this._markerCache[id].record && (this._markerCache[id].record.lat !== record.lat || this._markerCache[id].record.lng !== record.lng)) {\n        this._markerCache[id].set('record', record);\n\n        marker = this._markerCache[id];\n      }\n\n      if (!marker) {\n        const markerClass = this._markerClassForLayer(layer);\n\n        marker = markerClass.create({\n          id,\n          record\n        });\n        this._markerCache[id] = marker;\n      }\n\n      return marker;\n    },\n\n    _shapeObjectFor(layer, layerType, record) {\n      if (!this._shapeCache) {\n        this._shapeCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let shape = this._shapeCache[id];\n\n      if (!shape) {\n        const shapeClass = this._shapeClassForLayer(layer);\n\n        shape = shapeClass.create({\n          id,\n          record\n        });\n        this._shapeCache[id] = shape;\n      }\n\n      return shape;\n    },\n\n    _polylineObjectFor(layer, layerType, record) {\n      if (!this._polylineCache) {\n        this._polylineCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polyline = this._polylineCache[id];\n\n      if (this._polylineCache[id] && this._polylineCache[id].record && this._polylineCache[id].record.polyline !== record.polyline) {\n        this._polylineCache[id].set('record', record);\n\n        polyline = this._polylineCache[id];\n      }\n\n      if (!polyline) {\n        const polylineClass = this._polylineClassForLayer(layer, layerType);\n\n        polyline = polylineClass.create({\n          id,\n          record,\n          polylineService: this.get('polylineService')\n        });\n        this._polylineCache[id] = polyline;\n      }\n\n      return polyline;\n    },\n\n    _markerClassForLayer(layer) {\n      switch (layer.id) {\n        case 'agency':\n          return _agency.default;\n\n        case 'stops':\n          return _avlmStopPoint.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polylineClassForLayer(layer) {\n      switch (layer.id) {\n        case 'trips':\n          return _iq.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _routePolylineClassForLayerType(layerType) {\n      switch (layerType.id) {\n        case 'planned':\n          return _iq2.default;\n\n        case 'navigation':\n          return _iq3.default;\n\n        case 'performed':\n          return _iq4.default;\n\n        default:\n          throw new Error(`unhandled route layerType id '${layerType.id}'`);\n      }\n    },\n\n    _shapeClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polygonClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/map-contexts/workspaces/schedule\", [\"exports\", \"adept-iq/classes/map-contexts/layered\", \"adept-iq/classes/markers/agency\", \"adept-iq/classes/markers/stops/schedule-stop\", \"adept-iq/classes/polylines/trips/iq\", \"adept-iq/classes/polylines/routes/planned/iq\", \"adept-iq/classes/polylines/routes/navigation/iq\", \"adept-iq/classes/polylines/routes/performed/iq\", \"adept-iq/classes/polylines/routes/scheduled/iq\", \"adept-iq/classes/polygons/zone\", \"adept-iq/classes/shapes/zone\", \"adept-iq/classes/map-contexts/map-configs/schedule-layers\"], function (_exports, _layered, _agency, _scheduleStop, _iq, _iq2, _iq3, _iq4, _iq5, _zone, _zone2, _scheduleLayers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _layered.default.extend({\n    // must be passed on init\n    activeContext: null,\n    store: null,\n    workspace: null,\n    layersConfig: _scheduleLayers.default,\n    polylineData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    markerData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    polygonData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    shapeData: Ember.computed.readOnly('activeContext.topActiveContext.implicitData'),\n    layeredRecords: Ember.computed('activeContext.topActiveContext.{implicitData,activeVehicles}', 'layers', function () {\n      return this.get('layers').reduce((obj, layer) => {\n        obj[layer.id] = this._recordsForLayer(layer);\n        return obj;\n      }, {});\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n\n      this.focusActiveContext = e => {\n        const activeContext = this.get('activeContext.topActiveContext'); // this `iq` object gets attached by the marker/polyline data join\n\n        if (!e.target.iq) return;\n        const {\n          isActive,\n          modelName,\n          modelId\n        } = e.target.iq;\n        if (!isActive) return;\n        const record = store.peekRecord(modelName, modelId);\n        if (!record) return;\n        activeContext.replaceCheckedRecordsByType([record]);\n      };\n    },\n\n    destroy() {\n      this.focusActiveContext = null;\n\n      this._super(...arguments);\n    },\n\n    // handle dbl click events for markers\n    markerObjectFor() {\n      const marker = this._super(...arguments);\n\n      if (!marker.get('_dblclickHandlerInitialized')) {\n        marker.on('dblclick', this.focusActiveContext);\n        marker.set('_dblclickHandlerInitialized', true);\n      }\n\n      return marker;\n    },\n\n    // handle dbl click events for polylines\n    polylineObjectFor() {\n      const polyline = this._super(...arguments);\n\n      if (!polyline.get('_dblclickHandlerInitialized')) {\n        polyline.on('dblclick', this.focusActiveContext);\n        polyline.set('_dblclickHandlerInitialized', true);\n      }\n\n      return polyline;\n    },\n\n    _recordsForLayer(layer) {\n      switch (layer.id) {\n        case 'stops':\n          return this._recordsForStopsLayer(layer);\n\n        default:\n          return this._recordsForOtherLayer(layer);\n      }\n    },\n\n    _recordsForStopsLayer(layer) {\n      const topActiveContext = this.get('activeContext.topActiveContext');\n\n      const scheduleStops = this._recordsForOtherLayer(layer); // trip stops / route-breaks\n      // if it is a trip active context\n      // only include the pick and drop stops\n\n\n      if (topActiveContext) {\n        if (topActiveContext.tripActiveContext()) {\n          return scheduleStops.filter(stop => {\n            return ['pick', 'drop'].includes(stop.get('type'));\n          });\n        }\n      }\n\n      return scheduleStops;\n    },\n\n    _recordsForVehicleLayer(layer) {\n      if (!layer.isVisible) return []; // we are constantly displaying all vehicles\n\n      const structuredData = this.get('activeContext.topActiveContext.workspaceData'); // TODO: read `workspace-context` structured data instead of store\n\n      const records = layer.isActive && structuredData ? structuredData[layer.modelName] : [];\n      return records;\n    },\n\n    _recordsForOtherLayer(layer) {\n      if (!layer.isVisible || !layer.isActive) return [];\n      const modelNames = Ember.makeArray(layer.modelName);\n      const structuredData = this.get('activeContext.topActiveContext.structuredMapData');\n      const records = modelNames.reduce((acu, modelName) => {\n        const data = structuredData ? structuredData[modelName] || [] : [];\n        acu.push(...data);\n        return acu;\n      }, []);\n      if (Ember.isEmpty(records)) return [];\n      return records;\n    },\n\n    // used to create marker, polyline, etc objects for data join\n    _polygonObjectFor(layer, layerType, record) {\n      if (!this._polygonCache) {\n        this._polygonCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polygon = this._polygonCache[id];\n\n      if (!polygon) {\n        const polygonClass = this._polygonClassForLayer(layer);\n\n        polygon = polygonClass.create({\n          id,\n          record\n        });\n        this._polygonCache[id] = polygon;\n      }\n\n      return polygon;\n    },\n\n    _markerObjectFor(layer, layerType, record) {\n      if (!this._markerCache) {\n        this._markerCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let marker = this._markerCache[id];\n\n      if (!marker) {\n        const markerClass = this._markerClassForLayer(layer);\n\n        marker = markerClass.create({\n          id,\n          record\n        });\n        this._markerCache[id] = marker;\n      }\n\n      return marker;\n    },\n\n    _shapeObjectFor(layer, layerType, record) {\n      if (!this._shapeCache) {\n        this._shapeCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let shape = this._shapeCache[id];\n\n      if (!shape) {\n        const shapeClass = this._shapeClassForLayer(layer);\n\n        shape = shapeClass.create({\n          id,\n          record\n        });\n        this._shapeCache[id] = shape;\n      }\n\n      return shape;\n    },\n\n    _polylineObjectFor(layer, layerType, record) {\n      if (!this._polylineCache) {\n        this._polylineCache = {};\n      }\n\n      const id = `${layer.id}-${layerType.id}-${record.get('id')}`;\n      let polyline = this._polylineCache[id];\n\n      if (!polyline) {\n        const polylineClass = this._polylineClassForLayer(layer, layerType);\n\n        polyline = polylineClass.create({\n          id,\n          record,\n          polylineService: this.get('polylineService')\n        });\n        this._polylineCache[id] = polyline;\n      }\n\n      return polyline;\n    },\n\n    _markerClassForLayer(layer) {\n      switch (layer.id) {\n        case 'agency':\n          return _agency.default;\n\n        case 'stops':\n          return _scheduleStop.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polylineClassForLayer(layer, layerType) {\n      switch (layer.id) {\n        case 'routes':\n          return this._routePolylineClassForLayerType(layerType);\n\n        case 'trips':\n          return _iq.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _routePolylineClassForLayerType(layerType) {\n      switch (layerType.id) {\n        case 'planned':\n          return _iq2.default;\n\n        case 'navigation':\n          return _iq3.default;\n\n        case 'performed':\n          return _iq4.default;\n\n        case 'scheduled':\n          return _iq5.default;\n\n        default:\n          throw new Error(`unhandled route layerType id '${layerType.id}'`);\n      }\n    },\n\n    _shapeClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone2.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    },\n\n    _polygonClassForLayer(layer) {\n      switch (layer.id) {\n        case 'zones':\n          return _zone.default;\n\n        default:\n          throw new Error(`unhandled layer id '${layer.id}'`);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/agency\", [\"exports\", \"adept-iq/classes/markers/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    style: 'location',\n    label: 'Agency',\n    isActive: false,\n    agencyMarker: Ember.computed.alias('record'),\n    lat: Ember.computed.alias('agencyMarker.lat'),\n    lng: Ember.computed.alias('agencyMarker.lng'),\n    options: Ember.computed.alias('agencyMarker.options')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/base\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const dynamicProperties = ['lat', 'lng', 'rotationAngle', 'style', 'isHidden', 'label'];\n\n  var _default = Ember.Object.extend(Ember.Evented, {\n    // array of properties to be observed for repaint\n    // e.g. ['lat', 'lng', 'rotationAngle'] for vehicles\n    dynamicProperties,\n    // markers must be provided a UNIQUE id; this req't should be refactored out\n    id: null,\n    lat: null,\n    lng: null,\n    isHidden: false,\n    opacity: 1.0,\n    rotationAngle: null,\n    zOffset: null,\n    // see `app/pods/components/iq-widgets/map-widget/config/marker.js` for styles\n    style: null,\n    label: null,\n    // injected by layered map context\n    isActive: false,\n    layer: null,\n    layerType: null,\n    // these will be applied _after_ style defaults\n    options: null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/stops/avlm-stop-point\", [\"exports\", \"adept-iq/classes/markers/stops/base\", \"adept-iq/config/environment\", \"adept-iq/models/avlm-stop-point\"], function (_exports, _base, _environment, _avlmStopPoint) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const OTP_CODE_LATE = 'L';\n  const OTP_CODE_DANGER = 'D'; // see `app/pods/components/iq-widgets/map-widget/config/marker.js`\n\n  const NOSHOW_STYLE = 'noshow';\n  const BREAK_STYLE = 'break';\n  const OTP_STYLE_SUFFIX_LATE = 'Late';\n  const OTP_STYLE_SUFFIX_DANGER = 'Danger';\n  const NEXT_STYLE_SUFFIX = 'Next';\n  const WHEELCHAIR_STYLE_SUFFIX = 'Wheelchair';\n  const PERFORMED_STYLE_SUFFIX = 'Performed';\n  const NOSHOW_STOP_STATUS = 'noShow';\n\n  var _default = _base.default.extend({\n    record: null,\n    // this is an avlm-stop-point\n    // `BaseMarker` overrides\n    isActive: true,\n    lat: Ember.computed.readOnly('record.lat'),\n    lng: Ember.computed.readOnly('record.lng'),\n    // `BaseStopMarker` overrides\n    stopId: Ember.computed.readOnly('id'),\n    // travelNeeds: computed.readOnly('stopPoint.trip.segment.leg.legTravelNeeds'),\n    stopType: Ember.computed.readOnly('record.stopType'),\n    otp: Ember.computed.readOnly('record.otp'),\n    status: Ember.computed.readOnly('record.status'),\n    isWheelchair: Ember.computed.readOnly('hasWheelchairTravelNeed'),\n    // @TODO Likely Stop Point Records already computes these properties better to use readOnly\n    // Additionally hard coded strings should be named within model similar to PERFORM_STOP_STATUS\n    isPerformed: Ember.computed.equal('status', _avlmStopPoint.PERFORMED_STOP_STATUS),\n    isNoShow: Ember.computed.equal('status', NOSHOW_STOP_STATUS),\n    isPick: Ember.computed.equal('stopType', 'pick'),\n    isDrop: Ember.computed.equal('stopType', 'drop'),\n    isDeploy: Ember.computed.equal('stopType', 'deployStop'),\n    isBreak: Ember.computed.equal('stopType', 'break'),\n    isGaragePullIn: Ember.computed.equal('stopType', 'garagePullin'),\n    isGaragePullOut: Ember.computed.equal('stopType', 'garagePullout'),\n    isStopHidden: Ember.computed.and('isNoShow', 'isDrop'),\n    label: Ember.computed.oneWay('iqStopLabel'),\n    isGarage: Ember.computed.or('isGaragePullIn', 'isGaragePullOut'),\n    isHighLighted: Ember.computed.or('record.{isHighLighted,trip.isHighLighted}'),\n    isNext: Ember.computed('stopId', 'currentStopId', function () {\n      const stopId = this.get('stopId');\n      return Ember.isPresent(stopId) && stopId === this.get('currentStopId');\n    }),\n    // local properties\n    currentStopId: Ember.computed('record.avlmCluster.route.currentStopOrdinalId', function () {\n      return this.get('record.avlmCluster.route.currentStopOrdinalId');\n    }),\n    hasWheelchairTravelNeed: Ember.computed('travelNeeds.@each.isWheelchair', function () {\n      // this check might not be necessary anymore\n      if (_environment.default.APP.avlmLite) return false;\n      const travelNeeds = this.get('travelNeeds');\n      if (Ember.isEmpty(travelNeeds)) return false;\n      return travelNeeds.any(travelNeed => travelNeed.get('isWheelchair'));\n    }),\n    iqStopLabel: Ember.computed('stopType', 'id', function () {\n      const stopType = this.get('stopType');\n      const stopId = this.get('id');\n      return `${Ember.String.capitalize(stopType)} stop ${stopId}`;\n    }),\n    stopLabel: Ember.computed('stopType', function () {\n      const stopType = this.get('stopType');\n      return `${Ember.String.capitalize(stopType)} stop`;\n    }),\n    stopStyle: Ember.computed('isNoShow', 'isBreak', 'isPerformed', 'typeStylePrefix', 'otpStyleSuffix', 'nextStyleSuffix', 'wheelchairStyleSuffix', function () {\n      if (this.get('isNoShow')) return NOSHOW_STYLE;\n      if (this.get('isBreak')) return BREAK_STYLE;\n      const typeStylePrefix = this.get('typeStylePrefix');\n\n      if (this.get('isPerformed')) {\n        return [typeStylePrefix, PERFORMED_STYLE_SUFFIX].join('');\n      }\n\n      const suffixes = [this.get('otpStyleSuffix'), this.get('nextStyleSuffix'), this.get('wheelchairStyleSuffix')].compact();\n      const style = [typeStylePrefix, ...suffixes].join('');\n      return style;\n    }),\n    typeStylePrefix: Ember.computed('stopType', function () {\n      switch (this.get('stopType')) {\n        case 'pick':\n          return 'pick';\n\n        case 'deployStop':\n          return 'deployStop';\n\n        case 'drop':\n          return 'drop';\n\n        case 'pullinGarage':\n        case 'pulloutGarage':\n          return 'garage';\n        // both types use same icon\n\n        default:\n          // we don't care about break, noshow, etc.\n          return null;\n      }\n    }),\n    otpStyleSuffix: Ember.computed('otp', function () {\n      switch (this.get('otp')) {\n        case OTP_CODE_LATE:\n          return OTP_STYLE_SUFFIX_LATE;\n\n        case OTP_CODE_DANGER:\n          return OTP_STYLE_SUFFIX_DANGER;\n\n        default:\n          return null;\n      }\n    }),\n    nextStyleSuffix: Ember.computed('isNext', function () {\n      return this.get('isNext') ? NEXT_STYLE_SUFFIX : null;\n    }),\n    wheelchairStyleSuffix: Ember.computed('isWheelchair', 'isGarage', function () {\n      // garage icons do not have a wheelchair version\n      if (this.get('isGarage')) return null;\n      return this.get('isWheelchair') ? WHEELCHAIR_STYLE_SUFFIX : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/stops/base\", [\"exports\", \"adept-iq/classes/markers/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const OTP_CODE_LATE = 'L';\n  const OTP_CODE_DANGER = 'D'; // see `app/pods/components/iq-widgets/map-widget/config/marker.js`\n\n  const NOSHOW_STYLE = 'noshow';\n  const BREAK_STYLE = 'break';\n  const OTP_STYLE_SUFFIX_LATE = 'Late';\n  const OTP_STYLE_SUFFIX_DANGER = 'Danger';\n  const NEXT_STYLE_SUFFIX = 'Next';\n  const WHEELCHAIR_STYLE_SUFFIX = 'Wheelchair';\n  const PERFORMED_STYLE_SUFFIX = 'Performed'; // stops need to render below polyline / vehicle markers\n\n  const Z_INDEX_OFFSET = 10;\n\n  var _default = _base.default.extend({\n    label: Ember.computed.readOnly('stopLabel'),\n    style: Ember.computed.readOnly('stopStyle'),\n    // isHidden: computed.readOnly('isStopHidden'),\n    // stop-specific params\n    zIndexOffset: Z_INDEX_OFFSET,\n    stopType: null,\n    // 'pick', 'drop', 'garagePullin', 'garagePullout', 'break'\n    otp: null,\n    // 'L', 'D'\n    isNext: false,\n    isWheelchair: false,\n    isPerformed: false,\n    isNoShow: false,\n    // local properties\n    isPick: Ember.computed.equal('stopType', 'pick'),\n    isDrop: Ember.computed.equal('stopType', 'drop'),\n    isDeploy: Ember.computed.equal('stopType', 'deployStop'),\n    isBreak: Ember.computed.equal('stopType', 'break'),\n    isGarage: Ember.computed.or('isGaragePullIn', 'isGaragePullOut'),\n    isGaragePullIn: Ember.computed.equal('stopType', 'garagePullin'),\n    isGaragePullOut: Ember.computed.equal('stopType', 'garagePullout'),\n    isStopHidden: Ember.computed.and('isNoShow', 'isDrop'),\n    stopLabel: Ember.computed('stopType', function () {\n      const stopType = this.get('stopType');\n      return `${Ember.String.capitalize(stopType)} stop`;\n    }),\n    stopStyle: Ember.computed('isNoShow', 'isBreak', 'isPerformed', 'typeStylePrefix', 'otpStyleSuffix', 'nextStyleSuffix', 'wheelchairStyleSuffix', function () {\n      if (this.get('isNoShow')) return NOSHOW_STYLE;\n      if (this.get('isBreak')) return BREAK_STYLE;\n      const typeStylePrefix = this.get('typeStylePrefix');\n\n      if (this.get('isPerformed')) {\n        return [typeStylePrefix, PERFORMED_STYLE_SUFFIX].join('');\n      }\n\n      const suffixes = [this.get('otpStyleSuffix'), this.get('nextStyleSuffix'), this.get('wheelchairStyleSuffix')].compact();\n      const style = [typeStylePrefix, ...suffixes].join('');\n      return style;\n    }),\n    typeStylePrefix: Ember.computed('stopType', function () {\n      switch (this.get('stopType')) {\n        case 'pick':\n          return 'pick';\n\n        case 'break':\n          return 'break';\n\n        case 'deployStop':\n          return 'deployStop';\n\n        case 'drop':\n          return 'drop';\n\n        case 'pullinGarage':\n        case 'pulloutGarage':\n          return 'garage';\n        // both types use same icon\n\n        default:\n          // we don't care about break, noshow, etc.\n          return null;\n      }\n    }),\n    otpStyleSuffix: Ember.computed('otp', function () {\n      switch (this.get('otp')) {\n        case OTP_CODE_LATE:\n          return OTP_STYLE_SUFFIX_LATE;\n\n        case OTP_CODE_DANGER:\n          return OTP_STYLE_SUFFIX_DANGER;\n\n        default:\n          return null;\n      }\n    }),\n    nextStyleSuffix: Ember.computed('isNext', function () {\n      return this.get('isNext') ? NEXT_STYLE_SUFFIX : null;\n    }),\n    wheelchairStyleSuffix: Ember.computed('isWheelchair', 'isGarage', function () {\n      // garage icons do not have a wheelchair version\n      if (this.get('isGarage')) return null;\n      return this.get('isWheelchair') ? WHEELCHAIR_STYLE_SUFFIX : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/stops/schedule-stop\", [\"exports\", \"adept-iq/classes/markers/stops/base\", \"adept-iq/models/break-type\", \"adept-iq/config/environment\"], function (_exports, _base, _breakType, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // see `app/pods/components/iq-widgets/map-widget/config/marker.js`\n  const BREAK_STYLE = 'break';\n  const FLOATING_BREAK_STYLE = 'floatingBreak';\n  const NEXT_STYLE_SUFFIX = 'Next';\n  const WHEELCHAIR_STYLE_SUFFIX = 'Wheelchair';\n\n  var _default = _base.default.extend({\n    record: null,\n    // this is a trip-stop or route-break\n    // `BaseMarker` overrides\n    isActive: true,\n    lat: Ember.computed.readOnly('record.lat'),\n    lng: Ember.computed.readOnly('record.lng'),\n    // `BaseStopMarker` overrides\n    travelNeeds: Ember.computed.readOnly('record.trip.segment.leg.legTravelNeeds'),\n    stopType: Ember.computed.readOnly('record.stopType'),\n    isWheelchair: Ember.computed.readOnly('hasWheelchairTravelNeed'),\n    stopId: Ember.computed.readOnly('record.id'),\n    // @TODO Likely Stop Point Records already computes these properties better to use readOnly\n    // Additionally hard coded strings should be named within model similar to PERFORM_STOP_STATUS\n    isPick: Ember.computed.equal('stopType', 'pick'),\n    isDrop: Ember.computed.equal('stopType', 'drop'),\n    isDeploy: Ember.computed.equal('stopType', 'deployStop'),\n    isBreak: Ember.computed.equal('stopType', 'break'),\n    isFloatingBreak: Ember.computed.equal('record.breakType.name', _breakType.FLOATING_BREAK),\n    isGaragePullIn: Ember.computed.equal('stopType', 'garagePullin'),\n    isGaragePullOut: Ember.computed.equal('stopType', 'garagePullout'),\n    isStopHidden: Ember.computed.and('isNoShow', 'isDrop'),\n    label: Ember.computed.oneWay('iqStopLabel'),\n    isGarage: Ember.computed.or('isGaragePullIn', 'isGaragePullOut'),\n    isHighLighted: Ember.computed.or('record.{isHighLighted,trip.isHighLighted,trip.rider.isHighLighted}'),\n    isNext: Ember.computed('stopId', 'currentStopId', function () {\n      const stopId = this.get('stopId');\n      return Ember.isPresent(stopId) && stopId === this.get('currentStopId');\n    }),\n    // local properties\n    currentStopId: Ember.computed('stopPoint.dispatchRoute.currentStopOrdinalId', function () {\n      return this.get('stopPoint.dispatchRoute.currentStopOrdinalId');\n    }),\n    hasWheelchairTravelNeed: Ember.computed('travelNeeds.@each.isWheelchair', function () {\n      // this check might not be necessary anymore\n      if (_environment.default.APP.avlmLite) return false;\n      const travelNeeds = this.get('travelNeeds');\n      if (Ember.isEmpty(travelNeeds)) return false;\n      return travelNeeds.any(travelNeed => travelNeed.get('isWheelchair'));\n    }),\n    iqStopLabel: Ember.computed('stopType', 'id', function () {\n      const stopType = this.get('stopType');\n      const stopId = this.get('id');\n      return `${Ember.String.capitalize(stopType)} stop ${stopId}`;\n    }),\n    stopLabel: Ember.computed('stopType', function () {\n      const stopType = this.get('stopType');\n      return `${Ember.String.capitalize(stopType)} stop`;\n    }),\n    stopStyle: Ember.computed('isBreak', 'typeStylePrefix', 'nextStyleSuffix', 'wheelchairStyleSuffix', function () {\n      if (this.get('isFloatingBreak')) return FLOATING_BREAK_STYLE;\n      if (this.get('isBreak')) return BREAK_STYLE;\n      const typeStylePrefix = this.get('typeStylePrefix');\n      const suffixes = [this.get('nextStyleSuffix'), this.get('wheelchairStyleSuffix')].compact();\n      const style = [typeStylePrefix, ...suffixes].join('');\n      return style;\n    }),\n    typeStylePrefix: Ember.computed('stopType', function () {\n      switch (this.get('stopType')) {\n        case 'pick':\n          return 'pick';\n\n        case 'deployStop':\n          return 'deployStop';\n\n        case 'drop':\n          return 'drop';\n\n        case 'pullinGarage':\n        case 'pulloutGarage':\n          return 'garageNext';\n        // both types use same icon\n\n        default:\n          // we don't care about break, noshow, etc.\n          return null;\n      }\n    }),\n    nextStyleSuffix: Ember.computed('isNext', function () {\n      return this.get('isNext') ? NEXT_STYLE_SUFFIX : null;\n    }),\n    wheelchairStyleSuffix: Ember.computed('isWheelchair', 'isGarage', function () {\n      // garage icons do not have a wheelchair version\n      if (this.get('isGarage')) return null;\n      return this.get('isWheelchair') ? WHEELCHAIR_STYLE_SUFFIX : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/stops/stop-point\", [\"exports\", \"adept-iq/classes/markers/stops/base\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _base, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const OTP_CODE_LATE = 'L';\n  const OTP_CODE_DANGER = 'D'; // see `app/pods/components/iq-widgets/map-widget/config/marker.js`\n\n  const NOSHOW_STYLE = 'noshow';\n  const BREAK_STYLE = 'break';\n  const OTP_STYLE_SUFFIX_LATE = 'Late';\n  const OTP_STYLE_SUFFIX_DANGER = 'Danger';\n  const NEXT_STYLE_SUFFIX = 'Next';\n  const WHEELCHAIR_STYLE_SUFFIX = 'Wheelchair';\n  const PERFORMED_STYLE_SUFFIX = 'Performed';\n\n  var _default = _base.default.extend({\n    record: null,\n    // this is a stop-point\n    // `BaseMarker` overrides\n    isActive: true,\n    lat: Ember.computed.readOnly('record.lat'),\n    lng: Ember.computed.readOnly('record.lng'),\n    // `BaseStopMarker` overrides\n    stopPoint: Ember.computed.readOnly('record'),\n    travelNeeds: Ember.computed.readOnly('record.trip.segment.leg.legTravelNeeds'),\n    stopType: Ember.computed.readOnly('record.stopType'),\n    otp: Ember.computed.readOnly('record.otp'),\n    isWheelchair: Ember.computed.readOnly('hasWheelchairTravelNeed'),\n    stopId: Ember.computed.readOnly('record.id'),\n    computedStatus: Ember.computed.readOnly('record.computedStatus'),\n    isPerformed: Ember.computed.readOnly('record.isPerformed'),\n    isNoShow: Ember.computed.readOnly('record.isNoShow'),\n    isPick: Ember.computed.readOnly('record.isPick'),\n    isDrop: Ember.computed.readOnly('record.isDrop'),\n    isBreak: Ember.computed.readOnly('record.isBreak'),\n    isGarage: Ember.computed.readOnly('record.isGarage'),\n    isGaragePullIn: Ember.computed.readOnly('record.isGaragePullin'),\n    isGaragePullOut: Ember.computed.readOnly('record.isGaragePullout'),\n    isDeploy: Ember.computed.equal('stopType', 'deployStop'),\n    isStopHidden: Ember.computed.and('isNoShow', 'isDrop'),\n    label: Ember.computed.oneWay('iqStopLabel'),\n    isHighLighted: Ember.computed.or('record.{isHighLighted,trip.isHighLighted,trip.rider.isHighLighted}'),\n    isNext: Ember.computed('stopId', 'currentStopId', function () {\n      const stopId = this.get('stopId');\n      return Ember.isPresent(stopId) && stopId === this.get('currentStopId');\n    }),\n    // local properties\n    currentStopId: Ember.computed('record.dispatchRoute.currentStopOrdinalId', function () {\n      return this.get('record.dispatchRoute.currentStopOrdinalId');\n    }),\n    hasWheelchairTravelNeed: Ember.computed('travelNeeds.@each.{isWheelchair,travelNeedTypeName}', function () {\n      const travelNeeds = (0, _unwrapProxy.unwrapProxy)(this.get('travelNeeds'));\n      if (Ember.isEmpty(travelNeeds)) return false;\n      return travelNeeds.any(travelNeed => travelNeed.get('isWheelchair'));\n    }),\n    iqStopLabel: Ember.computed('stopType', 'id', function () {\n      const stopType = this.get('stopType');\n      const stopId = this.get('id');\n      return `${Ember.String.capitalize(stopType)} stop ${stopId}`;\n    }),\n    stopLabel: Ember.computed('stopType', function () {\n      const stopType = this.get('stopType');\n      return `${Ember.String.capitalize(stopType)} stop`;\n    }),\n    stopStyle: Ember.computed('isNoShow', 'isBreak', 'isPerformed', 'typeStylePrefix', 'otpStyleSuffix', 'nextStyleSuffix', 'wheelchairStyleSuffix', function () {\n      if (this.get('isNoShow')) return NOSHOW_STYLE;\n      if (this.get('isBreak')) return BREAK_STYLE;\n      const typeStylePrefix = this.get('typeStylePrefix');\n\n      if (this.get('isPerformed')) {\n        return [typeStylePrefix, PERFORMED_STYLE_SUFFIX].join('');\n      }\n\n      const suffixes = [this.get('otpStyleSuffix'), this.get('nextStyleSuffix'), this.get('wheelchairStyleSuffix')].compact();\n      const style = [typeStylePrefix, ...suffixes].join('');\n      return style;\n    }),\n    typeStylePrefix: Ember.computed('stopType', function () {\n      switch (this.get('stopType')) {\n        case 'pick':\n          return 'pick';\n\n        case 'deployStop':\n          return 'deployStop';\n\n        case 'drop':\n          return 'drop';\n\n        case 'pullinGarage':\n        case 'pulloutGarage':\n          return 'garage';\n        // both types use same icon\n\n        default:\n          // we don't care about break, noshow, etc.\n          return null;\n      }\n    }),\n    otpStyleSuffix: Ember.computed('otp', function () {\n      switch (this.get('otp')) {\n        case OTP_CODE_LATE:\n          return OTP_STYLE_SUFFIX_LATE;\n\n        case OTP_CODE_DANGER:\n          return OTP_STYLE_SUFFIX_DANGER;\n\n        default:\n          return null;\n      }\n    }),\n    nextStyleSuffix: Ember.computed('isNext', function () {\n      return this.get('isNext') ? NEXT_STYLE_SUFFIX : null;\n    }),\n    wheelchairStyleSuffix: Ember.computed('isWheelchair', 'isGarage', function () {\n      // garage icons do not have a wheelchair version\n      if (this.get('isGarage')) return null;\n      return this.get('isWheelchair') ? WHEELCHAIR_STYLE_SUFFIX : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/vehicles/base\", [\"exports\", \"adept-iq/classes/markers/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // vehicles need to render on top of everything else\n  const Z_INDEX_OFFSET = 999;\n\n  var _default = _base.default.extend({\n    label: 'Vehicle',\n    style: Ember.computed.readOnly('vehicleStyle'),\n    zIndexOffset: Z_INDEX_OFFSET,\n    // local properties\n    otp: null,\n    isMoving: false,\n    isEmergencyVehicle: false,\n    isApprovedEmergency: false,\n    isRoadSupervisor: false,\n    isLoggedInRoadSupervisor: false,\n    inCluster: false,\n    isGrouped: false,\n    isBreakdown: false,\n    isOnBreak: false,\n    isCommFailure: false,\n    isLeaveGarageSignOff: false,\n    isGpsFailure: false,\n    isPoweredOn: false,\n    vehicleStyle: Ember.computed('otp', 'isMoving', 'isEmergencyVehicle', 'isApprovedEmergency', 'isRoadSupervisor', 'isLoggedInRoadSupervisor', 'isBreakdown', 'isOnBreak', 'isCommFailure', 'isLeaveGarageSignOff', 'isGpsFailure', 'isPoweredOn', function () {\n      const otp = this.get('otp');\n      const isMoving = this.get('isMoving');\n      const isEmergency = this.get('isEmergencyVehicle');\n      const isApprovedEmergency = this.get('isApprovedEmergency');\n      const isRoadSupervisor = this.get('isRoadSupervisor');\n      const isLoggedInRoadSupervisor = this.get('isLoggedInRoadSupervisor');\n      const isBreakdown = this.get('isBreakdown');\n      const isOnBreak = this.get('isOnBreak');\n      const isCommFailure = this.get('isCommFailure');\n      const isLeaveGarageSignOff = this.get('isLeaveGarageSignOff');\n      const isPoweredOn = this.get('isPoweredOn');\n      const isGpsFailure = this.get('isGpsFailure');\n      let style = 'vehicle';\n\n      if (isBreakdown) {\n        style += 'Breakdown';\n        return style;\n      } // TODO: are both of these cases needed?\n\n\n      if (isEmergency || isApprovedEmergency) {\n        if (isMoving) {\n          style += 'Driving';\n        }\n\n        style += 'Emergency';\n        return style;\n      }\n\n      if (isCommFailure) {\n        style += 'CommunicationFailed';\n        return style;\n      }\n\n      if (isOnBreak) {\n        style += 'OnBreak';\n        return style;\n      } // These events priority are lower than emergency;\n\n\n      switch (otp) {\n        case 'D':\n        case 'In Danger':\n          if (isMoving) {\n            style += 'Driving';\n          }\n\n          style += 'Danger';\n          return style;\n\n        case 'L':\n        case 'Late':\n          if (isMoving) {\n            style += 'Driving';\n          }\n\n          style += 'Late';\n          return style;\n\n        default:\n          break;\n      }\n\n      if (isLeaveGarageSignOff || isPoweredOn) {\n        style += 'NotSigned';\n        return style;\n      }\n\n      if (isGpsFailure) {\n        style += 'GPSFailed';\n        return style;\n      }\n\n      if (isRoadSupervisor && isLoggedInRoadSupervisor) {\n        if (isMoving) {\n          style += 'Driving';\n        }\n\n        style += 'LoggedRoadSupervisor';\n      } else if (isRoadSupervisor) {\n        if (isMoving) {\n          style += 'Driving';\n        }\n\n        style += 'RoadSupervisor';\n      }\n\n      return style;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/vehicles/iq\", [\"exports\", \"adept-iq/classes/markers/vehicles/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const RS_ID_PREFIX = 'SUP';\n\n  var _default = _base.default.extend({\n    record: null,\n    // this is an `iq-vehicle` model\n    iqVehicle: Ember.computed.alias('record'),\n    // `BaseMarker` overrides\n    isActive: true,\n    lat: Ember.computed.readOnly('iqVehicle.lat'),\n    lng: Ember.computed.readOnly('iqVehicle.lng'),\n    rotationAngle: Ember.computed.readOnly('iqVehicle.heading'),\n    otp: Ember.computed.readOnly('iqVehicle.otp'),\n    // `BaseVehicleMarker` overrides\n    isMoving: Ember.computed('iqVehicle.heading', function () {\n      return !Ember.isNone(this.get('iqVehicle.heading'));\n    }),\n    isBreakdown: Ember.computed.readOnly('iqVehicle.isBroken'),\n    isOnBreak: Ember.computed.readOnly('iqVehicle.isOnBreak'),\n    isCommFailure: Ember.computed.readOnly('iqVehicle.isCommFailure'),\n    isLeaveGarageSignOff: Ember.computed.readOnly('iqVehicle.isLeaveGarageSignOff'),\n    isPoweredOn: Ember.computed.readOnly('iqVehicle.isPoweredOn'),\n    isGpsFailure: Ember.computed.readOnly('iqVehicle.isGpsFailure'),\n    isHighLighted: Ember.computed.readOnly('iqVehicle.isHighLighted'),\n    isEmergencyVehicle: Ember.computed.readOnly('iqVehicle.isEmergencyVehicle'),\n    isApprovedEmergency: Ember.computed.readOnly('iqVehicle.isApprovedEmergency'),\n    isRoadSupervisor: Ember.computed.equal('trackingIdPrefix', RS_ID_PREFIX),\n    isGrouped: Ember.computed('isEmergencyVehicle', 'isHighLighted', function () {\n      return !this.get('isEmergencyVehicle') && !this.get('isHighLighted');\n    }),\n    isLoggedInRoadSupervisor: Ember.computed('iqVehicle.id', 'myRSVehicleId', function () {\n      if (this.get('iqVehicle.id') === this.get('myRSVehicleId')) {\n        return true;\n      }\n\n      return false;\n    }),\n    // local properties\n    trackingIdPrefix: Ember.computed('iqVehicle.currentRouteName', function () {\n      const trackingId = this.get('iqVehicle.currentRouteName');\n      if (Ember.isNone(trackingId)) return null;\n      const [trackingIdPrefix] = trackingId.match(/^([A-Z])+/) || [''];\n      return trackingIdPrefix;\n    }),\n    myRSVehicleId: Ember.computed('', function () {\n      const dashboardInfo = localStorage.getItem('dashboard-info');\n      if (!dashboardInfo) return null;\n\n      try {\n        const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n        if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n          return parsedDashboardInfo.accessData.vehicleId;\n        }\n      } catch (e) {\n        // malformed JSON\n        return null;\n      }\n\n      return null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/markers/vehicles/road-supervisor\", [\"exports\", \"adept-iq/classes/markers/vehicles/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    rsVehicle: Ember.computed.alias('record'),\n    // `BaseMarker` overrides\n    lat: Ember.computed.readOnly('rsVehicle.lat'),\n    lng: Ember.computed.readOnly('rsVehicle.lng'),\n    rotationAngle: Ember.computed.readOnly('rsVehicleRotationAngle'),\n    // BaseVehicleMarker overrides\n    isMoving: Ember.computed.bool('rsVehicle.heading'),\n    isRoadSupervisor: true,\n    isLoggedInRoadSupervisor: Ember.computed('rsVehicle.id', 'myRSVehicleId', function () {\n      if (this.get('rsVehicle.id') === this.get('myRSVehicleId')) {\n        return true;\n      }\n\n      return false;\n    }),\n    // local properties\n    rsVehicleRotationAngle: Ember.computed('rsVehicle.heading', function () {\n      const heading = this.get('rsVehicle.heading');\n      if (Ember.isNone(heading)) return null; // TODO: check that this calculation is correct\n\n      return heading / 2;\n    }),\n    myRSVehicleId: Ember.computed('', function () {\n      const dashboardInfo = localStorage.getItem('dashboard-info');\n      if (!dashboardInfo) return null;\n\n      try {\n        const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n        if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n          return parsedDashboardInfo.accessData.vehicleId;\n        }\n      } catch (e) {\n        // malformed JSON\n        return null;\n      }\n\n      return null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polygons/base\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend({\n    id: null,\n    record: null,\n    lat: null,\n    lng: null,\n    opacity: 1.0,\n    // these will usually be over-ridden by layer\n    // see `app/pods/components/iq-widgets/map-widget/config/marker.js` for styles\n    type: null,\n    style: null,\n    label: null,\n    isActive: false,\n    isTraversal: false,\n    // these will be applied _after_ style defaults\n    options: null,\n    status: null,\n    parentLabel: null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polygons/zone\", [\"exports\", \"adept-iq/classes/polygons/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    style: 'zone',\n    label: 'Zones',\n    parentLabel: 'Zones',\n    isActive: true,\n    isTraversal: false,\n    zonePolygon: Ember.computed.alias('record'),\n    lat: Ember.computed.alias('zonePolygon.lat'),\n    lng: Ember.computed.alias('zonePolygon.lng'),\n    options: Ember.computed.alias('zonePolygon.options'),\n    points: Ember.computed.alias('zonePolygon.polypoints'),\n    caption: Ember.computed.alias('zonePolygon.name'),\n    status: Ember.computed.alias('zonePolygon.status')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/base\", [\"exports\", \"md5\"], function (_exports, _md) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const dynamicProperties = ['style', 'pattern', 'points', 'opacity', 'label', 'isHidden'];\n\n  var _default = Ember.Object.extend(Ember.Evented, {\n    dynamicProperties,\n    id: null,\n    isActive: false,\n    isHidden: false,\n    // dynamic polylines are expected to change coordinates at any time,\n    // e.g. navigationInfo; there is a performance cost associated\n    isDynamic: true,\n    points: null,\n    opacity: 1.0,\n    label: null,\n    layer: null,\n    layerType: null,\n    style: null,\n    // components/iq-widgets/map-widget/config/polyline.js\n    pattern: null,\n    // components/iq-widgets/map-widget/config/patterns.js\n    options: null,\n    // overrides polyline style\n    polyline: null,\n    // tomtom polyline\n    decorator: null,\n    // tomtom decorator\n    pointsDigest: Ember.computed('points', function () {\n      const points = this.get('points');\n      return (0, _md.default)(JSON.stringify(points));\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/base\", [\"exports\", \"adept-iq/classes/polylines/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.BASE_ROUTE_STYLE = void 0;\n  const BASE_ROUTE_STYLE = 'route';\n  _exports.BASE_ROUTE_STYLE = BASE_ROUTE_STYLE;\n\n  var _default = _base.default.extend({\n    pattern: Ember.computed.readOnly('style'),\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('baseRouteStyle'),\n    // local properties\n    baseRouteStyle: BASE_ROUTE_STYLE\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/floatingBreak/base\", [\"exports\", \"adept-iq/classes/polylines/routes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // dynamic polylines are expected to change coordinates at any time,\n    isDynamic: true,\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('floatingBreakRouteStyle'),\n    // local properties\n    floatingBreakRouteStyle: Ember.computed('baseRouteStyle', function () {\n      return this.get('baseRouteStyle') + 'FloatingBreak';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/floatingBreak/iq\", [\"exports\", \"adept-iq/classes/polylines/routes/floatingBreak/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    isActive: true,\n    points: Ember.computed.readOnly('iqRoute.breakPolylinePoints'),\n    // local properties\n    record: null,\n    iqRoute: Ember.computed.alias('record'),\n    bemapCoords: Ember.computed('points', function () {\n      const points = this.get('points') || [];\n      return points.map(point => {\n        return {\n          lat: point[0],\n          lon: point[1]\n        };\n      });\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/navigation/base\", [\"exports\", \"adept-iq/classes/polylines/routes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('navigationRouteStyle'),\n    isDynamic: true,\n    // local properties\n    navigationRouteStyle: Ember.computed('baseRouteStyle', function () {\n      return this.get('baseRouteStyle') + 'Navigation';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/navigation/iq\", [\"exports\", \"adept-iq/classes/polylines/routes/navigation/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    isActive: true,\n    points: Ember.computed.readOnly('iqRoute.navigationPolyline.coords'),\n    // local properties\n    record: null,\n    iqRoute: Ember.computed.alias('record'),\n    bemapCoords: Ember.computed('points', function () {\n      const points = this.get('points') || [];\n      return points.map(point => {\n        return {\n          lat: point[0],\n          lon: point[1]\n        };\n      });\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/performed/base\", [\"exports\", \"adept-iq/classes/polylines/routes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('performedRouteStyle'),\n    // local properties\n    performedRouteStyle: Ember.computed('baseRouteStyle', function () {\n      return this.get('baseRouteStyle') + 'Performed';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/performed/iq\", [\"exports\", \"adept-iq/classes/polylines/routes/performed/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    isActive: true,\n    isHidden: false,\n    isRouteEnded: Ember.computed.alias('iqRoute.isPerformed'),\n    points: Ember.computed.alias('iqRoute.performedPolylineDispatch'),\n    inProgress: false,\n    // local properties\n    polylineService: null,\n    record: null,\n    iqRoute: Ember.computed.alias('record'),\n\n    init() {\n      this._super(...arguments);\n\n      this.visibilityListener();\n    },\n\n    visibilityListener: Ember.observer('iqRoute.isPerformed', 'isHidden', 'isJoined', 'iqRoute.isPerformCoordEmpty', function () {\n      if (!this.get('iqRoute.isPerformCoordEmpty') || this.get('inProgress') || !this.get('isRouteEnded')) return;\n      this.set('inProgress', true);\n      const dispatchRouteId = this.get('iqRoute.id');\n      const routeId = this.get('iqRoute.route.id');\n      this.get('polylineService.fetchPerformedPolyline').perform(routeId, dispatchRouteId).finally(() => {\n        this.set('inProgress', false);\n      });\n    }),\n    bemapCoords: Ember.computed('points', function () {\n      const points = this.get('points') || [];\n      return points.map(point => {\n        return {\n          lat: point[0],\n          lon: point[1]\n        };\n      });\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/planned/base\", [\"exports\", \"adept-iq/classes/polylines/routes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // dynamic polylines are expected to change coordinates at any time,\n    isDynamic: true,\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('plannedRouteStyle'),\n    // local properties\n    plannedRouteStyle: Ember.computed('baseRouteStyle', function () {\n      return this.get('baseRouteStyle') + 'Planned';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/planned/iq\", [\"exports\", \"adept-iq/classes/polylines/routes/planned/base\", \"lodash\"], function (_exports, _base, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    isActive: true,\n    points: Ember.computed.readOnly('iqRoute.plannedPolylinePoints'),\n    // local properties\n    record: null,\n    iqRoute: Ember.computed.alias('record'),\n    bemapCoords: Ember.computed('points', function () {\n      const points = this.get('points') || []; // plannedPolylinePoints are array of array need to be flatten\n\n      return (0, _lodash.default)(points).flatten().map(point => {\n        return {\n          lat: point[0],\n          lon: point[1]\n        };\n      }).value();\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/scheduled/base\", [\"exports\", \"adept-iq/classes/polylines/routes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('scheduledRouteStyle'),\n    // local properties\n    scheduledRouteStyle: Ember.computed('baseRouteStyle', function () {\n      return this.get('baseRouteStyle') + 'Scheduled';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/routes/scheduled/iq\", [\"exports\", \"adept-iq/classes/polylines/routes/scheduled/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    isActive: true,\n    isHidden: false,\n    points: Ember.computed.alias('iqRoute.scheduledPolyline.coords'),\n    inProgress: false,\n    // local properties\n    polylineService: null,\n    record: null,\n    iqRoute: Ember.computed.alias('record'),\n\n    init() {\n      this._super(...arguments);\n\n      this.visibilityListener();\n    },\n\n    visibilityListener: Ember.observer('iqRoute.isPerformed', 'isHidden', 'isJoined', function () {\n      if (Ember.isPresent(this.get('points')) || this.get('inProgress')) return;\n      this.set('inProgress', true);\n      const route = this.get('iqRoute');\n      this.get('polylineService.fetchScheduledPolyline').perform(route);\n    }),\n    bemapCoords: Ember.computed('points', function () {\n      const points = this.get('points') || [];\n      return points.map(point => {\n        return {\n          lat: point[0],\n          lon: point[1]\n        };\n      });\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/stops/base\", [\"exports\", \"adept-iq/classes/polylines/base\", \"adept-iq/models/stop-point\"], function (_exports, _base, _stopPoint) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const STOP_STYLE_PREFIX = 'stop';\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('stopPolylineStyle'),\n    pattern: Ember.computed.readOnly('stopPolylineStyle'),\n    // local properties\n    stopStatus: 'planned',\n    otp: null,\n    isPlanned: Ember.computed.equal('stopStatus', _stopPoint.PLANNED_STOP_STATUS),\n    isPerformed: Ember.computed.equal('stopStatus', _stopPoint.PERFORMED_STOP_STATUS),\n    isPending: Ember.computed.equal('stopStatus', _stopPoint.PENDING_STOP_STATUS),\n    stopPolylineStyle: Ember.computed('isPerformed', 'statusStylePrefix', 'otpStyleSuffix', function () {\n      if (this.get('isPerformed')) {\n        return [STOP_STYLE_PREFIX, 'Performed'].join('');\n      }\n\n      const statusStyleSuffix = this.get('statusStyleSuffix');\n      const otpStyleSuffix = this.get('otpStyleSuffix');\n      const style = [STOP_STYLE_PREFIX, statusStyleSuffix, otpStyleSuffix].join('');\n      return style;\n    }),\n    statusStyleSuffix: Ember.computed('stopStatus', function () {\n      switch (this.get('stopStatus')) {\n        case _stopPoint.PENDING_STOP_STATUS:\n          return 'Pending';\n\n        case _stopPoint.PERFORMED_STOP_STATUS:\n          return 'Performed';\n\n        case _stopPoint.PLANNED_STOP_STATUS:\n        default:\n          return 'Planned';\n      }\n    }),\n    otpStyleSuffix: Ember.computed('otp', function () {\n      switch (this.get('otp')) {\n        case 'L':\n          return 'Late';\n\n        case 'D':\n          return 'Danger';\n\n        default:\n          return null;\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/stops/iq\", [\"exports\", \"adept-iq/classes/polylines/stops/base\", \"adept-iq/config/environment\"], function (_exports, _base, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    record: null,\n    iqStop: Ember.computed.alias('record'),\n    // `BasePolyline` overrides\n    isActive: true,\n    points: Ember.computed.readOnly('iqStop.currentPolyline.coords'),\n    // `BaseStopPolyline` overrides\n    stopStatus: Ember.computed.readOnly('stopPoint.status'),\n    otp: Ember.computed.readOnly('iqStop.otp'),\n    // local properties\n\n    /* eslint-disable ember/avoid-leaking-state-in-ember-objects */\n    stopPoint: _environment.default.APP.avlmLite ? Ember.computed.readOnly('iqStop.avlmStopPoint') : Ember.computed.readOnly('iqStop.stopPoint')\n    /* eslint-enable ember/avoid-leaking-state-in-ember-objects */\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/trips/base\", [\"exports\", \"adept-iq/classes/polylines/base\", \"adept-iq/models/trip\"], function (_exports, _base, _trip) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const isLineSolid = {\n    active: true,\n    completed: true,\n    noshow: true\n  };\n\n  var _default = _base.default.extend({\n    // `BasePolyline` overrides\n    style: Ember.computed.readOnly('tripPolyLineStyle'),\n    pattern: Ember.computed.readOnly('tripPattern'),\n    options: Ember.computed.readOnly('tripOptions'),\n    otpStatus: null,\n    // local properties\n    stopsIsVisible: null,\n    otp: null,\n    tripLateStyle: Ember.computed.readOnly('tripLineStyle'),\n    tripStyle: Ember.computed('otp', 'lineStyle', function () {\n      const lineStyle = this.get('lineStyle');\n      let style = `trip${lineStyle}`;\n      const otp = this.get('otp');\n      style += this._getOTPstyleSuffix(otp);\n      return style;\n    }),\n    lineStyle: Ember.computed('record.computedStatus', function () {\n      const status = this.get('record.computedStatus');\n      if (!status) return '';\n\n      if (isLineSolid[status.toLowerCase()]) {\n        return 'Solid';\n      }\n\n      return '';\n    }),\n    tripPolyLineStyle: Ember.computed('otp', 'tripLineStyle', 'lineStyle', function () {\n      const tripLineStyle = this.get('tripLineStyle');\n      let style = `trip${tripLineStyle}`;\n      const otp = this.get('otp');\n      style += this._getOTPstyleSuffix(otp);\n      return style;\n    }),\n    tripLineStyle: Ember.computed('record.tripStatus', function () {\n      const status = this.get('record.tripStatus') ? this.get('record.tripStatus') : this.get('record.computedStatus');\n      if (status && status.toLowerCase() === _trip.TRIP_COMPLETED_STATUS.toLowerCase()) return _trip.TRIP_COMPLETED_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_SCHEDULED_STATUS.toLowerCase()) return _trip.TRIP_SCHEDULED_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_WAITLIST_STATUS.toLowerCase()) return _trip.TRIP_WAITLIST_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_CALLBACK_STATUS.toLowerCase()) return _trip.TRIP_CALLBACK_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_DISPATCH_STATUS.toLowerCase()) return _trip.TRIP_DISPATCH_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_ACTIVE_STATUS.toLowerCase()) return _trip.TRIP_ACTIVE_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_ILLEGAL_STATUS.toLowerCase()) return _trip.TRIP_ILLEGAL_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_ENROUTE_STATUS.toLowerCase()) return _trip.TRIP_ENROUTE_STATUS.replace(/ /g, '');\n      if (status && status.toLowerCase() === _trip.TRIP_NOSHOW_STATUS.toLowerCase()) return _trip.TRIP_NOSHOW_STATUS.replace(/ /g, '');\n      if (status && status.toLowerCase() === _trip.TRIP_NOSHOWREQUESTED_STATUS.toLowerCase()) return _trip.TRIP_NOSHOWREQUESTED_STATUS.replace(/ /g, '');\n      if (status && status.toLowerCase() === _trip.TRIP_UNSCHEDULED_STATUS.toLowerCase()) return _trip.TRIP_UNSCHEDULED_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_CANCELED_STATUS.toLowerCase()) return _trip.TRIP_CANCELED_STATUS;\n      if (status && status.toLowerCase() === _trip.TRIP_LATE_CANCELED_STATUS.toLowerCase()) return _trip.TRIP_LATE_CANCELED_STATUS.replace(/ /g, '');\n      if (!status) return '';\n    }),\n    tripPattern: Ember.computed('tripStyle', 'stopsIsVisible', function () {\n      const style = this.get('tripStyle');\n      const stopsIsVisible = this.get('stopsIsVisible');\n\n      if (stopsIsVisible) {\n        // if stop markers are visible, move arrows back a little\n        return `${style}Offset`;\n      }\n\n      return style;\n    }),\n    tripOptions: Ember.computed('', function () {\n      return {\n        weight: 4\n      };\n    }),\n\n    _getOTPstyleSuffix(otp) {\n      let suffix = '';\n\n      if (otp === 'L') {\n        suffix += 'Late';\n      } else if (otp === 'D') {\n        suffix += 'Danger';\n      }\n\n      this.set('otpStatus', suffix);\n      return suffix;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/polylines/trips/iq\", [\"exports\", \"adept-iq/classes/polylines/trips/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    record: null,\n    // `BasePolyline` overrides\n    isActive: true,\n    // `BaseTripPolyline` overrides\n    otp: Ember.computed.readOnly('record.otp'),\n    points: Ember.computed('record.polyline', function () {\n      const points = this.get('record.polyline');\n      return points;\n    }),\n    bemapCoords: Ember.computed('points', function () {\n      const points = this.get('points') || [];\n      return points.map(point => {\n        return {\n          lat: point[0],\n          lon: point[1]\n        };\n      });\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/road-supervisor-api\", [\"exports\", \"fetch\", \"moment\", \"pako\", \"ember-concurrency\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\", \"adept-iq/utils/geolib\"], function (_exports, _fetch, _moment, _pako, _emberConcurrency, _environment, _apiUrls, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_LATLNG = [_environment.default.tomtom.search.center.lat, _environment.default.tomtom.search.center.lon];\n  const LOCATION_PING_INTERVAL = 20000;\n  const ETA_GET_INTERVAL = 120 * 1000; //every 2 min will check ETA time\n\n  const PING_WORKER_PATH = '/workers/avl-ping.js';\n\n  function unpackBuffer(arr) {\n    const inflated = _pako.default.inflate(arr);\n\n    const guidanceJSON = String.fromCharCode.apply(null, inflated);\n\n    try {\n      return JSON.parse(guidanceJSON);\n    } catch (e) {\n      // bad json\n      return null;\n    }\n  }\n\n  const RoadSupervisorApi = Ember.Object.extend({\n    previousLocationObj: null,\n    currentLocationObj: null,\n    tmpLocationObj: null,\n    cord: DEFAULT_LATLNG,\n    geoLocation: null,\n    currentRoute: null,\n    polyline: null,\n    guidance: null,\n    isNavigationScreen: false,\n    lastSyncTime: null,\n\n    initialize(_ref) {\n      let {\n        driver,\n        vehicle,\n        location\n      } = _ref;\n      this.driver = driver;\n      this.vehicle = vehicle;\n      this.cord = location || DEFAULT_LATLNG;\n      const dashboardInfo = localStorage.getItem('dashboard-info');\n      const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n      if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n        const accessDataObj = parsedDashboardInfo.accessData;\n        this.driver.badgeNr = accessDataObj.driverId;\n        this.driver.id = accessDataObj.driverId;\n        this.vehicle.callsign = accessDataObj.vehicleId;\n        this.vehicle.id = accessDataObj.vehicleId;\n        this.provider = accessDataObj.provider;\n      }\n\n      if (localStorage.getItem('currentRouteRS') && localStorage.getItem('currentRouteRSID')) {\n        const currentRoute = JSON.parse(localStorage.getItem('currentRouteRS'));\n        this.set('currentRoute', { ...currentRoute,\n          id: localStorage.getItem('currentRouteRSID')\n        });\n        this.prepare();\n      } else {\n        this.prepare().then(() => this.apiCreateRoute()).then(() => this.get('execRouteEventTask').perform()).then(() => this.apiExecuteDriverEvent({\n          type: 'signOn'\n        }));\n      }\n    },\n\n    setWayPoint(waypoint) {\n      this.set('isNavigationScreen', true);\n      this.apiAddStopToRoute(waypoint).then(() => this.pingAndGetPolyLine.perform().catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      })).then(() => this.startEtaGet());\n    },\n\n    pingAndGetPolyLine: (0, _emberConcurrency.task)(function* () {\n      const sleepTime = 3000;\n      let data;\n      let failedCount = 0; // ping at least once before getting polyline\n\n      yield this.apiExecutePingEvent();\n      yield (0, _emberConcurrency.timeout)(1000); // ensure original get succeeds; this can take a few tries\n\n      do {\n        data = yield this.apiGetUpdatedPolyline();\n\n        if (!data) {\n          failedCount++;\n          yield (0, _emberConcurrency.timeout)(sleepTime);\n        }\n\n        if (!this.get('isNavigationScreen')) {\n          break;\n        }\n      } while (!data && failedCount < 3);\n\n      if (data) return data; // original is backwards, so this needs to succeed too\n\n      do {\n        data = yield this.apiETAGetPolyline();\n        if (!data) yield (0, _emberConcurrency.timeout)(sleepTime);\n      } while (!data);\n\n      return data;\n    }).restartable(),\n    pingAndUpdatePolyLine: (0, _emberConcurrency.task)(function* () {\n      Ember.set(this, 'guidance', null);\n      const sleepTime = 3000;\n      let data; // ping at least once before getting polyline\n\n      yield this.apiExecutePingEvent();\n\n      do {\n        data = yield this.apiGetUpdatedPolyline();\n        if (!data) yield (0, _emberConcurrency.timeout)(sleepTime);\n      } while (!data);\n\n      return data;\n    }).restartable(),\n    execRouteEventTask: (0, _emberConcurrency.task)(function* (args) {\n      const sleepTime = 3000;\n      let result;\n\n      do {\n        result = yield this.apiExecuteRouteEvent(args);\n        if (!result) yield (0, _emberConcurrency.timeout)(sleepTime);\n      } while (!result);\n\n      return result;\n    }).enqueue(),\n\n    clearWayPoint(isDeparted) {\n      if (!isDeparted) {\n        // Not clear polyline after arrived.\n        Ember.set(this, 'polyline', null);\n      }\n\n      Ember.set(this, 'guidance', null);\n      this.set('isNavigationScreen', false);\n      clearTimeout(this._polyLineTimer);\n      this.endEtaGet();\n\n      if (isDeparted === false) {\n        return this.get('execRouteEventTask').perform({\n          type: 'pullIn'\n        });\n      }\n\n      this.get('execRouteEventTask').perform({\n        type: 'depart'\n      }).then(async () => {\n        await this.apiGetUpdatedPolyline(true);\n      });\n\n      if (this.get('pingAndGetPolyLine.isRunning')) {\n        this.get('pingAndGetPolyLine').cancelAll();\n      }\n\n      if (this.get('pingAndUpdatePolyLine.isRunning')) {\n        this.get('pingAndUpdatePolyLine').cancelAll();\n      }\n\n      return;\n    },\n\n    setLocation(loc) {\n      this.geoLocation = loc;\n      const location = [loc.coords.latitude, loc.coords.longitude];\n      this.cord = location;\n    },\n\n    setLocationHistory(lat, lng, speed, heading, timestamp) {\n      const temp = this.get('tmpLocationObj');\n\n      if (Ember.isEmpty(temp)) {\n        this.set('tmpLocationObj', {\n          lat,\n          lng,\n          speed,\n          heading,\n          timestamp\n        });\n      } else if (timestamp - temp.timestamp > 4000 && speed > 5) {\n        this.set('previousLocationObj', {\n          'previousLat': temp.lat,\n          'previousLng': temp.lng,\n          'previousSpeed': temp.speed,\n          'previousHeading': temp.heading,\n          'previousTimeStamp': temp.timestamp\n        });\n        this.set('tmpLocationObj', {\n          lat,\n          lng,\n          speed,\n          heading,\n          timestamp\n        });\n      }\n\n      this.set('currentLocationObj', {\n        'currentLat': lat,\n        'currentLng': lng,\n        'currentSpeed': speed,\n        'currentHeading': heading,\n        'currentTimeStamp': timestamp\n      });\n    },\n\n    async prepare() {\n      const token = await this.apiGetAccessToken();\n      return token;\n    },\n\n    startLocationPing() {\n      if (this._interval) return;\n      this._interval = setInterval(() => {\n        this.sendWorkerPing();\n      }, LOCATION_PING_INTERVAL);\n    },\n\n    sendWorkerPing() {\n      let pingWorker = this.get('pingWorker');\n\n      if (!pingWorker) {\n        pingWorker = new Worker(PING_WORKER_PATH);\n        this.set('pingWorker', pingWorker);\n      }\n\n      pingWorker.postMessage({\n        timestamp: (0, _moment.default)().toISOString(),\n        vehicleId: this.vehicle.id,\n        lat: this.cord[0],\n        lng: this.cord[1],\n        token: this.token,\n        url: `${_apiUrls.API.avlService.host}/avl`\n      });\n    },\n\n    endLocationPing() {\n      if (!this._interval) return;\n      clearTimeout(this._interval);\n      this._interval = null;\n    },\n\n    startEtaGet() {\n      // Get sync immediatly once.\n      this.apiUpdatedETAGet().then(() => {\n        const temp = this.get('tmpLocationObj');\n        console.log('Sync ETA...'); //eslint-disable-line no-console\n\n        this.set('lastSyncTime', temp.timestamp);\n      });\n      if (this._etaGetInterval) return;\n      this._etaGetInterval = setInterval(async () => {\n        const temp = this.get('tmpLocationObj'); // tempLocation only updateds when moving.\n\n        if (temp && temp.timestamp > this.get('lastSyncTime')) {\n          await this.apiUpdatedETAGet();\n          this.set('lastSyncTime', temp.timeStamp);\n        }\n      }, ETA_GET_INTERVAL);\n    },\n\n    endEtaGet() {\n      if (!this._etaGetInterval) return;\n      clearTimeout(this._etaGetInterval);\n      this._etaGetInterval = null;\n    },\n\n    async apiExecutePingEvent() {\n      const time = (0, _moment.default)().toISOString();\n      const body = {\n        data: {\n          type: 'avl',\n          attributes: {\n            vehicleId: this.vehicle.id,\n            timestamp: time,\n            lat: this.cord[0],\n            lng: this.cord[1]\n          }\n        }\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.avlService.host}/avl`, {\n        method: 'POST',\n        body\n      });\n      return res;\n    },\n\n    async apiGetAccessToken() {\n      const headers = {\n        Authorization: 'Basic aXEtZHJpdmVyQGRkc3dpcmVsZXNzLmNvbTp3dWJUNnhmc1dwWGJRZS9a'\n      };\n      const res = await (0, _fetch.default)(`${_apiUrls.API.ssoService.host}/login`, {\n        headers\n      });\n      const {\n        token\n      } = await res.json();\n      this.token = token;\n      return token;\n    },\n\n    async apiAddStopToRoute(waypoint) {\n      const time = (0, _moment.default)().toISOString();\n      const {\n        driverScheduleId,\n        vehicleScheduleId\n      } = this.currentRoute;\n      const body = {\n        data: {\n          type: 'route',\n          id: this.currentRoute.id,\n          attributes: {\n            state: 'active',\n            version: this.currentRoute.version,\n            driver: {\n              id: this.driver.id,\n              badgeNr: this.driver.badgeNr || this.currentRoute.driver.badgeNr\n            },\n            vehicle: {\n              id: this.vehicle.id,\n              callsign: this.vehicle.callsign || this.currentRoute.vehicle.callsign\n            },\n            driverId: this.driver.id,\n            trackingId: this.currentRoute.trackingId,\n            vehicleId: this.vehicle.id,\n            deploy: [{\n              address: {\n                streetNr: waypoint.streetNumber || '',\n                streetName: waypoint.streetAddress || '',\n                city: waypoint.locality || '',\n                state: waypoint.region || '',\n                postCode: waypoint.postalCode || '',\n                alias: waypoint.alias || '',\n                formattedAddress: waypoint.fullAddress,\n                coord: {\n                  lat: waypoint.lat,\n                  lng: waypoint.lng\n                }\n              },\n              dwellTime: 240,\n              eta: time\n            }],\n            requestedProvider: {\n              // is this right?\n              type: 'dedicated',\n              id: '1',\n              name: '1'\n            },\n            driverScheduleId,\n            vehicleScheduleId\n          },\n          links: {\n            self: 'https://11gpajx0kl.execute-api.us-west-2.amazonaws.com/production/route'\n          }\n        }\n      };\n      const pendingStops = await this.apiGetPendingStops();\n      pendingStops.forEach(async stop => {\n        await this.get('execRouteEventTask').perform({\n          stop,\n          type: 'depart'\n        });\n      });\n      const res = await this.makeRequest(`${_apiUrls.API.avlmService.host}/route/${this.currentRoute.id}`, {\n        method: 'PATCH',\n        body\n      });\n      const {\n        data,\n        error\n      } = res;\n\n      if (error) {\n        await this.apiCreateRoute();\n        await this.get('execRouteEventTask').perform();\n        await this.apiExecuteDriverEvent({\n          type: 'signOn'\n        });\n        await this.apiAddStopToRoute(waypoint);\n      } else if (data) {\n        const latestAddedStopObj = data.attributes.deploy.sortBy('index').lastObject; // FIXME: is this necessary?\n\n        this.set('currentRoute', { ...this.currentRoute,\n          deployId: latestAddedStopObj.deployId,\n          eta: latestAddedStopObj.eta\n        });\n      }\n\n      return true;\n    },\n\n    async apiCreateRoute() {\n      const body = {\n        timeStamp: (0, _moment.default)().toISOString(),\n        badgeNr: this.driver.badgeNr || 3000,\n        callsign: this.vehicle.callsign || 2001,\n        currLat: this.cord[0],\n        currLng: this.cord[1],\n        include: 'guidance',\n        provider: this.provider || 'special'\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.avlmService.host}/route`, {\n        body\n      });\n      if (!res || !res.data) return null;\n      const {\n        data\n      } = res;\n      localStorage.setItem('currentRouteRS', JSON.stringify(data[0].attributes));\n      localStorage.setItem('currentRouteRSID', data[0].id);\n      this.set('currentRoute', { ...data[0].attributes,\n        id: data[0].id\n      });\n      return data[0].id;\n    },\n\n    async apiGetPendingStops() {\n      const body = {};\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/route/${this.currentRoute.id}`, {\n        body\n      });\n\n      if (res.data && res.data.attributes && res.data.attributes.stopPoints) {\n        return res.data.attributes.stopPoints.filter(stopPoint => {\n          return stopPoint.id.startsWith('DP') && stopPoint.status === 'pending';\n        });\n      }\n\n      return [];\n    },\n\n    async apiExecuteRouteEvent() {\n      let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        type: 'pullOut'\n      };\n      const time = (0, _moment.default)().toISOString();\n      if (!this.currentRoute) return true;\n      const {\n        driver,\n        vehicle\n      } = this.currentRoute;\n      const body = {\n        data: {\n          type: 'routeExecEvent',\n          attributes: {\n            routeId: this.currentRoute.id,\n            content: {\n              type: values.type,\n              actualTime: time\n            },\n            driver: {\n              id: driver.id,\n              badgeNr: driver.badgeNr\n            },\n            vehicle: {\n              id: vehicle.id,\n              callsign: vehicle.callsign,\n              location: {\n                coord: {\n                  lat: this.cord[0],\n                  lng: this.cord[1]\n                },\n                time\n              },\n              mov: {\n                speed: 50,\n                heading: 0\n              },\n              odo: 0\n            },\n            source: {\n              type: 'driverApp'\n            }\n          }\n        }\n      };\n\n      if (values.type === 'depart') {\n        if (values.stop) {\n          // preform stops for prevoius pending stop\n          body.data.attributes.content.stopId = values.stop.id;\n          body.data.attributes.content.eta = values.stop.eta;\n        } else {\n          body.data.attributes.content.stopId = this.currentRoute.deployId;\n          body.data.attributes.content.eta = this.currentRoute.eta;\n        }\n      }\n\n      const res = await this.makeRequest(`${_apiUrls.API.avlmService.host}/route-exec-event`, {\n        method: 'POST',\n        body\n      });\n      if (Ember.isNone(res)) return false;\n      return true;\n    },\n\n    async apiExecuteDriverEvent() {\n      let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        type: 'signOn'\n      };\n      const time = (0, _moment.default)().toISOString();\n      const {\n        driverId,\n        id,\n        driverScheduleId,\n        vehicleScheduleId,\n        driver,\n        vehicle\n      } = this.currentRoute;\n      const {\n        badgeNr\n      } = driver;\n      const body = {\n        data: {\n          type: 'driverStateEvent',\n          attributes: {\n            driverId,\n            routeId: id,\n            driverScheduleId,\n            vehicleScheduleId,\n            type: values.type,\n            badgeNr,\n            time,\n            vehicle: {\n              id: vehicle.id,\n              callsign: vehicle.callsign,\n              location: {\n                coord: {\n                  lat: this.cord[0],\n                  lng: this.cord[1]\n                },\n                time\n              },\n              mov: {\n                speed: 50,\n                heading: 0\n              },\n              odo: 0,\n              provider: {\n                type: 'dedicated',\n                id: this.provider || 'special',\n                name: this.provider || 'special'\n              }\n            }\n          }\n        }\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.avlmService.host}/driver-state-event`, {\n        method: 'POST',\n        body\n      });\n      return res;\n    },\n\n    async apiETAGetPolyline() {\n      const routeId = this.currentRoute.id;\n      const body = {\n        include: 'polyline,guidance'\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/route/${routeId}`, {\n        body\n      });\n      if (!res || !res.data || !res.data.attributes || !res.data.attributes.stopPoints || res.data.attributes.stopPoints.length === 0) return null;\n      const currentRoute = res.data.attributes.stopPoints.find(stop => stop.status === 'pending');\n      const {\n        polyline,\n        guidance\n      } = currentRoute;\n      const result = {\n        polyline,\n        guidance\n      };\n      this.set('polyline', polyline);\n\n      if (guidance) {\n        const unpackedGuidance = unpackBuffer(guidance.data);\n        this.set('guidance', unpackedGuidance);\n        result.guidance = unpackedGuidance;\n      } //Added code to update latest perform stop ETA time.\n\n\n      const {\n        stopPoints\n      } = res.data.attributes;\n\n      if (stopPoints && stopPoints.length > 2) {\n        this.set('currentRoute', { ...this.currentRoute,\n          eta: stopPoints[stopPoints.length - 2].eta\n        });\n      }\n\n      return result;\n    },\n\n    async apiUpdatedETAGet() {\n      const routeId = this.currentRoute.id;\n      const body = {\n        include: 'polyline,guidance'\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/navigation-info/${routeId}`, {\n        body\n      });\n      if (!res || !res.data) return null;\n      const {\n        stopPoints\n      } = res.data.attributes;\n\n      if (stopPoints && stopPoints.length > 1) {\n        this.set('currentRoute', { ...this.currentRoute,\n          eta: stopPoints[stopPoints.length - 2].eta\n        });\n      }\n\n      return true;\n    },\n\n    async apiGetUpdatedPolyline(isExit) {\n      const routeId = this.currentRoute.id;\n      let body = {\n        include: 'polyline,guidance'\n      };\n      const previousObject = this.get('previousLocationObj');\n      const currentObject = this.get('currentLocationObj');\n      let heading;\n\n      if (previousObject && currentObject) {\n        heading = (0, _geolib.getHeading)({\n          lat: previousObject.previousLat,\n          lng: previousObject.previousLng\n        }, {\n          lat: currentObject.currentLat,\n          lng: currentObject.currentLng\n        });\n      }\n\n      if (currentObject) {\n        // Added this condition to pass the latest vehicle location to ETA server.\n        // Without sending previous object to avoid backward polyline issue.\n        body = {\n          'currHeading': heading || currentObject.currentHeading,\n          'currLat': currentObject.currentLat,\n          'currLng': currentObject.currentLng,\n          'currSpeed': Math.max(currentObject.currentSpeed, 5),\n          //single location need speed > 5\n          'currTimestamp': _moment.default.utc().format(),\n          'include': 'polyline,guidance'\n        };\n      }\n\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/navigation-info/${routeId}/updatedNavInfo`, {\n        body\n      });\n      if (!res || !res.data || !res.data.attributes || !res.data.attributes.current) return null;\n      const {\n        polyline,\n        guidance\n      } = res.data.attributes.current;\n      const result = {\n        polyline\n      };\n      if (!isExit) this.set('polyline', polyline);\n\n      if (guidance) {\n        const unpackedGuidance = unpackBuffer(guidance.data);\n        if (!isExit) this.set('guidance', unpackedGuidance);\n        result.guidance = unpackedGuidance;\n      } //Added code to update latest perform stop ETA time.\n\n\n      const {\n        stopPoints\n      } = res.data.attributes;\n\n      if (stopPoints && stopPoints.length > 2) {\n        this.set('currentRoute', { ...this.currentRoute,\n          eta: stopPoints[stopPoints.length - 2].eta\n        });\n      }\n\n      return result;\n    },\n\n    async makeRequest(url, props) {\n      let params = '';\n\n      if (props.body) {\n        if ('method' in props && props.method !== 'GET') {\n          props.body = JSON.stringify(props.body);\n        } else {\n          params = Ember.$.param(props.body);\n          delete props.body;\n        }\n      }\n\n      try {\n        const res = await (0, _fetch.default)(`${url}?${params}`, Object.assign({\n          headers: {\n            Accept: 'application/json',\n            'Content-Type': 'application/json',\n            Authorization: `Bearer ${this.token}`\n          }\n        }, props));\n\n        if (res.status === 200) {\n          return res.text().then(data => data ? JSON.parse(data) : {});\n        }\n\n        if (res.status === 404) {\n          return res.text().then(error => error ? JSON.parse(error) : {});\n        } // any other status just return {}\n\n\n        return {};\n      } catch (err) {\n        return null;\n      }\n    }\n\n  });\n  let instance;\n  RoadSupervisorApi.reopenClass({\n    getRoleName() {\n      return 'roadsup';\n    },\n\n    getConfigId() {\n      return 'config-UI_restrictions-roadsup/restrictions';\n    },\n\n    getSingleton() {\n      if (!instance) {\n        instance = RoadSupervisorApi.create();\n      }\n\n      return instance;\n    }\n\n  });\n  var _default = RoadSupervisorApi;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/road-supervisor-instance\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/geolib\", \"adept-iq/utils/turn-by-turn\", \"adept-iq/utils/turn-by-turn-icon\", \"moment\"], function (_exports, _emberConcurrency, _geolib, _turnByTurn, _turnByTurnIcon, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var EPSILON = 0.05; // how much history to retain; bigger applies more smoothing\n\n  var LOCATION_HISTORY_DEPTH = 1000;\n  var GUIDANCE_HISTORY_DEPTH = 5;\n  var SPOKEN_HISTORY_DEPTH = 5; // number of (most recent) points used to determine speed\n\n  const SPEED_AVERAGING_WINDOW = 2; // number of (most recent) meters to consider when computing heading\n\n  const HEADING_AVERAGING_WINDOW = 10; // compensation for GPS delay (s)\n\n  var LOOKAHEAD_SECONDS = 0; // how close to the polyline we must be to be \"on\" it (m)\n\n  var NAVIGATION_POLYLINE_PROXIMITY_THRESHOLD = 50; // how many degrees our bearing must be within to be \"on\" the polyline\n\n  var BEARING_TOLERANCE = 150; // if within threshold, guidance spoken automatically (m)\n\n  var SPOKEN_GUIDANCE_DISTANCE_THRESHOLD = 160; // how long before maneuver is instruction spoken (s)\n\n  var SPOKEN_GUIDANCE_TIME_THRESHOLD = 5; // don't repeat any instruction within this window (ms)\n\n  var SPOKEN_GUIDANCE_DEBOUNCE_TIME = 5000; // ignore heading at beginning and end of each segment (m); allows for sharp turns\n\n  const SEGMENT_HEADING_EXCLUSION_MARGIN = 10; // don't examine heading speed if moving slowly\n\n  const MIN_HEADING_SPEED = 3.0;\n\n  function formatDistance(distanceInMeter) {\n    if (!distanceInMeter) {\n      // eslint-disable-next-line no-undefined\n      return undefined;\n    }\n\n    const meterToMiConvert = 1 / 1609.344;\n    const num = distanceInMeter * meterToMiConvert;\n\n    if (num < '0.2') {\n      const distFt = Math.ceil(num * 5280);\n\n      if (distFt < 100) {\n        return Math.ceil(distFt / 10) * 10 + ' feet';\n      } else if (distFt < 300) {\n        return Math.ceil(distFt / 25) * 25 + ' feet';\n      }\n\n      return Math.ceil(distFt / 100) * 100 + ' feet';\n    }\n\n    return num.toFixed(1) + ' miles';\n  }\n\n  var _default = Ember.Object.extend({\n    isAtDestination: false,\n    bearing: 0,\n    speed: 0,\n    gpsSpeed: null,\n    isOffRoute: false,\n    _locationHistory: null,\n    _guidanceHistory: null,\n    _spokenHistory: null,\n    tick: function () {\n      const nextTick = Ember.run.later(this, function () {\n        if (this.get('isDestroyed')) return;\n        this.notifyPropertyChange('_travelTime');\n        this.tick();\n      }, 10000);\n      this.set('nextTick', nextTick);\n    },\n    navigationPolyline: Ember.computed.readOnly('api.polyline'),\n    guidanceArray: Ember.computed.readOnly('api.guidance'),\n    travelTime: Ember.computed.readOnly('_travelTime'),\n    endGuidance: Ember.computed.readOnly('guidanceArray.lastObject'),\n    destination: Ember.computed.readOnly('navigationPolyline.lastObject'),\n    location: Ember.computed.readOnly('_locationHistory.lastObject.point'),\n    guidance: Ember.computed.readOnly('_guidanceHistory.lastObject.guidance'),\n    // distance from location to nearest \"snapped\" location on polyline\n    navigationPolylineDistance: Ember.computed.readOnly('_projection.distance'),\n    // polyline bearing at the \"snapped\" location\n    navigationPolylineBearing: Ember.computed.readOnly('_projection.bearing'),\n    // \"snapped\" location moved ahead on polyline\n    navigationPolylineLocation: Ember.computed.readOnly('_advancedProjection.point'),\n    // distance from start of polyline to advanced \"snapped\" location\n    navigationPolylineOffset: Ember.computed.readOnly('_advancedProjection.offset'),\n    _travelTime: Ember.computed('api.currentRoute.eta', function () {\n      // We don't want keep calculating _travelTime, we only calculate once per tick.\n      const eta = this.get('api.currentRoute.eta');\n      if (Ember.isPresent(eta) && eta > _moment.default.utc().format()) return (0, _moment.default)(eta).diff(_moment.default.utc());\n      return null;\n    }),\n    previousGuidance: Ember.computed('guidance', 'guidanceArray', function () {\n      const guidance = this.get('guidance');\n      const guidanceArray = this.get('guidanceArray');\n      const index = guidanceArray ? guidanceArray.indexOf(guidance) : -1;\n      return index > 1 ? guidanceArray[index - 1] : null;\n    }),\n    guidanceMessage: Ember.computed('guidance', 'previousGuidance', 'endGuidance', 'navigationPolylineOffset', 'travelTime', function () {\n      const d = this.get('navigationPolylineOffset');\n      const guidance = this.get('guidance');\n      const previousGuidance = this.get('previousGuidance');\n      const endGuidance = this.get('endGuidance');\n      const travelTime = this.get('travelTime');\n      if (Ember.isNone(d) || !guidance || !endGuidance) return null; // `d` is where we are; d0 < d < d1\n      // `[d0, d1]` is the leg from previous guidance to current\n      // `[d1, d2]` is the remainder from current guidance to end\n\n      const t0 = previousGuidance ? previousGuidance.travelTimeInSeconds : 0;\n      const d0 = previousGuidance ? previousGuidance.routeOffsetInMeters : 0;\n      const t1 = guidance.travelTimeInSeconds;\n      const d1 = guidance.routeOffsetInMeters;\n      const t2 = endGuidance.travelTimeInSeconds;\n      const d2 = endGuidance.routeOffsetInMeters;\n\n      if (d < d0 || d > d1) {\n        console.warn('failed sanity check: projected distance does not lie between previous and next guidance events'); // eslint-disable-line no-console\n      }\n\n      if (t0 > t1 || d0 > d1) {\n        console.warn('failed sanity check: previous guidance occurs after next guidance'); // eslint-disable-line no-console\n      }\n\n      if (t1 > t2 || d0 > d2) {\n        console.warn('failed sanity check: next guidance occurs after end guidance'); // eslint-disable-line no-console\n      } // travel time of leg, adjusted by distance remaining\n\n\n      const travelTimeToNextGuide = d1 - d0 > 0 ? (t1 - t0) * (1.0 - (d - d0) / (d1 - d0)) : null;\n      const travelDistanceToNextGuide = d1 - d; // const travelTime = travelTimeToNextGuide + (t2 - t1);\n\n      const travelDistance = d2 - d;\n      return Object.assign({\n        previousGuidance,\n        // time and distance to next instruction\n        travelTimeToNextGuide,\n        travelDistanceToNextGuide: formatDistance(travelDistanceToNextGuide),\n        // time and distance to end\n        travelTime,\n        travelDistance: formatDistance(travelDistance),\n        instructIcon: (0, _turnByTurnIcon.renderTurnByTurnIcon)(guidance),\n        text: (0, _turnByTurn.renderTurnByTurnGuidance)(guidance)\n      }, guidance);\n    }),\n    // intermediates\n    _projection: Ember.computed('navigationPolyline', 'location', function () {\n      const navigationPolyline = this.get('navigationPolyline');\n      const location = this.get('location');\n      if (!navigationPolyline || !location) return null;\n      const locationHistory = this.get('_locationHistory');\n      const lastLocationHistory = locationHistory.get('lastObject');\n      const segementTravelledDistance = lastLocationHistory.distance;\n      return (0, _geolib.projectPointOnPolyline)(location, navigationPolyline, segementTravelledDistance);\n    }),\n    _advancedProjection: Ember.computed('_projection', 'navigationPolyline', 'navigationPolylineLength', 'speed', function () {\n      const projection = this.get('_projection');\n      const navigationPolyline = this.get('navigationPolyline');\n      const navigationPolylineLength = this.get('navigationPolylineLength');\n      if (!projection || !navigationPolyline) return null;\n      const speed = this.get('speed') || 0;\n      const lookaheadOffset = LOOKAHEAD_SECONDS * speed;\n      let advancedOffset = projection.offset + lookaheadOffset; // don't project beyond end of polyline\n\n      if (!Ember.isNone(navigationPolylineLength)) {\n        advancedOffset = Math.min(navigationPolylineLength, advancedOffset);\n      }\n\n      return (0, _geolib.projectDistanceOnPolyline)(advancedOffset, navigationPolyline);\n    }),\n    navigationPolylineLength: Ember.computed('navigationPolyline', function () {\n      const navigationPolyline = this.get('navigationPolyline');\n      if (!navigationPolyline) return null;\n      return (0, _geolib.computePolylineLength)(navigationPolyline);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('_locationHistory', []);\n      this.set('_guidanceHistory', []);\n      this.set('_spokenHistory', []);\n      this.setRSConfigurations();\n      this.tick();\n    },\n\n    willDestroyElement() {\n      const nextTick = this.get('nextTick');\n      Ember.run.cancel(nextTick);\n    },\n\n    setRSConfigurations() {\n      const configuration = this.delegate.getRSConfigurations();\n      EPSILON = configuration.epsilon ? Number(configuration.epsilon) : EPSILON;\n      LOCATION_HISTORY_DEPTH = configuration.locationHistoryDepth ? Number(configuration.locationHistoryDepth) : LOCATION_HISTORY_DEPTH;\n      GUIDANCE_HISTORY_DEPTH = configuration.guindanceHistoryDepth ? Number(configuration.guindanceHistoryDepth) : GUIDANCE_HISTORY_DEPTH;\n      SPOKEN_HISTORY_DEPTH = configuration.spokenHistoryDepth ? Number(configuration.spokenHistoryDepth) : SPOKEN_HISTORY_DEPTH;\n      LOOKAHEAD_SECONDS = configuration.lookAheadSeconds ? Number(configuration.lookAheadSeconds) : LOOKAHEAD_SECONDS;\n      NAVIGATION_POLYLINE_PROXIMITY_THRESHOLD = configuration.navigationPolylineProximityThreshold ? Number(configuration.navigationPolylineProximityThreshold) : NAVIGATION_POLYLINE_PROXIMITY_THRESHOLD;\n      BEARING_TOLERANCE = configuration.bearingTolerance ? Number(configuration.bearingTolerance) : BEARING_TOLERANCE;\n      SPOKEN_GUIDANCE_DISTANCE_THRESHOLD = configuration.spokenGuidanceDistanceThreshold ? Number(configuration.spokenGuidanceDistanceThreshold) : SPOKEN_GUIDANCE_DISTANCE_THRESHOLD;\n      SPOKEN_GUIDANCE_TIME_THRESHOLD = configuration.spokenGuidanceTimeThreshold ? Number(configuration.spokenGuidanceTimeThreshold) : SPOKEN_GUIDANCE_TIME_THRESHOLD;\n      SPOKEN_GUIDANCE_DEBOUNCE_TIME = configuration.spokenGuidanceDebounceTime ? Number(configuration.spokenGuidanceDebounceTime) : SPOKEN_GUIDANCE_DEBOUNCE_TIME;\n    },\n\n    onGPSLocation(val) {\n      const location = [val.coords.latitude, val.coords.longitude];\n      const locationHistory = this.get('_locationHistory');\n      const t = Date.now(); // update location, bearing, speed\n\n      if (locationHistory.length === 0) {\n        locationHistory.pushObject({\n          t,\n          point: location,\n          distance: 0\n        });\n      } else {\n        const previous = locationHistory.get('lastObject');\n        const [segment] = (0, _geolib.computePolylineSegments)([previous.point, location]);\n        locationHistory.pushObject({\n          t,\n          point: location,\n          distance: segment.length,\n          gpsSpeed: val.coords.speed\n        });\n\n        while (locationHistory.length > LOCATION_HISTORY_DEPTH) {\n          locationHistory.shiftObject();\n        }\n\n        if (locationHistory.length > 1) {\n          const [last] = locationHistory.slice(-1); // update speed\n\n          const [speedFirst] = locationHistory.slice(-SPEED_AVERAGING_WINDOW);\n          const [speedSegment] = (0, _geolib.computePolylineSegments)([speedFirst.point, last.point]);\n          const speed = 1000.0 * speedSegment.length / (last.t - speedFirst.t);\n          this.set('speed', speed);\n\n          if (!Ember.isNone(speed)) {\n            this.set('gpsSpeed', val.coords.speed);\n          } // update heading\n\n\n          let headingSegment;\n\n          for (let i = locationHistory.length - 2; i >= 0; i--) {\n            headingSegment = (0, _geolib.computePolylineSegments)([locationHistory[i].point, last.point])[0];\n            if (headingSegment.length >= HEADING_AVERAGING_WINDOW || i === 0) break;\n          } //do not update bearing everytime\n\n\n          if (val.coords.speed > MIN_HEADING_SPEED) {\n            this.set('bearing', headingSegment.bearing);\n          }\n        } else {\n          const navigationPolylineBearing = this.get('navigationPolylineBearing'); // Avoid bearing diff cause recalculating.\n\n          if (!Ember.isNone(navigationPolylineBearing)) {\n            this.set('bearing', navigationPolylineBearing);\n          }\n        }\n      } // If IsOffRoute we will wait new guidanceArray and update guidance after that.\n\n\n      if (!this.checkIsOffRoute()) {\n        this.updateGuidance();\n      }\n\n      if (!this.get('isAtDestination') && this.checkifAtDestination(location)) {\n        this.delegate.onAtDestinationEvent();\n        this.set('isAtDestination', true);\n      }\n    },\n\n    onGuidanceArrayChanged: Ember.observer('guidanceArray', function () {\n      this.updateGuidance();\n      this.notifyPropertyChange('_travelTime');\n    }),\n\n    updateGuidance() {\n      const guidanceHistory = this.get('_guidanceHistory');\n      const spokenHistory = this.get('_spokenHistory');\n      const t = Date.now();\n\n      const guidance = this._computeActiveGuidance();\n\n      const lastGuidance = guidanceHistory ? guidanceHistory.get('lastObject.guidance') : null;\n\n      if (guidance !== lastGuidance) {\n        guidanceHistory.pushObject({\n          t,\n          guidance\n        }); // can be null\n\n        while (guidanceHistory.length > GUIDANCE_HISTORY_DEPTH) {\n          guidanceHistory.shiftObject();\n        }\n      } // speak if necessary\n\n\n      if (this._canSpeakGuidance(guidance)) {\n        const guidanceMessage = this.get('guidanceMessage');\n        const speakAtDist = guidanceMessage.travelDistanceToNextGuide.replace(' ft', 'feet');\n        const message = guidanceMessage.message + ' in ' + speakAtDist;\n        this.delegate.onSpeechEvent(message);\n        spokenHistory.pushObject({\n          t,\n          guidance\n        });\n\n        while (spokenHistory.length > SPOKEN_HISTORY_DEPTH) {\n          spokenHistory.shiftObject();\n        }\n      }\n    },\n\n    checkifAtDestination(location) {\n      if (this.destination) {\n        const distance = geolib.getDistance((0, _geolib.toGeolib)(this.destination), (0, _geolib.toGeolib)(location));\n        return distance <= 50;\n      }\n    },\n\n    checkIsOffRoute() {\n      const wasOffRoute = this.get('isOffRoute');\n      const guidanceArray = this.get('guidanceArray');\n      const offset = this.get('navigationPolylineOffset');\n      const distance = this.get('navigationPolylineDistance');\n      const navigationPolylineBearing = this.get('navigationPolylineBearing');\n      const bearing = this.get('bearing');\n      const speed = this.get('speed');\n      const gpsSpeed = this.get('gpsSpeed');\n      let isOffRoute = false;\n\n      if (!guidanceArray || Ember.isNone(offset) || Ember.isNone(navigationPolylineBearing) || Ember.isNone(bearing)) {// not enough data available\n      } else if (speed < MIN_HEADING_SPEED || !Ember.isNone(gpsSpeed) && gpsSpeed < MIN_HEADING_SPEED) {// too slow to examine heading\n      } else if (distance > NAVIGATION_POLYLINE_PROXIMITY_THRESHOLD) {\n        // too far from polyline\n        isOffRoute = true;\n      } else if (Math.min(Math.abs(bearing - navigationPolylineBearing), 360 - Math.abs(bearing - navigationPolylineBearing)) > BEARING_TOLERANCE) {\n        // heading is too far off\n        const projection = this.get('_projection'); // ignore first and last N meters of each polyline segment to allow\n        // vehicle the opportunity to make shap turns\n\n        if (projection.segmentOffset > SEGMENT_HEADING_EXCLUSION_MARGIN && projection.segmentOffset < projection.segments.length - SEGMENT_HEADING_EXCLUSION_MARGIN) {\n          isOffRoute = true;\n        }\n      }\n\n      if (isOffRoute !== wasOffRoute) {\n        // only update if it changed\n        this.set('isOffRoute', isOffRoute);\n      }\n\n      return isOffRoute;\n    },\n\n    isOffRouteChanged: Ember.observer('isOffRoute', function () {\n      if (this.get('isOffRoute')) {\n        this.set('_guidanceHistory', []);\n        this.set('_spokenHistory', []);\n        const taskPerformed = this.api.pingAndUpdatePolyLine.perform().catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n\n        if (taskPerformed) {\n          this.set('isOffRoute', false);\n        }\n\n        console.log('Vehicle has gone off route.'); //eslint-disable-line no-console\n      } else {\n        console.log('vehicle has returned to route'); //eslint-disable-line no-console\n      }\n    }),\n\n    _computeActiveGuidance() {\n      let guidanceArray = this.get('guidanceArray');\n      const offset = this.get('navigationPolylineOffset');\n      const navigationPolylineBearing = this.get('navigationPolylineBearing');\n      const bearing = this.get('bearing');\n      if (!guidanceArray || Ember.isNone(offset) || Ember.isNone(navigationPolylineBearing) || Ember.isNone(bearing)) return null;\n      if (this.get('isOffRoute')) return null; // get the first instruction beyond current offset\n\n      guidanceArray = guidanceArray.filter(obj => {\n        return obj.routeOffsetInMeters > offset;\n      });\n      let baseWaypointIndex = 0;\n\n      if (guidanceArray.length > 1 && guidanceArray[baseWaypointIndex] && (guidanceArray[baseWaypointIndex].instructionType === 'LOCATION_WAYPOINT' || guidanceArray[baseWaypointIndex].instructionType === 'LOCATION_DEPARTURE')) {\n        baseWaypointIndex = 1;\n      }\n\n      const guidance = guidanceArray[baseWaypointIndex];\n      return guidance;\n    },\n\n    _canSpeakGuidance(guidance) {\n      const navigationPolylineOffset = this.get('navigationPolylineOffset');\n      if (!guidance || Ember.isNone(navigationPolylineOffset)) return false;\n      const speed = this.get('speed');\n      const spokenHistory = this.get('_spokenHistory');\n      const guidanceHistory = this.get('_guidanceHistory');\n      const last = guidanceHistory.get('lastObject');\n      const lastSpoken = spokenHistory.get('lastObject');\n      const guidanceMessage = this.get('guidanceMessage');\n      let speakAt = '400 feet'; // Speed less than equals to 40 km/h\n\n      if (speed > '11' && speed <= '16') {\n        // Speed greater than 40 km/h and less than equals to 60 km/h\n        speakAt = '500 feet';\n      } else if (speed > '16' && speed < '22') {\n        // Speed greater than 60 km/h and less than 80 km/h\n        speakAt = '600 feet';\n      } else if (speed >= '22') {\n        // Speed greater than equals to 80 km/h\n        speakAt = '700 feet';\n      } // not enough info available\n      // already spoke this and guidance hasn't changed\n\n\n      if (last && lastSpoken && last.guidance === guidance && lastSpoken.guidance === guidance) {\n        return false;\n      }\n\n      if (spokenHistory.length === 0 && guidanceHistory.length === 0) {\n        return false;\n      }\n\n      if (guidanceMessage.travelDistanceToNextGuide.replace(' feet', '') <= Number(speakAt.replace(' feet', ''))) {\n        return true;\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/road-supervisor-special-route-api\", [\"exports\", \"lodash\", \"fetch\", \"moment\", \"pako\", \"ember-concurrency\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\", \"adept-iq/utils/geolib\"], function (_exports, _lodash, _fetch, _moment, _pako, _emberConcurrency, _environment, _apiUrls, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_LATLNG = [_environment.default.tomtom.search.center.lat, _environment.default.tomtom.search.center.lon];\n  const LOCATION_PING_INTERVAL = 20000;\n  const ETA_GET_INTERVAL = 120 * 1000; //every 2 min will check ETA time\n\n  const PING_WORKER_PATH = '/workers/avl-ping.js';\n\n  function unpackBuffer(arr) {\n    const inflated = _pako.default.inflate(arr);\n\n    const guidanceJSON = String.fromCharCode.apply(null, inflated);\n\n    try {\n      return JSON.parse(guidanceJSON);\n    } catch (e) {\n      // bad json\n      return null;\n    }\n  }\n\n  const RoadSupervisorSpecialRouteApi = Ember.Object.extend({\n    previousLocationObj: null,\n    currentLocationObj: null,\n    tmpLocationObj: null,\n    cord: DEFAULT_LATLNG,\n    geoLocation: null,\n    currentRoute: null,\n    polyline: null,\n    guidance: null,\n    isNavigationScreen: false,\n    lastSyncTime: null,\n    schedule: null,\n    dispatchRouteAdapter: null,\n    store: null,\n    addressService: null,\n\n    initialize(_ref) {\n      let {\n        driver,\n        vehicle,\n        location\n      } = _ref;\n      this.driver = driver;\n      this.vehicle = vehicle;\n      this.cord = location || DEFAULT_LATLNG;\n      const dashboardInfo = localStorage.getItem('dashboard-info');\n      const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n      if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n        const accessDataObj = parsedDashboardInfo.accessData;\n        this.driver.badgeNr = accessDataObj.driver;\n        this.driver.id = accessDataObj.driverId;\n        this.vehicle.callsign = accessDataObj.vehicle;\n        this.vehicle.id = accessDataObj.vehicleId;\n        this.provider = accessDataObj.provider;\n      }\n    },\n\n    async initRoute() {\n      if (localStorage.getItem('currentRouteRSID')) {\n        const store = this.get('store');\n        const currentRouteRSID = localStorage.getItem('currentRouteRSID');\n        const currentRouteRS = await store.findRecord('dispatch-route', currentRouteRSID);\n        this.set('currentRoute', currentRouteRS);\n        await this.prepare();\n      } else {\n        await this.prepare();\n        const garage = await this.createGarage();\n        await this.apiCreateRoute(garage);\n        await this.get('execRouteEventTask').perform();\n        await this.apiExecuteDriverEvent({\n          type: 'signOn'\n        });\n      }\n    },\n\n    async createGarage() {\n      const lat = this.cord[0];\n      const lng = this.cord[1];\n\n      try {\n        const address = await this.get('addressService').reverseGeocode(`${lat},${lng}`);\n\n        if (!address) {\n          throw new Error('no matching address found');\n        }\n\n        const place = this.get('addressService').createWayPoint(address);\n        return place;\n      } catch (err) {\n        throw new Error(err);\n      }\n    },\n\n    setStore(store) {\n      this.set('store', store);\n    },\n\n    setAddressService(addressService) {\n      this.set('addressService', addressService);\n    },\n\n    setWayPoint(waypoint) {\n      this.set('isNavigationScreen', true);\n      this.apiAddStopToRoute(waypoint).then(() => this.pingAndGetPolyLine.perform().catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      })).then(() => this.startEtaGet());\n    },\n\n    pingAndGetPolyLine: (0, _emberConcurrency.task)(function* () {\n      const sleepTime = 3000;\n      let data;\n      let failedCount = 0; // ping at least once before getting polyline\n\n      yield this.apiExecutePingEvent();\n      yield (0, _emberConcurrency.timeout)(1000); // ensure original get succeeds; this can take a few tries\n\n      do {\n        data = yield this.apiGetUpdatedPolyline();\n\n        if (!data) {\n          failedCount++;\n          yield (0, _emberConcurrency.timeout)(sleepTime);\n        }\n\n        if (!this.get('isNavigationScreen')) {\n          break;\n        }\n      } while (!data && failedCount < 3);\n\n      if (data) return data; // original is backwards, so this needs to succeed too\n\n      do {\n        data = yield this.apiETAGetPolyline();\n        if (!data) yield (0, _emberConcurrency.timeout)(sleepTime);\n      } while (!data);\n\n      return data;\n    }).restartable(),\n    pingAndUpdatePolyLine: (0, _emberConcurrency.task)(function* () {\n      Ember.set(this, 'guidance', null);\n      const sleepTime = 3000;\n      let data; // ping at least once before getting polyline\n\n      yield this.apiExecutePingEvent();\n\n      do {\n        data = yield this.apiGetUpdatedPolyline();\n        if (!data) yield (0, _emberConcurrency.timeout)(sleepTime);\n      } while (!data);\n\n      return data;\n    }).restartable(),\n    execRouteEventTask: (0, _emberConcurrency.task)(function* (args) {\n      const sleepTime = 3000;\n      let result;\n\n      do {\n        result = yield this.apiExecuteRouteEvent(args);\n        if (!result) yield (0, _emberConcurrency.timeout)(sleepTime);\n      } while (!result);\n\n      return result;\n    }).enqueue(),\n\n    async performDepartIfPending() {\n      const pendingStops = await this.apiGetPendingStops();\n      const waypointId = this.get('currentRoute.deployId');\n\n      if (waypointId) {\n        const isPending = _lodash.default.findIndex(pendingStops, {\n          id: waypointId\n        }) > -1;\n\n        if (isPending) {\n          await this.get('execRouteEventTask').perform({\n            type: 'depart'\n          });\n        }\n      }\n    },\n\n    clearWayPoint(isDeparted) {\n      if (!isDeparted) {\n        // Not clear polyline after arrived.\n        Ember.set(this, 'polyline', null);\n      }\n\n      Ember.set(this, 'guidance', null);\n      this.set('isNavigationScreen', false);\n      clearTimeout(this._polyLineTimer);\n      this.endEtaGet();\n\n      if (isDeparted === false) {\n        return this.get('execRouteEventTask').perform({\n          type: 'pullIn'\n        }).then(async () => {\n          return await this.get('execRouteEventTask').perform({\n            type: 'complete'\n          });\n        });\n      }\n\n      this.performDepartIfPending().then(async () => {\n        await this.apiGetUpdatedPolyline(true);\n      });\n\n      if (this.get('pingAndGetPolyLine.isRunning')) {\n        this.get('pingAndGetPolyLine').cancelAll();\n      }\n\n      if (this.get('pingAndUpdatePolyLine.isRunning')) {\n        this.get('pingAndUpdatePolyLine').cancelAll();\n      }\n\n      return;\n    },\n\n    setSchedule(schedule) {\n      this.set('schedule', schedule);\n    },\n\n    setLocation(loc) {\n      this.geoLocation = loc;\n      const location = [loc.coords.latitude, loc.coords.longitude];\n      this.cord = location;\n    },\n\n    setLocationHistory(lat, lng, speed, heading, timestamp) {\n      const temp = this.get('tmpLocationObj');\n\n      if (Ember.isEmpty(temp)) {\n        this.set('tmpLocationObj', {\n          lat,\n          lng,\n          speed,\n          heading,\n          timestamp\n        });\n      } else if (timestamp - temp.timestamp > 4000 && speed > 5) {\n        this.set('previousLocationObj', {\n          'previousLat': temp.lat,\n          'previousLng': temp.lng,\n          'previousSpeed': temp.speed,\n          'previousHeading': temp.heading,\n          'previousTimeStamp': temp.timestamp\n        });\n        this.set('tmpLocationObj', {\n          lat,\n          lng,\n          speed,\n          heading,\n          timestamp\n        });\n      }\n\n      this.set('currentLocationObj', {\n        'currentLat': lat,\n        'currentLng': lng,\n        'currentSpeed': speed,\n        'currentHeading': heading,\n        'currentTimeStamp': timestamp\n      });\n    },\n\n    async prepare() {\n      const token = await this.apiGetAccessToken();\n      return token;\n    },\n\n    startLocationPing() {\n      if (this._interval) return;\n      this._interval = setInterval(() => {\n        this.sendWorkerPing();\n      }, LOCATION_PING_INTERVAL);\n    },\n\n    sendWorkerPing() {\n      let pingWorker = this.get('pingWorker');\n\n      if (!pingWorker) {\n        pingWorker = new Worker(PING_WORKER_PATH);\n        this.set('pingWorker', pingWorker);\n      }\n\n      pingWorker.postMessage({\n        timestamp: (0, _moment.default)().toISOString(),\n        vehicleId: this.vehicle.id,\n        lat: this.cord[0],\n        lng: this.cord[1],\n        token: this.token,\n        url: `${_apiUrls.API.avlService.host}/avl`\n      });\n    },\n\n    endLocationPing() {\n      if (!this._interval) return;\n      clearTimeout(this._interval);\n      this._interval = null;\n    },\n\n    startEtaGet() {\n      // Get sync immediatly once.\n      this.apiUpdatedETAGet().then(() => {\n        const temp = this.get('tmpLocationObj');\n        console.log('Sync ETA...'); //eslint-disable-line no-console\n\n        this.set('lastSyncTime', temp.timestamp);\n      });\n      if (this._etaGetInterval) return;\n      this._etaGetInterval = setInterval(async () => {\n        const temp = this.get('tmpLocationObj'); // tempLocation only updateds when moving.\n\n        if (temp && temp.timestamp > this.get('lastSyncTime')) {\n          await this.apiUpdatedETAGet();\n          this.set('lastSyncTime', temp.timeStamp);\n        }\n      }, ETA_GET_INTERVAL);\n    },\n\n    endEtaGet() {\n      if (!this._etaGetInterval) return;\n      clearTimeout(this._etaGetInterval);\n      this._etaGetInterval = null;\n    },\n\n    async apiExecutePingEvent() {\n      const time = (0, _moment.default)().toISOString();\n      const body = {\n        data: {\n          type: 'avl',\n          attributes: {\n            vehicleId: this.vehicle.id,\n            timestamp: time,\n            lat: this.cord[0],\n            lng: this.cord[1]\n          }\n        }\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.avlService.host}/avl`, {\n        method: 'POST',\n        body\n      });\n      return res;\n    },\n\n    async apiGetAccessToken() {\n      const headers = {\n        Authorization: 'Basic aXEtZHJpdmVyQGRkc3dpcmVsZXNzLmNvbTp3dWJUNnhmc1dwWGJRZS9a'\n      };\n      const res = await (0, _fetch.default)(`${_apiUrls.API.ssoService.host}/login`, {\n        headers\n      });\n      const {\n        token\n      } = await res.json();\n      this.token = token;\n      return token;\n    },\n\n    async apiAddStopToRoute(waypoint) {\n      const currentRoute = this.get('currentRoute');\n      if (Ember.isNone(currentRoute)) return true;\n      const body = {\n        data: {\n          type: 'stopPoint',\n          attributes: {\n            routeOrdinal: 1,\n            waypointType: 'fixed',\n            waypointSource: 'address'\n          },\n          relationships: {\n            dispatchSchedule: {\n              data: {\n                id: currentRoute.get('dispatchSchedule.id'),\n                type: 'dispatchSchedule'\n              }\n            },\n            waypoint: {\n              data: {\n                id: waypoint.get('id'),\n                type: 'waypoint'\n              }\n            }\n          }\n        }\n      };\n      const pendingStops = await this.apiGetPendingStops();\n      pendingStops.forEach(async stop => {\n        await this.get('execRouteEventTask').perform({\n          stop,\n          type: 'depart'\n        });\n      });\n      const res = await this.makeRequest(`${_apiUrls.API.dispatchService.host}/special-route/${currentRoute.get('id')}/waypoint`, {\n        method: 'PUT',\n        body\n      });\n      const {\n        data,\n        error\n      } = res;\n\n      if (error) {\n        const garage = await this.createGarage();\n        await this.apiCreateRoute(garage);\n        await this.get('execRouteEventTask').perform();\n        await this.apiExecuteDriverEvent({\n          type: 'signOn'\n        });\n        await this.apiAddStopToRoute(waypoint);\n      } else if (data) {\n        const store = this.get('store'); // save stopPoint.\n\n        store.push({\n          data\n        });\n        currentRoute.set('deployId', 'DP' + data.id); // TODO: see AVLM changes and make it right.\n      }\n\n      return true;\n    },\n\n    async apiCreateRoute(garage) {\n      const time = new Date().getTime();\n      const body = {\n        data: {\n          type: 'specialRoute',\n          attributes: {\n            name: 'SUP' + this.vehicle.callsign + '-' + time,\n            // TODO: create a uniq name\n            routeType: 'supervisor',\n            shiftStartTime: (0, _moment.default)().toISOString(),\n            shiftEndTime: (0, _moment.default)().toISOString(),\n            tripLimit: 0,\n            distanceLimit: 0,\n            affinities: []\n          },\n          relationships: {\n            dispatchSchedule: {\n              data: {\n                id: this.get('schedule.dispatchSchedule.id'),\n                type: 'dispatchSchedule'\n              }\n            },\n            driver: {\n              data: {\n                id: this.driver.id || 3000,\n                type: 'driver'\n              }\n            },\n            providerName: {\n              data: {\n                id: this.provider || 'special',\n                type: 'providerName'\n              }\n            },\n            vehicle: {\n              data: {\n                id: this.vehicle.id || 2001,\n                type: 'vehicle'\n              }\n            },\n            startGaragePlace: {\n              data: {\n                id: garage.get('id'),\n                type: 'place'\n              }\n            },\n            endGaragePlace: {\n              data: {\n                id: garage.get('id'),\n                type: 'place'\n              }\n            }\n          }\n        }\n      };\n      const store = this.get('store');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-Route');\n      const response = await dispatchRouteAdapter.postSupervisor(body);\n      store.pushPayload(response);\n      const currentRouteRS = store.peekRecord('dispatch-Route', response.data.id);\n      localStorage.setItem('currentRouteRSID', response.data.id);\n      this.set('currentRoute', currentRouteRS);\n    },\n\n    async apiGetPendingStops() {\n      const body = {};\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/route/${this.get('currentRoute.route.id')}`, {\n        body\n      });\n\n      if (res.data && res.data.attributes && res.data.attributes.stopPoints) {\n        return res.data.attributes.stopPoints.filter(stopPoint => {\n          return stopPoint.id.startsWith('DP') && stopPoint.status === 'pending';\n        });\n      }\n\n      return [];\n    },\n\n    async apiExecuteRouteEvent() {\n      let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        type: 'pullOut'\n      };\n      const time = (0, _moment.default)().toISOString();\n      const currentRoute = this.get('currentRoute');\n      if (Ember.isNone(currentRoute)) return true;\n      const body = {\n        data: {\n          type: 'routeExecEvent',\n          attributes: {\n            routeId: currentRoute.get('route.id'),\n            content: {\n              type: values.type,\n              actualTime: time\n            },\n            driver: {\n              // TODO: need to fetch current driver\n              id: this.driver.id,\n              badgeNr: this.driver.badgeNr\n            },\n            vehicle: {\n              id: this.vehicle.id,\n              callsign: this.vehicle.callsign,\n              location: {\n                coord: {\n                  lat: this.cord[0],\n                  lng: this.cord[1]\n                },\n                time\n              },\n              mov: {\n                speed: 50,\n                heading: 0\n              },\n              odo: 0\n            },\n            source: {\n              type: 'driverApp'\n            }\n          }\n        }\n      };\n\n      if (values.type === 'depart') {\n        if (values.stop) {\n          // preform stops for prevoius pending stop\n          body.data.attributes.content.stopId = values.stop.id;\n          body.data.attributes.content.eta = values.stop.eta;\n        } else {\n          body.data.attributes.content.stopId = currentRoute.get('deployId');\n          body.data.attributes.content.eta = currentRoute.get('eta');\n        }\n      }\n\n      const res = await this.makeRequest(`${_apiUrls.API.avlmService.host}/route-exec-event`, {\n        method: 'POST',\n        body\n      });\n      if (Ember.isNone(res)) return false;\n      return true;\n    },\n\n    async apiExecuteDriverEvent() {\n      let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n        type: 'signOn'\n      };\n      const time = (0, _moment.default)().toISOString();\n      const currentRoute = this.get('currentRoute');\n      const body = {\n        data: {\n          type: 'driverStateEvent',\n          attributes: {\n            driverId: this.driver.id,\n            routeId: currentRoute.get('route.id'),\n            driverScheduleId: currentRoute.get('dispatchSchedule.schedule.id'),\n            vehicleScheduleId: currentRoute.get('routeVehicleDrivers.firstObject.id'),\n            type: values.type,\n            badgeNr: this.driver.badgeNr,\n            time,\n            vehicle: {\n              id: this.vehicle.id,\n              callsign: this.vehicle.callsign,\n              location: {\n                coord: {\n                  lat: this.cord[0],\n                  lng: this.cord[1]\n                },\n                time\n              },\n              mov: {\n                speed: 50,\n                heading: 0\n              },\n              odo: 0,\n              provider: {\n                type: 'dedicated',\n                id: this.provider || 'special',\n                name: this.provider || 'special'\n              }\n            }\n          }\n        }\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.avlmService.host}/driver-state-event`, {\n        method: 'POST',\n        body\n      });\n      return res;\n    },\n\n    async apiETAGetPolyline() {\n      const currentRoute = this.get('currentRoute');\n      const routeId = currentRoute.get('route.id');\n      const body = {\n        include: 'polyline,guidance'\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/route/${routeId}`, {\n        body\n      });\n      if (!res || !res.data || !res.data.attributes || !res.data.attributes.stopPoints || res.data.attributes.stopPoints.length === 0) return null;\n      const route = res.data.attributes.stopPoints.find(stop => stop.status === 'pending');\n      const {\n        polyline,\n        guidance\n      } = route;\n      const result = {\n        polyline,\n        guidance\n      };\n      this.set('polyline', polyline);\n\n      if (guidance) {\n        const unpackedGuidance = unpackBuffer(guidance.data);\n        this.set('guidance', unpackedGuidance);\n        result.guidance = unpackedGuidance;\n      } //Added code to update latest perform stop ETA time.\n\n\n      const {\n        stopPoints\n      } = res.data.attributes;\n\n      if (stopPoints && stopPoints.length > 2) {\n        currentRoute.set('eta', stopPoints[stopPoints.length - 2].eta);\n      }\n\n      return result;\n    },\n\n    async apiUpdatedETAGet() {\n      const currentRoute = this.get('currentRoute');\n      const routeId = currentRoute.get('route.id');\n      const body = {\n        include: 'polyline,guidance'\n      };\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/navigation-info/${routeId}`, {\n        body\n      });\n      if (!res || !res.data) return null;\n      const {\n        stopPoints\n      } = res.data.attributes;\n\n      if (stopPoints && stopPoints.length > 1) {\n        currentRoute.set('eta', stopPoints[stopPoints.length - 2].eta);\n      }\n\n      return true;\n    },\n\n    async apiGetUpdatedPolyline(isExit) {\n      const currentRoute = this.get('currentRoute');\n      const routeId = currentRoute.get('route.id');\n      let body = {\n        include: 'polyline,guidance'\n      };\n      const previousObject = this.get('previousLocationObj');\n      const currentObject = this.get('currentLocationObj');\n      let heading;\n\n      if (previousObject && currentObject) {\n        heading = (0, _geolib.getHeading)({\n          lat: previousObject.previousLat,\n          lng: previousObject.previousLng\n        }, {\n          lat: currentObject.currentLat,\n          lng: currentObject.currentLng\n        });\n      }\n\n      if (currentObject) {\n        // Added this condition to pass the latest vehicle location to ETA server.\n        // Without sending previous object to avoid backward polyline issue.\n        body = {\n          'currHeading': heading || currentObject.currentHeading,\n          'currLat': currentObject.currentLat,\n          'currLng': currentObject.currentLng,\n          'currSpeed': Math.max(currentObject.currentSpeed, 5),\n          //single location need speed > 5\n          'currTimestamp': _moment.default.utc().format(),\n          'include': 'polyline,guidance'\n        };\n      }\n\n      const res = await this.makeRequest(`${_apiUrls.API.etaService.host}/navigation-info/${routeId}/updatedNavInfo`, {\n        body\n      });\n      if (!res || !res.data || !res.data.attributes || !res.data.attributes.current) return null;\n      const {\n        polyline,\n        guidance\n      } = res.data.attributes.current;\n      const result = {\n        polyline\n      };\n      if (!isExit) this.set('polyline', polyline);\n\n      if (guidance) {\n        const unpackedGuidance = unpackBuffer(guidance.data);\n        if (!isExit) this.set('guidance', unpackedGuidance);\n        result.guidance = unpackedGuidance;\n      } //Added code to update latest perform stop ETA time.\n\n\n      const {\n        stopPoints\n      } = res.data.attributes;\n\n      if (stopPoints && stopPoints.length > 2) {\n        currentRoute.set('eta', stopPoints[stopPoints.length - 2].eta);\n      }\n\n      return result;\n    },\n\n    async makeRequest(url, props) {\n      let params = '';\n\n      if (props.body) {\n        if ('method' in props && props.method !== 'GET') {\n          props.body = JSON.stringify(props.body);\n        } else {\n          params = Ember.$.param(props.body);\n          delete props.body;\n        }\n      }\n\n      try {\n        const res = await (0, _fetch.default)(`${url}?${params}`, Object.assign({\n          headers: {\n            Accept: 'application/json',\n            'Content-Type': 'application/json',\n            Authorization: `Bearer ${this.token}`\n          }\n        }, props));\n\n        if (res.status === 200 || res.status === 201) {\n          return res.text().then(data => data ? JSON.parse(data) : {});\n        }\n\n        if (res.status === 404) {\n          return res.text().then(error => error ? JSON.parse(error) : {});\n        } // any other status just return {}\n\n\n        return {};\n      } catch (err) {\n        return null;\n      }\n    }\n\n  });\n  let instance;\n  RoadSupervisorSpecialRouteApi.reopenClass({\n    getRoleName() {\n      return 'roadsup';\n    },\n\n    getConfigId() {\n      return 'config-UI_restrictions-roadsup/restrictions';\n    },\n\n    getSingleton() {\n      if (!instance) {\n        instance = RoadSupervisorSpecialRouteApi.create();\n      }\n\n      return instance;\n    }\n\n  });\n  var _default = RoadSupervisorSpecialRouteApi;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/rules/base-rule-context\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class BaseRuleContext {\n    constructor() {\n      this.outComeMap = [];\n    }\n    /**\n     *\n     * @param ruleName\n     * @param result {string}\n     */\n\n\n    recordRuleResult(ruleName, result) {\n      this.outComeMap.push({\n        ruleName,\n        result\n      });\n    }\n\n  }\n\n  _exports.default = BaseRuleContext;\n});","define(\"adept-iq/classes/rules/base-rule\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ITP_RESULT_TYPE_RULE = 'ItpResultTypeRule';\n\n  class BaseRule {\n    constructor() {\n      this.ruleChainMap = {};\n    }\n\n    execute(ruleContext) {\n      this.executePreAction(ruleContext).then(() => {\n        this.executeRule(ruleContext);\n      });\n    } // pre action  handler should return promise\n\n\n    executePreAction(ruleContext) {\n      if (this.preAction) {\n        return this.preAction(ruleContext);\n      }\n\n      return Promise.resolve();\n    }\n\n    executeRule(ruleContext) {\n      const outCome = this.doEvaluate(ruleContext);\n\n      if (outCome && outCome.then) {\n        return outCome.then(result => {\n          this.executeOutcome(result, ruleContext);\n        });\n      } // the result is string\n\n\n      this.executeOutcome(outCome, ruleContext);\n    }\n\n    executeOutcome(outCome, ruleContext) {\n      ruleContext.recordRuleResult(this.constructor.RULE_NAME, outCome);\n      const rules = ruleContext.outComeMap.filter(map => map.ruleName === this.constructor.RULE_NAME); // the ItpResultTypeRule result will be object of outcome of the nextRule\n\n      if (this.constructor.RULE_NAME === ITP_RESULT_TYPE_RULE) {\n        (0, _lodash.forEach)(outCome, value => {\n          this.executeRuleOrAction(ruleContext, value);\n        });\n        return;\n      } // the rule should execute only for once.\n      // so, if the rule is recorded for two times don't execute the same rule\n\n\n      if (rules.length === 1) {\n        this.executeRuleOrAction(ruleContext, outCome);\n      }\n    }\n    /**\n     * return promise | string\n     */\n\n\n    doEvaluate() {}\n    /**\n     *\n     * @param result {string}\n     * @param nextRule {BaseRule}\n     */\n\n\n    addOutComeRule(result, nextRule) {\n      this.ruleChainMap[result] = {\n        rule: nextRule\n      };\n    }\n    /**\n     *\n     * @param result {string}\n     * @param action {(context)=>{}}\n     */\n\n\n    addOutcomeAction(result, action) {\n      this.ruleChainMap[result] = {\n        action: action\n      };\n    }\n\n    addPreRuleAction(action) {\n      this.preAction = action;\n    }\n\n    executeRuleOrAction(ruleContext, outCome) {\n      if (this.ruleChainMap[outCome].rule) {\n        this.ruleChainMap[outCome].rule.execute(ruleContext);\n        return;\n      }\n\n      if (this.ruleChainMap[outCome].action) {\n        this.ruleChainMap[outCome].action(ruleContext);\n      }\n    }\n\n  }\n\n  _exports.default = BaseRule;\n});","define(\"adept-iq/classes/rules/eligibility-rules/all-conditions-pass-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"adept-iq/models/cs-config-category\", \"lodash\", \"moment\"], function (_exports, _baseRule, _ruleResultType, _csConfigCategory, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.AllConditionsPassRule = void 0;\n  /// EXTREME HEAT, EXTREME COLD, and INTER-BOROUGH eligibility conditions are evaluated at this step\n  const LIST_CONDITIONS_TO_CHECK = [_csConfigCategory.ELIGIBILITY_CONDITIONS.EXTREME_COLD, _csConfigCategory.ELIGIBILITY_CONDITIONS.EXTREME_HEAT];\n\n  class AllConditionsPassRule extends _baseRule.default {\n    constructor() {\n      super();\n      this.conditionPredicateMap = {\n        [_csConfigCategory.ELIGIBILITY_CONDITIONS.EXTREME_COLD]: this.checkExtremeColdCondition.bind(this),\n        [_csConfigCategory.ELIGIBILITY_CONDITIONS.EXTREME_HEAT]: this.checkExtremeHotCondition.bind(this)\n      };\n    }\n\n    async doEvaluate(ruleContext) {\n      const {\n        bookingService,\n        store,\n        systemConfigService\n      } = ruleContext;\n      let weatherData;\n\n      try {\n        weatherData = await bookingService.fetchWeatherForecastData();\n      } catch (error) {\n        ruleContext.errorInfo = {\n          message: 'Failed to fetch weather api',\n          error\n        };\n      }\n\n      const {\n        value: itpMinWalkDistConfig\n      } = store.peekRecord('cs-config-item', 'config-System_Configuration-ITP_Configurations/ITP_MinimumWalkingDistance');\n      const conditionConfigList = systemConfigService.findConfigByCategory(_csConfigCategory.CONFIG_ELIGIBILITY_CONDITIONS);\n      const selectedRiders = bookingService.get('selectedRiders');\n      const options = {\n        store,\n        bookingService,\n        weatherData,\n        itpMinWalkDistConfig,\n        conditionConfigList\n      }; // it stores the each rider's condition result\n\n      ruleContext.riderConditionsResultMap = this.evaluateConditionsForRiders(selectedRiders, options); // check all rider pass the all conditions\n\n      const allConditionsPass = selectedRiders.every(rider => {\n        const riderConditionMap = ruleContext.riderConditionsResultMap[rider.get('id')];\n        const distanceConditions = this.getRiderDistanceConditions(rider);\n        const hasDistanceCondition = distanceConditions.length > 0; // rider's doesnt have conditional eligibility , ignore and  pass the result\n\n        if (!riderConditionMap && !hasDistanceCondition) return true; // rider's doesnt have conditional eligibility , but has the distance condition,    fail the result\n\n        if (!riderConditionMap && hasDistanceCondition) return false;\n        return Object.values(riderConditionMap).every(value => value) && weatherData;\n      });\n      if (allConditionsPass) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n    /**\n     *\n     * @param selectedRiders\n     * @param options\n     */\n\n\n    evaluateConditionsForRiders(selectedRiders, options) {\n      const riderConditionsMap = {};\n      selectedRiders.forEach(rider => {\n        const allConditions = this.getRiderConditions(rider); //rider doesnt have conditions, we dont need to evaluate conditions\n\n        if (allConditions.length === 0) {\n          return;\n        }\n\n        allConditions.filter(condition => {\n          return LIST_CONDITIONS_TO_CHECK.includes(condition);\n        });\n        const conditionResultMap = this.evaluateAllConditions(rider, allConditions, options);\n        riderConditionsMap[rider.get('id')] = conditionResultMap;\n      });\n      return riderConditionsMap;\n    }\n\n    evaluateAllConditions(rider, allConditions, options) {\n      const conditionResultMap = {};\n      allConditions.forEach(condition => {\n        const result = true;\n        const configItem = this.getConditionConfig(condition, options.conditionConfigList);\n\n        if (!configItem) {\n          conditionResultMap[condition] = result;\n          return;\n        }\n\n        const conditionPredicate = this.conditionPredicateMap[condition];\n        conditionResultMap[condition] = conditionPredicate ? conditionPredicate(rider, configItem, options) : false;\n      });\n      return conditionResultMap;\n    }\n\n    getConditionConfig(condition, conditionConfigList) {\n      const configItem = conditionConfigList.find(config => {\n        const value = config.value;\n        const conditionName = value.name || value.Name;\n\n        if (conditionName) {\n          return conditionName.trim().toLowerCase() === condition.toLowerCase();\n        }\n\n        return false;\n      });\n      return configItem;\n    }\n\n    checkExtremeColdCondition(rider, configItem, _ref) {\n      let {\n        bookingService,\n        weatherData\n      } = _ref;\n\n      if (!weatherData) {\n        return 'Not Evaluated';\n      }\n\n      const configuredValue = this.getConfiguredValue(configItem);\n      const activeBooking = bookingService.get('activeBooking');\n      const {\n        periods\n      } = weatherData.properties;\n      const legs = activeBooking.get('legs');\n      const result = legs.every(leg => {\n        const travelTime = (0, _moment.default)(leg.get('requestTime'));\n        const matchedTemp = periods.find(period => {\n          return travelTime.isBetween((0, _moment.default)(period.startTime), (0, _moment.default)(period.endTime));\n        });\n        const temperature = matchedTemp && matchedTemp.temperature; // in farenheit\n\n        const tempInCelsius = this.convertToCelsius(temperature); // if current weather is less than configured temperature, cold condition  is passed\n\n        if (tempInCelsius < parseInt(configuredValue, 10)) {\n          return true;\n        }\n\n        return false;\n      });\n      return result;\n    }\n\n    checkExtremeHotCondition(rider, configItem, _ref2) {\n      let {\n        bookingService,\n        weatherData\n      } = _ref2;\n\n      if (!weatherData) {\n        return 'Not Evaluated';\n      }\n\n      const configuredValue = this.getConfiguredValue(configItem);\n      const activeBooking = bookingService.get('activeBooking');\n      const {\n        periods\n      } = weatherData.properties;\n      const legs = activeBooking.get('legs');\n      const result = legs.every(leg => {\n        const travelTime = (0, _moment.default)(leg.get('requestTime'));\n        const matchedTemp = periods.find(period => {\n          return travelTime.isBetween((0, _moment.default)(period.startTime), (0, _moment.default)(period.endTime));\n        });\n        const temperature = matchedTemp && matchedTemp.temperature;\n        const tempInCelsius = this.convertToCelsius(temperature);\n\n        if (tempInCelsius > parseInt(configuredValue, 10)) {\n          return true;\n        }\n\n        return false;\n      });\n      return result;\n    }\n\n    convertToCelsius(temperature) {\n      return (temperature - 32) * 5 / 9;\n    }\n\n    getConfiguredValue(configItem) {\n      const configuredValueObj = configItem.value;\n      const configuredValue = configuredValueObj['Configured value'] || configuredValueObj.configuredValue;\n      return parseInt(configuredValue, 10);\n    }\n\n    getRiderConditions(rider) {\n      const allConditions = (0, _lodash.flatten)(rider.get('eligibility.categories').map(category => category.conditions || []));\n      return allConditions;\n    }\n\n    getRiderDistanceConditions(rider) {\n      const allConditions = this.getRiderConditions(rider);\n      const distanceConditions = allConditions.filter(condition => condition.toUpperCase().includes('BLOCKS') || condition.toUpperCase().includes('STAIRS'));\n      return distanceConditions;\n    }\n\n  }\n\n  _exports.AllConditionsPassRule = AllConditionsPassRule;\n  AllConditionsPassRule.RULE_NAME = 'AllConditionsPassRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/assessment-trip-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.AssessmentTripRule = void 0;\n\n  class AssessmentTripRule extends _baseRule.default {\n    async doEvaluate() {\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n  }\n\n  _exports.AssessmentTripRule = AssessmentTripRule;\n  AssessmentTripRule.RULE_NAME = 'AssessmentTripRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/conditional-eligibility-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"adept-iq/models/cs-config-category\", \"lodash\"], function (_exports, _baseRule, _ruleResultType, _csConfigCategory, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ConditionalEligibilityRule = void 0;\n\n  class ConditionalEligibilityRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService,\n        systemConfigService\n      } = ruleContext;\n      const selectedRiders = bookingService.get('selectedRiders');\n      const conditionalEligibilityCategories = systemConfigService.findEligibilityCategories(_csConfigCategory.ELIGIBILITY_CATEGORY_TYPES.CONDITIONAL); //if  system  is not configured the conditional eligibility,  it return true;\n\n      if (conditionalEligibilityCategories.length === 0) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      } // filter only conditional eligibility riders\n\n\n      const conditionalRiders = selectedRiders.filter(rider => {\n        const allConditions = (0, _lodash.flatten)(rider.get('eligibility.categories').map(category => category.conditions || []));\n        return allConditions.length !== 0;\n      }); // check any one of rider is having the conditional eligibility\n\n      const containsConditionalEligibility = conditionalRiders.every(rider => {\n        return this.checkRiderConditionalEligibility(rider, conditionalEligibilityCategories);\n      });\n      if (containsConditionalEligibility) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    } // compare rider's category.type value with conditional eligibility configuration value  (value.name)\n    // category.type should equal to value.name\n\n\n    checkRiderConditionalEligibility(riderExternal, conditionalEligibilityCategories) {\n      const CONDITIONAL_CATEGORY_NAMES = conditionalEligibilityCategories.map(category => {\n        const categoryName = category.value.name || category.value.Name;\n        return categoryName.trim().toLowerCase();\n      });\n      const riderEligibilityCategories = riderExternal.get('eligibility.categories');\n      return riderEligibilityCategories.every(category => {\n        return CONDITIONAL_CATEGORY_NAMES.includes(category.type.toLowerCase());\n      });\n    }\n\n  }\n\n  _exports.ConditionalEligibilityRule = ConditionalEligibilityRule;\n  ConditionalEligibilityRule.RULE_NAME = 'ConditionalEligibilityRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/deny-eligibility-suspension-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"adept-iq/models/cs-config-category\"], function (_exports, _baseRule, _ruleResultType, _csConfigCategory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.DenyEligibilitySuspensionRule = void 0;\n\n  class DenyEligibilitySuspensionRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService,\n        systemConfigService\n      } = ruleContext;\n      const denyEligibilityCategories = systemConfigService.findEligibilityCategories(_csConfigCategory.ELIGIBILITY_CATEGORY_TYPES.DENY);\n\n      if (denyEligibilityCategories.length === 0) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      const selectedRiders = bookingService.get('selectedRiders');\n      const containsDenyEligibility = selectedRiders.some(rider => {\n        return this.checkDenyEligibility(rider, denyEligibilityCategories);\n      });\n      if (containsDenyEligibility) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    checkDenyEligibility(riderExternal, eligibilityCategories) {\n      const DENY_CATEGORY_NAMES = eligibilityCategories.map(category => {\n        const categoryName = category.value.name || category.value.Name;\n        return categoryName.trim().toLowerCase();\n      });\n      const riderEligibilityCategories = riderExternal.get('eligibility.categories');\n      return riderEligibilityCategories.every(category => {\n        return DENY_CATEGORY_NAMES.includes(category.type.toLowerCase());\n      });\n    }\n\n  }\n\n  _exports.DenyEligibilitySuspensionRule = DenyEligibilitySuspensionRule;\n  DenyEligibilitySuspensionRule.RULE_NAME = 'DenyEligibilitySuspensionRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/eligibility-rule-builder\", [\"exports\", \"adept-iq/classes/rules/eligibility-rules/full-eligibility-rule\", \"adept-iq/classes/rules/eligibility-rules/assessment-trip-rule\", \"adept-iq/classes/rules/eligibility-rules/user-override-conditions-rule\", \"adept-iq/classes/rules/eligibility-rules/taxi-allowed-rule\", \"adept-iq/classes/rules/eligibility-rules/rider-prefer-taxi-rule\", \"adept-iq/classes/rules/eligibility-rules/deny-eligibility-suspension-rule\", \"adept-iq/classes/rules/eligibility-rules/all-conditions-pass-rule\", \"adept-iq/classes/rules/eligibility-rules/rider-distance-condition-rule\", \"adept-iq/classes/rules/eligibility-rules/no-eligibility-rule\", \"adept-iq/classes/rules/eligibility-rules/group-booking-rule\", \"adept-iq/classes/rules/eligibility-rules/user-override-permissions-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-enabled-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-blackout-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-conditions-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-request-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-resulttype-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-include-feeder-rule\", \"adept-iq/classes/rules/eligibility-rules/conditional-eligibility-rule\", \"adept-iq/classes/rules/eligibility-rules/itp-user-override-permissions-rule\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _fullEligibilityRule, _assessmentTripRule, _userOverrideConditionsRule, _taxiAllowedRule, _riderPreferTaxiRule, _denyEligibilitySuspensionRule, _allConditionsPassRule, _riderDistanceConditionRule, _noEligibilityRule, _groupBookingRule, _userOverridePermissionsRule, _itpEnabledRule, _itpBlackoutRule, _itpConditionsRule, _itpRequestRule, _itpResulttypeRule, _itpIncludeFeederRule, _conditionalEligibilityRule, _itpUserOverridePermissionsRule, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class EligibilityRuleBuilder {\n    constructor() {}\n    /**\n     *\n     * @param noTripActionHandler\n     * @param itpRequestFailureHandler\n     * @param taxiRequestHandler\n     * @param paraTransitHandler\n     * @param overrideConditionPreActionHandler\n     * @param overridePermissionHandler\n     * @param itpRequestHandler\n     * @param errorHandler\n     * @returns\n     */\n\n\n    buildRuleGraph(noTripActionHandler, itpRequestFailureHandler, taxiRequestHandler, paraTransitHandler, overrideConditionPreActionHandler, overridePermissionHandler, itpRequestHandler, errorHandler) {\n      const fullEligibilityRule = new _fullEligibilityRule.FullEligibilityRule();\n      const assessmentTripRule = new _assessmentTripRule.AssessmentTripRule();\n      const conditionalEligibilityRule = new _conditionalEligibilityRule.ConditionalEligibilityRule();\n      const userOverrideConditionsRule = new _userOverrideConditionsRule.UserOverrideConditionsRule();\n      const taxiAllowedRule = new _taxiAllowedRule.TaxiAllowedRule();\n      const riderPreferTaxiRule = new _riderPreferTaxiRule.RiderPreferTaxiRule();\n      const denyEligibilitySuspensionRule = new _denyEligibilitySuspensionRule.DenyEligibilitySuspensionRule();\n      const allConditionsPassRule = new _allConditionsPassRule.AllConditionsPassRule();\n      const riderDistanceConditionRule = new _riderDistanceConditionRule.RiderDistanceConditionRule();\n      const noEligibilityRule = new _noEligibilityRule.NoEligibilityRule();\n      const groupBookingRule = new _groupBookingRule.GroupBookingRule();\n      const userOverridePermissionsRule = new _userOverridePermissionsRule.UserOverridePermissionsRule();\n      const itpEnabledRule = new _itpEnabledRule.ItpEnabledRule();\n      const itpBlackoutRule = new _itpBlackoutRule.ItpBlackoutRule();\n      const itpConditionsRule = new _itpConditionsRule.ItpConditionsRule();\n      const itpRequestRule = new _itpRequestRule.ItpRequestRule();\n      const itpResultTypeRule = new _itpResulttypeRule.ItpResultTypeRule();\n      const itpIncludeFeederRule = new _itpIncludeFeederRule.ItpIncludeFeederRule();\n      const itpUserOverridePermissionsRule = new _itpUserOverridePermissionsRule.ITPUserOverridePermissionsRule(); // fullEligibilityRule\n\n      this.configureRule(fullEligibilityRule, taxiAllowedRule, assessmentTripRule); // taxiAllowedRule\n\n      this.configureRule(taxiAllowedRule, riderPreferTaxiRule, paraTransitHandler); //assessmentTripRule\n\n      this.configureRule(assessmentTripRule, taxiAllowedRule, conditionalEligibilityRule); //riderPreferTaxiRule\n\n      this.configureRule(riderPreferTaxiRule, taxiRequestHandler, paraTransitHandler); //conditionalEligibilityRule\n\n      this.configureRule(conditionalEligibilityRule, allConditionsPassRule, denyEligibilitySuspensionRule); // denyEligibilitySuspensionRule\n\n      this.configureRule(denyEligibilitySuspensionRule, noTripActionHandler, noEligibilityRule); // noEligibilityRule\n\n      this.configureRule(noEligibilityRule, noTripActionHandler); //allConditionsPassRule\n\n      this.configureRuleWithErrorHandler(allConditionsPassRule, taxiAllowedRule, userOverridePermissionsRule, errorHandler); // userOverridePermissionsRule\n\n      this.configureRule(userOverridePermissionsRule, userOverrideConditionsRule, overridePermissionHandler); // userOverrideConditionsRule\n\n      this.configureRuleWithPreAction(userOverrideConditionsRule, riderDistanceConditionRule, noTripActionHandler, overrideConditionPreActionHandler); // riderDistanceConditionRule\n\n      this.configureRule(riderDistanceConditionRule, groupBookingRule, taxiAllowedRule); // groupBookingRule\n\n      this.configureRule(groupBookingRule, taxiAllowedRule, itpEnabledRule); // itpEnabledRule\n\n      this.configureRule(itpEnabledRule, itpBlackoutRule, taxiAllowedRule); // itpBlackoutRule\n\n      this.configureRule(itpBlackoutRule, taxiAllowedRule, itpConditionsRule); // itpConditionsRule\n\n      this.configureRule(itpConditionsRule, itpRequestRule, taxiAllowedRule); //itpRequestRule\n\n      this.configureRule(itpRequestRule, itpResultTypeRule, itpRequestFailureHandler); //itpResultTypeRule\n\n      this.configureItpResultRule(itpResultTypeRule, itpIncludeFeederRule, itpUserOverridePermissionsRule, taxiAllowedRule); //itpIncludeFeederRule\n\n      this.configureRule(itpIncludeFeederRule, itpUserOverridePermissionsRule, taxiAllowedRule); //itpUserOverridePermissionsRule\n\n      this.configureRule(itpUserOverridePermissionsRule, taxiAllowedRule, itpRequestHandler);\n      return fullEligibilityRule;\n    }\n\n    configureRule(rule, yesRule, noRule) {\n      this.addRuleOutCome(rule, yesRule, _ruleResultType.RESULT_TYPE_YES);\n      this.addRuleOutCome(rule, noRule, _ruleResultType.RESULT_TYPE_NO);\n    }\n    /**\n     * before the rule is executed, the preActionHandler will be executed\n     * @param rule\n     * @param yesRule\n     * @param noRule\n     * @param preActionHandler\n     */\n\n\n    configureRuleWithPreAction(rule, yesRule, noRule, preActionHandler) {\n      this.addRuleOutCome(rule, yesRule, _ruleResultType.RESULT_TYPE_YES);\n      this.addRuleOutCome(rule, noRule, _ruleResultType.RESULT_TYPE_NO);\n      rule.addPreRuleAction(preActionHandler);\n    }\n\n    configureRuleWithErrorHandler(rule, yesRule, noRule, errorHandler) {\n      this.addRuleOutCome(rule, yesRule, _ruleResultType.RESULT_TYPE_YES);\n      this.addRuleOutCome(rule, noRule, _ruleResultType.RESULT_TYPE_NO);\n      this.addRuleOutCome(rule, errorHandler, _ruleResultType.RESULT_TYPE_ERROR);\n    }\n\n    configureItpResultRule(rule, feederRule, fixedRule, noSolutionRule) {\n      this.addRuleOutCome(rule, feederRule, _ruleResultType.RESULT_TYPE_FEEDER);\n      this.addRuleOutCome(rule, fixedRule, _ruleResultType.RESULT_TYPE_FIXED_ROUTE);\n      this.addRuleOutCome(rule, noSolutionRule, _ruleResultType.RESULT_TYPE_NO);\n    }\n\n    addRuleOutCome(rule, ruleOrAction, type) {\n      if (!ruleOrAction) return;\n\n      if (this.isRule(ruleOrAction)) {\n        rule.addOutComeRule(type, ruleOrAction);\n      } else {\n        rule.addOutcomeAction(type, ruleOrAction);\n      }\n    }\n\n    isRule(rule) {\n      return rule instanceof _baseRule.default;\n    }\n    /**\n     * called from your service or component\n     * @param rootRule\n     * @param eligibilityRuleContext\n     */\n\n\n    execute(rootRule, eligibilityRuleContext) {\n      rootRule.execute(eligibilityRuleContext);\n    }\n\n  }\n\n  _exports.default = EligibilityRuleBuilder;\n});","define(\"adept-iq/classes/rules/eligibility-rules/eligibility-rule-context\", [\"exports\", \"adept-iq/classes/rules/base-rule-context\"], function (_exports, _baseRuleContext) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class EligibilityRuleContext extends _baseRuleContext.default {\n    // pass whatever model or services this needs\n    // Keep the individual rule instances  stateless\n    constructor(store, bookingService, tooltip, systemConfigService, permissionLayer) {\n      super();\n      this.store = store;\n      this.bookingService = bookingService;\n      this.tooltip = tooltip;\n      this.systemConfigService = systemConfigService;\n      this.permissionLayer = permissionLayer;\n      this.itpRequestResults = []; // each leg will have list of segments [{legIndex , result}, {legIndex , result}]\n\n      this.itpResultType = null;\n      this.errorInfo = null;\n      this.hasOverrideITP = null;\n    }\n\n  }\n\n  _exports.default = EligibilityRuleContext;\n});","define(\"adept-iq/classes/rules/eligibility-rules/full-eligibility-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"adept-iq/models/cs-config-category\"], function (_exports, _baseRule, _ruleResultType, _csConfigCategory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.FullEligibilityRule = void 0;\n\n  class FullEligibilityRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService,\n        systemConfigService\n      } = ruleContext;\n      const fullEligibilityCategories = systemConfigService.findEligibilityCategories(_csConfigCategory.ELIGIBILITY_CATEGORY_TYPES.FULL); // full eligibility not configured,  should pass the rule\n\n      if (fullEligibilityCategories.length === 0) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      const selectedRiders = bookingService.get('selectedRiders');\n      const containsFullEligibility = selectedRiders.every(rider => {\n        return this.checkRiderFullEligibility(rider, fullEligibilityCategories);\n      });\n      if (containsFullEligibility) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    checkRiderFullEligibility(riderExternal, eligibilityCategories) {\n      const FULL_CATEGORY_NAMES = eligibilityCategories.map(category => {\n        const categoryName = category.value.name || category.value.Name;\n        return categoryName.trim().toLowerCase();\n      });\n      const riderEligibilityCategories = riderExternal.get('eligibility.categories');\n      return riderEligibilityCategories.every(category => {\n        return FULL_CATEGORY_NAMES.includes(category.type.toLowerCase());\n      });\n    }\n\n  }\n\n  _exports.FullEligibilityRule = FullEligibilityRule;\n  FullEligibilityRule.RULE_NAME = 'FullEligibilityRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/group-booking-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.GroupBookingRule = void 0;\n\n  class GroupBookingRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService\n      } = ruleContext;\n      if (this.isGroupBooking(bookingService)) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    isGroupBooking(bookingService) {\n      const selectedRiders = bookingService.get('selectedRiders');\n      return selectedRiders.length > 1;\n    }\n\n  }\n\n  _exports.GroupBookingRule = GroupBookingRule;\n  GroupBookingRule.RULE_NAME = 'GroupBookingRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-blackout-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"moment\", \"lodash\"], function (_exports, _baseRule, _ruleResultType, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ItpBlackoutRule = void 0;\n  const FROM_DATE_PROPERTY_NAME = 'From Date(MM/DD/YYYY)';\n  const FROM_TIME_PROPERTY_NAME = 'From Time(HH:MM a)';\n  const TO_DATE_PROPERTY_NAME = 'To Date(MM/DD/YYYY)';\n  const TO_TIME_PROPERTY_NAME = 'To Time(HH:MM a)';\n  const DATE_TIME_FORMAT = 'MM/DD/YYYY hh:mm A';\n  const DATE_FORMAT = 'MM/DD/YY';\n  const TIME_FORMAT = 'hh:mm A';\n  const RECURRENCE_PROPERTY_NAME = 'Recurs Daily(Yes/No)';\n\n  class ItpBlackoutRule extends _baseRule.default {\n    constructor() {\n      super();\n    }\n\n    doEvaluate(ruleContext) {\n      const {\n        bookingService,\n        store\n      } = ruleContext;\n      const selectedRiders = bookingService.get('selectedRiders');\n      const itpBlockouts = store.peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-System_Configuration-ITP_Blockoutdate';\n      });\n      const normalizedItpBlockouts = itpBlockouts.map(config => {\n        const normalizedConfig = config.toJSON();\n        const normalizedValue = {};\n        (0, _lodash.forEach)(config.value, (value, key) => {\n          normalizedValue[key.trim().toLowerCase()] = value;\n        });\n        normalizedConfig.value = normalizedValue;\n        return normalizedConfig;\n      });\n      const containsBlockoutDate = selectedRiders.every(rider => {\n        return this.checkRiderBlockoutDate(rider, bookingService, normalizedItpBlockouts);\n      });\n      if (containsBlockoutDate) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    checkRiderBlockoutDate(riderExternal, bookingService, itpBlockouts) {\n      const activeBooking = bookingService.get('activeBooking');\n      const legs = activeBooking.get('legs');\n      return legs.every(leg => {\n        const travelTime = (0, _moment.default)(leg.get('requestTime')).toDate();\n        return itpBlockouts.some(_ref => {\n          let {\n            value\n          } = _ref;\n          const recurProperty = value[RECURRENCE_PROPERTY_NAME.toLowerCase()] || '';\n\n          if (recurProperty.toLowerCase() === 'yes') {\n            const fromDateValue = value[FROM_DATE_PROPERTY_NAME.toLowerCase()];\n            const fromTimeValue = value[FROM_TIME_PROPERTY_NAME.toLowerCase()];\n            const toDateValue = value[TO_DATE_PROPERTY_NAME.toLowerCase()];\n            const toTimeValue = value[TO_TIME_PROPERTY_NAME.toLowerCase()];\n            const travelRequestDate = fromDateValue.length <= 8 ? (0, _moment.default)(leg.get('requestTime')).format(DATE_FORMAT) : (0, _moment.default)(leg.get('requestTime')).format('MM/DD/YYYY');\n            const travelRequestTime = (0, _moment.default)(leg.get('requestTime')).format(TIME_FORMAT);\n            const isDateBetween = (0, _moment.default)(travelRequestDate, DATE_FORMAT).isBetween((0, _moment.default)(fromDateValue, DATE_FORMAT), (0, _moment.default)(toDateValue, DATE_FORMAT), undefined, '[]'); // eslint-disable-line\n\n            const isTimeBetween = (0, _moment.default)(travelRequestTime, TIME_FORMAT).isBetween((0, _moment.default)(fromTimeValue, TIME_FORMAT), (0, _moment.default)(toTimeValue, TIME_FORMAT), undefined, '[]'); // eslint-disable-line\n\n            return isDateBetween && isTimeBetween;\n          }\n\n          const fromDateValue = value[FROM_DATE_PROPERTY_NAME.toLowerCase()] + ' ' + value[FROM_TIME_PROPERTY_NAME.toLowerCase()];\n          const toDateValue = value[TO_DATE_PROPERTY_NAME.toLowerCase()] + ' ' + value[TO_TIME_PROPERTY_NAME.toLowerCase()];\n          const blockoutStartDate = (0, _moment.default)(fromDateValue, DATE_TIME_FORMAT).toDate();\n          const blockoutEndDate = (0, _moment.default)(toDateValue, DATE_TIME_FORMAT).toDate();\n          const before = blockoutStartDate <= travelTime;\n          const after = blockoutEndDate >= travelTime;\n          return before && after;\n        });\n      });\n    }\n\n  }\n\n  _exports.ItpBlackoutRule = ItpBlackoutRule;\n  ItpBlackoutRule.RULE_NAME = 'ItpBlackoutRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-conditions-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"adept-iq/models/cs-config-category\", \"lodash\", \"moment\"], function (_exports, _baseRule, _ruleResultType, _csConfigCategory, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ItpConditionsRule = void 0;\n\n  class ItpConditionsRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService,\n        store,\n        systemConfigService\n      } = ruleContext;\n      const selectedRiders = bookingService.get('selectedRiders');\n      const conditionConfigList = systemConfigService.findConfigByCategory(_csConfigCategory.CONFIG_ELIGIBILITY_CONDITIONS);\n      const {\n        value: itpWheelChairConfig\n      } = store.peekRecord('cs-config-item', 'config-System_Configuration-ITP_Configurations/ITP_Wheelchair');\n      const {\n        value: itpAgeConfig\n      } = store.peekRecord('cs-config-item', 'config-System_Configuration-ITP_Configurations/ITP_Age');\n      const {\n        value: itpMinWalkDistConfig\n      } = store.peekRecord('cs-config-item', 'config-System_Configuration-ITP_Configurations/ITP_MinimumWalkingDistance');\n      const itpConditionPass = selectedRiders.every(rider => {\n        const riderAgeConditionPass = this.isAgeConditionPass(rider, itpAgeConfig);\n        const wheelChairConditionPass = this.isWheelChairConditionPass(rider, bookingService, itpWheelChairConfig);\n        const minWalkConditionPass = this.isMinWalkDistancePass(rider, itpMinWalkDistConfig, conditionConfigList);\n        /* eslint-disable no-console */\n\n        console.log(`riderAgeConditionPass :  ${riderAgeConditionPass} , wheelChairConditionPass: ${wheelChairConditionPass}, distanceConditionPass : ${minWalkConditionPass}`);\n        return riderAgeConditionPass && wheelChairConditionPass && minWalkConditionPass;\n      });\n      if (itpConditionPass) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    isWheelChairConditionPass(rider, bookingService, itpWheelChairConfig) {\n      const isItpWheechairAllowed = itpWheelChairConfig.value;\n\n      if (isItpWheechairAllowed) {\n        return true;\n      }\n\n      const activeBooking = bookingService.get('activeBooking');\n      const legRecords = activeBooking.get('legs');\n      const legTravelNeedRecords = legRecords.firstObject.legTravelNeeds;\n      const containsRiderWheelChairTravelNeeds = !!legTravelNeedRecords.find(legTravelNeedRecord => {\n        const travelneedtype = legTravelNeedRecord.get('travelNeedType.id').toLowerCase();\n        const count = legTravelNeedRecord.get('count');\n        return travelneedtype === 'wheelchair' && count > 0;\n      });\n\n      if (!isItpWheechairAllowed && !containsRiderWheelChairTravelNeeds) {\n        return true;\n      }\n\n      return false;\n    }\n\n    isAgeConditionPass(rider, itpAgeConfig) {\n      const dateOfBirth = rider.get('dateOfBirth');\n      const riderAge = (0, _moment.default)().diff(dateOfBirth, 'years');\n      const itpAgeConfigValue = itpAgeConfig.value;\n      if (riderAge < itpAgeConfigValue) return true;\n      return false;\n    }\n    /**\n     *  In order to be considered for an ITP solution trip, a client must be assigned an eligibility condition\n     *  that has its ‘Blocks’ parameter set to a value greater than or equal to the ITP_MinimumWalkingDistance setting in the System Config.\n     * @param rider\n     * @param itpMinWalkDistConfig\n     * @param conditionConfigList\n     * @returns {*}\n     */\n\n\n    isMinWalkDistancePass(rider, itpMinWalkDistConfig, conditionConfigList) {\n      const itpMinWalkDistConfigValue = parseInt(itpMinWalkDistConfig.value, 10);\n      const allConditions = (0, _lodash.flatten)(rider.get('eligibility.categories').map(category => category.conditions || []));\n      const distanceConditions = allConditions.filter(condition => condition.toUpperCase().includes('BLOCKS') || condition.toUpperCase().includes('STAIRS'));\n      return distanceConditions.every(riderCondition => {\n        const configItem = this.getConditionConfig(riderCondition, conditionConfigList);\n        const configuredValue = this.getConfiguredValue(configItem); //its ‘Blocks’ parameter set to a value greater than or equal to the ITP_MinimumWalkingDistance\n\n        return configuredValue >= itpMinWalkDistConfigValue;\n      });\n    }\n\n    getConditionConfig(condition, conditionConfigList) {\n      const configItem = conditionConfigList.find(config => {\n        const value = config.value;\n        const conditionName = value.name || value.Name || '';\n        return conditionName.trim().toLowerCase() === condition.toLowerCase();\n      });\n      return configItem;\n    }\n\n    getConfiguredValue(configItem) {\n      const configuredValueObj = configItem.value;\n      const configuredValue = configuredValueObj['Configured value'] || configuredValueObj.configuredValue;\n      return parseInt(configuredValue, 10);\n    }\n\n  }\n\n  _exports.ItpConditionsRule = ItpConditionsRule;\n  ItpConditionsRule.RULE_NAME = 'ItpConditionsRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-enabled-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ItpEnabledRule = void 0;\n  const ITP_CONFIG_ID = 'config-System_Configuration-ITP_Configurations/ITP_Enabled';\n\n  class ItpEnabledRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      if (this.isItpEnabled(ruleContext)) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    isItpEnabled(ruleContext) {\n      const {\n        store\n      } = ruleContext;\n      const {\n        value: itpEnableConfig\n      } = store.peekRecord('cs-config-item', ITP_CONFIG_ID);\n      return itpEnableConfig.value;\n    }\n\n  }\n\n  _exports.ItpEnabledRule = ItpEnabledRule;\n  ItpEnabledRule.RULE_NAME = 'ItpEnabledRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-include-feeder-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ItpIncludeFeederRule = void 0;\n\n  class ItpIncludeFeederRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        itpRequestResults\n      } = ruleContext;\n      const containsFeeder = this.hasFeederIncluded(itpRequestResults);\n\n      if (containsFeeder) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    hasFeederIncluded() {\n      return true;\n    }\n\n  }\n\n  _exports.ItpIncludeFeederRule = ItpIncludeFeederRule;\n  ItpIncludeFeederRule.RULE_NAME = 'ItpIncludeFeederRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-request-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ItpRequestRule = void 0;\n\n  class ItpRequestRule extends _baseRule.default {\n    async doEvaluate(ruleContext) {\n      const {\n        bookingService\n      } = ruleContext;\n      const legs = bookingService.get('activeBooking.legs');\n      const allPromises = legs.map(async (leg, legIndex) => {\n        return await bookingService.postScheduleDemandTripForLeg(leg, legIndex);\n      });\n\n      try {\n        ruleContext.itpRequestResults = await Promise.all(allPromises);\n        return _ruleResultType.RESULT_TYPE_YES;\n      } catch (error) {\n        console.error(error); //eslint-disable-line no-console\n\n        return _ruleResultType.RESULT_TYPE_NO;\n      }\n    }\n\n  }\n\n  _exports.ItpRequestRule = ItpRequestRule;\n  ItpRequestRule.RULE_NAME = 'ItpRequestRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-resulttype-rule\", [\"exports\", \"lodash\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"adept-iq/classes/rules/itinerary-type\"], function (_exports, _lodash, _baseRule, _ruleResultType, _itineraryType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ItpResultTypeRule = void 0;\n\n  class ItpResultTypeRule extends _baseRule.default {\n    async doEvaluate(ruleContext) {\n      const {\n        itpRequestResults\n      } = ruleContext;\n      const ruleResultMapper = {}; // Reg- NYAAR-17442 - To Support ITP for Multi Legs\n\n      ruleContext.itpResultType = {};\n      (0, _lodash.forEach)(itpRequestResults, (value, key) => {\n        const resultType = this.getResultType(value);\n        ruleContext.itpResultType[key] = resultType;\n        let ruleResult;\n\n        switch (resultType) {\n          case _itineraryType.NO_SOLUTION:\n            ruleResult = _ruleResultType.RESULT_TYPE_NO;\n            break;\n\n          case _itineraryType.FEEDER:\n            ruleResult = _ruleResultType.RESULT_TYPE_FEEDER;\n            break;\n\n          case _itineraryType.FIXED_ROUTE:\n            ruleResult = _ruleResultType.RESULT_TYPE_FIXED_ROUTE;\n            break;\n\n          default:\n            ruleResult = _ruleResultType.RESULT_TYPE_NO;\n        }\n\n        ruleResultMapper[key] = ruleResult;\n      });\n      return ruleResultMapper;\n    }\n\n    getResultType(itpRequestResult) {\n      const isFeederType = itpRequestResult.result.type === _itineraryType.FEEDER;\n      if (isFeederType) return _itineraryType.FEEDER;\n      const isFixedRouteType = itpRequestResult.result.type === _itineraryType.FIXED_ROUTE;\n      if (isFixedRouteType) return _itineraryType.FIXED_ROUTE;\n      return _itineraryType.NO_SOLUTION;\n    }\n\n  }\n\n  _exports.ItpResultTypeRule = ItpResultTypeRule;\n  ItpResultTypeRule.RULE_NAME = 'ItpResultTypeRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/itp-user-override-permissions-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/config/mapped-permIds\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _mappedPermIds, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ITPUserOverridePermissionsRule = void 0;\n\n  class ITPUserOverridePermissionsRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        permissionLayer\n      } = ruleContext;\n      const permGranted = permissionLayer.permInUserHash(_mappedPermIds.default.overrideITP, null);\n      ruleContext.hasOverrideITP = !!permGranted;\n\n      if (permGranted) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n  }\n\n  _exports.ITPUserOverridePermissionsRule = ITPUserOverridePermissionsRule;\n  ITPUserOverridePermissionsRule.RULE_NAME = 'ITPUserOverridePermissionsRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/no-eligibility-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.NoEligibilityRule = void 0;\n\n  class NoEligibilityRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService\n      } = ruleContext;\n      const selectedRiders = bookingService.get('selectedRiders');\n      const containsNoEligibility = selectedRiders.every(this.checkNoEligibility);\n      if (containsNoEligibility) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    checkNoEligibility(riderExternal) {\n      const eligibilityCategories = riderExternal.get('eligibility.categories');\n      return !eligibilityCategories || eligibilityCategories.length === 0;\n    }\n\n  }\n\n  _exports.NoEligibilityRule = NoEligibilityRule;\n  NoEligibilityRule.RULE_NAME = 'NoEligibilityRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/rider-distance-condition-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\", \"lodash\"], function (_exports, _baseRule, _ruleResultType, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.RiderDistanceConditionRule = void 0;\n\n  //check rider has distance conditions\n  class RiderDistanceConditionRule extends _baseRule.default {\n    constructor() {\n      super();\n    }\n\n    doEvaluate(ruleContext) {\n      const {\n        bookingService\n      } = ruleContext;\n      const selectedRiders = bookingService.get('selectedRiders');\n      const filteredRiders = selectedRiders.filter(rider => {\n        const allConditions = (0, _lodash.flatten)(rider.get('eligibility.categories').map(category => category.conditions || []));\n        return allConditions.length !== 0;\n      });\n      const riderHasDistanceConditions = filteredRiders.every(rider => {\n        const allConditions = (0, _lodash.flatten)(rider.get('eligibility.categories').map(category => category.conditions || []));\n        const distanceConditions = allConditions.filter(condition => condition.toUpperCase().includes('BLOCKS') || condition.toUpperCase().includes('STAIRS'));\n        return distanceConditions.length > 0;\n      });\n      if (riderHasDistanceConditions) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n  }\n\n  _exports.RiderDistanceConditionRule = RiderDistanceConditionRule;\n  RiderDistanceConditionRule.RULE_NAME = 'RiderDistanceConditionRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/rider-prefer-taxi-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.RiderPreferTaxiRule = void 0;\n\n  class RiderPreferTaxiRule extends _baseRule.default {\n    doEvaluate() {\n      return _ruleResultType.RESULT_TYPE_YES;\n    }\n\n  }\n\n  _exports.RiderPreferTaxiRule = RiderPreferTaxiRule;\n  RiderPreferTaxiRule.RULE_NAME = 'RiderPreferTaxiRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/taxi-allowed-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.TaxiAllowedRule = void 0;\n  const TAXI_SERVICE_MODE = 'taxi';\n\n  class TaxiAllowedRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        bookingService\n      } = ruleContext;\n      const selectedRiders = bookingService.get('selectedRiders');\n      const taxiAllowed = selectedRiders.every(this.checkTaxiAllowed);\n      if (taxiAllowed) return _ruleResultType.RESULT_TYPE_YES;\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n    checkTaxiAllowed(riderExternal) {\n      const allowedServiceModes = riderExternal.get('eligibility.allowedServiceModes');\n      return allowedServiceModes.includes(TAXI_SERVICE_MODE);\n    }\n\n  }\n\n  _exports.TaxiAllowedRule = TaxiAllowedRule;\n  TaxiAllowedRule.RULE_NAME = 'TaxiAllowedRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/user-override-conditions-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.UserOverrideConditionsRule = void 0;\n\n  class UserOverrideConditionsRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      // overrideCondition flag is set in overrideConditionPreActionHandler (new-booking-form)\n      if (ruleContext.overrideCondition) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n  }\n\n  _exports.UserOverrideConditionsRule = UserOverrideConditionsRule;\n  UserOverrideConditionsRule.RULE_NAME = 'UserOverrideConditionsRule';\n});","define(\"adept-iq/classes/rules/eligibility-rules/user-override-permissions-rule\", [\"exports\", \"adept-iq/classes/rules/base-rule\", \"adept-iq/config/mapped-permIds\", \"adept-iq/classes/rules/rule-result-type\"], function (_exports, _baseRule, _mappedPermIds, _ruleResultType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.UserOverridePermissionsRule = void 0;\n\n  class UserOverridePermissionsRule extends _baseRule.default {\n    doEvaluate(ruleContext) {\n      const {\n        permissionLayer\n      } = ruleContext;\n      const permGranted = permissionLayer.permInUserHash(_mappedPermIds.default.overrideEligibilityConditions, null);\n\n      if (permGranted) {\n        return _ruleResultType.RESULT_TYPE_YES;\n      }\n\n      return _ruleResultType.RESULT_TYPE_NO;\n    }\n\n  }\n\n  _exports.UserOverridePermissionsRule = UserOverridePermissionsRule;\n  UserOverridePermissionsRule.RULE_NAME = 'UserOverridePermissionsRule';\n});","define(\"adept-iq/classes/rules/itinerary-type\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.NO_SOLUTION = _exports.FIXED_ROUTE = _exports.FEEDER = void 0;\n  const NO_SOLUTION = 0;\n  _exports.NO_SOLUTION = NO_SOLUTION;\n  const FIXED_ROUTE = 1;\n  _exports.FIXED_ROUTE = FIXED_ROUTE;\n  const FEEDER = 2;\n  _exports.FEEDER = FEEDER;\n});","define(\"adept-iq/classes/rules/rule-result-type\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.RESULT_TYPE_YES = _exports.RESULT_TYPE_NO = _exports.RESULT_TYPE_FIXED_ROUTE = _exports.RESULT_TYPE_FEEDER = _exports.RESULT_TYPE_ERROR = void 0;\n  const RESULT_TYPE_YES = 'yes';\n  _exports.RESULT_TYPE_YES = RESULT_TYPE_YES;\n  const RESULT_TYPE_NO = 'no';\n  _exports.RESULT_TYPE_NO = RESULT_TYPE_NO;\n  const RESULT_TYPE_ERROR = 'error';\n  _exports.RESULT_TYPE_ERROR = RESULT_TYPE_ERROR;\n  const RESULT_TYPE_FEEDER = 'feeder';\n  _exports.RESULT_TYPE_FEEDER = RESULT_TYPE_FEEDER;\n  const RESULT_TYPE_FIXED_ROUTE = 'fixedroute';\n  _exports.RESULT_TYPE_FIXED_ROUTE = RESULT_TYPE_FIXED_ROUTE;\n});","define(\"adept-iq/classes/rules/trip-type\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.SUBSCRIPTION_TRIP = _exports.MANUAL_TRIP = _exports.ITP_TRIP = _exports.DEMAND_TRIP = void 0;\n  const SUBSCRIPTION_TRIP = 0;\n  _exports.SUBSCRIPTION_TRIP = SUBSCRIPTION_TRIP;\n  const DEMAND_TRIP = 1;\n  _exports.DEMAND_TRIP = DEMAND_TRIP;\n  const MANUAL_TRIP = 2;\n  _exports.MANUAL_TRIP = MANUAL_TRIP;\n  const ITP_TRIP = 3;\n  _exports.ITP_TRIP = ITP_TRIP;\n});","define(\"adept-iq/classes/shapes/base\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend({\n    id: null,\n    record: null,\n    lat: null,\n    lng: null,\n    opacity: 1.0,\n    // these will usually be over-ridden by layer\n    // see `app/pods/components/iq-widgets/map-widget/config/marker.js` for styles\n    type: null,\n    style: null,\n    label: null,\n    isActive: false,\n    isTraversal: false,\n    radius: false,\n    // these will be applied _after_ style defaults\n    options: null,\n    status: null,\n    parentLabel: null,\n    noOfPoints: null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/shapes/zone\", [\"exports\", \"adept-iq/classes/shapes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    style: 'zone',\n    label: 'Zones',\n    parentLabel: 'Zones',\n    isActive: true,\n    isTraversal: false,\n    zone: Ember.computed.alias('record'),\n    lat: Ember.computed.alias('zone.lat'),\n    lng: Ember.computed.alias('zone.lng'),\n    radius: Ember.computed.alias('zone.radius'),\n    options: Ember.computed.alias('zone.options'),\n    points: Ember.computed.alias('zone.polypoints'),\n    caption: Ember.computed.alias('zone.name'),\n    status: Ember.computed.alias('zone.status'),\n    noOfPoints: Ember.computed.alias('zone.noOfPoints')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/socket-stream\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TIME_FILTERING_ENABLED = false;\n  const SOCKET_BASE_URL = _apiUrls.API.streamingService.host; // closure codes\n\n  const SOCKET_CLEAN_CLOSURE_CODE = 1000;\n  const SOCKET_BAD_JWT = 4001;\n  const SOCKET_BAD_PREFIX = 4002;\n  const SOCKET_DUPLICATE_CONSUMER = 4003; // reconnection defaults\n\n  const DEFAULT_RECONNECT_SLEEP_TIME = 5000;\n  const DEFAULT_MAX_RECONNECT_COUNT = Infinity;\n  const START_PHASE = 'START';\n\n  const generateUUID = () => '_' + Math.random().toString(36).substr(2, 9);\n\n  var _default = Ember.Object.extend(Ember.Evented, {\n    clientId: null,\n    token: null,\n    // legacy support\n    topic: null,\n    // filter params\n    startDate: null,\n    endDate: null,\n    // stream state\n    phase: START_PHASE,\n    offset: 0,\n    socketBaseUrl: SOCKET_BASE_URL,\n    socketId: null,\n    reconnectCount: 0,\n    errorCode: null,\n    closeCode: null,\n    reconnectSleepTime: DEFAULT_RECONNECT_SLEEP_TIME,\n    maxReconnectCount: DEFAULT_MAX_RECONNECT_COUNT,\n    // this is logical state; it reflects whether or not the socket service\n    // believes this connection is \"on\" or \"off\", not the actual socket state\n    isConnected: false,\n    // this reflects the _actual_ state of the socket; it may connect and\n    // disconnect throughout the lifetime of a logical streaming connection\n    socketState: 'init',\n    // init, pending, open, error, closed\n    isSocketOpen: Ember.computed.equal('socketState', 'open'),\n    isSocketClosed: Ember.computed.equal('socketState', 'closed'),\n    isSocketError: Ember.computed.equal('socketState', 'error'),\n    _worker: null,\n    _openTimeout: null,\n    _reconnectTimeout: null,\n\n    destroy() {\n      if (this.get('isConnected')) {\n        this.disconnect();\n      }\n\n      if (this._reconnectTimeout) {\n        Ember.run.cancel(this._reconnectTimeout);\n      } // this will tear down listener\n\n\n      this.set('worker', null);\n\n      this._super(...arguments);\n    },\n\n    // adds and removes listeners to worker; this is called during init when a\n    // worker property is passed to `create()`\n    worker: Ember.computed({\n      get() {\n        return this._worker;\n      },\n\n      set(key, value) {\n        if (this._worker) {\n          this._worker.removeEventListener('message', this.__onWorkerMessage);\n\n          this.__onWorkerMessage = null;\n        }\n\n        this._worker = value;\n\n        if (this._worker) {\n          this.__onWorkerMessage = e => {\n            Ember.run.schedule('afterRender', this, '_onWorkerMessage', e.data);\n          };\n\n          this._worker.addEventListener('message', this.__onWorkerMessage);\n        }\n\n        return value;\n      }\n\n    }),\n\n    connect(startDate, endDate, token) {\n      let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      let reconnectCount = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n      const clientId = options.clientId || generateUUID();\n      const offset = options.offset || 0;\n      const phase = options.phase || START_PHASE; // needs to be unique _every_ time we connect\n\n      const socketId = new Date().getTime().toString();\n      this.setProperties({\n        clientId,\n        // auth\n        token,\n        // filter params\n        startDate,\n        endDate,\n        // stream state\n        offset,\n        phase,\n        // local state\n        isConnected: true,\n        socketState: 'pending',\n        reconnectCount,\n        socketId: socketId\n      });\n      this.get('worker').postMessage({\n        action: 'connect',\n        socketId,\n        token,\n        url: this._generateURL(),\n        startDate,\n        endDate\n      });\n    },\n\n    sendGlobalFilter(startDate, endDate, selectedProviders, startDateUTC, endDateUTC, scheduleId) {\n      this.get('worker').postMessage({\n        action: 'sendGlobalFilter',\n        socketId: this.get('socketId'),\n        startDate,\n        endDate,\n        selectedProviders,\n        startDateUTC,\n        endDateUTC,\n        scheduleId\n      });\n    },\n\n    sendWidgetFilter(widgetInstanceId, modelName, filter, offset, limit, sort) {\n      this.get('worker').postMessage({\n        action: 'sendWidgetFilter',\n        socketId: this.get('socketId'),\n        widgetInstanceId,\n        modelName,\n        filter,\n        offset,\n        limit,\n        sort\n      });\n    },\n\n    sendFilter(startDate, endDate) {\n      this.get('worker').postMessage({\n        action: 'sendFilter',\n        socketId: this.get('socketId'),\n        startDate,\n        endDate\n      });\n    },\n\n    disconnect() {\n      this.set('isConnected', false);\n      this.get('worker').postMessage({\n        action: 'disconnect',\n        socketId: this.get('socketId')\n      });\n    },\n\n    // re-uses current config; probably only for internal use\n    _reconnect() {\n      let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const startDate = options.startDate || this.get('startDate');\n      const endDate = options.endDate || this.get('endDate');\n      const clientId = options.clientId || this.get('clientId');\n      const token = options.token || this.get('token');\n      const offset = options.offset || this.get('offset');\n      const phase = options.phase || this.get('phase');\n      this.connect(startDate, endDate, token, {\n        offset,\n        phase,\n        clientId\n      }, this.get('reconnectCount') + 1);\n    },\n\n    _onWorkerMessage(message) {\n      if (message.socketId !== this.get('socketId')) {\n        // this is just our old socket closing out; ignore it\n        if (message.action === 'close') return; // still receiving messages from old socket; kill it\n\n        return this.get('worker').postMessage({\n          action: 'disconnect',\n          socketId: message.socketId\n        });\n      }\n\n      switch (message.action) {\n        case 'open':\n          return this._onSocketOpenMessage(message);\n\n        case 'error':\n          return this._onSocketErrorMessage(message);\n\n        case 'data':\n          return this._onSocketDataMessage(message);\n\n        case 'close':\n          return this._onSocketCloseMessage(message);\n\n        default:\n          break;\n      }\n    },\n\n    _onSocketOpenMessage() {\n      this.set('socketState', 'open');\n\n      this._log('socket connection open');\n\n      this.set('closeCode', null);\n      this.set('errorCode', null);\n    },\n\n    _onSocketErrorMessage(message) {\n      this._warn('socket connection error', message.code); // failed to make connection, e.g. remote host not found\n\n\n      this.set('socketState', 'error');\n      this.set('errorCode', message.code);\n\n      this._attemptReconnect();\n    },\n\n    _onSocketDataMessage(message) {\n      // once we see data, we can consider reconnection successful\n      this.set('reconnectCount', 0);\n      this.trigger('data', this, message.payloads);\n    },\n\n    _onSocketCloseMessage(message) {\n      const {\n        code\n      } = message;\n      this.set('socketState', 'closed');\n      this.set('closeCode', code);\n\n      switch (code) {\n        case SOCKET_BAD_JWT:\n          return this._onSocketCloseUnauthorized(message);\n\n        case SOCKET_DUPLICATE_CONSUMER:\n        case SOCKET_BAD_PREFIX:\n        case SOCKET_CLEAN_CLOSURE_CODE:\n        default:\n          this._warn('socket connection closed', code);\n\n          break;\n      } // already disconnecting; nothing more to do\n\n\n      if (!this.get('isConnected')) return;\n\n      this._attemptReconnect();\n    },\n\n    _onSocketCloseUnauthorized() {\n      this._warn('socket connection unauthorized');\n\n      this.set('isConnected', false);\n      this.trigger('unauthorized', this);\n    },\n\n    _attemptReconnect() {\n      if (this.get('reconnectCount') === this.get('maxReconnectCount')) {\n        this._warn('socket connection failed; max reconnects reached');\n\n        this.set('isConnected', false);\n        return;\n      } // wait a little bit, and if still warnically_ connected, try to re-\n      // establish web socket connection\n\n\n      if (!this._reconnectTimeout) {\n        this._reconnectTimeout = Ember.run.later(() => {\n          if (this.get('isConnected')) {\n            const count = this.get('reconnectCount');\n\n            this._log(`socket re-connection attempt #${count + 1}...`);\n\n            this._reconnect();\n          }\n\n          this._reconnectTimeout = null;\n        }, this.get('reconnectSleepTime'));\n      }\n    },\n\n    _generateURL() {\n      const clientId = this.get('clientId');\n      const topic = this.get('topic');\n      const startDate = this.get('startDate');\n      const endDate = this.get('endDate');\n      const queryTerms = [`clientId=${clientId}`]; // `topic` is not used in new ESS\n\n      if (topic && topic !== 'all') {\n        queryTerms.push(`topic=${topic}`);\n      } // filtering will be updated later. currently disabled until we get the new specs\n\n\n      if (TIME_FILTERING_ENABLED) {\n        if (topic === 'tripWidget' || topic === 'avlmTripWidget') {\n          const filterString = [`requestTime=ge=${startDate.toISOString()}`, `requestTime=le=${endDate.toISOString()}`].join('%26');\n          queryTerms.push(`filter=${filterString}`);\n        }\n\n        if (topic === 'routeWidget' || topic === 'avlmRouteWidget') {\n          const filterString = [`plannedStartTime=lt=${endDate.toISOString()}`, `plannedEndTime=gt=${startDate.toISOString()}`].join('%26');\n          queryTerms.push(`filter=${filterString}`);\n        }\n      }\n\n      const baseUrl = this.get('socketBaseUrl');\n      const queryString = queryTerms.join('&');\n      return `${baseUrl}/?${queryString}`;\n    },\n\n    _log() {\n      const clientId = this.get('clientId');\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      console.info(`socket[${clientId}]:`, ...args); // eslint-disable-line no-console\n    },\n\n    _warn() {\n      const clientId = this.get('clientId');\n\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      console.warn(`socket[${clientId}]:`, ...args); // eslint-disable-line no-console\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/tree-nodes/base\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Object.extend({\n    // config\n    label: null,\n    type: null,\n    depth: 0,\n    parent: null,\n    children: null,\n    radioButton: null,\n    searchText: null,\n    isSearchEnabled: false,\n    // this node specifically matches search query\n    isSearchMatch: false,\n    isTreeModified: Ember.computed('tree.@each.isModified', function () {\n      return this.get('tree').any(node => node.get('isModified'));\n    }),\n    isTreeOutdated: Ember.computed('tree.@each.isOutdated', function () {\n      return this.get('tree').any(node => node.get('isOutdated'));\n    }),\n    isTreeDirty: Ember.computed.or('isTreeModified', 'isTreeOutdated'),\n    tree: Ember.computed('children.@each.tree', function () {\n      const nodes = [this];\n      const children = this.get('children');\n\n      if (Ember.isEmpty(children)) {\n        return nodes;\n      }\n\n      children.sortBy('label').forEach(child => {\n        const tree = child.get('tree');\n        nodes.push(...tree);\n      });\n      return nodes;\n    }),\n    visibleTree: Ember.computed('isRemoved', 'isExpanded', 'children.@each.visibleTree', function () {\n      if (this.get('isRemoved')) return [];\n      if (!this.get('isExpanded')) return [this];\n      const children = this.get('children');\n      if (Ember.isEmpty(children)) return [this];\n      const visibleTree = children.sortBy('label').reduce((arr, child) => {\n        const tree = child.get('visibleTree');\n        arr.push(...tree);\n        return arr;\n      }, [this]);\n      return visibleTree;\n    }),\n    visibleSearchTree: Ember.computed('isRemoved', 'isExpanded', 'isSearchMatch', 'isUpstreamSearchMatch', 'isDownstreamSearchMatch', 'children.@each.visibleSearchTree', function () {\n      if (!this.get('isSearchMatch') && !this.get('isUpstreamSearchMatch') && !this.get('isDownstreamSearchMatch')) {\n        return [];\n      }\n\n      if (this.get('isRemoved')) return [];\n      if (!this.get('isExpanded')) return [this];\n      const children = this.get('children');\n      if (Ember.isEmpty(children)) return [this];\n      return children.sortBy('label').reduce((arr, child) => {\n        const tree = child.get('visibleSearchTree');\n        arr.push(...tree);\n        return arr;\n      }, [this]);\n    }),\n    visibleChildren: Ember.computed('children.@each.isRemoved', function () {\n      const children = this.get('children');\n\n      if (Ember.isEmpty(children)) {\n        return [];\n      }\n\n      return children.rejectBy('isRemoved');\n    }),\n    // this node is the ancestor of a matched node\n    isUpstreamSearchMatch: Ember.computed('children.@each.{isSearchMatch,isUpstreamSearchMatch}', function () {\n      const children = this.get('children');\n      if (Ember.isEmpty(children)) return false;\n      return children.any(child => {\n        return child.get('isSearchMatch') || child.get('isUpstreamSearchMatch');\n      });\n    }),\n    // this node is the descendant of a matched node\n    isDownstreamSearchMatch: Ember.computed('parent.{isSearchMatch,isDownstreamSearchMatch}', function () {\n      const parent = this.get('parent');\n      if (Ember.isNone(parent)) return false;\n      return parent.get('isSearchMatch') || parent.get('isDownstreamSearchMatch');\n    }),\n\n    bfs(callback) {\n      callback(this);\n      const children = this.get('children');\n      if (Ember.isEmpty(children)) return;\n      children.forEach(child => {\n        child.bfs(...arguments);\n      });\n    },\n\n    dfs(callback) {\n      const children = this.get('children');\n\n      if (!Ember.isEmpty(children)) {\n        children.forEach(child => {\n          child.dfs(...arguments);\n        });\n      }\n\n      callback(this);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/tree-nodes/category\", [\"exports\", \"adept-iq/classes/tree-nodes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    type: 'category',\n    configCategory: null,\n    isCategory: true,\n    isExpandable: true,\n    // TODO: get this from config service somehow\n    isCollection: Ember.computed('children.@each.type', function () {\n      const children = this.get('children');\n\n      if (Ember.isEmpty(children)) {\n        return false;\n      }\n\n      return children.every(child => {\n        return child.get('type') === 'object';\n      });\n    }),\n    isModified: Ember.computed('children.length', 'visibleChildren.length', function () {\n      return this.get('children.length') !== this.get('visibleChildren.length');\n    }),\n    isSearchMatch: Ember.computed('label', 'searchText', function () {\n      const searchText = this.get('searchText');\n      if (Ember.isBlank(searchText)) return true;\n      const normalizedSearchText = searchText.toLowerCase();\n      const label = this.get('label');\n\n      if (Ember.isPresent(label)) {\n        const normalizedLabel = label.toLowerCase();\n        if (normalizedLabel.includes(normalizedSearchText)) return true;\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/tree-nodes/object\", [\"exports\", \"adept-iq/classes/tree-nodes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    type: 'object',\n    configItem: null,\n    isExpandable: true,\n    isObject: true,\n    isRemoved: false,\n    isModified: Ember.computed('children.@each.isModified', 'isNew', function () {\n      const children = this.get('children');\n\n      if (this.get('isNew')) {\n        return true;\n      }\n\n      return Ember.makeArray(children).any(child => {\n        return child.get('isModified');\n      });\n    }),\n    isNew: Ember.computed('configItem.id', function () {\n      return !this.get('configItem.id');\n    }),\n    isSearchMatch: Ember.computed('searchText', 'label', function () {\n      // otherwise, only show if label or value matches query\n      const searchText = this.get('searchText');\n      if (Ember.isBlank(searchText)) return true;\n      const normalizedSearchText = searchText.toLowerCase();\n      const label = this.get('label');\n\n      if (Ember.isPresent(label)) {\n        const normalizedLabel = label.toLowerCase();\n        if (normalizedLabel.includes(normalizedSearchText)) return true;\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/tree-nodes/value\", [\"exports\", \"adept-iq/classes/tree-nodes/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _base.default.extend({\n    type: null,\n    configItem: null,\n    validator: null,\n    // TODO: bind this with permissions\n    canEdit: true,\n    isRemoved: false,\n    originalValue: null,\n    isValue: true,\n    isProperty: Ember.computed.readOnly('parent.isObject'),\n    isNumber: Ember.computed.equal('type', 'number'),\n    isString: Ember.computed.equal('type', 'string'),\n    isBoolean: Ember.computed.equal('type', 'boolean'),\n    isColor: Ember.computed.equal('type', 'color'),\n    isOutdated: Ember.computed('originalValue', 'configItem.value', function () {\n      const originalValue = this.get('originalValue');\n      const actualValue = this.get('configItem.value');\n\n      if (Ember.isEmpty(originalValue) && Ember.isEmpty(actualValue)) {\n        return false;\n      }\n\n      return JSON.stringify(originalValue) !== JSON.stringify(actualValue);\n    }),\n    isModified: Ember.computed('value', 'originalValue', function () {\n      const value = this.get('value');\n      const originalValue = this.get('originalValue');\n\n      if (Ember.isEmpty(value) && Ember.isEmpty(originalValue)) {\n        return false;\n      }\n\n      if (Ember.isArray(originalValue)) {\n        return JSON.stringify(originalValue) !== value;\n      }\n\n      return JSON.stringify(value) !== JSON.stringify(originalValue);\n    }),\n    isDirty: Ember.computed.or('isOutdated', 'isModified'),\n    isSearchMatch: Ember.computed.or('isValueSearchMatch', 'isLabelSearchMatch'),\n    isValueSearchMatch: Ember.computed('searchText', 'value', function () {\n      const searchText = this.get('searchText');\n      if (Ember.isBlank(searchText)) return true;\n      const normalizedSearchText = searchText.toLowerCase();\n      const value = this.get('value');\n\n      if (Ember.isPresent(value)) {\n        const normalizedValue = JSON.stringify(value).toLowerCase();\n        if (normalizedValue.includes(normalizedSearchText)) return true;\n      }\n\n      return false;\n    }),\n    isLabelSearchMatch: Ember.computed('searchText', 'label', function () {\n      const searchText = this.get('searchText');\n      if (Ember.isBlank(searchText)) return true;\n      const normalizedSearchText = searchText.toLowerCase();\n      const label = this.get('label');\n\n      if (Ember.isPresent(label)) {\n        const normalizedLabel = label.toLowerCase();\n        if (normalizedLabel.includes(normalizedSearchText)) return true;\n      }\n\n      return false;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/vertical-menu-models/operation-list-model\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.REOPTIMIZE_VIEW_PATH = void 0;\n  const REOPTIMIZE_VIEW_PATH = 'reoptimize';\n  _exports.REOPTIMIZE_VIEW_PATH = REOPTIMIZE_VIEW_PATH;\n\n  var _default = Ember.Object.extend({\n    title: null,\n    summary: null,\n    componentPath: null,\n    currentSchedule: null,\n    selected: false,\n    disabled: Ember.computed('currentSchedule.isGenerated', 'componentPath', function () {\n      const componentPath = this.get('componentPath');\n      const isGenerated = this.get('currentSchedule.isGenerated');\n      if (componentPath === REOPTIMIZE_VIEW_PATH) return false;else if (isGenerated) return true;\n      return false;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/widget\", [\"exports\", \"lodash\", \"md5\", \"adept-iq/utils/guid\"], function (_exports, _lodash, _md, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SCHEMA_VERSION = 1;\n  const Widget = Ember.Object.extend({\n    typeId: null,\n    width: null,\n    height: null,\n    x: null,\n    y: null,\n    isTraversalEnabled: true,\n    dashboard: null,\n    _models: null,\n    _id: null,\n    _state: null,\n    models: Ember.computed('_models', {\n      get() {\n        let models = this.get('_models');\n\n        if (!models) {\n          models = [];\n          /*eslint-disable */\n\n          this.set('_models', models);\n          /*eslint-enable */\n        }\n\n        return models;\n      },\n\n      set(key, value) {\n        this.set('_models', value);\n        return value;\n      }\n\n    }),\n    id: Ember.computed('_id', {\n      get() {\n        let id = this.get('_id');\n\n        if (!id) {\n          id = (0, _guid.guid)();\n          /*eslint-disable */\n\n          this.set('_id', id);\n          /*eslint-enable */\n        }\n\n        return id;\n      },\n\n      set(key, value) {\n        this.set('_id', value);\n        return value;\n      }\n\n    }),\n    state: Ember.computed('_state', {\n      get() {\n        let state = this.get('_state');\n\n        if (!state) {\n          state = {};\n          /*eslint-disable */\n\n          this.set('_state', state);\n          /*eslint-enable */\n        }\n\n        return state;\n      },\n\n      set(key, value) {\n        this.set('_state', value);\n        return value;\n      }\n\n    }),\n\n    // use this method to mutate state without replacing\n    mergeState() {\n      let changes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const state = this.get('state');\n\n      const columns = _lodash.default.pickBy(state.columns, (value, key) => {\n        if (changes.hasOwnProperty('columns')) {\n          if (changes.columns.hasOwnProperty(key)) {\n            return changes.columns[key] !== value;\n          }\n        }\n\n        return true;\n      });\n\n      state.columns = columns;\n\n      const mergedState = _lodash.default.merge({}, state, changes);\n\n      this.set('state', mergedState); // TODO: test if this is necessary\n\n      this.notifyPropertyChange('state');\n      this.set('dashboard.hasDirtyWidgets', true);\n    },\n\n    serialize() {\n      const attributes = {\n        id: this.get('id'),\n        typeId: this.get('typeId'),\n        width: this.get('width'),\n        height: this.get('height'),\n        x: this.get('x'),\n        y: this.get('y'),\n        state: _lodash.default.cloneDeep(this.get('state')),\n        isTraversalEnabled: this.get('isTraversalEnabled')\n      };\n      const serialized = {\n        schemaVersion: SCHEMA_VERSION,\n        timestamp: new Date().getTime(),\n        hash: (0, _md.default)(JSON.stringify(attributes)),\n        attributes\n      };\n      return serialized;\n    }\n\n  });\n  Widget.reopenClass({\n    deserialize(serialized) {\n      // for legacy, missing schema version means 1\n      const {\n        schemaVersion = 1\n      } = serialized;\n\n      if (schemaVersion !== 1) {\n        /*eslint-disable */\n        throw 'unknown schema version';\n        /*eslint-enable */\n      }\n\n      const {\n        id,\n        typeId,\n        width,\n        height,\n        x,\n        y,\n        state,\n        isTraversalEnabled\n      } = serialized.attributes;\n      return Widget.create({\n        id,\n        typeId,\n        width,\n        height,\n        x,\n        y,\n        state: _lodash.default.cloneDeep(state),\n        isTraversalEnabled\n      });\n    }\n\n  });\n  var _default = Widget;\n  _exports.default = _default;\n});","define(\"adept-iq/classes/work-queue\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // use this chunk size until we have enough profiling data from completed jobs\n  const INITIAL_CHUNK_SIZE = 100; // # of completed jobs required before switching to computed chunk size\n\n  const MIN_SAMPLE_SIZE = 100; // for diagnostics only\n\n  const COMPUTE_TIME = 1000.0 * _environment.default.work.cycleShare / _environment.default.work.fps;\n  const DISPLAY_UPDATE_INTERVAL_TIME = 1000;\n\n  var _default = Ember.Object.extend({\n    name: null,\n    perform: null,\n    context: null,\n    priority: 0,\n    // smaller is more urgent\n    isChunked: false,\n    // if `true`, attempt work in bulk\n    isElastic: false,\n    // fills available time\n    isGreedy: false,\n    maxGreedySize: null,\n    asyncTime: null,\n    // adds a wait time for jobs that return immediately\n    throttle: null,\n    // do not run this more than once per N ms\n    uniqBy: null,\n    // de-dupe jobs by property name\n    _lastRunDict: null,\n    // record uniq job last run timestamp\n    jobs: null,\n    isDisabled: false,\n    // override this to prevent jobs from running\n    length: Ember.computed.readOnly('jobs.length'),\n    isEmpty: Ember.computed.equal('length', 0),\n    lastRunAt: null,\n    // statistical analysis\n    _stats: null,\n    // only updates once per second\n    displayLength: null,\n    displayChunkSize: null,\n    _interval: null,\n    // gets set to true when this queue is cooling down\n    isThrottled: false,\n    _throttledTimer: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('jobs', []);\n      this.set('_lastRunDict', {});\n      this._stats = {\n        count: 0,\n        tSum: 0,\n        ema: null\n      }; // for diagnostics mode\n\n      this._interval = setInterval(() => {\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isDestroyed')) return;\n\n          const chunkSize = this._estimateChunkSize(COMPUTE_TIME);\n\n          this.set('displayLength', this.get('length'));\n          this.set('displayChunkSize', chunkSize);\n        });\n      }, DISPLAY_UPDATE_INTERVAL_TIME);\n    },\n\n    destroy() {\n      this.get('jobs').clear();\n      this.set('perform', null);\n      this.set('context', null);\n      clearInterval(this._interval);\n      this._interval = null;\n      this.set('displayLength', 0);\n      this._stats = null;\n\n      if (this.get('_throttledTimer')) {\n        Ember.run.cancel(this.get('_throttledTimer'));\n      }\n\n      this._super(...arguments);\n    },\n\n    clearJobs() {\n      this.get('jobs').clear();\n    },\n\n    pushJob(job) {\n      this.get('jobs').pushObject(job);\n    },\n\n    unshiftJob(job) {\n      this.get('jobs').unshiftObject(job);\n    },\n\n    pushJobs(jobs) {\n      this.get('jobs').pushObjects(jobs);\n    },\n\n    mergeJob(job) {\n      const uniqBy = this.get('uniqBy');\n      const groupBy = this.get('groupBy'); // const duplicateBy = this.get('duplicateBy');\n\n      const maxGroupSize = this.get('maxGroupSize') || 10000;\n      const jobs = this.get('jobs');\n\n      if (uniqBy) {\n        const uniqueId = Ember.get(job, uniqBy);\n\n        if (Ember.isNone(uniqueId)) {\n          jobs.pushObject(job);\n          return;\n        }\n\n        const payloads = Ember.get(job, groupBy);\n        const oldJob = jobs.findBy(uniqBy, uniqueId);\n\n        if (!oldJob) {\n          jobs.pushObject(job);\n          return;\n        }\n\n        const oldPayloads = Ember.get(oldJob, groupBy);\n        const allPayloads = oldPayloads.concat(payloads);\n        const newJob = {\n          [uniqBy]: uniqueId,\n          [groupBy]: allPayloads.slice(Math.max(allPayloads.length - maxGroupSize, 0))\n        };\n        jobs.removeObject(oldJob);\n        jobs.pushObject(newJob);\n      }\n    },\n\n    addJob(job) {\n      const uniqBy = this.get('uniqBy');\n      const jobs = this.get('jobs');\n      const lastRunDict = this.get('_lastRunDict');\n\n      if (uniqBy) {\n        const uniqueId = Ember.get(job, uniqBy);\n\n        if (Ember.isNone(uniqueId)) {\n          jobs.pushObject(job);\n          return;\n        }\n\n        let oldJob;\n\n        do {\n          oldJob = jobs.findBy(uniqBy, uniqueId);\n          if (oldJob) jobs.removeObject(oldJob);\n        } while (oldJob);\n\n        if (!lastRunDict[uniqueId]) {\n          lastRunDict[uniqueId] = new Date().getTime();\n        }\n\n        const oldJobLastRunAt = lastRunDict[uniqueId];\n\n        const checkLastRunAt = sortedJob => {\n          const jobId = Ember.get(sortedJob, uniqBy);\n          const joblastRunAt = lastRunDict[jobId];\n          return joblastRunAt && joblastRunAt > oldJobLastRunAt;\n        };\n\n        const index = jobs.findIndex(checkLastRunAt);\n\n        if (index > 0) {\n          jobs.insertAt(index - 1, job);\n        } else {\n          jobs.pushObject(job);\n        }\n\n        return;\n      }\n\n      this.get('jobs').addObject(job);\n    },\n\n    addJobs(jobs) {\n      this.get('jobs').addObjects(jobs);\n    },\n\n    start() {\n      let time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Infinity;\n      return this.get('_task').perform(time);\n    },\n\n    _task: (0, _emberConcurrency.task)(function* (time) {\n      if (this.get('isThrottled')) return 0;\n      const context = this.get('context');\n      const perform = this.get('perform');\n      const uniqBy = this.get('uniqBy');\n      const lastRunDict = this.get('_lastRunDict');\n\n      if (!perform) {\n        const name = this.get('name');\n        throw new Error(`queue ${name} has no perform function`);\n      } // record time before we start work\n\n\n      const tStart = new Date().getTime();\n      let count = 0;\n      this.set('lastRunAt', tStart);\n\n      if (this.get('isGreedy')) {\n        const maxGreedySize = this.get('maxGreedySize');\n        const chunkSize = Math.min(this.get('jobs').length, maxGreedySize);\n        const chunk = this.get('jobs').splice(0, chunkSize);\n\n        if (uniqBy) {\n          chunk.forEach(job => {\n            const uniqueId = Ember.get(job, uniqBy);\n            lastRunDict[uniqueId] = tStart;\n          });\n        } // splice doesn't trigger observers\n\n\n        this.notifyPropertyChange('jobs');\n        const result = perform.call(context, chunk);\n        count += Ember.isNone(result) ? chunk.length : result;\n      } else if (this.get('isChunked')) {\n        const chunkSize = this._estimateChunkSize(time);\n\n        const chunk = this.get('jobs').splice(0, chunkSize);\n\n        if (uniqBy) {\n          chunk.forEach(job => {\n            const uniqueId = Ember.get(job, uniqBy);\n            lastRunDict[uniqueId] = tStart;\n          });\n        } // splice doesn't trigger observers\n\n\n        this.notifyPropertyChange('jobs');\n        const result = perform.call(context, chunk);\n        count += Ember.isNone(result) ? chunk.length : result;\n      } else if (this.get('isElastic')) {\n        const jobs = this.get('jobs');\n        let tRemaining = tStart + time - new Date().getTime();\n        let didShift;\n        const minTime = this._stats.count < MIN_SAMPLE_SIZE ? 1 : this.getMinWorkTime();\n\n        if (jobs.length > 0) {\n          do {\n            const job = jobs.shift();\n            const result = perform.call(context, [job]);\n\n            if (uniqBy) {\n              const uniqueId = Ember.get(job, uniqBy);\n              lastRunDict[uniqueId] = tStart;\n            }\n\n            count += Ember.isNone(result) ? 1 : result;\n            didShift = true;\n            tRemaining = tStart + time - new Date().getTime();\n          } while (jobs.length > 0 && tRemaining > minTime);\n\n          if (_environment.default.APP.DEBUG_QUEUES && tRemaining < 0) {\n            console.warn(`${this.name} went over ${-tRemaining}ms on ${count} jobs (minTime ${minTime})`); // eslint-disable-line no-console\n          }\n        }\n\n        if (didShift) this.notifyPropertyChange('jobs');\n      } else {\n        const job = this.get('jobs').shiftObject();\n        const result = perform.call(context, [job]);\n\n        if (uniqBy) {\n          const uniqueId = Ember.get(job, uniqBy);\n          lastRunDict[uniqueId] = tStart;\n        }\n\n        count += Ember.isNone(result) ? 1 : result;\n      } // record time we finished work\n\n\n      const tDone = new Date().getTime();\n      const asyncTime = this.get('asyncTime');\n\n      if (asyncTime) {\n        // `asyncTime` is the minimum unit of time we should allocate for one\n        // non-trival job; we only sleep if the total synchronous time was less\n        // than the total async time for all non-trivial completed jobs\n        const sleepTime = Math.max(asyncTime * count - (tDone - tStart), 0);\n\n        if (sleepTime > 0) {\n          yield (0, _emberConcurrency.timeout)(sleepTime);\n        }\n      } // update statistics\n\n\n      const tTotal = tDone - tStart;\n      this._stats.count += count;\n      this._stats.tSum += tTotal;\n\n      if (count > 0) {\n        const avg = tTotal / count; // Use linear equation to avoid overhead on ema calculation\n\n        const lambda = count / this._stats.count;\n        this._stats.ema = Ember.isNone(this._stats.ema) ? avg : lambda * avg + (1 - lambda) * this._stats.ema;\n      }\n\n      const throttle = this.get('throttle'); // only pause queue if a throttle time is set _and_ we actually did work\n\n      if (throttle && count > 0) {\n        this.set('isThrottled', true); // reset throttled state at later time\n\n        this.set('_throttledTimer', Ember.run.later(() => {\n          this.set('isThrottled', false);\n        }, throttle));\n      }\n\n      return count;\n    }),\n\n    getMinWorkTime() {\n      if (this._stats.count < MIN_SAMPLE_SIZE) return 1;\n      return Math.ceil(3 * this._stats.ema);\n    },\n\n    getStarvationTime() {\n      const now = new Date().getTime();\n      if (this.lastRunAt) return now - this.lastRunAt;\n      return 0;\n    },\n\n    _estimateChunkSize(time) {\n      if (this._stats.count < MIN_SAMPLE_SIZE) return INITIAL_CHUNK_SIZE;\n      if (time === Infinity || !this._stats.tSum) return Infinity;\n      const chunkSize = Math.floor(time / this._stats.ema);\n      return Math.max(chunkSize, 1);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/classes/work-queues/widget-refresh\", [\"exports\", \"adept-iq/classes/work-queue\", \"adept-iq/config/environment\"], function (_exports, _workQueue, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _workQueue.default.extend({\n    name: 'wgt-refresh',\n    workspace: null,\n\n    // settings defined in `config/environment.js`\n    init() {\n      this._super(...arguments);\n\n      this.setProperties(_environment.default.work['wgt-refresh']);\n    },\n\n    isDisabled: Ember.computed.readOnly('workspace.isRoadSupervisorModeEnabled'),\n\n    perform(jobs) {\n      let count = 0;\n      jobs.forEach(job => {\n        const {\n          collection,\n          dataJoin\n        } = job;\n        const changed = dataJoin.join(collection, {\n          sync: true\n        });\n\n        if (changed) {\n          count += 1;\n        }\n      });\n      return count;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/components/-dynamic-element-alt\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // avoiding reexport directly here because in some circumstances (ember-engines\n  // for example) a simple reexport is transformed to `define.alias`,\n  // unfortunately at the moment (ember-source@3.13) there is no _actual_\n  // `@ember/component` module to alias so this causes issues\n  //\n  // tldr; we can replace this with a simple reexport when we can rely on Ember\n  // actually providing a `@ember/component` module\n  var _default = Ember.Component.extend();\n\n  _exports.default = _default;\n});","define(\"adept-iq/components/-dynamic-element\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // avoiding reexport directly here because in some circumstances (ember-engines\n  // for example) a simple reexport is transformed to `define.alias`,\n  // unfortunately at the moment (ember-source@3.13) there is no _actual_\n  // `@ember/component` module to alias so this causes issues\n  //\n  // tldr; we can replace this with a simple reexport when we can rely on Ember\n  // actually providing a `@ember/component` module\n  var _default = Ember.Component.extend();\n\n  _exports.default = _default;\n});","define(\"adept-iq/components/-ember-table-private/row-wrapper\", [\"exports\", \"ember-table/components/-private/row-wrapper\"], function (_exports, _rowWrapper) {\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 _rowWrapper.default;\n    }\n  });\n});","define(\"adept-iq/components/-ember-table-private/scroll-indicators\", [\"exports\", \"ember-table/components/-private/scroll-indicators/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/-ember-table-private/simple-checkbox\", [\"exports\", \"ember-table/components/-private/simple-checkbox\"], function (_exports, _simpleCheckbox) {\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 _simpleCheckbox.default;\n    }\n  });\n});","define(\"adept-iq/components/as-scrollable\", [\"exports\", \"ember-scrollable/components/ember-scrollable\"], function (_exports, _emberScrollable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _emberScrollable.default.extend({\n    classNames: 'as-scrollable'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/components/basic-dropdown-content\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown-content\"], function (_exports, _basicDropdownContent) {\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 _basicDropdownContent.default;\n    }\n  });\n});","define(\"adept-iq/components/basic-dropdown-trigger\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown-trigger\"], function (_exports, _basicDropdownTrigger) {\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 _basicDropdownTrigger.default;\n    }\n  });\n});","define(\"adept-iq/components/basic-dropdown\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown\"], function (_exports, _basicDropdown) {\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 _basicDropdown.default;\n    }\n  });\n});","define(\"adept-iq/components/basic-dropdown/content-element\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown/content-element\"], function (_exports, _contentElement) {\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 _contentElement.default;\n    }\n  });\n});","define(\"adept-iq/components/basic-dropdown/content\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown/content\"], function (_exports, _content) {\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 _content.default;\n    }\n  });\n});","define(\"adept-iq/components/basic-dropdown/trigger\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown/trigger\"], function (_exports, _trigger) {\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 _trigger.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-accordion\", [\"exports\", \"ember-bootstrap/components/bs-accordion\"], function (_exports, _bsAccordion) {\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 _bsAccordion.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-accordion/item\", [\"exports\", \"ember-bootstrap/components/bs-accordion/item\"], function (_exports, _item) {\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 _item.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-accordion/item/body\", [\"exports\", \"ember-bootstrap/components/bs-accordion/item/body\"], function (_exports, _body) {\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 _body.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-accordion/item/title\", [\"exports\", \"ember-bootstrap/components/bs-accordion/item/title\"], function (_exports, _title) {\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 _title.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-alert\", [\"exports\", \"ember-bootstrap/components/bs-alert\"], function (_exports, _bsAlert) {\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 _bsAlert.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-button-group\", [\"exports\", \"ember-bootstrap/components/bs-button-group\"], function (_exports, _bsButtonGroup) {\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 _bsButtonGroup.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-button-group/button\", [\"exports\", \"ember-bootstrap/components/bs-button-group/button\"], function (_exports, _button) {\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 _button.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-button\", [\"exports\", \"ember-bootstrap/components/bs-button\"], function (_exports, _bsButton) {\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 _bsButton.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-carousel\", [\"exports\", \"ember-bootstrap/components/bs-carousel\"], function (_exports, _bsCarousel) {\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 _bsCarousel.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-carousel/slide\", [\"exports\", \"ember-bootstrap/components/bs-carousel/slide\"], function (_exports, _slide) {\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 _slide.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-collapse\", [\"exports\", \"ember-bootstrap/components/bs-collapse\"], function (_exports, _bsCollapse) {\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 _bsCollapse.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown\", [\"exports\", \"ember-bootstrap/components/bs-dropdown\"], function (_exports, _bsDropdown) {\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 _bsDropdown.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown/button\", [\"exports\", \"ember-bootstrap/components/bs-dropdown/button\"], function (_exports, _button) {\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 _button.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown/menu\", [\"exports\", \"ember-bootstrap/components/bs-dropdown/menu\"], function (_exports, _menu) {\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 _menu.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown/menu/divider\", [\"exports\", \"ember-bootstrap/components/bs-dropdown/menu/divider\"], function (_exports, _divider) {\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 _divider.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown/menu/item\", [\"exports\", \"ember-bootstrap/components/bs-dropdown/menu/item\"], function (_exports, _item) {\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 _item.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown/menu/link-to\", [\"exports\", \"ember-bootstrap/components/bs-dropdown/menu/link-to\"], function (_exports, _linkTo) {\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 _linkTo.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-dropdown/toggle\", [\"exports\", \"ember-bootstrap/components/bs-dropdown/toggle\"], function (_exports, _toggle) {\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 _toggle.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form\", [\"exports\", \"ember-bootstrap/components/bs-form\"], function (_exports, _bsForm) {\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 _bsForm.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element\", [\"exports\", \"ember-bootstrap/components/bs-form/element\"], function (_exports, _element) {\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 _element.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/control\", [\"exports\", \"ember-bootstrap/components/bs-form/element/control\"], function (_exports, _control) {\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 _control.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/control/checkbox\", [\"exports\", \"ember-bootstrap/components/bs-form/element/control/checkbox\"], function (_exports, _checkbox) {\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 _checkbox.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/control/input\", [\"exports\", \"ember-bootstrap/components/bs-form/element/control/input\"], function (_exports, _input) {\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 _input.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/control/textarea\", [\"exports\", \"ember-bootstrap/components/bs-form/element/control/textarea\"], function (_exports, _textarea) {\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 _textarea.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/errors\", [\"exports\", \"ember-bootstrap/components/bs-form/element/errors\"], function (_exports, _errors) {\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 _errors.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/feedback-icon\", [\"exports\", \"ember-bootstrap/components/bs-form/element/feedback-icon\"], function (_exports, _feedbackIcon) {\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 _feedbackIcon.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/help-text\", [\"exports\", \"ember-bootstrap/components/bs-form/element/help-text\"], function (_exports, _helpText) {\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 _helpText.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/label\", [\"exports\", \"ember-bootstrap/components/bs-form/element/label\"], function (_exports, _label) {\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 _label.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/layout/horizontal\", [\"exports\", \"ember-bootstrap/components/bs-form/element/layout/horizontal\"], function (_exports, _horizontal) {\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 _horizontal.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/layout/horizontal/checkbox\", [\"exports\", \"ember-bootstrap/components/bs-form/element/layout/horizontal/checkbox\"], function (_exports, _checkbox) {\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 _checkbox.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/layout/inline\", [\"exports\", \"ember-bootstrap/components/bs-form/element/layout/inline\"], function (_exports, _inline) {\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 _inline.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/layout/inline/checkbox\", [\"exports\", \"ember-bootstrap/components/bs-form/element/layout/inline/checkbox\"], function (_exports, _checkbox) {\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 _checkbox.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/layout/vertical\", [\"exports\", \"ember-bootstrap/components/bs-form/element/layout/vertical\"], function (_exports, _vertical) {\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 _vertical.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/element/layout/vertical/checkbox\", [\"exports\", \"ember-bootstrap/components/bs-form/element/layout/vertical/checkbox\"], function (_exports, _checkbox) {\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 _checkbox.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-form/group\", [\"exports\", \"ember-bootstrap/components/bs-form/group\"], function (_exports, _group) {\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 _group.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal-simple\", [\"exports\", \"ember-bootstrap/components/bs-modal-simple\"], function (_exports, _bsModalSimple) {\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 _bsModalSimple.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal\", [\"exports\", \"ember-bootstrap/components/bs-modal\"], function (_exports, _bsModal) {\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 _bsModal.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal/body\", [\"exports\", \"ember-bootstrap/components/bs-modal/body\"], function (_exports, _body) {\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 _body.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal/dialog\", [\"exports\", \"ember-bootstrap/components/bs-modal/dialog\"], function (_exports, _dialog) {\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 _dialog.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal/footer\", [\"exports\", \"ember-bootstrap/components/bs-modal/footer\"], function (_exports, _footer) {\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 _footer.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal/header\", [\"exports\", \"ember-bootstrap/components/bs-modal/header\"], function (_exports, _header) {\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 _header.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal/header/close\", [\"exports\", \"ember-bootstrap/components/bs-modal/header/close\"], function (_exports, _close) {\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 _close.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-modal/header/title\", [\"exports\", \"ember-bootstrap/components/bs-modal/header/title\"], function (_exports, _title) {\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 _title.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-nav\", [\"exports\", \"ember-bootstrap/components/bs-nav\"], function (_exports, _bsNav) {\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 _bsNav.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-nav/item\", [\"exports\", \"ember-bootstrap/components/bs-nav/item\"], function (_exports, _item) {\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 _item.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-nav/link-to\", [\"exports\", \"ember-bootstrap/components/bs-nav/link-to\"], function (_exports, _linkTo) {\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 _linkTo.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-navbar\", [\"exports\", \"ember-bootstrap/components/bs-navbar\"], function (_exports, _bsNavbar) {\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 _bsNavbar.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-navbar/content\", [\"exports\", \"ember-bootstrap/components/bs-navbar/content\"], function (_exports, _content) {\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 _content.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-navbar/link-to\", [\"exports\", \"ember-bootstrap/components/bs-navbar/link-to\"], function (_exports, _linkTo) {\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 _linkTo.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-navbar/nav\", [\"exports\", \"ember-bootstrap/components/bs-navbar/nav\"], function (_exports, _nav) {\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 _nav.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-navbar/toggle\", [\"exports\", \"ember-bootstrap/components/bs-navbar/toggle\"], function (_exports, _toggle) {\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 _toggle.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-popover\", [\"exports\", \"ember-bootstrap/components/bs-popover\"], function (_exports, _bsPopover) {\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 _bsPopover.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-popover/element\", [\"exports\", \"ember-bootstrap/components/bs-popover/element\"], function (_exports, _element) {\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 _element.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-progress\", [\"exports\", \"ember-bootstrap/components/bs-progress\"], function (_exports, _bsProgress) {\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 _bsProgress.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-progress/bar\", [\"exports\", \"ember-bootstrap/components/bs-progress/bar\"], function (_exports, _bar) {\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 _bar.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-tab\", [\"exports\", \"ember-bootstrap/components/bs-tab\"], function (_exports, _bsTab) {\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 _bsTab.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-tab/pane\", [\"exports\", \"ember-bootstrap/components/bs-tab/pane\"], function (_exports, _pane) {\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 _pane.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-tooltip\", [\"exports\", \"ember-bootstrap/components/bs-tooltip\"], function (_exports, _bsTooltip) {\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 _bsTooltip.default;\n    }\n  });\n});","define(\"adept-iq/components/bs-tooltip/element\", [\"exports\", \"ember-bootstrap/components/bs-tooltip/element\"], function (_exports, _element) {\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 _element.default;\n    }\n  });\n});","define(\"adept-iq/components/credit-card-input\", [\"exports\", \"ember-inputmask/components/credit-card-input\"], function (_exports, _creditCardInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _creditCardInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/currency-input\", [\"exports\", \"ember-inputmask/components/currency-input\"], function (_exports, _currencyInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _currencyInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/date-input\", [\"exports\", \"ember-inputmask/components/date-input\"], function (_exports, _dateInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _dateInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/email-input\", [\"exports\", \"ember-inputmask/components/email-input\"], function (_exports, _emailInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _emailInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/ember-chart\", [\"exports\", \"ember-cli-chart/components/ember-chart\"], function (_exports, _emberChart) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _emberChart.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/ember-flatpickr\", [\"exports\", \"ember-flatpickr/components/ember-flatpickr\"], function (_exports, _emberFlatpickr) {\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 _emberFlatpickr.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-modal-dialog-positioned-container\", [\"exports\", \"ember-modal-dialog/components/positioned-container\"], function (_exports, _positionedContainer) {\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 _positionedContainer.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-modal-dialog/-basic-dialog\", [\"exports\", \"ember-modal-dialog/components/basic-dialog\"], function (_exports, _basicDialog) {\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 _basicDialog.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-modal-dialog/-in-place-dialog\", [\"exports\", \"ember-modal-dialog/components/in-place-dialog\"], function (_exports, _inPlaceDialog) {\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 _inPlaceDialog.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-modal-dialog/-liquid-dialog\", [\"exports\", \"ember-modal-dialog/components/liquid-dialog\"], function (_exports, _liquidDialog) {\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 _liquidDialog.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-modal-dialog/-liquid-tether-dialog\", [\"exports\", \"ember-modal-dialog/components/liquid-tether-dialog\"], function (_exports, _liquidTetherDialog) {\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 _liquidTetherDialog.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-modal-dialog/-tether-dialog\", [\"exports\", \"ember-modal-dialog/components/tether-dialog\"], function (_exports, _tetherDialog) {\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 _tetherDialog.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-popover\", [\"exports\", \"ember-tooltips/components/ember-popover\"], function (_exports, _emberPopover) {\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 _emberPopover.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-popper-targeting-parent\", [\"exports\", \"ember-popper/components/ember-popper-targeting-parent\"], function (_exports, _emberPopperTargetingParent) {\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 _emberPopperTargetingParent.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-popper\", [\"exports\", \"ember-popper/components/ember-popper\"], function (_exports, _emberPopper) {\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 _emberPopper.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-scrollable\", [\"exports\", \"ember-scrollable/components/ember-scrollable\"], function (_exports, _emberScrollable) {\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 _emberScrollable.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-scrollbar\", [\"exports\", \"ember-scrollable/components/ember-scrollbar\"], function (_exports, _emberScrollbar) {\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 _emberScrollbar.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-table\", [\"exports\", \"ember-table/components/ember-table/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-tbody\", [\"exports\", \"ember-table/components/ember-tbody/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-td\", [\"exports\", \"ember-table/components/ember-td/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-tfoot\", [\"exports\", \"ember-table/components/ember-tfoot/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-th\", [\"exports\", \"ember-table/components/ember-th/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-th/resize-handle\", [\"exports\", \"ember-table/components/ember-th/resize-handle/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-th/sort-indicator\", [\"exports\", \"ember-table/components/ember-th/sort-indicator/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-thead\", [\"exports\", \"ember-table/components/ember-thead/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-timepicker\", [\"exports\", \"ember-timepicker/components/ember-timepicker\"], function (_exports, _emberTimepicker) {\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 _emberTimepicker.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-tooltip\", [\"exports\", \"ember-tooltips/components/ember-tooltip\"], function (_exports, _emberTooltip) {\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 _emberTooltip.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-tr\", [\"exports\", \"ember-table/components/ember-tr/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/ember-wormhole\", [\"exports\", \"ember-wormhole/components/ember-wormhole\"], function (_exports, _emberWormhole) {\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 _emberWormhole.default;\n    }\n  });\n});","define(\"adept-iq/components/flash-message\", [\"exports\", \"ember-cli-flash/components/flash-message\"], function (_exports, _flashMessage) {\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 _flashMessage.default;\n    }\n  });\n});","define(\"adept-iq/components/grid-stack-item\", [\"exports\", \"ember-gridstack/components/grid-stack-item\"], function (_exports, _gridStackItem) {\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 _gridStackItem.default;\n    }\n  });\n});","define(\"adept-iq/components/grid-stack\", [\"exports\", \"ember-gridstack/components/grid-stack\"], function (_exports, _gridStack) {\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 _gridStack.default;\n    }\n  });\n});","define(\"adept-iq/components/input-mask\", [\"exports\", \"ember-inputmask/components/input-mask\"], function (_exports, _inputMask) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _inputMask.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/labeled-radio-button\", [\"exports\", \"ember-radio-button/components/labeled-radio-button\"], function (_exports, _labeledRadioButton) {\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 _labeledRadioButton.default;\n    }\n  });\n});","define(\"adept-iq/components/light-table\", [\"exports\", \"ember-light-table/components/light-table\"], function (_exports, _lightTable) {\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 _lightTable.default;\n    }\n  });\n});","define(\"adept-iq/components/light-table/cells/base\", [\"exports\", \"ember-light-table/components/cells/base\"], function (_exports, _base) {\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 _base.default;\n    }\n  });\n});","define(\"adept-iq/components/light-table/columns/base\", [\"exports\", \"ember-light-table/components/columns/base\"], function (_exports, _base) {\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 _base.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-body\", [\"exports\", \"ember-light-table/components/lt-body\"], function (_exports, _ltBody) {\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 _ltBody.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-column-resizer\", [\"exports\", \"ember-light-table/components/lt-column-resizer\"], function (_exports, _ltColumnResizer) {\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 _ltColumnResizer.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-foot\", [\"exports\", \"ember-light-table/components/lt-foot\"], function (_exports, _ltFoot) {\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 _ltFoot.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-head\", [\"exports\", \"ember-light-table/components/lt-head\"], function (_exports, _ltHead) {\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 _ltHead.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-infinity\", [\"exports\", \"ember-light-table/components/lt-infinity\"], function (_exports, _ltInfinity) {\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 _ltInfinity.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-row\", [\"exports\", \"ember-light-table/components/lt-row\"], function (_exports, _ltRow) {\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 _ltRow.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-scrollable\", [\"exports\", \"ember-light-table/components/lt-scrollable\"], function (_exports, _ltScrollable) {\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 _ltScrollable.default;\n    }\n  });\n});","define(\"adept-iq/components/lt-spanned-row\", [\"exports\", \"ember-light-table/components/lt-spanned-row\"], function (_exports, _ltSpannedRow) {\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 _ltSpannedRow.default;\n    }\n  });\n});","define(\"adept-iq/components/modal-container\", [\"exports\", \"ember-modal-service/components/modal-container\"], function (_exports, _modalContainer) {\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 _modalContainer.default;\n    }\n  });\n});","define(\"adept-iq/components/modal-dialog\", [\"exports\", \"ember-modal-dialog/components/modal-dialog\"], function (_exports, _modalDialog) {\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 _modalDialog.default;\n    }\n  });\n});","define(\"adept-iq/components/modal\", [\"exports\", \"ember-modal-service/components/modal\"], function (_exports, _modal) {\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 _modal.default;\n    }\n  });\n});","define(\"adept-iq/components/number-input\", [\"exports\", \"ember-inputmask/components/number-input\"], function (_exports, _numberInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _numberInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/one-way-credit-card-mask\", [\"exports\", \"ember-inputmask/components/one-way-credit-card-mask\"], function (_exports, _oneWayCreditCardMask) {\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 _oneWayCreditCardMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-currency-mask\", [\"exports\", \"ember-inputmask/components/one-way-currency-mask\"], function (_exports, _oneWayCurrencyMask) {\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 _oneWayCurrencyMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-date-mask\", [\"exports\", \"ember-inputmask/components/one-way-date-mask\"], function (_exports, _oneWayDateMask) {\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 _oneWayDateMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-email-mask\", [\"exports\", \"ember-inputmask/components/one-way-email-mask\"], function (_exports, _oneWayEmailMask) {\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 _oneWayEmailMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-input-mask\", [\"exports\", \"ember-inputmask/components/one-way-input-mask\"], function (_exports, _oneWayInputMask) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _oneWayInputMask.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/one-way-number-mask\", [\"exports\", \"ember-inputmask/components/one-way-number-mask\"], function (_exports, _oneWayNumberMask) {\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 _oneWayNumberMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-phone-mask\", [\"exports\", \"ember-inputmask/components/one-way-phone-mask\"], function (_exports, _oneWayPhoneMask) {\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 _oneWayPhoneMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-ssn-mask\", [\"exports\", \"ember-inputmask/components/one-way-ssn-mask\"], function (_exports, _oneWaySsnMask) {\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 _oneWaySsnMask.default;\n    }\n  });\n});","define(\"adept-iq/components/one-way-zip-code-mask\", [\"exports\", \"ember-inputmask/components/one-way-zip-code-mask\"], function (_exports, _oneWayZipCodeMask) {\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 _oneWayZipCodeMask.default;\n    }\n  });\n});","define(\"adept-iq/components/phone-number-input\", [\"exports\", \"ember-inputmask/components/phone-number-input\"], function (_exports, _phoneNumberInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _phoneNumberInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/power-calendar-multiple\", [\"exports\", \"ember-power-calendar/components/power-calendar-multiple\"], function (_exports, _powerCalendarMultiple) {\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 _powerCalendarMultiple.default;\n    }\n  });\n});","define(\"adept-iq/components/power-calendar-multiple/days\", [\"exports\", \"ember-power-calendar/components/power-calendar-multiple/days\"], function (_exports, _days) {\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 _days.default;\n    }\n  });\n});","define(\"adept-iq/components/power-calendar-range\", [\"exports\", \"ember-power-calendar/components/power-calendar-range\"], function (_exports, _powerCalendarRange) {\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 _powerCalendarRange.default;\n    }\n  });\n});","define(\"adept-iq/components/power-calendar-range/days\", [\"exports\", \"ember-power-calendar/components/power-calendar-range/days\"], function (_exports, _days) {\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 _days.default;\n    }\n  });\n});","define(\"adept-iq/components/power-calendar\", [\"exports\", \"ember-power-calendar/components/power-calendar\"], function (_exports, _powerCalendar) {\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 _powerCalendar.default;\n    }\n  });\n});","define(\"adept-iq/components/power-calendar/days\", [\"exports\", \"ember-power-calendar/components/power-calendar/days\"], function (_exports, _days) {\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 _days.default;\n    }\n  });\n});","define(\"adept-iq/components/power-calendar/nav\", [\"exports\", \"ember-power-calendar/components/power-calendar/nav\"], function (_exports, _nav) {\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 _nav.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select-multiple-with-create\", [\"exports\", \"ember-power-select-with-create/components/power-select-multiple-with-create\"], function (_exports, _powerSelectMultipleWithCreate) {\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 _powerSelectMultipleWithCreate.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select-multiple\", [\"exports\", \"ember-power-select/components/power-select-multiple\"], function (_exports, _powerSelectMultiple) {\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 _powerSelectMultiple.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select-multiple/trigger\", [\"exports\", \"ember-power-select/components/power-select-multiple/trigger\"], function (_exports, _trigger) {\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 _trigger.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select-with-create\", [\"exports\", \"ember-power-select-with-create/components/power-select-with-create\"], function (_exports, _powerSelectWithCreate) {\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 _powerSelectWithCreate.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select-with-create/suggested-option\", [\"exports\", \"ember-power-select-with-create/components/power-select-with-create/suggested-option\"], function (_exports, _suggestedOption) {\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 _suggestedOption.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select\", [\"exports\", \"ember-power-select/components/power-select\"], function (_exports, _powerSelect) {\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 _powerSelect.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select/before-options\", [\"exports\", \"ember-power-select/components/power-select/before-options\"], function (_exports, _beforeOptions) {\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 _beforeOptions.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select/options\", [\"exports\", \"ember-power-select/components/power-select/options\"], function (_exports, _options) {\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 _options.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select/placeholder\", [\"exports\", \"ember-power-select/components/power-select/placeholder\"], function (_exports, _placeholder) {\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 _placeholder.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select/power-select-group\", [\"exports\", \"ember-power-select/components/power-select/power-select-group\"], function (_exports, _powerSelectGroup) {\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 _powerSelectGroup.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select/search-message\", [\"exports\", \"ember-power-select/components/power-select/search-message\"], function (_exports, _searchMessage) {\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 _searchMessage.default;\n    }\n  });\n});","define(\"adept-iq/components/power-select/trigger\", [\"exports\", \"ember-power-select/components/power-select/trigger\"], function (_exports, _trigger) {\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 _trigger.default;\n    }\n  });\n});","define(\"adept-iq/components/radio-button-input\", [\"exports\", \"ember-radio-button/components/radio-button-input\"], function (_exports, _radioButtonInput) {\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 _radioButtonInput.default;\n    }\n  });\n});","define(\"adept-iq/components/radio-button\", [\"exports\", \"ember-radio-button/components/radio-button\"], function (_exports, _radioButton) {\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 _radioButton.default;\n    }\n  });\n});","define(\"adept-iq/components/range-slider\", [\"exports\", \"ui-slider/components/range-slider\"], function (_exports, _rangeSlider) {\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 _rangeSlider.default;\n    }\n  });\n});","define(\"adept-iq/components/resize-detector\", [\"exports\", \"ember-element-resize-detector/components/resize-detector\"], function (_exports, _resizeDetector) {\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 _resizeDetector.default;\n    }\n  });\n});","define(\"adept-iq/components/scroll-content-element\", [\"exports\", \"ember-scrollable/components/scroll-content-element\"], function (_exports, _scrollContentElement) {\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 _scrollContentElement.default;\n    }\n  });\n});","define(\"adept-iq/components/sortable-group\", [\"exports\", \"ember-sortable/components/sortable-group\"], function (_exports, _sortableGroup) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _sortableGroup.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/sortable-handle\", [\"exports\", \"ember-sortable/components/sortable-handle\"], function (_exports, _sortableHandle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _sortableHandle.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/sortable-item\", [\"exports\", \"ember-sortable/components/sortable-item\"], function (_exports, _sortableItem) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _sortableItem.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/spectrum-color-picker\", [\"exports\", \"ember-spectrum-color-picker/components/spectrum-color-picker\"], function (_exports, _spectrumColorPicker) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _spectrumColorPicker.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/ssn-input\", [\"exports\", \"ember-inputmask/components/ssn-input\"], function (_exports, _ssnInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssnInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/components/step-manager\", [\"exports\", \"ember-steps/components/step-manager\"], function (_exports, _stepManager) {\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 _stepManager.default;\n    }\n  });\n});","define(\"adept-iq/components/step-manager/step\", [\"exports\", \"ember-steps/components/step-manager/step\"], function (_exports, _step) {\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 _step.default;\n    }\n  });\n});","define(\"adept-iq/components/ui-slider\", [\"exports\", \"ui-slider/components/ui-slider\"], function (_exports, _uiSlider) {\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 _uiSlider.default;\n    }\n  });\n});","define(\"adept-iq/components/vertical-collection\", [\"exports\", \"@html-next/vertical-collection/components/vertical-collection/component\"], function (_exports, _component) {\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 _component.default;\n    }\n  });\n});","define(\"adept-iq/components/zip-code-input\", [\"exports\", \"ember-inputmask/components/zip-code-input\"], function (_exports, _zipCodeInput) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _zipCodeInput.default;\n  _exports.default = _default;\n});","define(\"adept-iq/config/api-urls\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MAP_PROVIDER = _exports.BUILD_VERSION = _exports.API = void 0;\n  const BUILD_VERSION = {\n    commitId: 'ba058e3'\n  }; // Build ba058e3\n  // S3 bucket iq.ui.aiqgreen.ddswireless.net\n\n  _exports.BUILD_VERSION = BUILD_VERSION;\n  const MAP_PROVIDER = 'dds_map';\n  _exports.MAP_PROVIDER = MAP_PROVIDER;\n  const API = {\n    aboutPageService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/1.0/versions'\n    },\n    addressService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/address'\n    },\n    avlService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/avl'\n    },\n    avlmService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/avlm'\n    },\n    avlmBookingService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/rider-booking'\n    },\n    bookingService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/booking'\n    },\n    configService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/config'\n    },\n    dispatchService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/dispatch'\n    },\n    driverService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/driver'\n    },\n    etaService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/eta'\n    },\n    geocodeService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/geocoding'\n    },\n    riderManagementService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/rider-management'\n    },\n    schedulingService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/scheduling'\n    },\n    ssoService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/sso',\n      useMirage: false\n    },\n    vehicleService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/vehicle'\n    },\n    streamingService: {\n      host: 'wss://iquxsvc.aiqgreen.ddswireless.net:443'\n    },\n    continuousOptService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/continuous-opt'\n    },\n    tomtom: {\n      host: 'https://api.tomtom.com/'\n    },\n    iquxService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/iqux-service'\n    },\n    playbackService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/playback'\n    },\n    reconciliationService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/reconciliation'\n    },\n    tableauService: {\n      host: 'https://aiq-tableau.ddswireless.com'\n    },\n    helpPage: {\n      host: '/help-files'\n    },\n    fixedRouteEngineService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/fres'\n    },\n    benomad: {\n      host: 'https://serviceohio.mbtabenomad.ddsdeploytest.com',\n      domain: 'serviceohio.mbtabenomad.ddsdeploytest.com'\n    },\n    weatherAPI: {\n      host: 'https://api.weather.gov/points/'\n    },\n    playbackNewService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/iq-s3-data-server'\n    },\n    reportService: {\n      host: 'https://manage2.ddswireless.com/report-service',\n      baseURL: 'https://reports.ddswireless.net/jasperserver-pro/flow.html',\n      companyName: 'iq.aiqgreen.ddswireless.net'\n    },\n    ReconciliationNewService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/s3reconciliation'\n    },\n    fareCalcService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/fcs'\n    },\n    dwhService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/data-service'\n    },\n    iqMap: {\n      host: 'https://iq.aiqgreen.ddswireless.net/iq-map'\n    },\n    initiationService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/notification-initiation'\n    },\n    google: {\n      host: 'https://maps.googleapis.com'\n    },\n    // DDS Seamless Maps (mapProvider = 'dds_map'): vector tiles.\n    // The key is the publishable tile/geocode key, the same one embedded in the\n    // sr-app and new-raas-ui client builds.\n    ddsMap: {\n      host: 'https://seamlessmaps-api.ddswireless.net',\n      mapTileApiKey: 'pk_live_b1c4424d8494.-tSsJfoGYi18Nv4tdbuy-j_t4xesjpjNLbyfaTNU_do'\n    },\n    neo4jService: {\n      host: 'https://iq.aiqgreen.ddswireless.net/neo4j'\n    }\n  };\n  _exports.API = API;\n});","define(\"adept-iq/config/cell-item-types\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/otp-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/otp-value-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/perform-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/date-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/date-local-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/time-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/time-local-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/availability-cell\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/read-time-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/travel-needs-cell\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/status-reason-cell\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/service-needs-cell\"], function (_exports, _cellItem, _otpCellItem, _otpValueCellItem, _performCellItem, _dateCellItem, _dateLocalCellItem, _timeCellItem, _timeLocalCellItem, _availabilityCell, _readTimeCellItem, _travelNeedsCell, _statusReasonCell, _serviceNeedsCell) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CellItemTypes = {\n    'CellItem': _cellItem.default,\n    'OTPCellItem': _otpCellItem.default,\n    'OTPValueCellItem': _otpValueCellItem.default,\n    'PerformCellItem': _performCellItem.default,\n    'TimeCellItem': _timeCellItem.default,\n    'TimeLocalCellItem': _timeLocalCellItem.default,\n    'DateCellItem': _dateCellItem.default,\n    'DateLocalCellItem': _dateLocalCellItem.default,\n    'AvailabilityCell': _availabilityCell.default,\n    'TravelNeedsCell': _travelNeedsCell.default,\n    'ReadTimeCellItem': _readTimeCellItem.default,\n    'StatusReasonCell': _statusReasonCell.default,\n    'ServiceNeedsCell': _serviceNeedsCell.default\n  };\n  var _default = CellItemTypes;\n  _exports.default = _default;\n});","define(\"adept-iq/config/column-types\", [\"exports\", \"adept-iq/config/filter-types\", \"adept-iq/config/comparison-functions\"], function (_exports, _filterTypes, _comparisonFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.uuidColumnType = _exports.timeColumnType = _exports.textColumnType = _exports.stringColumnType = _exports.phoneColumnType = _exports.numberColumnType = _exports.integerColumnType = _exports.floatColumnType = _exports.enumDateColumnType = _exports.enumColumnType = _exports.default = _exports.dateTimeColumnType = _exports.dateColumnType = _exports.columnTypesHash = _exports.columnTypes = _exports.booleanColumnType = void 0;\n  const uuidColumnType = {\n    id: 'uuid',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.stringEq, _filterTypes.stringNotEq, _filterTypes.stringContains, _filterTypes.stringStartsWith, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.stringContains,\n    compare: _comparisonFunctions.numberCompare\n  };\n  _exports.uuidColumnType = uuidColumnType;\n  const booleanColumnType = {\n    id: 'boolean',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.booleanEq, _filterTypes.booleanNe, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.booleanEq,\n    compare: _comparisonFunctions.booleanCompare\n  };\n  _exports.booleanColumnType = booleanColumnType;\n  const stringColumnType = {\n    id: 'string',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.stringEq, _filterTypes.stringNotEq, _filterTypes.stringContains, _filterTypes.stringStartsWith, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.stringContains,\n    compare: _comparisonFunctions.stringCompare\n  }; // alias for string\n\n  _exports.stringColumnType = stringColumnType;\n  const textColumnType = {\n    id: 'text',\n    filterTypes: stringColumnType.filterTypes,\n    searchFilterType: stringColumnType.searchFilterType,\n    compare: stringColumnType.compare\n  };\n  _exports.textColumnType = textColumnType;\n  const phoneColumnType = {\n    id: 'phone',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.stringEq, _filterTypes.stringContains, _filterTypes.stringStartsWith, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.stringContains,\n    compare: _comparisonFunctions.stringCompare\n  };\n  _exports.phoneColumnType = phoneColumnType;\n  const numberColumnType = {\n    id: 'number',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.numberEq, _filterTypes.numberNotEq, _filterTypes.numberLt, _filterTypes.numberLte, _filterTypes.numberGt, _filterTypes.numberGte, _filterTypes.numberBetween, _filterTypes.numberStrictlyBetween, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.numberEq,\n    compare: _comparisonFunctions.numberCompare\n  };\n  _exports.numberColumnType = numberColumnType;\n  const integerColumnType = {\n    id: 'integer',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.integerEq, _filterTypes.numberNotEq, _filterTypes.numberLt, _filterTypes.numberLte, _filterTypes.numberGt, _filterTypes.numberGte, _filterTypes.numberBetween, _filterTypes.numberStrictlyBetween, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.integerEq,\n    compare: _comparisonFunctions.numberCompare\n  };\n  _exports.integerColumnType = integerColumnType;\n  const floatColumnType = {\n    id: 'float',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.numberEq, _filterTypes.numberNotEq, _filterTypes.numberLt, _filterTypes.numberLte, _filterTypes.numberGt, _filterTypes.numberGte, _filterTypes.numberBetween, _filterTypes.numberStrictlyBetween, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.numberEq,\n    compare: _comparisonFunctions.numberCompare\n  };\n  _exports.floatColumnType = floatColumnType;\n  const dateColumnType = {\n    id: 'date',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.dateStrEq, _filterTypes.dateStrNe, _filterTypes.dateLt, _filterTypes.dateLte, _filterTypes.dateGt, _filterTypes.dateGte, _filterTypes.dateBetween, _filterTypes.dateStrictlyBetween, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.dateStrEq,\n    compare: _comparisonFunctions.dateCompare\n  }; // alias for date\n\n  _exports.dateColumnType = dateColumnType;\n  const dateTimeColumnType = {\n    id: 'datetime',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.dateStrEq, _filterTypes.dateStrNe, _filterTypes.dateLt, _filterTypes.dateAndTimeLte, _filterTypes.dateAndTimeGt, _filterTypes.dateGte, _filterTypes.dateBetween, _filterTypes.dateStrictlyBetween, _filterTypes.emptyFilter],\n    searchFilterType: dateColumnType.searchFilterType,\n    compare: dateColumnType.compare\n  }; // alias for date\n\n  _exports.dateTimeColumnType = dateTimeColumnType;\n  const timeColumnType = {\n    id: 'time',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.timeNe, _filterTypes.timeEq, _filterTypes.timeLt, _filterTypes.timeLte, _filterTypes.timeGt, _filterTypes.timeGte, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.timeStrEq,\n    compare: dateColumnType.compare\n  };\n  _exports.timeColumnType = timeColumnType;\n  const enumColumnType = {\n    id: 'enum',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.enumEq, _filterTypes.enumNotEq, _filterTypes.enumContains, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.enumContains,\n    compare: _comparisonFunctions.stringCompare\n  };\n  _exports.enumColumnType = enumColumnType;\n  const enumDateColumnType = {\n    id: 'enum-date',\n    filterTypes: [_filterTypes.nullFilter, _filterTypes.dateContains, _filterTypes.dateContainsGte, _filterTypes.dateContainsLte, _filterTypes.emptyFilter],\n    searchFilterType: _filterTypes.dateContains,\n    compare: _comparisonFunctions.stringCompare\n  };\n  _exports.enumDateColumnType = enumDateColumnType;\n  const columnTypes = [uuidColumnType, booleanColumnType, stringColumnType, textColumnType, phoneColumnType, numberColumnType, integerColumnType, floatColumnType, timeColumnType, dateColumnType, dateTimeColumnType, enumColumnType, enumDateColumnType];\n  _exports.columnTypes = columnTypes;\n  const columnTypesHash = columnTypes.reduce((obj, columnType) => {\n    obj[columnType.id] = columnType;\n    return obj;\n  }, {});\n  _exports.columnTypesHash = columnTypesHash;\n  var _default = columnTypes;\n  _exports.default = _default;\n});","define(\"adept-iq/config/comparison-functions\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.booleanCompare = booleanCompare;\n  _exports.dateCompare = dateCompare;\n  _exports.default = void 0;\n  _exports.nullCompare = nullCompare;\n  _exports.numberCompare = numberCompare;\n  _exports.stringCompare = stringCompare;\n\n  function nullCompare(a, b) {\n    return Ember.guidFor(a).localeCompare(Ember.guidFor(b));\n  }\n\n  function stringCompare(a, b) {\n    if (Ember.typeOf(a) !== 'string' && Ember.typeOf(b) !== 'string') return 0;\n    if (Ember.typeOf(a) !== 'string') return 1;\n    if (Ember.typeOf(b) !== 'string') return -1;\n    return a.localeCompare(b);\n  }\n\n  function numberCompare(a, b) {\n    const aIsNone = Ember.isNone(a);\n    const bIsNone = Ember.isNone(b); // can't compare two null things\n\n    if (aIsNone && bIsNone) return 0; // null things come after non-null\n\n    if (aIsNone) return 1;\n    if (bIsNone) return -1;\n    const x = parseFloat(a);\n    const y = parseFloat(b);\n    const xIsNaN = isNaN(x);\n    const yIsNaN = isNaN(y); // can't compare two non-numeric things\n\n    if (xIsNaN && yIsNaN) return 0; // non-numeric things come after numeric things\n\n    if (xIsNaN) return 1;\n    if (yIsNaN) return -1;\n    return x - y;\n  }\n\n  function booleanCompare(a, b) {\n    if (Ember.typeOf(a) !== 'boolean' && Ember.typeOf(b) !== 'boolean') return 0;\n    if (Ember.typeOf(a) !== 'boolean') return 1;\n    if (Ember.typeOf(b) !== 'boolean') return -1;\n    if (a && b || !a && !b) return 0;\n    if (a) return -1;\n    return 1;\n  }\n\n  function dateCompare(a, b) {\n    const _a = new Date(a);\n\n    const _b = new Date(b);\n\n    if (Ember.typeOf(_a) !== 'date' && Ember.typeOf(_b) !== 'date') return 0; // Add invalid date parsing check\n\n    if (Ember.typeOf(_a) !== 'date' || Ember.typeOf(_a) === 'date' && isNaN(_a.getTime())) return 1;\n    if (Ember.typeOf(_b) !== 'date' || Ember.typeOf(_b) === 'date' && isNaN(_b.getTime())) return -1;\n    return _a.getTime() - _b.getTime();\n  }\n\n  var _default = [nullCompare, stringCompare, numberCompare, booleanCompare, dateCompare];\n  _exports.default = _default;\n});","define(\"adept-iq/config/config-object-template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // fieldName: the name of the object field name\n  // displayName: The display name we want to show on the form\n  // type: The type of field. eg. string, boolean, int\n  // radioButton: This group of boolean can only have 1 selected.\n  var _default = {\n    'config-Driving_Configuration-No_Show_reason_code': {\n      categoryPath: 'config-Driving_Configuration-No_Show_reason_code',\n      fields: [{\n        fieldName: 'noShowReason',\n        displayName: 'No Show Reason',\n        type: 'string'\n      }]\n    },\n    'config-Driving_Configuration-voip_call_phone_numbers': {\n      categoryPath: 'config-Driving_Configuration-voip_call_phone_numbers',\n      fields: [{\n        fieldName: 'buttonLabel',\n        displayName: 'Button Label',\n        type: 'string'\n      }, {\n        fieldName: 'phoneNumber',\n        displayName: 'Phone Number',\n        type: 'string'\n      }]\n    },\n    'config-Canned_Messages-to_dispatch': {\n      categoryPath: 'config-Canned_Messages-to_dispatch',\n      fields: [{\n        fieldName: 'message',\n        displayName: 'Message',\n        type: 'string'\n      }]\n    },\n    'config-Canned_Messages-to_driver': {\n      categoryPath: 'config-Canned_Messages-to_driver',\n      fields: [{\n        fieldName: 'message',\n        displayName: 'Message',\n        type: 'string'\n      }]\n    },\n    'config-Scheduling-schedule_configurations': {\n      categoryPath: 'config-Scheduling-schedule_configurations',\n      fields: [{\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'isReadOnly',\n        displayName: 'Read Only?',\n        type: 'boolean'\n      }]\n    },\n    'config-Scheduling-service_windows': {\n      categoryPath: 'config-Scheduling-service_windows',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'dropWindowEnd',\n        displayName: 'Drop Window End',\n        type: 'int'\n      }, {\n        fieldName: 'dropWindowStart',\n        displayName: 'Drop Window Start',\n        type: 'int'\n      }, {\n        fieldName: 'promiseWindowEnd',\n        displayName: 'Promised Window End',\n        type: 'int'\n      }, {\n        fieldName: 'promiseWindowStart',\n        displayName: 'Promised Window Start',\n        type: 'int'\n      }, {\n        fieldName: 'scheduleConfigurationName',\n        displayName: 'Schedule Configuration Name',\n        type: 'string'\n      }, {\n        fieldName: 'searchWindowEnd',\n        displayName: 'Search Window End',\n        type: 'int'\n      }, {\n        fieldName: 'searchWindowStart',\n        displayName: 'Search Window Start',\n        type: 'int'\n      }, {\n        fieldName: 'serviceType',\n        displayName: 'Service Type',\n        type: 'int'\n      }]\n    },\n    'config-System_Configuration-break_types': {\n      categoryPath: 'config-System_Configuration-break_types',\n      fields: [{\n        fieldName: 'defaultDuration',\n        displayName: 'Default Duration',\n        type: 'int'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'isPaid',\n        displayName: 'Paid?',\n        type: 'boolean'\n      }, {\n        fieldName: 'isRecognized',\n        displayName: 'Recognized?',\n        type: 'boolean'\n      }, {\n        fieldName: 'scheduleConfigurationName',\n        displayName: 'Schedule Configuration Name',\n        type: 'string'\n      }, {\n        fieldName: 'serviceWindowName',\n        displayName: 'Service Window Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-cancel_types': {\n      categoryPath: 'config-System_Configuration-cancel_types',\n      fields: [{\n        fieldName: 'code',\n        displayName: 'Code',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'externalCode',\n        displayName: 'External Code',\n        type: 'string'\n      }, {\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-eligibility_types': {\n      categoryPath: 'config-System_Configuration-eligibility_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-eligibility_categories': {\n      categoryPath: 'config-System_Configuration-eligibility_categories',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'type',\n        displayName: 'Type',\n        type: 'string'\n      }, {\n        fieldName: 'denyService',\n        displayName: 'Deny Service ',\n        type: 'boolean'\n      }, {\n        fieldName: 'conditional',\n        displayName: 'Conditional',\n        type: 'boolean'\n      }, {\n        fieldName: 'checkADABoundary',\n        displayName: 'Check ADA Boundary',\n        type: 'boolean'\n      }]\n    },\n    'config-System_Configuration-eligibility_conditions': {\n      categoryPath: 'config-System_Configuration-eligibility_conditions',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'configuredValue ',\n        displayName: 'Configured value',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-fare_categories': {\n      categoryPath: 'config-System_Configuration-fare_categories',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'amount',\n        displayName: 'Amount',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-fare_types': {\n      categoryPath: 'config-System_Configuration-fare_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-no_show_reason_codes': {\n      categoryPath: 'config-System_Configuration-no_show_reason_codes',\n      fields: [{\n        fieldName: 'code',\n        displayName: 'Code',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'externalCode',\n        displayName: 'External Code',\n        type: 'string'\n      }, {\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'driverAppDefault',\n        displayName: 'Make default on driver app',\n        type: 'boolean',\n        radioButton: true\n      }]\n    },\n    'config-System_Configuration-no_show_reason_categories': {\n      categoryPath: 'config-System_Configuration-no_show_reason_categories',\n      isCustomizedPanel: true,\n      customizedPanel: 'no-show-reason-categories',\n      fields: [{\n        fieldName: 'code',\n        displayName: 'Code',\n        type: 'string'\n      }, {\n        fieldName: 'driverNeedsApproval',\n        displayName: 'Driver Needs Approval',\n        type: 'boolean'\n      }, {\n        fieldName: 'minutesFromPromiseTimeEnd',\n        displayName: 'Minutes from Promise Time: End',\n        type: 'int'\n      }, {\n        fieldName: 'minutesFromPromiseTimeStart',\n        displayName: 'Minutes from Promise Time: Start',\n        type: 'int'\n      }, {\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-provider_types': {\n      categoryPath: 'config-System_Configuration-provider_types',\n      fields: [{\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-driver_positions': {\n      categoryPath: 'config-System_Configuration-driver_positions',\n      fields: [{\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Description',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-provider_zones': {\n      categoryPath: 'config-System_Configuration-provider_zones',\n      fields: [{\n        fieldName: 'providerName',\n        displayName: 'Provider Name',\n        type: 'string'\n      }, {\n        fieldName: 'zoneName',\n        displayName: 'Zone Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-providers': {\n      categoryPath: 'config-System_Configuration-providers',\n      fields: [{\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'primaryProviderName',\n        displayName: 'Primary Provider Name',\n        type: 'string'\n      }, {\n        fieldName: 'primaryTypeName',\n        displayName: 'Primary Type Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-travel_need_types': {\n      categoryPath: 'config-System_Configuration-travel_need_types',\n      fields: [{\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'displayOrder',\n        displayName: 'Display Order',\n        type: 'int'\n      }, {\n        fieldName: 'loadTime',\n        displayName: 'Load Time',\n        type: 'int'\n      }, {\n        fieldName: 'unloadTime',\n        displayName: 'Unload Time',\n        type: 'int'\n      }, {\n        fieldName: 'vehicleCapacityCount',\n        displayName: 'Vehicle Capacity Count',\n        type: 'int'\n      }, {\n        fieldName: 'vehicleCapacityType',\n        displayName: 'Vehicle Capacity Type',\n        type: 'string'\n      }, {\n        fieldName: 'fareCalculationType',\n        displayName: 'Fare Calculation Type',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-service_needs_types': {\n      categoryPath: 'config-System_Configuration-service_needs_types',\n      fields: [{\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-travel_modes': {\n      categoryPath: 'config-System_Configuration-travel_modes',\n      fields: [{\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'id',\n        displayName: 'ID',\n        type: 'int'\n      }, {\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-vehicle_capacity_configs': {\n      categoryPath: 'config-System_Configuration-vehicle_capacity_configs',\n      fields: [{\n        fieldName: 'count',\n        displayName: 'Count',\n        type: 'int'\n      }, {\n        fieldName: 'group',\n        displayName: 'Group',\n        type: 'int'\n      }, {\n        fieldName: 'vehicleCapacityType',\n        displayName: 'Vehicle Capacity Type',\n        type: 'string'\n      }, {\n        fieldName: 'vehicleType',\n        displayName: 'Vehicle Type',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-vehicle_capacity_types': {\n      categoryPath: 'config-System_Configuration-vehicle_capacity_types',\n      fields: [{\n        fieldName: 'constrainedByLIFO',\n        displayName: 'Constraint By LIFO',\n        type: 'boolean'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'dwellFactor',\n        displayName: 'Dwell Factor',\n        type: 'int'\n      }, {\n        fieldName: 'engineId',\n        displayName: 'Engine ID',\n        type: 'string'\n      }, {\n        fieldName: 'engineName',\n        displayName: 'Engine Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-vehicle_types': {\n      categoryPath: 'config-System_Configuration-vehicle_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-zones': {\n      categoryPath: 'config-System_Configuration-zones',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-breakdown_types': {\n      categoryPath: 'config-System_Configuration-breakdown_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-borough': {\n      categoryPath: 'config-System_Configuration-borough',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-holidays': {\n      categoryPath: 'config-System_Configuration-holidays',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'date',\n        displayName: 'Date',\n        type: 'string'\n      }, {\n        fieldName: 'notificationDate',\n        displayName: 'Notification Date',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-ITP_Blockoutdate': {\n      categoryPath: 'config-System_Configuration-ITP_Blockoutdate',\n      fields: [{\n        fieldName: 'name',\n        displayName: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'fromDate',\n        displayName: 'From date(MM/DD/YYYY)',\n        type: 'string'\n      }, {\n        fieldName: 'fromTime',\n        displayName: 'From Time(HH:MM a)',\n        type: 'string'\n      }, {\n        fieldName: 'toDate',\n        displayName: 'To date(MM/DD/YYYY)',\n        type: 'string'\n      }, {\n        fieldName: 'toTime',\n        displayName: 'To Time(HH:MM a)',\n        type: 'string'\n      }, {\n        fieldName: 'recursDaily',\n        displayName: 'Recurs Daily(Yes/No)',\n        type: 'boolean'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-route': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-route',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-trip': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-trip',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-vehicle': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-vehicle',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-user': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-user',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-driver_physical_types': {\n      categoryPath: 'config-System_Configuration-driver_physical_types',\n      fields: [{\n        fieldName: 'name',\n        Name: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        Name: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Zip_Codes': {\n      categoryPath: 'config-System_Configuration-Zip_Codes',\n      fields: [{\n        fieldName: 'allowBrokerTrips',\n        displayName: 'Allow Broker Trips',\n        type: 'boolean'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-booking': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-booking',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-subscription': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-subscription',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-driver_statuses': {\n      categoryPath: 'config-System_Configuration-driver_statuses',\n      fields: [{\n        fieldName: 'name',\n        Name: 'Name',\n        type: 'string'\n      }, {\n        fieldName: 'displayName',\n        displayName: 'Description',\n        Name: 'Description',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-rider_relationship_types': {\n      categoryPath: 'config-System_Configuration-rider_relationship_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-rider_phone_types': {\n      categoryPath: 'config-System_Configuration-rider_phone_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-certification_denied_reasons': {\n      categoryPath: 'config-System_Configuration-certification_denied_reasons',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-suspension_reasons': {\n      categoryPath: 'config-System_Configuration-suspension_reasons',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'description',\n        displayName: 'Description',\n        type: 'string'\n      }, {\n        fieldName: 'length(days)',\n        displayName: 'Length(days)',\n        type: 'int'\n      }]\n    },\n    'config-System_Configuration-funding_agencies': {\n      categoryPath: 'config-System_Configuration-funding_agencies',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }, {\n        fieldName: 'address',\n        displayName: 'Address',\n        type: 'string'\n      }, {\n        fieldName: 'phone',\n        displayName: 'Phone',\n        type: 'string'\n      }, {\n        fieldName: 'email',\n        displayName: 'Email',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-contact_reason_types': {\n      categoryPath: 'config-System_Configuration-contact_reason_types',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Trip_Purposes': {\n      categoryPath: 'config-System_Configuration-Trip_Purposes',\n      fields: [{\n        fieldName: 'displayName',\n        displayName: 'Display Name',\n        type: 'string'\n      }]\n    },\n    'config-System_Configuration-Activity_Log_Types-rider': {\n      categoryPath: 'config-System_Configuration-Activity_Log_Types-rider',\n      fields: [{\n        fieldName: 'Name',\n        displayName: 'Name',\n        type: 'string'\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/config/config-value-validation\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // config value validation\n  var _default = {\n    'config-Route_parameters/routeMaxTimeLimit': {\n      validation: {\n        type: 'int',\n        min: 0,\n        max: 9999,\n        errorMessage: 'should have a value of 0 to 9999'\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/config/cs-config-model-category\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.modelNameForCategory = void 0;\n  // you must register any model that is serialized to a config item here\n  const modelNameForCategory = {\n    'config-Scheduling-schedule_configurations': 'schedule-configuration',\n    'config-Scheduling-service_windows': 'service-window',\n    'config-System_Configuration-Activity_Log_Types-trip': 'trip-activity-log-type',\n    'config-Activity_Log_Types-vehicle': 'vehicle-activity-log-type',\n    'config-System_Configuration-Activity_Log_Types-route': 'route-activity-log-type',\n    'config-Activity_Log_Types-user': 'user-activity-log-type',\n    'config-System_Configuration-break_types': 'break-type',\n    'config-System_Configuration-cancel_types': 'cancel-type',\n    'config-System_Configuration-eligibility_types': 'eligibility-type',\n    'config-System_Configuration-eligibility_categories': 'eligibility-category',\n    'config-System_Configuration-fare_types': 'fare-type',\n    'config-System_Configuration-no_show_reason_codes': 'no-show-reason-code',\n    'config-System_Configuration-passenger_types': 'passenger-type',\n    'config-System_Configuration-place_category_types': 'place-category-type',\n    'config-System_Configuration-providers': 'provider',\n    'config-System_Configuration-travel_need_types': 'travel-need-type',\n    'config-System_Configuration-vehicle_capacity_configs': 'vehicle-capacity-config',\n    'config-System_Configuration-vehicle_capacity_types': 'vehicle-capacity-type',\n    'config-System_Configuration-vehicle_types': 'vehicle-type',\n    'config-System_Configuration-breakdown_types': 'breakdown-type',\n    'config-System_Configuration-zones': 'zone-type',\n    'config-System_Configuration-rider_place_types': 'rider-place-type',\n    'config-System_Configuration-provider_types': 'provider-type',\n    'config-System_Configuration-driver_physical_types': 'driver-physical-type-name',\n    'config-System_Configuration-driver_positions': 'driver-position-name',\n    'config-System_Configuration-driver_statuses': 'employment-status-name',\n    'config-System_Configuration-vehicle_maint_types': 'maintenance-type-name',\n    'config-System_Configuration-vehicle_maint_statuses': 'maintenance-status-name',\n    'config-System_Configuration-vehicle_maint_locations': 'maintenance-location-name',\n    'config-System_Configuration-vehicle_problem_identified': 'problem-identified-name',\n    'config-System_Configuration-vehicle_inspectors': 'inspector-name',\n    'config-System_Configuration-CDL_classifications': 'classification-name',\n    'config-System_Configuration-vehicle_road_call_codes': 'road-call-code-name',\n    'config-System_Configuration-typeOfDate': 'exam-type-name',\n    'config-System_Configuration-vehicle_manufacturers': 'manufacturer-name',\n    'config-System_Configuration-vehicle_statuses': 'vehicle-status-name',\n    'config-System_Configuration-vehicle_inspector_categories': 'inspection-category',\n    'config-System_Configuration-vehicle_tire-sizes': 'vehicle-tire-size',\n    'config-System_Configuration-termination_reasons': 'termination-reason-name',\n    'config-System_Configuration-vehicle_body_types': 'vehicle-body-type',\n    'config-System_Configuration-vehicle_fuel_caps': 'vehicle-fuel-cap',\n    'config-System_Configuration-vehicle_chassis': 'vehicle-chassis',\n    'config-System_Configuration-vehicle_body_widths': 'vehicle-body-width',\n    'config-System_Configuration-vehicle_lease_companies': 'lease-company',\n    'config-System_Configuration-vehicle_models': 'vehicle-model-name',\n    'config-System_Configuration-vehicle_fuel_types': 'vehicle-fuel-type',\n    'config-System_Configuration-vehicle_wheel_base_types': 'vehicle-wheelbase-type',\n    'config-System_Configuration-vehicle_rear_axels': 'rear-axel-name',\n    'config-System_Configuration-vehicle_transmission_types': 'vehicle-transmission',\n    'config-System_Configuration-wc_lift_types': 'vehicle-wc-lift-type',\n    'config-System_Configuration-no_show_reason_categories': 'no-show-reason-category',\n    'config-System_Configuration-Zip_Codes': 'zip-code',\n    'config-System_Configuration-service_needs_types': 'service-need-type',\n    'config-System_Configuration-Activity_Log_Types-booking': 'booking-activity-log-type',\n    'config-System_Configuration-Activity_Log_Types-subscription': 'subscription-activity-log-type',\n    'config-System_Configuration-speed_region_groups': 'speed-region-group',\n    'config-System_Configuration-fare_categories': 'fare-category',\n    'config-System_Configuration-eligibility_conditions': 'eligibility-condition',\n    'config-System_Configuration-funding_agencies': 'funding-agency',\n    'config-System_Configuration-internal_ui_configs': 'internal-ui-config',\n    'config-System_Configuration-Trip_Purposes': 'trip-purpose'\n  };\n  _exports.modelNameForCategory = modelNameForCategory;\n});","define(\"adept-iq/config/filter-types\", [\"exports\", \"adept-iq/utils/encoding\", \"adept-iq/utils/rql-generators\", \"adept-iq/utils/filter-functions\", \"adept-iq/utils/format-function\"], function (_exports, _encoding, _rqlGenerators, _filterFunctions, _formatFunction) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.uuidIn = _exports.uuidEq = _exports.timeStrEq = _exports.timeNe = _exports.timeLte = _exports.timeLt = _exports.timeGte = _exports.timeGt = _exports.timeEq = _exports.stringStartsWith = _exports.stringNotEq = _exports.stringEq = _exports.stringContains = _exports.numberStrictlyNotBetween = _exports.numberStrictlyBetween = _exports.numberNotEq = _exports.numberLte = _exports.numberLt = _exports.numberGte = _exports.numberGt = _exports.numberEq = _exports.numberBetween = _exports.nullFilter = _exports.integerEq = _exports.filterTypesHash = _exports.filterTypes = _exports.enumStringEq = _exports.enumNotEq = _exports.enumEq = _exports.enumContains = _exports.emptyFilter = _exports.dateStrictlyBetween = _exports.dateStrNotBetween = _exports.dateStrNe = _exports.dateStrEq = _exports.dateNotBetween = _exports.dateNe = _exports.dateLte = _exports.dateLt = _exports.dateGte = _exports.dateGt = _exports.dateEq = _exports.dateContainsLte = _exports.dateContainsGte = _exports.dateContains = _exports.dateBetween = _exports.dateAndTimeLte = _exports.dateAndTimeGt = _exports.booleanNe = _exports.booleanEq = void 0;\n  const nullFilter = {\n    id: 'null',\n    label: '&nbsp;',\n    arity: '*',\n    isValue: () => true,\n    parseValue: x => x,\n    fn: _filterFunctions.nullFn,\n    rql: _rqlGenerators.nullRQL\n  };\n  _exports.nullFilter = nullFilter;\n  const emptyFilter = {\n    id: 'empty',\n    label: 'Empty',\n    arity: 0,\n    isValue: () => true,\n    parseValue: x => x,\n    fn: _filterFunctions.emptyFn,\n    rql: _rqlGenerators.emptyRQL\n  };\n  _exports.emptyFilter = emptyFilter;\n  const uuidEq = {\n    id: 'uuidEq',\n    label: 'Equals',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.eqFn,\n    rql: _rqlGenerators.eqRQL\n  };\n  _exports.uuidEq = uuidEq;\n  const uuidIn = {\n    id: 'uuidIn',\n    label: 'In',\n    arity: '+',\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.includesFn,\n    rql: _rqlGenerators.inRQL\n  };\n  _exports.uuidIn = uuidIn;\n  const stringEq = {\n    id: 'stringEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.stringEqIFn,\n    rql: _rqlGenerators.stringEqRQL\n  };\n  _exports.stringEq = stringEq;\n  const stringNotEq = {\n    id: 'stringNotEq',\n    label: '&ne;',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.stringNeIFn,\n    rql: _rqlGenerators.stringNeRQL\n  };\n  _exports.stringNotEq = stringNotEq;\n  const stringContains = {\n    id: 'stringContains',\n    label: 'Contains',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.stringIncludesIFn,\n    rql: _rqlGenerators.stringLikeRQL\n  };\n  _exports.stringContains = stringContains;\n  const stringStartsWith = {\n    id: 'stringStartsWith',\n    label: 'StartsWith',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.stringStartsWithIFn,\n    rql: _rqlGenerators.stringStartsWithRQL\n  };\n  _exports.stringStartsWith = stringStartsWith;\n  const dateContains = {\n    id: 'dateContains',\n    label: 'Contains',\n    airty: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.dateIncludesIFn,\n    rql: _rqlGenerators.dateEqRQL\n  };\n  _exports.dateContains = dateContains;\n  const dateContainsLte = {\n    id: 'dateContainsLte',\n    label: 'At or Before',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.dateIncludesLteFn,\n    rql: _rqlGenerators.dateEqRQL\n  };\n  _exports.dateContainsLte = dateContainsLte;\n  const dateContainsGte = {\n    id: 'dateContainsGte',\n    label: 'At or After',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.dateIncludesGteFn,\n    rql: _rqlGenerators.dateEqRQL\n  };\n  _exports.dateContainsGte = dateContainsGte;\n  const enumStringEq = {\n    id: 'enumStringEq',\n    label: 'in',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    fn: _filterFunctions.enumStEqIFn,\n    rql: _rqlGenerators.stringEnumRQL\n  };\n  _exports.enumStringEq = enumStringEq;\n  const enumEq = {\n    id: 'enumEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    formatTargetValue: _formatFunction.formatEnumValue,\n    fn: _filterFunctions.stringEqIFn,\n    rql: _rqlGenerators.stringLikeRQL\n  };\n  _exports.enumEq = enumEq;\n  const enumNotEq = {\n    id: 'enumNotEq',\n    label: '&ne;',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    formatTargetValue: _formatFunction.formatEnumValue,\n    fn: _filterFunctions.stringNeIFn,\n    rql: _rqlGenerators.stringNotLikeRQL\n  };\n  _exports.enumNotEq = enumNotEq;\n  const enumContains = {\n    id: 'enumContains',\n    label: 'Contains',\n    arity: 1,\n    isValue: _encoding.isNonEmptyString,\n    parseValue: _encoding.parseString,\n    formatTargetValue: _formatFunction.formatEnumValue,\n    fn: _filterFunctions.stringIncludesIFn,\n    rql: _rqlGenerators.stringLikeRQL\n  };\n  _exports.enumContains = enumContains;\n  const booleanEq = {\n    id: 'booleanEq',\n    label: 'Is',\n    arity: 1,\n    isValue: _encoding.isEncodedBoolean,\n    parseValue: _encoding.parseBoolean,\n    fn: _filterFunctions.eqFn,\n    rql: _rqlGenerators.eqRQL // TODO: double check\n\n  };\n  _exports.booleanEq = booleanEq;\n  const booleanNe = {\n    id: 'booleanNe',\n    label: 'Is not',\n    arity: 1,\n    isValue: _encoding.isEncodedBoolean,\n    parseValue: _encoding.parseBoolean,\n    fn: _filterFunctions.neFn,\n    rql: _rqlGenerators.neRQL // TODO: double check\n\n  };\n  _exports.booleanNe = booleanNe;\n  const numberEq = {\n    id: 'numberEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.eqFn,\n    rql: _rqlGenerators.eqRQL\n  };\n  _exports.numberEq = numberEq;\n  const numberNotEq = {\n    id: 'numberNotEq',\n    label: '&ne;',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.neFn,\n    rql: _rqlGenerators.neRQL\n  };\n  _exports.numberNotEq = numberNotEq;\n  const numberLt = {\n    id: 'numberLt',\n    label: '&lt;',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.ltFn,\n    rql: _rqlGenerators.ltRQL\n  };\n  _exports.numberLt = numberLt;\n  const numberLte = {\n    id: 'numberLte',\n    label: '&le;',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.lteFn,\n    rql: _rqlGenerators.lteRQL\n  };\n  _exports.numberLte = numberLte;\n  const numberGt = {\n    id: 'numberGt',\n    label: '&gt;',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.gtFn,\n    rql: _rqlGenerators.gtRQL\n  };\n  _exports.numberGt = numberGt;\n  const numberGte = {\n    id: 'numberGte',\n    label: '&ge;',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.gteFn,\n    rql: _rqlGenerators.gteRQL\n  };\n  _exports.numberGte = numberGte;\n  const numberBetween = {\n    id: 'numberBetween',\n    label: 'Between',\n    arity: 2,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.betweenFn,\n    rql: _rqlGenerators.betweenRQL\n  };\n  _exports.numberBetween = numberBetween;\n  const numberStrictlyBetween = {\n    id: 'numberStrictlyBetween',\n    label: 'Strictly Between',\n    arity: 2,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.strictlyBetweenFn,\n    rql: _rqlGenerators.strictlyBetweenRQL\n  };\n  _exports.numberStrictlyBetween = numberStrictlyBetween;\n  const numberStrictlyNotBetween = {\n    id: 'numberStrictlyNotBetween',\n    label: 'Strictly Not Between',\n    arity: 2,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseNumber,\n    fn: _filterFunctions.strictlyNotBetweenFn,\n    rql: _rqlGenerators.strictlyNotBetweenRQL\n  };\n  _exports.numberStrictlyNotBetween = numberStrictlyNotBetween;\n  const integerEq = {\n    id: 'integerEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isEncodedNumber,\n    parseValue: _encoding.parseInteger,\n    fn: _filterFunctions.eqFn,\n    rql: _rqlGenerators.eqRQL\n  };\n  /*\n  date filter Types start\n  */\n\n  _exports.integerEq = integerEq;\n  const dateLt = {\n    id: 'dateLt',\n    label: 'Before',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeLtFn,\n    rql: _rqlGenerators.dateLtRQL\n  };\n  _exports.dateLt = dateLt;\n  const dateLte = {\n    id: 'dateLte',\n    label: 'At or Before',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateLteFn,\n    rql: _rqlGenerators.dateLteRQL\n  };\n  _exports.dateLte = dateLte;\n  const dateGt = {\n    id: 'dateGt',\n    label: 'After',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateGtFn,\n    rql: _rqlGenerators.dateGtRQL\n  };\n  _exports.dateGt = dateGt;\n  const dateGte = {\n    id: 'dateGte',\n    label: 'At or After',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeGteFn,\n    rql: _rqlGenerators.dateGteRQL\n  };\n  _exports.dateGte = dateGte;\n  const dateEq = {\n    id: 'dateEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeEqFn,\n    rql: _rqlGenerators.dateEqRQL\n  };\n  _exports.dateEq = dateEq;\n  const dateStrEq = {\n    id: 'dateStrEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeStrEqFn,\n    rql: _rqlGenerators.dateEqRQL\n  };\n  _exports.dateStrEq = dateStrEq;\n  const dateNe = {\n    id: 'dateNe',\n    label: '&ne;',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeNeFn,\n    rql: _rqlGenerators.dateNeRQL\n  };\n  _exports.dateNe = dateNe;\n  const dateStrNe = {\n    id: 'dateStrNe',\n    label: '&ne;',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateStrNeFn,\n    rql: _rqlGenerators.dateNeRQL\n  };\n  _exports.dateStrNe = dateStrNe;\n  const dateStrNotBetween = {\n    id: 'dateStrNotBetween',\n    label: 'dateStrNotBetween',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    validateValues: _ref => {\n      let [t1, t2] = _ref;\n      return t1.getTime() <= t2.getTime();\n    },\n    fn: _filterFunctions.dateStrNeFn,\n    rql: _rqlGenerators.dateNotBetweenRQL\n  };\n  _exports.dateStrNotBetween = dateStrNotBetween;\n  const dateBetween = {\n    id: 'dateBetween',\n    label: 'Between',\n    arity: 2,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    validateValues: _ref2 => {\n      let [t1, t2] = _ref2;\n      return t1.getTime() <= t2.getTime();\n    },\n    fn: _filterFunctions.dateBetweenFn,\n    rql: _rqlGenerators.dateBetweenRQL\n  };\n  _exports.dateBetween = dateBetween;\n  const dateNotBetween = {\n    id: 'dateNotBetween',\n    label: 'Not Between',\n    arity: 2,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    validateValues: _ref3 => {\n      let [t1, t2] = _ref3;\n      return t1.getTime() <= t2.getTime();\n    },\n    fn: _filterFunctions.dateNotBetweenFn,\n    rql: _rqlGenerators.dateNotBetweenRQL\n  };\n  _exports.dateNotBetween = dateNotBetween;\n  const dateStrictlyBetween = {\n    id: 'dateStrictlyBetween',\n    label: 'Strictly Between',\n    arity: 2,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    validateValues: _ref4 => {\n      let [t1, t2] = _ref4;\n      return t1.getTime() <= t2.getTime();\n    },\n    fn: _filterFunctions.dateStrictlyBetweenFn,\n    rql: _rqlGenerators.dateStrictlyBetweenRQL\n  };\n  /*\n  date filter Types ends\n  */\n\n  /*\n  time filter Types start\n  */\n\n  _exports.dateStrictlyBetween = dateStrictlyBetween;\n  const timeNe = {\n    id: 'timeNe',\n    label: '&ne;',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeNeFn,\n    rql: _rqlGenerators.timeNeRQL\n  };\n  _exports.timeNe = timeNe;\n  const timeEq = {\n    id: 'timeEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeEqFn,\n    rql: _rqlGenerators.timeEqRQL\n  };\n  _exports.timeEq = timeEq;\n  const timeLt = {\n    id: 'timeLt',\n    label: 'Before',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeLtFn,\n    rql: _rqlGenerators.timeLtRQL\n  };\n  _exports.timeLt = timeLt;\n  const timeLte = {\n    id: 'timeLte',\n    label: 'At or Before',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeLteFn,\n    rql: _rqlGenerators.timeLteRQL\n  };\n  _exports.timeLte = timeLte;\n  const timeGt = {\n    id: 'timeGt',\n    label: 'After',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeGtFn,\n    rql: _rqlGenerators.timeGtRQL\n  };\n  _exports.timeGt = timeGt;\n  const timeGte = {\n    id: 'timeGte',\n    label: 'At or After',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeGteFn,\n    rql: _rqlGenerators.timeGteRQL\n  };\n  _exports.timeGte = timeGte;\n  const timeStrEq = {\n    id: 'timeStrEq',\n    label: '=',\n    arity: 1,\n    isValue: _encoding.isEncodedTime,\n    parseValue: _encoding.parseTime,\n    formatTargetValue: _formatFunction.formatTargetTimeValue,\n    fn: _filterFunctions.dateAndTimeStrEqFn,\n    rql: _rqlGenerators.timeEqRQL\n  };\n  /*\n  time filter Types end\n  */\n\n  /*\n  date and time filter Types start\n  */\n\n  _exports.timeStrEq = timeStrEq;\n  const dateAndTimeLte = {\n    id: 'dateAndTimeLte',\n    label: 'At or Before',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeLteFn,\n    rql: _rqlGenerators.dateLteRQL\n  };\n  _exports.dateAndTimeLte = dateAndTimeLte;\n  const dateAndTimeGt = {\n    id: 'dateAndTimeGt',\n    label: 'After',\n    arity: 1,\n    isValue: _encoding.isEncodedDate,\n    parseValue: _encoding.parseDate,\n    fn: _filterFunctions.dateAndTimeGtFn,\n    rql: _rqlGenerators.dateGtRQL\n  };\n  /*\n  date and time filter Types end\n  */\n\n  _exports.dateAndTimeGt = dateAndTimeGt;\n  const filterTypes = [nullFilter, emptyFilter, uuidEq, uuidIn, stringEq, stringNotEq, enumEq, enumStringEq, enumNotEq, enumContains, dateContains, dateContainsGte, dateContainsLte, stringContains, stringStartsWith, booleanEq, booleanNe, numberEq, numberNotEq, numberLt, numberLte, numberGt, numberGte, numberBetween, integerEq, dateEq, dateNe, dateStrEq, dateStrNe, dateStrNotBetween, dateLt, dateLte, dateGt, dateGte, dateAndTimeLte, dateAndTimeGt, dateBetween, dateNotBetween, timeNe, timeEq, timeLt, timeLte, timeGt, timeGte, timeStrEq, dateStrictlyBetween, numberStrictlyBetween, numberStrictlyNotBetween];\n  _exports.filterTypes = filterTypes;\n  const filterTypesHash = filterTypes.reduce((acc, filter) => {\n    acc[filter.id] = filter;\n    return acc;\n  }, {});\n  _exports.filterTypesHash = filterTypesHash;\n});","define(\"adept-iq/config/icon-paths\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    stops: {\n      planned: '/stops-icons/pick/pick-unperformed.svg',\n      pickPlanned: '/stops-icons/pick/pick-unperformed.svg',\n      pickPlannedLate: '/stops-icons/pick/pick-late.svg',\n      pickPlannedInDanger: '/stops-icons/pick/pick-behind.svg',\n      pickNext: '/stops-icons/pick/pick-unperformed-next.svg',\n      pickNextLate: '/stops-icons/pick/pick-late-next.svg',\n      pickNextInDanger: '/stops-icons/pick/pick-behind-next.svg',\n      pickCompleted: '/stops-icons/pick/pick-performed.svg',\n      pickPlannedWheelchair: '/stops-icons/wc-pick/wc-pick-unperformed.svg',\n      pickPlannedLateWheelchair: '/stops-icons/wc-pick/wc-pick-late.svg',\n      pickPlannedInDangerWheelchair: '/stops-icons/wc-pick/wc-pick-behind.svg',\n      pickNextWheelchair: '/stops-icons/wc-pick/wc-pick-unperformed-next.svg',\n      pickNextLateWheelchair: '/stops-icons/wc-pick/wc-pick-late-next.svg',\n      pickNextInDangerWheelchair: '/stops-icons/wc-pick/wc-pick-behind-next.svg',\n      pickCompletedWheelchair: '/stops-icons/wc-pick/wc-pick-performed.svg',\n      dropPlanned: '/stops-icons/drop/drop-unperformed.svg',\n      dropPlannedLate: '/stops-icons/drop/drop-late.svg',\n      dropPlannedInDanger: '/stops-icons/drop/drop-behind.svg',\n      dropNext: '/stops-icons/drop/drop-unperformed-next.svg',\n      dropNextLate: '/stops-icons/drop/drop-late-next.svg',\n      dropNextInDanger: '/stops-icons/drop/drop-behind-next.svg',\n      dropCompleted: '/stops-icons/drop/drop-performed.svg',\n      dropPlannedWheelchair: '/stops-icons/wc-drop/wc-drop-unperformed.svg',\n      dropPlannedLateWheelchair: '/stops-icons/wc-drop/wc-drop-late.svg',\n      dropPlannedInDangerWheelchair: '/stops-icons/wc-drop/wc-drop-behind.svg',\n      dropNextWheelchair: '/stops-icons/wc-drop/wc-drop-unperformed-next.svg',\n      dropNextLateWheelchair: '/stops-icons/wc-drop/wc-drop-late-next.svg',\n      dropNextInDangerWheelchair: '/stops-icons/wc-drop/wc-drop-behind-next.svg',\n      dropCompletedWheelchair: '/stops-icons/wc-drop/wc-drop-performed.svg',\n      garagePlanned: '/stops-icons/garage/garage-unperformed.svg',\n      garagePlannedLate: '/stops-icons/garage/garage-late.svg',\n      garagePlannedInDanger: '/stops-icons/garage/garage-behind.svg',\n      garageNext: '/stops-icons/garage/garage-unperformed-next.svg',\n      garageNextLate: '/stops-icons/garage/garage-late-next.svg',\n      garageNextInDanger: '/stops-icons/garage/garage-behind-next.svg',\n      garageCompleted: '/stops-icons/garage/garage-performed.svg',\n      break: '/stops-icons/break.svg',\n      noshow: '/stops-icons/noshow.svg',\n      onbreak: '/vehicles-icons/icon-vehicle-break.svg'\n    },\n    vehicleEvents: {\n      vehicle: '/vehicles-icons/icon-vehicle.svg',\n      arrow: '/arrows-icons/arrow.svg',\n      planned: '/stops-icons/pick/pick-unperformed.svg',\n      pickPlanned: '/stops-icons/pick/pick-unperformed.svg',\n      pickPlannedLate: '/stops-icons/pick/pick-late.svg',\n      pickPlannedInDanger: '/stops-icons/pick/pick-behind.svg',\n      pickNext: '/stops-icons/pick/pick-unperformed-next.svg',\n      pickNextLate: '/stops-icons/pick/pick-late-next.svg',\n      pickNextInDanger: '/stops-icons/pick/pick-behind-next.svg',\n      pickCompleted: '/stops-icons/pick/pick-performed.svg',\n      pickPlannedWheelchair: '/stops-icons/wc-pick/wc-pick-unperformed.svg',\n      pickPlannedLateWheelchair: '/stops-icons/wc-pick/wc-pick-late.svg',\n      pickPlannedInDangerWheelchair: '/stops-icons/wc-pick/wc-pick-behind.svg',\n      pickNextWheelchair: '/stops-icons/wc-pick/wc-pick-unperformed-next.svg',\n      pickNextLateWheelchair: '/stops-icons/wc-pick/wc-pick-late-next.svg',\n      pickNextInDangerWheelchair: '/stops-icons/wc-pick/wc-pick-behind-next.svg',\n      pickCompletedWheelchair: '/stops-icons/wc-pick/wc-pick-performed.svg',\n      dropPlanned: '/stops-icons/drop/drop-unperformed.svg',\n      dropPlannedLate: '/stops-icons/drop/drop-late.svg',\n      dropPlannedInDanger: '/stops-icons/drop/drop-behind.svg',\n      dropNext: '/stops-icons/drop/drop-unperformed-next.svg',\n      dropNextLate: '/stops-icons/drop/drop-late-next.svg',\n      dropNextInDanger: '/stops-icons/drop/drop-behind-next.svg',\n      dropCompleted: '/stops-icons/drop/drop-performed.svg',\n      dropPlannedWheelchair: '/stops-icons/wc-drop/wc-drop-unperformed.svg',\n      dropPlannedLateWheelchair: '/stops-icons/wc-drop/wc-drop-late.svg',\n      dropPlannedInDangerWheelchair: '/stops-icons/wc-drop/wc-drop-behind.svg',\n      dropNextWheelchair: '/stops-icons/wc-drop/wc-drop-unperformed-next.svg',\n      dropNextLateWheelchair: '/stops-icons/wc-drop/wc-drop-late-next.svg',\n      dropNextInDangerWheelchair: '/stops-icons/wc-drop/wc-drop-behind-next.svg',\n      dropCompletedWheelchair: '/stops-icons/wc-drop/wc-drop-performed.svg',\n      garagePlanned: '/stops-icons/garage/garage-unperformed.svg',\n      garagePlannedLate: '/stops-icons/garage/garage-late.svg',\n      garagePlannedInDanger: '/stops-icons/garage/garage-behind.svg',\n      garageNext: '/stops-icons/garage/garage-unperformed-next.svg',\n      garageNextLate: '/stops-icons/garage/garage-late-next.svg',\n      garageNextInDanger: '/stops-icons/garage/garage-behind-next.svg',\n      garageCompleted: '/stops-icons/garage/garage-performed.svg',\n      break: '/stops-icons/break.svg',\n      noshow: '/stops-icons/noshow.svg'\n    },\n    vehicles: {\n      vehicleAVLM: '/vehicles-icons/icon-vehicle.png',\n      vehicle: '/vehicles-icons/icon-vehicle.svg',\n      vehicleDanger: '/vehicles-icons/icon-vehicle-gettinglate.svg',\n      vehicleLate: '/vehicles-icons/icon-vehicle-late.svg',\n      roadSupervisor: '/vehicles-icons/other-supervisors-noarrow.svg',\n      drivingRoadSupervisor: '/vehicles-icons/ic-supervisor.svg',\n      loggedRoadSupervisor: '/vehicles-icons/ic-supervisor.svg',\n      onBreakAVLM: '/vehicles-icons/icon-vehicle-break.svg',\n      onBreak: '/vehicles-icons/icon-vehicle-break.svg',\n      atWork: '/vehicles-icons/icon-vehicle.svg',\n      atWorkAVLM: '/vehicles-icons/icon-vehicle.png',\n      atWorkDanger: '/vehicles-icons/icon-vehicle-gettinglate.svg',\n      atWorkLate: '/vehicles-icons/icon-vehicle-late.svg',\n      atWorkEmergency: '/vehicles-icons/icon-vehicle-emergency.svg',\n      atWorkEmergencyDanger: '/vehicles-icons/icon-vehicle-emergency.svg',\n      atWorkEmergencyLate: '/vehicles-icons/icon-vehicle-emergency.svg',\n      vehicleBreakdown: '/vehicles-icons/icon-vehicle-broken.svg',\n      vehicleCommunicationFailed: '/vehicles-icons/icon-communication-failed.svg',\n      vehicleGPSFailed: '/vehicles-icons/icon-gps-failed.svg',\n      vehicleNotSigned: '/vehicles-icons/icon-vehicle-not-signedin.svg'\n    },\n    zones: {\n      normal: '/zones-icons/zone-line-normal.png'\n    },\n    tripArrow: {\n      ontime: '/arrows-icons/arrow.svg',\n      danger: '/arrows-icons/arrow-danger.svg',\n      late: '/arrows-icons/arrow-late.svg'\n    },\n    tripArrowOffset: {\n      ontime: '/arrows-icons/arrow_offset.svg',\n      danger: '/arrows-icons/arrow_offset-danger.svg',\n      late: '/arrows-icons/arrow_offset-late.svg'\n    },\n    routes: {\n      planned: '/lines-icons/triangle-planned.svg',\n      plannedLine: '/lines-icons/triangle-planned-line.svg',\n      performed: '/lines-icons/triangle-performed.svg',\n      performedLine: '/lines-icons/triangle-performed-line.svg',\n      navigation: '/lines-icons/triangle-navigation.svg',\n      navigationLine: '/lines-icons/triangle-navigation-line.svg',\n      scheduled: '/lines-icons/scheduled.svg',\n      floatingBreak: '/lines-icons/line-floating-break.png'\n    },\n    trips: {\n      planned: '/lines-icons/line-planned.png',\n      performed: '/lines-icons/line-performed.png',\n      scheduled: '/lines-icons/line-scheduled.png',\n      completed: '/lines-icons/line-completed.png',\n      waitListed: '/lines-icons/line-waitlisted.png',\n      callback: '/lines-icons/line-callback.png',\n      active: '/lines-icons/line-active.png',\n      noShowed: '/lines-icons/line-noshowed.png',\n      noShowRequest: '/lines-icons/line-noshowrequest.png',\n      dispatched: '/lines-icons/line-dispatched.png',\n      enRoute: '/lines-icons/line-enroute.png',\n      illegal: '/lines-icons/line-illegal.png',\n      unScheduled: '/lines-icons/line-unscheduled.png',\n      canceled: '/lines-icons/line-canceled.png',\n      lateCanceled: '/lines-icons/line-latecanceled.png'\n    },\n    maps: {\n      pinPoint: '/map-icons/icon-pinpoint.svg',\n      highlight: '/map-icons/yellow-highlight.svg'\n    },\n    requestdetails: {\n      paratransiticon: '/vehicles-icons/icon-paratransit.svg',\n      busicon: '/vehicles-icons/icon-bus.svg',\n      walkicon: '/vehicles-icons/icon-walk.svg',\n      taxiicon: '/vehicles-icons/icon-taxi.svg'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/config/itinerary-action\", [\"exports\", \"adept-iq/config/icon-paths\"], function (_exports, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ITINERARY_TRAVEL_MODE = _exports.ITINERARY_ACTION_MAP = void 0;\n  const ITINERARY_TRAVEL_MODE = {\n    LIGHT_RAIL: '0',\n    SUBWAY: '1',\n    RAIL: '2',\n    BUS: '3',\n    FERRY: '4',\n    CABLE_CAR: '5',\n    GONDOLA: '6',\n    FUNICULAR: '7',\n    PARATRANSIT: '101',\n    WALK: '100',\n    TAXI: '102'\n  };\n  _exports.ITINERARY_TRAVEL_MODE = ITINERARY_TRAVEL_MODE;\n  const ITINERARY_ACTION_MAP = {\n    [ITINERARY_TRAVEL_MODE.LIGHT_RAIL]: {\n      action: 'lightrail',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.SUBWAY]: {\n      action: 'subway',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.RAIL]: {\n      action: 'rail',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.BUS]: {\n      action: 'bus',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.FERRY]: {\n      action: 'ferry',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.CABLE_CAR]: {\n      action: 'cablecar',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.GONDOLA]: {\n      action: 'gondola',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.FUNICULAR]: {\n      action: 'funicular',\n      icon: _iconPaths.default.requestdetails.busicon\n    },\n    [ITINERARY_TRAVEL_MODE.PARATRANSIT]: {\n      action: 'paratransit',\n      icon: _iconPaths.default.requestdetails.paratransiticon\n    },\n    [ITINERARY_TRAVEL_MODE.WALK]: {\n      action: 'walk',\n      icon: _iconPaths.default.requestdetails.walkicon\n    },\n    [ITINERARY_TRAVEL_MODE.TAXI]: {\n      action: 'taxi',\n      icon: _iconPaths.default.requestdetails.taxiicon\n    }\n  };\n  _exports.ITINERARY_ACTION_MAP = ITINERARY_ACTION_MAP;\n});","define(\"adept-iq/config/mapped-permIds\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // version:31\n  const fullOperations = {\n    configureWorkspace: 1,\n    savePrivateWorkspace: 2,\n    saveWorkspace: 3,\n    saveAsWorkspace: 3,\n    deletePrivateWorkspace: 4,\n    deletePublicWorkspace: 5,\n    deleteWorkspace: 6,\n    openWorkspace: 7,\n    openPrivateWorkspace: 8,\n    showRoutes: 9,\n    showStops: 10,\n    showTrips: 11,\n    showMessages: 12,\n    showVehicles: 13,\n    showAlerts: 14,\n    showMaps: 15,\n    showDrivers: 16,\n    showRoles: 17,\n    showZones: 18,\n    showSubscriptions: 19,\n    downloadRoutes: 20,\n    downloadStops: 21,\n    downloadTrips: 22,\n    downloadVehicles: 23,\n    downloadDrivers: 24,\n    showSystemConfig: 25,\n    newRole: 26,\n    editRole: 27,\n    deleteRole: 28,\n    newUser: 29,\n    editUser: 30,\n    resetUserPass: 31,\n    enableDisableUser: 32,\n    timeline: 33,\n    createSameDayReplacement: 34,\n    emergencyAcknowledge: 35,\n    emergencyResolve: 36,\n    emergencyCancel: 37,\n    reportBreakdown: 38,\n    reportRescue: 39,\n    createRoute: 40,\n    editRoute: 41,\n    deleteRoute: 42,\n    lockUnlockRoute: 43,\n    limitRoute: 44,\n    startRoute: 45,\n    endRoute: 46,\n    createFuture: 47,\n    // OBSOLETE\n    createSameDay: 48,\n    // OBSOLETE\n    cancelFuture: 49,\n    cancelSameDay: 50,\n    editFuture: 51,\n    autoTransferTrip: 52,\n    transferTrip: 53,\n    waitlist: 54,\n    noshow: 55,\n    editPast: 56,\n    editSameDay: 57,\n    markStopArrived: 58,\n    markStopDeparted: 59,\n    noShowTrip: 60,\n    unperformStop: 61,\n    navigateStop: 62,\n    editStop: 63,\n    reorderStops: 64,\n    addBreak: 65,\n    editBreak: 66,\n    deleteBreak: 67,\n    newPassenger: 68,\n    editPassenger: 69,\n    newVehicle: 70,\n    editVehicle: 70,\n    newdriver: 70,\n    editdriver: 70,\n    autoReschedule: 71,\n    resetDeviceAction: 72,\n    vehicleBreakdown: 73,\n    playbackVehicle: 74,\n    accessPlaybackMode: 74,\n    cannedMessageToDriver: 75,\n    freeTypeMessageToDriver: 76,\n    messageToDispatch: 77,\n    newIncident: 78,\n    deleteIncident: 79,\n    editIncident: 80,\n    viewIncident: 81,\n    editPlaces: 82,\n    newService: 83,\n    editService: 83,\n    navigateMap: 84,\n    addressPinpoint: 85,\n    closeSchedule: 86,\n    generateSchedule: 87,\n    reoptimizeSchedule: 88,\n    manageRouteSchedule: 89,\n    SignInADEPTIQ: 90,\n    showUsers: 91,\n    showPassengers: 92,\n    downloadMessages: 93,\n    downloadAlerts: 94,\n    downloadRoles: 95,\n    downloadUsers: 96,\n    downloadsubscriptions: 97,\n    downloadPassengers: 98,\n    downloadZones: 99,\n    assignVehicleDriver: 100,\n    approveNoShowRequest: 101,\n    denyNoShowRequest: 101,\n    overrideTripCapacityLimits: 102,\n    newSubscription: 103,\n    createSubscription: 103,\n    editSubscription: 104,\n    activityLogUser: 105,\n    activityLogRoute: 106,\n    activityLog: 106,\n    activityLogVehicle: 106,\n    showSchedule: 107,\n    downloadSchedule: 108,\n    editContractManagement: 109,\n    assignVehicleOverCapacity: 110,\n    createFutureBookings: 111,\n    createSameDayBookings: 112,\n    cancelFutureBookings: 113,\n    cancelSameDayBookings: 114,\n    editFutureBookings: 115,\n    editSameDayBookings: 116,\n    overrideEligibilityConditions: 117,\n    overrideITP: 118,\n    overrideWheelchairRequest: 119,\n    deleteBooking: 120,\n    deleteSubscription: 121,\n    accessBookingWorkspace: 122,\n    accessReconcileWorkspace: 123,\n    retrieveHistoricalData: 124,\n    editRouteInfoRecon: 125,\n    editRouteLocRecon: 126,\n    deleteRouteRecon: 127,\n    verifyRouteRecon: 128,\n    createRescueReplacementRecon: 129,\n    reportBreakdownRecon: 130,\n    createBreakdownReplacementRecon: 131,\n    reopenRouteRecon: 132,\n    addNewRouteRecon: 133,\n    addNewTripRecon: 134,\n    editTripBookingInfoRecon: 135,\n    editTripInfoRecon: 136,\n    transferTripRecon: 137,\n    transferTripToTaxiRecon: 138,\n    cancelTripRecon: 139,\n    noShowTripRecon: 140,\n    unperformNoShowRecon: 141,\n    insertBreakRecon: 142,\n    addTripLogMsgRecon: 143,\n    addRouteLogMsgRecon: 144,\n    closeEditDateRecon: 145,\n    reopenEditDateRecon: 146,\n    sortRouteGridRecon: 147,\n    viewUnscheduledTripsRecon: 148,\n    scheduleTripsRecon: 149,\n    searchByClientRecon: 150,\n    searchByDriverRecon: 151,\n    searchByVehicleRecon: 152,\n    searchByAddrRecon: 153,\n    searchByTripRecon: 154,\n    editColumnRecon: 155,\n    mapTripRecon: 156,\n    accessPermissionsWorkspace: 157,\n    accessDispatchWorkspace: 158,\n    accessRoadSupervisorWorkspace: 159,\n    accessSchedulingWorkspace: 88,\n    accessVehicleDriverMgmntWorkspace: 70,\n    downloadMaps: 0,\n    sendRouteMessage: 0,\n    navigateIntercept: 0,\n    sendMessageVehicle: 0,\n    showAllMessage: 0,\n    hideMessages: 0,\n    readMessages: 0,\n    sendMessageDriver: 0,\n    showAllAlerts: 0,\n    hideAlerts: 0,\n    undoRouteStart: 160,\n    undoRouteEnd: 161,\n    unlockOtherUserLocks: 162,\n    overrideNoShowReason: 163,\n    accessRiderManagementWorkspace: 164,\n    accessReportsWorkspace: 165,\n    accessAdhocReportsWorkspace: 223,\n    showReports: 165,\n    cancelSubscriptionTrips: 166,\n    editRideshareBooking: 167,\n    editRideshareSubscription: 168,\n    editRideshareDispatch: 169,\n    editRideshareScheduling: 170,\n    editLoadUnloadBooking: 171,\n    editLoadUnloadSubscription: 172,\n    openZones: 173,\n    copyBooking: 174,\n    transferBrokerTripDispatch: 175,\n    transferBrokerTripScheduling: 176,\n    addBookingfromDispatch: 178,\n    copyTrip: 179,\n    manageServiceZones: 180,\n    manageCancelTrips: 181,\n    manageBookTrips: 182,\n    manageCannedMessages: 183,\n    manageDBPurgeParameters: 184,\n    manageDrivingConfiguration: 185,\n    manageFixedRouteEngineParameters: 186,\n    manageDriverAppAdminPassword: 187,\n    manageRouteParameters: 188,\n    manageScheduling: 189,\n    manageSchedulingParms: 190,\n    manageSystemConfiguration: 191,\n    manageADABoundaries: 192,\n    designReports: 193,\n    overrideADABoundaries: 194,\n    editPassengerNotesBooking: 195,\n    editPassengerNotesSubscription: 196,\n    editPassengerNotesScheduling: 197,\n    editPassengerNotesDispatch: 198,\n    accessCloseoutReport: 199,\n    accessDeductReport: 200,\n    setPreferredProviderSameDayBooking: 202,\n    setPreferredProviderFutureBooking: 203,\n    setPreferredProviderSubscription: 204,\n    setServiceTypetoDAnchorSub: 205,\n    manageSpeedRegions: 206,\n    manageBlockoutRegions: 207,\n    editFareCategoryBooking: 214,\n    editFareCategorySubscription: 215,\n    editFareBooking: 217,\n    editFareSubscription: 218,\n    manageRoadSupervisorConfiguration: 219,\n    manageUserAccounts: 220,\n    editIVR: 221,\n    overrideTripOverlap: 222,\n    adHocNotifications: 224,\n    removePassengers: 120\n  };\n  const operations = fullOperations;\n  var _default = operations;\n  _exports.default = _default;\n});","define(\"adept-iq/config/mapped-status\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.convertSubscriptionStatus = _exports.convertBookingStatus = void 0;\n  const convertBookingStatus = {\n    scheduled: 'Scheduled',\n    requested: 'Requested',\n    promised: 'Promised',\n    dispatched: 'Dispatched',\n    active: 'Active',\n    completed: 'Completed',\n    callback: 'Callback',\n    willCall: 'Will call',\n    failed: 'Failed',\n    refused: 'Refused',\n    canceled: 'Canceled',\n    cancelled: 'Canceled',\n    lateCancelled: 'Late Canceled',\n    archived: 'Archived',\n    unscheduled: 'Unscheduled',\n    waitlisted: 'Waitlisted',\n    illegal: 'Illegal',\n    noShowRequest: 'No Show Request',\n    noShow: 'No Show'\n  };\n  _exports.convertBookingStatus = convertBookingStatus;\n  const convertSubscriptionStatus = {\n    scheduled: 'Scheduled',\n    requested: 'Requested',\n    promised: 'Promised',\n    dispatched: 'Dispatched',\n    active: 'Active',\n    inactive: 'Inactive',\n    denied: 'Denied',\n    completed: 'Completed',\n    callback: 'Callback',\n    willCall: 'Will call',\n    failed: 'Failed',\n    canceled: 'Canceled',\n    cancelled: 'Canceled',\n    lateCancelled: 'Late Cancelled',\n    archived: 'Archived',\n    unscheduled: 'Unscheduled',\n    waitlisted: 'Waitlisted',\n    illegal: 'Illegal',\n    noShowRequest: 'No Show Request',\n    noShow: 'No Show'\n  };\n  _exports.convertSubscriptionStatus = convertSubscriptionStatus;\n});","define(\"adept-iq/config/notifications\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    BOOKING: {\n      IN_ACTIVE: 'Reservation can’t be started for inactive clients',\n      INVALID_ELIGIBILITY: 'There is no valid eligibility in the selected rider ',\n      SEARCH_ERROR: 'Search error. Try again. If the issue persists, please contact your system administrator.',\n      NO_MATCHES: 'There are no results matching your search criteria.',\n      EMPTY_SEARCH_CRITERIA: 'ENTER SEARCH CRITERIA AND TRY AGAIN',\n      TOO_MANY_MATCHES: 'TOO MANY RESULTS FOUND. PLEASE PROVIDE ADDITIONAL SEARCH CRITERIA AND TRY AGAIN.'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/config/otp-criteria\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.OTP_LATE = _exports.OTP_DANGER = void 0;\n  const OTP_LATE = 1;\n  _exports.OTP_LATE = OTP_LATE;\n  const OTP_DANGER = 0.8;\n  _exports.OTP_DANGER = OTP_DANGER;\n});","define(\"adept-iq/config/phonetic-substitutions\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.phoneticSubstitutions = void 0;\n  const phoneticSubstitutions = [{\n    abbr: 'N',\n    regex: / N(\\W|$)/g,\n    replacement: ' north$1'\n  }, {\n    abbr: 'S',\n    regex: / S(\\W|$)/g,\n    replacement: ' south$1'\n  }, {\n    abbr: 'E',\n    regex: / E(\\W|$)/g,\n    replacement: ' east$1'\n  }, {\n    abbr: 'W',\n    regex: / W(\\W|$)/g,\n    replacement: ' west$1'\n  }, {\n    abbr: 'Apt',\n    regex: / A[pP][tT](\\W|$)/g,\n    replacement: ' apartment$1'\n  }, {\n    abbr: 'Ave',\n    regex: / [aA]ve(\\W|$)/g,\n    replacement: ' avenue$1'\n  }, {\n    abbr: 'Av',\n    regex: / A[vV](\\W|$)/g,\n    replacement: ' avenue$1'\n  }, {\n    abbr: 'Blvd',\n    regex: / B[lL][vV][dD](\\W|$)/g,\n    replacement: ' boulevard$1'\n  }, {\n    abbr: 'Bldg',\n    regex: / B[lL][dD][gG](\\W|$)/g,\n    replacement: ' building$1'\n  }, {\n    abbr: 'Ctr',\n    regex: / C[tT][rR](\\W|$)/g,\n    replacement: ' center$1'\n  }, {\n    abbr: 'Cir',\n    regex: / C[iI][rR](\\W|$)/g,\n    replacement: ' circle$1'\n  }, {\n    abbr: 'Ct',\n    regex: / C[tT](\\W|$)/g,\n    replacement: ' court$1'\n  }, {\n    abbr: 'Dr',\n    regex: / D[rR](\\W|$)/g,\n    replacement: ' drive$1'\n  }, {\n    abbr: 'Expy',\n    regex: / E[xX][pP][yY](\\W|$)/g,\n    replacement: ' expressway$1'\n  }, {\n    abbr: 'Ext',\n    regex: / E[xX][tT](\\W|$)/g,\n    replacement: ' extension$1'\n  }, {\n    abbr: 'Ft',\n    regex: / F[tT](\\W|$)/g,\n    replacement: ' fort$1'\n  }, {\n    abbr: 'Fwy',\n    regex: / F[wW][yY](\\W|$)/g,\n    replacement: ' freeway$1'\n  }, {\n    abbr: 'Hts',\n    regex: / H[tT][sS](\\W|$)/g,\n    replacement: ' heights$1'\n  }, {\n    abbr: 'Hwy',\n    regex: / H[wW][yY](\\W|$)/g,\n    replacement: ' highway$1'\n  }, {\n    abbr: 'Is',\n    regex: / I[sS](\\W|$)/g,\n    replacement: ' island$1'\n  }, {\n    abbr: 'Jct',\n    regex: / J[cC][tT](\\W|$)/g,\n    replacement: ' junction$1'\n  }, {\n    abbr: 'Ln',\n    regex: / L[nN](\\W|$)/g,\n    replacement: ' lane$1'\n  }, {\n    abbr: 'Mt',\n    regex: / M[tT](\\W|$)/g,\n    replacement: ' mountain$1'\n  }, {\n    abbr: 'NE',\n    regex: / N[eE](\\W|$)/g,\n    replacement: ' northeast$1'\n  }, {\n    abbr: 'NW',\n    regex: / N[wW](\\W|$)/g,\n    replacement: ' northwest$1'\n  }, {\n    abbr: 'Pky',\n    regex: / P[kK][yY](\\W|$)/g,\n    replacement: ' parkway$1'\n  }, {\n    abbr: 'Pl',\n    regex: / P[lL](\\W|$)/g,\n    replacement: ' place$1'\n  }, {\n    abbr: 'PO',\n    regex: / P[oO](\\W|$)/g,\n    replacement: ' post pffice$1'\n  }, {\n    abbr: 'Rd',\n    regex: / R[dD](\\W|$)/g,\n    replacement: ' road$1'\n  }, {\n    abbr: 'RR',\n    regex: / R[rR](\\W|$)/g,\n    replacement: ' rural route$1'\n  }, {\n    abbr: 'Rte',\n    regex: / R[tT][eE](\\W|$)/g,\n    replacement: ' rural route$1'\n  }, {\n    abbr: 'SE',\n    regex: / S[eE](\\W|$)/g,\n    replacement: ' southeast$1'\n  }, {\n    abbr: 'SW',\n    regex: / S[wW](\\W|$)/g,\n    replacement: ' southwest$1'\n  }, {\n    abbr: 'Spg',\n    regex: / S[pP][gG](\\W|$)/g,\n    replacement: ' spring$1'\n  }, {\n    abbr: 'Spgs',\n    regex: / S[pP][gG][sS](\\W|$)/g,\n    replacement: ' springs$1'\n  }, {\n    abbr: 'Sq',\n    regex: / S[qQ](\\W|$)/g,\n    replacement: ' square$1'\n  }, {\n    abbr: 'St',\n    regex: / S[tT](\\W|$)/g,\n    replacement: ' street$1'\n  }, {\n    abbr: 'St',\n    regex: / S[tT][.](\\W|$)/g,\n    replacement: ' saint$1'\n  }, {\n    abbr: 'Ste',\n    regex: / S[tT][eE](\\W|$)/g,\n    replacement: ' suite$1'\n  }, {\n    abbr: 'Ter',\n    regex: / T[eE][rR](\\W|$)/g,\n    replacement: ' terrace$1'\n  }, {\n    abbr: 'Tpke',\n    regex: / T[pP][kK][eE](\\W|$)/g,\n    replacement: ' turnpike$1'\n  }, {\n    abbr: 'Bdwy',\n    regex: / B[dD][wW][yY](\\W|$)/g,\n    replacement: ' broadway$1'\n  }, {\n    abbr: 'Pkwy',\n    regex: / P[kK][wW][yY](\\W|$)/g,\n    replacement: ' parkway$1'\n  }, {\n    abbr: 'Jctn',\n    regex: / J[cC][tT][nN](\\W|$)/g,\n    replacement: ' junction$1'\n  }, {\n    abbr: 'No',\n    regex: / N[oO](\\W|$)/g,\n    replacement: ' number$1'\n  }];\n  _exports.phoneticSubstitutions = phoneticSubstitutions;\n});","define(\"adept-iq/config/placeholders\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.YEAR_PLACEHOLDER = _exports.WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER = _exports.VIN_PLACEHOLDER = _exports.VEHILCE_VOIP_PASSCODE = _exports.VEHILCE_VOIP_ID = _exports.VEHICLE_WHEELBASE_PLACEHOLDER = _exports.VEHICLE_TYPE_PLACEHOLDER = _exports.VEHICLE_TRANSMISSION_PLACEHOLDER = _exports.VEHICLE_TIRE_SIZE_PLACEHOLDER = _exports.VEHICLE_STATUS_PLACEHOLDER = _exports.VEHICLE_START_GARAGE_PLACEHOLDER = _exports.VEHICLE_SITE_DEF_PLACEHOLDER = _exports.VEHICLE_REAR_AXEL_PLACEHOLDER = _exports.VEHICLE_MODEL_YEAR_PLACEHOLDER = _exports.VEHICLE_MODEL_PLACEHOLDER = _exports.VEHICLE_MANUFACTURER_PLACEHOLDER = _exports.VEHICLE_LICENCE_PLACEHOLDER = _exports.VEHICLE_LEASE_COMPANY_PLACEHOLDER = _exports.VEHICLE_ID_PLACEHOLDER = _exports.VEHICLE_FUEL_TYPE_PLACEHOLDER = _exports.VEHICLE_FUEL_CAP_PLACEHOLDER = _exports.VEHICLE_ENGINE_TYPE_PLACEHOLDER = _exports.VEHICLE_END_GARAGE_PLACEHOLDER = _exports.VEHICLE_CHASSIS_PLACEHOLDER = _exports.VEHICLE_BODY_WIDTH_PLACEHOLDER = _exports.VEHICLE_BODY_TYPE_PLACEHOLDER = _exports.VEHICLE_BODY_LENGTH_PLACEHOLDER = _exports.US_DATE_TIME_PLACEHOLDER = _exports.US_DATE_PLACEHOLDER = _exports.USER_ADDRESS_PLACEHOLDER = _exports.TYPE_PLACEHOLDER = _exports.TIME_PLACEHOLDER = _exports.SOCIAL_SECURITY_NUMBER_PLACEHOLDER = _exports.SELECT_DRIVER_ID_PLACEHOLDER = _exports.SEARCH_ADDRESS_PLACEHOLDER = _exports.ROUTE_ID_PLACEHOLDER = _exports.ROAD_CALL_NEW_VEHICLE_PLACEHOLDER = _exports.ROAD_CALL_CODE_PLACEHOLDER = _exports.ROAD_CALL_CODE_DESCRIPTION_PLACEHOLDER = _exports.PROVIDER_PLACEHOLDER = _exports.PROBLEM_IDENTIFIED_PLACEHOLDER = _exports.PHONE_NUMBER_PLACEHOLDER = _exports.PHONE_NUMBER_EXT_PLACEHOLDER = _exports.NUMBER_PERCENT_PLACEHOLDER = _exports.NOTES_PLACEHOLDER = _exports.NAME_PLACEHOLDER = _exports.MONTH_PLACEHOLDER = _exports.MILEAGE_PLACEHOLDER = _exports.MIDDLE_INITIAL_PLACEHOLDER = _exports.MAINTENANCE_TYPE_PLACEHOLDER = _exports.MAINTENANCE_STATUS_PLACEHOLDER = _exports.MAINTENANCE_LOCATION_PLACEHOLDER = _exports.LOCATION_PLACEHOLDER = _exports.LAST_NAME_PLACEHOLDER = _exports.INTERNATIONAL_DATE_TIME_PLACEHOLDER = _exports.INTERNATIONAL_DATE_PLACEHOLDER = _exports.INSPECTION_PROVIDER_NAME_PLACEHOLDER = _exports.INSPECTION_CATEGORY_PLACEHOLDER = _exports.FULL_YEAR_PLACEHOLDER = _exports.FULL_NAME_PLACEHOLDER = _exports.FIRST_NAME_PLACEHOLDER = _exports.FAILEDDOT_PLACEHOLDER = _exports.DRIVER_LAST_NAME_PLACEHOLDER = _exports.DRIVER_ID_PLACEHOLDER = _exports.DRIVER_FIRST_NAME_PLACEHOLDER = _exports.DRIVER_CDL_PLACEHOLDER = _exports.DISPLAY_NAME_PLACEHOLDER = _exports.DESCRIPTION_PLACEHOLDER = _exports.DECIMAL_PERCENT_PLACEHOLDER = _exports.DAY_PLACEHOLDER = _exports.CODE_PLACEHOLDER = _exports.CDL_NUMBER_PLACEHOLDER = _exports.ADDRESS_PLACEHOLDER = void 0;\n  // Common Placeholders\n  // Personal Information place holders\n  const FIRST_NAME_PLACEHOLDER = 'First Name';\n  _exports.FIRST_NAME_PLACEHOLDER = FIRST_NAME_PLACEHOLDER;\n  const LAST_NAME_PLACEHOLDER = 'Last Name';\n  _exports.LAST_NAME_PLACEHOLDER = LAST_NAME_PLACEHOLDER;\n  const FULL_NAME_PLACEHOLDER = 'Full Name';\n  _exports.FULL_NAME_PLACEHOLDER = FULL_NAME_PLACEHOLDER;\n  const MIDDLE_INITIAL_PLACEHOLDER = 'MI'; // Unique ID Placeholder\n\n  _exports.MIDDLE_INITIAL_PLACEHOLDER = MIDDLE_INITIAL_PLACEHOLDER;\n  const NAME_PLACEHOLDER = 'Enter a Name'; // address place holders\n\n  _exports.NAME_PLACEHOLDER = NAME_PLACEHOLDER;\n  const LOCATION_PLACEHOLDER = 'Enter a Location';\n  _exports.LOCATION_PLACEHOLDER = LOCATION_PLACEHOLDER;\n  const SEARCH_ADDRESS_PLACEHOLDER = 'City, Address, ZIP';\n  _exports.SEARCH_ADDRESS_PLACEHOLDER = SEARCH_ADDRESS_PLACEHOLDER;\n  const ADDRESS_PLACEHOLDER = 'Enter an Address';\n  _exports.ADDRESS_PLACEHOLDER = ADDRESS_PLACEHOLDER;\n  const USER_ADDRESS_PLACEHOLDER = 'Enter Your Address'; // CDL number placeholder\n\n  _exports.USER_ADDRESS_PLACEHOLDER = USER_ADDRESS_PLACEHOLDER;\n  const CDL_NUMBER_PLACEHOLDER = '###-###-###'; // phone number place holders\n\n  _exports.CDL_NUMBER_PLACEHOLDER = CDL_NUMBER_PLACEHOLDER;\n  const PHONE_NUMBER_PLACEHOLDER = '###-###-####';\n  _exports.PHONE_NUMBER_PLACEHOLDER = PHONE_NUMBER_PLACEHOLDER;\n  const PHONE_NUMBER_EXT_PLACEHOLDER = '######'; // social security number place holders\n\n  _exports.PHONE_NUMBER_EXT_PLACEHOLDER = PHONE_NUMBER_EXT_PLACEHOLDER;\n  const SOCIAL_SECURITY_NUMBER_PLACEHOLDER = '###-##-####'; // date-time place holders\n\n  _exports.SOCIAL_SECURITY_NUMBER_PLACEHOLDER = SOCIAL_SECURITY_NUMBER_PLACEHOLDER;\n  const FULL_YEAR_PLACEHOLDER = 'YYYY';\n  _exports.FULL_YEAR_PLACEHOLDER = FULL_YEAR_PLACEHOLDER;\n  const YEAR_PLACEHOLDER = 'YY';\n  _exports.YEAR_PLACEHOLDER = YEAR_PLACEHOLDER;\n  const MONTH_PLACEHOLDER = 'MM';\n  _exports.MONTH_PLACEHOLDER = MONTH_PLACEHOLDER;\n  const DAY_PLACEHOLDER = 'DD';\n  _exports.DAY_PLACEHOLDER = DAY_PLACEHOLDER;\n  const TIME_PLACEHOLDER = 'HH:MM';\n  _exports.TIME_PLACEHOLDER = TIME_PLACEHOLDER;\n  const US_DATE_PLACEHOLDER = `${MONTH_PLACEHOLDER}/${DAY_PLACEHOLDER}/${FULL_YEAR_PLACEHOLDER}`;\n  _exports.US_DATE_PLACEHOLDER = US_DATE_PLACEHOLDER;\n  const US_DATE_TIME_PLACEHOLDER = `${US_DATE_PLACEHOLDER} ${TIME_PLACEHOLDER}`;\n  _exports.US_DATE_TIME_PLACEHOLDER = US_DATE_TIME_PLACEHOLDER;\n  const INTERNATIONAL_DATE_PLACEHOLDER = `${DAY_PLACEHOLDER}/${MONTH_PLACEHOLDER}/${FULL_YEAR_PLACEHOLDER}`;\n  _exports.INTERNATIONAL_DATE_PLACEHOLDER = INTERNATIONAL_DATE_PLACEHOLDER;\n  const INTERNATIONAL_DATE_TIME_PLACEHOLDER = `${INTERNATIONAL_DATE_PLACEHOLDER} ${TIME_PLACEHOLDER}`; // Percent Placeholder\n\n  _exports.INTERNATIONAL_DATE_TIME_PLACEHOLDER = INTERNATIONAL_DATE_TIME_PLACEHOLDER;\n  const NUMBER_PERCENT_PLACEHOLDER = 'e.g 45%';\n  _exports.NUMBER_PERCENT_PLACEHOLDER = NUMBER_PERCENT_PLACEHOLDER;\n  const DECIMAL_PERCENT_PLACEHOLDER = 'e.g 45.5%'; // Route placeholder\n\n  _exports.DECIMAL_PERCENT_PLACEHOLDER = DECIMAL_PERCENT_PLACEHOLDER;\n  const ROUTE_ID_PLACEHOLDER = 'Select Route ID'; // Driver place holder\n\n  _exports.ROUTE_ID_PLACEHOLDER = ROUTE_ID_PLACEHOLDER;\n  const SELECT_DRIVER_ID_PLACEHOLDER = 'Select Driver ID';\n  _exports.SELECT_DRIVER_ID_PLACEHOLDER = SELECT_DRIVER_ID_PLACEHOLDER;\n  const DRIVER_ID_PLACEHOLDER = 'Enter Driver ID';\n  _exports.DRIVER_ID_PLACEHOLDER = DRIVER_ID_PLACEHOLDER;\n  const DRIVER_LAST_NAME_PLACEHOLDER = 'Driver Last Name';\n  _exports.DRIVER_LAST_NAME_PLACEHOLDER = DRIVER_LAST_NAME_PLACEHOLDER;\n  const DRIVER_FIRST_NAME_PLACEHOLDER = 'Driver First Name';\n  _exports.DRIVER_FIRST_NAME_PLACEHOLDER = DRIVER_FIRST_NAME_PLACEHOLDER;\n  const DRIVER_CDL_PLACEHOLDER = 'Driver CDL Number'; // Vehicle Input Placeholders\n\n  _exports.DRIVER_CDL_PLACEHOLDER = DRIVER_CDL_PLACEHOLDER;\n  const VEHICLE_ENGINE_TYPE_PLACEHOLDER = 'Enter Vehicle Engine Type';\n  _exports.VEHICLE_ENGINE_TYPE_PLACEHOLDER = VEHICLE_ENGINE_TYPE_PLACEHOLDER;\n  const VEHICLE_ID_PLACEHOLDER = 'Enter Vehicle ID';\n  _exports.VEHICLE_ID_PLACEHOLDER = VEHICLE_ID_PLACEHOLDER;\n  const VEHICLE_BODY_LENGTH_PLACEHOLDER = 'Enter Body Length';\n  _exports.VEHICLE_BODY_LENGTH_PLACEHOLDER = VEHICLE_BODY_LENGTH_PLACEHOLDER;\n  const VEHICLE_LICENCE_PLACEHOLDER = 'Enter Vehicle Licence';\n  _exports.VEHICLE_LICENCE_PLACEHOLDER = VEHICLE_LICENCE_PLACEHOLDER;\n  const VEHICLE_MODEL_YEAR_PLACEHOLDER = FULL_YEAR_PLACEHOLDER;\n  _exports.VEHICLE_MODEL_YEAR_PLACEHOLDER = VEHICLE_MODEL_YEAR_PLACEHOLDER;\n  const VEHICLE_SITE_DEF_PLACEHOLDER = 'Enter Site Definition';\n  _exports.VEHICLE_SITE_DEF_PLACEHOLDER = VEHICLE_SITE_DEF_PLACEHOLDER;\n  const VIN_PLACEHOLDER = 'Enter Vehicle VIN Number';\n  _exports.VIN_PLACEHOLDER = VIN_PLACEHOLDER;\n  const WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER = 'Enter Serial Number';\n  _exports.WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER = WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER;\n  const VEHILCE_VOIP_ID = 'Enter VOIP ID';\n  _exports.VEHILCE_VOIP_ID = VEHILCE_VOIP_ID;\n  const VEHILCE_VOIP_PASSCODE = 'Enter VOIP Passcode'; // Vehicle Dropdown Placeholders\n\n  _exports.VEHILCE_VOIP_PASSCODE = VEHILCE_VOIP_PASSCODE;\n  const VEHICLE_BODY_WIDTH_PLACEHOLDER = 'Select Body Width';\n  _exports.VEHICLE_BODY_WIDTH_PLACEHOLDER = VEHICLE_BODY_WIDTH_PLACEHOLDER;\n  const VEHICLE_BODY_TYPE_PLACEHOLDER = 'Select Body';\n  _exports.VEHICLE_BODY_TYPE_PLACEHOLDER = VEHICLE_BODY_TYPE_PLACEHOLDER;\n  const VEHICLE_CHASSIS_PLACEHOLDER = 'Select Chassis';\n  _exports.VEHICLE_CHASSIS_PLACEHOLDER = VEHICLE_CHASSIS_PLACEHOLDER;\n  const VEHICLE_END_GARAGE_PLACEHOLDER = 'Select End Garage Location';\n  _exports.VEHICLE_END_GARAGE_PLACEHOLDER = VEHICLE_END_GARAGE_PLACEHOLDER;\n  const VEHICLE_FUEL_TYPE_PLACEHOLDER = 'Select Fuel Type';\n  _exports.VEHICLE_FUEL_TYPE_PLACEHOLDER = VEHICLE_FUEL_TYPE_PLACEHOLDER;\n  const VEHICLE_FUEL_CAP_PLACEHOLDER = 'Select Fuel Cap';\n  _exports.VEHICLE_FUEL_CAP_PLACEHOLDER = VEHICLE_FUEL_CAP_PLACEHOLDER;\n  const VEHICLE_LEASE_COMPANY_PLACEHOLDER = 'Select Lease Company';\n  _exports.VEHICLE_LEASE_COMPANY_PLACEHOLDER = VEHICLE_LEASE_COMPANY_PLACEHOLDER;\n  const VEHICLE_MANUFACTURER_PLACEHOLDER = 'Select Vehicle Manufacturer';\n  _exports.VEHICLE_MANUFACTURER_PLACEHOLDER = VEHICLE_MANUFACTURER_PLACEHOLDER;\n  const VEHICLE_MODEL_PLACEHOLDER = 'Select Model';\n  _exports.VEHICLE_MODEL_PLACEHOLDER = VEHICLE_MODEL_PLACEHOLDER;\n  const VEHICLE_REAR_AXEL_PLACEHOLDER = 'Select Rear Axle';\n  _exports.VEHICLE_REAR_AXEL_PLACEHOLDER = VEHICLE_REAR_AXEL_PLACEHOLDER;\n  const VEHICLE_START_GARAGE_PLACEHOLDER = 'Select Start Garage Location';\n  _exports.VEHICLE_START_GARAGE_PLACEHOLDER = VEHICLE_START_GARAGE_PLACEHOLDER;\n  const VEHICLE_STATUS_PLACEHOLDER = 'Select Vehicle Status';\n  _exports.VEHICLE_STATUS_PLACEHOLDER = VEHICLE_STATUS_PLACEHOLDER;\n  const VEHICLE_TIRE_SIZE_PLACEHOLDER = 'Select Tire Size';\n  _exports.VEHICLE_TIRE_SIZE_PLACEHOLDER = VEHICLE_TIRE_SIZE_PLACEHOLDER;\n  const VEHICLE_TRANSMISSION_PLACEHOLDER = 'Select Transmission';\n  _exports.VEHICLE_TRANSMISSION_PLACEHOLDER = VEHICLE_TRANSMISSION_PLACEHOLDER;\n  const VEHICLE_TYPE_PLACEHOLDER = 'Select Vehicle Type';\n  _exports.VEHICLE_TYPE_PLACEHOLDER = VEHICLE_TYPE_PLACEHOLDER;\n  const VEHICLE_WHEELBASE_PLACEHOLDER = 'Select Wheelbase'; // Note place holder\n\n  _exports.VEHICLE_WHEELBASE_PLACEHOLDER = VEHICLE_WHEELBASE_PLACEHOLDER;\n  const NOTES_PLACEHOLDER = 'Enter Notes'; // Note place holder\n\n  _exports.NOTES_PLACEHOLDER = NOTES_PLACEHOLDER;\n  const FAILEDDOT_PLACEHOLDER = 'Enter Failed DOT'; // Mileage place holder\n\n  _exports.FAILEDDOT_PLACEHOLDER = FAILEDDOT_PLACEHOLDER;\n  const MILEAGE_PLACEHOLDER = 'Enter Mileage #'; // provider place holders\n\n  _exports.MILEAGE_PLACEHOLDER = MILEAGE_PLACEHOLDER;\n  const PROVIDER_PLACEHOLDER = 'Select a Provider'; // code place holder\n\n  _exports.PROVIDER_PLACEHOLDER = PROVIDER_PLACEHOLDER;\n  const CODE_PLACEHOLDER = 'Enter Code'; // description place holder\n\n  _exports.CODE_PLACEHOLDER = CODE_PLACEHOLDER;\n  const DESCRIPTION_PLACEHOLDER = 'Enter Description'; // Display Name place holder\n\n  _exports.DESCRIPTION_PLACEHOLDER = DESCRIPTION_PLACEHOLDER;\n  const DISPLAY_NAME_PLACEHOLDER = 'Enter Display Name'; // vehicle DOT Inspection placeholder\n\n  _exports.DISPLAY_NAME_PLACEHOLDER = DISPLAY_NAME_PLACEHOLDER;\n  const INSPECTION_CATEGORY_PLACEHOLDER = 'Select a Category'; // vehicle Maintenance Placeholder\n\n  _exports.INSPECTION_CATEGORY_PLACEHOLDER = INSPECTION_CATEGORY_PLACEHOLDER;\n  const MAINTENANCE_STATUS_PLACEHOLDER = 'Select Status';\n  _exports.MAINTENANCE_STATUS_PLACEHOLDER = MAINTENANCE_STATUS_PLACEHOLDER;\n  const MAINTENANCE_TYPE_PLACEHOLDER = 'Select Type';\n  _exports.MAINTENANCE_TYPE_PLACEHOLDER = MAINTENANCE_TYPE_PLACEHOLDER;\n  const MAINTENANCE_LOCATION_PLACEHOLDER = 'Select Location';\n  _exports.MAINTENANCE_LOCATION_PLACEHOLDER = MAINTENANCE_LOCATION_PLACEHOLDER;\n  const PROBLEM_IDENTIFIED_PLACEHOLDER = 'Select';\n  _exports.PROBLEM_IDENTIFIED_PLACEHOLDER = PROBLEM_IDENTIFIED_PLACEHOLDER;\n  const INSPECTION_PROVIDER_NAME_PLACEHOLDER = 'Select Inspector'; // vehicle Road Call Placeholders\n\n  _exports.INSPECTION_PROVIDER_NAME_PLACEHOLDER = INSPECTION_PROVIDER_NAME_PLACEHOLDER;\n  const ROAD_CALL_CODE_PLACEHOLDER = 'Select Code';\n  _exports.ROAD_CALL_CODE_PLACEHOLDER = ROAD_CALL_CODE_PLACEHOLDER;\n  const ROAD_CALL_CODE_DESCRIPTION_PLACEHOLDER = 'Code Description';\n  _exports.ROAD_CALL_CODE_DESCRIPTION_PLACEHOLDER = ROAD_CALL_CODE_DESCRIPTION_PLACEHOLDER;\n  const ROAD_CALL_NEW_VEHICLE_PLACEHOLDER = 'Search for new Vehicle'; // Vehicle Equipment Placeholder\n\n  _exports.ROAD_CALL_NEW_VEHICLE_PLACEHOLDER = ROAD_CALL_NEW_VEHICLE_PLACEHOLDER;\n  const TYPE_PLACEHOLDER = 'Enter Type';\n  _exports.TYPE_PLACEHOLDER = TYPE_PLACEHOLDER;\n});","define(\"adept-iq/config/server-relationships\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.serverRelationships = void 0;\n  // this is deprecated; used for generating RQL for active context queries\n  const serverRelationships = {\n    route: [{\n      type: 'hasMany',\n      modelName: 'trip',\n      path: 'clusters.trips'\n    }, {\n      type: 'hasMany',\n      modelName: 'stop',\n      path: 'clusters.trips.stops'\n    }],\n    trip: [{\n      type: 'belongsTo',\n      modelName: 'route',\n      path: 'cluster.route'\n    }, {\n      type: 'hasMany',\n      modelName: 'stop',\n      path: 'stops'\n    }],\n    stop: [{\n      type: 'belongsTo',\n      modelName: 'route',\n      path: 'trip.cluster.route'\n    }, {\n      type: 'belongsTo',\n      modelName: 'trip',\n      path: 'trip'\n    }],\n    schedule: [],\n    'rms-rider': [],\n    'ss-driver': [],\n    'ss-schedule': [],\n    'vehicle': [],\n    'bs-booking': [],\n    'bs-leg': [],\n    'sso-user': [],\n    'bs-subscription': []\n  };\n  _exports.serverRelationships = serverRelationships;\n});","define(\"adept-iq/config/widget-events\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.WidgetEvents = _exports.WIDGET_MINIMIZE_EVENT = _exports.WIDGET_MAXIMIZE_EVENT = _exports.WIDGET_DATA_ACTION = _exports.REMOVE_TRAVERSAL_SELECTION_EVENT = _exports.RECEIVE_DATA_LIST_EVENT = _exports.LOAD_MORE_DATA_LIST_EVENT = _exports.INITIAL_WIDGET_LOAD_EVENT = _exports.DESELECT_ALL_WIDGET_EVENT = _exports.CORE_ENTITY_SELECTION_EVENT = _exports.ADD_TRAVERSAL_SELECTION_EVENT = void 0;\n  const WIDGET_DATA_ACTION = 'WidgetData'; // update , add, delete filter\n\n  _exports.WIDGET_DATA_ACTION = WIDGET_DATA_ACTION;\n  const RECEIVE_DATA_LIST_EVENT = 'ReceiveDataList'; // initial load, filter , sorting\n\n  _exports.RECEIVE_DATA_LIST_EVENT = RECEIVE_DATA_LIST_EVENT;\n  const INITIAL_WIDGET_LOAD_EVENT = 'InitialWidgetLoadEvent';\n  _exports.INITIAL_WIDGET_LOAD_EVENT = INITIAL_WIDGET_LOAD_EVENT;\n  const LOAD_MORE_DATA_LIST_EVENT = 'LoadMoreDataList'; // pagination\n\n  _exports.LOAD_MORE_DATA_LIST_EVENT = LOAD_MORE_DATA_LIST_EVENT;\n  const ADD_TRAVERSAL_SELECTION_EVENT = 'AddTraversalFilter'; // when user selects a checkbox\n\n  _exports.ADD_TRAVERSAL_SELECTION_EVENT = ADD_TRAVERSAL_SELECTION_EVENT;\n  const REMOVE_TRAVERSAL_SELECTION_EVENT = 'RemoveTraversalFilter'; // when user de-selects a checkbox\n\n  _exports.REMOVE_TRAVERSAL_SELECTION_EVENT = REMOVE_TRAVERSAL_SELECTION_EVENT;\n  const WIDGET_MAXIMIZE_EVENT = 'MaximizeWidget';\n  _exports.WIDGET_MAXIMIZE_EVENT = WIDGET_MAXIMIZE_EVENT;\n  const WIDGET_MINIMIZE_EVENT = 'MinimizeWidget';\n  _exports.WIDGET_MINIMIZE_EVENT = WIDGET_MINIMIZE_EVENT;\n  const DESELECT_ALL_WIDGET_EVENT = 'DeselectAllWidgetEvent';\n  _exports.DESELECT_ALL_WIDGET_EVENT = DESELECT_ALL_WIDGET_EVENT;\n  const CORE_ENTITY_SELECTION_EVENT = 'CoreEntitySelectionEvent';\n  _exports.CORE_ENTITY_SELECTION_EVENT = CORE_ENTITY_SELECTION_EVENT;\n  const WidgetEvents = {\n    INITIAL_WIDGET_LOAD_EVENT,\n    WIDGET_DATA_ACTION,\n    RECEIVE_DATA_LIST_EVENT,\n    LOAD_MORE_DATA_LIST_EVENT,\n    ADD_TRAVERSAL_SELECTION_EVENT,\n    REMOVE_TRAVERSAL_SELECTION_EVENT,\n    WIDGET_MAXIMIZE_EVENT,\n    WIDGET_MINIMIZE_EVENT,\n    DESELECT_ALL_WIDGET_EVENT,\n    CORE_ENTITY_SELECTION_EVENT\n  };\n  _exports.WidgetEvents = WidgetEvents;\n});","define(\"adept-iq/config/widget-groups\", [\"exports\", \"adept-iq/config/widget-types\"], function (_exports, _widgetTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = [{\n    id: 'widgets-1',\n    title: 'Resources',\n    widgetTypes: [_widgetTypes.passengersWidgetType, _widgetTypes.driversWidgetType, _widgetTypes.vehiclesWidgetType]\n  }, {\n    id: 'widgets-2',\n    title: 'Work',\n    widgetTypes: [_widgetTypes.mapWidgetType, _widgetTypes.messagesWidgetType, _widgetTypes.alertsWidgetType, _widgetTypes.routesWidgetType, _widgetTypes.tripsWidgetType, _widgetTypes.stopsWidgetType, _widgetTypes.subscriptionsWidgetType, _widgetTypes.zonesWidgetType]\n  }, {\n    id: 'metrics',\n    title: 'Metrics',\n    widgetTypes: [_widgetTypes.scheduleWidgetType, _widgetTypes.metricsWidgetType, _widgetTypes.gaugeWidgetType, _widgetTypes.boxWidgetType, _widgetTypes.donutChartWidgetType, _widgetTypes.barChartWidgetType]\n  }, {\n    id: 'config',\n    title: 'Configuration',\n    widgetTypes: [_widgetTypes.usersWidgetType, _widgetTypes.rolesWidgetType]\n  }, {\n    id: 'test',\n    title: 'Test Tools',\n    widgetTypes: [_widgetTypes.scatterChartWidgetType]\n  } // {\n  //   id: 'reconcile',\n  //   title: 'Reconcile',\n  //   widgetTypes: [\n  //     reconcileRoutesWidgetType,\n  //     reconcileTripsWidgetType,\n  //     reconcileStopsWidgetType\n  //   ]\n  // }\n  ];\n  _exports.default = _default;\n});","define(\"adept-iq/config/widget-types\", [\"exports\", \"adept-iq/config/mapped-permIds\"], function (_exports, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.zonesWidgetType = _exports.widgetTypesHash = _exports.vehiclesWidgetType = _exports.usersWidgetType = _exports.tripsWidgetType = _exports.subscriptionsWidgetType = _exports.stopsWidgetType = _exports.scheduleWidgetType = _exports.scatterChartWidgetType = _exports.routesWidgetType = _exports.routeInformationWidgetType = _exports.rolesWidgetType = _exports.reportlistWidgetType = _exports.reconcileTripsWidgetType = _exports.reconcileStopsWidgetType = _exports.reconcileRoutesWidgetType = _exports.reactPlaybackWidgetType = _exports.playbackWidgetType = _exports.permUsersWidgetType = _exports.permRolesWidgetType = _exports.passengersWidgetType = _exports.metricsWidgetType = _exports.messagesWidgetType = _exports.mapWidgetType = _exports.historyRoutesWidgetType = _exports.gaugeWidgetType = _exports.driversWidgetType = _exports.donutChartWidgetType = _exports.default = _exports.boxWidgetType = _exports.box4WidgetType = _exports.box3WidgetType = _exports.box2WidgetType = _exports.box1WidgetType = _exports.bookingWidgetType = _exports.barChartWidgetType = _exports.alertsWidgetType = void 0;\n  // this file is for \"public\" widget config required for listing available\n  // widget types and computing widget placements; most other config should be\n  // placed in the `config.js` adjacent to the specific widgets' components\n  // `name` reflects how the widget appears in a list (e.g. add-widget sidebar).\n  // For widget title bar, set `title` in widget's `config.js`.\n  // this would be a good place to specify icons for add-widget sidebar\n  const bookingWidgetType = {\n    id: 'booking',\n    name: 'booking',\n    componentName: 'iq-widgets/booking-widget',\n    permId: _mappedPermIds.default.accessBookingWorkspace,\n    defaultWidth: 14,\n    defaultHeight: 13,\n    minWidth: 10,\n    minHeight: 4\n  };\n  _exports.bookingWidgetType = bookingWidgetType;\n  const messagesWidgetType = {\n    id: 'messages',\n    name: 'Messages',\n    componentName: 'iq-widgets/message-widget',\n    permId: _mappedPermIds.default.showMessages,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.messagesWidgetType = messagesWidgetType;\n  const reportlistWidgetType = {\n    id: 'reports',\n    name: 'Report List',\n    componentName: 'iq-widgets/reportlist-widget',\n    permId: _mappedPermIds.default.showReports,\n    defaultWidth: 12,\n    defaultHeight: 8,\n    minWidth: 8,\n    minHeight: 8\n  };\n  _exports.reportlistWidgetType = reportlistWidgetType;\n  const routesWidgetType = {\n    id: 'routes',\n    name: 'Routes',\n    componentName: 'iq-widgets/routes-widget',\n    permId: _mappedPermIds.default.showRoutes,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.routesWidgetType = routesWidgetType;\n  const stopsWidgetType = {\n    id: 'stops',\n    name: 'Stops',\n    componentName: 'iq-widgets/stops-widget',\n    permId: _mappedPermIds.default.showStops,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.stopsWidgetType = stopsWidgetType;\n  const tripsWidgetType = {\n    id: 'trips',\n    name: 'Trips',\n    componentName: 'iq-widgets/trips-widget',\n    permId: _mappedPermIds.default.showTrips,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.tripsWidgetType = tripsWidgetType;\n  const mapWidgetType = {\n    id: 'map',\n    name: 'Map',\n    componentName: 'iq-widgets/map-widget',\n    permId: _mappedPermIds.default.showMaps,\n    defaultWidth: 3,\n    defaultHeight: 3,\n    minWidth: 2,\n    minHeight: 2\n  };\n  _exports.mapWidgetType = mapWidgetType;\n  const subscriptionsWidgetType = {\n    id: 'subscriptions',\n    name: 'Subscriptions',\n    componentName: 'iq-widgets/subscriptions-widget',\n    permId: _mappedPermIds.default.showSubscriptions,\n    defaultWidth: 4,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.subscriptionsWidgetType = subscriptionsWidgetType;\n  const passengersWidgetType = {\n    id: 'passengers',\n    name: 'Passenger',\n    componentName: 'iq-widgets/passengers-widget',\n    permId: _mappedPermIds.default.showPassengers,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.passengersWidgetType = passengersWidgetType;\n  const driversWidgetType = {\n    id: 'drivers',\n    name: 'Drivers',\n    componentName: 'iq-widgets/drivers-widget',\n    permId: _mappedPermIds.default.showDrivers,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.driversWidgetType = driversWidgetType;\n  const vehiclesWidgetType = {\n    id: 'vehicles',\n    name: 'Vehicles',\n    componentName: 'iq-widgets/vehicles-widget',\n    permId: _mappedPermIds.default.showVehicles,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  }; // @TODO removing all metric / graphic widgets (temporarly)\n\n  _exports.vehiclesWidgetType = vehiclesWidgetType;\n  const boxWidgetType = {\n    id: 'b',\n    name: 'Box',\n    componentName: 'iq-widgets/box-widget',\n    permId: _mappedPermIds.default.showBoxes,\n    defaultWidth: 1,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.boxWidgetType = boxWidgetType;\n  const metricsWidgetType = {\n    id: 'metric',\n    name: 'Metrics',\n    componentName: 'iq-widgets/metrics-column-widget',\n    permId: _mappedPermIds.default.showMetrics,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.metricsWidgetType = metricsWidgetType;\n  const zonesWidgetType = {\n    id: 'zones',\n    name: 'Zones',\n    componentName: 'iq-widgets/zones-widget',\n    permId: _mappedPermIds.default.showZones,\n    defaultWidth: 3,\n    defaultHeight: 3,\n    minWidth: 2,\n    minHeight: 2\n  };\n  _exports.zonesWidgetType = zonesWidgetType;\n  const alertsWidgetType = {\n    id: 'alerts',\n    name: 'Alerts',\n    componentName: 'iq-widgets/alert-widget',\n    permId: _mappedPermIds.default.showAlerts,\n    defaultWidth: 6,\n    defaultHeight: 2,\n    minWidth: 2,\n    minHeight: 1\n  };\n  _exports.alertsWidgetType = alertsWidgetType;\n  const usersWidgetType = {\n    id: 'perm-users',\n    name: 'Users',\n    componentName: 'iq-widgets/users-widget',\n    permId: _mappedPermIds.default.showUsers,\n    defaultWidth: 4,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.usersWidgetType = usersWidgetType;\n  const rolesWidgetType = {\n    id: 'perm-roles',\n    name: 'Roles',\n    componentName: 'iq-widgets/roles-widget',\n    permId: _mappedPermIds.default.showRoles,\n    defaultWidth: 4,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.rolesWidgetType = rolesWidgetType;\n  const donutChartWidgetType = {\n    id: 'donut',\n    name: 'Donut Chart',\n    componentName: 'iq-widgets/donut-chart-widget',\n    //permId: mappedPermIds.showDonutChart,\n    defaultWidth: 3,\n    defaultHeight: 2,\n    minWidth: 3,\n    minHeight: 2\n  };\n  _exports.donutChartWidgetType = donutChartWidgetType;\n  const barChartWidgetType = {\n    id: 'bar',\n    name: 'Bar Chart',\n    componentName: 'iq-widgets/bar-chart-widget',\n    //permId: mappedPermIds.showBarChart,\n    defaultWidth: 4,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.barChartWidgetType = barChartWidgetType;\n  const gaugeWidgetType = {\n    id: 'g',\n    name: 'Gauge',\n    componentName: 'iq-widgets/gauge-widget',\n    //permId: mappedPermIds.showGaugeChart,\n    defaultWidth: 3,\n    defaultHeight: 2,\n    minWidth: 3,\n    minHeight: 2\n  };\n  _exports.gaugeWidgetType = gaugeWidgetType;\n  const scatterChartWidgetType = {\n    id: 'scatter-chart',\n    name: 'Scatter Chart',\n    componentName: 'iq-widgets/scatter-chart-widget',\n    //permId: mappedPermIds.showScatterChart,\n    defaultWidth: 6,\n    defaultHeight: 4,\n    minWidth: 4,\n    minHeight: 4\n  };\n  _exports.scatterChartWidgetType = scatterChartWidgetType;\n  const box1WidgetType = {\n    id: 'box-1',\n    name: 'Box 1',\n    componentName: 'iq-widgets/box-widget',\n    //permId: mappedPermIds.showBox1,\n    defaultWidth: 1,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.box1WidgetType = box1WidgetType;\n  const box2WidgetType = {\n    id: 'box-2',\n    name: 'Box 2',\n    componentName: 'iq-widgets/box-widget',\n    //permId: mappedPermIds.showBox2,\n    defaultWidth: 1,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.box2WidgetType = box2WidgetType;\n  const box3WidgetType = {\n    id: 'box-3',\n    name: 'Box 3',\n    componentName: 'iq-widgets/box-widget',\n    //permId: mappedPermIds.showBox3,\n    defaultWidth: 1,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.box3WidgetType = box3WidgetType;\n  const box4WidgetType = {\n    id: 'box-4',\n    name: 'Box 4',\n    componentName: 'iq-widgets/box-widget',\n    //permId: mappedPermIds.showBox4,\n    defaultWidth: 1,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.box4WidgetType = box4WidgetType;\n  const scheduleWidgetType = {\n    id: 'schedule-metrics',\n    name: 'Schedule Metrics',\n    componentName: 'iq-widgets/schedule-column-widget',\n    permId: _mappedPermIds.default.showSchedule,\n    defaultWidth: 6,\n    defaultHeight: 2,\n    minWidth: 2,\n    minHeight: 1\n  };\n  _exports.scheduleWidgetType = scheduleWidgetType;\n  const playbackWidgetType = {\n    id: 'playback',\n    name: 'Playback',\n    componentName: 'iq-widgets/playback-widget',\n    permId: _mappedPermIds.default.playbackVehicle,\n    defaultWidth: 12,\n    defaultHeight: 8,\n    minWidth: 12,\n    minHeight: 8\n  };\n  _exports.playbackWidgetType = playbackWidgetType;\n  const routeInformationWidgetType = {\n    id: 'route-information',\n    name: 'Route Information',\n    componentName: 'iq-widgets/route-information-widget',\n    permId: _mappedPermIds.default.accessReconcileWorkspace,\n    defaultWidth: 12,\n    defaultHeight: 8,\n    minWidth: 12,\n    minHeight: 8\n  };\n  _exports.routeInformationWidgetType = routeInformationWidgetType;\n  const historyRoutesWidgetType = {\n    id: 'history-routes',\n    name: 'History Routes',\n    componentName: 'iq-widgets/history-routes-widget',\n    permId: _mappedPermIds.default.accessReconcileWorkspace,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.historyRoutesWidgetType = historyRoutesWidgetType;\n  const permUsersWidgetType = {\n    id: 'perm-users',\n    name: 'Users',\n    componentName: 'iq-widgets/permissions-users-widget',\n    permId: _mappedPermIds.default.showUsers,\n    defaultWidth: 4,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.permUsersWidgetType = permUsersWidgetType;\n  const permRolesWidgetType = {\n    id: 'perm-roles',\n    name: 'Roles',\n    componentName: 'iq-widgets/permissions-roles-widget',\n    permId: _mappedPermIds.default.showRoles,\n    defaultWidth: 4,\n    defaultHeight: 2,\n    minWidth: 1,\n    minHeight: 1\n  };\n  _exports.permRolesWidgetType = permRolesWidgetType;\n  const reactPlaybackWidgetType = {\n    id: 'playback-new',\n    name: 'playback-new',\n    componentName: 'iq-widgets/ember-react-playback',\n    permId: _mappedPermIds.default.playbackVehicle,\n    defaultWidth: 12,\n    defaultHeight: 8,\n    minWidth: 12,\n    minHeight: 8\n  }; // TODO: Change id for reconcile widgets.\n\n  _exports.reactPlaybackWidgetType = reactPlaybackWidgetType;\n  const reconcileRoutesWidgetType = {\n    id: 'reconcile-routes',\n    name: 'History Routes',\n    componentName: 'iq-widgets/reconcile-routes-widget',\n    permId: _mappedPermIds.default.accessReconcileWorkspace,\n    defaultWidth: 8,\n    defaultHeight: 2,\n    minWidth: 4,\n    minHeight: 2\n  };\n  _exports.reconcileRoutesWidgetType = reconcileRoutesWidgetType;\n  const reconcileTripsWidgetType = {\n    id: 'reconcile-trips',\n    name: 'History Trips',\n    componentName: 'iq-widgets/reconcile-trips-widget',\n    permId: _mappedPermIds.default.accessReconcileWorkspace,\n    defaultWidth: 12,\n    defaultHeight: 8,\n    minWidth: 12,\n    minHeight: 8\n  };\n  _exports.reconcileTripsWidgetType = reconcileTripsWidgetType;\n  const reconcileStopsWidgetType = {\n    id: 'reconcile-stops',\n    name: 'History Stops',\n    componentName: 'iq-widgets/reconcile-stops-widget',\n    permId: _mappedPermIds.default.accessReconcileWorkspace,\n    defaultWidth: 3,\n    defaultHeight: 3,\n    minWidth: 2,\n    minHeight: 2\n  };\n  _exports.reconcileStopsWidgetType = reconcileStopsWidgetType;\n  const widgetTypes = [messagesWidgetType, routesWidgetType, stopsWidgetType, tripsWidgetType, mapWidgetType, passengersWidgetType, driversWidgetType, vehiclesWidgetType, boxWidgetType, metricsWidgetType, donutChartWidgetType, barChartWidgetType, gaugeWidgetType, box1WidgetType, box2WidgetType, box3WidgetType, box4WidgetType, alertsWidgetType, scatterChartWidgetType, rolesWidgetType, usersWidgetType, subscriptionsWidgetType, zonesWidgetType, bookingWidgetType, scheduleWidgetType, playbackWidgetType, reactPlaybackWidgetType, routeInformationWidgetType, historyRoutesWidgetType, permRolesWidgetType, permUsersWidgetType, reportlistWidgetType, reconcileRoutesWidgetType, reconcileTripsWidgetType, reconcileStopsWidgetType];\n  const widgetTypesHash = widgetTypes.reduce((obj, widgetType) => {\n    obj[widgetType.id] = widgetType;\n    return obj;\n  }, {});\n  _exports.widgetTypesHash = widgetTypesHash;\n  var _default = widgetTypes;\n  _exports.default = _default;\n});","define(\"adept-iq/config/workspace-states\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = [{\n    id: 'default',\n    hooks: []\n  }, {\n    id: 'editWorkspace',\n    options: {\n      classNames: ['add-widget-drawer']\n    },\n    sideDrawerComponent: 'side-drawer/add-widget',\n    hooks: [{\n      from: '*',\n\n      action() {\n        // this allows us to roll back on cancel\n        this.get('dashboard').makeWidgetsSavepoint(); // set tooltip\n\n        this.get('tooltip').pushConfirmation({\n          tip: 'Configuration mode:',\n          primaryActionText: 'Exit Configuration',\n          secondaryActionText: 'Undo Changes',\n          primaryAction: () => {\n            this.popState('editWorkspace');\n            this.get('notifications').info('In order to retain the workspace changes, you must save the workspace.');\n          },\n          secondaryAction: () => {\n            this.get('dashboard').rollbackWidgets(); // Allow time for the GridStack instance to update the grid with the\n            // rolled back widget configs before popping edit workspace state.\n\n            setTimeout(() => {\n              this.popState('editWorkspace');\n            }, 15);\n          }\n        });\n      }\n\n    }, {\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'editPlayback',\n    hooks: [{\n      from: '*',\n\n      action() {\n        // this allows us to roll back on cancel\n        this.get('dashboard').makeWidgetsSavepoint(); // set tooltip\n\n        this.get('tooltip').pushConfirmation({\n          tip: 'Configuration mode:',\n          primaryActionText: 'Exit Configuration',\n          secondaryActionText: 'Undo Changes',\n          primaryAction: () => {\n            this.popState('editPlayback');\n            this.get('notifications').info('In order to retain the workspace changes, you must save the workspace.');\n          },\n          secondaryAction: () => {\n            this.get('dashboard').rollbackWidgets(); // Allow time for the GridStack instance to update the grid with the\n            // rolled back widget configs before popping edit workspace state.\n\n            setTimeout(() => {\n              this.popState('editPlayback');\n            }, 15);\n          }\n        });\n      }\n\n    }, {\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'editRecords',\n    isSideDrawerVisible: true,\n    hooks: []\n  }, {\n    id: 'filterColumnWidget',\n    sideDrawerComponent: 'side-drawer/filter-settings',\n    hooks: []\n  }, {\n    id: 'gaugeWidget',\n    sideDrawerComponent: 'side-drawer/gauge-chart-settings',\n    hooks: []\n  }, {\n    id: 'donutChartWidget',\n    sideDrawerComponent: 'side-drawer/donut-chart-settings',\n    hooks: []\n  }, {\n    id: 'barChartWidget',\n    sideDrawerComponent: 'side-drawer/bar-chart-settings',\n    hooks: []\n  }, {\n    id: 'scatterChartWidget',\n    sideDrawerComponent: 'side-drawer/scatter-chart-settings',\n    hooks: []\n  }, {\n    id: 'boxWidget',\n    sideDrawerComponent: 'side-drawer/box-widget-settings',\n    hooks: []\n  }, {\n    // TODO: is this a real state?\n    id: 'metricsColumnWidget',\n    isSideDrawerVisible: true,\n    hooks: []\n  }, {\n    id: 'filterMapWidget',\n    sideDrawerComponent: 'side-drawer/map-filter',\n    hooks: []\n  }, {\n    id: 'addNewMessage',\n    sideDrawerComponent: 'side-drawer/add-new-message',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'openWorkspace',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'saveWorkspaceAs',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'editWorkspaceAs',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'deleteWorkspace',\n    hooks: [{\n      from: '*',\n\n      action() {\n        const mappedPermIds = this.get('mappedPermIds');\n        const permissionLayer = this.get('permissionLayer');\n        const dashboard = this.get('dashboardModel');\n        const userId = this.get('session').data.authenticated.userId.replace(/-/g, '_');\n        const category = `workspaces-${userId}`;\n        const deletePrivateWorkspacePerm = permissionLayer.permInUserHash(mappedPermIds.deletePrivateWorkspace);\n        const deletePublicWorkspacePerm = permissionLayer.permInUserHash(mappedPermIds.deletePublicWorkspace);\n        const canDeleteAll = this.get('permissionLayer').permInUserHash(mappedPermIds.deleteWorkspace);\n\n        if (!canDeleteAll && dashboard.get('isPublicWorkspace') && !deletePublicWorkspacePerm && dashboard.get('userId') !== userId || dashboard.get('isPrivateWorkspace') && (dashboard.get('category') !== category || !deletePrivateWorkspacePerm)) {\n          this.get('tooltip').pushConfirmation({\n            title: 'Delete Workspace',\n            tip: 'You do not have permission to delete the workspace.',\n            warning: true,\n            hasOverlay: true,\n            primaryActionText: 'Ok',\n            primaryAction: () => {\n              this.popState('deleteWorkspace');\n            },\n            closeAction: () => {\n              this.popState('deleteWorkspace');\n            }\n          });\n          return;\n        }\n\n        this.get('tooltip').pushConfirmation({\n          title: 'Delete workspace',\n          tip: 'Permanently delete workspace?',\n          hasOverlay: true,\n          primaryActionText: 'Delete Workspace',\n          secondaryActionText: 'Keep Workspace',\n          primaryAction: () => {\n            this.popState('deleteWorkspace').then(async () => {\n              const name = this.get('dashboardModel.name');\n              const getDefaultDashboardModel = this.get('workspaceContext.workspace.getDefaultDashboardModel').bind(this);\n              const defaultDashboard = await getDefaultDashboardModel();\n              return dashboard.destroyRecord().then(() => {\n                // have to unloadRecord to unmap ember data id\n                dashboard.unloadRecord(); // must clear this before transitioning to index\n\n                localStorage.removeItem('lastDashboardId');\n                localStorage.removeItem('userDash');\n\n                if (defaultDashboard) {\n                  this.get('router').transitionTo('dashboard', defaultDashboard);\n                } else {\n                  this.get('router').transitionTo('index');\n                }\n\n                this.get('notifications').success(`Successfully Deleted Workspace ${name}`);\n              }).catch(() => {\n                this.get('notifications').warning(`Failed to Delete Workspace ${name}`);\n              });\n            });\n          },\n          secondaryAction: () => {\n            this.popState('deleteWorkspace');\n          },\n          closeAction: () => {\n            this.popState('deleteWorkspace');\n          }\n        });\n      }\n\n    }, {\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'closeSchedule',\n    hooks: []\n  }, {\n    id: 'reoptimize',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'schedule-generate',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'assignVehicleDriverToRoute',\n    sideDrawerComponent: 'side-drawer/assign-vehicle-driver-to-route'\n  }, {\n    id: 'routeActivityLog',\n    sideDrawerComponent: 'side-drawer/activity-log/route-activity-log'\n  }, {\n    id: 'tripActivityLog',\n    sideDrawerComponent: 'side-drawer/activity-log/trip-activity-log'\n  }, {\n    id: 'reconcileCancelTrip',\n    sideDrawerComponent: 'side-drawer/reconcile-cancel-trip'\n  }, {\n    id: 'vehicleActivityLog',\n    sideDrawerComponent: 'side-drawer/activity-log/vehicle-activity-log'\n  }, {\n    id: 'bookingActivityLog',\n    sideDrawerComponent: 'side-drawer/activity-log/booking-activity-log'\n  }, {\n    id: 'subscriptionActivityLog',\n    sideDrawerComponent: 'side-drawer/activity-log/subscription-activity-log'\n  }, {\n    id: 'noShowForm',\n    sideDrawerComponent: 'side-drawer/no-show-form',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'cancelTripForm',\n    sideDrawerComponent: 'side-drawer/cancel-trip-form',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }, {\n    id: 'editSystemConfiguration',\n    sideDrawerComponent: 'side-drawer/system-config'\n  }, {\n    id: 'roadSupervisor'\n  }, {\n    id: 'tripTransfer',\n    sideDrawerComponent: 'side-drawer/trip-transfer',\n    options: {\n      displayName: 'Trip Transfer',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'performDriverBreak',\n    sideDrawerComponent: 'side-drawer/perform-stop/break',\n    classNames: ['vertical-scroll']\n  }, {\n    id: 'performPickStop',\n    sideDrawerComponent: 'side-drawer/perform-stop/pick',\n    classNames: ['vertical-scroll']\n  }, {\n    id: 'unPerformNoShow',\n    sideDrawerComponent: 'side-drawer/unperform-no-show'\n  }, {\n    id: 'reconcileUnPerformNoShow',\n    sideDrawerComponent: 'side-drawer/reconcile-unperform-no-show'\n  }, {\n    id: 'unPerformPickStop',\n    sideDrawerComponent: 'side-drawer/unperform-pick-stop'\n  }, {\n    id: 'performDropStop',\n    sideDrawerComponent: 'side-drawer/perform-stop/drop'\n  }, {\n    id: 'performAllStop',\n    sideDrawerComponent: 'side-drawer/perform-stop/all',\n    options: {\n      classNames: ['wide', 'vertical-scroll']\n    }\n  }, {\n    id: 'unPerformDropStop',\n    sideDrawerComponent: 'side-drawer/unperform-drop-stop'\n  }, {\n    id: 'unPerformBreak',\n    sideDrawerComponent: 'side-drawer/unperform-break-stop'\n  }, {\n    id: 'rescueRoute',\n    sideDrawerComponent: 'side-drawer/rescue-route'\n  }, {\n    id: 'rescueRouteReconcile',\n    sideDrawerComponent: 'side-drawer/reconcile-rescue-route'\n  }, {\n    id: 'addEditDispatchRoute',\n    sideDrawerComponent: 'side-drawer/add-edit-dispatch-route'\n  }, {\n    id: 'reconcileAddNewRoute',\n    sideDrawerComponent: 'side-drawer/reconcile-add-new-route'\n  }, {\n    id: 'reconcileVehicleBreakdown',\n    sideDrawerComponent: 'side-drawer/reconcile-vehicle-breakdown'\n  }, {\n    id: 'addeditScheduleRoute',\n    sideDrawerComponent: 'side-drawer/add-edit-schedule-route'\n  }, {\n    id: 'addEditAdHocNotification',\n    sideDrawerComponent: 'side-drawer/add-edit-ad-hoc-notification',\n    options: {\n      displayName: 'Ad Hoc Notification',\n      classNames: ['vertical-scroll']\n    }\n  }, {\n    id: 'composeRole',\n    sideDrawerComponent: 'side-drawer/compose-role'\n  }, {\n    id: 'permAddRole',\n    sideDrawerComponent: 'side-drawer/permissions-add-role'\n  }, {\n    id: 'schedulingBulkTripTransfer',\n    sideDrawerComponent: 'side-drawer/scheduling-bulk-trip-transfer',\n    options: {\n      displayName: 'Bulk Trip Transfer',\n      classNames: ['wide', 'vertical-scroll']\n    }\n  }, {\n    id: 'addBreak',\n    sideDrawerComponent: 'side-drawer/add-break',\n    options: {\n      displayName: 'Add Driver Break',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileAddBreak',\n    sideDrawerComponent: 'side-drawer/reconcile-add-break',\n    options: {\n      displayName: 'Insert Driver Break',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'schedulingTripTransfer',\n    sideDrawerComponent: 'side-drawer/scheduling-trip-transfer',\n    options: {\n      displayName: 'Trip Transfer',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'schedulingAutoReschedule',\n    sideDrawerComponent: 'side-drawer/scheduling-auto-reschedule',\n    options: {\n      displayName: 'Trip Rescheduled',\n      classNames: ['wide', 'vertical-scroll']\n    }\n  }, {\n    id: 'bulkTripTransfer',\n    sideDrawerComponent: 'side-drawer/bulk-trip-transfer',\n    options: {\n      displayName: 'Bulk Trip Transfer',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'editTripWidget',\n    sideDrawerComponent: 'side-drawer/edit-trip-widget',\n    options: {\n      displayName: 'Trip Transfer',\n      classNames: ['wide', 'vertical-scroll']\n    }\n  }, {\n    id: 'reconcileTripTransferToRoute',\n    sideDrawerComponent: 'side-drawer/reconcile-trip-transfer',\n    options: {\n      displayName: 'Transfer Trip to Another Route',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileNoShowTrip',\n    sideDrawerComponent: 'side-drawer/reconcile-noshow-trip',\n    options: {\n      displayName: 'No Show Trip',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileOpenDates',\n    sideDrawerComponent: 'side-drawer/reconcile-reopen-dates',\n    options: {\n      displayName: 'Reopen dates to editing',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileReplacementBreakdown',\n    sideDrawerComponent: 'side-drawer/reconcile-replacement-breakdown',\n    options: {\n      displayName: 'Add Replacement Route',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileCloseDates',\n    sideDrawerComponent: 'side-drawer/reconcile-close-dates',\n    options: {\n      displayName: 'Close dates to editing',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'playbackFilterColumnWidget',\n    sideDrawerComponent: 'side-drawer/playback-filter-settings',\n    hooks: []\n  }, {\n    id: 'reconcileFilterColumnWidget',\n    sideDrawerComponent: 'side-drawer/reconcile-filter-settings',\n    hooks: []\n  }, {\n    id: 'schedulingAddBreak',\n    sideDrawerComponent: 'side-drawer/scheduling-add-break',\n    options: {\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileShowRouteLog',\n    sideDrawerComponent: 'side-drawer/reconcile-route-log',\n    options: {\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileTripLog',\n    sideDrawerComponent: 'side-drawer/reconcile-trip-log',\n    options: {\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileAddNewTrip',\n    sideDrawerComponent: 'side-drawer/reconcile-add-new-trip',\n    options: {\n      displayName: 'Add New Trip',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileScheduleUnscheduledTrip',\n    sideDrawerComponent: 'side-drawer/reconcile-schedule-unscheduled-trips',\n    options: {\n      displayName: 'Schdule Trip to a Route',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'reconcileEditAdditionalTripInfo',\n    sideDrawerComponent: 'side-drawer/reconcile-edit-trip',\n    options: {\n      displayName: 'Edit Trip',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'permissionsAddNewUser',\n    sideDrawerComponent: 'side-drawer/permissions-add-user',\n    options: {\n      displayName: 'Add User',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'permissionsEditUser',\n    sideDrawerComponent: 'side-drawer/permissions-edit-user',\n    options: {\n      displayName: 'Edit User',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'permissionsFilterColumnWidget',\n    sideDrawerComponent: 'side-drawer/permissions-filter-settings',\n    hooks: []\n  }, {\n    id: 'userActivityLog',\n    sideDrawerComponent: 'side-drawer/activity-log/user-activity-log',\n    options: {\n      displayName: 'User Activity Log',\n      classNames: ['wide']\n    }\n  }, {\n    id: 'blockoutAlternativeAddresses',\n    sideDrawerComponent: 'side-drawer/blockout-alternative-addresses',\n    hooks: [{\n      to: '*',\n\n      action() {\n        this.get('tooltip').reset();\n      }\n\n    }]\n  }];\n  _exports.default = _default;\n});","define(\"adept-iq/config/zone-polygon\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // holds the zone polygon for walla walla\n  // used by zone-validation.js\n\n  /*eslint-disable */\n  const zone_polygon_walla_walla = [[46.070180, -118.414163], [46.093803, -118.307092], [46.108669, -118.296996], [46.104824, -118.246489], [46.082908, -118.247049], [46.027789, -118.303751], [46.032074, -118.412725], [46.076793, -118.422319]]; // new york zone polygon\n\n  const zone_polygon_nyct = [[40.499749, -74.267362], [40.550902, -74.255046], [40.642260, -74.198743], [40.694442, -74.061676], [40.933719, -73.918490], [40.879357, -73.750985], [40.738197, -73.676134], [40.577767, -73.737748], [40.481574, -74.131030], [40.482369, -74.258910]];\n  const zone_polygon = eval(_environment.default.APP.mapValidationPolygon);\n  var _default = zone_polygon;\n  /*eslint-enable */\n\n  _exports.default = _default;\n});","define(\"adept-iq/data/driverData\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.data = void 0;\n  const data = [{\n    'id': '1',\n    'attributes': {\n      'id': 7591\n    }\n  }, {\n    'id': '2',\n    'attributes': {\n      'id': 7592\n    }\n  }, {\n    'id': '3',\n    'attributes': {\n      'id': 7593\n    }\n  }];\n  _exports.data = data;\n});","define(\"adept-iq/data/providerData\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.data = void 0;\n  const data = [{\n    'id': '1',\n    'attributes': {\n      'id': 'AVL',\n      'name': 'AVL TEST',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '2',\n    'attributes': {\n      'id': 'BCI',\n      'name': 'BCI',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '3',\n    'attributes': {\n      'id': 'BCH',\n      'name': 'BCH',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '4',\n    'attributes': {\n      'id': 'MAG',\n      'name': 'MAG',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '5',\n    'attributes': {\n      'id': 'PTC',\n      'name': 'PTC',\n      'isChecked': 'true'\n    }\n  }];\n  _exports.data = data;\n});","define(\"adept-iq/data/road-supervisor\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.Polyline = _exports.Guidance = void 0;\n  const Polyline = [[-74.17758, 40.69066], [-74.17732, 40.69108], [-74.17674, 40.69233], [-74.17666, 40.69258], [-74.17662, 40.69296], [-74.17672, 40.69335], [-74.17672, 40.69336], [-74.1768, 40.69352], [-74.17691, 40.69371], [-74.17697, 40.69415], [-74.17724, 40.69454], [-74.17746, 40.69485], [-74.17796, 40.69523], [-74.17821, 40.69533], [-74.17868, 40.69546], [-74.17938, 40.69549], [-74.17969, 40.69543], [-74.18004, 40.69535], [-74.18051, 40.69517], [-74.18062, 40.69513], [-74.18146, 40.69467], [-74.18175, 40.69448], [-74.18188, 40.69437], [-74.18198, 40.69428], [-74.18275, 40.69352], [-74.18293, 40.69336], [-74.18302, 40.69328], [-74.18317, 40.69312], [-74.18324, 40.69308], [-74.18358, 40.69295], [-74.18399, 40.6929], [-74.18435, 40.69295], [-74.18441, 40.69296], [-74.1846, 40.69299], [-74.18467, 40.69302], [-74.18505, 40.69318], [-74.18536, 40.69336], [-74.18572, 40.69356], [-74.18584, 40.69366], [-74.18588, 40.6937], [-74.18601, 40.69386], [-74.18619, 40.69438], [-74.186, 40.69478], [-74.18544, 40.69531], [-74.18535, 40.69538], [-74.18531, 40.69542], [-74.18512, 40.69573], [-74.18509, 40.69582], [-74.18513, 40.69621], [-74.1852, 40.69637], [-74.18522, 40.69641], [-74.1853, 40.69656], [-74.18541, 40.69676], [-74.18559, 40.69744], [-74.18562, 40.69842], [-74.18562, 40.69888], [-74.18562, 40.69907], [-74.18562, 40.69966], [-74.18543, 40.70092], [-74.18501, 40.70184], [-74.18484, 40.70218], [-74.18481, 40.70223], [-74.18471, 40.70238], [-74.18433, 40.703], [-74.18328, 40.70431], [-74.1831, 40.70452], [-74.18162, 40.70591], [-74.18159, 40.70594], [-74.18154, 40.70599], [-74.1811, 40.70637], [-74.18089, 40.70655], [-74.17969, 40.70729], [-74.17935, 40.70749], [-74.17885, 40.70778], [-74.17831, 40.70804], [-74.17796, 40.70812], [-74.17787, 40.70813], [-74.17782, 40.70814], [-74.17775, 40.70815], [-74.17768, 40.70818], [-74.17754, 40.7082], [-74.17741, 40.70821], [-74.17699, 40.70822], [-74.17673, 40.70822], [-74.17649, 40.70815], [-74.1764, 40.70811], [-74.17621, 40.70795], [-74.17616, 40.70775], [-74.17617, 40.70766], [-74.17638, 40.70722], [-74.17674, 40.70668], [-74.17686, 40.70657], [-74.17689, 40.70655], [-74.17708, 40.70642], [-74.17723, 40.70639], [-74.17739, 40.70642], [-74.17747, 40.70645], [-74.17763, 40.70658], [-74.17768, 40.70677], [-74.17752, 40.70723], [-74.17742, 40.70784], [-74.17741, 40.70814], [-74.17741, 40.70821], [-74.17741, 40.70829], [-74.17741, 40.7084], [-74.17741, 40.7085], [-74.17741, 40.70861], [-74.17741, 40.7087], [-74.17741, 40.70877], [-74.17737, 40.7098], [-74.17737, 40.70987], [-74.17725, 40.71024], [-74.17698, 40.71048], [-74.17694, 40.7105], [-74.1769, 40.71053], [-74.17672, 40.71059], [-74.17634, 40.71065], [-74.17311, 40.71066], [-74.17104, 40.71066], [-74.17049, 40.71063], [-74.16985, 40.71054], [-74.16918, 40.71053], [-74.16678, 40.71039], [-74.16666, 40.71038], [-74.16657, 40.71036], [-74.16632, 40.71033], [-74.16437, 40.71012], [-74.16424, 40.7101], [-74.16387, 40.71004], [-74.16224, 40.70977], [-74.16123, 40.70957], [-74.16107, 40.70953], [-74.1609, 40.70948], [-74.16075, 40.70945], [-74.16062, 40.70941], [-74.16053, 40.70939], [-74.15935, 40.70899], [-74.15856, 40.70871], [-74.15771, 40.70851], [-74.1576, 40.70849], [-74.15727, 40.70835], [-74.15679, 40.70818], [-74.15663, 40.70812], [-74.15655, 40.7081], [-74.15638, 40.70805], [-74.15604, 40.70793], [-74.15569, 40.70776], [-74.1544, 40.70723], [-74.15377, 40.70682], [-74.15354, 40.70662], [-74.15289, 40.7059], [-74.1528, 40.70578], [-74.15269, 40.70568], [-74.15246, 40.70549], [-74.15226, 40.70542], [-74.15187, 40.70539], [-74.15178, 40.7054], [-74.15155, 40.70548], [-74.15138, 40.7056], [-74.151, 40.70616], [-74.15096, 40.70626], [-74.15092, 40.70633], [-74.15041, 40.70748], [-74.14967, 40.70843], [-74.14954, 40.70858], [-74.14944, 40.70868], [-74.14922, 40.70891], [-74.14908, 40.70904], [-74.1484, 40.70962], [-74.14778, 40.71009], [-74.14761, 40.71019], [-74.14688, 40.71063], [-74.14567, 40.71124], [-74.14405, 40.71188], [-74.14091, 40.7131], [-74.14062, 40.71321], [-74.14039, 40.71332], [-74.13916, 40.71391], [-74.13739, 40.71491], [-74.13719, 40.71505], [-74.1368, 40.71533], [-74.1362, 40.71576], [-74.13586, 40.71604], [-74.13574, 40.7161], [-74.13565, 40.71616], [-74.13481, 40.717], [-74.13444, 40.71756], [-74.13414, 40.7184], [-74.13407, 40.71927], [-74.13408, 40.71944], [-74.1341, 40.71966], [-74.13423, 40.72039], [-74.13428, 40.72077], [-74.1343, 40.72158], [-74.13428, 40.72187], [-74.13414, 40.72258], [-74.13382, 40.72337], [-74.13307, 40.7247], [-74.13266, 40.72521], [-74.13233, 40.7256], [-74.13229, 40.72564], [-74.1322, 40.72574], [-74.13203, 40.72592], [-74.13156, 40.7264], [-74.13111, 40.72683], [-74.13066, 40.72723], [-74.12861, 40.72904], [-74.12856, 40.72909], [-74.12718, 40.73031], [-74.12656, 40.73087], [-74.12576, 40.7317], [-74.12506, 40.73268], [-74.12472, 40.73328], [-74.12467, 40.73339], [-74.12447, 40.73379], [-74.12437, 40.73404], [-74.12433, 40.73418], [-74.12424, 40.73445], [-74.12422, 40.7345], [-74.12419, 40.73461], [-74.12414, 40.73478], [-74.12413, 40.73485], [-74.1241, 40.73508], [-74.12405, 40.73544], [-74.12397, 40.73633], [-74.12395, 40.73652], [-74.12393, 40.73694], [-74.1239, 40.73717], [-74.12389, 40.7373], [-74.12376, 40.73894], [-74.12355, 40.73998], [-74.1232, 40.74107], [-74.12285, 40.74209], [-74.1226, 40.74287], [-74.12249, 40.74318], [-74.12236, 40.74358], [-74.12227, 40.74385], [-74.12205, 40.74448], [-74.12197, 40.74472], [-74.12004, 40.74958], [-74.11981, 40.75011], [-74.11928, 40.75145], [-74.11923, 40.75158], [-74.11887, 40.75242], [-74.11869, 40.75288], [-74.11864, 40.75302], [-74.11805, 40.75455], [-74.11786, 40.75508], [-74.11783, 40.75517], [-74.11769, 40.75554], [-74.11721, 40.75661], [-74.11714, 40.75678], [-74.11711, 40.75684], [-74.11676, 40.75749], [-74.11657, 40.75785], [-74.11634, 40.75827], [-74.11597, 40.7589], [-74.11572, 40.75928], [-74.11541, 40.75975], [-74.11539, 40.75978], [-74.11531, 40.75988], [-74.11525, 40.75996], [-74.11497, 40.76034], [-74.11402, 40.76153], [-74.11377, 40.76182], [-74.11348, 40.76217], [-74.11309, 40.76258], [-74.108, 40.76836], [-74.10214, 40.77507], [-74.10206, 40.77517], [-74.10187, 40.77538], [-74.10157, 40.77574], [-74.09999, 40.77753], [-74.09859, 40.77915], [-74.09852, 40.77921], [-74.09848, 40.77925], [-74.09673, 40.78125], [-74.0966, 40.78139], [-74.09558, 40.78248], [-74.09541, 40.78267], [-74.09537, 40.78271], [-74.09529, 40.78278], [-74.09524, 40.78285], [-74.09432, 40.78374], [-74.0938, 40.78424], [-74.09365, 40.78438], [-74.09194, 40.786], [-74.0918, 40.78613], [-74.09036, 40.78752], [-74.09022, 40.78764], [-74.09007, 40.78779], [-74.08866, 40.7891], [-74.08641, 40.79117], [-74.08591, 40.79161], [-74.08531, 40.79212], [-74.08461, 40.79268], [-74.08454, 40.79273], [-74.08429, 40.79293], [-74.08404, 40.79314], [-74.08057, 40.79595], [-74.07953, 40.79674], [-74.07886, 40.79728], [-74.07785, 40.79811], [-74.0767, 40.79903], [-74.07605, 40.79955], [-74.07545, 40.80004], [-74.07435, 40.80096], [-74.07428, 40.80101], [-74.07418, 40.8011], [-74.07273, 40.80222], [-74.07269, 40.80225], [-74.07266, 40.80228], [-74.07262, 40.8023], [-74.07254, 40.80235], [-74.07238, 40.80248], [-74.07174, 40.80303], [-74.07152, 40.80322], [-74.07103, 40.80362], [-74.0709, 40.80372], [-74.07085, 40.80375], [-74.07038, 40.80412], [-74.06982, 40.80457], [-74.06978, 40.80462], [-74.06935, 40.80496], [-74.06867, 40.8055], [-74.06607, 40.80751], [-74.06548, 40.80793], [-74.06478, 40.80843], [-74.06312, 40.80955], [-74.06301, 40.80963], [-74.06274, 40.8098], [-74.06207, 40.81024], [-74.06179, 40.81042], [-74.06143, 40.81063], [-74.06049, 40.81118], [-74.06019, 40.81136], [-74.05996, 40.81148], [-74.05944, 40.81178], [-74.05768, 40.81273], [-74.05593, 40.81355], [-74.0559, 40.81357], [-74.05574, 40.81363], [-74.05538, 40.81377], [-74.05338, 40.81446], [-74.05304, 40.81456], [-74.05298, 40.81458], [-74.05293, 40.81461], [-74.04785, 40.8163], [-74.04735, 40.81647], [-74.04627, 40.81684], [-74.04367, 40.81771], [-74.04272, 40.81803], [-74.04233, 40.81816], [-74.042, 40.81826], [-74.0409, 40.81868], [-74.03939, 40.81937], [-74.03801, 40.82015], [-74.03774, 40.82032], [-74.03768, 40.82037], [-74.03692, 40.82093], [-74.03579, 40.82183], [-74.03408, 40.82321], [-74.03381, 40.82344], [-74.03355, 40.82364], [-74.03226, 40.82469], [-74.03194, 40.82495], [-74.03165, 40.8252], [-74.03118, 40.82557], [-74.03109, 40.82565], [-74.03095, 40.82576], [-74.0302, 40.82638], [-74.02932, 40.82709], [-74.02883, 40.82749], [-74.028, 40.82816], [-74.02622, 40.82959], [-74.02608, 40.8297], [-74.02588, 40.82986], [-74.02578, 40.82994], [-74.02481, 40.83073], [-74.0247, 40.83081], [-74.02459, 40.83089], [-74.02433, 40.83111], [-74.02369, 40.83168], [-74.02353, 40.8318], [-74.02281, 40.83239], [-74.02176, 40.83332], [-74.02127, 40.83381], [-74.0209, 40.83425], [-74.02029, 40.83508], [-74.02003, 40.83552], [-74.01872, 40.83837], [-74.01854, 40.83871], [-74.01844, 40.83889], [-74.01838, 40.83901], [-74.01827, 40.83925], [-74.0181, 40.83966], [-74.01799, 40.83993], [-74.01792, 40.84015], [-74.0177, 40.84107], [-74.01766, 40.84131], [-74.01755, 40.8426], [-74.01742, 40.84316], [-74.0173, 40.84366], [-74.017, 40.84446], [-74.01686, 40.84473], [-74.01663, 40.84504], [-74.01659, 40.84509], [-74.01627, 40.84527], [-74.01586, 40.84535], [-74.01535, 40.8453], [-74.01389, 40.84476], [-74.01364, 40.84468], [-74.01327, 40.8446], [-74.01311, 40.84457], [-74.01245, 40.84445], [-74.01217, 40.84443], [-74.01173, 40.84441], [-74.01097, 40.84439], [-74.01074, 40.84439], [-74.01052, 40.84438], [-74.01016, 40.84437], [-74.00974, 40.84435], [-74.00939, 40.84431], [-74.00898, 40.84427], [-74.00872, 40.84424], [-74.0077, 40.84405], [-74.00761, 40.84404], [-74.00721, 40.84396], [-74.00712, 40.84394], [-74.0062, 40.84373], [-74.00563, 40.84364], [-74.00482, 40.8435], [-74.00476, 40.8435], [-74.00464, 40.84349], [-74.00409, 40.84348], [-74.00391, 40.84348], [-74.00388, 40.84348], [-74.00353, 40.84348], [-74.00285, 40.84345], [-74.00207, 40.84323], [-74.00152, 40.84295], [-74.00146, 40.84291], [-74.00016, 40.84213], [-73.99938, 40.84174], [-73.99852, 40.84152], [-73.99754, 40.84146], [-73.99725, 40.84147], [-73.99672, 40.84152], [-73.99633, 40.8416], [-73.99611, 40.84166], [-73.99586, 40.84173], [-73.99488, 40.84217], [-73.99443, 40.84248], [-73.99428, 40.8426], [-73.99424, 40.84265], [-73.99398, 40.84289], [-73.99308, 40.8438], [-73.99191, 40.84497], [-73.99068, 40.84619], [-73.99052, 40.84636], [-73.98974, 40.84709], [-73.98967, 40.84717], [-73.98944, 40.84739], [-73.98852, 40.84833], [-73.98829, 40.84856], [-73.98819, 40.84866], [-73.98776, 40.84907], [-73.98674, 40.85009], [-73.98668, 40.85015], [-73.98643, 40.85042], [-73.98624, 40.85062], [-73.98615, 40.85072], [-73.98591, 40.85094], [-73.9856, 40.85123], [-73.98546, 40.85137], [-73.98538, 40.85147], [-73.98499, 40.85201], [-73.9848, 40.85269], [-73.98472, 40.8532], [-73.98466, 40.85358], [-73.98458, 40.85384], [-73.98449, 40.85412], [-73.98427, 40.85451], [-73.98417, 40.85469], [-73.98409, 40.85479], [-73.98379, 40.85514], [-73.98376, 40.85517], [-73.98352, 40.85541], [-73.98314, 40.85578], [-73.98295, 40.85598], [-73.98242, 40.85649], [-73.98228, 40.85662], [-73.98193, 40.85695], [-73.98165, 40.85719], [-73.98145, 40.85733], [-73.98062, 40.85779], [-73.98038, 40.8579], [-73.97972, 40.85812], [-73.97957, 40.85817], [-73.97888, 40.85829], [-73.97863, 40.85833], [-73.9784, 40.85834], [-73.978, 40.85837], [-73.9778, 40.85838], [-73.97762, 40.8584], [-73.97682, 40.85837], [-73.9764, 40.8583], [-73.97581, 40.85813], [-73.9756, 40.85807], [-73.97545, 40.858], [-73.97419, 40.85736], [-73.97414, 40.85734], [-73.97404, 40.85729], [-73.97345, 40.85694], [-73.97309, 40.85661], [-73.97288, 40.85647], [-73.97273, 40.85637], [-73.97263, 40.85631], [-73.97254, 40.85623], [-73.97234, 40.85611], [-73.97229, 40.85606], [-73.97221, 40.85601], [-73.97195, 40.85584], [-73.97162, 40.85562], [-73.97107, 40.85524], [-73.97061, 40.855], [-73.97021, 40.85484], [-73.97006, 40.85477], [-73.96985, 40.8547], [-73.9696, 40.8546], [-73.96945, 40.85456], [-73.96922, 40.85447], [-73.96862, 40.85428], [-73.9682, 40.85418], [-73.96722, 40.85395], [-73.96697, 40.85391], [-73.96687, 40.85388], [-73.96502, 40.85366], [-73.96463, 40.85361], [-73.9639, 40.8535], [-73.96384, 40.8535], [-73.96379, 40.85349], [-73.96321, 40.8534], [-73.96163, 40.85323], [-73.96147, 40.85321], [-73.96107, 40.85314], [-73.96011, 40.853], [-73.95996, 40.85297], [-73.95926, 40.85285], [-73.95911, 40.85283], [-73.95607, 40.85222], [-73.95378, 40.85176], [-73.95278, 40.85157], [-73.95214, 40.85145], [-73.94694, 40.85043], [-73.94614, 40.85027], [-73.94598, 40.85024], [-73.94534, 40.85012], [-73.94503, 40.85005], [-73.94495, 40.85004], [-73.9449, 40.85003], [-73.94484, 40.85002], [-73.9448, 40.85001], [-73.94426, 40.8499], [-73.94386, 40.84982], [-73.94336, 40.84972], [-73.94329, 40.8497], [-73.9432, 40.84969], [-73.94316, 40.84968], [-73.94295, 40.84965], [-73.94286, 40.84964], [-73.94263, 40.84959], [-73.94253, 40.84958], [-73.94239, 40.84955], [-73.94227, 40.84953], [-73.94209, 40.84949], [-73.94156, 40.84938], [-73.9413, 40.84932], [-73.94104, 40.84927], [-73.94087, 40.84924], [-73.94077, 40.84922], [-73.93943, 40.84892], [-73.93914, 40.84885], [-73.93864, 40.84875], [-73.93857, 40.84873], [-73.93805, 40.84865], [-73.93799, 40.84864], [-73.93751, 40.84854], [-73.93726, 40.84849], [-73.93701, 40.84839], [-73.93626, 40.84807], [-73.93583, 40.84787], [-73.93505, 40.84753], [-73.93418, 40.84717], [-73.93417, 40.84716], [-73.93365, 40.84694], [-73.9336, 40.84691], [-73.93355, 40.84689], [-73.9326, 40.84651], [-73.93219, 40.84634], [-73.93186, 40.8462], [-73.93168, 40.84613], [-73.93141, 40.84603], [-73.93107, 40.84584], [-73.93078, 40.84548], [-73.93072, 40.84528], [-73.93077, 40.8451], [-73.93125, 40.84451], [-73.93155, 40.84398], [-73.93164, 40.84354], [-73.93155, 40.84295], [-73.93154, 40.84244], [-73.93162, 40.84208], [-73.93174, 40.84172], [-73.93182, 40.84156], [-73.93326, 40.83905], [-73.93333, 40.8389], [-73.93354, 40.83853], [-73.93371, 40.83823], [-73.9339, 40.83789], [-73.93398, 40.83775], [-73.93489, 40.83612], [-73.93508, 40.83569], [-73.9351, 40.83563], [-73.9351, 40.83562], [-73.93533, 40.8347], [-73.93539, 40.8339], [-73.93538, 40.83302], [-73.93534, 40.83243], [-73.9353, 40.8319], [-73.93519, 40.83063], [-73.93509, 40.8298], [-73.9349, 40.82846], [-73.93488, 40.82831], [-73.93486, 40.82815], [-73.93483, 40.82804], [-73.93482, 40.82795], [-73.93465, 40.82626], [-73.93459, 40.8252], [-73.93456, 40.82474], [-73.93456, 40.82441], [-73.93451, 40.82305], [-73.93447, 40.82222], [-73.93451, 40.82145], [-73.93448, 40.81971], [-73.93448, 40.81963], [-73.93445, 40.81928], [-73.93435, 40.81875], [-73.93416, 40.81788], [-73.93415, 40.81716], [-73.93415, 40.81711], [-73.93432, 40.81545], [-73.93437, 40.81495], [-73.9344, 40.81466], [-73.93444, 40.81436], [-73.93445, 40.81421], [-73.93446, 40.81413], [-73.93447, 40.81403], [-73.9345, 40.81379], [-73.93453, 40.81338], [-73.93476, 40.81172], [-73.93478, 40.81158], [-73.93478, 40.81155], [-73.93499, 40.81071], [-73.93504, 40.81046], [-73.93504, 40.81041], [-73.93505, 40.8103], [-73.93505, 40.81025], [-73.93506, 40.81008], [-73.93495, 40.80927], [-73.9349, 40.80908], [-73.93474, 40.80865], [-73.93464, 40.80842], [-73.93458, 40.80828], [-73.93417, 40.80757], [-73.93392, 40.80724], [-73.93385, 40.80712], [-73.93377, 40.80702], [-73.93337, 40.80657], [-73.93327, 40.80645], [-73.93224, 40.80541], [-73.93193, 40.8051], [-73.93141, 40.80451], [-73.9311, 40.8041], [-73.93108, 40.80407], [-73.93105, 40.80403], [-73.93103, 40.804], [-73.931, 40.80396], [-73.93097, 40.80392], [-73.93077, 40.80356], [-73.93059, 40.80322], [-73.93045, 40.80295], [-73.9304, 40.80268], [-73.93037, 40.80196], [-73.93038, 40.80182], [-73.93039, 40.80174], [-73.93041, 40.80165], [-73.93039, 40.80151], [-73.93037, 40.80147], [-73.93032, 40.80141], [-73.93023, 40.80131], [-73.9302, 40.80126], [-73.93011, 40.80109], [-73.93005, 40.80078], [-73.93009, 40.80065], [-73.93018, 40.80054], [-73.93024, 40.8005], [-73.93046, 40.80043], [-73.93054, 40.80044], [-73.93088, 40.80054], [-73.93104, 40.80062], [-73.93115, 40.80072], [-73.93119, 40.80078], [-73.93125, 40.80097], [-73.93124, 40.80111], [-73.93116, 40.80122], [-73.9311, 40.80128], [-73.931, 40.80133], [-73.93095, 40.80137], [-73.93071, 40.80141], [-73.93036, 40.80132], [-73.9302, 40.80126], [-73.93002, 40.80118], [-73.92988, 40.80113], [-73.92981, 40.8011], [-73.92974, 40.80108], [-73.92968, 40.80108], [-73.92964, 40.80106], [-73.92941, 40.80096], [-73.92924, 40.80088], [-73.92877, 40.80068], [-73.92872, 40.80066], [-73.92758, 40.80016], [-73.92691, 40.79988], [-73.92633, 40.79964], [-73.92626, 40.79961], [-73.9262, 40.79959], [-73.92607, 40.79952], [-73.92578, 40.79937], [-73.92548, 40.79921], [-73.92535, 40.79913], [-73.92531, 40.79911], [-73.92516, 40.79903], [-73.92505, 40.79896], [-73.92477, 40.79881], [-73.92456, 40.7987], [-73.92406, 40.79844], [-73.92395, 40.79838], [-73.92375, 40.79829], [-73.92361, 40.79823], [-73.92324, 40.79807], [-73.923, 40.79799], [-73.92225, 40.79755], [-73.92183, 40.7971], [-73.92169, 40.7967], [-73.9217, 40.79651], [-73.92192, 40.79603], [-73.92212, 40.79574], [-73.92264, 40.79499], [-73.92287, 40.79466], [-73.92388, 40.79317], [-73.92446, 40.79235], [-73.9249, 40.79186], [-73.92559, 40.7911], [-73.92594, 40.7907], [-73.92622, 40.79039], [-73.92635, 40.79025], [-73.92694, 40.7896], [-73.92836, 40.78804], [-73.92878, 40.78757], [-73.92912, 40.78719], [-73.92979, 40.78634], [-73.92991, 40.7861], [-73.93011, 40.78554], [-73.93018, 40.78513], [-73.93018, 40.78488], [-73.93016, 40.78473], [-73.92998, 40.78415], [-73.92975, 40.78364], [-73.9292, 40.78288], [-73.92831, 40.7817], [-73.92797, 40.78125], [-73.92788, 40.78112], [-73.92782, 40.78105], [-73.92779, 40.78099], [-73.92699, 40.77994], [-73.92637, 40.77911], [-73.92579, 40.77835], [-73.92573, 40.77827], [-73.92561, 40.77812], [-73.92515, 40.77751], [-73.92501, 40.77733], [-73.92494, 40.77724], [-73.92485, 40.77711], [-73.92474, 40.77698], [-73.92465, 40.77685], [-73.92456, 40.77673], [-73.92439, 40.77652], [-73.92391, 40.77587], [-73.92333, 40.77512], [-73.92257, 40.77423], [-73.92196, 40.77368], [-73.92127, 40.77318], [-73.92071, 40.7728], [-73.92056, 40.7727], [-73.9199, 40.77223], [-73.9198, 40.77217], [-73.91898, 40.77159], [-73.91786, 40.77075], [-73.91764, 40.77057], [-73.91754, 40.77051], [-73.91749, 40.77047], [-73.9167, 40.77007], [-73.91602, 40.76992], [-73.91577, 40.76987], [-73.91545, 40.76981], [-73.9147, 40.7697], [-73.91388, 40.76957], [-73.91327, 40.76947], [-73.91313, 40.76945], [-73.9129, 40.76941], [-73.91275, 40.76938], [-73.91234, 40.76932], [-73.91146, 40.76916], [-73.91081, 40.76901], [-73.90989, 40.76887], [-73.90925, 40.76879], [-73.90843, 40.76874], [-73.90838, 40.76874], [-73.90833, 40.76874], [-73.90829, 40.76874], [-73.90778, 40.76871], [-73.90733, 40.76864], [-73.90702, 40.76859], [-73.90601, 40.76835], [-73.90529, 40.76815], [-73.90449, 40.76798], [-73.90436, 40.76796], [-73.9042, 40.76792], [-73.90411, 40.76791], [-73.90342, 40.76781], [-73.90186, 40.76755], [-73.90061, 40.76736], [-73.8968, 40.76674], [-73.89612, 40.76664], [-73.896, 40.76662], [-73.89591, 40.76661], [-73.89406, 40.76632], [-73.89404, 40.76632], [-73.8928, 40.76618], [-73.89146, 40.76618], [-73.89125, 40.7662], [-73.8909, 40.76621], [-73.89027, 40.76627], [-73.8902, 40.76628], [-73.8893, 40.76642], [-73.88909, 40.76644], [-73.88825, 40.76659], [-73.88779, 40.76671], [-73.88775, 40.76672], [-73.88761, 40.76676], [-73.88521, 40.76743], [-73.88432, 40.76775], [-73.88358, 40.76805], [-73.88219, 40.76869], [-73.88007, 40.76985], [-73.87984, 40.76997], [-73.87964, 40.77008], [-73.87946, 40.77018], [-73.87925, 40.7703], [-73.87819, 40.77081], [-73.87699, 40.77121], [-73.87645, 40.77135], [-73.87635, 40.77138], [-73.87609, 40.77137], [-73.87604, 40.77138], [-73.87598, 40.77138], [-73.87509, 40.77145], [-73.87348, 40.77143], [-73.87248, 40.77138], [-73.87224, 40.77138], [-73.87207, 40.7714], [-73.8719, 40.77142], [-73.8716, 40.7715], [-73.87129, 40.77164], [-73.87124, 40.77167], [-73.87114, 40.77177], [-73.87109, 40.7718], [-73.87095, 40.77194], [-73.8708, 40.77209], [-73.87079, 40.77211], [-73.87071, 40.77219], [-73.87049, 40.77248], [-73.87035, 40.77274], [-73.8703, 40.77294], [-73.87032, 40.77311], [-73.87032, 40.77325], [-73.87033, 40.77332], [-73.87034, 40.77335], [-73.87038, 40.77345], [-73.87051, 40.77366], [-73.87054, 40.77371], [-73.87083, 40.77399], [-73.87132, 40.77424], [-73.87202, 40.77443], [-73.87207, 40.77443], [-73.87259, 40.77444]];\n  _exports.Polyline = Polyline;\n  const Guidance = [{\n    'routeOffsetInMeters': 0,\n    'travelTimeInSeconds': 0,\n    'point': {\n      'latitude': 40.69066,\n      'longitude': -74.17758\n    },\n    'instructionType': 'LOCATION_DEPARTURE',\n    'street': 'Terminal Access Rd',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'DEPART',\n    'message': 'Leave from Terminal Access Rd'\n  }, {\n    'routeOffsetInMeters': 881,\n    'travelTimeInSeconds': 111,\n    'point': {\n      'latitude': 40.69467,\n      'longitude': -74.18146\n    },\n    'instructionType': 'TURN',\n    'street': 'Express Rd',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Off-Airport Rental Cars',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Express Rd toward Off-Airport Rental Cars',\n    'combinedMessage': 'Keep right at Express Rd toward Off-Airport Rental Cars then keep straight on at Pulaski Skwy N/US-9 N/US-1 N toward Newark'\n  }, {\n    'routeOffsetInMeters': 1217,\n    'travelTimeInSeconds': 133,\n    'point': {\n      'latitude': 40.69296,\n      'longitude': -74.18441\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-9 N', 'US-1 N'],\n    'street': 'Pulaski Skwy N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Newark',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 0,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'STRAIGHT',\n    'message': 'Keep straight on at Pulaski Skwy N/US-9 N/US-1 N toward Newark',\n    'combinedMessage': 'Keep straight on at Pulaski Skwy N/US-9 N/US-1 N toward Newark then keep right at Pulaski Skwy N/US-9 N/US-1 N toward New York'\n  }, {\n    'routeOffsetInMeters': 1573,\n    'travelTimeInSeconds': 157,\n    'point': {\n      'latitude': 40.69531,\n      'longitude': -74.18544\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-9 N', 'US-1 N'],\n    'street': 'Pulaski Skwy N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'New York',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Pulaski Skwy N/US-9 N/US-1 N toward New York',\n    'combinedMessage': 'Keep right at Pulaski Skwy N/US-9 N/US-1 N toward New York then keep left at Pulaski Skwy N/US-9 N/US-1 N toward Downtown Newark'\n  }, {\n    'routeOffsetInMeters': 1986,\n    'travelTimeInSeconds': 182,\n    'point': {\n      'latitude': 40.69888,\n      'longitude': -74.18562\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-9 N', 'US-1 N'],\n    'street': 'Pulaski Skwy N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Downtown Newark',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Pulaski Skwy N/US-9 N/US-1 N toward Downtown Newark',\n    'combinedMessage': 'Keep left at Pulaski Skwy N/US-9 N/US-1 N toward Downtown Newark then keep right at Pulaski Skwy N/US-9 N/US-1 N toward Port Newark'\n  }, {\n    'routeOffsetInMeters': 2633,\n    'travelTimeInSeconds': 216,\n    'point': {\n      'latitude': 40.70431,\n      'longitude': -74.18328\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-9 N', 'US-1 N'],\n    'street': 'Pulaski Skwy N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Port Newark',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Pulaski Skwy N/US-9 N/US-1 N toward Port Newark',\n    'combinedMessage': 'Keep right at Pulaski Skwy N/US-9 N/US-1 N toward Port Newark then take the right exit onto United States Highway 22 E/US-22 E'\n  }, {\n    'routeOffsetInMeters': 2954,\n    'travelTimeInSeconds': 231,\n    'point': {\n      'latitude': 40.70655,\n      'longitude': -74.18089\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-22 E'],\n    'street': 'United States Highway 22 E',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_RIGHT',\n    'message': 'Take the right exit onto United States Highway 22 E/US-22 E',\n    'combinedMessage': 'Take the right exit onto United States Highway 22 E/US-22 E then keep right at Haynes Ave/I-78 E toward Holland Tunnel'\n  }, {\n    'routeOffsetInMeters': 3364,\n    'travelTimeInSeconds': 252,\n    'point': {\n      'latitude': 40.70822,\n      'longitude': -74.17673\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-78 E'],\n    'street': 'Haynes Ave',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Holland Tunnel',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Haynes Ave/I-78 E toward Holland Tunnel',\n    'combinedMessage': 'Keep right at Haynes Ave/I-78 E toward Holland Tunnel then keep right at Haynes Ave/I-78 E toward Holland Tunnel'\n  }, {\n    'routeOffsetInMeters': 3570,\n    'travelTimeInSeconds': 267,\n    'point': {\n      'latitude': 40.70668,\n      'longitude': -74.17674\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-78 E'],\n    'street': 'Haynes Ave',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Holland Tunnel',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Haynes Ave/I-78 E toward Holland Tunnel'\n  }, {\n    'routeOffsetInMeters': 5370,\n    'travelTimeInSeconds': 360,\n    'point': {\n      'latitude': 40.70977,\n      'longitude': -74.16224\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-78 E'],\n    'street': 'Haynes Ave',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Haynes Ave/I-78 E',\n    'combinedMessage': 'Keep left at Haynes Ave/I-78 E then take the right exit onto New Jersey Tpke N/I-95 N toward NJ Turnpike N'\n  }, {\n    'routeOffsetInMeters': 5934,\n    'travelTimeInSeconds': 395,\n    'point': {\n      'latitude': 40.70793,\n      'longitude': -74.15604\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'NJ Turnpike N',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_RIGHT',\n    'message': 'Take the right exit onto New Jersey Tpke N/I-95 N toward NJ Turnpike N',\n    'combinedMessage': 'Take the right exit onto New Jersey Tpke N/I-95 N toward NJ Turnpike N then keep left at New Jersey Tpke N/I-95 N toward NJ Turnpike N'\n  }, {\n    'routeOffsetInMeters': 5970,\n    'travelTimeInSeconds': 398,\n    'point': {\n      'latitude': 40.70776,\n      'longitude': -74.15569\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'NJ Turnpike N',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at New Jersey Tpke N/I-95 N toward NJ Turnpike N'\n  }, {\n    'routeOffsetInMeters': 8252,\n    'travelTimeInSeconds': 503,\n    'point': {\n      'latitude': 40.71604,\n      'longitude': -74.13586\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Sports Complex',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at New Jersey Tpke N/I-95 N toward Sports Complex',\n    'combinedMessage': 'Keep right at New Jersey Tpke N/I-95 N toward Sports Complex then take the I-95 N freeway'\n  }, {\n    'routeOffsetInMeters': 9277,\n    'travelTimeInSeconds': 544,\n    'point': {\n      'latitude': 40.7247,\n      'longitude': -74.13307\n    },\n    'instructionType': 'ROAD_CHANGE',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'ENTER_FREEWAY',\n    'message': 'Take the I-95 N freeway'\n  }, {\n    'routeOffsetInMeters': 9377,\n    'travelTimeInSeconds': 549,\n    'point': {\n      'latitude': 40.72547,\n      'longitude': -74.13245\n    },\n    'instructionType': 'DIRECTION_INFO',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'FOLLOW',\n    'message': 'Follow New Jersey Tpke N/I-95 N'\n  }, {\n    'routeOffsetInMeters': 20645,\n    'travelTimeInSeconds': 977,\n    'point': {\n      'latitude': 40.80963,\n      'longitude': -74.06301\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at New Jersey Tpke N/I-95 N'\n  }, {\n    'routeOffsetInMeters': 25307,\n    'travelTimeInSeconds': 1162,\n    'point': {\n      'latitude': 40.83508,\n      'longitude': -74.02029\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N'],\n    'street': 'New Jersey Tpke N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Fort Lee',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at New Jersey Tpke N/I-95 N toward Fort Lee',\n    'combinedMessage': 'Keep right at New Jersey Tpke N/I-95 N toward Fort Lee then take the right exit onto US Highway 46/US-46 E toward Palisades Park'\n  }, {\n    'routeOffsetInMeters': 26178,\n    'travelTimeInSeconds': 1198,\n    'point': {\n      'latitude': 40.8426,\n      'longitude': -74.01755\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-46 E'],\n    'street': 'US Highway 46',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Palisades Park',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_RIGHT',\n    'message': 'Take the right exit onto US Highway 46/US-46 E toward Palisades Park',\n    'combinedMessage': 'Take the right exit onto US Highway 46/US-46 E toward Palisades Park then keep right at US Highway 46/US-46 E toward Palisades Park'\n  }, {\n    'routeOffsetInMeters': 26391,\n    'travelTimeInSeconds': 1210,\n    'point': {\n      'latitude': 40.84446,\n      'longitude': -74.017\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-46 E'],\n    'street': 'US Highway 46',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'Palisades Park',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at US Highway 46/US-46 E toward Palisades Park',\n    'combinedMessage': 'Keep right at US Highway 46/US-46 E toward Palisades Park then keep straight on at US Highway 46/US-46 E'\n  }, {\n    'routeOffsetInMeters': 26774,\n    'travelTimeInSeconds': 1237,\n    'point': {\n      'latitude': 40.8446,\n      'longitude': -74.01327\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-46 E'],\n    'street': 'US Highway 46',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 0,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'STRAIGHT',\n    'message': 'Keep straight on at US Highway 46/US-46 E'\n  }, {\n    'routeOffsetInMeters': 30814,\n    'travelTimeInSeconds': 1451,\n    'point': {\n      'latitude': 40.85838,\n      'longitude': -73.9778\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N', 'US-9 N', 'US-1 N'],\n    'street': 'Interstate Highway 95 N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'G Washington Bridge',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N toward G Washington Bridge',\n    'combinedMessage': 'Keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N toward G Washington Bridge then keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N toward New York City'\n  }, {\n    'routeOffsetInMeters': 31367,\n    'travelTimeInSeconds': 1489,\n    'point': {\n      'latitude': 40.85606,\n      'longitude': -73.97229\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N', 'US-9 N', 'US-1 N'],\n    'street': 'Interstate Highway 95 N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'New York City',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N toward New York City',\n    'combinedMessage': 'Keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N toward New York City then take the left exit onto United States Highway 9 N/US-9 N/US-1 N toward UPPER LEVEL'\n  }, {\n    'routeOffsetInMeters': 31376,\n    'travelTimeInSeconds': 1490,\n    'point': {\n      'latitude': 40.85601,\n      'longitude': -73.97221\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['US-9 N', 'US-1 N'],\n    'street': 'United States Highway 9 N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'signpostText': 'UPPER LEVEL',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_LEFT',\n    'message': 'Take the left exit onto United States Highway 9 N/US-9 N/US-1 N toward UPPER LEVEL',\n    'combinedMessage': 'Take the left exit onto United States Highway 9 N/US-9 N/US-1 N toward UPPER LEVEL then keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N'\n  }, {\n    'routeOffsetInMeters': 31818,\n    'travelTimeInSeconds': 1547,\n    'point': {\n      'latitude': 40.85422,\n      'longitude': -73.96757\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-95 N', 'US-9 N', 'US-1 N'],\n    'street': 'Interstate Highway 95 N',\n    'countryCode': 'USA',\n    'stateCode': 'NJ',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Interstate Highway 95 N/I-95 N/US-9 N/US-1 N'\n  }, {\n    'routeOffsetInMeters': 34822,\n    'travelTimeInSeconds': 1853,\n    'point': {\n      'latitude': 40.84701,\n      'longitude': -73.93347\n    },\n    'instructionType': 'TURN',\n    'exitNumber': '2',\n    'street': 'Harlem River Dr S',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'Harlem Riv Dr',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_RIGHT',\n    'message': 'Take exit 2 on the right onto Harlem River Dr S toward Harlem Riv Dr',\n    'combinedMessage': 'Take exit 2 on the right onto Harlem River Dr S toward Harlem Riv Dr then keep left at Harlem River Dr S toward Harlem Riv Dr'\n  }, {\n    'routeOffsetInMeters': 35003,\n    'travelTimeInSeconds': 1865,\n    'point': {\n      'latitude': 40.84613,\n      'longitude': -73.93168\n    },\n    'instructionType': 'TURN',\n    'street': 'Harlem River Dr S',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'Harlem Riv Dr',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Harlem River Dr S toward Harlem Riv Dr'\n  }, {\n    'routeOffsetInMeters': 36032,\n    'travelTimeInSeconds': 1924,\n    'point': {\n      'latitude': 40.83775,\n      'longitude': -73.93398\n    },\n    'instructionType': 'TURN',\n    'street': 'Harlem River Dr S',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Harlem River Dr S'\n  }, {\n    'routeOffsetInMeters': 38950,\n    'travelTimeInSeconds': 2054,\n    'point': {\n      'latitude': 40.81172,\n      'longitude': -73.93476\n    },\n    'instructionType': 'TURN',\n    'street': 'Harlem River Dr S',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Harlem River Dr S'\n  }, {\n    'routeOffsetInMeters': 40031,\n    'travelTimeInSeconds': 2186,\n    'point': {\n      'latitude': 40.80295,\n      'longitude': -73.93045\n    },\n    'instructionType': 'TURN',\n    'exitNumber': '17',\n    'street': 'Robert F Kennedy Brg',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'RFK Bridge',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_RIGHT',\n    'message': 'Take exit 17 on the right onto Robert F Kennedy Brg toward RFK Bridge'\n  }, {\n    'routeOffsetInMeters': 41263,\n    'travelTimeInSeconds': 2280,\n    'point': {\n      'latitude': 40.79799,\n      'longitude': -73.923\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-278 W'],\n    'street': 'Robert F Kennedy Brg W',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'Queens',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Robert F Kennedy Brg W/I-278 W toward Queens',\n    'combinedMessage': 'Keep right at Robert F Kennedy Brg W/I-278 W toward Queens then take the I-278 W freeway'\n  }, {\n    'routeOffsetInMeters': 41990,\n    'travelTimeInSeconds': 2322,\n    'point': {\n      'latitude': 40.79235,\n      'longitude': -73.92446\n    },\n    'instructionType': 'ROAD_CHANGE',\n    'roadNumbers': ['I-278 W'],\n    'street': 'Robert F Kennedy Brg W',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'ENTER_FREEWAY',\n    'message': 'Take the I-278 W freeway'\n  }, {\n    'routeOffsetInMeters': 42272,\n    'travelTimeInSeconds': 2341,\n    'point': {\n      'latitude': 40.79025,\n      'longitude': -73.92635\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-278 W'],\n    'street': 'Robert F Kennedy Brg W',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Robert F Kennedy Brg W/I-278 W'\n  }, {\n    'routeOffsetInMeters': 44538,\n    'travelTimeInSeconds': 2578,\n    'point': {\n      'latitude': 40.7728,\n      'longitude': -73.92071\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['I-278 W'],\n    'street': 'Robert F Kennedy Brg W',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'Grand Central Pkwy',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Robert F Kennedy Brg W/I-278 W toward Grand Central Pkwy'\n  }, {\n    'routeOffsetInMeters': 45918,\n    'travelTimeInSeconds': 2666,\n    'point': {\n      'latitude': 40.76835,\n      'longitude': -73.90601\n    },\n    'instructionType': 'TURN',\n    'roadNumbers': ['Grand Central Pkwy E'],\n    'street': 'Grand Central Parkway E',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'Grand Central Pkwy E',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Grand Central Parkway E/Grand Central Pkwy E toward Grand Central Pkwy E'\n  }, {\n    'routeOffsetInMeters': 48593,\n    'travelTimeInSeconds': 2792,\n    'point': {\n      'latitude': 40.77138,\n      'longitude': -73.87635\n    },\n    'instructionType': 'TURN',\n    'exitNumber': '7',\n    'street': 'Terminal B',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'signpostText': 'La Guardia Airport',\n    'junctionType': 'REGULAR',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'MOTORWAY_EXIT_RIGHT',\n    'message': 'Take exit 7 on the right onto Terminal B toward La Guardia Airport',\n    'combinedMessage': 'Take exit 7 on the right onto Terminal B toward La Guardia Airport then keep left at Terminal B'\n  }, {\n    'routeOffsetInMeters': 48940,\n    'travelTimeInSeconds': 2813,\n    'point': {\n      'latitude': 40.77138,\n      'longitude': -73.87224\n    },\n    'instructionType': 'TURN',\n    'street': 'Terminal B',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Terminal B',\n    'combinedMessage': 'Keep left at Terminal B then keep left at Terminal B'\n  }, {\n    'routeOffsetInMeters': 49032,\n    'travelTimeInSeconds': 2822,\n    'point': {\n      'latitude': 40.77167,\n      'longitude': -73.87124\n    },\n    'instructionType': 'TURN',\n    'street': 'Terminal B',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': -45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_LEFT',\n    'message': 'Keep left at Terminal B',\n    'combinedMessage': 'Keep left at Terminal B then keep right at Terminal B'\n  }, {\n    'routeOffsetInMeters': 49279,\n    'travelTimeInSeconds': 2849,\n    'point': {\n      'latitude': 40.77366,\n      'longitude': -73.87051\n    },\n    'instructionType': 'TURN',\n    'street': 'Terminal B',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'junctionType': 'BIFURCATION',\n    'turnAngleInDecimalDegrees': 45,\n    'possibleCombineWithNext': true,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'KEEP_RIGHT',\n    'message': 'Keep right at Terminal B',\n    'combinedMessage': 'Keep right at Terminal B then you have arrived at Terminal B. Your destination is on the right'\n  }, {\n    'routeOffsetInMeters': 49486,\n    'travelTimeInSeconds': 2954,\n    'point': {\n      'latitude': 40.77444,\n      'longitude': -73.87259\n    },\n    'instructionType': 'LOCATION_ARRIVAL',\n    'street': 'Terminal B',\n    'countryCode': 'USA',\n    'stateCode': 'NY',\n    'possibleCombineWithNext': false,\n    'drivingSide': 'RIGHT',\n    'maneuver': 'ARRIVE_RIGHT',\n    'message': 'You have arrived at Terminal B. Your destination is on the right'\n  }];\n  _exports.Guidance = Guidance;\n});","define(\"adept-iq/data/routeInformationData\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.data = void 0;\n  const data = [{\n    'routeId': 123456,\n    'routeType': 'Regular',\n    'notes': 'Notes abc',\n    'travelTimeInSeconds': 111,\n    'vehicle': {\n      'id': 759901,\n      'odometerStart': 123,\n      'odometerEnd': 456,\n      'location': {\n        'identifier': 'abc',\n        'address': '1976 René-Lévesque Blvd',\n        'zone': 'Blvd',\n        'notes': 'notes 123'\n      }\n    },\n    'driver': {\n      'id': 7590,\n      'driverPhoneNo': '0123456789',\n      'driverName': 'John',\n      'shiftStartTime': '12:05',\n      'shiftEndTime': '22:10',\n      'driverStartTime': '12:05',\n      'driverEndTime': '22:10'\n    }\n  }];\n  _exports.data = data;\n});","define(\"adept-iq/data/routeType\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.data = void 0;\n  const data = [{\n    'id': '1',\n    'attributes': {\n      'id': 'Regular',\n      'name': 'Regular',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '2',\n    'attributes': {\n      'id': 'Breakdown',\n      'name': 'Breakdown',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '3',\n    'attributes': {\n      'id': 'Breakdown Replacement',\n      'name': 'Breakdown Replacement',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '4',\n    'attributes': {\n      'id': 'Rescue',\n      'name': 'Rescue',\n      'isChecked': 'true'\n    }\n  }, {\n    'id': '5',\n    'attributes': {\n      'id': 'Rescue Replacement',\n      'name': 'Rescue Replacement',\n      'isChecked': 'true'\n    }\n  }];\n  _exports.data = data;\n});","define(\"adept-iq/data/routeTypeData\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.data = void 0;\n  const data = [{\n    'id': '1',\n    'attributes': {\n      'id': 'Verify Route',\n      'name': 'Verify Route'\n    }\n  }, {\n    'id': '2',\n    'attributes': {\n      'id': 'Reopen Route',\n      'name': 'Reopen Route'\n    }\n  }, {\n    'id': '3',\n    'attributes': {\n      'id': 'Report Breakdown',\n      'name': 'Report Breakdown'\n    }\n  }, {\n    'id': '4',\n    'attributes': {\n      'id': 'Breakdown Replacement',\n      'name': 'Breakdown Replacement'\n    }\n  }, {\n    'id': '5',\n    'attributes': {\n      'id': 'Rescue',\n      'name': 'Rescue'\n    }\n  }];\n  _exports.data = data;\n});","define(\"adept-iq/data/vehicleData\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.data = void 0;\n  const data = [{\n    'id': '1',\n    'attributes': {\n      'id': 759902\n    }\n  }, {\n    'id': '2',\n    'attributes': {\n      'id': 759901\n    }\n  }, {\n    'id': '3',\n    'attributes': {\n      'id': 759903\n    }\n  }];\n  _exports.data = data;\n});","define(\"adept-iq/ember-hifi/tests/addon.lint-test\", [], function () {\n  \"use strict\";\n});","define(\"adept-iq/ember-hifi/tests/app.lint-test\", [], function () {\n  \"use strict\";\n});","define(\"adept-iq/ember-hifi/tests/test-support.lint-test\", [], function () {\n  \"use strict\";\n});","define(\"adept-iq/errors/version-error\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const VersionError = function (errors) {\n    let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'This error is result of missing avlm routeVersion.';\n    Ember.Error.call(this, message);\n    this.errors = errors || [{\n      title: 'This is version error.',\n      detail: message\n    }];\n  };\n\n  VersionError.prototype = Object.create(Ember.Error.prototype);\n  var _default = VersionError;\n  _exports.default = _default;\n});","define(\"adept-iq/flash/object\", [\"exports\", \"ember-cli-flash/flash/object\"], function (_exports, _object) {\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 _object.default;\n    }\n  });\n});","define(\"adept-iq/helpers/-element\", [\"exports\", \"ember-element-helper/helpers/-element\"], function (_exports, _element) {\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 _element.default;\n    }\n  });\n});","define(\"adept-iq/helpers/abs\", [\"exports\", \"ember-math-helpers/helpers/abs\"], function (_exports, _abs) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"abs\", {\n    enumerable: true,\n    get: function () {\n      return _abs.abs;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _abs.default;\n    }\n  });\n});","define(\"adept-iq/helpers/acos\", [\"exports\", \"ember-math-helpers/helpers/acos\"], function (_exports, _acos) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"acos\", {\n    enumerable: true,\n    get: function () {\n      return _acos.acos;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _acos.default;\n    }\n  });\n});","define(\"adept-iq/helpers/acosh\", [\"exports\", \"ember-math-helpers/helpers/acosh\"], function (_exports, _acosh) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"acosh\", {\n    enumerable: true,\n    get: function () {\n      return _acosh.acosh;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _acosh.default;\n    }\n  });\n});","define(\"adept-iq/helpers/add\", [\"exports\", \"ember-math-helpers/helpers/add\"], function (_exports, _add) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"add\", {\n    enumerable: true,\n    get: function () {\n      return _add.add;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _add.default;\n    }\n  });\n});","define(\"adept-iq/helpers/and\", [\"exports\", \"ember-truth-helpers/helpers/and\"], function (_exports, _and) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"and\", {\n    enumerable: true,\n    get: function () {\n      return _and.and;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _and.default;\n    }\n  });\n});","define(\"adept-iq/helpers/app-version\", [\"exports\", \"adept-iq/config/environment\", \"ember-cli-app-version/utils/regexp\"], function (_exports, _environment, _regexp) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.appVersion = appVersion;\n  _exports.default = void 0;\n\n  function appVersion(_) {\n    let hash = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const version = _environment.default.APP.version; // e.g. 1.0.0-alpha.1+4jds75hf\n    // Allow use of 'hideSha' and 'hideVersion' For backwards compatibility\n\n    let versionOnly = hash.versionOnly || hash.hideSha;\n    let shaOnly = hash.shaOnly || hash.hideVersion;\n    let match = null;\n\n    if (versionOnly) {\n      if (hash.showExtended) {\n        match = version.match(_regexp.versionExtendedRegExp); // 1.0.0-alpha.1\n      } // Fallback to just version\n\n\n      if (!match) {\n        match = version.match(_regexp.versionRegExp); // 1.0.0\n      }\n    }\n\n    if (shaOnly) {\n      match = version.match(_regexp.shaRegExp); // 4jds75hf\n    }\n\n    return match ? match[0] : version;\n  }\n\n  var _default = Ember.Helper.helper(appVersion);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/append\", [\"exports\", \"ember-composable-helpers/helpers/append\"], function (_exports, _append) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"append\", {\n    enumerable: true,\n    get: function () {\n      return _append.append;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _append.default;\n    }\n  });\n});","define(\"adept-iq/helpers/array\", [\"exports\", \"ember-composable-helpers/helpers/array\"], function (_exports, _array) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"array\", {\n    enumerable: true,\n    get: function () {\n      return _array.array;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _array.default;\n    }\n  });\n});","define(\"adept-iq/helpers/asin\", [\"exports\", \"ember-math-helpers/helpers/asin\"], function (_exports, _asin) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"asin\", {\n    enumerable: true,\n    get: function () {\n      return _asin.asin;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _asin.default;\n    }\n  });\n});","define(\"adept-iq/helpers/asinh\", [\"exports\", \"ember-math-helpers/helpers/asinh\"], function (_exports, _asinh) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"asinh\", {\n    enumerable: true,\n    get: function () {\n      return _asinh.asinh;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _asinh.default;\n    }\n  });\n});","define(\"adept-iq/helpers/assign\", [\"exports\", \"ember-assign-helper/helpers/assign\"], function (_exports, _assign) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"assign\", {\n    enumerable: true,\n    get: function () {\n      return _assign.assign;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _assign.default;\n    }\n  });\n});","define(\"adept-iq/helpers/atan\", [\"exports\", \"ember-math-helpers/helpers/atan\"], function (_exports, _atan) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"atan\", {\n    enumerable: true,\n    get: function () {\n      return _atan.atan;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _atan.default;\n    }\n  });\n});","define(\"adept-iq/helpers/atan2\", [\"exports\", \"ember-math-helpers/helpers/atan2\"], function (_exports, _atan) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"atan2\", {\n    enumerable: true,\n    get: function () {\n      return _atan.atan2;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _atan.default;\n    }\n  });\n});","define(\"adept-iq/helpers/atanh\", [\"exports\", \"ember-math-helpers/helpers/atanh\"], function (_exports, _atanh) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"atanh\", {\n    enumerable: true,\n    get: function () {\n      return _atanh.atanh;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _atanh.default;\n    }\n  });\n});","define(\"adept-iq/helpers/bs-contains\", [\"exports\", \"ember-bootstrap/helpers/bs-contains\"], function (_exports, _bsContains) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"bsContains\", {\n    enumerable: true,\n    get: function () {\n      return _bsContains.bsContains;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _bsContains.default;\n    }\n  });\n});","define(\"adept-iq/helpers/bs-eq\", [\"exports\", \"ember-bootstrap/helpers/bs-eq\"], function (_exports, _bsEq) {\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 _bsEq.default;\n    }\n  });\n  Object.defineProperty(_exports, \"eq\", {\n    enumerable: true,\n    get: function () {\n      return _bsEq.eq;\n    }\n  });\n});","define(\"adept-iq/helpers/camelize\", [\"exports\", \"ember-cli-string-helpers/helpers/camelize\"], function (_exports, _camelize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"camelize\", {\n    enumerable: true,\n    get: function () {\n      return _camelize.camelize;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _camelize.default;\n    }\n  });\n});","define(\"adept-iq/helpers/cancel-all\", [\"exports\", \"ember-concurrency/helpers/cancel-all\"], function (_exports, _cancelAll) {\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 _cancelAll.default;\n    }\n  });\n});","define(\"adept-iq/helpers/capitalize\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.capitalize = capitalize;\n  _exports.default = void 0;\n\n  function capitalize(str) {\n    if (!str[0]) return '';\n    const s = str[0].replace(/\\s+/g, '').capitalize();\n    return s;\n  }\n\n  var _default = Ember.Helper.helper(capitalize);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/cbrt\", [\"exports\", \"ember-math-helpers/helpers/cbrt\"], function (_exports, _cbrt) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"cbrt\", {\n    enumerable: true,\n    get: function () {\n      return _cbrt.cbrt;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _cbrt.default;\n    }\n  });\n});","define(\"adept-iq/helpers/ceil\", [\"exports\", \"ember-math-helpers/helpers/ceil\"], function (_exports, _ceil) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"ceil\", {\n    enumerable: true,\n    get: function () {\n      return _ceil.ceil;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _ceil.default;\n    }\n  });\n});","define(\"adept-iq/helpers/changeset-get\", [\"exports\", \"ember-changeset/helpers/changeset-get\"], function (_exports, _changesetGet) {\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 _changesetGet.default;\n    }\n  });\n});","define(\"adept-iq/helpers/changeset-set\", [\"exports\", \"ember-changeset/helpers/changeset-set\"], function (_exports, _changesetSet) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"changesetSet\", {\n    enumerable: true,\n    get: function () {\n      return _changesetSet.changesetSet;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _changesetSet.default;\n    }\n  });\n});","define(\"adept-iq/helpers/changeset\", [\"exports\", \"ember-changeset-validations/helpers/changeset\"], function (_exports, _changeset) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"changeset\", {\n    enumerable: true,\n    get: function () {\n      return _changeset.changeset;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _changeset.default;\n    }\n  });\n});","define(\"adept-iq/helpers/chunk\", [\"exports\", \"ember-composable-helpers/helpers/chunk\"], function (_exports, _chunk) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"chunk\", {\n    enumerable: true,\n    get: function () {\n      return _chunk.chunk;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _chunk.default;\n    }\n  });\n});","define(\"adept-iq/helpers/classify\", [\"exports\", \"ember-cli-string-helpers/helpers/classify\"], function (_exports, _classify) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"classify\", {\n    enumerable: true,\n    get: function () {\n      return _classify.classify;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _classify.default;\n    }\n  });\n});","define(\"adept-iq/helpers/clz32\", [\"exports\", \"ember-math-helpers/helpers/clz32\"], function (_exports, _clz) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"clz32\", {\n    enumerable: true,\n    get: function () {\n      return _clz.clz32;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _clz.default;\n    }\n  });\n});","define(\"adept-iq/helpers/compact\", [\"exports\", \"ember-composable-helpers/helpers/compact\"], function (_exports, _compact) {\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 _compact.default;\n    }\n  });\n});","define(\"adept-iq/helpers/compute\", [\"exports\", \"ember-composable-helpers/helpers/compute\"], function (_exports, _compute) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"compute\", {\n    enumerable: true,\n    get: function () {\n      return _compute.compute;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _compute.default;\n    }\n  });\n});","define(\"adept-iq/helpers/contains\", [\"exports\", \"ember-composable-helpers/helpers/contains\"], function (_exports, _contains) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"contains\", {\n    enumerable: true,\n    get: function () {\n      return _contains.contains;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _contains.default;\n    }\n  });\n});","define(\"adept-iq/helpers/cos\", [\"exports\", \"ember-math-helpers/helpers/cos\"], function (_exports, _cos) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"cos\", {\n    enumerable: true,\n    get: function () {\n      return _cos.cos;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _cos.default;\n    }\n  });\n});","define(\"adept-iq/helpers/cosh\", [\"exports\", \"ember-math-helpers/helpers/cosh\"], function (_exports, _cosh) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"cosh\", {\n    enumerable: true,\n    get: function () {\n      return _cosh.cosh;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _cosh.default;\n    }\n  });\n});","define(\"adept-iq/helpers/dasherize\", [\"exports\", \"ember-cli-string-helpers/helpers/dasherize\"], function (_exports, _dasherize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"dasherize\", {\n    enumerable: true,\n    get: function () {\n      return _dasherize.dasherize;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _dasherize.default;\n    }\n  });\n});","define(\"adept-iq/helpers/dec\", [\"exports\", \"ember-composable-helpers/helpers/dec\"], function (_exports, _dec) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"dec\", {\n    enumerable: true,\n    get: function () {\n      return _dec.dec;\n    }\n  });\n  Object.defineProperty(_exports, \"default\", {\n    enumerable: true,\n    get: function () {\n      return _dec.default;\n    }\n  });\n});","define(\"adept-iq/helpers/div\", [\"exports\", \"ember-math-helpers/helpers/div\"], function (_exports, _div) {\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 _div.default;\n    }\n  });\n  Object.defineProperty(_exports, \"div\", {\n    enumerable: true,\n    get: function () {\n      return _div.div;\n    }\n  });\n});","define(\"adept-iq/helpers/drop\", [\"exports\", \"ember-composable-helpers/helpers/drop\"], function (_exports, _drop) {\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 _drop.default;\n    }\n  });\n});","define(\"adept-iq/helpers/ember-power-select-is-group\", [\"exports\", \"ember-power-select/helpers/ember-power-select-is-group\"], function (_exports, _emberPowerSelectIsGroup) {\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 _emberPowerSelectIsGroup.default;\n    }\n  });\n  Object.defineProperty(_exports, \"emberPowerSelectIsGroup\", {\n    enumerable: true,\n    get: function () {\n      return _emberPowerSelectIsGroup.emberPowerSelectIsGroup;\n    }\n  });\n});","define(\"adept-iq/helpers/ember-power-select-is-selected\", [\"exports\", \"ember-power-select/helpers/ember-power-select-is-selected\"], function (_exports, _emberPowerSelectIsSelected) {\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 _emberPowerSelectIsSelected.default;\n    }\n  });\n  Object.defineProperty(_exports, \"emberPowerSelectIsSelected\", {\n    enumerable: true,\n    get: function () {\n      return _emberPowerSelectIsSelected.emberPowerSelectIsSelected;\n    }\n  });\n});","define(\"adept-iq/helpers/ember-power-select-true-string-if-present\", [\"exports\", \"ember-power-select/helpers/ember-power-select-true-string-if-present\"], function (_exports, _emberPowerSelectTrueStringIfPresent) {\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 _emberPowerSelectTrueStringIfPresent.default;\n    }\n  });\n  Object.defineProperty(_exports, \"emberPowerSelectTrueStringIfPresent\", {\n    enumerable: true,\n    get: function () {\n      return _emberPowerSelectTrueStringIfPresent.emberPowerSelectTrueStringIfPresent;\n    }\n  });\n});","define(\"adept-iq/helpers/eq\", [\"exports\", \"ember-truth-helpers/helpers/equal\"], function (_exports, _equal) {\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 _equal.default;\n    }\n  });\n  Object.defineProperty(_exports, \"equal\", {\n    enumerable: true,\n    get: function () {\n      return _equal.equal;\n    }\n  });\n});","define(\"adept-iq/helpers/exp\", [\"exports\", \"ember-math-helpers/helpers/exp\"], function (_exports, _exp) {\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 _exp.default;\n    }\n  });\n  Object.defineProperty(_exports, \"exp\", {\n    enumerable: true,\n    get: function () {\n      return _exp.exp;\n    }\n  });\n});","define(\"adept-iq/helpers/expm1\", [\"exports\", \"ember-math-helpers/helpers/expm1\"], function (_exports, _expm) {\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 _expm.default;\n    }\n  });\n  Object.defineProperty(_exports, \"expm1\", {\n    enumerable: true,\n    get: function () {\n      return _expm.expm1;\n    }\n  });\n});","define(\"adept-iq/helpers/filter-by\", [\"exports\", \"ember-composable-helpers/helpers/filter-by\"], function (_exports, _filterBy) {\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 _filterBy.default;\n    }\n  });\n});","define(\"adept-iq/helpers/filter\", [\"exports\", \"ember-composable-helpers/helpers/filter\"], function (_exports, _filter) {\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 _filter.default;\n    }\n  });\n});","define(\"adept-iq/helpers/find-by\", [\"exports\", \"ember-composable-helpers/helpers/find-by\"], function (_exports, _findBy) {\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 _findBy.default;\n    }\n  });\n});","define(\"adept-iq/helpers/flatten\", [\"exports\", \"ember-composable-helpers/helpers/flatten\"], function (_exports, _flatten) {\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 _flatten.default;\n    }\n  });\n  Object.defineProperty(_exports, \"flatten\", {\n    enumerable: true,\n    get: function () {\n      return _flatten.flatten;\n    }\n  });\n});","define(\"adept-iq/helpers/floor\", [\"exports\", \"ember-math-helpers/helpers/floor\"], function (_exports, _floor) {\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 _floor.default;\n    }\n  });\n  Object.defineProperty(_exports, \"floor\", {\n    enumerable: true,\n    get: function () {\n      return _floor.floor;\n    }\n  });\n});","define(\"adept-iq/helpers/format-address\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Helper.helper(_ref => {\n    let [sel] = _ref;\n\n    if (!sel) {\n      return '';\n    }\n\n    const alias = sel.address && sel.address.alias;\n    const freeform = sel.address && sel.address.freeformAddress || '';\n    return alias ? `${alias} - ${freeform}` : freeform;\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/fround\", [\"exports\", \"ember-math-helpers/helpers/fround\"], function (_exports, _fround) {\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 _fround.default;\n    }\n  });\n  Object.defineProperty(_exports, \"fround\", {\n    enumerable: true,\n    get: function () {\n      return _fround.fround;\n    }\n  });\n});","define(\"adept-iq/helpers/gcd\", [\"exports\", \"ember-math-helpers/helpers/gcd\"], function (_exports, _gcd) {\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 _gcd.default;\n    }\n  });\n  Object.defineProperty(_exports, \"gcd\", {\n    enumerable: true,\n    get: function () {\n      return _gcd.gcd;\n    }\n  });\n});","define(\"adept-iq/helpers/group-by\", [\"exports\", \"ember-composable-helpers/helpers/group-by\"], function (_exports, _groupBy) {\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 _groupBy.default;\n    }\n  });\n});","define(\"adept-iq/helpers/gt\", [\"exports\", \"ember-truth-helpers/helpers/gt\"], function (_exports, _gt) {\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 _gt.default;\n    }\n  });\n  Object.defineProperty(_exports, \"gt\", {\n    enumerable: true,\n    get: function () {\n      return _gt.gt;\n    }\n  });\n});","define(\"adept-iq/helpers/gte\", [\"exports\", \"ember-truth-helpers/helpers/gte\"], function (_exports, _gte) {\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 _gte.default;\n    }\n  });\n  Object.defineProperty(_exports, \"gte\", {\n    enumerable: true,\n    get: function () {\n      return _gte.gte;\n    }\n  });\n});","define(\"adept-iq/helpers/handle-dropdown\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.invokeFunction = invokeFunction;\n\n  function invokeFunction(_ref) {\n    let [prop, action] = _ref;\n    return function () {\n      action(prop, ...arguments);\n    };\n  }\n\n  var _default = Ember.Helper.helper(invokeFunction);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/has-next\", [\"exports\", \"ember-composable-helpers/helpers/has-next\"], function (_exports, _hasNext) {\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 _hasNext.default;\n    }\n  });\n  Object.defineProperty(_exports, \"hasNext\", {\n    enumerable: true,\n    get: function () {\n      return _hasNext.hasNext;\n    }\n  });\n});","define(\"adept-iq/helpers/has-previous\", [\"exports\", \"ember-composable-helpers/helpers/has-previous\"], function (_exports, _hasPrevious) {\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 _hasPrevious.default;\n    }\n  });\n  Object.defineProperty(_exports, \"hasPrevious\", {\n    enumerable: true,\n    get: function () {\n      return _hasPrevious.hasPrevious;\n    }\n  });\n});","define(\"adept-iq/helpers/has-role\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.hasRole = hasRole;\n\n  function hasRole(roles, roleName) {\n    if (!roleName || !roles) {\n      return false;\n    }\n\n    for (let i = 0; i < roles.length; i++) {\n      if (roles[i].toLowerCase() === roleName.toLowerCase()) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  var _default = Ember.Helper.extend({\n    user: Ember.inject.service(),\n    userChanged: Ember.observer('user.roles', function () {\n      this.recompute();\n    }),\n\n    compute(roleNames) {\n      const roles = Ember.get(this, 'user.roles');\n      return roleNames.any(roleName => hasRole(roles, roleName));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/html-safe\", [\"exports\", \"ember-cli-string-helpers/helpers/html-safe\"], function (_exports, _htmlSafe) {\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 _htmlSafe.default;\n    }\n  });\n  Object.defineProperty(_exports, \"htmlSafe\", {\n    enumerable: true,\n    get: function () {\n      return _htmlSafe.htmlSafe;\n    }\n  });\n});","define(\"adept-iq/helpers/humanize\", [\"exports\", \"ember-cli-string-helpers/helpers/humanize\"], function (_exports, _humanize) {\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 _humanize.default;\n    }\n  });\n  Object.defineProperty(_exports, \"humanize\", {\n    enumerable: true,\n    get: function () {\n      return _humanize.humanize;\n    }\n  });\n});","define(\"adept-iq/helpers/hypot\", [\"exports\", \"ember-math-helpers/helpers/hypot\"], function (_exports, _hypot) {\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 _hypot.default;\n    }\n  });\n  Object.defineProperty(_exports, \"hypot\", {\n    enumerable: true,\n    get: function () {\n      return _hypot.hypot;\n    }\n  });\n});","define(\"adept-iq/helpers/ignore-children\", [\"exports\", \"ember-ignore-children-helper/helpers/ignore-children\"], function (_exports, _ignoreChildren) {\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 _ignoreChildren.default;\n    }\n  });\n  Object.defineProperty(_exports, \"ignoreChildren\", {\n    enumerable: true,\n    get: function () {\n      return _ignoreChildren.ignoreChildren;\n    }\n  });\n});","define(\"adept-iq/helpers/imul\", [\"exports\", \"ember-math-helpers/helpers/imul\"], function (_exports, _imul) {\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 _imul.default;\n    }\n  });\n  Object.defineProperty(_exports, \"imul\", {\n    enumerable: true,\n    get: function () {\n      return _imul.imul;\n    }\n  });\n});","define(\"adept-iq/helpers/inc\", [\"exports\", \"ember-composable-helpers/helpers/inc\"], function (_exports, _inc) {\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 _inc.default;\n    }\n  });\n  Object.defineProperty(_exports, \"inc\", {\n    enumerable: true,\n    get: function () {\n      return _inc.inc;\n    }\n  });\n});","define(\"adept-iq/helpers/intersect\", [\"exports\", \"ember-composable-helpers/helpers/intersect\"], function (_exports, _intersect) {\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 _intersect.default;\n    }\n  });\n});","define(\"adept-iq/helpers/invoke\", [\"exports\", \"ember-composable-helpers/helpers/invoke\"], function (_exports, _invoke) {\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 _invoke.default;\n    }\n  });\n  Object.defineProperty(_exports, \"invoke\", {\n    enumerable: true,\n    get: function () {\n      return _invoke.invoke;\n    }\n  });\n});","define(\"adept-iq/helpers/is-after\", [\"exports\", \"ember-moment/helpers/is-after\"], function (_exports, _isAfter) {\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 _isAfter.default;\n    }\n  });\n});","define(\"adept-iq/helpers/is-array\", [\"exports\", \"ember-truth-helpers/helpers/is-array\"], function (_exports, _isArray) {\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 _isArray.default;\n    }\n  });\n  Object.defineProperty(_exports, \"isArray\", {\n    enumerable: true,\n    get: function () {\n      return _isArray.isArray;\n    }\n  });\n});","define(\"adept-iq/helpers/is-before\", [\"exports\", \"ember-moment/helpers/is-before\"], function (_exports, _isBefore) {\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 _isBefore.default;\n    }\n  });\n});","define(\"adept-iq/helpers/is-between\", [\"exports\", \"ember-moment/helpers/is-between\"], function (_exports, _isBetween) {\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 _isBetween.default;\n    }\n  });\n});","define(\"adept-iq/helpers/is-empty\", [\"exports\", \"ember-truth-helpers/helpers/is-empty\"], function (_exports, _isEmpty) {\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 _isEmpty.default;\n    }\n  });\n});","define(\"adept-iq/helpers/is-equal\", [\"exports\", \"ember-truth-helpers/helpers/is-equal\"], function (_exports, _isEqual) {\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 _isEqual.default;\n    }\n  });\n  Object.defineProperty(_exports, \"isEqual\", {\n    enumerable: true,\n    get: function () {\n      return _isEqual.isEqual;\n    }\n  });\n});","define(\"adept-iq/helpers/is-same-or-after\", [\"exports\", \"ember-moment/helpers/is-same-or-after\"], function (_exports, _isSameOrAfter) {\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 _isSameOrAfter.default;\n    }\n  });\n});","define(\"adept-iq/helpers/is-same-or-before\", [\"exports\", \"ember-moment/helpers/is-same-or-before\"], function (_exports, _isSameOrBefore) {\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 _isSameOrBefore.default;\n    }\n  });\n});","define(\"adept-iq/helpers/is-same\", [\"exports\", \"ember-moment/helpers/is-same\"], function (_exports, _isSame) {\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 _isSame.default;\n    }\n  });\n});","define(\"adept-iq/helpers/join\", [\"exports\", \"ember-composable-helpers/helpers/join\"], function (_exports, _join) {\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 _join.default;\n    }\n  });\n});","define(\"adept-iq/helpers/json-stringify\", [\"exports\", \"ember-hifi/helpers/json-stringify\"], function (_exports, _jsonStringify) {\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 _jsonStringify.default;\n    }\n  });\n  Object.defineProperty(_exports, \"jsonStringify\", {\n    enumerable: true,\n    get: function () {\n      return _jsonStringify.jsonStringify;\n    }\n  });\n});","define(\"adept-iq/helpers/lcm\", [\"exports\", \"ember-math-helpers/helpers/lcm\"], function (_exports, _lcm) {\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 _lcm.default;\n    }\n  });\n  Object.defineProperty(_exports, \"lcm\", {\n    enumerable: true,\n    get: function () {\n      return _lcm.lcm;\n    }\n  });\n});","define(\"adept-iq/helpers/loc\", [\"exports\", \"@ember/string/helpers/loc\"], function (_exports, _loc) {\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 _loc.default;\n    }\n  });\n  Object.defineProperty(_exports, \"loc\", {\n    enumerable: true,\n    get: function () {\n      return _loc.loc;\n    }\n  });\n});","define(\"adept-iq/helpers/log-e\", [\"exports\", \"ember-math-helpers/helpers/log-e\"], function (_exports, _logE) {\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 _logE.default;\n    }\n  });\n  Object.defineProperty(_exports, \"logE\", {\n    enumerable: true,\n    get: function () {\n      return _logE.logE;\n    }\n  });\n});","define(\"adept-iq/helpers/log10\", [\"exports\", \"ember-math-helpers/helpers/log10\"], function (_exports, _log) {\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 _log.default;\n    }\n  });\n  Object.defineProperty(_exports, \"log10\", {\n    enumerable: true,\n    get: function () {\n      return _log.log10;\n    }\n  });\n});","define(\"adept-iq/helpers/log1p\", [\"exports\", \"ember-math-helpers/helpers/log1p\"], function (_exports, _log1p) {\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 _log1p.default;\n    }\n  });\n  Object.defineProperty(_exports, \"log1p\", {\n    enumerable: true,\n    get: function () {\n      return _log1p.log1p;\n    }\n  });\n});","define(\"adept-iq/helpers/log2\", [\"exports\", \"ember-math-helpers/helpers/log2\"], function (_exports, _log) {\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 _log.default;\n    }\n  });\n  Object.defineProperty(_exports, \"log2\", {\n    enumerable: true,\n    get: function () {\n      return _log.log2;\n    }\n  });\n});","define(\"adept-iq/helpers/lowercase\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.lowercase = lowercase;\n\n  function lowercase(str) {\n    const s = str[0].replace(/\\s+/g, '-').toLowerCase();\n    return s;\n  }\n\n  var _default = Ember.Helper.helper(lowercase);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/lt\", [\"exports\", \"ember-truth-helpers/helpers/lt\"], function (_exports, _lt) {\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 _lt.default;\n    }\n  });\n  Object.defineProperty(_exports, \"lt\", {\n    enumerable: true,\n    get: function () {\n      return _lt.lt;\n    }\n  });\n});","define(\"adept-iq/helpers/lte\", [\"exports\", \"ember-truth-helpers/helpers/lte\"], function (_exports, _lte) {\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 _lte.default;\n    }\n  });\n  Object.defineProperty(_exports, \"lte\", {\n    enumerable: true,\n    get: function () {\n      return _lte.lte;\n    }\n  });\n});","define(\"adept-iq/helpers/map-by\", [\"exports\", \"ember-composable-helpers/helpers/map-by\"], function (_exports, _mapBy) {\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 _mapBy.default;\n    }\n  });\n});","define(\"adept-iq/helpers/map\", [\"exports\", \"ember-composable-helpers/helpers/map\"], function (_exports, _map) {\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 _map.default;\n    }\n  });\n});","define(\"adept-iq/helpers/max\", [\"exports\", \"ember-math-helpers/helpers/max\"], function (_exports, _max) {\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 _max.default;\n    }\n  });\n  Object.defineProperty(_exports, \"max\", {\n    enumerable: true,\n    get: function () {\n      return _max.max;\n    }\n  });\n});","define(\"adept-iq/helpers/media\", [\"exports\", \"ember-responsive/helpers/media\"], function (_exports, _media) {\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 _media.default;\n    }\n  });\n  Object.defineProperty(_exports, \"media\", {\n    enumerable: true,\n    get: function () {\n      return _media.media;\n    }\n  });\n});","define(\"adept-iq/helpers/min\", [\"exports\", \"ember-math-helpers/helpers/min\"], function (_exports, _min) {\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 _min.default;\n    }\n  });\n  Object.defineProperty(_exports, \"min\", {\n    enumerable: true,\n    get: function () {\n      return _min.min;\n    }\n  });\n});","define(\"adept-iq/helpers/mod\", [\"exports\", \"ember-math-helpers/helpers/mod\"], function (_exports, _mod) {\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 _mod.default;\n    }\n  });\n  Object.defineProperty(_exports, \"mod\", {\n    enumerable: true,\n    get: function () {\n      return _mod.mod;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-add\", [\"exports\", \"ember-moment/helpers/moment-add\"], function (_exports, _momentAdd) {\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 _momentAdd.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-calendar\", [\"exports\", \"ember-moment/helpers/moment-calendar\"], function (_exports, _momentCalendar) {\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 _momentCalendar.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-diff\", [\"exports\", \"ember-moment/helpers/moment-diff\"], function (_exports, _momentDiff) {\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 _momentDiff.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-duration\", [\"exports\", \"ember-moment/helpers/moment-duration\"], function (_exports, _momentDuration) {\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 _momentDuration.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-format\", [\"exports\", \"ember-moment/helpers/moment-format\"], function (_exports, _momentFormat) {\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 _momentFormat.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-from-now\", [\"exports\", \"ember-moment/helpers/moment-from-now\"], function (_exports, _momentFromNow) {\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 _momentFromNow.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-from\", [\"exports\", \"ember-moment/helpers/moment-from\"], function (_exports, _momentFrom) {\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 _momentFrom.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-subtract\", [\"exports\", \"ember-moment/helpers/moment-subtract\"], function (_exports, _momentSubtract) {\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 _momentSubtract.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-to-date\", [\"exports\", \"ember-moment/helpers/moment-to-date\"], function (_exports, _momentToDate) {\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 _momentToDate.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-to-now\", [\"exports\", \"ember-moment/helpers/moment-to-now\"], function (_exports, _momentToNow) {\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 _momentToNow.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-to\", [\"exports\", \"ember-moment/helpers/moment-to\"], function (_exports, _momentTo) {\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 _momentTo.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment-unix\", [\"exports\", \"ember-moment/helpers/unix\"], function (_exports, _unix) {\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 _unix.default;\n    }\n  });\n});","define(\"adept-iq/helpers/moment\", [\"exports\", \"ember-moment/helpers/moment\"], function (_exports, _moment) {\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 _moment.default;\n    }\n  });\n});","define(\"adept-iq/helpers/mult\", [\"exports\", \"ember-math-helpers/helpers/mult\"], function (_exports, _mult) {\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 _mult.default;\n    }\n  });\n  Object.defineProperty(_exports, \"mult\", {\n    enumerable: true,\n    get: function () {\n      return _mult.mult;\n    }\n  });\n});","define(\"adept-iq/helpers/next\", [\"exports\", \"ember-composable-helpers/helpers/next\"], function (_exports, _next) {\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 _next.default;\n    }\n  });\n  Object.defineProperty(_exports, \"next\", {\n    enumerable: true,\n    get: function () {\n      return _next.next;\n    }\n  });\n});","define(\"adept-iq/helpers/noop\", [\"exports\", \"ember-composable-helpers/helpers/noop\"], function (_exports, _noop) {\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 _noop.default;\n    }\n  });\n  Object.defineProperty(_exports, \"noop\", {\n    enumerable: true,\n    get: function () {\n      return _noop.noop;\n    }\n  });\n});","define(\"adept-iq/helpers/not-eq\", [\"exports\", \"ember-truth-helpers/helpers/not-equal\"], function (_exports, _notEqual) {\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 _notEqual.default;\n    }\n  });\n  Object.defineProperty(_exports, \"notEq\", {\n    enumerable: true,\n    get: function () {\n      return _notEqual.notEq;\n    }\n  });\n});","define(\"adept-iq/helpers/not\", [\"exports\", \"ember-truth-helpers/helpers/not\"], function (_exports, _not) {\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 _not.default;\n    }\n  });\n  Object.defineProperty(_exports, \"not\", {\n    enumerable: true,\n    get: function () {\n      return _not.not;\n    }\n  });\n});","define(\"adept-iq/helpers/now\", [\"exports\", \"ember-moment/helpers/now\"], function (_exports, _now) {\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 _now.default;\n    }\n  });\n});","define(\"adept-iq/helpers/numeric-duration\", [\"exports\", \"ember-hifi/helpers/numeric-duration\"], function (_exports, _numericDuration) {\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 _numericDuration.default;\n    }\n  });\n  Object.defineProperty(_exports, \"numericDuration\", {\n    enumerable: true,\n    get: function () {\n      return _numericDuration.numericDuration;\n    }\n  });\n});","define(\"adept-iq/helpers/object-at\", [\"exports\", \"ember-composable-helpers/helpers/object-at\"], function (_exports, _objectAt) {\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 _objectAt.default;\n    }\n  });\n  Object.defineProperty(_exports, \"objectAt\", {\n    enumerable: true,\n    get: function () {\n      return _objectAt.objectAt;\n    }\n  });\n});","define(\"adept-iq/helpers/one-at-a-time\", [\"exports\", \"ember-hifi/helpers/one-at-a-time\"], function (_exports, _oneAtATime) {\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 _oneAtATime.default;\n    }\n  });\n  Object.defineProperty(_exports, \"oneAtATime\", {\n    enumerable: true,\n    get: function () {\n      return _oneAtATime.oneAtATime;\n    }\n  });\n});","define(\"adept-iq/helpers/optional\", [\"exports\", \"ember-composable-helpers/helpers/optional\"], function (_exports, _optional) {\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 _optional.default;\n    }\n  });\n  Object.defineProperty(_exports, \"optional\", {\n    enumerable: true,\n    get: function () {\n      return _optional.optional;\n    }\n  });\n});","define(\"adept-iq/helpers/or\", [\"exports\", \"ember-truth-helpers/helpers/or\"], function (_exports, _or) {\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 _or.default;\n    }\n  });\n  Object.defineProperty(_exports, \"or\", {\n    enumerable: true,\n    get: function () {\n      return _or.or;\n    }\n  });\n});","define(\"adept-iq/helpers/perform\", [\"exports\", \"ember-concurrency/helpers/perform\"], function (_exports, _perform) {\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 _perform.default;\n    }\n  });\n});","define(\"adept-iq/helpers/pipe-action\", [\"exports\", \"ember-composable-helpers/helpers/pipe-action\"], function (_exports, _pipeAction) {\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 _pipeAction.default;\n    }\n  });\n});","define(\"adept-iq/helpers/pipe\", [\"exports\", \"ember-composable-helpers/helpers/pipe\"], function (_exports, _pipe) {\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 _pipe.default;\n    }\n  });\n  Object.defineProperty(_exports, \"pipe\", {\n    enumerable: true,\n    get: function () {\n      return _pipe.pipe;\n    }\n  });\n});","define(\"adept-iq/helpers/pluralize\", [\"exports\", \"ember-inflector/lib/helpers/pluralize\"], function (_exports, _pluralize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _pluralize.default;\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/plus-one\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.plusOne = plusOne;\n\n  function plusOne(index) {\n    return parseInt(index, 10) + 1;\n  }\n\n  var _default = Ember.Helper.helper(plusOne);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/pow\", [\"exports\", \"ember-math-helpers/helpers/pow\"], function (_exports, _pow) {\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 _pow.default;\n    }\n  });\n  Object.defineProperty(_exports, \"pow\", {\n    enumerable: true,\n    get: function () {\n      return _pow.pow;\n    }\n  });\n});","define(\"adept-iq/helpers/previous\", [\"exports\", \"ember-composable-helpers/helpers/previous\"], function (_exports, _previous) {\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 _previous.default;\n    }\n  });\n  Object.defineProperty(_exports, \"previous\", {\n    enumerable: true,\n    get: function () {\n      return _previous.previous;\n    }\n  });\n});","define(\"adept-iq/helpers/queue\", [\"exports\", \"ember-composable-helpers/helpers/queue\"], function (_exports, _queue) {\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 _queue.default;\n    }\n  });\n  Object.defineProperty(_exports, \"queue\", {\n    enumerable: true,\n    get: function () {\n      return _queue.queue;\n    }\n  });\n});","define(\"adept-iq/helpers/random\", [\"exports\", \"ember-math-helpers/helpers/random\"], function (_exports, _random) {\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 _random.default;\n    }\n  });\n  Object.defineProperty(_exports, \"random\", {\n    enumerable: true,\n    get: function () {\n      return _random.random;\n    }\n  });\n});","define(\"adept-iq/helpers/range\", [\"exports\", \"ember-composable-helpers/helpers/range\"], function (_exports, _range) {\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 _range.default;\n    }\n  });\n  Object.defineProperty(_exports, \"range\", {\n    enumerable: true,\n    get: function () {\n      return _range.range;\n    }\n  });\n});","define(\"adept-iq/helpers/reduce\", [\"exports\", \"ember-composable-helpers/helpers/reduce\"], function (_exports, _reduce) {\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 _reduce.default;\n    }\n  });\n});","define(\"adept-iq/helpers/reject-by\", [\"exports\", \"ember-composable-helpers/helpers/reject-by\"], function (_exports, _rejectBy) {\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 _rejectBy.default;\n    }\n  });\n});","define(\"adept-iq/helpers/repeat\", [\"exports\", \"ember-composable-helpers/helpers/repeat\"], function (_exports, _repeat) {\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 _repeat.default;\n    }\n  });\n  Object.defineProperty(_exports, \"repeat\", {\n    enumerable: true,\n    get: function () {\n      return _repeat.repeat;\n    }\n  });\n});","define(\"adept-iq/helpers/reverse\", [\"exports\", \"ember-composable-helpers/helpers/reverse\"], function (_exports, _reverse) {\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 _reverse.default;\n    }\n  });\n});","define(\"adept-iq/helpers/round\", [\"exports\", \"ember-math-helpers/helpers/round\"], function (_exports, _round) {\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 _round.default;\n    }\n  });\n  Object.defineProperty(_exports, \"round\", {\n    enumerable: true,\n    get: function () {\n      return _round.round;\n    }\n  });\n});","define(\"adept-iq/helpers/route-action\", [\"exports\", \"ember-route-action-helper/helpers/route-action\"], function (_exports, _routeAction) {\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 _routeAction.default;\n    }\n  });\n});","define(\"adept-iq/helpers/send\", [\"exports\", \"ember-component-inbound-actions/helpers/send\"], function (_exports, _send) {\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 _send.default;\n    }\n  });\n});","define(\"adept-iq/helpers/shuffle\", [\"exports\", \"ember-composable-helpers/helpers/shuffle\"], function (_exports, _shuffle) {\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 _shuffle.default;\n    }\n  });\n  Object.defineProperty(_exports, \"shuffle\", {\n    enumerable: true,\n    get: function () {\n      return _shuffle.shuffle;\n    }\n  });\n});","define(\"adept-iq/helpers/sign\", [\"exports\", \"ember-math-helpers/helpers/sign\"], function (_exports, _sign) {\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 _sign.default;\n    }\n  });\n  Object.defineProperty(_exports, \"sign\", {\n    enumerable: true,\n    get: function () {\n      return _sign.sign;\n    }\n  });\n});","define(\"adept-iq/helpers/sin\", [\"exports\", \"ember-math-helpers/helpers/sin\"], function (_exports, _sin) {\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 _sin.default;\n    }\n  });\n  Object.defineProperty(_exports, \"sin\", {\n    enumerable: true,\n    get: function () {\n      return _sin.sin;\n    }\n  });\n});","define(\"adept-iq/helpers/singularize\", [\"exports\", \"ember-inflector/lib/helpers/singularize\"], function (_exports, _singularize) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _singularize.default;\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/slice\", [\"exports\", \"ember-composable-helpers/helpers/slice\"], function (_exports, _slice) {\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 _slice.default;\n    }\n  });\n});","define(\"adept-iq/helpers/sort-by\", [\"exports\", \"ember-composable-helpers/helpers/sort-by\"], function (_exports, _sortBy) {\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 _sortBy.default;\n    }\n  });\n});","define(\"adept-iq/helpers/sqrt\", [\"exports\", \"ember-math-helpers/helpers/sqrt\"], function (_exports, _sqrt) {\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 _sqrt.default;\n    }\n  });\n  Object.defineProperty(_exports, \"sqrt\", {\n    enumerable: true,\n    get: function () {\n      return _sqrt.sqrt;\n    }\n  });\n});","define(\"adept-iq/helpers/sub\", [\"exports\", \"ember-math-helpers/helpers/sub\"], function (_exports, _sub) {\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 _sub.default;\n    }\n  });\n  Object.defineProperty(_exports, \"sub\", {\n    enumerable: true,\n    get: function () {\n      return _sub.sub;\n    }\n  });\n});","define(\"adept-iq/helpers/sum\", [\"exports\", \"ember-math-helpers/helpers/sum\"], function (_exports, _sum) {\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 _sum.default;\n    }\n  });\n  Object.defineProperty(_exports, \"sum\", {\n    enumerable: true,\n    get: function () {\n      return _sum.sum;\n    }\n  });\n});","define(\"adept-iq/helpers/svg-jar\", [\"exports\", \"ember-svg-jar/utils/make-helper\", \"ember-svg-jar/utils/make-svg\"], function (_exports, _makeHelper, _makeSvg) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.svgJar = svgJar;\n\n  function getInlineAsset(assetId) {\n    try {\n      /* eslint-disable global-require */\n      return require(`ember-svg-jar/inlined/${assetId}`).default;\n    } catch (err) {\n      return null;\n    }\n  }\n\n  function svgJar(assetId, svgAttrs) {\n    return (0, _makeSvg.default)(assetId, svgAttrs, getInlineAsset);\n  }\n\n  var _default = (0, _makeHelper.default)(svgJar);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/take\", [\"exports\", \"ember-composable-helpers/helpers/take\"], function (_exports, _take) {\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 _take.default;\n    }\n  });\n});","define(\"adept-iq/helpers/tan\", [\"exports\", \"ember-math-helpers/helpers/tan\"], function (_exports, _tan) {\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 _tan.default;\n    }\n  });\n  Object.defineProperty(_exports, \"tan\", {\n    enumerable: true,\n    get: function () {\n      return _tan.tan;\n    }\n  });\n});","define(\"adept-iq/helpers/tanh\", [\"exports\", \"ember-math-helpers/helpers/tanh\"], function (_exports, _tanh) {\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 _tanh.default;\n    }\n  });\n  Object.defineProperty(_exports, \"tanh\", {\n    enumerable: true,\n    get: function () {\n      return _tanh.tanh;\n    }\n  });\n});","define(\"adept-iq/helpers/task\", [\"exports\", \"ember-concurrency/helpers/task\"], function (_exports, _task) {\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 _task.default;\n    }\n  });\n});","define(\"adept-iq/helpers/titleize\", [\"exports\", \"ember-cli-string-helpers/helpers/titleize\"], function (_exports, _titleize) {\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 _titleize.default;\n    }\n  });\n  Object.defineProperty(_exports, \"titleize\", {\n    enumerable: true,\n    get: function () {\n      return _titleize.titleize;\n    }\n  });\n});","define(\"adept-iq/helpers/toggle-action\", [\"exports\", \"ember-composable-helpers/helpers/toggle-action\"], function (_exports, _toggleAction) {\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 _toggleAction.default;\n    }\n  });\n});","define(\"adept-iq/helpers/toggle\", [\"exports\", \"ember-composable-helpers/helpers/toggle\"], function (_exports, _toggle) {\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 _toggle.default;\n    }\n  });\n  Object.defineProperty(_exports, \"toggle\", {\n    enumerable: true,\n    get: function () {\n      return _toggle.toggle;\n    }\n  });\n});","define(\"adept-iq/helpers/trim\", [\"exports\", \"ember-cli-string-helpers/helpers/trim\"], function (_exports, _trim) {\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 _trim.default;\n    }\n  });\n  Object.defineProperty(_exports, \"trim\", {\n    enumerable: true,\n    get: function () {\n      return _trim.trim;\n    }\n  });\n});","define(\"adept-iq/helpers/trunc\", [\"exports\", \"ember-math-helpers/helpers/trunc\"], function (_exports, _trunc) {\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 _trunc.default;\n    }\n  });\n  Object.defineProperty(_exports, \"trunc\", {\n    enumerable: true,\n    get: function () {\n      return _trunc.trunc;\n    }\n  });\n});","define(\"adept-iq/helpers/truncate\", [\"exports\", \"ember-cli-string-helpers/helpers/truncate\"], function (_exports, _truncate) {\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 _truncate.default;\n    }\n  });\n  Object.defineProperty(_exports, \"truncate\", {\n    enumerable: true,\n    get: function () {\n      return _truncate.truncate;\n    }\n  });\n});","define(\"adept-iq/helpers/underscore\", [\"exports\", \"ember-cli-string-helpers/helpers/underscore\"], function (_exports, _underscore) {\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 _underscore.default;\n    }\n  });\n  Object.defineProperty(_exports, \"underscore\", {\n    enumerable: true,\n    get: function () {\n      return _underscore.underscore;\n    }\n  });\n});","define(\"adept-iq/helpers/union\", [\"exports\", \"ember-composable-helpers/helpers/union\"], function (_exports, _union) {\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 _union.default;\n    }\n  });\n});","define(\"adept-iq/helpers/unix\", [\"exports\", \"ember-moment/helpers/unix\"], function (_exports, _unix) {\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 _unix.default;\n    }\n  });\n});","define(\"adept-iq/helpers/uppercase\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.uppercase = uppercase;\n\n  function uppercase(str) {\n    const s = str[0].replace(/\\s+/g, '-').toUpperCase();\n    return s;\n  }\n\n  var _default = Ember.Helper.helper(uppercase);\n\n  _exports.default = _default;\n});","define(\"adept-iq/helpers/utc\", [\"exports\", \"ember-moment/helpers/utc\"], function (_exports, _utc) {\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 _utc.default;\n    }\n  });\n  Object.defineProperty(_exports, \"utc\", {\n    enumerable: true,\n    get: function () {\n      return _utc.utc;\n    }\n  });\n});","define(\"adept-iq/helpers/validate-transition\", [\"exports\", \"ember-steps/helpers/validate-transition\"], function (_exports, _validateTransition) {\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 _validateTransition.default;\n    }\n  });\n  Object.defineProperty(_exports, \"validateTransition\", {\n    enumerable: true,\n    get: function () {\n      return _validateTransition.validateTransition;\n    }\n  });\n});","define(\"adept-iq/helpers/w\", [\"exports\", \"ember-cli-string-helpers/helpers/w\"], function (_exports, _w) {\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 _w.default;\n    }\n  });\n  Object.defineProperty(_exports, \"w\", {\n    enumerable: true,\n    get: function () {\n      return _w.w;\n    }\n  });\n});","define(\"adept-iq/helpers/without\", [\"exports\", \"ember-composable-helpers/helpers/without\"], function (_exports, _without) {\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 _without.default;\n    }\n  });\n  Object.defineProperty(_exports, \"without\", {\n    enumerable: true,\n    get: function () {\n      return _without.without;\n    }\n  });\n});","define(\"adept-iq/helpers/xor\", [\"exports\", \"ember-truth-helpers/helpers/xor\"], function (_exports, _xor) {\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 _xor.default;\n    }\n  });\n  Object.defineProperty(_exports, \"xor\", {\n    enumerable: true,\n    get: function () {\n      return _xor.xor;\n    }\n  });\n});","define(\"adept-iq/initializers/add-modals-container\", [\"exports\", \"ember-modal-dialog/initializers/add-modals-container\"], function (_exports, _addModalsContainer) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'add-modals-container',\n    initialize: _addModalsContainer.default\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/app-version\", [\"exports\", \"ember-cli-app-version/initializer-factory\", \"adept-iq/config/environment\"], function (_exports, _initializerFactory, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  let name, version;\n\n  if (_environment.default.APP) {\n    name = _environment.default.APP.name;\n    version = _environment.default.APP.version;\n  }\n\n  var _default = {\n    name: 'App Version',\n    initialize: (0, _initializerFactory.default)(name, version)\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/container-debug-adapter\", [\"exports\", \"ember-resolver/resolvers/classic/container-debug-adapter\"], function (_exports, _containerDebugAdapter) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'container-debug-adapter',\n\n    initialize() {\n      let app = arguments[1] || arguments[0];\n      app.register('container-debug-adapter:main', _containerDebugAdapter.default);\n      app.inject('container-debug-adapter:main', 'namespace', 'application:main');\n    }\n\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/debug\", [\"exports\", \"@html-next/vertical-collection/-debug\"], function (_exports, _debug) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'vertical-collection-debug',\n\n    initialize() {}\n\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/deprecations\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n  const DEPRECATION_IDS_BLACKLIST = ['ember-simple-auth.session.authorize', 'ember-simple-auth.baseAuthorizer', 'ember-component.send-action', 'ember-polyfills.deprecate-merge', 'object.new-constructor', 'ember-runtime.deprecate-copy-copyable', 'remove-handler-infos', 'events.remove-all-listeners', 'action-deprecation', 'computed-deprecations'];\n\n  function initialize() {\n    Ember.Debug.registerDeprecationHandler((message, options, next) => {\n      if (DEPRECATION_IDS_BLACKLIST.includes(options.id)) return;\n      next(message, options);\n    });\n  }\n\n  var _default = {\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/ember-concurrency\", [\"exports\", \"ember-concurrency/initializers/ember-concurrency\"], function (_exports, _emberConcurrency) {\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 _emberConcurrency.default;\n    }\n  });\n});","define(\"adept-iq/initializers/ember-data-factory-guy\", [\"exports\", \"ember-data-factory-guy/utils/manual-setup\"], function (_exports, _manualSetup) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'ember-data-factory-guy',\n    after: 'ember-data',\n    initialize: function (application) {\n      if (arguments.length > 1) {\n        application = arguments[1];\n      }\n\n      let container = application.__container__;\n\n      if (container) {\n        // in fastboot container is null\n        (0, _manualSetup.default)(container);\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/ember-data\", [\"exports\", \"ember-data/setup-container\"], function (_exports, _setupContainer) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /*\n  \n    This code initializes Ember-Data onto an Ember application.\n  \n    If an Ember.js developer defines a subclass of DS.Store on their application,\n    as `App.StoreService` (or via a module system that resolves to `service:store`)\n    this code will automatically instantiate it and make it available on the\n    router.\n  \n    Additionally, after an application's controllers have been injected, they will\n    each have the store made available to them.\n  \n    For example, imagine an Ember.js application with the following classes:\n  \n    ```app/services/store.js\n    import DS from 'ember-data';\n  \n    export default DS.Store.extend({\n      adapter: 'custom'\n    });\n    ```\n  \n    ```app/controllers/posts.js\n    import { Controller } from '@ember/controller';\n  \n    export default Controller.extend({\n      // ...\n    });\n  \n    When the application is initialized, `ApplicationStore` will automatically be\n    instantiated, and the instance of `PostsController` will have its `store`\n    property set to that instance.\n  \n    Note that this code will only be run if the `ember-application` package is\n    loaded. If Ember Data is being used in an environment other than a\n    typical application (e.g., node.js where only `ember-runtime` is available),\n    this code will be ignored.\n  */\n  var _default = {\n    name: 'ember-data',\n    initialize: _setupContainer.default\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/ember-responsive-breakpoints\", [\"exports\", \"ember-responsive/initializers/responsive\"], function (_exports, _responsive) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _responsive.default;\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/ember-simple-auth\", [\"exports\", \"adept-iq/config/environment\", \"ember-simple-auth/configuration\", \"ember-simple-auth/initializers/setup-session\", \"ember-simple-auth/initializers/setup-session-service\", \"ember-simple-auth/initializers/setup-session-restoration\"], function (_exports, _environment, _configuration, _setupSession, _setupSessionService, _setupSessionRestoration) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'ember-simple-auth',\n\n    initialize(registry) {\n      const config = _environment.default['ember-simple-auth'] || {};\n      config.rootURL = _environment.default.rootURL || _environment.default.baseURL;\n\n      _configuration.default.load(config);\n\n      (0, _setupSession.default)(registry);\n      (0, _setupSessionService.default)(registry);\n      (0, _setupSessionRestoration.default)(registry);\n    }\n\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/export-application-global\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n\n    if (_environment.default.exportApplicationGlobal !== false) {\n      var theGlobal;\n\n      if (typeof window !== 'undefined') {\n        theGlobal = window;\n      } else if (typeof global !== 'undefined') {\n        theGlobal = global;\n      } else if (typeof self !== 'undefined') {\n        theGlobal = self;\n      } else {\n        // no reasonable global, just bail\n        return;\n      }\n\n      var value = _environment.default.exportApplicationGlobal;\n      var globalName;\n\n      if (typeof value === 'string') {\n        globalName = value;\n      } else {\n        globalName = Ember.String.classify(_environment.default.modulePrefix);\n      }\n\n      if (!theGlobal[globalName]) {\n        theGlobal[globalName] = application;\n        application.reopen({\n          willDestroy: function () {\n            this._super.apply(this, arguments);\n\n            delete theGlobal[globalName];\n          }\n        });\n      }\n    }\n  }\n\n  var _default = {\n    name: 'export-application-global',\n    initialize: initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/flash-messages\", [\"exports\", \"adept-iq/config/environment\", \"ember-cli-flash/utils/flash-message-options\"], function (_exports, _environment, _flashMessageOptions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  /* eslint-disable ember/new-module-imports */\n  const INJECTION_FACTORIES_DEPRECATION_MESSAGE = '[ember-cli-flash] Future versions of ember-cli-flash will no longer inject the service automatically. Instead, you should explicitly inject it into your Route, Controller or Component with `Ember.inject.service`.';\n\n  function initialize() {\n    const application = arguments[1] || arguments[0];\n    const {\n      flashMessageDefaults\n    } = _environment.default || {};\n    const {\n      injectionFactories\n    } = flashMessageDefaults || [];\n    const options = (0, _flashMessageOptions.default)(flashMessageDefaults);\n    const shouldShowDeprecation = !(injectionFactories && injectionFactories.length);\n    (true && !(shouldShowDeprecation) && Ember.deprecate(INJECTION_FACTORIES_DEPRECATION_MESSAGE, shouldShowDeprecation, {\n      id: 'ember-cli-flash.deprecate-injection-factories',\n      until: '2.0.0'\n    }));\n    options.injectionFactories.forEach(factory => {\n      application.inject(factory, 'flashMessages', 'service:flash-messages');\n    });\n  }\n\n  var _default = {\n    name: 'flash-messages',\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/load-bootstrap-config\", [\"exports\", \"adept-iq/config/environment\", \"ember-bootstrap/config\"], function (_exports, _environment, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  function\n    /* container, application */\n  initialize() {\n    _config.default.load(_environment.default['ember-bootstrap'] || {});\n  }\n\n  var _default = {\n    name: 'load-bootstrap-config',\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/model-fragments\", [\"exports\", \"ember-data-model-fragments\"], function (_exports, _emberDataModelFragments) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // Import the full module to ensure monkey-patches are applied before any store\n  // instances are created. Sad face for side-effects :(\n  var _default = {\n    name: 'fragmentTransform',\n    before: 'ember-data',\n\n    initialize(application) {\n      application.inject('transform', 'store', 'service:store');\n    }\n\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/objectProxy\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  function\n    /* appInstance */\n  initialize() {\n    Ember.ObjectProxy.reopen({\n      unknownProperty(key) {\n        if (this.isDestroying || this.isDestroyed) {\n          return;\n        }\n\n        const content = this.content;\n\n        if (content && (content.isDestroying || content.isDestroyed)) {\n          return;\n        }\n\n        return this._super(key);\n      }\n\n    });\n  }\n\n  var _default = {\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/tomtom\", [\"exports\", \"tomtom\"], function (_exports, _tomtom) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  function initialize() {\n    _tomtom.default.setProductInfo('Adept IQ', '0.0.0');\n  }\n\n  var _default = {\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/initializers/viewport-config\", [\"exports\", \"ember-in-viewport/initializers/viewport-config\"], function (_exports, _viewportConfig) {\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 _viewportConfig.default;\n    }\n  });\n  Object.defineProperty(_exports, \"initialize\", {\n    enumerable: true,\n    get: function () {\n      return _viewportConfig.initialize;\n    }\n  });\n});","define(\"adept-iq/initializers/warnings\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n  const WARNING_IDS_BLACKLIST = ['ember-light-table.height-attribute', 'ember-htmlbars.style-xss-warning'];\n\n  function initialize() {\n    Ember.Debug.registerWarnHandler((message, options, next) => {\n      if (WARNING_IDS_BLACKLIST.includes(options.id)) {\n        console.trace = null; // eslint-disable-line no-console\n\n        return;\n      }\n\n      next(message, options);\n    });\n  }\n\n  var _default = {\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/instance-initializers/ember-data\", [\"exports\", \"ember-data/initialize-store-service\"], function (_exports, _initializeStoreService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    name: 'ember-data',\n    initialize: _initializeStoreService.default\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/instance-initializers/ember-hifi\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  function initialize(application) {\n    const {\n      emberHifi,\n      environment = 'development'\n    } = _environment.default;\n    const options = {\n      emberHifi,\n      environment\n    };\n    application.register('config:hifi', options, {\n      instantiate: false\n    });\n    application.inject('service:hifi', 'options', 'config:hifi');\n  }\n\n  var _default = {\n    name: 'ember-hifi',\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/instance-initializers/ember-simple-auth\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // This is only needed for backwards compatibility and will be removed in the\n  // next major release of ember-simple-auth. Unfortunately, there is no way to\n  // deprecate this without hooking into Ember's internals…\n  var _default = {\n    name: 'ember-simple-auth',\n\n    initialize() {}\n\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/instance-initializers/work\", [\"exports\", \"adept-iq/classes/work-queues/widget-refresh\"], function (_exports, _widgetRefresh) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  _exports.initialize = initialize;\n\n  // instantiates the shared widget refresh queue; used to synchronize updates\n  // to all column widgets\n  function initialize(applicationInstance) {\n    const work = applicationInstance.lookup('service:work');\n    const workspace = applicationInstance.lookup('service:workspace');\n\n    const widgetRefreshQueue = _widgetRefresh.default.create({\n      workspace\n    });\n\n    work.registerQueue(widgetRefreshQueue);\n  }\n\n  var _default = {\n    initialize\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/active-context-binding\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    init() {\n      this._super(...arguments);\n\n      const config = this.get('config');\n      const refreshData = this.refreshData;\n      const clearData = this.clearData;\n      (true && !(Ember.typeOf(config) === 'object') && Ember.assert('mixin active-context-binding requires components, routes, controllers to provide a `config` object', Ember.typeOf(config) === 'object'));\n      (true && !(Ember.isPresent(refreshData)) && Ember.assert('mixin active-context-binding requires components, routes, controllers to provide a refreshData function', Ember.isPresent(refreshData)));\n      (true && !(Ember.isPresent(clearData)) && Ember.assert('mixin active-context-binding requires components, routes, controllers to provide a clearData function', Ember.isPresent(clearData)));\n      this.addActiveDataBindings();\n    },\n\n    willDestroyElement() {\n      this.removeActiveDataBindings();\n\n      this._super(...arguments);\n    },\n\n    addActiveDataBindings() {\n      this._onActiveContextRefresh = modelNames => {\n        if (!modelNames.includes(this.get('config.modelName'))) {\n          // not refreshing this model. give control back\n          this.set('activeContext.topActiveContext.refreshInProgress', false);\n          return;\n        }\n\n        this.refreshData();\n      };\n\n      this._onActiveContextClear = () => {\n        this.clearData();\n      };\n\n      this.get('activeContext.topActiveContext').on('refresh', this._onActiveContextRefresh);\n      this.get('activeContext.topActiveContext').on('clear', this._onActiveContextClear);\n    },\n\n    removeActiveDataBindings() {\n      this.get('activeContext.topActiveContext').off('refresh', this._onActiveContextRefresh);\n      this.get('activeContext.topActiveContext').off('clear', this._onActiveContextClear);\n      this._onActiveContextRefresh = null;\n      this._onActiveContextClear = null;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/ada-boundary-layer\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ADA_BOUNDARY_TYPE = 'ada-boundary-polygons';\n\n  var _default = Ember.Mixin.create({\n    adaBoundaryLayer: null,\n    activeADABoundary: false,\n    adaBoundary: null,\n    onChangeADABoundary: Ember.observer('adaBoundary', function () {\n      const adaBoundary = this.get('adaBoundary');\n      Ember.run.debounce(this, this.doDrawADABoundary, adaBoundary, 300);\n    }),\n    onChangeActiveADABoundaries: Ember.observer('activeADABoundary', function () {\n      const activeADABoundary = this.get('activeADABoundary');\n      const adaBoundaryLayer = this.get('adaBoundaryLayer');\n      const map = this.get('map.native');\n\n      if (activeADABoundary) {\n        adaBoundaryLayer.addTo(map);\n      } else {\n        adaBoundaryLayer.remove();\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        adaBoundaryLayer: new window.L.LayerGroup()\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    doDrawADABoundary(adaBoundary) {\n      const geoms = adaBoundary && adaBoundary.geoms.length > 0 ? adaBoundary.geoms : null;\n      this.updateADABoundaries(geoms);\n    },\n\n    updateADABoundaries(geoms) {\n      const adaBoundaryLayer = this.get('adaBoundaryLayer');\n\n      if (!Ember.isPresent(this.get('map'))) {\n        return;\n      }\n\n      adaBoundaryLayer.clearLayers();\n\n      if (Ember.isPresent(geoms)) {\n        geoms.forEach(geom => {\n          // a geom can be MultiPolygon coordinates; drawn as one leaflet polygon,\n          // its polygons become rings of a single path and overlaps render as\n          // holes (even-odd fill), so draw each polygon as its own layer\n          const polygons = Array.isArray(geom?.[0]?.[0]?.[0]) ? geom : [geom];\n          polygons.forEach(polygonCoords => {\n            const lpolygon = this.createPolygon(polygonCoords, 'green', ADA_BOUNDARY_TYPE);\n            lpolygon.addTo(adaBoundaryLayer);\n          });\n        });\n      }\n    },\n\n    createPolygon(latlngs, color, type) {\n      const polygon = window.L.polygon(latlngs, {\n        color: color,\n        properties: {\n          type: type\n        },\n        className: 'ada-boundary-polygon'\n      });\n      return polygon;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/async-booking-operation\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/api-urls\"], function (_exports, _emberConcurrency, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const BOOKING_HOST = _apiUrls.API.bookingService.host;\n  const TIMEOUT_DELAY = 1000; // 1 seconds tries\n\n  var _default = Ember.Mixin.create({\n    /**\n     * @param booking,\n     * @param operation -> 'import or 'export'\n     * @param options -> { operationData, outputResult }\n     */\n    createBookingAsyncOperation: (0, _emberConcurrency.task)(function* (booking, operationType, options) {\n      const session = this.get('session');\n      const isPrimaryBookingType = operationType === 'primaryBooking';\n      const op = {\n        'data': {\n          'type': 'bookingAsyncOperation',\n          'attributes': {\n            'operationType': operationType\n          },\n          'relationships': {\n            'booking': {\n              'data': {\n                'type': 'booking',\n                'id': isPrimaryBookingType ? booking.data.attributes.temporaryBookingId : booking.get('id')\n              }\n            }\n          }\n        }\n      };\n      const {\n        operationData,\n        outputResult\n      } = options || {};\n\n      if (operationData) {\n        op.data.attributes.operationData = operationData;\n      }\n\n      const job = yield this.get('ajax').post(BOOKING_HOST + '/booking-async-operation', {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: op\n      });\n      if (!job) return false;\n      return yield this.get('asyncBookingOperationState').perform(job, outputResult);\n    }).enqueue(),\n    createTripsBookingAsyncOperation: (0, _emberConcurrency.task)(function* (payload, operationType, options) {\n      const session = this.get('session');\n      const {\n        outputResult\n      } = options || {};\n      const job = yield this.get('ajax').post(BOOKING_HOST + '/booking-async-operation', {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: payload\n      });\n      if (!job) return false;\n      return yield this.get('asyncBookingOperationState').perform(job, outputResult);\n    }).enqueue(),\n\n    /**\n     * @param outputResult => boolean\n     */\n    asyncBookingOperationState: (0, _emberConcurrency.task)(function* (job, outputResult) {\n      const session = this.get('session');\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure') {\n        yield (0, _emberConcurrency.timeout)(TIMEOUT_DELAY);\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          job = yield this.get('ajax').request(BOOKING_HOST + '/booking-async-operation/' + job.data.id, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      const isJobSuccess = job.data.attributes.state === 'success';\n\n      if (outputResult) {\n        return { ...job.data.attributes,\n          isJobSuccess\n        };\n      }\n\n      return isJobSuccess;\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/async-initiation-operation\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/api-urls\", \"lodash\"], function (_exports, _emberConcurrency, _apiUrls, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const initiationHost = _apiUrls.API.initiationService.host;\n  const TIMEOUT_DELAY = 3000; // 3 seconds tries\n\n  var _default = Ember.Mixin.create({\n    timeout: TIMEOUT_DELAY,\n\n    init() {\n      this._super(...arguments);\n\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      (true && !(Ember.isPresent(ajax)) && Ember.assert('mixin requires components, routes, controllers to provide a ajax service', Ember.isPresent(ajax)));\n      (true && !(Ember.isPresent(session)) && Ember.assert('mixin requires components, routes, controllers to provide a session service', Ember.isPresent(session)));\n    },\n\n    /**\n     * @param schedule,\n     * @param notificationType -> 'advanceTripReminders'\n     * @param options -> { outputResult }\n     */\n    createInitiationAsyncOperation: (0, _emberConcurrency.task)(function* (scheduleDate, riderId, template, notificationType, tags, options) {\n      const session = this.get('session');\n      const op = {\n        'data': {\n          'type': 'initiationAsyncOperation',\n          'attributes': {\n            'operationType': 'manualInitiation',\n            'payload': {\n              'data': {\n                'type': 'manualInitiation',\n                'attributes': {\n                  'notificationType': notificationType\n                }\n              }\n            }\n          }\n        }\n      };\n\n      if (_lodash.default.size(tags) > 0) {\n        op.data.attributes.payload.data.attributes.tags = tags;\n      }\n\n      if (notificationType === 'advanceTripReminders' || notificationType === 'advanceTripRemindersGroupedByTextToSpeech') {\n        op.data.attributes.payload.data.attributes.tripDate = scheduleDate;\n      } else if (notificationType === 'smsToClient') {\n        op.data.attributes.payload.data.attributes.riderId = riderId;\n        op.data.attributes.payload.data.attributes.template = template;\n      }\n\n      const {\n        outputResult\n      } = options || {};\n      const job = yield this.get('ajax').post(initiationHost + '/initiation-async-operation', {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: op\n      });\n      if (!job) return false;\n      return yield this.get('asyncOperationState').perform(job, outputResult);\n    }).enqueue(),\n\n    /**\n     * @param outputResult => boolean\n     */\n    asyncOperationState: (0, _emberConcurrency.task)(function* (job, outputResult) {\n      const session = this.get('session');\n      const workspace = this.get('workspace');\n      if (job.data.attributes.progress && workspace) workspace.set('progressValue', job.data.attributes.progress);\n      if (job.data.attributes.operationType && workspace) workspace.set('operationType', job.data.attributes.operationType);\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure') {\n        const delay = this.get('timeout');\n        yield (0, _emberConcurrency.timeout)(delay);\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          job = yield this.get('ajax').request(initiationHost + '/initiation-async-operation/' + job.data.id, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n          if (job.data.attributes.progress && workspace) workspace.set('progressValue', job.data.attributes.progress);\n          if (job.data.attributes.operationType && workspace) workspace.set('operationType', job.data.attributes.operationType);\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      const isJobSuccess = job.data.attributes.state === 'success';\n      const jsonData = job.data;\n\n      if (outputResult) {\n        return { ...job.data.attributes,\n          jsonData,\n          isJobSuccess\n        };\n      }\n\n      return isJobSuccess;\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/async-schedule-operation\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/api-urls\"], function (_exports, _emberConcurrency, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const scheduleHost = _apiUrls.API.schedulingService.host;\n  const TIMEOUT_DELAY = 2000; // 2 seconds tries\n\n  var _default = Ember.Mixin.create({\n    timeout: TIMEOUT_DELAY,\n\n    init() {\n      this._super(...arguments);\n\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      (true && !(Ember.isPresent(ajax)) && Ember.assert('mixin requires components, routes, controllers to provide a ajax service', Ember.isPresent(ajax)));\n      (true && !(Ember.isPresent(session)) && Ember.assert('mixin requires components, routes, controllers to provide a session service', Ember.isPresent(session)));\n    },\n\n    /**\n     * @param schedule,\n     * @param operation -> 'import or 'export'\n     * @param options -> { operationData, outputResult }\n     */\n    createScheduleAsyncOperation: (0, _emberConcurrency.task)(function* (schedule, operation, options) {\n      const session = this.get('session');\n      const op = {\n        'data': {\n          'type': 'scheduleAsyncOperation',\n          'attributes': {\n            'operationType': operation\n          },\n          'relationships': {\n            'schedule': {\n              'data': {\n                'type': 'schedule',\n                'id': schedule.get('id')\n              }\n            }\n          }\n        }\n      };\n      const {\n        operationData,\n        outputResult\n      } = options || {};\n\n      if (operationData) {\n        op.data.attributes.operationData = operationData;\n      }\n\n      const job = yield this.get('ajax').post(scheduleHost + '/schedule-async-operation', {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: op\n      });\n      if (!job) return false;\n      return yield this.get('asyncOperationState').perform(job, outputResult);\n    }).enqueue(),\n    pollScheduleOperationState: (0, _emberConcurrency.task)(function* (schedule) {\n      const scheduleId = schedule.get('id');\n      const session = this.get('session');\n      const filter = `filter=and(or(eq(operationType,export),eq(operationType,generate)),eq(scheduleId,${scheduleId}),ne(state,rejected))`;\n      const jobs = yield this.get('ajax').request(scheduleHost + `/schedule-async-operation/?sort=id&${filter}`, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n      if (!jobs && !jobs.data.length) return false;\n      const job = jobs.data[jobs.data.length - 1];\n      if (!job) return false;\n      const data = {\n        data: {\n          id: job.id,\n          attributes: job.attributes,\n          relationships: job.relationships\n        }\n      };\n      return yield this.get('asyncOperationState').perform(data, true);\n    }).enqueue(),\n\n    /**\n     * @param outputResult => boolean\n     */\n    asyncOperationState: (0, _emberConcurrency.task)(function* (job, outputResult) {\n      const session = this.get('session');\n      const workspace = this.get('workspace');\n      if (job.data.attributes.progress && workspace) workspace.set('progressValue', job.data.attributes.progress);\n      if (job.data.attributes.operationType && workspace) workspace.set('operationType', job.data.attributes.operationType);\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure') {\n        const delay = this.get('timeout');\n        yield (0, _emberConcurrency.timeout)(delay);\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          job = yield this.get('ajax').request(scheduleHost + '/schedule-async-operation/' + job.data.id, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n          if (job.data.attributes.progress && workspace) workspace.set('progressValue', job.data.attributes.progress);\n          if (job.data.attributes.operationType && workspace) workspace.set('operationType', job.data.attributes.operationType);\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      const isJobSuccess = job.data.attributes.state === 'success';\n      const jsonData = job.data;\n\n      if (outputResult) {\n        return { ...job.data.attributes,\n          jsonData,\n          isJobSuccess\n        };\n      }\n\n      return isJobSuccess;\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/disable-record\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    isDisabled: Ember.computed('status', function () {\n      const status = this.get('status');\n\n      if (status) {\n        switch (status.toUpperCase()) {\n          case 'ACTIVE':\n            return false;\n\n          case 'PENDING':\n            return false;\n\n          default:\n            return true;\n        }\n      }\n\n      return true;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/fetch-vehicle-events\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/geolib\", \"moment\"], function (_exports, _emberConcurrency, _geolib, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const maxLenght = 4000; // max response value\n\n  var _default = Ember.Mixin.create({\n    session: Ember.inject.service(),\n    radiusOptions: Ember.computed(function () {\n      const options = [];\n\n      for (let i = 1; i <= 10; i++) {\n        options.push({\n          id: i,\n          value: i,\n          title: i + (i === 1 ? ' mile' : ' miles')\n        });\n      }\n\n      return options;\n    }),\n    fetchVehiclesTask: (0, _emberConcurrency.task)(function* () {\n      const selectedProvider = this.get('selectedProvider');\n\n      if (selectedProvider !== null) {\n        const queryOptions = {\n          provider: selectedProvider.id\n        };\n        const vehicles = yield this.get('store').query('playback-vehicle', queryOptions);\n\n        if (!vehicles || !vehicles.length) {\n          this.set('vehicles', []);\n          return;\n        }\n\n        this.set('vehicles', vehicles.sortBy('vehicleId'));\n      } else {\n        const userProviders = this.get('session.data.authenticated.tokenInfo.providerNames') || [];\n        const vehicles = yield this.get('store').query('playback-vehicle', {});\n\n        if (!vehicles || !vehicles.length) {\n          this.set('vehicles', []);\n          return;\n        }\n\n        if (userProviders[0] === 'ALL') {\n          this.set('vehicles', vehicles.sortBy('vehicleId'));\n        } else if (userProviders && userProviders.length > 0) {\n          const filteredVehicles = vehicles.filter(data => {\n            return userProviders.includes(data.provider);\n          });\n          this.set('vehicles', filteredVehicles.sortBy('vehicleId'));\n        }\n      }\n    }),\n    fetchRoutesTask: (0, _emberConcurrency.task)(function* () {\n      const selectedProvider = this.get('selectedProvider');\n\n      if (selectedProvider !== null) {\n        const queryOptions = {\n          provider: selectedProvider.id\n        };\n        const routes = yield this.get('store').query('playback-route', queryOptions);\n\n        if (!routes || !routes.length) {\n          this.set('routes', []);\n          return;\n        }\n\n        this.set('routes', routes.sortBy('routeId'));\n      } else {\n        const userProviders = this.get('session.data.authenticated.tokenInfo.providerNames') || [];\n        const routes = yield this.get('store').query('playback-route', {});\n\n        if (!routes || !routes.length) {\n          this.set('routes', []);\n          return;\n        }\n\n        if (userProviders[0] === 'ALL') {\n          this.set('routes', routes.sortBy('routeId'));\n        } else if (userProviders && userProviders.length > 0) {\n          const filteredRoutes = routes.filter(data => {\n            return userProviders.includes(data.provider);\n          });\n          this.set('routes', filteredRoutes.sortBy('routeId'));\n        }\n      }\n    }),\n    fetchDriversTask: (0, _emberConcurrency.task)(function* () {\n      const selectedProvider = this.get('selectedProvider');\n\n      if (selectedProvider !== null) {\n        const providerId = selectedProvider.id;\n        const queryOptions = {\n          provider: providerId\n        };\n        const drivers = yield this.get('store').query('playback-driver', queryOptions);\n\n        if (!drivers || !drivers.length) {\n          this.set('drivers', []);\n          return;\n        }\n\n        this.set('drivers', drivers.sortBy('driverId'));\n      } else {\n        const userProviders = this.get('session.data.authenticated.tokenInfo.providerNames') || [];\n        const drivers = yield this.get('store').query('playback-driver', {});\n\n        if (!drivers || !drivers.length) {\n          this.set('drivers', []);\n          return;\n        }\n\n        if (userProviders[0] === 'ALL') {\n          this.set('drivers', drivers.sortBy('driverId'));\n        } else if (userProviders && userProviders.length > 0) {\n          const filteredDrivers = drivers.filter(data => {\n            return userProviders.includes(data.provider);\n          });\n          this.set('drivers', filteredDrivers.sortBy('driverId'));\n        }\n      }\n    }),\n    fetchRadiusVehiclesTask: (0, _emberConcurrency.task)(function* () {\n      const selectedDateTimeRage = this.get('selectedDateTimeRage');\n      const selectedAddress = this.get('selectedAddress');\n      const selectedRadius = this.get('selectedRadius');\n      const queryOptions = {\n        lat: selectedAddress.lat,\n        lng: selectedAddress.lng,\n        radius: selectedRadius.value,\n        startTime: selectedDateTimeRage.starttime,\n        endTime: selectedDateTimeRage.endtime\n      };\n      const radiusVehicles = yield this.get('store').query('avlm-vehicle-radius', queryOptions);\n      radiusVehicles.forEach(event => {\n        event.set('lat', event.get('lat') ? Number(event.get('lat')).toFixed(6) : event.get('lat'));\n        event.set('lng', event.get('lng') ? Number(event.get('lng')).toFixed(6) : event.get('lng'));\n      });\n\n      if (!radiusVehicles || !radiusVehicles.length) {\n        this.set('radiusVehicles', []);\n        return;\n      } else if (radiusVehicles.length > maxLenght) {\n        this.set('radiusVehicles', []);\n        this.set('tooLargeData', 'tooLargeData');\n      } else {\n        this.set('radiusVehicles', radiusVehicles.sortBy('vehicleId'));\n      }\n    }).restartable(),\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      this.set('durationInSeconds', null);\n      this.set('totolTimeInSeconds', null);\n      this.set('bufferSize', 200);\n      const selectedVehicle = this.get('selectedVehicle');\n      const selectedRoute = this.get('selectedRoute');\n      const selectedDriver = this.get('selectedDriver');\n      const selectedRadiusVehicle = this.get('selectedRadiusVehicle');\n      const selectedDateTimeRage = this.get('selectedDateTimeRage');\n      const activeTabModeId = this.get('activeTabModeId');\n      if (Ember.isNone(selectedVehicle) && Ember.isNone(selectedRadiusVehicle)) return;\n      yield this.get('store').unloadAll('avlm-vehicle-event');\n      const vehicleId = activeTabModeId === 'byVehicle' ? selectedVehicle.id : selectedRadiusVehicle.vehicleId;\n      const routeId = selectedRoute === null ? '' : selectedRoute.name;\n      const driverId = selectedDriver === null ? '' : selectedDriver.id;\n      const queryOptions = {\n        routeIds: routeId,\n        // Added according to NYAAR-9664\n        driverIds: driverId,\n        // Added according to NYAAR-9664\n        vehicle: vehicleId,\n        startTime: selectedDateTimeRage.starttime,\n        endTime: selectedDateTimeRage.endtime\n      };\n      const events = yield this.get('store').query('avlm-vehicle-event', queryOptions);\n      events.forEach(event => {\n        event.set('isChecked', true);\n        event.set('lat', event.get('lat') ? Number(event.get('lat')).toFixed(6) : event.get('lat'));\n        event.set('lng', event.get('lng') ? Number(event.get('lng')).toFixed(6) : event.get('lng'));\n      });\n\n      if (events.length > maxLenght) {\n        this.set('tooLargeData', 'tooLargeData');\n      } else {\n        this.set('tooLargeData', '');\n        this.set('vehicleEvents', events.sortBy('timestamp').toArray());\n      }\n    }).restartable(),\n    fetchPolylineTask: (0, _emberConcurrency.task)(function* () {\n      const route = yield this.get('store').peekRecord('avlm-route', this.get('selectedRoute.model.id')); // route is layerRecords.\n\n      const events = [];\n      const stopPoints = route.get('orderedStopsWithGaragesAndBreaks');\n      let timebase;\n      stopPoints.forEach(stopPoint => {\n        const points = stopPoint.get('polylinePoints');\n        const start = stopPoint.get('tripStartTime');\n        const end = stopPoint.get('tripEndTime');\n\n        if (!timebase) {\n          timebase = start;\n        }\n\n        if (points && points.length > 0) {\n          const totalDistance = _geolib.default.computePolylineLength(points);\n\n          const diff = (0, _moment.default)(end).unix() - (0, _moment.default)(start).unix();\n          points.forEach((point, i) => {\n            const travelPoints = points.slice(0, i + 1);\n\n            const travelDistance = _geolib.default.computePolylineLength(travelPoints);\n\n            const seconds = diff * travelDistance / totalDistance;\n            const timestamp = (0, _moment.default)(timebase).add(seconds, 'seconds').format();\n            const event = this.get('store').createRecord('avlm-vehicle-event', {\n              lat: point[0],\n              lng: point[1],\n              timestamp,\n              vehicleId: route.get('latestVehicle.id'),\n              isChecked: true\n            });\n            events.push(event);\n          }); // continue to next stopPoints.\n\n          timebase = (0, _moment.default)(timebase).add(diff, 'seconds').format();\n        }\n      });\n      this.set('vehicleEvents', events);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/fetchAssignableVehicleDrivers\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/vehicleCapacity\", \"adept-iq/config/mapped-permIds\", \"adept-iq/mixins/version-check\", \"adept-iq/config/api-urls\", \"adept-iq/config/environment\", \"lodash\", \"moment\"], function (_exports, _emberConcurrency, _unwrapProxy, _vehicleCapacity, _mappedPermIds, _versionCheck, _apiUrls, _environment, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DATE_FORMAT = 'YYYY-MM-DD';\n\n  var _default = Ember.Mixin.create(_versionCheck.default, {\n    permissionLayer: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    disptachSchedule: Ember.computed.readOnly('record.dispatchRoute.dispatchSchedule'),\n    isScheduleDashboard: Ember.computed.readOnly('workspace.isScheduleDashboard'),\n    resetVehicles: Ember.observer('plannedStartTime', 'plannedEndTime', 'provider', 'usePlaceHolderTask', function () {\n      if (this.get('usePlaceHolderTask')) {\n        return this.get('fetchPlaceHolderVehiclesTask').perform();\n      }\n\n      return this.get('fetchVehiclesTask').perform();\n    }),\n    resetDrivers: Ember.observer('plannedStartTime', 'plannedEndTime', 'provider', function () {\n      if (!this.get('isScheduleDashboard')) {\n        return this.get('fetchDriversTask').perform();\n      }\n\n      if (this.get('isScheduleDashboard')) {\n        return this.get('fetchScheduleDriversTask').perform();\n      }\n    }),\n    fetchNonPlaceholderVehiclesToVariableTask: (0, _emberConcurrency.task)(function* () {\n      let vehicles = this.get('store').peekAll('vehicle');\n      const filterVehiclesByHoliday = this.get('filterVehiclesByHoliday');\n\n      if (!vehicles || vehicles.length <= 1) {\n        vehicles = yield this.get('store').query('vehicle', {\n          useVehicleService: true\n        });\n      }\n\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('provider'));\n      const plannedStart = (0, _moment.default)(this.get('plannedStartTime'));\n      const plannedEnd = (0, _moment.default)(this.get('plannedEndTime'));\n      const assignVehicleOverCapacityPerm = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.assignVehicleOverCapacity, null);\n      const dpScheduleId = this.get('dispatchRoute.dispatchSchedule.id') || this.get('record.dispatchSchedule.id') || this.get('selectedSchedule.dispatchSchedule.id');\n      if (!vehicles || !vehicles.length) return []; // make sure vehicles are active and stay in the same provider as route\n\n      if (provider) {\n        vehicles = vehicles.filter(vehicle => {\n          return vehicle.get('active') && vehicle.get('displayStatus') !== 'Breakdown' && provider.get('id') === vehicle.get('provider.id');\n        });\n      } // make sure any existing route->vehicle assignments in dispatch domain\n      // do not intersect with destination route's planned window;\n\n\n      vehicles = vehicles.filter(vehicle => {\n        // data coming from vehicleWidget\n        if (vehicle.get('displayStatus') === 'Breakdown') return false;\n        if (vehicle.get('isCompleted')) return true;\n        let rvdHistory = vehicle.get('rvdHistory') ? Object.values(vehicle.get('rvdHistory')) : [];\n        let isAvailable = true;\n        rvdHistory = rvdHistory.filter(rvd => rvd.dpScheduleId === dpScheduleId && !rvd.isCompleted);\n        rvdHistory.forEach(rvd => {\n          const startMoment = (0, _moment.default)(rvd.startTime);\n          const endMoment = (0, _moment.default)(rvd.endTime);\n\n          if (startMoment.isBetween(plannedStart, plannedEnd, null, '[)') || endMoment.isBetween(plannedStart, plannedEnd, null, '(]') || plannedStart.isBetween(startMoment, endMoment, null, '[)') || plannedEnd.isBetween(startMoment, endMoment, null, '(]')) {\n            isAvailable = false;\n          }\n        });\n        return isAvailable;\n      }); // availability is disabled we should still filter for valid vehicles to execute a route\n\n      const tnVehicleCapacityItinerary = this.get('dispatchRoute.tnVehicleCapacityItinerary'); // show vehicles that does not have enough capacity if user have permission\n\n      if (!assignVehicleOverCapacityPerm && Ember.isPresent(tnVehicleCapacityItinerary)) {\n        vehicles = vehicles.filter(function (vehicle) {\n          const capacityCounts = vehicle.get('capacityCounts');\n          return tnVehicleCapacityItinerary.every(travelNeedCounts => !(0, _vehicleCapacity.notEnoughCapacity)(travelNeedCounts, capacityCounts));\n        });\n      } // filter unneeded placeholder vehicles\n\n\n      vehicles = vehicles.filter(vehicle => !vehicle.get('placeholder'));\n\n      if (filterVehiclesByHoliday) {\n        vehicles = yield this.filterDriverAndVehicleByHolidayAvailability(vehicles, 'vehicle-availability', 'vehicleId');\n      }\n\n      this.set('nonPlaceholderVehicles', vehicles);\n    }),\n    fetchVehiclesTask: (0, _emberConcurrency.task)(function* () {\n      yield this.fetchNonPlaceholderVehiclesToVariableTask.perform();\n      this.set('vehicles', this.get('nonPlaceholderVehicles').sortBy('name'));\n    }),\n    fetchPlaceHolderVehiclesToVariableTask: (0, _emberConcurrency.task)(function* () {\n      const provider = this.get('provider');\n      let vehicles = this.get('store').peekAll('vehicle');\n\n      if (!vehicles || vehicles.length <= 1) {\n        vehicles = yield this.get('store').query('vehicle', {\n          useVehicleService: true\n        });\n      }\n\n      if (provider) {\n        vehicles = vehicles.filter(vehicle => vehicle.get('provider.id') === provider.get('id'));\n      }\n\n      const placeholderVehicles = vehicles.filterBy('placeholder', true);\n      this.set('placeholderVehicles', placeholderVehicles);\n    }),\n    fetchPlaceHolderVehiclesTask: (0, _emberConcurrency.task)(function* () {\n      yield this.fetchPlaceHolderVehiclesToVariableTask.perform();\n      this.set('vehicles', this.get('placeholderVehicles').sortBy('name'));\n    }),\n    fetchDispachAssignableVehiclesTask: (0, _emberConcurrency.task)(function* () {\n      yield this.fetchNonPlaceholderVehiclesToVariableTask.perform();\n      yield this.fetchPlaceHolderVehiclesToVariableTask.perform();\n      this.set('vehicles', (0, _lodash.concat)(this.get('nonPlaceholderVehicles'), this.get('placeholderVehicles')).sortBy('name'));\n    }),\n    fetchAssignableVehiclesTask: (0, _emberConcurrency.task)(function* () {\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      const schedules = this.get('store').peekAll('schedule');\n      const plannedStart = (0, _moment.default)(this.get('plannedStartTime'));\n      const plannedEnd = (0, _moment.default)(this.get('plannedEndTime'));\n      const plannedStartFormat = plannedStart.format();\n      const plannedEndFormat = plannedEnd.format();\n      const provider = this.get('provider');\n      const selectedVehicle = this.get('selectedVehicle');\n      let vehicles = this.get('store').peekAll('vehicle');\n\n      if (!vehicles || vehicles.length <= 1) {\n        vehicles = yield this.get('store').query('vehicle', {\n          useVehicleService: true\n        });\n      } // filter out vehicles that are for a different provider\n\n\n      if (provider) {\n        vehicles = vehicles.filter(vehicle => vehicle.get('provider.id') === provider.get('id'));\n      }\n\n      const placeHolderVehicles = vehicles.filterBy('placeholder', true);\n      let nonPlaceHolderVehicles = vehicles.filterBy('placeholder', false);\n      const startDate = (0, _moment.default)(plannedStart).format(DATE_FORMAT);\n      const holidayDates = this.getHolidayDates();\n      const isHoliday = holidayDates.some(holiday => (0, _moment.default)(holiday).isSame(startDate));\n      const dayOfWeekOrHoliday = isHoliday ? 'holiday' : plannedStart.format('dddd').toLowerCase();\n      const availabilities = yield this.get('store').query('vehicle-availability', {});\n      const availabilityMap = (0, _lodash.groupBy)(availabilities.toArray(), 'vehicleId'); // filter out vehicles that are not available for this route\n\n      nonPlaceHolderVehicles = nonPlaceHolderVehicles.filter(vehicle => {\n        const availabilityList = availabilityMap[vehicle.get('id')] || [];\n        return availabilityList.some(vehicleAvailability => {\n          const availableForDay = vehicleAvailability.get(dayOfWeekOrHoliday);\n\n          if (!availableForDay) {\n            return false;\n          }\n\n          const availabilityStartMoment = (0, _moment.default)(vehicleAvailability.get('startTime'));\n          const availabilityEndMoment = (0, _moment.default)(vehicleAvailability.get('endTime'));\n          const availableAtTime = !availabilityStartMoment.isBetween(plannedStart, plannedEnd, 'minute', '(]') && !availabilityEndMoment.isBetween(plannedStart, plannedEnd, 'minute', '[)') && plannedStart.isBetween(availabilityStartMoment, availabilityEndMoment, 'minute', '[)') && plannedEnd.isBetween(availabilityStartMoment, availabilityEndMoment, 'minute', '(]');\n\n          if (!availableAtTime) {\n            return false;\n          }\n\n          const shiftStartTime = (0, _moment.default)(vehicleAvailability.formattedShiftStart, _environment.default.dateTimeFormat.timeMoment);\n\n          if (!vehicleAvailability.routeLength) {\n            return false;\n          }\n\n          const shiftLength = vehicleAvailability.routeLength.split(':');\n\n          if (!shiftLength || shiftLength.length !== 2) {\n            return false;\n          }\n\n          const shiftHour = shiftLength[0];\n          const shiftMinute = shiftLength[1];\n          const vehicleShiftStartTime = plannedStart.clone().set({\n            h: shiftStartTime.hour(),\n            m: shiftStartTime.minute()\n          });\n          const vehicleShiftEndTime = vehicleShiftStartTime.clone().add(shiftHour, 'hour').add(shiftMinute, 'minute');\n          const isShiftMatches = parseInt(shiftHour, 10) >= 24 || plannedStart.isBetween(vehicleShiftStartTime, vehicleShiftEndTime, 'minute', '[]') && plannedEnd.isBetween(vehicleShiftStartTime, vehicleShiftEndTime, 'minute', '[]');\n\n          if (!isShiftMatches) {\n            return false;\n          }\n\n          return true;\n        });\n      });\n\n      if (provider) {\n        const excludedVehicleIds = [];\n        const queryParams = `and(ne(vehicleId,null),eq(providerName,${provider.get('id')}),or(and(ge(plannedStartTime,'${plannedStartFormat}'),le(plannedEndTime,'${plannedEndFormat}')),and(le(plannedStartTime,'${plannedStartFormat}'),ge(plannedEndTime,'${plannedStartFormat}')),and(le(plannedStartTime,'${plannedEndFormat}'),ge(plannedEndTime,'${plannedEndFormat}'))))`;\n        const excludedRoutes = yield ajax.request(_apiUrls.API.schedulingService.host + `/route?filter=${queryParams}`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n        excludedRoutes.data.forEach(excludedRoute => {\n          let scheduleId = 0;\n          let vehicleId = 0;\n\n          if (Ember.isPresent(excludedRoute.relationships)) {\n            if (Ember.isPresent(excludedRoute.relationships.schedule) && Ember.isPresent(excludedRoute.relationships.schedule.data)) {\n              scheduleId = excludedRoute.relationships.schedule.data.id;\n            }\n\n            if (Ember.isPresent(excludedRoute.relationships.vehicle) && Ember.isPresent(excludedRoute.relationships.vehicle.data)) {\n              vehicleId = excludedRoute.relationships.vehicle.data.id;\n            }\n          }\n\n          const aPrimarySchedule = schedules.find(schedule => schedule.get('id') === scheduleId); // exclude booking schedule from filters\n\n          if (Ember.isPresent(aPrimarySchedule)) {\n            excludedVehicleIds.push(vehicleId);\n          }\n        }); // Remove vehicles assigned to routes that overlap this route\n\n        nonPlaceHolderVehicles = nonPlaceHolderVehicles.filter(vehicle => {\n          const currVehicleId = vehicle.get('id');\n\n          if (selectedVehicle) {\n            return !excludedVehicleIds.includes(currVehicleId) || selectedVehicle.get('id') === currVehicleId;\n          }\n\n          return !excludedVehicleIds.includes(currVehicleId);\n        });\n      }\n\n      this.set('vehicles', (0, _lodash.concat)(placeHolderVehicles, nonPlaceHolderVehicles).sortBy('name'));\n    }),\n    fetchDriversTask: (0, _emberConcurrency.task)(function* () {\n      let drivers = this.get('store').peekAll('driver');\n      const filterDriversByHoliday = this.get('filterDriversByHoliday');\n      const filterDriversByShiftTime = this.get('filterDriversByShiftTime');\n\n      if (!drivers || drivers.length <= 1) {\n        drivers = yield this.get('store').query('driver');\n      }\n\n      const dispatchRouteId = this.get('dispatchRoute.id');\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('provider'));\n      const plannedStart = (0, _moment.default)(this.get('plannedStartTime'));\n      const plannedEnd = (0, _moment.default)(this.get('plannedEndTime'));\n      const dpScheduleId = this.get('dispatchRoute.dispatchSchedule.id') || this.get('record.dispatchSchedule.id') || this.get('selectedSchedule.dispatchSchedule.id');\n      if (!drivers || !drivers.length) return []; // make sure vehicles are active and stay in the same provider as route\n\n      if (provider) {\n        drivers = drivers.filter(driver => {\n          return driver.get('active') && provider.get('id') === driver.get('provider.id');\n        });\n      } // make sure any existing route->vehicle assignments in dispatch domain\n      // do not intersect with destination route's planned window;\n\n\n      drivers = drivers.filter(driver => {\n        // data coming from driverWidget\n        if (driver.get('isCompleted')) return true;\n        let rvdHistory = driver.get('rvdHistory') ? Object.values(driver.get('rvdHistory')) : [];\n        let isAvailable = true;\n\n        if (Ember.isPresent(dispatchRouteId)) {\n          // accessed by Assigned vehicle driver\n          rvdHistory = rvdHistory.filter(rvd => rvd.dpScheduleId === dpScheduleId && !rvd.isCompleted);\n        } else {\n          // access by add new route in dispatch workspace.Route dispatch does not exist yet.\n          rvdHistory = rvdHistory.filter(rvd => !rvd.isCompleted);\n        }\n\n        rvdHistory.forEach(rvd => {\n          const startMoment = (0, _moment.default)(rvd.startTime);\n          const endMoment = (0, _moment.default)(rvd.endTime);\n\n          if (startMoment.isBetween(plannedStart, plannedEnd, null, '[)') || endMoment.isBetween(plannedStart, plannedEnd, null, '(]') || plannedStart.isBetween(startMoment, endMoment, null, '[)') || plannedEnd.isBetween(startMoment, endMoment, null, '(]')) {\n            isAvailable = false;\n          }\n        });\n        return isAvailable;\n      });\n\n      if (filterDriversByHoliday) {\n        drivers = yield this.filterDriverAndVehicleByHolidayAvailability(drivers, 'driver-availability', 'driverId');\n      }\n\n      if (filterDriversByShiftTime) {\n        drivers = yield this.filterDriversByShitTimeAvailability(drivers, plannedStart, plannedEnd);\n      }\n\n      this.set('drivers', drivers.sortBy('badgeNumber'));\n    }),\n    fetchScheduleDriversTask: (0, _emberConcurrency.task)(function* () {\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      const excludedDriverIds = [];\n      const schedules = this.get('store').peekAll('schedule');\n      let drivers = this.get('store').peekAll('driver');\n      let excludedRoutes = [];\n      const filterDriversByHoliday = this.get('filterDriversByHoliday');\n      const filterDriversByShiftTime = this.get('filterDriversByShiftTime');\n\n      if (!drivers || drivers.length <= 1) {\n        drivers = yield this.get('store').query('driver');\n      }\n\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('provider'));\n      const plannedStart = (0, _moment.default)(this.get('plannedStartTime'));\n      const plannedEnd = (0, _moment.default)(this.get('plannedEndTime'));\n      const plannedStartFormat = plannedStart.format();\n      const plannedEndFormat = plannedEnd.format();\n      if (!drivers || !drivers.length) return [];\n\n      if (Ember.isPresent(provider)) {\n        const queryParams = `and(ne(driverId,null),eq(providerName,${provider.get('id')}),or(and(ge(plannedStartTime,'${plannedStartFormat}'),le(plannedEndTime,'${plannedEndFormat}')),and(le(plannedStartTime,'${plannedStartFormat}'),ge(plannedEndTime,'${plannedStartFormat}')),and(le(plannedStartTime,'${plannedEndFormat}'),ge(plannedEndTime,'${plannedEndFormat}'))))`;\n        excludedRoutes = yield ajax.request(_apiUrls.API.schedulingService.host + `/route?filter=${queryParams}`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n        excludedRoutes.data.forEach(excludedRoute => {\n          let scheduleId = 0;\n          let driverId = 0;\n\n          if (Ember.isPresent(excludedRoute.relationships)) {\n            if (Ember.isPresent(excludedRoute.relationships.schedule) && Ember.isPresent(excludedRoute.relationships.schedule.data)) {\n              scheduleId = excludedRoute.relationships.schedule.data.id;\n            }\n\n            if (Ember.isPresent(excludedRoute.relationships.driver) && Ember.isPresent(excludedRoute.relationships.driver.data)) {\n              driverId = excludedRoute.relationships.driver.data.id;\n            }\n          }\n\n          const aPrimarySchedule = schedules.find(schedule => schedule.get('id') === scheduleId); // exclude booking schedule from filters\n\n          if (Ember.isPresent(aPrimarySchedule)) {\n            excludedDriverIds.push(driverId);\n          }\n        });\n      } // make sure vehicles are active and stay in the same provider as route\n\n\n      if (provider) {\n        drivers = drivers.filter(driver => {\n          return driver.get('active') && provider.get('id') === driver.get('provider.id') && !excludedDriverIds.includes(driver.get('id'));\n        });\n      }\n\n      if (filterDriversByHoliday) {\n        drivers = yield this.filterDriverAndVehicleByHolidayAvailability(drivers, 'driver-availability', 'driverId');\n      }\n\n      if (filterDriversByShiftTime) {\n        drivers = yield this.filterDriversByShitTimeAvailability(drivers, plannedStart, plannedEnd);\n      }\n\n      this.set('drivers', drivers.sortBy('badgeNumber'));\n    }),\n\n    /**\n     * In dispatch workspace  routes are holidays routes then we should filter the vehicles and drivers by holiday availabities\n     * @param records\n     * @param availabilityModel\n     * @param groupByKey\n     * @returns {Promise<*>}\n     */\n    async filterDriverAndVehicleByHolidayAvailability(records, availabilityModel, groupByKey) {\n      const startDate = (0, _moment.default)(this.get('workspace.startDate')).format(DATE_FORMAT);\n      const holidayDates = this.getHolidayDates();\n      const isHoliday = holidayDates.some(holiday => (0, _moment.default)(holiday).isSame(startDate));\n      if (!isHoliday) return records;\n      const availabilities = await this.get('store').query(availabilityModel, {});\n      const availabilityMap = (0, _lodash.groupBy)(availabilities.toArray(), groupByKey);\n\n      if (availabilityModel === 'driver-availability' && groupByKey === 'driverId') {\n        //Save the driverAvailabilityMap for further uses\n        this.set('driverAvailabilityMap', availabilityMap);\n      }\n\n      return records.filter(record => {\n        const availabilityList = availabilityMap[record.get('id')] || [];\n        return availabilityList.some(vehicleAvailability => vehicleAvailability.get('holiday'));\n      });\n    },\n\n    getHolidayDates() {\n      const csConfigItems = this.get('store').peekAll('cs-config-item').filter(csItem => csItem.get('category') === 'config-System_Configuration-holidays');\n      const holidayDates = csConfigItems.filter(cs => Ember.isPresent(cs.value.date || cs.value.Date)).map(csConfigItem => {\n        const dateString = csConfigItem.value.date || csConfigItem.value.Date;\n        const momentDate = (0, _moment.default)();\n        const dates = dateString.split('/');\n        const month = parseInt(dates[0], 10);\n        const date = parseInt(dates[1], 10);\n        momentDate.set('month', month - 1);\n        momentDate.set('date', date);\n        return momentDate.format(DATE_FORMAT);\n      });\n      return holidayDates;\n    },\n\n    /**\n     * We should filter the drivers by their shiftTime availabilities\n     * @param records\n     * @param plannedStart\n     * @param plannedEnd\n     * @returns {Promise<*>}\n     */\n    async filterDriversByShitTimeAvailability(records, plannedStart, plannedEnd) {\n      let driverAvailabilityMap = this.get('driverAvailabilityMap');\n\n      if ((0, _lodash.isEmpty)(driverAvailabilityMap)) {\n        const availabilities = await this.get('store').query('driver-availability', {});\n        driverAvailabilityMap = (0, _lodash.groupBy)(availabilities.toArray(), 'driverId');\n      }\n\n      return records.filter(record => {\n        const rvdDayOfWeek = plannedStart.format('dddd').toLowerCase();\n        const availabilityList = driverAvailabilityMap[record.get('id')] || [];\n        return availabilityList.some(availability => {\n          const driverStartMoment = availability.startTime;\n          const driverEndMoment = availability.endTime;\n          const shiftStartTime = (0, _moment.default)(availability.formattedShiftStart, _environment.default.dateTimeFormat.timeMoment);\n          if (!availability.routeLength) return false;\n          const shiftLength = availability.routeLength.split(':');\n          if (!shiftLength || shiftLength.length !== 2) return false;\n          const shiftHour = shiftLength[0];\n          const shiftMinute = shiftLength[1];\n          const driverShiftStartTime = plannedStart.clone().set({\n            h: shiftStartTime.hour(),\n            m: shiftStartTime.minute()\n          });\n          const driverShiftEndTime = driverShiftStartTime.clone().add(shiftHour, 'hour').add(shiftMinute, 'minute');\n          const isDayOfWeekAvailable = availability[rvdDayOfWeek];\n          const isDriverAvailableDates = plannedStart.isSameOrAfter(driverStartMoment, 'day') && plannedEnd.isSameOrBefore(driverEndMoment, 'day');\n          const isShiftMatches = parseInt(shiftHour, 10) >= 24 || plannedStart.isBetween(driverShiftStartTime, driverShiftEndTime, null, '[]') && plannedEnd.isBetween(driverShiftStartTime, driverShiftEndTime, null, '[]');\n          return isDayOfWeekAvailable && isShiftMatches && isDriverAvailableDates;\n        });\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/lookup-table-mixin\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    validateDescription(vehicleLookupRecord) {\n      const tooltip = this.get('tooltip');\n      const description = vehicleLookupRecord.get('description') ? vehicleLookupRecord.get('description') : vehicleLookupRecord.get('displayName'); //vallidation for duplicate description\n\n      const vehicleLookup = this.get('tableRef.records').filter(record => record.get('description') === description || record.get('displayName') === description).find(rec => rec.get('id') !== vehicleLookupRecord.get('id'));\n\n      if (vehicleLookup) {\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: 'Description cannot duplicate an existing Description.',\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/otp-label\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    otpLabel: Ember.computed('otp', function () {\n      const otp = this.get('otp');\n\n      switch (otp) {\n        case 'O':\n          return 'On Time';\n\n        case 'D':\n          return 'In Danger';\n\n        case 'L':\n          return 'Late';\n\n        case 'E':\n          return 'Early';\n\n        default:\n          return '';\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/password-validation\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    password: Ember.computed.readOnly('userDetails.password'),\n    requireValidation: Ember.computed.gte('password.length', 1),\n    passwordUnchanged: Ember.computed.not('requireValidation'),\n    containsUppercase: Ember.computed('password', function () {\n      const pass = this.get('password');\n      if (!pass) return false;\n      return pass.match(/[A-Z]/);\n    }),\n    containsLowercase: Ember.computed('password', function () {\n      const pass = this.get('password');\n      if (!pass) return false;\n      return pass.match(/[a-z]/);\n    }),\n    containsNumber: Ember.computed('password', function () {\n      const pass = this.get('password');\n      if (!pass) return false;\n      return pass.match(/[0-9]/);\n    }),\n    containsMoreThanEight: Ember.computed.gte('password.length', 6),\n    containsSymbol: Ember.computed('password', function () {\n      const pass = this.get('password');\n      if (!pass) return false;\n      return pass.match(/[~!@#$%^&*()_\\-+={};:'\"|\\\\<>,.?/]/);\n    }),\n    isPasswordValid: Ember.computed.and('containsUppercase', 'containsLowercase', 'containsNumber', 'containsMoreThanEight', 'containsSymbol'),\n    isPasswordValidOrUnchanged: Ember.computed.or('passwordUnchanged', 'isPasswordValid')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/role-provider-validation\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    selectedProviders: Ember.computed('providersList', function () {\n      const providersList = this.get('providersList');\n      return providersList.filter(p => p.isChecked);\n    }),\n    hasOneSelectedRoles: Ember.computed('selectedRoles', function () {\n      const selectedRoles = this.get('selectedRoles');\n      return Array.isArray(selectedRoles) && selectedRoles.length >= 1;\n    }),\n    hasOneSelectedProviders: Ember.computed('providersTitle', function () {\n      const providersTitle = this.get('providersTitle');\n      return providersTitle !== 'Select Providers';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/table-row-value\", [\"exports\", \"lodash\", \"moment\"], function (_exports, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    row: null,\n    column: {},\n    computedValue: Ember.computed('column', 'row', function () {\n      const row = this.get('row');\n      const column = this.get('column');\n      let valuePath = column.get('valuePath');\n\n      if (valuePath && valuePath !== 'record.undefined') {\n        return row.get(column.get('valuePath'));\n      }\n\n      const modelName = row.get('record.constructor.modelName');\n      const configValuePaths = column.get('valuePaths');\n      valuePath = configValuePaths.findBy('modelName', modelName).valuePath;\n      return row.get(`record.${valuePath}`);\n    }),\n\n    sortSolutionPreview(column) {\n      const valuePath = column.valuePath;\n      const sortOrder = column.ascending ? 'asc' : 'desc';\n      const sortType = column.sortType ? column.sortType : 'text';\n      const solutionPreviewTable = this.get('solutionPreviewTable');\n      const selectedRow = solutionPreviewTable.get('selectedRows.firstObject');\n      const rows = solutionPreviewTable.get('rows').toArray();\n\n      const sortedvalues = _lodash.default.orderBy(rows, row => {\n        const value = Ember.get(row, valuePath);\n\n        if (sortType === 'number') {\n          const currValue = parseInt(value, 10);\n          return currValue;\n        }\n\n        return value;\n      }, sortOrder);\n\n      solutionPreviewTable.setRows(sortedvalues);\n      const newSortedRows = this.get('solutionPreviewTable.rows');\n      const newSelectedRow = selectedRow ? newSortedRows.findBy('id', selectedRow.get('id')) : null;\n\n      if (newSelectedRow) {\n        newSelectedRow.set('selected', true);\n      }\n    },\n\n    sortImpactPreview(column, tripIds) {\n      const valuePath = column.valuePath;\n      const sortOrder = column.ascending ? 'asc' : 'desc';\n      const sortType = column.sortType ? column.sortType : 'text';\n      const sortFormat = column.sortFormat ? column.sortFormat : 'HH:mm';\n      const solutionImpactTable = this.get('solutionImpactTable');\n      const rows = solutionImpactTable.get('rows').toArray();\n\n      const sortedvalues = _lodash.default.orderBy(rows, row => {\n        const value = Ember.get(row, valuePath);\n\n        if (sortType === 'number') {\n          const currValue = parseInt(value, 10);\n          return currValue;\n        } else if (sortType === 'time') {\n          const momentValue = value ? (0, _moment.default)(value).format(sortFormat) : '00:00';\n          const currValue = (0, _moment.default)(momentValue, sortFormat).unix();\n          return currValue;\n        }\n\n        return value;\n      }, sortOrder);\n\n      const sortedRows = solutionImpactTable.setRows(sortedvalues);\n      sortedRows.forEach(stop => {\n        if (!Ember.isNone(stop.get('tripStop')) && tripIds.includes(stop.get('tripStop.trip.id'))) {\n          stop.set('selected', true);\n        }\n\n        if (!Ember.isNone(stop.get('stopPoint')) && tripIds.includes(stop.get('stopPoint.trip.id'))) {\n          stop.set('selected', true);\n        } //adding redRow class to row for showing ETA value in impact table related to lateness flag\n\n\n        if (stop.get('stopStatus') === 1) {\n          stop.set('classNames', 'redRow');\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/trip-transfer-promise-time\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /**\n   * Reports the promise times of an accepted trip transfer solution back to COS.\n   *\n   * A waitlisted trip that has no promise time is given one by the optimizer as part of a transfer\n   * solution, but that value only lives in the solution payload: COS drops it again once it has\n   * computed the OTP of the solution, and the trip can no longer pick one up afterwards because\n   * becoming scheduled excludes it from the same day booking backfill. The transfer is committed\n   * from here, so this is the only place that knows which solution was accepted -- COS stores the\n   * values in scheduling.Trip and booking.Segment, and leaves an existing promise time alone.\n   */\n  var _default = Ember.Mixin.create({\n    notifications: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    // Pairs each transferred trip with the promise time the accepted solution gave it. Only pick\n    // stops carry one, so a trip with no matching stop simply has no promise time to report.\n    collectAcceptedPromiseTimes(solution, trips) {\n      const stops = solution && solution.stops ? solution.stops : [];\n      return Ember.makeArray(trips).filter(Boolean).map(trip => {\n        const tripId = parseInt(trip.get('id'), 10);\n        const stop = stops.find(s => `${s.tripId}` === `${tripId}` && Ember.isPresent(s.promiseTime));\n        return stop ? {\n          tripId,\n          promiseTime: stop.promiseTime\n        } : null;\n      }).filter(Boolean);\n    },\n\n    async persistAcceptedPromiseTimes(solution, trips) {\n      const tripList = Ember.makeArray(trips).filter(Boolean);\n      const promiseTimes = this.collectAcceptedPromiseTimes(solution, tripList);\n      if (Ember.isEmpty(promiseTimes)) return;\n      const firstTrip = tripList[0];\n      const dispatchScheduleId = firstTrip.get('schedule.dispatchSchedule.id') ? parseInt(firstTrip.get('schedule.dispatchSchedule.id'), 10) : null;\n      if (!dispatchScheduleId) return;\n      const tripTransferAdapter = this.get('store').adapterFor('trip-transfer'); // The transfer itself is already committed at this point, so a failure here must not be\n      // reported as a failed transfer -- warn instead, the promise time can still be set by hand.\n\n      try {\n        await tripTransferAdapter.postTripPromiseTimes(dispatchScheduleId, promiseTimes);\n      } catch (error) {\n        console.warn(`Unable to store the promise time of the transferred trip: ${JSON.stringify(error)}`); // eslint-disable-line no-console\n\n        this.get('notifications').warning('The trip was transferred but its promise time could not be saved.');\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/trip-transfer-reason\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const srcChunck = {\n    EC_317: 'Engine Call failed with EC=317',\n    TIMEOUT_WHILE_WAITING: 'timed out while waiting',\n    BLOCKRESCHEDULE_ISSUE: 'blockReschedule has no validate trips to reschedule',\n    BLOCKRESCHEDULE_ISSUE_1: 'blockReschedule has no trips to reschedule',\n    SERVICE_UNAVAILABLE: 'Service is temporarily unavailable',\n    UNABLE_TO_ACQUITE: 'Unable to Acquire',\n    TRIPS_ARE_BROKER_TRIPS: 'Trips are broker trips',\n    ROUTE_ID_DOES_NOT_EXIST: 'does not exist',\n    MISSING_FROM_THE_CACHE: 'The following trips are missing from the cache',\n    BELONG_TO_ONE_SCHEDULE: 'the trips should belong to one schedule',\n    PROMISE_WINDOW: 'The promise window',\n    UNABLE_TO_LOCK_SOURCE: 'Unable to lock source',\n    SES_NOT_FIND_ANY: 'SES did not find any suitable destination route',\n    TRIP_TRANSFER_FAILURE: 'Trip Transfer Failure',\n    UNABLE_TO_TRANSFER: 'Unable to transfer trips',\n    SERVICE_WINDOW: 'Service window for service type',\n    UNABLE_TO_SEND_ROUTE: 'Unable to send route update to AVLM service',\n    UNABLE_TO_LOCK_ENTITIES: 'Unable to lock entities',\n    IS_NOT_ASSIGNED: 'is not assigned to a route',\n    BEFORE_DROP_ORDINAL: 'before drop ordinal',\n    VIOLATED_THE_CAPACITY: 'violated the capacity',\n    DESTINATION_ROUTE_VIOLATED_CAPACITY: 'destination route violated capacity',\n    STARTS_DURING_TRIP: 'starts during trip',\n    INSERT_TRIP_BEFORE_PERFORMED: 'cannot insert trip before already performed trips',\n    ENDPOINT_REQUEST_TIMED_OUT: 'Endpoint request timed out',\n    VERSIONS_CONFLICT: 'modified by another request',\n    VERSIONS_CONFLICT_PREREQUISITES: 'but has version',\n    UNABLE_TO_OBTAIN_LOCK: 'Unable to obtain lock',\n    ETANAV_ELIMINATED_ALL: 'ETAnav eliminated all destination routes suggested by SES',\n    LOCKED_TERMINATED: 'are locked. Process terminated.'\n  };\n  const reason = {\n    SYSTEM_UNAVAILABLE: 'System unavailable. Please try again.',\n    SYSTEM_BUSY: 'System busy. Please try again.',\n    NO_BROKER: 'No broker routes exist.',\n    SCHEDULE_PROBLEM: 'There may be a problem with the trip date\\'s schedule. ',\n    PROMISE_TIME_ISSUE: 'There may be an issue with the promise time/window',\n    SERVICE_WINDOW_ISSUE: 'There may be an issue with the trip\\'s service window.',\n    PICKUP_MUST_BEFORE_DROP: 'Trip\\'s pickup must come before its drop-off.',\n    NOT_HAVE_CAPACITY: 'Destination route does not have appropriate capacity.',\n    IN_MIDDLE_OF_BREAK: 'Trip cannot be placed in the middle of a break.',\n    TRIP_MUST_AFTER_PERFORMED: 'Trip must be placed after performed trips.',\n    ROUTE_CAPACITY_OR_TIMES: 'Transferring causes an issue with route capacity or times.',\n    CHECK_TRIP_STATE: 'Trip transfer issue. Please check trip state.',\n    VERSIONS_CONFLICT: 'The Trip`s Route has already been modified by another request',\n    VERSIONS_CONFLICT_PREREQUISITES: 'The Trip`s Route has already been modified by another request',\n    UNABLE_TO_LOCK_ENTITIES: 'Obtain route lock failed at this time, please retry operation.',\n    SYSTEM_UNABLE_TO_OBTAIN_ROUTE_LOCK: 'System unable to obtain route lock for transfer, Please retry operation.',\n    NO_REASON: ''\n  };\n  const matchingTable = {\n    SERVICE_UNAVAILABLE: reason.SYSTEM_UNAVAILABLE,\n    UNABLE_TO_ACQUITE: reason.SYSTEM_UNAVAILABLE,\n    TRIPS_ARE_BROKER_TRIPS: reason.NO_BROKER,\n    ROUTE_ID_DOES_NOT_EXIST: reason.SYSTEM_UNAVAILABLE,\n    MISSING_FROM_THE_CACHE: reason.SYSTEM_UNAVAILABLE,\n    BELONG_TO_ONE_SCHEDULE: reason.SCHEDULE_PROBLEM,\n    PROMISE_WINDOW: reason.PROMISE_TIME_ISSUE,\n    SES_NOT_FIND_ANY: reason.NO_REASON,\n    UNABLE_TO_LOCK_SOURCE: reason.SYSTEM_UNAVAILABLE,\n    TRIP_TRANSFER_FAILURE: reason.SYSTEM_UNAVAILABLE,\n    UNABLE_TO_TRANSFER: reason.SYSTEM_UNAVAILABLE,\n    SERVICE_WINDOW: reason.SERVICE_WINDOW_ISSUE,\n    UNABLE_TO_SEND_ROUTE: reason.SYSTEM_UNAVAILABLE,\n    UNABLE_TO_LOCK_ENTITIES: reason.UNABLE_TO_LOCK_ENTITIES,\n    IS_NOT_ASSIGNED: reason.SYSTEM_UNAVAILABLE,\n    BEFORE_DROP_ORDINAL: reason.PICKUP_MUST_BEFORE_DROP,\n    VIOLATED_THE_CAPACITY: reason.NOT_HAVE_CAPACITY,\n    DESTINATION_ROUTE_VIOLATED_CAPACITY: reason.NOT_HAVE_CAPACITY,\n    STARTS_DURING_TRIP: reason.IN_MIDDLE_OF_BREAK,\n    INSERT_TRIP_BEFORE_PERFORMED: reason.TRIP_MUST_AFTER_PERFORMED,\n    ENDPOINT_REQUEST_TIMED_OUT: reason.SYSTEM_BUSY,\n    EC_317: reason.ROUTE_CAPACITY_OR_TIMES,\n    BLOCKRESCHEDULE_ISSUE: reason.CHECK_TRIP_STATE,\n    BLOCKRESCHEDULE_ISSUE_1: reason.CHECK_TRIP_STATE,\n    TIMEOUT_WHILE_WAITING: reason.SYSTEM_BUSY,\n    VERSIONS_CONFLICT: reason.VERSIONS_CONFLICT,\n    UNABLE_TO_OBTAIN_LOCK: reason.SYSTEM_UNABLE_TO_OBTAIN_ROUTE_LOCK,\n    ETANAV_ELIMINATED_ALL: reason.ROUTE_CAPACITY_OR_TIMES,\n    LOCKED_TERMINATED: reason.SYSTEM_UNABLE_TO_OBTAIN_ROUTE_LOCK\n  };\n\n  var _default = Ember.Mixin.create({\n    translate(message, detail) {\n      for (const [key, value] of Object.entries(srcChunck)) {\n        if (message && message.includes(value) || detail && detail.includes(value)) {\n          return matchingTable[key];\n        }\n      }\n\n      return message || detail || reason.SYSTEM_UNAVAILABLE;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/mixins/version-check\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/api-urls\"], function (_exports, _emberConcurrency, _unwrapProxy, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Mixin.create({\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    _routeLocked: false,\n    _routeLockedTimeStamp: null,\n    _dispatchRouteToCheck: null,\n    _routeLockedTimeoutId: null,\n    dispatchRouteToCheck: Ember.computed('_dispatchRouteToCheck', 'stopPoint', {\n      get() {\n        let dispatchRouteToCheck = this.get('_dispatchRouteToCheck');\n\n        if (!dispatchRouteToCheck) {\n          const stopPoint = this.get('stopPoint');\n          if (stopPoint) dispatchRouteToCheck = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('dispatchRoute'));\n          /*eslint-disable */\n\n          this.set('_dispatchRouteToCheck', dispatchRouteToCheck);\n          /*eslint-enable */\n        }\n\n        return dispatchRouteToCheck;\n      },\n\n      set(key, value) {\n        this.set('_dispatchRouteToCheck', value);\n        return value;\n      }\n\n    }),\n    versionCheckOperation: (0, _emberConcurrency.task)(function* (versionInavlidCallback) {\n      const dispatchRoute = this.get('dispatchRouteToCheck');\n      const dispatchRouteAdapter = this.get('store').adapterFor('dispatch-route');\n      const currentVersion = yield dispatchRouteAdapter.getVersion(dispatchRoute.get('id'));\n      const dispatchRouteVersionSnapshot = this.get('dispatchRouteVersionSnapshot');\n\n      if (dispatchRouteVersionSnapshot && currentVersion && dispatchRouteVersionSnapshot !== currentVersion) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          tip: 'Perform failed, Because route had been modified by another request.',\n          title: 'Route record changed',\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            tooltip.reset();\n\n            if (versionInavlidCallback) {\n              versionInavlidCallback();\n            }\n\n            return;\n          }\n        });\n        throw new Error('dispatchRoute version invalid');\n      }\n\n      return true;\n    }).enqueue(),\n    versionUpdateOperation: (0, _emberConcurrency.task)(function* () {\n      const dispatchRoute = this.get('dispatchRouteToCheck');\n      const dispatchRouteAdapter = this.get('store').adapterFor('dispatch-route');\n\n      if (dispatchRoute) {\n        yield dispatchRoute.reload();\n        yield dispatchRouteAdapter.updateVersion(dispatchRoute.get('id'), dispatchRoute.get('version'));\n      }\n    }).enqueue(),\n    lockStatusCheck: async function () {\n      const session = this.get('session');\n      const dispatchRoute = this.get('dispatchRouteToCheck');\n      const dispatchRouteLock = this.get('store').peekRecord('lock', dispatchRoute.get('id'));\n      const userId = session.data.authenticated.userId;\n\n      if (Ember.isNone(dispatchRouteLock) || !dispatchRouteLock.get('isLocked') || userId !== dispatchRouteLock.get('owner.id')) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          tip: 'Confirmation timeout, please retry operation.',\n          title: 'Confirmation timeout',\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            tooltip.reset();\n            return;\n          }\n        });\n        throw new Error('Confirmation timeout');\n      }\n    },\n    lockRouteAction: async function () {\n      let persist = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      let ttl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 120;\n      const lockAdapter = this.get('store').adapterFor('lock');\n      const dispatchRoute = this.get('dispatchRouteToCheck');\n      const lock = await lockAdapter.doLockRoute(dispatchRoute, persist, true, false, ttl);\n      this.set('_routeLockedTimeStamp', new Date().getTime());\n\n      if (!persist) {\n        const routeLockedTimeoutId = setTimeout(() => {\n          if (this.get('_routeLockedTimeoutId')) {\n            clearTimeout(this.get('_routeLockedTimeoutId'));\n            this.set('_routeLockedTimeoutId', null);\n          }\n\n          this.unlockRouteAction(0);\n          const tooltip = this.get('tooltip');\n\n          if (!tooltip.get('isRunning')) {\n            tooltip.reset();\n            tooltip.pushConfirmation({\n              tip: 'Confirmation timeout, please retry operation.',\n              title: 'Confirmation timeout',\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              primaryAction: () => {\n                tooltip.reset();\n                return;\n              }\n            });\n          }\n        }, 45000);\n        this.set('_routeLockedTimeoutId', routeLockedTimeoutId);\n      }\n\n      if (lock && lock.attributes.exist !== true) {\n        this.set('routeLocked', true);\n      }\n    },\n    lockScheduleRouteAction: async function () {\n      let persist = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      let ttl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 120;\n      const route = this.get('routeToCheck');\n      const lock = await this.doScheduleLockRoute(route, persist, ttl);\n      this.set('_routeLockedTimeStamp', new Date().getTime());\n\n      if (!persist) {\n        const routeLockedTimeoutId = setTimeout(() => {\n          if (this.get('_routeLockedTimeoutId')) {\n            clearTimeout(this.get('_routeLockedTimeoutId'));\n            this.set('_routeLockedTimeoutId', null);\n          }\n\n          this.unlockScheduleRouteAction(0);\n          const tooltip = this.get('tooltip');\n\n          if (!tooltip.get('isRunning')) {\n            tooltip.reset();\n            tooltip.pushConfirmation({\n              tip: 'Confirmation timeout, please retry operation.',\n              title: 'Confirmation timeout',\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              primaryAction: () => {\n                tooltip.reset();\n                return;\n              }\n            });\n          }\n        }, 45000);\n        this.set('_routeLockedTimeoutId', routeLockedTimeoutId);\n      }\n\n      if (lock && lock.data[0].attributes.status === 'acquired') {\n        this.set('routeLocked', true);\n      }\n    },\n\n    doScheduleLockRoute(route, persist, ttl) {\n      const notifications = this.get('notifications');\n      const session = this.get('session');\n      const json = {\n        data: {\n          type: 'lock',\n          attributes: {\n            entityType: 'route',\n            entityId: route.get('id'),\n            timeToLive: ttl,\n            persist: persist\n          }\n        }\n      };\n      return this.get('ajax').post(_apiUrls.API.schedulingService.host + '/lock', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).catch(function (error) {\n        notifications.warning(`Error creating route lock, ${error.message}`);\n      });\n    },\n\n    invokeScheduleUnlock(routeId) {\n      const notifications = this.get('notifications');\n      const session = this.get('session');\n      return this.get('ajax').delete(_apiUrls.API.schedulingService.host + '/lock/force/route/' + routeId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).catch(function (error) {\n        notifications.warning(`Error removing route lock, ${error.message}`);\n      });\n    },\n\n    unlockRouteAction: async function () {\n      let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3000;\n      const lockAdapter = this.get('store').adapterFor('lock');\n      const dispatchRoute = this.get('dispatchRouteToCheck');\n      const currentTimestamp = new Date().getTime();\n      const routeLockedTimeStamp = this.get('_routeLockedTimeStamp');\n      const minDelay = routeLockedTimeStamp ? Math.max(3000 - (currentTimestamp - routeLockedTimeStamp), delay) : delay;\n      this.set('_routeLockedTimeStamp', null);\n\n      if (this.get('_routeLockedTimeoutId')) {\n        clearTimeout(this.get('_routeLockedTimeoutId'));\n        this.set('_routeLockedTimeoutId', null);\n      }\n\n      if (this.get('routeLocked')) {\n        try {\n          if (minDelay > 0) {\n            // Avoid it is too close no getting lock updated.\n            Ember.run.later(async () => {\n              await lockAdapter.doUnlockRoute(dispatchRoute, false);\n            }, minDelay);\n          } else {\n            await lockAdapter.doUnlockRoute(dispatchRoute);\n          }\n        } catch (e) {\n          return;\n        } finally {\n          if (!this.get('isDestroyed')) {\n            this.set('routeLocked', false);\n          }\n        }\n      }\n    },\n    unlockScheduleRouteAction: async function () {\n      let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3000;\n      const route = this.get('routeToCheck');\n      const currentTimestamp = new Date().getTime();\n      const routeLockedTimeStamp = this.get('_routeLockedTimeStamp');\n      const minDelay = routeLockedTimeStamp ? Math.max(3000 - (currentTimestamp - routeLockedTimeStamp), delay) : delay;\n      this.set('_routeLockedTimeStamp', null);\n\n      if (this.get('_routeLockedTimeoutId')) {\n        clearTimeout(this.get('_routeLockedTimeoutId'));\n        this.set('_routeLockedTimeoutId', null);\n      }\n\n      if (this.get('routeLocked')) {\n        try {\n          if (minDelay > 0) {\n            // Avoid it is too close no getting lock updated.\n            Ember.run.later(async () => {\n              await this.invokeScheduleUnlock(route.get('id'));\n            }, minDelay);\n          } else {\n            await this.invokeScheduleUnlock(route.get('id'));\n          }\n        } catch (e) {\n          return;\n        } finally {\n          if (!this.get('isDestroyed')) {\n            this.set('routeLocked', false);\n          }\n        }\n      }\n    },\n    clearRouteLockTimeoutId: function () {\n      if (this.get('_routeLockedTimeoutId')) {\n        clearTimeout(this.get('_routeLockedTimeoutId'));\n        this.set('_routeLockedTimeoutId', null);\n      }\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/address\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    map: Ember.inject.service(),\n    freeformAddress: attr('string', {\n      defaultValue: ''\n    }),\n    alias: attr('string', {\n      defaultValue: ''\n    }),\n    premise: attr('string', {\n      defaultValue: ''\n    }),\n    streetNumber: attr('string'),\n    streetAddress: attr('string'),\n    locality: attr('string', {\n      defaultValue: ''\n    }),\n    subLocality: attr('string'),\n    subRegion: attr('string', {\n      defaultValue: ''\n    }),\n    region: attr('string', {\n      defaultValue: ''\n    }),\n    postalCode: attr('string', {\n      defaultValue: ''\n    }),\n    country: attr('string', {\n      defaultValue: ''\n    }),\n    notes: attr('string', {\n      defaultValue: ''\n    }),\n    zName: attr('string'),\n    locations: hasMany('location'),\n    places: hasMany('place'),\n    zoneName: belongsTo('zone-type'),\n    location: Ember.computed('locations.[]', function () {\n      let location = null;\n\n      if (!Ember.isEmpty(this.get('locations').firstObject)) {\n        location = this.get('locations').firstObject;\n      }\n\n      return location;\n    }),\n    // needed to synchronize attribute name with tomtom\n    countrySecondarySubdivision: Ember.computed('region', function () {\n      return this.get('region');\n    }),\n    // computed position is needed because of dealing with tomtom address format\n    // and other format model from booking service, rider management,...\n    position: Ember.computed('places.firstObject.location.{lat,lng}', function () {\n      const firstLocation = this.get('places.firstObject.location');\n\n      if (Ember.isEmpty(firstLocation)) {\n        return {\n          lat: '',\n          lng: '',\n          lon: ''\n        };\n      }\n\n      return {\n        lat: firstLocation.get('lat'),\n        lng: firstLocation.get('lng'),\n        lon: firstLocation.get('lng')\n      };\n    }),\n    tomtomFormattedAddress: Ember.computed('freeformAddress', 'premise', 'streetNumber', 'streetAddress', 'locality', 'position', function () {\n      let address = null;\n\n      if (!Ember.isEmpty(this.get('freeformAddress'))) {\n        const tempAddress = this.get('freeformAddress');\n        address = {\n          address: {\n            freeformAddress: tempAddress\n          }\n        };\n      } else if (!Ember.isEmpty(this.get('streetAddress')) && !Ember.isEmpty(this.get('streetNumber'))) {\n        let tempAddress = `${this.get('streetNumber')} ${this.get('streetAddress')} ${this.get('locality')}`;\n\n        if (!Ember.isEmpty(this.get('premise'))) {\n          tempAddress = `${this.get('premise')} - ` + tempAddress;\n        }\n\n        address = {\n          address: {\n            freeformAddress: tempAddress\n          }\n        };\n      } else if (!Ember.isEmpty(this.get('streetAddress'))) {\n        address = {\n          address: {\n            freeformAddress: `${this.get('streetAddress')} ${this.get('locality')}`\n          }\n        };\n      } else if (this.get('position.lat')) {\n        address = {\n          address: {\n            freeformAddress: `${this.get('position.lat')}, ${this.get('position.lng')}`\n          }\n        };\n      }\n\n      return address;\n    }),\n    // create a standard address format for BeNomad\n    // standardized the address format for all users\n    // street number street address premise, city, postal code, country\n    // ex. 3214 N University Ave #409, Provo, 84604, United States\n    address: Ember.computed('streetNumber', 'streetAddress', 'locality', 'region', 'postalCode', function () {\n      const premise = this.get('premise') || '';\n      const streetNumber = this.get('streetNumber') || '';\n      const streetAddress = this.get('streetAddress') || '';\n      const locality = this.get('locality') || '';\n      const postalCode = this.get('postalCode') || '';\n      const region = this.get('region') || '';\n      let address = null;\n\n      if (Ember.isPresent(this.get('streetAddress'))) {\n        let tempAddress = `${streetNumber} ${streetAddress}, ${locality}, ${region} ${postalCode}`;\n\n        if (Ember.isPresent(premise) && premise.length > 0) {\n          tempAddress = `${streetNumber} ${streetAddress} ${premise}, ${locality}, ${region} ${postalCode}`;\n        }\n\n        address = {\n          address: {\n            freeformAddress: tempAddress\n          }\n        };\n      }\n\n      return address;\n    }),\n    // alias address\n    // street number street address, city\n    // ex. 4040 Lake Washington Blvd, Seattle\n    aliasAddress: Ember.computed('streetNumber', 'streetAddress', 'locality', 'alias', function () {\n      const streetNumber = this.get('streetNumber') || '';\n      const streetAddress = this.get('streetAddress') || '';\n      const locality = this.get('locality') || '';\n      const name = this.get('alias');\n\n      if (!name) {\n        return `${streetNumber} ${streetAddress}, ${locality}`;\n      }\n\n      return `${name} - ${streetNumber} ${streetAddress}, ${locality}`;\n    }),\n    simpleAddress: Ember.computed('premise', 'streetNumber', 'streetAddress', function () {\n      let result = null;\n\n      if (!Ember.isNone(this.get('streetAddress'))) {\n        result = `${this.get('streetNumber')} ${this.get('streetAddress')}`;\n\n        if (!Ember.isNone(this.get('premise'))) {\n          result = `${this.get('streetNumber')} ${this.get('streetAddress')} ${this.get('premise')}`;\n        }\n      }\n\n      return result;\n    }),\n    streetNumberAndAddress: Ember.computed('streetNumber', 'streetAddress', function () {\n      let result = null;\n\n      if (!Ember.isNone(this.get('streetAddress'))) {\n        result = `${this.get('streetNumber')} ${this.get('streetAddress')}`;\n      }\n\n      return result;\n    }),\n    fullAddress: Ember.computed('freeformAddress', 'premise', 'streetNumber', 'streetAddress', 'locality', 'subLocality', 'region', 'postalCode', 'alias', function () {\n      const premise = Ember.get(this, 'premise');\n      const streetNumber = Ember.get(this, 'streetNumber');\n      const streetAddress = Ember.get(this, 'streetAddress');\n      const localityOrSubLocality = this.get('locality') || this.get('subLocality') || '';\n      const region = Ember.get(this, 'region');\n      const postalCode = Ember.get(this, 'postalCode');\n      const address = [];\n\n      if (!Ember.isEmpty(this.get('freeformAddress'))) {\n        return this.get('freeformAddress');\n      } // this code is to avoid ', , ,' in leg form component when we bind empty address Record\n\n\n      if (Ember.isEmpty(streetNumber) && Ember.isEmpty(localityOrSubLocality) && Ember.isEmpty(postalCode)) {\n        return '';\n      }\n\n      address.push(streetNumber);\n      address.push(streetAddress);\n      address.push(premise);\n      const result = [address.join(' ')];\n      result.push(localityOrSubLocality);\n      result.push(region);\n      result.push(postalCode);\n      return result.join(', ');\n    }).readOnly(),\n    beNomadAddress: Ember.computed('streetNumber', 'streetAddress', 'locality', 'subLocality', 'postalCode', 'country', function () {\n      const streetNumber = Ember.get(this, 'streetNumber');\n      const streetAddress = Ember.get(this, 'streetAddress');\n      const localityOrSubLocality = this.get('locality') || this.get('subLocality') || '';\n      const postalCode = Ember.get(this, 'postalCode');\n      const country = Ember.get(this, 'country');\n      const map = Ember.get(this, 'map');\n      const address = []; // this code is to avoid ', , ,' in leg form component when we bind empty address Record\n\n      if (Ember.isEmpty(streetNumber) && Ember.isEmpty(localityOrSubLocality) && Ember.isEmpty(postalCode)) {\n        return '';\n      }\n\n      address.push(streetNumber);\n      address.push(streetAddress);\n      const result = [address.join(' ')];\n      result.push(localityOrSubLocality);\n      result.push(postalCode);\n\n      if (Ember.isEmpty(country)) {\n        const site = map.get('site').split('/');\n        const siteCountry = site[0];\n        result.push(siteCountry);\n      } else {\n        result.push(country);\n      }\n\n      return result.join(', ');\n    }).readOnly(),\n    readableAddress: Ember.computed('streetNumber', 'streetAddress', 'locality', 'subLocality', 'region', 'postalCode', function () {\n      const streetNumber = Ember.get(this, 'streetNumber');\n      const streetAddress = Ember.get(this, 'streetAddress');\n      const localityOrSubLocality = this.get('locality') || this.get('subLocality') || '';\n      const region = Ember.get(this, 'region');\n      const postalCode = Ember.get(this, 'postalCode');\n      const address = [];\n      address.push(streetNumber);\n      address.push(streetAddress);\n      const result = [address.join(' ')];\n      result.push(localityOrSubLocality);\n      result.push(region);\n      result.push(postalCode);\n      return result.join(', ');\n    }).readOnly(),\n    placeAddress: Ember.computed('readableAddress', function () {\n      if (!this.get('dirtyType')) {\n        return this.get('readableAddress');\n      }\n\n      return this.get('previousReadableAddress');\n    }),\n    aliasPlaceAddress: Ember.computed('alias', 'fullAddress', function () {\n      const aliasName = this.get('alias');\n      const fullAddress = this.get('fullAddress');\n      if (aliasName && fullAddress && !fullAddress.includes(aliasName)) return `${aliasName} - ${fullAddress}`;\n      return fullAddress;\n    }),\n    placeNameAddress: Ember.computed('fullAddress', 'alias', function () {\n      const alias = this.get('alias');\n      const fullAddress = this.get('fullAddress');\n\n      if (alias && fullAddress && !fullAddress.includes(alias)) {\n        return `${alias} - ${fullAddress}`;\n      }\n\n      return fullAddress;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/agency-marker\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    options: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/agency-service\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var hasMany = _emberData.default.hasMany;\n  var belongsTo = _emberData.default.belongsTo;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    agencyServiceName: attr('string'),\n    agency: belongsTo('agency'),\n    calendars: hasMany('route-calendar')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/agency\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    agencyId: 'number',\n    agencyUrl: attr('string'),\n    agencyTimezone: attr('string'),\n    agencyLanguage: attr('string'),\n    agencyPhone: attr('string'),\n    services: hasMany('agency-service')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avl-location\", [\"exports\", \"ember-data\", \"ember-data-model-fragments/fragment\"], function (_exports, _emberData, _fragment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var attr = _emberData.default.attr;\n\n  var _default = _fragment.default.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    heading: attr('number'),\n    speed: attr('number'),\n    odo: attr('number'),\n    timestamp: attr('date')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-address\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    description: attr('string'),\n    premise: attr('string', {\n      defaultValue: ''\n    }),\n    streetNumber: attr('string'),\n    streetName: attr('string'),\n    locality: attr('string', {\n      defaultValue: ''\n    }),\n    subRegion: attr('string', {\n      defaultValue: ''\n    }),\n    region: attr('string', {\n      defaultValue: ''\n    }),\n    postalCode: attr('string', {\n      defaultValue: ''\n    }),\n    country: attr('string', {\n      defaultValue: ''\n    }),\n    latitude: attr('number'),\n    longitude: attr('number'),\n    // needed to syncronize attribute name with tomtom\n    countrySecondarySubdivision: Ember.computed('region', function () {\n      return this.get('region');\n    }),\n    // computed position is needed because of dealing with tomtom address format\n    // and other format model from booking service, rider management,...\n    position: Ember.computed('latitude', 'longitude', function () {\n      return {\n        lat: this.get('latitude'),\n        lng: this.get('longitude')\n      };\n    }),\n    tomtomFormattedAddress: Ember.computed('premise', 'streetNumber', 'streetName', 'locality', function () {\n      let address = null;\n\n      if (!Ember.isNone(this.get('streetName'))) {\n        let tempAddress = `${this.get('streetNumber')} ${this.get('streetName')} ${this.get('locality')}`;\n\n        if (!Ember.isNone(this.get('premise'))) {\n          tempAddress = `${this.get('premise')} - ` + tempAddress;\n        }\n\n        address = {\n          address: {\n            freeformAddress: tempAddress\n          }\n        };\n      }\n\n      return address;\n    }),\n    streetAddress: Ember.computed('description', 'premise', 'streetNumber', 'streetName', function () {\n      let address = null;\n\n      if (!Ember.isNone(this.get('streetName'))) {\n        address = `${this.get('streetNumber')} ${this.get('streetName')}`;\n\n        if (!Ember.isNone(this.get('alias'))) {\n          address = `${this.get('alias')} ${this.get('streetNumber')} ${this.get('streetName')}`;\n        }\n\n        if (!Ember.isNone(this.get('premise')) && !Ember.isNone(this.get('description'))) {\n          address = `${this.get('description')} ${this.get('premise')} - ${this.get('streetNumber')} ${this.get('streetName')}`;\n        }\n      }\n\n      return address;\n    }),\n    address: Ember.computed('description', 'premise', 'streetNumber', 'streetName', 'locality', function () {\n      let address = null;\n\n      if (!Ember.isNone(this.get('streetName'))) {\n        let tempAddress = `${this.get('streetNumber')} ${this.get('streetName')}`;\n\n        if (!Ember.isNone(this.get('alias'))) {\n          tempAddress = `${this.get('alias')} ${this.get('streetNumber')} ${this.get('streetName')}`;\n        }\n\n        if (!Ember.isNone(this.get('premise')) && !Ember.isNone(this.get('description'))) {\n          tempAddress = `${this.get('description')} ${this.get('premise')} - ${this.get('streetNumber')} ${this.get('streetName')} ${this.get('locality')}`;\n        }\n\n        address = {\n          freeformAddress: tempAddress\n        };\n      }\n\n      return address;\n    }),\n    location: Ember.computed('locations.[]', function () {\n      return this.get('locations').firstObject;\n    }),\n    fullAddress: Ember.computed('streetNumber', 'streetName', 'locality', 'region', 'postalCode', 'alias', function () {\n      const alias = null;\n      const streetNumber = Ember.get(this, 'streetNumber');\n      const streetName = Ember.get(this, 'streetName');\n      const locality = Ember.get(this, 'locality');\n      const region = Ember.get(this, 'region');\n      const postalCode = Ember.get(this, 'postalCode');\n      const address = [];\n\n      if (alias) {\n        address.push(alias + ',');\n      }\n\n      address.push(streetNumber);\n      address.push(streetName);\n      const result = [address.join(' ')];\n      result.push(locality);\n      result.push(region);\n      result.push(postalCode);\n      return result.join(', ');\n    }).readOnly()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-alert\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    timestamp: attr('date'),\n    body: attr('string'),\n    category: attr('string'),\n    state: attr('string'),\n    companyId: attr('string'),\n    title: attr('string'),\n    isNewEmergencyReceived: attr('boolean'),\n    routeId: attr('string'),\n    vehicleId: attr('string'),\n    driverId: attr('string'),\n    tripId: attr('string'),\n    stopId: attr('string'),\n    priority: attr('string'),\n    priorityId: attr('string'),\n    avlmRoute: belongsTo('avlm-route'),\n    avlmVehicle: belongsTo('avlm-vehicle'),\n    // core models required for mvpplus + avlm at most three relationships will be used\n    emergency: belongsTo('avlm-emergency-message'),\n    vehicle: belongsTo('vehicle'),\n    route: belongsTo('route'),\n    driver: belongsTo('driver'),\n    provider: Ember.computed('route.provider', 'vehicle.provider', function () {\n      const routeProvider = this.get('route.provider');\n      if (routeProvider) return routeProvider;\n      const vehicleProvider = this.get('vehicle.provider');\n      return vehicleProvider;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-attribute\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    type: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-canned-message-template\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    body: attr('string'),\n    messageNr: attr('string'),\n    type: attr('string'),\n    status: attr('string'),\n    // TODO: normalize in serializer\n    provider: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-canned-message\", [\"exports\", \"ember-data\", \"adept-iq/config/environment\"], function (_exports, _emberData, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.MESSAGE_STATUS_SENT = _exports.MESSAGE_STATUS_SENDING = _exports.MESSAGE_STATUS_RECEIVED = _exports.MESSAGE_STATUS_FAILED = _exports.MESSAGE_STATUS_DELETED = _exports.MESSAGE_STATUSES = _exports.DRIVER_ENDPOINT_SENDER = _exports.DRIVER_ENDPOINT_RECIPIENT = _exports.DRIVER_ENDPOINTS = void 0;\n  var belongsTo = _emberData.default.belongsTo;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n  const MESSAGE_STATUS_SENDING = 'Sending';\n  _exports.MESSAGE_STATUS_SENDING = MESSAGE_STATUS_SENDING;\n  const MESSAGE_STATUS_SENT = 'Sent';\n  _exports.MESSAGE_STATUS_SENT = MESSAGE_STATUS_SENT;\n  const MESSAGE_STATUS_RECEIVED = 'Received';\n  _exports.MESSAGE_STATUS_RECEIVED = MESSAGE_STATUS_RECEIVED;\n  const MESSAGE_STATUS_FAILED = 'Failed';\n  _exports.MESSAGE_STATUS_FAILED = MESSAGE_STATUS_FAILED;\n  const MESSAGE_STATUS_DELETED = 'Deleted';\n  _exports.MESSAGE_STATUS_DELETED = MESSAGE_STATUS_DELETED;\n  const DRIVER_ENDPOINT_RECIPIENT = 'Recipient';\n  _exports.DRIVER_ENDPOINT_RECIPIENT = DRIVER_ENDPOINT_RECIPIENT;\n  const DRIVER_ENDPOINT_SENDER = 'Sender';\n  _exports.DRIVER_ENDPOINT_SENDER = DRIVER_ENDPOINT_SENDER;\n  const MESSAGE_STATUSES = [MESSAGE_STATUS_SENDING, MESSAGE_STATUS_SENT, MESSAGE_STATUS_RECEIVED, MESSAGE_STATUS_FAILED, MESSAGE_STATUS_DELETED];\n  _exports.MESSAGE_STATUSES = MESSAGE_STATUSES;\n  const DRIVER_ENDPOINTS = {\n    'Sender': 'S',\n    'Recipient': 'R'\n  };\n  _exports.DRIVER_ENDPOINTS = DRIVER_ENDPOINTS;\n\n  var _default = Model.extend({\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    body: attr('string'),\n    subject: attr('string'),\n    messageNr: attr('string'),\n    replyToMsgId: attr('string'),\n    priority: attr('string', {\n      defaultValue: 'normal'\n    }),\n    isNewMessageReceived: attr('boolean'),\n    createdTime: attr('date', {\n      defaultValue: () => new Date()\n    }),\n    deliveredTime: attr('date'),\n    readTime: attr('date'),\n    deletedTime: attr('date'),\n    responseType: attr('object'),\n    responseTypeText: attr('string'),\n    responseMessage: attr('string'),\n    ackTime: attr('date'),\n    driverEndPointType: attr('string'),\n    type: attr('string'),\n    // use for sending canned message to avlm\n    // driver.id uses the externalId of dsDriver\n    rider: belongsTo('avlm-rider'),\n    template: belongsTo('avlm-canned-message-template'),\n    replyToMessage: belongsTo('avlm-canned-message', {\n      inverse: null\n    }),\n    // avlm models for avlm-only at most three relationships will be used\n    avlmDriver: belongsTo('avlm-driver'),\n    avlmTrip: belongsTo('avlm-trip'),\n    avlmVehicle: belongsTo('avlm-vehicle'),\n    avlmRoute: belongsTo('avlm-route'),\n    alert: belongsTo('avlm-alert'),\n    avlmRouteVehicleDriver: belongsTo('avlm-route-vehicle-driver'),\n    // core models required for mvpplus + avlm at most three relationships will be used\n    driver: belongsTo('driver'),\n    vehicle: belongsTo('vehicle'),\n    route: belongsTo('route'),\n    vehicleName: Ember.computed('avlmVehicle', 'vehicle', function () {\n      const dsName = this.get('vehicle.name');\n      if (dsName) return dsName;\n      const avlmName = this.get('avlmVehicle.callSign');\n      return avlmName;\n    }),\n    tripStartTime: Ember.computed('ssRoute.tripStartTime', 'avlmRoute.tripStartTime', 'deliveredTime', function () {\n      const dsRouteTime = this.get('ssRoute.tripStartTime');\n      const avlmRouteTime = this.get('avlmRoute.tripStartTime');\n      const deliveredTime = this.get('deliveredTime');\n      if (avlmRouteTime) return avlmRouteTime;\n      if (dsRouteTime) return dsRouteTime;\n      return deliveredTime;\n    }),\n    tripEndTime: Ember.computed('ssRoute.tripEndTime', 'avlmRoute.tripEndTime', 'deliveredTime', function () {\n      const avlmRouteTime = this.get('avlmRoute.tripEndTime');\n      const dsRouteTime = this.get('ssRoute.tripEndTime');\n      const deliveredTime = this.get('deliveredTime');\n      if (avlmRouteTime) return avlmRouteTime;\n      if (dsRouteTime) return dsRouteTime;\n      return deliveredTime;\n    }),\n    isEmergency: Ember.computed('type', function () {\n      return this.get('priority') === 'E' && this.get('body') === 'EMERGENCY';\n    }),\n    isAcknowledged: Ember.computed('type', function () {\n      return this.get('priority') === 'E' && this.get('body') === 'Acknowledge';\n    }),\n    isResolved: Ember.computed('type', function () {\n      return this.get('priority') === 'E' && this.get('body') === 'Resolve';\n    }),\n    isCanceled: Ember.computed('type', function () {\n      return this.get('priority') === 'E' && this.get('body') === 'Canceled';\n    }),\n    isDelivered: Ember.computed('deliveredTime', function () {\n      return Ember.isPresent(this.get('deliveredTime'));\n    }),\n    isRead: Ember.computed('readTime', function () {\n      return Ember.isPresent(this.get('readTime'));\n    }),\n    isDeleted: Ember.computed('deletedTime', function () {\n      return Ember.isPresent(this.get('deletedTime'));\n    }),\n    isRecieved: Ember.computed('driverEndPointType', function () {\n      if (this.user.isRoadSupEnable()) {\n        if (this.get('driverEndPointType') === DRIVER_ENDPOINTS[DRIVER_ENDPOINT_SENDER]) {\n          return false;\n        }\n\n        return true;\n      }\n\n      if (_environment.default.APP.avlmLite) {\n        return this.get('driverEndPointType') === DRIVER_ENDPOINTS[DRIVER_ENDPOINT_SENDER];\n      }\n\n      return this.get('driverEndPointType') === DRIVER_ENDPOINTS[DRIVER_ENDPOINT_SENDER];\n    }),\n    isSent: Ember.computed('driverEndPointType', function () {\n      if (this.user.isRoadSupEnable()) {\n        if (this.get('driverEndPointType') === DRIVER_ENDPOINTS[DRIVER_ENDPOINT_SENDER]) {\n          return true;\n        }\n\n        return false;\n      }\n    }),\n    status: Ember.computed('isDelivered', 'isRead', 'isDeleted', function () {\n      if (this.get('isDeleted')) {\n        return MESSAGE_STATUS_DELETED;\n      }\n\n      if (this.get('isDelivered') && this.get('isRecieved')) {\n        return MESSAGE_STATUS_RECEIVED;\n      }\n\n      if (this.get('isDelivered') && this.get('isSent')) {\n        return MESSAGE_STATUS_SENT;\n      }\n\n      if (this.get('isDelivered')) {\n        return MESSAGE_STATUS_SENT;\n      }\n\n      return MESSAGE_STATUS_SENDING;\n    }),\n    readString: Ember.computed('isRead', function () {\n      return this.get('isRead') ? 'Yes' : 'No';\n    }),\n    driverId: Ember.computed('avlmDriver', 'avlmRoute', function () {\n      const routeName = this.get('avlmRoute.trackingId');\n      if (routeName && routeName.indexOf('SUP-') > -1) return '';\n      return this.get('avlmDriver.id');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-cluster\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    startTime: attr('date'),\n    endTime: attr('date'),\n    clusterIndex: attr('number'),\n    status: attr('string'),\n    route: belongsTo('avlm-route'),\n    schedule: belongsTo('avlm-schedule'),\n    stopPoints: hasMany('avlm-stop-point'),\n    orderedStops: Ember.computed('stopPoints.@each.routeIndex', function () {\n      const ordinalStops = this.get('stopPoints').reduce((arr, stop) => {\n        arr.push(stop);\n        return arr;\n      }, []);\n      return ordinalStops.sortBy('routeIndex');\n    }),\n    tripStartTime: Ember.computed('stopPoints.@each.tripStartTime', 'startTime', function () {\n      const stopPoints = this.get('stopPoints').toArray();\n      let min = this.get('startTime') ? this.get('startTime') : null;\n      stopPoints.forEach(stopPoint => {\n        if (min) {\n          const tripStartTime = stopPoint.get('tripStartTime');\n\n          if (tripStartTime) {\n            min = Math.min(tripStartTime.getTime(), min);\n          }\n        } else if (stopPoint.get('tripStartTime')) {\n          min = stopPoint.get('tripStartTime').getTime();\n        }\n      });\n      return min ? new Date(min) : null;\n    }),\n    tripEndTime: Ember.computed('stopPoints.@each.tripEndTime', 'endTime', function () {\n      const stopPoints = this.get('stopPoints').toArray();\n      let max = this.get('endTime') ? this.get('endTime') : null;\n      stopPoints.forEach(stopPoint => {\n        if (stopPoint.get('tripEndTime')) {\n          max = Math.max(stopPoint.get('tripEndTime').getTime(), max);\n        }\n      });\n      return max ? new Date(max) : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-driver-app\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n\n  var _default = Model.extend({\n    appVersion: attr('string'),\n    deviceHardwareId: attr('string'),\n    cellularProvider: attr('string'),\n    cellularType: attr('string'),\n    callsign: attr('string'),\n    vehicleId: attr('string'),\n    // ideally this should be linked through avlmDriver -> iqDriver, but we don't\n    // currently get the vehicle's avlm ID through vehicle topic\n    avlmVehicles: hasMany()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-driver-state-event\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default; // notes allowable values in driver state event\n  // A - active - Driver is executing route\n  // F - signedOff - Driver has signed off\n  // B - onBreak - Driver is on Break\n  // T - tempOff - not sure\n  // W - Working, - Driver signed on\n  // E - emergencyOn, - Driver has an emergency\n  // M - emergencyOff - Driver doesn't have an emergency\n\n  const signedOnCode = 'W';\n  const activeCode = 'A';\n\n  var _default = Model.extend({\n    state: attr('string'),\n    updatedAt: attr('date'),\n    createdAt: attr('date'),\n    deletedAt: attr('date'),\n    receivedAt: attr('date'),\n    lat: attr('number'),\n    lng: attr('number'),\n    odo: attr('number'),\n    speed: attr('number'),\n    heading: attr('number'),\n    // latest driver state event\n    // currently it's linked to route-vehicle-driver not if it's necessary to link it to individual models\n    driver: belongsTo('avlm-driver'),\n    vehicle: belongsTo('avlm-vehicle'),\n    route: belongsTo('avlm-route'),\n    routeVehicleDriver: belongsTo('avlm-route-vehicle-driver', {\n      inverse: 'avlmDriverStateEvent'\n    }),\n    schedule: belongsTo('avlm-schedule'),\n    isSignedOn: Ember.computed('state', function () {\n      const state = this.get('state');\n      return state === signedOnCode || state === activeCode;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-driver\", [\"exports\", \"ember-data\", \"adept-iq/utils/workspace-availability\"], function (_exports, _emberData, _workspaceAvailability) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    workspace: Ember.inject.service(),\n    badgeNumber: attr('string'),\n    firstName: attr('string'),\n    middleName: attr('string'),\n    lastName: attr('string'),\n    email: attr('string'),\n    avlmRouteVehicleDrivers: hasMany('avlm-route-vehicle-driver'),\n    workspaceStartTime: Ember.computed.alias('workspace.startDate'),\n    workspaceEndTime: Ember.computed.alias('workspace.endDate'),\n    driverId: Ember.computed.alias('badgeNumber'),\n    latestVehicle: Ember.computed.alias('latestRouteVehicleDriver.vehicle'),\n    latestRoute: Ember.computed.alias('latestRouteVehicleDriver.route'),\n    avlmDriverId: Ember.computed('badgeNumber', 'latestRoute', function () {\n      const routeName = this.get('latestRoute.trackingId');\n      if (routeName && routeName.indexOf('SUP-') > -1) return '';\n      return this.get('badgeNumber');\n    }),\n    latestRouteVehicleDriver: Ember.computed('currentRouteVehicleDrivers.@each.startTime', function () {\n      const routeVehicleDrivers = this.get('currentRouteVehicleDrivers');\n      if (!routeVehicleDrivers) return [];\n      return routeVehicleDrivers.sortBy('startTime').get('lastObject');\n    }),\n    currentRouteVehicleDrivers: Ember.computed('avlmRouteVehicleDrivers.@each.startTime', 'workspaceStartTime', 'workspaceEndTime', function () {\n      let routeVehicleDrivers = this.get('avlmRouteVehicleDrivers');\n      const startTime = this.get('workspaceStartTime');\n      const endTime = this.get('workspaceEndTime');\n      if (!routeVehicleDrivers) return [];\n      routeVehicleDrivers = routeVehicleDrivers.filter(routeVehicleDriver => {\n        if (routeVehicleDriver.get('route.status') === 'C' || routeVehicleDriver.get('route.status') === 'Completed') {\n          (0, _workspaceAvailability.processTimeConstraints)(routeVehicleDriver.get('route.tripStartTime'), routeVehicleDriver.get('route.tripEndTime'), startTime, endTime);\n        } else {\n          return true;\n        }\n      });\n      return routeVehicleDrivers;\n    }),\n    fullName: Ember.computed('firstName', 'middleName', 'lastName', function () {\n      const firstName = this.get('firstName') || '';\n      const middleName = this.get('middleName') || '';\n      const lastName = this.get('lastName') || '';\n      return `${firstName} ${middleName} ${lastName}`.replace(/\\s+/, ' ');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-emergency-message\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.EMERGENCY_PRIORITY_CODE = _exports.CANNED_RESPONSE_TYPE_CODES = _exports.CANNED_RESPONSE_TYPES = void 0;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n  const CANNED_RESPONSE_TYPE_CODES = {\n    'None': 'X',\n    'Acknowledge': 'A',\n    'acknowledged': 'A',\n    'Yes/No': 'Y',\n    'canceled': 'C',\n    'resolved': 'R'\n  }; // these must be kept in sync with `topic-transforms/avlm-message.js`\n\n  _exports.CANNED_RESPONSE_TYPE_CODES = CANNED_RESPONSE_TYPE_CODES;\n  const CANNED_RESPONSE_TYPES = {\n    'X': 'None',\n    'A': 'Acknowledge',\n    'Y': 'Yes/No',\n    'C': 'Cancel',\n    'R': 'Resolve'\n  };\n  _exports.CANNED_RESPONSE_TYPES = CANNED_RESPONSE_TYPES;\n  const EMERGENCY_PRIORITY_CODE = 'E';\n  _exports.EMERGENCY_PRIORITY_CODE = EMERGENCY_PRIORITY_CODE;\n\n  var _default = Model.extend({\n    body: attr('string'),\n    messageNr: attr('string'),\n    replyToMsgId: attr('string'),\n    priority: attr('string', {\n      defaultValue: 'normal'\n    }),\n    createdTime: attr('date', {\n      defaultValue: () => new Date()\n    }),\n    deliveredTime: attr('date'),\n    readTime: attr('date'),\n    deletedTime: attr('date'),\n    responseType: attr('string'),\n    responseMessage: attr('string'),\n    ackTime: attr('date'),\n    driverEndPointType: attr('string'),\n    type: attr('string'),\n    // use for sending canned message to avlm\n    // driver.id uses the externalId of dsDriver\n    // As the IQ system + Avlm, Messages is shared, so at most driver, vehicle, route at most three relationships will be used either prefixed with avlm or not\n    // avlm models for avlm-only at most\n    avlmDriver: belongsTo('avlm-driver'),\n    avlmTrip: belongsTo('avlm-trip'),\n    avlmVehicle: belongsTo('avlm-vehicle'),\n    avlmRoute: belongsTo('avlm-route'),\n    alert: belongsTo('avlm-alert'),\n    // avlmRouteVehicleDriver: belongsTo('avlm-route-vehicle-driver'),\n    replyToMsg: belongsTo('avlm-emergency-message', {\n      inverse: 'replyMessages'\n    }),\n    replyMessages: hasMany('avlm-emergency-message', {\n      inverse: 'replyToMsg'\n    }),\n    // core models required for mvpplus + avlm\n    driver: belongsTo('driver'),\n    vehicle: belongsTo('vehicle'),\n    route: belongsTo('route'),\n    routeVehicleDriver: belongsTo('route-vehicle-driver'),\n    sortedId: Ember.computed('replyToMsgId', 'id', function () {\n      const sortedId = this.get('replyToMsgId') || this.get('id');\n      return parseInt(sortedId, 10);\n    }),\n    latestReplyMessage: Ember.computed('replyMessages', 'replyMessages.@each.deliveredTime', function () {\n      const replyMessages = this.get('replyMessages');\n      if (!replyMessages) return null;\n      return replyMessages.sortBy('startdeliveredTimeTime').get('lastObject');\n    }),\n    updatedBody: Ember.computed('latestReplyMessage', function () {\n      const latestReplyMessageBody = this.get('latestReplyMessage.body');\n\n      if (latestReplyMessageBody) {\n        return latestReplyMessageBody;\n      }\n\n      return this.get('body');\n    }),\n    isEmergency: Ember.computed('priority', 'updatedBody', function () {\n      return this.get('priority') === EMERGENCY_PRIORITY_CODE && this.get('updatedBody') === 'emergency';\n    }),\n    isAcknowledged: Ember.computed('priority', 'updatedBody', 'ackTime', function () {\n      return this.get('priority') === EMERGENCY_PRIORITY_CODE && this.get('updatedBody') === 'acknowledged';\n    }),\n    isAcknowledgedPending: Ember.computed('priority', 'updatedBody', 'ackTime', function () {\n      return this.get('priority') === EMERGENCY_PRIORITY_CODE && this.get('updatedBody') === 'acknowledged' && !this.get('ackTime');\n    }),\n    isResolved: Ember.computed('priority', 'updatedBody', function () {\n      return this.get('priority') === EMERGENCY_PRIORITY_CODE && this.get('updatedBody') === 'resolved';\n    }),\n    isCanceled: Ember.computed('priority', 'updatedBody', function () {\n      return this.get('priority') === EMERGENCY_PRIORITY_CODE && this.get('updatedBody') === 'canceled';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-event\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    timestamp: attr('date'),\n    code: attr('string'),\n    message: attr('string'),\n    description: attr('string'),\n    providerName: attr('string'),\n    createdAt: attr('date'),\n    deletedAt: attr('date'),\n    updateAt: attr('date'),\n    receivedAt: attr('date'),\n    heading: attr('number'),\n    speed: attr('number'),\n    odo: attr('number'),\n    actionType: attr('string'),\n    avlmVehicle: belongsTo('avlm-vehicle'),\n    avlmAlert: belongsTo('avlm-alert'),\n    avlmDriver: belongsTo('avlm-driver'),\n    avlmRoute: belongsTo('avlm-route'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    time: Ember.computed('timestamp', function () {\n      return (0, _moment.default)(this.get('timestamp')).format('hh:mm A');\n    }),\n    latlng: Ember.computed('lat', 'lng', function () {\n      if (!Ember.isNone(this.get('lat')) && !Ember.isNone(this.get('lng'))) {\n        return [`${this.get('lat')}`, `${this.get('lng')}`];\n      }\n\n      return null;\n    }),\n    eventType: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-phone-number\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    areaCode: attr('string'),\n    phoneNumber: attr('string'),\n    extension: attr('string'),\n    type: attr('string'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    formattedPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phone = this.get('phoneNumber');\n      const extension = this.get('extension');\n      const areaCode = this.get('areaCode');\n\n      if (extension) {\n        return `(${areaCode})${phone}-#${extension}`;\n      }\n\n      return `(${areaCode})${phone}`;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-rider-event\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    anchor: attr('string'),\n    type: attr('string'),\n    noteForDriver: attr('string'),\n    scheduledTime: attr('date'),\n    promisedTime: attr('date'),\n    serviceStartTime: attr('date'),\n    serviceEndTime: attr('date'),\n    avlmRider: belongsTo('avlm-rider'),\n    avlmStopPoint: belongsTo('avlm-stop-point'),\n    avlmSchedule: belongsTo('avlm-schedule')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-rider\", [\"exports\", \"ember-data\", \"adept-iq/utils/format-text-extension\"], function (_exports, _emberData, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    firstName: attr('string'),\n    middleName: attr('string'),\n    lastName: attr('string'),\n    email: attr('string'),\n    bookingClientId: attr('string'),\n    phoneNumbers: hasMany('avlm-phone-number'),\n    passengerType: belongsTo('passenger-type'),\n    avlmRiderEvents: hasMany('avlm-rider-event'),\n    anchoredRiderEvent: Ember.computed('avlmRiderEvents.@each.anchor', function () {\n      const anchorRiderEvent = this.get('avlmRiderEvents').filterBy('anchor', 'Y').firstObject;\n      if (!anchorRiderEvent) return [];\n      return anchorRiderEvent;\n    }),\n    anchorStop: Ember.computed('anchoredRiderEvent', function () {\n      const anchorRiderEvent = this.get('anchoredRiderEvent');\n\n      if (anchorRiderEvent.type === 'P') {\n        return 'Pick';\n      }\n\n      return 'Drop';\n    }),\n    formattedPhoneNumbers: Ember.computed('phoneNumbers.[]', function () {\n      const phoneNumbers = [];\n      this.get('phoneNumbers').forEach(function (item) {\n        phoneNumbers.push((0, _formatTextExtension.formatTextExtension)('valueItem', `${item.type}: ${item.get('formattedPhoneNumber')}`));\n      });\n      return {\n        values: phoneNumbers\n      };\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-route-break\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    routeIndex: attr('string'),\n    scheduledTime: attr('date'),\n    promisedTime: attr('date'),\n    serviceStartTime: attr('date'),\n    serviceEndTime: attr('date'),\n    eta: attr('date'),\n    status: attr('string'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    avlmRoute: belongsTo('avlm-route'),\n    avlmAddress: belongsTo('avlm-address'),\n    avlmStopPoint: belongsTo('avlm-stop-point'),\n    etaNavRouteBreak: belongsTo('etanav-route-break')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-route-vehicle-driver\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    startTime: attr('date'),\n    endTime: attr('date'),\n    schedule: belongsTo('avlm-schedule'),\n    route: belongsTo('avlm-route'),\n    vehicle: belongsTo('avlm-vehicle'),\n    driver: belongsTo('avlm-driver'),\n    avlmDriverStateEvent: belongsTo('avlm-driver-state-event')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-route\", [\"exports\", \"ember-data\", \"adept-iq/mixins/otp-label\"], function (_exports, _emberData, _otpLabel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend(_otpLabel.default, {\n    otp: attr('string'),\n    otpValue: attr('number'),\n    status: attr('string'),\n    trackingId: attr('string'),\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    actualStartTime: attr('date'),\n    actualEndTime: attr('date'),\n    providerName: attr('string'),\n    provider: belongsTo(),\n    etaRoute: belongsTo('etanav-route'),\n    navigationPolyline: belongsTo('polyline'),\n    vehicle: belongsTo('avlm-vehicle'),\n    avlmVehicle: Ember.computed.alias('vehicle'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    startAddress: belongsTo('avlm-address'),\n    endAddress: belongsTo('avlm-address'),\n    avlmRouteVehicleDrivers: hasMany('avlm-route-vehicle-driver'),\n    clusters: hasMany('avlm-cluster'),\n    trips: hasMany('avlm-trip'),\n    cannedMessages: hasMany('avlm-canned-message'),\n    emergencyMessages: hasMany('avlm-emergency-message'),\n    avlmRouteBreaks: hasMany('avlm-route-break'),\n    stopPoints: hasMany('avlm-stop-point'),\n\n    allStopsPerformedAvlmlite() {\n      const orderedStops = this.get('orderedStopsWithAllBreaks'); // empty route\n\n      if (!orderedStops || orderedStops.length === 0) return false;\n      const allStopsPerformed = orderedStops.every(stop => stop.get('status') === 'performed');\n      return allStopsPerformed;\n    },\n\n    statusLabel: Ember.computed('status', function () {\n      const status = this.status;\n      let statusLabel = '';\n\n      switch (status) {\n        case 'A':\n          statusLabel = 'Active';\n          break;\n\n        case 'C':\n          statusLabel = 'Completed';\n          break;\n\n        case 'P':\n          statusLabel = 'Pending';\n          break;\n\n        case 'S':\n          statusLabel = 'Assigned';\n          break;\n\n        default:\n          statusLabel = status;\n          break;\n      }\n\n      return statusLabel;\n    }),\n    latestVehicle: Ember.computed.alias('latestRouteVehicleDriver.vehicle'),\n    latestDriver: Ember.computed.alias('latestRouteVehicleDriver.driver'),\n    latestRouteVehicleDriver: Ember.computed('avlmRouteVehicleDrivers.@each.startTime', function () {\n      const routeVehicleDrivers = this.get('avlmRouteVehicleDrivers');\n      if (!routeVehicleDrivers) return [];\n      return routeVehicleDrivers.sortBy('startTime').get('lastObject');\n    }),\n    pullinGarageStop: Ember.computed('stopPoints.[]', function () {\n      return this.get('stopPoints').find(stop => stop.get('stopType') === 'pullinGarage');\n    }),\n    pulloutGarageStop: Ember.computed('stopPoints.[]', function () {\n      return this.get('stopPoints').find(stop => stop.get('stopType') === 'pulloutGarage');\n    }),\n    orderedStopsWithAllBreaks: Ember.computed('orderedClusters.@each.orderedStops', function () {\n      const pulloutGarage = this.get('pulloutGarageStop');\n      const pullinGarage = this.get('pullinGarageStop');\n      const stops = pulloutGarage ? [pulloutGarage] : [];\n      const clusters = this.get('clusters');\n      const stopBreaks = this.get('avlmRouteBreaks').map(routeBreak => routeBreak.get('avlmStopPoint.content'));\n      let ordered = clusters.reduce((arr, cluster) => {\n        let orderedStops = cluster.get('orderedStops');\n        orderedStops = orderedStops.filter(stop => stop.get('parentType') === 'trip');\n        arr.push(...orderedStops);\n        return arr;\n      }, stops);\n\n      if (stopBreaks) {\n        ordered.push(...stopBreaks);\n        ordered = ordered.sortBy('realRouteIndex');\n      }\n\n      if (ordered) {\n        stops.push(...ordered);\n      }\n\n      if (pullinGarage) {\n        stops.push(pullinGarage);\n      }\n\n      return stops;\n    }),\n    orderedStopsWithGaragesAndBreaks: Ember.computed('etaRoute.etaRouteBreaks.@each.{eta,avlmRouteBreak}', 'etaRoute.etaStops.@each.{eta,avlmStopPoint}', 'orderedStopsWithAllBreaks', function () {\n      const etaStopsAndBreaks = [];\n\n      if (!Ember.isEmpty(this.get('etaRoute.etaStops'))) {\n        this.get('etaRoute.etaStops').reduce((arr, stop) => {\n          const {\n            eta,\n            avlmStopPoint\n          } = stop;\n          arr.push({\n            eta,\n            avlmStopPoint\n          });\n          return arr;\n        }, etaStopsAndBreaks);\n      }\n\n      if (!Ember.isEmpty(this.get('etaRoute.etaRouteBreaks'))) {\n        this.get('etaRoute.etaRouteBreaks').reduce((arr, routeBreak) => {\n          const {\n            eta,\n            avlmRouteBreak\n          } = routeBreak;\n          arr.push({\n            eta,\n            avlmStopPoint: avlmRouteBreak.get('avlmStopPoint')\n          });\n          return arr;\n        }, etaStopsAndBreaks);\n      }\n\n      if (Ember.isEmpty(etaStopsAndBreaks)) {\n        return this.get('orderedStopsWithAllBreaks');\n      }\n\n      return etaStopsAndBreaks.sortBy('eta').mapBy('avlmStopPoint');\n    }),\n    onBreak: Ember.computed('orderedStopsWithGaragesAndBreaks', function () {\n      const etaStopsAndBreaks = this.get('orderedStopsWithGaragesAndBreaks');\n\n      if (!Ember.isEmpty(etaStopsAndBreaks)) {\n        return etaStopsAndBreaks.some(stop => stop.get('currentStatus') === 'OnBreak');\n      }\n\n      return false;\n    }),\n    tripStartTime: Ember.computed('trips.@each.tripStartTime', 'plannedStartTime', function () {\n      const trips = this.get('trips');\n      let min = this.get('plannedStartTime') ? this.get('plannedStartTime').getTime() : null;\n      trips.forEach(trip => {\n        if (trip.get('tripStartTime')) {\n          min = Math.min(trip.get('tripStartTime').getTime(), min);\n        }\n      });\n      return min ? new Date(min) : null;\n    }),\n    tripEndTime: Ember.computed('trips.@each.tripEndTime', 'actualEndTime', 'plannedEndTime', function () {\n      const trips = this.get('trips');\n      let max = this.get('actualEndTime') ? this.get('actualEndTime').getTime() : null;\n      const plannedEndTime = this.get('plannedEndTime') ? this.get('plannedEndTime').getTime() : null;\n\n      if (!max) {\n        trips.forEach(trip => {\n          if (trip.get('tripEndTime')) {\n            max = Math.max(trip.get('tripEndTime').getTime(), max);\n          }\n        });\n      }\n\n      if (!max) {\n        max = plannedEndTime;\n      }\n\n      return max ? new Date(max) : null;\n    }),\n    plannedPolylinePoints: Ember.computed('orderedStopsWithGaragesAndBreaks.@each.polylinePoints', function () {\n      const stopPoints = this.get('orderedStopsWithGaragesAndBreaks');\n      if (Ember.isEmpty(stopPoints)) return []; // this returns an array of arrays; it _could_ be flattened, but tomtom\n      // is ok with the data in this format, and this allows for discontiguity\n\n      return stopPoints.reduce((arr, stopPoint) => {\n        const points = stopPoint.get('polylinePoints');\n        if (Ember.isEmpty(points)) return arr;\n        arr.push(points);\n        return arr;\n      }, []);\n    }),\n    otpValueWithSign: Ember.computed('otp', 'otpValue', function () {\n      const otp = this.get('otp');\n      const otpValue = this.get('otpValue');\n      const sign = otp === 'O' || otp === 'E' ? '-' : '+';\n\n      if (otpValue) {\n        return `${sign}${otpValue}`;\n      }\n\n      return '';\n    }),\n    currentStopOrdinalId: Ember.computed('orderedStopsWithGaragesAndBreaks.@each.status', function () {\n      const orderedStops = this.get('orderedStopsWithGaragesAndBreaks');\n      if (!orderedStops) return null;\n\n      for (let i = 0; i < orderedStops.length; i++) {\n        const status = orderedStops[i].get('status');\n\n        if (!status) {\n          return orderedStops[i].get('id');\n        }\n      }\n\n      return null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-schedule\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    startTime: attr('date'),\n    endTime: attr('date'),\n    name: attr('string'),\n    avlmTripRiderAttributes: hasMany('avlm-schedule'),\n    avlmTripRiders: hasMany('avlm-trip-rider'),\n    avlmRiderEvent: hasMany('avlm-rider-event')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-stop-point\", [\"exports\", \"ember-data\", \"adept-iq/mixins/otp-label\", \"adept-iq/utils/convertDistance\", \"adept-iq/config/environment\"], function (_exports, _emberData, _otpLabel, _convertDistance, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.PERFORMED_STOP_STATUS = _exports.NOSHOW_STOP_STATUS = _exports.ARRIVE_STOP_STATUS = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n  const PERFORMED_STOP_STATUS = 'Depart';\n  _exports.PERFORMED_STOP_STATUS = PERFORMED_STOP_STATUS;\n  const NOSHOW_STOP_STATUS = 'No Show';\n  _exports.NOSHOW_STOP_STATUS = NOSHOW_STOP_STATUS;\n  const ARRIVE_STOP_STATUS = 'Arrive';\n  _exports.ARRIVE_STOP_STATUS = ARRIVE_STOP_STATUS;\n  const REMOVE_STATUS = 'R';\n\n  var _default = Model.extend(_otpLabel.default, {\n    activeContext: Ember.inject.service(),\n    routeIndex: attr('number'),\n    eta: attr('date'),\n    status: attr('string'),\n    otp: attr('string'),\n    otpValue: attr('string'),\n    odometer: attr('string'),\n    otpStatus: attr('string'),\n    dwellTime: attr('string'),\n    clusterIndex: attr('number'),\n    arriveLat: attr('number'),\n    arriveLng: attr('number'),\n    departLat: attr('number'),\n    departLng: attr('number'),\n    actualArriveTime: attr('date'),\n    actualDepartTime: attr('date'),\n    avlmTrip: belongsTo('avlm-trip'),\n    avlmCluster: belongsTo('avlm-cluster'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    avlmAddress: belongsTo('avlm-address'),\n    avlmRiderEvent: belongsTo('avlm-rider-event'),\n    routeBreak: belongsTo('avlm-route-break'),\n    polyline: belongsTo('polyline'),\n    // contains the polyline from one stop-point to another stop-point\n    etaNavStopPoint: belongsTo('etanav-stop-point'),\n    stopRoute: belongsTo('avlm-route'),\n\n    /**\n     * Directly populated from Denormalized Fields, No longer computed Ashraf\n     */\n    currentStatus: attr('string', {\n      readOnly: true\n    }),\n    _stopType: attr('string', {\n      readOnly: true\n    }),\n    parentType: attr('string', {\n      readOnly: true\n    }),\n    _lat: attr('number'),\n    _lng: attr('number'),\n    providerName: Ember.computed('avlmTrip.avlmRoute.providerName', 'stopRoute.providerName', function () {\n      if (this.get('avlmTrip.avlmRoute.providerName')) {\n        return this.get('avlmTrip.avlmRoute.providerName');\n      }\n\n      return this.get('stopRoute.providerName');\n    }),\n    actualETA: Ember.computed('eta', 'etaNavStopPoint.eta', 'routeBreak.etaNavRouteBreak.eta', function () {\n      const eta = this.get('eta');\n      const navETA = this.get('etaNavStopPoint.eta');\n      const breakETA = this.get('routeBreak.etaNavRouteBreak.eta');\n\n      if (navETA) {\n        return navETA;\n      }\n\n      if (breakETA) {\n        return breakETA;\n      }\n\n      return eta;\n    }),\n\n    /**\n     * Take lat and lng directly from denormalized widget record\n     * Part of Perf change\n     */\n    lat: Ember.computed('_lat', 'place', 'estimatedBreakLatLng', {\n      get() {\n        const lat = this.get('place.latitude'); // _lat has wrong value, so use place instead\n\n        if (lat) return lat;\n        const estimatedBreakLatLng = this.get('estimatedBreakLatLng');\n        if (estimatedBreakLatLng) return estimatedBreakLatLng[0];\n        return;\n      },\n\n      set(key, value) {\n        this.set('_lat', value);\n        return value;\n      }\n\n    }),\n    lng: Ember.computed('_lng', 'place', 'estimatedBreakLatLng', {\n      get() {\n        const lng = this.get('place.longitude');\n        if (lng) return lng;\n        const estimatedBreakLatLng = this.get('estimatedBreakLatLng');\n        if (estimatedBreakLatLng) return estimatedBreakLatLng[1];\n        return;\n      },\n\n      set(key, value) {\n        this.set('_lng', value);\n        return value;\n      }\n\n    }),\n    place: Ember.computed('avlmAddress', 'routeBreak.avlmAddress', 'stopRoute', function () {\n      const avlmAddress = this.get('avlmAddress.content');\n      const routeBreakPlace = this.get('routeBreak.avlmAddress.content');\n      const startGarage = this.get('stopRoute.startAddress.content');\n      const endGarage = this.get('stopRoute.endAddress.content');\n      const stopType = this.get('stopType');\n      if (avlmAddress) return avlmAddress;\n      if (routeBreakPlace) return routeBreakPlace;\n      if (stopType === 'pulloutGarage' && startGarage) return startGarage;\n      if (stopType === 'pullinGarage' && endGarage) return endGarage;\n      return null;\n    }),\n    stopAddresses: Ember.computed('avlmAddress', 'routeBreak.avlmAddress', 'stopRoute', function () {\n      const avlmAddress = this.get('avlmAddress.content');\n      const routeBreakPlace = this.get('routeBreak.avlmAddress.content');\n      const startGarage = this.get('stopRoute.startAddress.content');\n      const endGarage = this.get('stopRoute.endAddress.content');\n      const stopType = this.get('stopType');\n\n      if (avlmAddress) {\n        return this.extractAddress(avlmAddress.fullAddress);\n      }\n\n      if (routeBreakPlace) {\n        return this.extractAddress(routeBreakPlace.fullAddress);\n      }\n\n      if (stopType === 'pulloutGarage' && startGarage) {\n        return this.extractAddress(startGarage.fullAddress);\n      }\n\n      if (stopType === 'pullinGarage' && endGarage) {\n        return this.extractAddress(endGarage.fullAddress);\n      }\n\n      if (stopType === 'break') {\n        return 'BREAK';\n      }\n\n      return null;\n    }),\n\n    extractAddress(address) {\n      if (address === ' , , , ') {\n        return null;\n      }\n\n      let place = address.trim();\n      /*eslint-disable */\n\n      place.replace(/[&\\==/\\\\#+()$~%-.'\":*?<>{}]/g, '');\n      place = place.replace(/\\//g, '');\n      place = place.replace(/==/g, '');\n      place = place.replace(/\\*/g, '');\n      place = place.replace(/>/g, '');\n      place = place.replace(/</g, '');\n      /*eslint-disable */\n\n      if (place) {\n        return place;\n      }\n\n      return null;\n    },\n\n    provider: Ember.computed('stopRoute.provider', 'avlmCluster.route.provider', function () {\n      if (this.get('stopRoute.provider')) return this.get('stopRoute.provider');\n      return this.get('avlmCluster.route.provider');\n    }),\n    avlmRoute: Ember.computed('stopRoute', 'routeBreak.{avlmRoute,etaNavRouteBreak.etaNavRoute.avlmRoute}', 'avlmCluster.route', 'etaNavStopPoint.etaNavRoute.avlmRoute', function () {\n      // ETA route comes first\n      if (this.get('stopRoute.id')) return this.get('stopRoute');\n      if (this.get('etaNavStopPoint.etaNavRoute.avlmRoute.id')) return this.get('etaNavStopPoint.etaNavRoute.avlmRoute');\n      if (this.get('routeBreak.etaNavRouteBreak.etaNavRoute.avlmRoute.id')) return this.get('routeBreak.etaNavRouteBreak.etaNavRoute.etaNavRouteBreak');\n      if (this.get('routeBreak.avlmRoute.id')) return this.get('routeBreak.avlmRoute');\n      if (this.get('avlmCluster.route.id')) return this.get('avlmCluster.route');\n      return null;\n    }),\n    avlmRouteOnlyBreaks: Ember.computed('stopRoute', 'routeBreak', 'avlmCluster', function () {\n      const stopRoute = this.get('stopRoute.content');\n      const routeBreak = this.get('routeBreak.content');\n      if (stopRoute) return stopRoute;\n      if (routeBreak) return routeBreak.get('avlmRoute');\n      return null;\n    }),\n    // Directly taken from Assembly data\n\n    /* stopType: computed('avlmTrip.{pick,drop}', function() {\n       const pickId = this.get('avlmTrip.pick.id');\n       const dropId = this.get('avlmTrip.drop.id');\n        const id = this.get('id');\n        if (id.includes('DP')) {\n         return 'deployStop';\n       }\n       else if (pickId) {\n         return pickId === id ? 'pick' : 'drop';\n       }\n       else if (dropId) {\n         return dropId === id ? 'drop' : 'pick';\n       }\n       else if (id.includes('GP')) {\n         return 'pulloutGarage';\n       }\n       else if (id.includes('GD')) {\n         return 'pullinGarage';\n       }\n        return 'break';\n     }),*/\n    stopType: Ember.computed('_stopType', 'stopId', function () {\n      const stopType = this.get('_stopType');\n      const stopId = this.get('stopId');\n      if (stopType) return stopType; // handle id prefix\n\n      const [idPrefix] = stopId.match(/^([A-Z])+/) || [''];\n\n      switch (idPrefix) {\n        case '':\n        case 'P':\n          return 'pick';\n\n        case 'D':\n          return 'drop';\n\n        case 'GD':\n          return 'pullinGarage';\n\n        case 'GP':\n          return 'pulloutGarage';\n\n        case 'B':\n          return 'break';\n\n        case 'DP':\n          return 'deployStop';\n\n        default:\n          return;\n      }\n    }),\n    mapId: Ember.computed('stopType', function () {\n      const stopType = this.get('stopType');\n      if (stopType) return stopType;\n    }),\n    stopId: Ember.computed('id', function () {\n      return this.get('id');\n    }),\n    currentStopId: Ember.computed('status', 'stopType', function () {\n      return this.get('avlmCluster.route.currentStopOrdinalId');\n    }),\n    isNext: Ember.computed('stopId', 'currentStopId', function () {\n      const stopId = this.get('stopId');\n      return Ember.isPresent(stopId) && stopId === this.get('currentStopId');\n    }),\n    travelNeeds: Ember.computed.readOnly('avlmTrip.segment.leg.legTravelNeeds'),\n    hasWheelchairTravelNeed: Ember.computed('travelNeeds.@each.isWheelchair', function () {\n      // this check might not be necessary anymore\n      if (_environment.default.APP.avlmLite) return false;\n      const travelNeeds = this.get('travelNeeds');\n      if (Ember.isEmpty(travelNeeds)) return false;\n      return travelNeeds.any(travelNeed => travelNeed.get('isWheelchair'));\n    }),\n    isWheelchair: Ember.computed.readOnly('hasWheelchairTravelNeed'),\n\n    /*parentType: computed('stopType', function() {\n      const stopType = this.get('stopType');\n       switch (stopType) {\n      case 'pick':\n      case 'drop':\n        return 'trip';\n      case 'deployStop':\n        return 'deployStop';\n      default:\n        return 'break';\n      }\n    }),*/\n    realRouteIndex: Ember.computed('routeIndex', 'routeBreak.routeIndex', function () {\n      const breakIndex = this.get('routeBreak.routeIndex');\n      const index = breakIndex ? breakIndex : this.get('routeIndex');\n      if (!index) return null;\n      const t = parseInt(index, 10);\n      return t;\n    }),\n    // Directly taken from Assembled Data\n\n    /*currentStatus: computed('status', 'etaNavStopPoint.status','routeBreak.etaNavRouteBreak.status', function() {\n      let status = this.get('status');\n      let stopType = this.get('stopType');\n      const noShowCodeId = this.get('avlmTrip.noShowCodeId');\n      const etaStatus = this.get('etaNavStopPoint.status');\n      const breakStatus = this.get('routeBreak.etaNavRouteBreak.status');\n       if (!status) {\n        status = 'A';\n      }\n      if (etaStatus) {\n        status = etaStatus;\n      }\n      if (breakStatus) {\n        status = breakStatus;\n      }\n      if (stopType === \"deployStop\" && status === \"performed\") {\n        status = 'Depart';\n      }\n      if (stopType === \"break\" && status === \"arrived\") {\n        status = 'OnBreak';\n      }\n      if (stopType === \"break\" && status === \"OffBreak\") {\n        status = 'performed';\n      }\n      if (noShowCodeId !== '' && noShowCodeId !== null && typeof noShowCodeId !== 'undefined') {\n        status = 'No show';\n      }\n       return status;\n    }),*/\n    statusChanged: Ember.observer('status', function () {\n      const status = this.get('status');\n      const oldStatus = this.get('_oldStatus');\n\n      if (status === REMOVE_STATUS && oldStatus !== REMOVE_STATUS) {\n        // cache old value\n        this.set('_oldStatus', status);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform('avlm-stop-point');\n      } else if (oldStatus === REMOVE_STATUS && status !== REMOVE_STATUS) {\n        // cache old value\n        this.set('_oldStatus', status);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform('avlm-stop-point');\n      }\n    }),\n    etaChange: Ember.observer('eta', function () {\n      const oldETA = this.get('_oldETA');\n      const eta = this.get('eta');\n      if (Ember.isEmpty(eta)) return;\n      if (Ember.isEmpty(oldETA)) return;\n\n      if (oldETA.getTime() !== eta.getTime()) {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform('avlm-stop-point');\n        this.set('_oldETA', eta);\n      }\n    }),\n    convertedOdometer: Ember.computed('odometer', function () {\n      const odometer = this.get('odometer');\n\n      if (odometer) {\n        return (0, _convertDistance.convertMetersToMiles)(odometer);\n      }\n\n      return '';\n    }),\n    otpValueWithSign: Ember.computed('otp', 'otpValue', function () {\n      const otp = this.get('otp');\n      const otpValue = this.get('otpValue');\n      const sign = otp === 'O' || otp === 'E' ? '-' : '+';\n\n      if (otpValue) {\n        return `${sign}${otpValue}`;\n      }\n\n      return '';\n    }),\n    tripStartTime: Ember.computed('avlmTrip.tripStartTime', 'stopRoute.tripStartTime', 'avlmRiderEvent.scheduledTime', 'eta', function () {\n      const tripStartTime = this.get('avlmTrip.content.tripStartTime');\n      const minTripStartTime = this.get('stopRoute.tripStartTime');\n      const eta = this.get('avlmRiderEvent.scheduledTime') ? this.get('avlmRiderEvent.scheduledTime') : this.get('eta');\n\n      switch (this.get('parentType')) {\n        case 'break':\n          return minTripStartTime ? minTripStartTime : eta;\n\n        case 'pulloutGarage':\n        case 'pullinGarage':\n          return minTripStartTime ? minTripStartTime : eta;\n\n        case 'deployStop':\n          return minTripStartTime ? minTripStartTime : eta;\n\n        default:\n          if (minTripStartTime) return minTripStartTime;else if (tripStartTime) return tripStartTime;\n          return eta;\n      }\n    }),\n    tripEndTime: Ember.computed('avlmTrip.tripEndTime', 'stopRoute.tripEndTime', 'avlmRiderEvent.scheduledTime', 'eta', function () {\n      const tripEndTime = this.get('avlmTrip.content.tripEndTime');\n      const maxTripEndTime = this.get('stopRoute.tripEndTime');\n      const eta = this.get('avlmRiderEvent.scheduledTime') ? this.get('avlmRiderEvent.scheduledTime') : this.get('eta');\n\n      switch (this.get('parentType')) {\n        case 'break':\n          return maxTripEndTime ? maxTripEndTime : eta;\n\n        case 'pulloutGarage':\n        case 'pullinGarage':\n          return maxTripEndTime ? maxTripEndTime : eta;\n\n        case 'deployStop':\n          return maxTripEndTime ? maxTripEndTime : eta;\n\n        default:\n          if (maxTripEndTime) return maxTripEndTime;else if (tripEndTime) return tripEndTime;\n          return eta;\n      }\n    }),\n    stopCloseToBreak: Ember.computed('realRouteIndex', 'stopRoute.orderedStopsWithGaragesAndBreaks', function () {\n      const ordinal = this.get('realRouteIndex');\n      const orderedStops = this.get('stopRoute.orderedStopsWithGaragesAndBreaks'); //Comment out - As showing unnecessary log in UI\n\n      /*orderedStops.forEach(stop => {\n        console.log(stop.get('id'), stop.get('realRouteIndex'));\n      });*/\n\n      if (this.get('stopType') === 'break' && ordinal && ordinal > 0 && orderedStops) {\n        // either a stop in front or behind the break\n        const behind = ordinal - 1;\n        const inFront = ordinal + 1; // get infront stop first as the closer stop\n\n        let stop = orderedStops.find(s => s.get('clusterIndex') === inFront && s.get('routeIndex') === 1);\n\n        if (stop) {\n          return stop;\n        } // get behind stop if break is last\n\n\n        stop = orderedStops.find(s => s.get('clusterIndex') === behind && s.get('routeIndex') === 2);\n\n        if (stop) {\n          return stop;\n        }\n      }\n\n      return null;\n    }),\n    estimatedBreakLatLng: Ember.computed('stopCloseToBreak', 'departLat', 'departLng', function () {\n      const stop = this.get('stopCloseToBreak');\n      const departLat = this.get('departLat');\n      const departLng = this.get('departLng');\n\n      if (departLat && departLng) {\n        return [departLat, departLng];\n      }\n\n      if (stop) {\n        // otherwise return an estimated lat,lng\n        const polyline = stop.get('polyline.coords');\n\n        if (polyline) {\n          const median = Math.floor(polyline.length / 2);\n          return polyline[median];\n        }\n      }\n\n      return null;\n    }),\n    polylinePoints: Ember.computed.readOnly('polyline.coords')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-trip-rider-attribute\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    attributeCount: attr('string'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    avlmTripRider: belongsTo('avlm-trip-rider'),\n    avlmAttribute: belongsTo('avlm-attribute')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-trip-rider\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    status: attr('string'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    avlmTrip: belongsTo('avlm-trip'),\n    avlmRider: belongsTo('avlm-rider')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-trip\", [\"exports\", \"ember-data\", \"adept-iq/mixins/otp-label\", \"moment\"], function (_exports, _emberData, _otpLabel, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.REMOVE_STATUS_CONVERTER = void 0;\n  const ESTIMATED_TRIP_GUESS_BY_HOURS = 24;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n  const REMOVE_STATUS_CONVERTER = {\n    'X': 'R'\n  };\n  _exports.REMOVE_STATUS_CONVERTER = REMOVE_STATUS_CONVERTER;\n  const REMOVE_STATUS = 'R';\n\n  var _default = Model.extend(_otpLabel.default, {\n    activeContext: Ember.inject.service(),\n    providerName: attr('string'),\n    status: attr('string'),\n    otp: attr('string'),\n    otpValue: attr('number'),\n    fare: attr('string'),\n    noShowCodeId: attr('string'),\n    externalId: attr('string'),\n    otpStatus: attr('string'),\n    reason: belongsTo('no-show-reason-code'),\n    avlmRoute: belongsTo('avlm-route'),\n    avlmSchedule: belongsTo('avlm-schedule'),\n    avlmStopPoints: hasMany('avlm-stop-point'),\n    avlmTripRider: belongsTo('avlm-trip-rider'),\n    requestedTime: Ember.computed.alias('avlmTripRider.avlmRider.anchoredRiderEvent.scheduledTime'),\n    statusChanged: Ember.observer('status', function () {\n      const status = REMOVE_STATUS_CONVERTER[this.get('status')];\n      const oldStatus = this.get('_oldStatus');\n\n      if (status === REMOVE_STATUS && oldStatus !== REMOVE_STATUS) {\n        // cache old value\n        this.set('_oldStatus', status);\n        this.get('activeContext.topActiveContext').refreshTableContent.perform(['avlm-trip']);\n      } else if (oldStatus === REMOVE_STATUS && status !== REMOVE_STATUS) {\n        // cache old value\n        this.set('_oldStatus', status);\n        this.get('activeContext.topActiveContext').refreshTableContent.perform(['avlm-trip']);\n      }\n    }),\n    mapId: Ember.computed('status', function () {\n      const statusLabel = this.get('statusLabel');\n      return statusLabel;\n    }),\n    actualMiles: Ember.computed('pick.odometer', 'drop.odometer', function () {\n      const pickOdometer = this.get('pick.convertedOdometer');\n      const dropOdometer = this.get('drop.convertedOdometer');\n      if (pickOdometer && dropOdometer) return Math.abs(pickOdometer - dropOdometer);\n    }),\n    otpValueWithSign: Ember.computed('otp', 'otpValue', function () {\n      const otp = this.get('otp');\n      const otpValue = this.get('otpValue');\n      const sign = otp === 'O' || otp === 'E' ? '-' : '+';\n\n      if (otpValue) {\n        return `${sign}${otpValue}`;\n      }\n\n      return '';\n    }),\n    pick: Ember.computed('avlmStopPoints.@each.type', function () {\n      return this.get('avlmStopPoints').sortBy('routeIndex')[0];\n    }),\n    removedStatus: Ember.computed('status', function () {\n      return REMOVE_STATUS_CONVERTER[this.get('status')];\n    }),\n    statusLabel: Ember.computed('status', function () {\n      const status = this.status;\n      const noShowCodeId = this.get('noShowCodeId');\n      let statusLabel = '';\n\n      switch (status) {\n        case 'A':\n          statusLabel = 'Active';\n          break;\n\n        case 'N':\n          statusLabel = 'No show';\n          break;\n\n        case 'C':\n          statusLabel = 'Completed';\n          break;\n\n        case 'X':\n          statusLabel = 'Cancelled';\n          break;\n\n        case 'R':\n          statusLabel = 'Driver Arrived';\n          break;\n\n        case 'P':\n          statusLabel = 'Passenger on board';\n          break;\n\n        case 'O':\n          statusLabel = 'On time';\n          break;\n\n        case 'D':\n          statusLabel = 'In danger';\n          break;\n\n        case 'L':\n          statusLabel = 'Late';\n          break;\n\n        case 'E':\n          statusLabel = 'Early';\n          break;\n\n        default:\n          statusLabel = status;\n          break;\n      }\n\n      if (noShowCodeId !== '' && noShowCodeId !== null && typeof noShowCodeId !== 'undefined') {\n        statusLabel = 'No show';\n      }\n\n      return statusLabel;\n    }),\n    tripStartTime: Ember.computed('pick.{actualArrivalTime,eta}', 'requestedTime', function () {\n      const requestedTime = this.get('requestedTime');\n      const eta = this.get('pick.eta');\n      const pickActualTime = this.get('pick.actualArrivalTime');\n      let actual = null;\n      let planned = null;\n\n      if (requestedTime) {\n        planned = requestedTime.getTime();\n        actual = planned;\n      }\n\n      if (pickActualTime) {\n        actual = pickActualTime.getTime();\n      }\n\n      if (!planned && eta) {\n        planned = eta.getTime();\n      }\n\n      if (!actual) {\n        actual = planned;\n      }\n\n      return new Date(Math.min(actual, planned));\n    }),\n    drop: Ember.computed('avlmStopPoints.@each.type', function () {\n      return this.get('avlmStopPoints').sortBy('routeIndex')[1];\n    }),\n    tripEndTime: Ember.computed('drop.{actualArrivalTime,actualDepartTime,eta}', 'requestedTime', function () {\n      const requestedTime = this.get('requestedTime');\n      const eta = this.get('drop.eta');\n      const actualArrivalTime = this.get('drop.actualArrivalTime');\n      const actualDepartTime = this.get('drop.actualDepartTime');\n      let planned = null;\n      let actualStart = null;\n      let actualEnd = null;\n\n      if (requestedTime) {\n        planned = this.get('requestedTime').getTime();\n        actualStart = planned;\n      }\n\n      if (eta && !actualStart) {\n        actualStart = eta.getTime();\n      }\n\n      if (!actualEnd && actualStart) {\n        return (0, _moment.default)(actualStart).add(ESTIMATED_TRIP_GUESS_BY_HOURS, 'hours').toDate();\n      }\n\n      if (actualArrivalTime) {\n        actualStart = actualArrivalTime.getTime();\n      }\n\n      if (actualDepartTime) {\n        actualEnd = actualDepartTime.getTime();\n      }\n\n      return new Date(Math.max(actualEnd, actualStart));\n    }),\n    routeTripStartTime: Ember.computed('tripStartTime', 'route.tripStartTime', function () {\n      const routeStart = this.get('route.tripStartTime');\n      const tripStart = this.get('tripStartTime');\n\n      if (routeStart) {\n        return routeStart;\n      }\n\n      return tripStart;\n    }),\n    routeTripEndTime: Ember.computed('tripEndTime', 'route.tripEndTime', function () {\n      const routeEnd = this.get('route.tripEndTime');\n      const tripEnd = this.get('tripEndTime');\n\n      if (routeEnd) {\n        return routeEnd;\n      }\n\n      return tripEnd;\n    }),\n    polyline: Ember.computed('pick.{lat,lng}', 'drop.{lat,lng}', function () {\n      const pickLat = this.get('pick.lat');\n      const pickLng = this.get('pick.lng');\n      const dropLat = this.get('drop.lat');\n      const dropLng = this.get('drop.lng');\n\n      if ([pickLat, pickLng, dropLat, dropLng].any(Ember.isNone)) {\n        return null;\n      } // Should display like P----->D, but decorator(>) can only set on start point, so we need to make D as start point\n\n\n      return [[dropLat, dropLng], [pickLat, pickLng]];\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-vehicle-event\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    timestamp: attr('date'),\n    vehicleId: attr('string'),\n    receivedAt: attr('date'),\n    heading: attr('number'),\n    speed: attr('number'),\n    odo: attr('number'),\n    eventType: attr('string', {\n      defaultValue: 'GPS Ping'\n    }),\n    routeId: attr('number'),\n    routeName: attr('number'),\n    stopType: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    stopAddress: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    passengerLName: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    passengerFName: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    passengerId: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    isReconciled: attr('boolean', {\n      defaultValue: false\n    }),\n    vehicle: belongsTo('avlm-vehicle'),\n    tripId: attr('number'),\n    stopId: attr('string'),\n    type: attr('string', {\n      defaultValue: 'GPS Ping'\n    }),\n    time: Ember.computed('timestamp', function () {\n      return (0, _moment.default)(this.get('timestamp')).format('hh:mm A');\n    }),\n    latlng: Ember.computed('lat', 'lng', function () {\n      if (!Ember.isNone(this.get('lat')) && !Ember.isNone(this.get('lng'))) {\n        return [`${this.get('lat')}`, `${this.get('lng')}`];\n      }\n\n      return null;\n    }),\n    eventId: Ember.computed('eventId', function () {\n      return (0, _moment.default)(this.get('timestamp')).format() + this.get('vehicleId');\n    }),\n    formattedStopAddress: Ember.computed('eventType', function () {\n      return this.get('eventType') !== 'GPS Ping' ? this.get('stopAddress') : 'N/A';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-vehicle-info\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    deviceType: attr('string'),\n    deviceVersion: attr('string'),\n    token: attr('string'),\n    appVersion: attr('string'),\n    deviceHardwareId: attr('string'),\n    cellularProvider: attr('string'),\n    cellularType: attr('string'),\n    vehicle: belongsTo('avlm-vehicle')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-vehicle-radius\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    timestamp: attr('date'),\n    vehicleId: attr('number'),\n    receivedAt: attr('date'),\n    heading: attr('number'),\n    speed: attr('number'),\n    odo: attr('number'),\n    driverName: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    driverId: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    otp: attr('string'),\n    provider: attr('string'),\n    vehicleType: attr('string'),\n    time: Ember.computed('timestamp', function () {\n      return (0, _moment.default)(this.get('timestamp')).format('hh:mm A');\n    }),\n    latlng: Ember.computed('lat', 'lng', function () {\n      if (!Ember.isNone(this.get('lat')) && !Ember.isNone(this.get('lng'))) {\n        return [`${this.get('lat')}`, `${this.get('lng')}`];\n      }\n\n      return null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-vehicle\", [\"exports\", \"ember-data\", \"adept-iq/mixins/otp-label\", \"adept-iq/utils/workspace-availability\", \"ember-data-model-fragments/attributes\"], function (_exports, _emberData, _otpLabel, _workspaceAvailability, _attributes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n  var belongsTo = _emberData.default.belongsTo;\n  const RS_ID_PREFIX = 'SUP';\n\n  var _default = Model.extend(_otpLabel.default, {\n    workspace: Ember.inject.service(),\n    callSign: attr('string'),\n    providerName: attr('string'),\n    routeName: attr('string'),\n    otp: attr('string'),\n    vehicleStatus: attr('string'),\n    replyToMessageId: attr('string'),\n    currentDriver: belongsTo('avlm-driver'),\n    isEmergency: Ember.computed.equal('vehicleStatus', 'Emergency Received'),\n    isApprovedEmergency: Ember.computed.equal('vehicleStatus', 'Emergency Acknowledged'),\n    isApprovedEmergencyPending: Ember.computed.equal('vehicleStatus', 'Pending'),\n    provider: belongsTo('provider'),\n    avlmRoute: belongsTo('avlm-route'),\n    etaRoute: belongsTo('etanav-route'),\n    vehicleInfo: belongsTo('avlm-vehicle-info'),\n    cannedMessages: hasMany('avlm-canned-message'),\n    emergencyMessages: hasMany('avlm-emergency-message'),\n    avlmRouteVehicleDrivers: hasMany('avlm-route-vehicle-driver'),\n    avlmEvents: hasMany('avlm-event'),\n    avlmDriverApp: belongsTo(),\n    // only store most current ping\n    avlLocation: (0, _attributes.fragment)('avl-location'),\n    lat: Ember.computed.readOnly('avlLocation.lat'),\n    lng: Ember.computed.readOnly('avlLocation.lng'),\n    heading: Ember.computed.readOnly('avlLocation.heading'),\n    speed: Ember.computed.readOnly('avlLocation.speed'),\n    odo: Ember.computed.readOnly('avlLocation.odo'),\n    timestamp: Ember.computed.readOnly('avlLocation.timestamp'),\n    workspaceStartTime: Ember.computed.alias('workspace.startDate'),\n    workspaceEndTime: Ember.computed.alias('workspace.endDate'),\n    name: Ember.computed.alias('callSign'),\n    latestDriver: Ember.computed('latestRouteVehicleDriver.driver', 'currentDriver', function () {\n      if (this.get('latestRouteVehicleDriver.driver')) return this.get('latestRouteVehicleDriver.driver');\n      return this.get('currentDriver');\n    }),\n    latestRoute: Ember.computed.alias('latestRouteVehicleDriver.route'),\n    latestRouteStatus: Ember.computed.alias('latestRouteVehicleDriver.route.status'),\n    startAddress: Ember.computed.alias('latestRoute.startAddress'),\n    endAddress: Ember.computed.alias('latestRoute.endAddress'),\n    tripStartTime: Ember.computed.alias('latestRoute.tripStartTime'),\n    tripEndTime: Ember.computed.alias('latestRoute.tripEndTime'),\n    isOnBreak: attr('boolean'),\n    driverId: attr('string', {\n      readOnly: true\n    }),\n    driverBadgeNumber: attr('string', {\n      readOnly: true\n    }),\n    driverFullName: attr('string', {\n      readOnly: true\n    }),\n    isBroken: attr('boolean'),\n    isCommFailure: attr('boolean'),\n    isLeaveGarageSignOff: attr('boolean'),\n    isGpsFailure: attr('boolean'),\n    isRoadSupervisor: Ember.computed.equal('trackingIdPrefix', RS_ID_PREFIX),\n    avlmAlert: hasMany('avlm-alert'),\n    //IQUX-3143 on acknowledging emergency, isEmergencyVehicle is set to false, due to which two vehicles are displayed on map on selecting the route.\n    isEmergencyVehicle: Ember.computed('isEmergency', 'isApprovedEmergency', function () {\n      if (this.get('isEmergency') || this.get('isApprovedEmergency')) {\n        return true;\n      }\n\n      return false;\n    }),\n    mapId: Ember.computed('isEmergencyVehicle', 'isApprovedEmergency', 'latestDriver', 'isOnBreak', 'isBroken', 'isCommFailure', 'isLeaveGarageSignOff', 'isGpsFailure', 'isRoadSupervisor', function () {\n      // If the vehicle is on a break, and the vehicle breaks down at the same time, then the vehicle symbol that shall be displayed on the map is 'Vehicle broken down.'\n      // If the vehicle is on a break, and the vehicle runs into an emergency at the same time, then the vehicle symbol that shall be displayed on the map is 'Vehicle Emergency'\n      // If the vehicle is on a break and the route is late at the same time, then the vehicle symbol that shall be displayed on the map is 'Vehicle route started. OTP late'.\n      // If the vehicle is on a break and route is in danger of being late, then the vehicle symbol that shall be displayed on the map is 'Vehicle route started. OTP getting late'.\n      let id = 'avlm-vehicle';\n      const otp = this.get('otp');\n      const isOnBreak = this.get('isOnBreak');\n      const isBroken = this.get('isBroken');\n      const isGpsFailure = this.get('isGpsFailure');\n      const isCommFailure = this.get('isCommFailure');\n      const isLeaveGarageSignOff = this.get('isLeaveGarageSignOff');\n      const isRoadSupervisor = this.get('isRoadSupervisor');\n      const isEmergencyVehicle = this.get('isEmergencyVehicle');\n      const isApprovedEmergency = this.get('isApprovedEmergency');\n\n      if (isBroken) {\n        id += '-breakdown';\n        return id;\n      }\n\n      if (isEmergencyVehicle || isApprovedEmergency) {\n        id += '-emergency';\n        return id;\n      }\n\n      if (isCommFailure) {\n        id += '-communication-failure';\n        return id;\n      } // These events priority are lower than emergency;\n\n\n      switch (otp) {\n        case 'D':\n        case 'In Danger':\n          id += '-danger';\n          return id;\n\n        case 'L':\n        case 'Late':\n          id += '-late';\n          return id;\n\n        default:\n          break;\n      }\n\n      if (isOnBreak) {\n        id += '-break';\n        return id;\n      }\n\n      if (isGpsFailure) {\n        id += '-gps-failure';\n        return id;\n      }\n\n      if (isLeaveGarageSignOff) {\n        id += '-not-signedin';\n        return id;\n      }\n\n      if (isRoadSupervisor) {\n        id += '-roadsup';\n        return id;\n      }\n\n      return id;\n    }),\n    latestRouteVehicleDriver: Ember.computed('currentRouteVehicleDrivers.@each.startTime', function () {\n      const routeVehicleDrivers = this.get('currentRouteVehicleDrivers');\n      if (!routeVehicleDrivers) return [];\n      return routeVehicleDrivers.sortBy('startTime').get('lastObject');\n    }),\n    currentRouteVehicleDrivers: Ember.computed('avlmRouteVehicleDrivers.[]', 'workspaceStartTime', 'workspaceEndTime', function () {\n      let routeVehicleDrivers = this.get('avlmRouteVehicleDrivers');\n      const startTime = this.get('workspaceStartTime');\n      const endTime = this.get('workspaceEndTime');\n      if (!routeVehicleDrivers) return [];\n      routeVehicleDrivers = routeVehicleDrivers.filter(routeVehicleDriver => {\n        if (routeVehicleDriver.get('route.status') === 'C' || routeVehicleDriver.get('route.status') === 'Completed') {\n          return (0, _workspaceAvailability.processTimeConstraints)(routeVehicleDriver.get('route.tripStartTime'), routeVehicleDriver.get('route.tripEndTime'), startTime, endTime);\n        }\n\n        return true;\n      });\n      return routeVehicleDrivers;\n    }),\n    currentVehicleAlert: Ember.computed('avlmAlert.[]', 'workspaceStartTime', 'workspaceEndTime', function () {\n      let vehicleAlerts = this.get('avlmAlert');\n      const startTime = this.get('workspaceStartTime');\n      const endTime = this.get('workspaceEndTime');\n      if (!vehicleAlerts) return [];\n      vehicleAlerts = vehicleAlerts.filter(vehicleAlert => {\n        if ((0, _workspaceAvailability.processTimeConstraints)(vehicleAlert.get('timestamp'), vehicleAlert.get('timestamp'), startTime, endTime)) return vehicleAlert;\n      });\n      return vehicleAlerts;\n    }),\n    sortedAvlmEvents: Ember.computed('avlmEvents.[]', function () {\n      return this.get('avlmEvents').sortBy('receivedAt');\n    }),\n    latestAvlmEvent: Ember.computed('sortedAvlmEvents', function () {\n      return this.get('sortedAvlmEvents').lastObject;\n    }),\n    trackingIdPrefix: Ember.computed('latestRoute.trackingId', function () {\n      const trackingId = this.get('latestRoute.trackingId');\n      if (Ember.isNone(trackingId)) return null;\n      return trackingId.split('-')[0];\n    }),\n    active: Ember.computed('latestDriver', function () {\n      return this.get('latestDriver') ? 'Active' : 'Inactive';\n    }),\n    sortedEmergencyMessages: Ember.computed('emergencyMessages.[]', function () {\n      return this.get('emergencyMessages').sortBy('createdTime');\n    }),\n    // contains an emergency message with status unresolved or acknowledged\n    lastEmergencyMessage: Ember.computed('sortedEmergencyMessages.[]', function () {\n      const emergencyMessage = this.get('sortedEmergencyMessages').lastObject;\n      return emergencyMessage;\n    }),\n    latestReceivedEmergencyMessage: Ember.computed('sortedEmergencyMessages.[]', function () {\n      const emergencyMessages = this.get('sortedEmergencyMessages').toArray();\n\n      for (let i = emergencyMessages.length - 1; i >= 0; i--) {\n        if (emergencyMessages[i].get('isEmergency') || emergencyMessages[i].get('isAcknowledged')) {\n          return emergencyMessages[i];\n        }\n      }\n\n      return null;\n    }),\n    point: Ember.computed.collect('lat', 'lng')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/avlm-zone\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    type: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/booking-activity-log-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/booking\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/config/mapped-status\", \"adept-iq/utils/format-text-extension\", \"adept-iq/config/environment\"], function (_exports, _emberData, _moment, _mappedStatus, _formatTextExtension, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var hasMany = _emberData.default.hasMany;\n  var belongsTo = _emberData.default.belongsTo;\n  const {\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    bookingService: Ember.inject.service('booking'),\n    subscription: belongsTo('subscription'),\n    legs: hasMany('leg'),\n    cancellation: belongsTo('cancellation'),\n    provider: belongsTo('provider'),\n    group: belongsTo('group'),\n    trips: hasMany('trip'),\n    loggingMeta: attr(),\n    isCancelled: Ember.computed('cancellation', 'legs.[]', 'trips', 'subscription', function () {\n      const cancellation = this.get('cancellation');\n\n      if (cancellation && cancellation.get('id')) {\n        return true;\n      }\n\n      return false;\n    }),\n    status: attr(),\n    isSameDayBooking: Ember.computed('legs.[].requestTime', function () {\n      const today = (0, _moment.default)().startOf('day');\n      const endToday = (0, _moment.default)().endOf('day');\n\n      if (!Ember.isEmpty(this.get('legs.firstObject.requestTime'))) {\n        const legTime = (0, _moment.default)(this.get('legs').firstObject.get('requestTime'));\n        return legTime.isBetween(today, endToday);\n      }\n\n      return null;\n    }),\n    firstLegRequestTime: Ember.computed('legs.[].requestTime', function () {\n      if (!Ember.isEmpty(this.get('legs.firstObject.requestTime'))) {\n        const legTime = (0, _moment.default)(this.get('legs').firstObject.get('requestTime'));\n        return legTime;\n      }\n\n      return null;\n    }),\n    firstLegRequestTimeFormat: Ember.computed('legs.[].requestTime', function () {\n      if (!Ember.isEmpty(this.get('legs.firstObject.requestTime'))) {\n        const legTime = (0, _moment.default)(this.get('legs').firstObject.get('requestTime'));\n        return legTime.format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n\n      return null;\n    }),\n    // format equipment per each leg\n    equipments: Ember.computed('legs.[].equipments', function () {\n      const legs = this.get('legs');\n      const equipments = [];\n\n      if (!Ember.isEmpty(legs)) {\n        legs.forEach(leg => {\n          const legEquipments = leg.get('equipments');\n          equipments.push(...legEquipments);\n        });\n      }\n\n      return equipments;\n    }),\n    tripStartTime: Ember.computed('legs.[]', 'trips.@each.routeTripStartTime', function () {\n      const legs = this.get('legs');\n      const trips = this.get('trips');\n      let min = null;\n\n      if (legs.firstObject) {\n        min = legs.firstObject.get('requestTime').getTime();\n      }\n\n      if (trips.firstObject) {\n        min = trips.firstObject.get('routeTripStartTime');\n      }\n\n      if (!Ember.isEmpty(legs)) {\n        legs.forEach(leg => {\n          min = Math.min(min, leg.get('requestTime').getTime());\n        });\n      }\n\n      if (!Ember.isEmpty(trips)) {\n        trips.forEach(trip => {\n          const time = trip.get('routeTripStartTime');\n          if (time) min = Math.min(min, time.getTime());\n        });\n      }\n\n      return min ? new Date(min) : null;\n    }),\n    tripEndTime: Ember.computed('legs.[]', 'trips.@each.routeTripStartTime', function () {\n      const legs = this.get('legs');\n      const trips = this.get('trips');\n      let max = null;\n\n      if (legs.firstObject) {\n        max = legs.firstObject.get('requestTime');\n      }\n\n      if (trips.firstObject) {\n        max = trips.firstObject.get('routeTripEndTime');\n      }\n\n      if (!Ember.isEmpty(legs)) {\n        legs.forEach(leg => {\n          max = Math.max(max, leg.get('requestTime').getTime());\n        });\n      }\n\n      if (!Ember.isEmpty(trips)) {\n        trips.forEach(trip => {\n          const time = trip.get('routeTripEndTime');\n          if (time) max = Math.max(max, time.getTime());\n        });\n      }\n\n      return max ? new Date(max) : null;\n    }),\n    firstLeg: Ember.computed('legs.@each.requestTime', function () {\n      const legs = this.get('legs');\n\n      if (!legs || !legs.length) {\n        return null;\n      }\n\n      return legs.toArray().sortBy('requestTime').firstObject;\n    }),\n    lastLeg: Ember.computed('legs.@each.requestTime', function () {\n      const legs = this.get('legs');\n\n      if (!legs || !legs.length) {\n        return null;\n      }\n\n      return legs.toArray().sortBy('requestTime').firstObject;\n    }),\n    firstTrip: Ember.computed('trips.[]', function () {\n      return this.get('trips').firstObject;\n    }),\n    firstSegmentInFirstLeg: Ember.computed('firstLeg', function () {\n      const segments = this.get('firstLeg.segments').sortBy('id');\n      return segments.firstObject;\n    }),\n    lastSegmentInLastLeg: Ember.computed('lastLeg', function () {\n      const segments = this.get('lastLeg.segments').sortBy('id');\n      return segments.lastObject;\n    }),\n    bookingPickUpAddress: Ember.computed('firstSegmentInFirstLeg', function () {\n      const address = this.get('firstSegmentInFirstLeg.pick.place.address');\n      if (Ember.isEmpty(address)) return '';\n      return address.get('locality') || address.get('subLocality') || address.get('region') || address.get('subRegion');\n    }),\n    bookingDropOffAddress: Ember.computed('lastSegmentInLastLeg', function () {\n      const address = this.get('lastSegmentInLastLeg.drop.place.address');\n      if (Ember.isEmpty(address)) return '';\n      return address.get('locality') || address.get('subLocality') || address.get('region') || address.get('subRegion');\n    }),\n    requestTimeForDisplay: Ember.computed('firstLeg', function () {\n      const firstLeg = this.get('firstLeg');\n      const anchor = firstLeg.get('anchor');\n      const requestTimeObject = firstLeg.get('requestTime');\n      const requestDate = (0, _moment.default)(requestTimeObject).format(_environment.default.dateTimeFormat.dateMoment);\n      const requestTime = (0, _moment.default)(requestTimeObject).format(_environment.default.dateTimeFormat.timeMoment);\n      return `${requestDate} / ${anchor} / ${requestTime}`;\n    }),\n    isGroupBooking: Ember.computed('group', function () {\n      if (this.get('group.id')) {\n        return true;\n      }\n\n      return false;\n    }),\n    isGroupBookingDisplayText: Ember.computed('isGroupBooking', function () {\n      if (this.get('isGroupBooking')) {\n        return 'Yes';\n      }\n\n      return 'No';\n    }),\n    computedStatus: Ember.computed('status', function () {\n      const result = _mappedStatus.convertBookingStatus[this.get('status')];\n\n      return result ? result : this.get('status');\n    }),\n    associatedRiders: Ember.computed('legs.[]', 'bookingService.selectedRiders', function () {\n      const selectedRiders = this.get('bookingService.selectedRiders');\n      const legs = this.get('legs') || [];\n      const associatedRiders = selectedRiders.filter(rider => {\n        const associatedRiderId = rider.get('id');\n        return legs.any(leg => {\n          const legRiderId = leg.get('rider.id');\n          return legRiderId === associatedRiderId;\n        });\n      });\n      return associatedRiders;\n    }),\n\n    formatTextExtensionValues(property) {\n      const associatedRiders = this.get('associatedRiders');\n      const list = associatedRiders.map(associatedRider => {\n        return (0, _formatTextExtension.formatTextExtension)('valueItem', associatedRider.get(property));\n      });\n      return {\n        values: list\n      };\n    },\n\n    associatedRiderRiderIds: Ember.computed('associatedRiders.[]', function () {\n      return this.formatTextExtensionValues('id');\n    }),\n    associatedRiderFirstNames: Ember.computed('associatedRiders.[]', function () {\n      return this.formatTextExtensionValues('firstName');\n    }),\n    associatedRiderLastNames: Ember.computed('associatedRiders.[]', function () {\n      return this.formatTextExtensionValues('lastName');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/break-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.FLOATING_BREAK = _exports.FIXED_BREAK = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n  const FLOATING_BREAK = 'floating';\n  _exports.FLOATING_BREAK = FLOATING_BREAK;\n  const FIXED_BREAK = 'fixed';\n  _exports.FIXED_BREAK = FIXED_BREAK;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    defaultDuration: attr('number'),\n    isPaid: attr('boolean'),\n    isRecognized: attr('boolean'),\n    shiftBreaks: hasMany('shift-break'),\n    routeBreaks: hasMany('route-break'),\n    isFloating: Ember.computed.equal('name', FLOATING_BREAK),\n    isFixed: Ember.computed.equal('name', FIXED_BREAK)\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/breakdown-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    breakdowns: hasMany('vehicle-breakdown')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cancel-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    code: attr('string'),\n    externalCode: attr('string'),\n    description: attr('string'),\n    displayName: attr('string'),\n    name: Ember.computed.alias('description')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cancellation\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    notes: attr('string'),\n    cancelType: belongsTo('cancel-type')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/classification-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cluster\", [\"exports\", \"ember-data\", \"lodash\"], function (_exports, _emberData, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    state: attr('string'),\n    routeOrdinal: attr('number'),\n    dispatchRoute: belongsTo('dispatch-route', {\n      aysnc: false\n    }),\n    dispatchSchedule: belongsTo('dispatch-schedule'),\n    stopPoints: hasMany('stop-point'),\n    startTime: Ember.computed.alias('dispatchRoute.plannedStartTime'),\n    endTime: Ember.computed.alias('dispatchRoute.plannedEndTime'),\n    orderedStops: Ember.computed.sort('stopPoints', 'orderedStopsSortKeys'),\n    orderedStopsSortKeys: ['routeOrdinal'],\n    // eslint-disable-line ember/avoid-leaking-state-in-ember-objects\n    tripStartTime: Ember.computed('stopPoints.@each.tripStartTime', 'startTime', function () {\n      const stopPoints = this.get('stopPoints').toArray();\n      const validDate = this.get('isValidDate');\n      let min = null;\n\n      if (!Ember.isEmpty(stopPoints)) {\n        stopPoints.forEach(stopPoint => {\n          const tripStartTime = stopPoint.get('tripStartTime');\n\n          if (min && validDate(tripStartTime)) {\n            const tripTime = new Date(tripStartTime);\n            min = Math.min(tripTime.getTime(), min);\n          } else if (validDate(tripStartTime)) {\n            const tripTime = new Date(tripStartTime);\n            min = tripTime.getTime();\n          }\n        });\n      } else {\n        min = validDate(this.get('startTime')) ? new Date(this.get('startTime')).getTime() : null;\n      }\n\n      return min ? new Date(min) : null;\n    }),\n    tripEndTime: Ember.computed('stopPoints.@each.tripEndTime', 'endTime', function () {\n      const stopPoints = this.get('stopPoints').toArray();\n      const validDate = this.get('isValidDate');\n      let max = validDate(this.get('endTime')) ? new Date(this.get('endTime')).getTime() : null;\n\n      if (!Ember.isEmpty(stopPoints)) {\n        stopPoints.forEach(stopPoint => {\n          if (validDate(stopPoint.get('tripEndTime'))) {\n            const tripEndTime = new Date(stopPoint.get('tripEndTime'));\n            max = Math.max(tripEndTime.getTime(), max);\n          }\n        });\n      }\n\n      return max ? new Date(max) : null;\n    }),\n    tnVehicleCapacityItinerary: Ember.computed('orderedStops', function () {\n      const initialCounts = {};\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      const itinerary = orderedStops.reduce((it, stopPoint) => {\n        const vehicleCapacityCounts = stopPoint.get('trip.vehicleCapacityCounts');\n        const stopType = stopPoint.get('stopType');\n        if (stopType === 'break') return it;\n        Object.entries(vehicleCapacityCounts).forEach(_ref => {\n          let [travelNeedTypeName, travelNeedTypeValue] = _ref;\n\n          // We only care about count, some travelNeedType is not count we just ignored.\n          if (!isNaN(parseInt(travelNeedTypeValue, 10))) {\n            if (!initialCounts[travelNeedTypeName]) {\n              initialCounts[travelNeedTypeName] = travelNeedTypeValue;\n            } else {\n              const count = travelNeedTypeValue;\n\n              if (stopType === 'pick') {\n                initialCounts[travelNeedTypeName] += count;\n              } else if (stopType === 'drop') {\n                initialCounts[travelNeedTypeName] -= count;\n              }\n            }\n          }\n        });\n        it.push({ ...initialCounts\n        });\n        return it;\n      }, [{ ...initialCounts\n      }]);\n      return itinerary;\n    }),\n    totalTravelNeedCounts: Ember.computed('orderedStops', function () {\n      const initialCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        pca: 0,\n        extraWideLift: 0,\n        flexSeats: []\n      };\n      const maxCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        pca: 0,\n        extraWideLift: 0,\n        flexSeats: []\n      };\n      let nonConsumableTravelNeeds = {};\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      orderedStops.forEach(stopPoint => {\n        const travelNeedCounts = stopPoint.get('trip.travelNeedCounts');\n        const stopType = stopPoint.get('stopType');\n        if (Ember.isEmpty(travelNeedCounts)) return maxCounts;\n\n        if (stopType === 'pick') {\n          Object.entries(travelNeedCounts).forEach(_ref2 => {\n            let [travelNeedTypeName] = _ref2;\n            if (Ember.isNone(initialCounts[travelNeedTypeName])) return;\n            initialCounts[travelNeedTypeName] += travelNeedCounts[travelNeedTypeName];\n          });\n          nonConsumableTravelNeeds = (0, _lodash.merge)(nonConsumableTravelNeeds, travelNeedCounts.nonConsumables);\n        } else if (stopType === 'drop') {\n          Object.entries(travelNeedCounts).forEach(_ref3 => {\n            let [travelNeedTypeName] = _ref3;\n            if (Ember.isNone(initialCounts[travelNeedTypeName])) return;\n            initialCounts[travelNeedTypeName] -= travelNeedCounts[travelNeedTypeName];\n          });\n        }\n\n        Object.entries(initialCounts).forEach(_ref4 => {\n          let [travelNeedTypeName, count] = _ref4;\n          maxCounts[travelNeedTypeName] = Math.max(maxCounts[travelNeedTypeName], count);\n        });\n      });\n      return {\n        nonConsumableTravelNeeds,\n        maxTravelNeedCounts: maxCounts\n      };\n    }),\n    nonConsumableTravelNeeds: Ember.computed.alias('totalTravelNeedCounts.nonConsumableTravelNeeds'),\n    maxTravelNeedCounts: Ember.computed.alias('totalTravelNeedCounts.maxTravelNeedCounts'),\n    maxVehicleCapacityNeedCounts: Ember.computed('tnVehicleCapacityItinerary', function () {\n      const tnVehicleCapacityItinerary = this.get('tnVehicleCapacityItinerary');\n      return tnVehicleCapacityItinerary.reduce((result, vehicleCapacity) => {\n        Object.keys(vehicleCapacity).forEach(key => {\n          result[key] = result[key] ? Math.max(result[key], vehicleCapacity[key]) : vehicleCapacity[key];\n        });\n        return result;\n      }, {});\n    }),\n\n    isValidDate(dateTime) {\n      const daTime = new Date(dateTime);\n      return daTime instanceof Date && !isNaN(daTime);\n    },\n\n    // Consider adding this into Mixins\n    saveWithoutSubmit() {\n      const modelName = this.constructor.modelName;\n      const adapter = this.get('store').adapterFor(modelName);\n      adapter.set('preventSave', true);\n      return this.save();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-config-category\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ELIGIBILITY_CONDITIONS = _exports.ELIGIBILITY_CATEGORY_TYPES = _exports.CONFIG_ELIGIBILITY_CONDITIONS = _exports.CONFIG_ELIGIBILITY_CATEGORY = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  const CONFIG_ELIGIBILITY_CATEGORY = 'config-System_Configuration-eligibility_categories';\n  _exports.CONFIG_ELIGIBILITY_CATEGORY = CONFIG_ELIGIBILITY_CATEGORY;\n  const CONFIG_ELIGIBILITY_CONDITIONS = 'config-System_Configuration-eligibility_conditions';\n  _exports.CONFIG_ELIGIBILITY_CONDITIONS = CONFIG_ELIGIBILITY_CONDITIONS;\n  const ELIGIBILITY_CATEGORY_TYPES = {\n    FULL: 'full',\n    DENY: 'deny',\n    CONDITIONAL: 'conditional'\n  };\n  _exports.ELIGIBILITY_CATEGORY_TYPES = ELIGIBILITY_CATEGORY_TYPES;\n  const ELIGIBILITY_CONDITIONS = {\n    CITY_BLOCKS_1_TO_2: '1 TO 2 CITY BLOCKS',\n    CITY_BLOCKS_3_TO_4: '3 TO 4 CITY BLOCKS',\n    CITY_BLOCKS_5_MORE: '5 OR MORE CITY BLOCKS',\n    CITY_BLOCKS_LESS_THAN_1: 'LESS THAN 1 CITY BLOCK',\n    EXTREME_COLD: 'EXTREME COLD',\n    EXTREME_HEAT: 'EXTREME HEAT',\n    STAIR_RESTRICTED: 'STAIRS RESTRICTED'\n  };\n  _exports.ELIGIBILITY_CONDITIONS = ELIGIBILITY_CONDITIONS;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string', {\n      defaultValue: ''\n    }),\n    path: attr('string'),\n    depth: attr('number'),\n    canDisplay: attr('boolean'),\n    canAdd: attr('boolean'),\n    canDelete: attr('boolean'),\n    minimumItem: attr('number'),\n    parent: belongsTo('cs-config-category', {\n      inverse: 'children'\n    }),\n    children: hasMany('cs-config-category', {\n      inverse: 'parent'\n    }),\n    configItems: hasMany('cs-config-item'),\n    categoryChain: Ember.computed('parent.categoryChain', function () {\n      let categoryChain = [];\n      const parent = this.get('parent');\n\n      if (parent && parent.get('id')) {\n        categoryChain = parent.get('categoryChain');\n      }\n\n      categoryChain.push(this);\n      return categoryChain;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-config-file\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    fileName: attr('string'),\n    mimeType: attr('string'),\n    size: attr('number'),\n    encoded: attr('string'),\n    // Transient only (used during upload, never serialized)\n    file: attr()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-config-item\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    // these determine the `id` when persisted\n    category: attr('string'),\n    name: attr('string'),\n    displayName: attr('string', {\n      defaultValue: ''\n    }),\n    description: attr('string'),\n    fieldConstraint: attr('string'),\n    unit: attr('string'),\n    type: attr('string'),\n    value: attr('object'),\n    defaultValue: attr('object'),\n    configCategory: belongsTo('cs-config-category'),\n    valueString: Ember.computed('value', function () {\n      return JSON.stringify(this.get('value'));\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-config-permission\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    value: attr('object'),\n    isFullAccessTimeline: Ember.computed('value.timeline', function () {\n      if (this.get('value') && this.get('value').timeline) {\n        return this.get('value').timeline[0] === 'fullAccess';\n      }\n\n      return false;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-eligibility-category\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-eligibility-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-exam-type-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-manufacturer-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-passenger-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-rider-place-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-travel-need-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/cs-vehicle-status-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/dashboard\", [\"exports\", \"ember-data\", \"adept-iq/classes/dashboard-instance\", \"lodash\", \"moment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/adapters/dashboard\"], function (_exports, _emberData, _dashboardInstance, _lodash, _moment, _mappedPermIds, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.SUBSCRIPTION_ROLENAME = _exports.SCHEDULE_WORSPACE_RESTRICT_WIDGETS = _exports.SCHEDULE_ROLENAME = _exports.ROAD_SUPERVISOR_ROLENAME = _exports.REPORTS_ROLENAME = _exports.RECONCILE_ROLENAME = _exports.PLAYBACK_ROLENAME = _exports.PERMISSIONS_ROLENAME = _exports.MANAGE_VEHICLE_DRIVER_ROLENAME = _exports.DISPATCH_ROLENAME = _exports.DASHBOARD_ROLES = _exports.BOOK_ROLENAME = _exports.ADHOC_REPORTS_ROLENAME = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n  const DISPATCH_ROLENAME = 'Dispatch';\n  _exports.DISPATCH_ROLENAME = DISPATCH_ROLENAME;\n  const SCHEDULE_ROLENAME = 'Schedule';\n  _exports.SCHEDULE_ROLENAME = SCHEDULE_ROLENAME;\n  const SUBSCRIPTION_ROLENAME = 'Subscription';\n  _exports.SUBSCRIPTION_ROLENAME = SUBSCRIPTION_ROLENAME;\n  const MANAGE_VEHICLE_DRIVER_ROLENAME = 'Driver & Vehicle Management';\n  _exports.MANAGE_VEHICLE_DRIVER_ROLENAME = MANAGE_VEHICLE_DRIVER_ROLENAME;\n  const BOOK_ROLENAME = 'Booking';\n  _exports.BOOK_ROLENAME = BOOK_ROLENAME;\n  const RECONCILE_ROLENAME = 'Reconcile';\n  _exports.RECONCILE_ROLENAME = RECONCILE_ROLENAME;\n  const ROAD_SUPERVISOR_ROLENAME = 'Road Supervisor';\n  _exports.ROAD_SUPERVISOR_ROLENAME = ROAD_SUPERVISOR_ROLENAME;\n  const PLAYBACK_ROLENAME = 'Playback';\n  _exports.PLAYBACK_ROLENAME = PLAYBACK_ROLENAME;\n  const PERMISSIONS_ROLENAME = 'Permissions';\n  _exports.PERMISSIONS_ROLENAME = PERMISSIONS_ROLENAME;\n  const REPORTS_ROLENAME = 'Reports';\n  _exports.REPORTS_ROLENAME = REPORTS_ROLENAME;\n  const ADHOC_REPORTS_ROLENAME = 'Ad Hoc Reports';\n  _exports.ADHOC_REPORTS_ROLENAME = ADHOC_REPORTS_ROLENAME;\n  const DASHBOARD_ROLES = [BOOK_ROLENAME, DISPATCH_ROLENAME, PLAYBACK_ROLENAME, SCHEDULE_ROLENAME, ROAD_SUPERVISOR_ROLENAME, MANAGE_VEHICLE_DRIVER_ROLENAME, RECONCILE_ROLENAME, PERMISSIONS_ROLENAME, REPORTS_ROLENAME, ADHOC_REPORTS_ROLENAME];\n  _exports.DASHBOARD_ROLES = DASHBOARD_ROLES;\n  const CLONEABLE_PROPERTIES = ['name', 'userId', 'role', 'startDate', 'endDate', 'referenceDate', 'mapState', 'widgets', 'widgetStates'];\n  const SCHEDULE_WORSPACE_RESTRICT_WIDGETS = ['messages', 'alerts'];\n  _exports.SCHEDULE_WORSPACE_RESTRICT_WIDGETS = SCHEDULE_WORSPACE_RESTRICT_WIDGETS;\n\n  var _default = Model.extend({\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    name: attr('string', {\n      defaultValue: 'Untitled'\n    }),\n    role: attr('string', {\n      defaultValue: DISPATCH_ROLENAME\n    }),\n    userId: attr('string', {\n      defaultValue: ''\n    }),\n    // 'workspaces-{users,default,admin}'; can't be changed once saved\n    category: attr('string', {\n      defaultValue: 'workspaces-users'\n    }),\n    // absolute timeframe as selected by user\n    startDate: attr('date', {\n      defaultValue: () => {\n        return (0, _moment.default)().startOf('day').toDate();\n      }\n    }),\n    endDate: attr('date', {\n      defaultValue: () => {\n        return (0, _moment.default)().startOf('day').add(1, 'day').add(-1, 'ms').toDate();\n      }\n    }),\n    // when `startDate` or `endDate` is modified, store the user's current date\n    // so that the relative timeframe can be calculated from a later date\n    referenceDate: attr('date', {\n      defaultValue: () => {\n        return (0, _moment.default)().startOf('day').toDate();\n      }\n    }),\n    mapState: attr('object', {\n      defaultValue: () => {}\n    }),\n    widgets: attr('object', {\n      defaultValue: () => []\n    }),\n    widgetStates: attr('object', {\n      defaultValue: () => {}\n    }),\n    isScheduleDashboard: Ember.computed.equal('role', SCHEDULE_ROLENAME),\n    isDispatchDashboard: Ember.computed.equal('role', DISPATCH_ROLENAME),\n    isReconcileDashboard: Ember.computed.equal('role', RECONCILE_ROLENAME),\n    isRoadSupervisorDashboard: Ember.computed.equal('role', ROAD_SUPERVISOR_ROLENAME),\n    isReportsDashboard: Ember.computed.equal('role', REPORTS_ROLENAME),\n    isAdhocReportsDashboard: Ember.computed.equal('role', ADHOC_REPORTS_ROLENAME),\n    isVehicleDriverDashboard: Ember.computed.equal('role', MANAGE_VEHICLE_DRIVER_ROLENAME),\n    // needs a role name (not sure what to use), consider using category instead\n    isRiderManagementDashboard: true,\n    //NYAAR-10198 For now, all users can view passenger data in the Passenger Search tables. Like profile, bookings, trips, subscriptions.\n    isBookingDashboard: Ember.computed.equal('role', BOOK_ROLENAME),\n    //NYAAR-10198 For now, all users can view passenger data in the Passenger Search tables. Like profile, bookings, trips, subscriptions.\n    isPermissionsDashboard: Ember.computed.equal('role', PERMISSIONS_ROLENAME),\n    isPlaybackDashboard: Ember.computed.equal('role', PLAYBACK_ROLENAME),\n    isPlaybackWorkspace: Ember.computed.equal('category', 'workspaces-playback'),\n    isVehicleDriverWorkspace: Ember.computed.equal('category', 'workspaces-vehicleDriver'),\n    isReconcileWorkspace: Ember.computed.equal('category', 'workspaces-reconcile'),\n    isReportsWorkspace: Ember.computed.equal('category', 'workspaces-reports'),\n    isAdhocReportsWorkspace: Ember.computed.equal('category', 'workspaces-adhocReports'),\n    isBookingWorkspace: Ember.computed.equal('category', 'workspaces-booking'),\n    isRiderManagementWorkspace: Ember.computed.equal('category', 'workspaces-riderManagement'),\n    isScheduleWorkspace: Ember.computed.equal('category', 'workspaces-schedule'),\n    isPermissionsWorkspace: Ember.computed.equal('category', 'workspaces-permissions'),\n    isDefaultWorkspace: Ember.computed('category', function () {\n      const category = this.get('category');\n      return _dashboard.DEFAULT_WORKSPACE_CATEGORIES.includes(category);\n    }),\n    isPrivateWorkspace: Ember.computed('category', function () {\n      const userId = this.get('session').data.authenticated.userId.replace(/-/g, '_');\n      const category = this.get('category');\n      return category === `workspaces-${userId}`;\n    }),\n    isPublicWorkspace: Ember.computed('isDefaultWorkspace', 'isPrivateWorkspace', function () {\n      const isPrivateWorkspace = this.get('isPrivateWorkspace');\n      const isDefaultWorkspace = this.get('isDefaultWorkspace');\n      return !isPrivateWorkspace && !isDefaultWorkspace;\n    }),\n\n    configureWidgetsOnPermission() {\n      const configPermissions = this.get('workspace.configPermissions');\n      const widgets = [];\n\n      if (!Ember.isEmpty(this.get('widgets'))) {\n        this.get('widgets').forEach(widget => {\n          let configPermission, widgetPermType;\n          let permWidgetGranted = false;\n\n          if (!Ember.isNone(configPermissions)) {\n            widgetPermType = widget.typeId;\n            configPermission = configPermissions[widget.typeId];\n          }\n\n          switch (widgetPermType) {\n            case 'trips':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showTrips, null);\n              break;\n\n            case 'stops':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showStops, null);\n              break;\n\n            case 'routes':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showRoutes, null);\n              break;\n\n            case 'map':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showMaps, null);\n              break;\n\n            case 'alerts':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showAlerts, null);\n              break;\n\n            case 'drivers':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showDrivers, null);\n              break;\n\n            case 'vehicles':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showVehicles, null);\n              break;\n\n            case 'passengers':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showPassengers, null);\n              break;\n\n            case 'messages':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showMessages, null);\n              break;\n\n            case 'reports':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showReports, null);\n              break;\n\n            case 'subscriptions':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showSubscriptions, null);\n              break;\n\n            case 'users':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showUsers, null);\n              break;\n\n            case 'zones':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showZones, null);\n              break;\n\n            case 'booking':\n              {\n                permWidgetGranted = true;\n                break;\n              }\n\n            case 'riderManagement':\n              {\n                permWidgetGranted = true;\n                break;\n              }\n\n            case 'schedule-metrics':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showSchedule, null);\n              break;\n\n            case 'route-information':\n            case 'history-routes':\n            case 'reconcile-routes':\n            case 'reconcile-trips':\n            case 'reconcile-stops':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.accessReconcileWorkspace, null);\n              break;\n\n            case 'playback':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.playbackVehicle, null);\n              break;\n\n            case 'playback-new':\n              permWidgetGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.playbackVehicle, null);\n              break;\n\n            case 'reconcile':\n              permWidgetGranted = true;\n              break;\n\n            case 'perm-users':\n              permWidgetGranted = true;\n              break;\n\n            case 'perm-roles':\n              permWidgetGranted = true;\n              break;\n\n            default:\n              permWidgetGranted = false;\n          }\n\n          if (!Ember.isNone(configPermission) && configPermission.show && permWidgetGranted) {\n            widgets.push(widget);\n          }\n        });\n      }\n\n      return widgets;\n    },\n\n    configureWidgetsOnWorkspace(widgets) {\n      const role = this.get('role');\n\n      if (!Ember.isEmpty(this.get('widgets'))) {\n        return widgets.filter(widget => {\n          if (widget.blackListedWorkspaces) {\n            return widget.blackListedWorkspaces[role];\n          }\n\n          return true;\n        });\n      }\n\n      return widgets;\n    },\n\n    makeInstance() {\n      let widgets = this.configureWidgetsOnPermission();\n      const widgetStates = this.get('widgetStates');\n      widgets = this.configureWidgetsOnWorkspace(widgets);\n\n      const instance = _dashboardInstance.default.deserialize({\n        schemaVersion: 1,\n        attributes: {\n          id: this.get('id'),\n          name: this.get('name'),\n          role: this.get('role'),\n          startDate: this.get('startDate'),\n          endDate: this.get('endDate'),\n          referenceDate: this.get('referenceDate'),\n          mapState: this.get('mapState'),\n          widgets: widgets,\n          widgetStates: widgetStates\n        }\n      });\n\n      instance.set('model', this);\n      return instance;\n    },\n\n    commitInstance(instance) {\n      let includeWidgetStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const {\n        attributes\n      } = instance.serialize();\n      const {\n        name,\n        role,\n        startDate,\n        endDate,\n        referenceDate,\n        mapState,\n        widgets,\n        widgetStates\n      } = attributes;\n      this.setProperties({\n        name,\n        role,\n        startDate: new Date(startDate),\n        endDate: new Date(endDate),\n        referenceDate: new Date(referenceDate),\n        mapState,\n        widgets\n      });\n\n      if (includeWidgetStates) {\n        this.set('widgetStates', widgetStates);\n      }\n    },\n\n    getOptionsForClone() {\n      const cloneProperties = _lodash.default.cloneDeep(this.getProperties(CLONEABLE_PROPERTIES));\n\n      return cloneProperties;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/dispatch-route\", [\"exports\", \"ember-data\", \"adept-iq/utils/format-text-extension\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"moment\", \"adept-iq/models/vehicle\", \"adept-iq/models/stop-point\"], function (_exports, _emberData, _formatTextExtension, _lodash, _unwrapProxy, _moment, _vehicle, _stopPoint) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ROUTE_STARTED_STATUS = _exports.ROUTE_SIGNED_ON_STATUS = _exports.ROUTE_SIGNED_OFF_STATUS = _exports.ROUTE_SCHEDULED_STATUS = _exports.ROUTE_ON_BREAK_STATUS = _exports.ROUTE_NEW_STATUS = _exports.ROUTE_LOCKED_STATUS = _exports.ROUTE_IN_PROGRESS_STATUS = _exports.ROUTE_ENDED_STATUS = _exports.ROUTE_EMERGENCY_STATUS = _exports.ROUTE_DISPATCHED_STATUS = _exports.ROUTE_COMPLETED_STATUS = _exports.ROUTE_BREAKDOWN_STATUS = _exports.ROUTE_AWAITING_STATUS = _exports.ROUTE_ARCHIVED_STATUS = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  const ROUTE_SCHEDULED_STATUS = 'Scheduled';\n  _exports.ROUTE_SCHEDULED_STATUS = ROUTE_SCHEDULED_STATUS;\n  const ROUTE_NEW_STATUS = 'New';\n  _exports.ROUTE_NEW_STATUS = ROUTE_NEW_STATUS;\n  const ROUTE_DISPATCHED_STATUS = 'Dispatched';\n  _exports.ROUTE_DISPATCHED_STATUS = ROUTE_DISPATCHED_STATUS;\n  const ROUTE_SIGNED_ON_STATUS = 'Signed on';\n  _exports.ROUTE_SIGNED_ON_STATUS = ROUTE_SIGNED_ON_STATUS;\n  const ROUTE_STARTED_STATUS = 'Started';\n  _exports.ROUTE_STARTED_STATUS = ROUTE_STARTED_STATUS;\n  const ROUTE_ENDED_STATUS = 'Route ended';\n  _exports.ROUTE_ENDED_STATUS = ROUTE_ENDED_STATUS;\n  const ROUTE_IN_PROGRESS_STATUS = 'In progress';\n  _exports.ROUTE_IN_PROGRESS_STATUS = ROUTE_IN_PROGRESS_STATUS;\n  const ROUTE_EMERGENCY_STATUS = 'Emergency';\n  _exports.ROUTE_EMERGENCY_STATUS = ROUTE_EMERGENCY_STATUS;\n  const ROUTE_BREAKDOWN_STATUS = 'Breakdown';\n  _exports.ROUTE_BREAKDOWN_STATUS = ROUTE_BREAKDOWN_STATUS;\n  const ROUTE_ON_BREAK_STATUS = 'On break';\n  _exports.ROUTE_ON_BREAK_STATUS = ROUTE_ON_BREAK_STATUS;\n  const ROUTE_COMPLETED_STATUS = 'Route ended';\n  _exports.ROUTE_COMPLETED_STATUS = ROUTE_COMPLETED_STATUS;\n  const ROUTE_SIGNED_OFF_STATUS = 'Signed off';\n  _exports.ROUTE_SIGNED_OFF_STATUS = ROUTE_SIGNED_OFF_STATUS;\n  const ROUTE_AWAITING_STATUS = 'Awaiting status';\n  _exports.ROUTE_AWAITING_STATUS = ROUTE_AWAITING_STATUS;\n  const ROUTE_ARCHIVED_STATUS = 'Archived';\n  _exports.ROUTE_ARCHIVED_STATUS = ROUTE_ARCHIVED_STATUS;\n  const ROUTE_LOCKED_STATUS = 'Locked';\n  _exports.ROUTE_LOCKED_STATUS = ROUTE_LOCKED_STATUS;\n\n  var _default = Model.extend({\n    session: Ember.inject.service(),\n    orderedClustersSortKeys: ['routeOrdinal'],\n    // eslint-disable-line ember/avoid-leaking-state-in-ember-objects\n    lockedForOptimization: attr('boolean'),\n    version: attr('string'),\n    avlmVersion: attr('string'),\n    affinities: attr(),\n    schedulingMode: attr('string'),\n    tripLimit: attr('number'),\n    distanceLimit: attr('number'),\n    provider: belongsTo('provider'),\n    route: belongsTo('route'),\n    dispatchRouteLock: belongsTo('lock'),\n    performedPolyline: belongsTo('polyline'),\n    scheduledPolyline: belongsTo('schedule-polyline'),\n    dispatchSchedule: belongsTo('dispatch-schedule'),\n    routeVehicleDrivers: hasMany('route-vehicle-driver'),\n    // Workaround for ember-data was not able to sync the relationship properly.\n    clusters: hasMany('cluster', {\n      async: false\n    }),\n    _clusters: Ember.computed('clusters', 'clusters.@each.{dispatchRoute,stopPoints}', function () {\n      // Some deleted cluster still remain in array, and reordered cluster won't be deleted, but having empty stopPoints\n      return this.get('clusters').filterBy('dispatchRoute.id').filter(c => c.get('stopPoints.length') > 0);\n    }),\n    // computedStatus from iqux-service\n    routeStatus: attr('string'),\n    // breakdown replacement attributes\n    replacementRouteId: attr('string'),\n    replacementStartTime: attr('date'),\n    replacementEndTime: attr('date'),\n    replacementDriver: belongsTo('driver'),\n    replacementVehicle: belongsTo('vehicle'),\n    replacementMoveAllTrips: attr('boolean'),\n    breakdownPlace: belongsTo('place'),\n    // used for map polyline layer filtering\n    isNavigating: Ember.computed.not('isPerformed'),\n    isPerformed: Ember.computed('route.actualEndTimestamp', function () {\n      const isPerformed = Ember.isPresent(this.get('route.actualEndTimestamp'));\n      return isPerformed;\n    }),\n    vehiclePolyline: Ember.computed.readOnly('route.navigationPolyline'),\n    otp: Ember.computed.readOnly('route.otp'),\n    lockedId: Ember.computed.readOnly('id'),\n    status: Ember.computed.readOnly('computedStatus'),\n    // keep status field untill it's uneeded\n    stopPoints: Ember.computed.readOnly('route.stopPoints'),\n    // used for pullout and pullin\n    plannedStartTime: Ember.computed.alias('latestRouteVehicleDriver.startTime'),\n    plannedEndTime: Ember.computed.alias('latestRouteVehicleDriver.endTime'),\n    startGarage: Ember.computed.alias('assignedVehicle.startGarage'),\n    endGarage: Ember.computed.alias('assignedVehicle.endGarage'),\n    assignedDriverPhoneNumber: Ember.computed.alias('latestRouteVehicleDriver.driverPhoneNumber'),\n    isEmptyRoute: Ember.computed.empty('clusters'),\n    isPerformCoordEmpty: Ember.computed.empty('performedPolyline.coords'),\n\n    /**\n     * /**\n      * @param {Object} param - stop point model represents the row the user clicked on.\n      * @return {Array} - returns all unperformed stops between the pullout garage and k stops\n    */\n    findUnperformedStopsInSequence(stopPoint) {\n      const dispatchRouteId = stopPoint.get('dispatchRoute.id');\n\n      if (dispatchRouteId !== this.get('id')) {\n        return [];\n      }\n\n      const routeOrdinal = stopPoint.get('routeOrdinal');\n      const orderedStopsWithGaragesAndBreaks = this.get('orderedStopsWithGaragesAndBreaks') || [];\n      const stops = orderedStopsWithGaragesAndBreaks.filter(stop => {\n        if (!stop.get('trip.isWaitlisted') && !stop.get('isPerformed') && !stop.get('isBreakPerformed') && !stop.get('isGarage') && stop.get('routeOrdinal') > 0 && stop.get('routeOrdinal') <= routeOrdinal) {\n          return stop;\n        }\n      });\n      return stops.sortBy('routeOrdinal');\n    },\n\n    getFirstUnPeformedStop() {\n      const orderedStopsWithGaragesAndBreaks = this.get('orderedStopsWithGaragesAndBreaks') || [];\n      const stops = orderedStopsWithGaragesAndBreaks.filter(stop => {\n        if (!stop.get('trip.isWaitlisted') && !stop.get('isPerformed') && !stop.get('isBreakPerformed') && !stop.get('isGarage') && stop.get('routeOrdinal') > 0) {\n          return stop;\n        }\n      });\n      return stops.sortBy('routeOrdinal').firstObject;\n    },\n\n    // get un-arrived or un-performed Stops in Sequence after ordinal param\n    getUnArrivedStopsInSequence(ordinal) {\n      const orderedStopsWithBreaks = this.get('orderedStopsWithBreaks') || [];\n      const stops = orderedStopsWithBreaks.filter(stop => {\n        if (!stop.get('isPerformedOrBeingPerformed') && !stop.get('isNoShow') && stop.get('routeOrdinal') > 0 && stop.get('routeOrdinal') > ordinal && !stop.get('trip.isWaitlisted') && !stop.get('trip.isCanceled')) {\n          return stop;\n        }\n      });\n      return stops;\n    },\n\n    getPrevStopPoint(ordinal) {\n      const orderedStopsWithGaragesAndBreaks = this.get('orderedStopsWithGaragesAndBreaks') || [];\n      if (ordinal <= 0) return;\n      return orderedStopsWithGaragesAndBreaks.objectAt(ordinal - 1);\n    },\n\n    getNextStopPoint(ordinal) {\n      const orderedStopsWithGaragesAndBreaks = this.get('orderedStopsWithGaragesAndBreaks') || [];\n      if (ordinal < 0) return;\n      return orderedStopsWithGaragesAndBreaks.objectAt(ordinal + 1);\n    },\n\n    editBreakRouteDuration(driverBreak) {\n      const plannedDuration = parseInt(driverBreak.get('plannedDuration'), 10);\n      const originalPlannedDuration = parseInt(driverBreak.get('originalPlannedDuration'), 10);\n      const estimatedStartTime = (0, _moment.default)(driverBreak.get('requestTime'));\n      const estimatedEndTime = (0, _moment.default)(driverBreak.get('projectedEndDate'));\n      const stopPoint = driverBreak.get('stopPoint');\n      const currentPosition = stopPoint.get('routeOrdinal');\n      const prevStopPoint = this.getPrevStopPoint(currentPosition);\n      const nextStopPoint = this.getNextStopPoint(currentPosition);\n      const prevComputedStartTime = (0, _moment.default)(prevStopPoint.get('computedStartTime')).startOf('second');\n      const prevActualDepartTime = (0, _moment.default)(prevStopPoint.get('actualDepartTime')).startOf('second');\n      let minBreakStartTime = prevComputedStartTime;\n      const maxBreakEndTime = (0, _moment.default)(nextStopPoint.get('availableTimeBeforeStop'));\n\n      if (prevActualDepartTime.isValid() && prevActualDepartTime.isAfter(minBreakStartTime)) {\n        minBreakStartTime = prevActualDepartTime;\n      }\n\n      let slack = Ember.isPresent(stopPoint.get('slackInMinutes')) ? parseInt(stopPoint.get('slackInMinutes'), 10) : 0;\n      const stopEndTime = maxBreakEndTime.clone().add(slack, 'minutes').startOf('second');\n      slack = Ember.isPresent(prevStopPoint.get('slackInMinutes')) ? slack + parseInt(prevStopPoint.get('slackInMinutes'), 10) : slack + 0;\n      let routeOrdinal = -1;\n      if (plannedDuration > originalPlannedDuration + slack) return routeOrdinal;\n\n      if (estimatedStartTime.isSameOrAfter(minBreakStartTime) && estimatedEndTime.isSameOrBefore(stopEndTime)) {\n        routeOrdinal = currentPosition;\n      }\n\n      return routeOrdinal;\n    },\n\n    // find a place to insert a driver break based on the requested time\n    // the duration does not matter from new requirement\n    findNewBreakRoutePosition(driverBreak) {\n      const dispatchRoute = driverBreak.get('route.dispatchRoute');\n      const etaRoute = (0, _unwrapProxy.unwrapProxy)(driverBreak.get('route.etaRoute'));\n      const routePlannedStartTimeMoment = (0, _moment.default)(dispatchRoute.get('plannedStartTime'));\n      const routePlannedStartTime = routePlannedStartTimeMoment;\n      const estimatedStartTime = (0, _moment.default)(driverBreak.get('requestTime')).startOf('minute');\n      const orderedStopsWithBreaks = this.get('orderedStopsWithBreaks') || [];\n      const lastIndex = orderedStopsWithBreaks.length - 1;\n\n      if (Ember.isEmpty(orderedStopsWithBreaks)) {\n        if (Ember.isEmpty(etaRoute)) {\n          return -2;\n        }\n\n        return 1;\n      }\n\n      let routeOrdinal = -1;\n      let onBoardCount = 0;\n      let lastStopStartTime;\n      orderedStopsWithBreaks.forEach((currentStop, currentIndex) => {\n        const isLastStop = currentIndex === lastIndex;\n        const isFirstStop = currentIndex === 0;\n        const stopStartTime = currentStop.get('computedStartEta') ? (0, _moment.default)(currentStop.get('computedStartEta')) : null;\n        const currentStopIsPerformedOrBeingPerformed = currentStop.get('isPerformedOrBeingPerformed');\n        lastStopStartTime = stopStartTime ?? lastStopStartTime; // if break start time is before the first stop\n\n        if (isFirstStop) {\n          if (!currentStopIsPerformedOrBeingPerformed && estimatedStartTime.isBefore(stopStartTime) && estimatedStartTime.isAfter(routePlannedStartTime)) {\n            routeOrdinal = 1;\n          }\n        } // continue if we have not found a spot\n\n\n        if (routeOrdinal === -1) {\n          if (isLastStop) {\n            // if it is the last stop and requested time is after the current stop\n            if (lastStopStartTime && estimatedStartTime.isAfter(lastStopStartTime)) {\n              routeOrdinal = currentStop.get('routeOrdinal') + 1;\n            }\n          } else {\n            if (currentStop.stopType === 'pick') {\n              onBoardCount++;\n            }\n\n            if (currentStop.stopType === 'drop') {\n              onBoardCount--;\n            }\n\n            const nextStop = orderedStopsWithBreaks[currentIndex + 1];\n            const nextStopStartTime = nextStop.get('computedStartEta') ? (0, _moment.default)(nextStop.get('computedStartEta')) : null;\n            const nextStopIsPerformedOrBeingPerformed = Ember.isPresent(nextStop) ? nextStop.get('isPerformedOrBeingPerformed') : false; // if there are no passenger on board and the break start time is after a stop\n\n            if (onBoardCount === 0 && !nextStopIsPerformedOrBeingPerformed && lastStopStartTime && estimatedStartTime.isAfter(lastStopStartTime) && nextStopStartTime && estimatedStartTime.isSameOrBefore(nextStopStartTime)) {\n              routeOrdinal = currentStop.get('routeOrdinal') + 1;\n            }\n          }\n        }\n      });\n      return routeOrdinal;\n    },\n\n    allStopsPerformed() {\n      const orderedStops = this.get('orderedStops');\n      if (!orderedStops) return false; // empty route\n\n      if (!orderedStops || orderedStops.length === 0) return false;\n      const allStopsPerformed = orderedStops.every(stop => stop.get('isPerformed') || stop.get('isNoShow') || stop.get('trip.isWaitlisted') || stop.get('cluster.dispatchRoute.id') !== this.id);\n      return allStopsPerformed;\n    },\n\n    allStopsUnPerformed() {\n      const orderedStops = this.get('orderedStops');\n      if (!orderedStops) return true; // empty route\n\n      if (!orderedStops || orderedStops.length === 0) return true;\n      const allStopsUnPerformed = orderedStops.every(stop => stop.get('notPerformed') || stop.get('isNoShow') || stop.get('trip.isWaitlisted') || stop.get('cluster.dispatchRoute.id') !== this.id);\n      return allStopsUnPerformed;\n    },\n\n    isReplacementRouteCreated(records, routeName) {\n      if (!records) return false; // empty route\n\n      if (!records || records.length === 0) return false;\n      const isRouteCreated = records.some(stop => stop.replacedRouteName && stop.replacedRouteName === routeName);\n      return isRouteCreated;\n    },\n\n    navigationPolyline: Ember.computed('vehiclePolyline', 'orderedStops.@each.isPerformed', 'assignedVehicle.{lat,lng}', 'computedStatus', function () {\n      const computedStatus = this.get('computedStatus'); // hide navigation polyline once the route has ended\n\n      if (computedStatus === ROUTE_COMPLETED_STATUS) return null;\n      const vehiclePolyline = (0, _unwrapProxy.unwrapProxy)(this.get('vehiclePolyline'));\n      const lat = this.get('assignedVehicle.lat');\n      const lng = this.get('assignedVehicle.lng'); // return navigation polyline as driver app is in use\n\n      if (Ember.isPresent(lat) && Ember.isPresent(lng)) {\n        return vehiclePolyline;\n      } // edge case dispatcher performs stops for driver app or the driver app never sends actual gps pings\n      // use stop polyline to give the dispatch an indication of the driver's direction\n\n\n      const pulloutGarageStop = this.get('pulloutGarageStop');\n      const orderedStops = this.get('orderedStops') || [];\n      const currentPerformedStop = (0, _lodash.findLast)(orderedStops, stop => stop.get('isPerformed') && !stop.get('isBreak'));\n      let stopPolyline = Ember.isPresent(currentPerformedStop) ? (0, _unwrapProxy.unwrapProxy)(currentPerformedStop.get('polyline')) : null; // started but none of the stops have been performed use garage pullout polyline\n\n      if (!stopPolyline) {\n        stopPolyline = Ember.isPresent(pulloutGarageStop) ? (0, _unwrapProxy.unwrapProxy)(pulloutGarageStop.get('polyline')) : null;\n      }\n\n      return Ember.isPresent(stopPolyline) ? stopPolyline : vehiclePolyline;\n    }),\n    performedPolylineDispatch: Ember.computed('performedPolyline.@each.coords', 'orderedStopsWithGaragesAndBreaks', function () {\n      const isPerformed = this.get('isPerformed');\n      const isPerformCoordEmpty = this.get('isPerformCoordEmpty');\n      if (!isPerformed) return null;else if (!isPerformCoordEmpty) return this.get('performedPolyline.coords');\n      const allStopsWithGaragesAndBreaks = this.get('orderedStopsWithGaragesAndBreaks');\n      return allStopsWithGaragesAndBreaks.map((stop, index) => {\n        if (index < allStopsWithGaragesAndBreaks.length - 1) return [[stop.lat, stop.lng], [allStopsWithGaragesAndBreaks[index + 1].lat, allStopsWithGaragesAndBreaks[index + 1].lng]];\n        return [[stop.lat, stop.lng], [allStopsWithGaragesAndBreaks[0].lat, allStopsWithGaragesAndBreaks[0].lng]];\n      });\n    }),\n    isCompleted: Ember.computed('status', 'pullinGarageStop', function () {\n      const status = this.get('status');\n      const pullinGarageStop = this.get('pullinGarageStop');\n      if (status === ROUTE_COMPLETED_STATUS) return true;\n      if (Ember.isPresent(pullinGarageStop) && pullinGarageStop.get('computedStatus') === _stopPoint.PULLED_IN_STOP_STATUS) return true;\n      return false;\n    }),\n    isEmergency: Ember.computed('assignedVehicle.lastEmergencyMessage.{isEmergency,isAcknowledged}', function () {\n      const vehicle = this.get('assignedVehicle');\n      return vehicle ? vehicle.get('lastEmergencyMessage.isEmergency') || vehicle.get('lastEmergencyMessage.isAcknowledged') : false;\n    }),\n    isLocked: Ember.computed('dispatchRouteLock.{isLocked,status}', function () {\n      return this.get('dispatchRouteLock.isLocked');\n    }),\n    lockedBy: Ember.computed('dispatchRouteLock.owner.firstName', function () {\n      return `${this.get('dispatchRouteLock.owner.firstName')} ${this.get('dispatchRouteLock.owner.lastName')}`;\n    }),\n    hasStarted: Ember.computed('pulloutGarageStop.isPerformed', function () {\n      const garageStop = this.get('pulloutGarageStop');\n      if (!garageStop) return false;\n      return garageStop.get('isPerformed');\n    }),\n    computedStartTime: Ember.computed('computedStatus', 'pulloutGarageStop.etaNavStopPoint.eta', function () {\n      const computedStatus = this.get('computedStatus');\n\n      if (computedStatus === ROUTE_SCHEDULED_STATUS) {\n        return null;\n      }\n\n      const startTime = this.get('pulloutGarageStop.etaNavStopPoint.eta');\n      if (!startTime) return null;\n      return startTime;\n    }),\n    isLockedByOtherUser: Ember.computed('dispatchRouteLock.isLocked', function () {\n      const userId = this.get('session').data.authenticated.userId;\n      return this.get('dispatchRouteLock.isLocked') && this.get('dispatchRouteLock.owner.id') !== userId;\n    }),\n    pullinGarageStop: Ember.computed('stopPoints.[]', function () {\n      const stopPoints = this.get('stopPoints');\n      if (!stopPoints) return null;\n      return stopPoints.find(stop => stop.get('stopType') === 'pullinGarage');\n    }),\n    pulloutGarageStop: Ember.computed('stopPoints.[]', function () {\n      const stopPoints = this.get('stopPoints');\n      if (!stopPoints) return null;\n      return stopPoints.find(stop => stop.get('stopType') === 'pulloutGarage');\n    }),\n    orderedClusters: Ember.computed('_clusters', '_clusters.@each.tripStatus', function () {\n      const clusters = this.get('_clusters') || [];\n      return clusters.sortBy('routeOrdinal');\n    }),\n    // ordered stops includes break stop points\n    // might be able to remove unnecessary cp orderedStopsWithBreaks\n    orderedStops: Ember.computed('orderedClusters', 'orderedClusters.@each.orderedStops', function () {\n      const orderedClusters = this.get('orderedClusters') || [];\n      if (Ember.isEmpty(orderedClusters)) return null;\n      return orderedClusters.reduce((arr, cluster) => {\n        let stops = cluster.get('orderedStops') || [];\n        stops = stops.filter(stop => stop.get('parentType') === 'trip' || stop.get('parentType') === 'break');\n        arr.push(...stops);\n        return arr;\n      }, []).sortBy('routeOrdinal');\n    }),\n    orderedStopsWithBreaks: Ember.computed('orderedClusters', 'orderedClusters.@each.orderedStops', 'stopPoints.@each.routeOrdinal', function () {\n      const breaks = [];\n      const orderedClusters = this.get('orderedClusters');\n      if (Ember.isEmpty(orderedClusters)) return [];\n      const stopsWithBreaks = orderedClusters.reduce((arr, cluster) => {\n        const stops = cluster.get('orderedStops'); // stops are not always cleared by socket updates when waitlisted\n\n        stops.forEach(stop => {\n          if (!stop.get('trip.isWaitlisted')) {\n            arr.push(stop);\n          }\n        });\n        return arr;\n      }, breaks);\n      return stopsWithBreaks.sortBy('routeOrdinal');\n    }),\n    firstUnDepartedStop: Ember.computed('orderedStops', 'orderedStops.@each.computedStatus', function () {\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      return orderedStops.find(stop => {\n        if (stop.get('isPickOrDrop')) {\n          return !stop.get('isPerformed');\n        }\n\n        return false;\n      });\n    }),\n    orderedStopsWithGarages: Ember.computed('orderedClusters.@each.orderedStops', 'stopPoints.[]', function () {\n      const pulloutGarage = this.get('pulloutGarageStop');\n      const pullinGarage = this.get('pullinGarageStop');\n      const orderedClusters = this.get('orderedClusters');\n      if (Ember.isEmpty(orderedClusters)) return null;\n      const stops = pulloutGarage ? [pulloutGarage] : [];\n      const ordered = orderedClusters.reduce((arr, cluster) => {\n        let orderedStops = cluster.get('orderedStops');\n        orderedStops = orderedStops.filter(stop => stop.get('parentType') === 'trip');\n        arr.push(...orderedStops);\n        return arr;\n      }, stops);\n\n      if (pullinGarage) {\n        ordered.push(pullinGarage);\n      }\n\n      return ordered;\n    }),\n    orderedStopsWithGaragesAndBreaks: Ember.computed('orderedClusters', 'orderedStops', 'stopPoints.@each.routeOrdinal', 'pulloutGarageStop', 'pullinGarageStop', function () {\n      const pulloutGarage = this.get('pulloutGarageStop');\n      const pullinGarage = this.get('pullinGarageStop');\n      const stopsWithBreaks = this.get('orderedStops');\n      const sortKey = 'routeOrdinal';\n      const orderedEtaStops = pulloutGarage ? [pulloutGarage] : [];\n\n      if (stopsWithBreaks) {\n        orderedEtaStops.push(...stopsWithBreaks);\n      }\n\n      if (pulloutGarage) {\n        pulloutGarage.set('routeOrdinal', 0);\n      }\n\n      if (pullinGarage) {\n        const lastOrdinal = orderedEtaStops.get('lastObject.routeOrdinal');\n        pullinGarage.set('routeOrdinal', lastOrdinal + 1);\n        orderedEtaStops.push(pullinGarage);\n      }\n\n      return orderedEtaStops.sortBy(sortKey);\n    }),\n    firstUnperformedStop: Ember.computed('orderedStops', 'orderedStops.@each.computedStatus', function () {\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      return orderedStops.find(stop => {\n        if (stop.get('isPickOrDrop')) {\n          return Ember.isEmpty(stop.get('computedStatus'));\n        }\n\n        return false;\n      });\n    }),\n    lastPerformedStop: Ember.computed('orderedStopsWithBreaks', 'orderedStops', 'orderedStops.@each.computedStatus', function () {\n      const stops = !Ember.isEmpty(this.get('orderedStops')) ? this.get('orderedStops') : this.get('orderedStopsWithBreaks');\n      if (Ember.isEmpty(stops)) return null;\n      const order = stops.filter(stop => stop.get('computedStatus') === 'Departed' || stop.get('computedStatus') === 'Arrived' || stop.get('computedStatus') === 'Off break' || stop.get('computedStatus') === 'On break' || stop.get('computedStatus') === 'No showed' && stop.get('stopType') === 'pick');\n      return order.pop();\n    }),\n    lastDropStop: Ember.computed('orderedStopsWithGaragesAndBreaks', function () {\n      const stops = this.get('orderedStopsWithGaragesAndBreaks');\n      if (Ember.isEmpty(stops)) return null;\n      const stopLength = stops.length - 1;\n      return stops[stopLength - 1]; // stop before garage pullin\n    }),\n    trips: Ember.computed('orderedStopsWithGaragesAndBreaks', function () {\n      const stops = this.get('orderedStopsWithGaragesAndBreaks');\n      if (Ember.isEmpty(stops)) return null;\n      const orderedPickStops = stops.filterBy('isPick');\n      return orderedPickStops.map(pick => (0, _unwrapProxy.unwrapProxy)(pick.get('trip')));\n    }),\n    routeBreaks: Ember.computed('orderedStopsWithGaragesAndBreaks', function () {\n      const stops = this.get('orderedStopsWithGaragesAndBreaks');\n      if (Ember.isEmpty(stops)) return null;\n      return stops.filterBy('isBreak');\n    }),\n    unPerformedTrips: Ember.computed('trips', function () {\n      const trips = this.get('trips') || [];\n      return trips.filter(trip => trip.get('pickStopPoint.notPerformed') && trip.get('dropStopPoint.notPerformed'));\n    }),\n    plannedPolylinePoints: Ember.computed('orderedStopsWithGarages.@each.polylinePoints', function () {\n      const stopPoints = this.get('orderedStopsWithGarages');\n      if (Ember.isEmpty(stopPoints)) return []; // this returns an array of arrays; it _could_ be flattened, but tomtom\n      // is ok with the data in this format, and this allows for discontiguity\n\n      return stopPoints.reduce((arr, stopPoint) => {\n        const points = stopPoint.get('polylinePoints');\n        if (Ember.isEmpty(points)) return arr;\n        arr.push(points);\n        return arr;\n      }, []);\n    }),\n    breakPolylinePoints: Ember.computed('orderedStopsWithGaragesAndBreaks.@each.polylinePoints', function () {\n      const stopPoints = this.get('orderedStopsWithGaragesAndBreaks');\n      if (Ember.isEmpty(stopPoints)) return []; // this returns an array of arrays; it _could_ be flattened, but tomtom\n      // is ok with the data in this format, and this allows for discontiguity\n\n      return stopPoints.reduce((polypoints, stopPoint) => {\n        if (stopPoint.get('routeBreak.breakType.name') === 'floating' && stopPoint.get('stopType') === 'break') {\n          if (stopPoint.get('actualDepartLat') && stopPoint.get('actualDepartLng')) {\n            return [[stopPoint.get('lat'), stopPoint.get('lng')], [stopPoint.get('actualDepartLat'), stopPoint.get('actualDepartLng')]];\n          }\n        }\n\n        return polypoints;\n      }, []);\n    }),\n    currentStopOrdinalId: Ember.computed('orderedStopsWithGaragesAndBreaks.@each.computedStatus', function () {\n      const orderedStops = this.get('orderedStopsWithGaragesAndBreaks');\n      if (!orderedStops) return null;\n\n      for (let i = 0; i < orderedStops.length; i++) {\n        const status = orderedStops[i].get('computedStatus');\n\n        if (Ember.isPresent(status) && status === _stopPoint.PENDING_STOP_STATUS) {\n          return orderedStops[i].get('id');\n        }\n      }\n\n      return null;\n    }),\n    scheduleLocked: Ember.computed('dispatchSchedule.locked', function () {\n      return this.get('dispatchSchedule.locked');\n    }),\n    latestRouteVehicleDriver: Ember.computed('routeVehicleDrivers.@each.startTime', function () {\n      const routeVehicleDrivers = (0, _unwrapProxy.unwrapProxy)(this.get('routeVehicleDrivers'));\n      if (!routeVehicleDrivers) return null;\n      return routeVehicleDrivers.sortBy('startTime').get('lastObject');\n    }),\n    assignedVehicle: Ember.computed('latestRouteVehicleDriver.vehicle', 'route.vehicle', function () {\n      const rvdVehicle = this.get('latestRouteVehicleDriver.vehicle');\n\n      if ((0, _unwrapProxy.unwrapProxy)(rvdVehicle)) {\n        return rvdVehicle;\n      }\n\n      return this.get('route.vehicle');\n    }),\n    assignedDriver: Ember.computed('latestRouteVehicleDriver.driver', 'route.driver', function () {\n      const rvdDriver = this.get('latestRouteVehicleDriver.driver');\n\n      if ((0, _unwrapProxy.unwrapProxy)(rvdDriver)) {\n        return rvdDriver;\n      }\n\n      return this.get('route.driver');\n    }),\n    actualDriverBreaks: Ember.computed('assignedVehicle.shiftBreaks.@each.{start,end}', function () {\n      const driverBreaks = Ember.get(this, 'assignedVehicle.shiftBreaks');\n      const driverBreaksTaken = [];\n\n      if (!Ember.isEmpty(driverBreaks)) {\n        const completedDriverBreaks = (0, _lodash.filter)(driverBreaks.toArray(), driverBreakEvent => {\n          return !Ember.isEmpty(driverBreakEvent.get('end'));\n        });\n        completedDriverBreaks.forEach(function (item) {\n          driverBreaksTaken.push((0, _formatTextExtension.formatTextExtension)('valueItem', `${item.get('breakType.name')}: ${item.get('start')} - ${item.get('end')}`));\n        });\n      }\n\n      return {\n        values: driverBreaksTaken\n      };\n    }),\n    plannedDriverBreaks: Ember.computed('assignedVehicle.shiftBreaks.@each,{estimatedStart,estimatedEnd}', function () {\n      const driverBreaks = [];\n      const shiftBreaks = this.get('assignedVehicle.shiftBreaks');\n\n      if (!Ember.isEmpty(shiftBreaks)) {\n        shiftBreaks.forEach(function (item) {\n          driverBreaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `${item.get('breakType.name')}: ${item.get('estimatedStart')} - ${item.get('estimatedEnd')}`));\n        });\n      }\n\n      return {\n        values: driverBreaks\n      };\n    }),\n    tripStartTime: Ember.computed('_clusters.@each.tripStartTime', 'plannedStartTime', function () {\n      const clusters = this.get('_clusters').toArray();\n      let min = null;\n\n      if (!Ember.isEmpty(clusters)) {\n        clusters.forEach(cluster => {\n          if (cluster.get('tripStartTime')) {\n            if (min) {\n              min = Math.min(cluster.get('tripStartTime').getTime(), min);\n            } else {\n              min = cluster.get('tripStartTime').getTime();\n            }\n          }\n        });\n      } else {\n        min = this.get('plannedStartTime') ? this.get('plannedStartTime').getTime() : null;\n      }\n\n      return min ? new Date(min) : null;\n    }),\n    tripEndTime: Ember.computed('_clusters.@each.tripEndTime', 'plannedEndTime', function () {\n      const clusters = this.get('_clusters').toArray();\n      let max = this.get('plannedEndTime') ? this.get('plannedEndTime').getTime() : null;\n\n      if (!Ember.isEmpty(clusters)) {\n        clusters.forEach(cluster => {\n          if (cluster.get('tripEndTime')) {\n            max = Math.max(cluster.get('tripEndTime').getTime(), max);\n          }\n        });\n      }\n\n      return max ? new Date(max) : null;\n    }),\n    travelNeedItinerary: Ember.computed('orderedStops', function () {\n      const initialCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0\n      };\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      const itinerary = orderedStops.reduce((it, stopPoint) => {\n        const travelNeedCounts = stopPoint.get('trip.travelNeedCounts');\n        const stopType = stopPoint.get('stopType');\n        if (stopType === 'break') return it;\n        Object.entries(travelNeedCounts).forEach(_ref => {\n          let [travelNeedTypeName, travelNeedTypeValue] = _ref;\n\n          // We only care about count, some travelNeedType is not count we just ignored.\n          if (!isNaN(parseInt(travelNeedTypeValue, 10))) {\n            if (!initialCounts[travelNeedTypeName]) {\n              initialCounts[travelNeedTypeName] = travelNeedTypeValue;\n            } else {\n              const count = travelNeedTypeValue;\n\n              if (stopType === 'pick') {\n                initialCounts[travelNeedTypeName] += count;\n              } else if (stopType === 'drop') {\n                initialCounts[travelNeedTypeName] -= count;\n              }\n            }\n          }\n        });\n        it.push({ ...initialCounts\n        });\n        return it;\n      }, [{ ...initialCounts\n      }]);\n      return itinerary;\n    }),\n    tnVehicleCapacityItinerary: Ember.computed('orderedStops', function () {\n      const initialCounts = {};\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      const itinerary = orderedStops.reduce((it, stopPoint) => {\n        const vehicleCapacityCounts = stopPoint.get('trip.vehicleCapacityCounts');\n        const stopType = stopPoint.get('stopType');\n        if (stopType === 'break') return it;\n        Object.entries(vehicleCapacityCounts).forEach(_ref2 => {\n          let [travelNeedTypeName, travelNeedTypeValue] = _ref2;\n\n          // We only care about count, some travelNeedType is not count we just ignored.\n          if (!isNaN(parseInt(travelNeedTypeValue, 10))) {\n            if (!initialCounts[travelNeedTypeName]) {\n              initialCounts[travelNeedTypeName] = travelNeedTypeValue;\n            } else {\n              const count = travelNeedTypeValue;\n\n              if (stopType === 'pick') {\n                initialCounts[travelNeedTypeName] += count;\n              } else if (stopType === 'drop') {\n                initialCounts[travelNeedTypeName] -= count;\n              }\n            }\n          }\n        });\n        it.push({ ...initialCounts\n        });\n        return it;\n      }, [{ ...initialCounts\n      }]);\n      return itinerary;\n    }),\n    totalTravelNeedCounts: Ember.computed('orderedStops', function () {\n      const initialCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        extraWideLift: 0,\n        flexSeats: []\n      };\n      const maxCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        extraWideLift: 0,\n        flexSeats: []\n      };\n      let nonConsumableTravelNeeds = {};\n      const orderedStops = this.get('orderedStops');\n      if (Ember.isEmpty(orderedStops)) return null;\n      orderedStops.forEach(stopPoint => {\n        const travelNeedCounts = stopPoint.get('trip.travelNeedCounts');\n        const stopType = stopPoint.get('stopType');\n        if (Ember.isEmpty(travelNeedCounts)) return maxCounts;\n\n        if (stopType === 'pick') {\n          Object.entries(travelNeedCounts).forEach(_ref3 => {\n            let [travelNeedTypeName] = _ref3;\n            initialCounts[travelNeedTypeName] += travelNeedCounts[travelNeedTypeName];\n          });\n          nonConsumableTravelNeeds = (0, _lodash.merge)(nonConsumableTravelNeeds, travelNeedCounts.nonConsumables);\n        } else if (stopType === 'drop') {\n          Object.entries(travelNeedCounts).forEach(_ref4 => {\n            let [travelNeedTypeName] = _ref4;\n            initialCounts[travelNeedTypeName] -= travelNeedCounts[travelNeedTypeName];\n          });\n        }\n\n        Object.entries(initialCounts).forEach(_ref5 => {\n          let [travelNeedTypeName, count] = _ref5;\n          maxCounts[travelNeedTypeName] = Math.max(maxCounts[travelNeedTypeName], count);\n        });\n      });\n      return {\n        nonConsumableTravelNeeds,\n        maxTravelNeedCounts: maxCounts\n      };\n    }),\n    nonConsumableTravelNeeds: Ember.computed.alias('totalTravelNeedCounts.nonConsumableTravelNeeds'),\n    maxTravelNeedCounts: Ember.computed.alias('totalTravelNeedCounts.maxTravelNeedCounts'),\n    //Using if/else statements to allow multiple possible scenarios\n    computedStatus: Ember.computed('isEmergency', 'assignedDriver', 'assignedVehicle.vehicleStatus', 'route.{actualStartTimestamp,actualEndTimestamp,status}', 'latestRouteVehicleDriver.avlmDriverStateEvent.isSignedOn', 'routeStatus', function () {\n      const routeStatus = this.get('routeStatus'); // return iqux-perf status directly\n\n      if (routeStatus) return routeStatus;\n      const currentStatus = this.get('route.status');\n      const vehicleStatus = this.get('assignedVehicle.vehicleStatus');\n      const driver = (0, _unwrapProxy.unwrapProxy)(this.get('assignedDriver'));\n      const vehicle = (0, _unwrapProxy.unwrapProxy)(this.get('assignedVehicle'));\n      const start = this.get('route.actualStartTimestamp');\n      const end = this.get('route.actualEndTimestamp');\n      const emergency = this.get('isEmergency');\n      const signedOn = this.get('latestRouteVehicleDriver.avlmDriverStateEvent.isSignedOn'); // workaround that route status will be changed back to 'normal' if route got updated.\n      // So if route started and status is normal we set the route status to Inprogress\n\n      if (emergency) {\n        return ROUTE_EMERGENCY_STATUS;\n      } else if (vehicleStatus === _vehicle.VEHICLE_BREAKDOWN_STATUS) {\n        return ROUTE_BREAKDOWN_STATUS;\n      } else if (!driver && vehicle) {\n        return ROUTE_SCHEDULED_STATUS;\n      } else if (signedOn && !start) {\n        return ROUTE_SIGNED_ON_STATUS;\n      } else if (currentStatus === 'Pullout' && start && !end) {\n        return ROUTE_STARTED_STATUS;\n      } else if ((currentStatus === 'Arrive' || currentStatus === 'OffBreak' || currentStatus === 'Depart' || currentStatus === 'normal') && start && !end) {\n        return ROUTE_IN_PROGRESS_STATUS;\n      } else if (currentStatus === 'OnBreak') {\n        return ROUTE_ON_BREAK_STATUS;\n      } else if (end || currentStatus === 'Complete' || currentStatus === 'Pullin') {\n        return ROUTE_COMPLETED_STATUS;\n      } else if (currentStatus === 'normal' && driver && vehicle && !vehicle.placeholder) {\n        return ROUTE_DISPATCHED_STATUS;\n      }\n\n      return ROUTE_AWAITING_STATUS; //Default case for anomalies\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/dispatch-schedule\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    locked: attr('boolean'),\n    schedule: belongsTo('schedule')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-19-a-review\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    examDate: attr('date'),\n    provider: belongsTo('provider'),\n    providerName: Ember.computed.readOnly('provider.name'),\n    driver: belongsTo('driver'),\n    examTypeName: belongsTo('exam-type-name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-accident\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    notification: attr('boolean'),\n    notificationDate: attr('date'),\n    accidentDate: attr('date'),\n    transitVehicleInvolved: attr('boolean'),\n    description: attr('string'),\n    driver: belongsTo('driver'),\n    vehicle: belongsTo('vehicle')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-attribute\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    key: attr('string'),\n    name: attr('string'),\n    driver: belongsTo('driver')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-availability\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/config/environment\", \"ember-cp-validations\", \"adept-iq/utils/regex-functions\"], function (_exports, _emberData, _moment, _environment, _emberCpValidations, _regexFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default; // model validation\n\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    shiftStart: {\n      description: 'Shift Start',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: '{description} cannot be blank.'\n      })]\n    },\n    routeLength: {\n      description: 'Shift Length',\n      validators: [(0, _emberCpValidations.validator)('presence', true), (0, _emberCpValidations.validator)('format', {\n        regex: _regexFunctions.REGEX_HHMM,\n        message: '{description} must be formatted hh:mm.'\n      })]\n    },\n    DOWSelected: {\n      description: 'day of week',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: 'Requires at least 1 {description} selected presence.'\n      }), (0, _emberCpValidations.validator)('length', {\n        min: 1,\n        message: 'Requires at least 1 {description} selected.'\n      })]\n    }\n  });\n\n  var _default = Model.extend(Validations, {\n    DOWSelected: attr(),\n    startTime: attr('iso-date', {\n      defaultValue: null\n    }),\n    endTime: attr('iso-date', {\n      defaultValue: null\n    }),\n    calcEndDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    shiftStart: attr('iso-date', {\n      defaultValue: null\n    }),\n    shiftEnd: attr('iso-date', {\n      defaultValue: null\n    }),\n    routeLength: attr('string'),\n    sunday: attr('boolean'),\n    monday: attr('boolean'),\n    tuesday: attr('boolean'),\n    wednesday: attr('boolean'),\n    thursday: attr('boolean'),\n    friday: attr('boolean'),\n    saturday: attr('boolean'),\n    holiday: attr('boolean'),\n    driver: belongsTo('driver'),\n    driverId: Ember.computed.readOnly('driver.id'),\n    selectedDOWs: Ember.computed('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'holiday', function () {\n      const selectedDOWArray = [];\n      if (this.get('sunday')) selectedDOWArray.push('sunday');\n      if (this.get('monday')) selectedDOWArray.push('monday');\n      if (this.get('tuesday')) selectedDOWArray.push('tuesday');\n      if (this.get('wednesday')) selectedDOWArray.push('wednesday');\n      if (this.get('thursday')) selectedDOWArray.push('thursday');\n      if (this.get('friday')) selectedDOWArray.push('friday');\n      if (this.get('saturday')) selectedDOWArray.push('saturday');\n      if (this.get('holiday')) selectedDOWArray.push('holiday');\n      return selectedDOWArray;\n    }),\n    formattedShiftStart: Ember.computed('shiftStart', function () {\n      const shiftStart = this.get('shiftStart');\n      return (0, _moment.default)(shiftStart).format(_environment.default.dateTimeFormat.timeMoment);\n    }),\n    formattedShiftEnd: Ember.computed('shiftEnd', function () {\n      const shiftEnd = this.get('shiftEnd');\n      return (0, _moment.default)(shiftEnd).format(_environment.default.dateTimeFormat.timeMoment);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-emergency-contact\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string', {\n      defaultValue: ''\n    }),\n    areaCode: attr('string'),\n    phone: attr('string'),\n    extension: attr('string'),\n    driver: belongsTo('driver')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-health\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    bloodPressure: attr('string', {\n      defaultValue: null\n    }),\n    otherHealthCheck: attr('string'),\n    otherHealthCheckNotes: attr('string', {\n      defaultValue: null\n    }),\n    diabetes: attr('boolean'),\n    highBloodPressure: attr('boolean'),\n    correctiveLenses: attr('boolean'),\n    lastPhysicalDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    nextPhysicalDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    lastDiabetesCheckDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    nextDiabetesCheckDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    lastBPDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    nextBPDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    prevPhysicalDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    prevBloodPressureDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    prevDiabetesCheckDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    prevOtherHealthCheckDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    lastOtherHealthCheckDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    nextOtherHealthCheckDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    driver: belongsTo('driver'),\n    provider: belongsTo('provider'),\n    driverPhysicalTypeName: belongsTo('driver-physical-type-name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-license\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    license: attr('string'),\n    issueDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    expiryDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    driver: belongsTo('driver'),\n    violations: hasMany('driver-violation'),\n    classificationName: belongsTo('classification-name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-log\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    description: attr('string'),\n    createDate: attr('date'),\n    provider: belongsTo('provider'),\n    driver: belongsTo('driver')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-phone-number\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    areaCode: attr('string'),\n    phoneNumber: attr('string'),\n    extension: attr('string'),\n    type: attr('string', {\n      defaultValue: 'client'\n    }),\n    description: attr('string', {\n      defaultValue: 'Client phone number'\n    }),\n    mobileCarrier: attr('string', {\n      defaultValue: 'mobile carrier'\n    }),\n    useForSMSNotifications: attr('boolean', {\n      defaultValue: false\n    }),\n    useForVoiceNotifications: attr('boolean', {\n      defaultValue: false\n    }),\n    unformattedPhoneNumber: attr(),\n    driver: belongsTo('driver'),\n    formattedPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phone = this.get('phoneNumber');\n      const extension = this.get('extension');\n      const areaCode = this.get('areaCode');\n\n      if (Ember.isEmpty(phone)) {\n        return '';\n      } else if (extension) {\n        return `(${areaCode}) ${phone} - x${extension}`;\n      }\n\n      return areaCode ? `(${areaCode}) ${phone}` : phone;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-physical-type-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-position-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-provider-note\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    notes: attr('string'),\n    driverProvider: belongsTo('driver-provider')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-provider-notes\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    notes: attr('string'),\n    driverProvider: belongsTo('driver-provider')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-provider\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    siteId: attr('string'),\n    pointsReductionTraining: attr('iso-date', {\n      defaultValue: null\n    }),\n    classroomTrainingDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    refresherTrainingDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    sensitivityTrainingDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    firstAidTrainingDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    employmentStartDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    employmentEndDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    driver: belongsTo('driver'),\n    provider: belongsTo('provider'),\n    driverPositionName: belongsTo('driver-position-name'),\n    employmentStatusName: belongsTo('employment-status-name'),\n    terminationReasonName: belongsTo('termination-reason-name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-state-event\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr; // created new model to display signOn in activity-log of vehicle widget- IQUX-2947\n\n  var _default = Model.extend({\n    content: attr('object'),\n    vehicle: attr('object'),\n    driver: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-suspension\", [\"exports\", \"ember-data\", \"adept-iq/utils/unwrapProxy\", \"moment\"], function (_exports, _emberData, _unwrapProxy, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    description: attr('string'),\n    notes: attr('string', {\n      defaultValue: ''\n    }),\n    startDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    endDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    driverViolation: belongsTo('driver-violation'),\n    driverViolationId: Ember.computed.readOnly('driverViolation.id'),\n    driver: belongsTo('driver'),\n    hasViolation: Ember.computed('driverViolation', function () {\n      const driverViolation = (0, _unwrapProxy.unwrapProxy)(this.get('driverViolation'));\n      return Ember.isPresent(driverViolation);\n    }),\n    isSuspended: Ember.computed('startDate', 'endDate', function () {\n      const curDate = (0, _moment.default)();\n      const startDate = this.get('startDate');\n      const endDate = this.get('endDate');\n\n      if (startDate && endDate) {\n        const momentStart = (0, _moment.default)(startDate);\n        const momentEnd = (0, _moment.default)(endDate);\n        return curDate.isBetween(momentStart, momentEnd);\n      }\n\n      return false;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver-violation\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    description: attr('string'),\n    points: attr('number'),\n    incidentDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    licenseMonitorDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    convictionDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    convictionNotificationDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    driverLicense: belongsTo('driver-license'),\n    driver: belongsTo('driver'),\n    vehicle: belongsTo('vehicle')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/driver\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/format-text-extension\", \"adept-iq/utils/workspace-availability\", \"adept-iq/config/environment\"], function (_exports, _emberData, _moment, _formatTextExtension, _workspaceAvailability, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    workspace: Ember.inject.service(),\n    driverId: attr('string'),\n    firstName: attr('string'),\n    middleName: attr('string'),\n    lastName: attr('string'),\n    notes: attr('string'),\n    ssn: attr('string'),\n    // social security number\n    active: attr('boolean', {\n      defaultValue: true\n    }),\n    placeholder: attr('boolean'),\n    fingerprint: attr('boolean'),\n    birthDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    startDateDs870: attr('iso-date', {\n      defaultValue: null\n    }),\n    seniorityDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    transportPassenger: attr('string'),\n    lastPhysical: attr('iso-date', {\n      defaultValue: null\n    }),\n    peDate1: attr('iso-date', {\n      defaultValue: null\n    }),\n    peDate2: attr('iso-date', {\n      defaultValue: null\n    }),\n    // generated from IQUX-service\n    rvdStartTime: attr('date'),\n    rvdEndTime: attr('date'),\n    rvdHistory: attr('object'),\n    inProgress: attr('boolean'),\n    routeStatus: attr('string'),\n    isCompleted: attr('boolean', {\n      defaultValue: false\n    }),\n    preferredVehicle: belongsTo('vehicle', {\n      inverse: null\n    }),\n    vehicle: belongsTo('vehicle'),\n    //Driver Look Up's\n    driverPosition: belongsTo('driver-position-name'),\n    driverPhysicalType: belongsTo('driver-physical-type-name'),\n    cdlClassificationName: belongsTo('classification-name'),\n    employmentStatus: belongsTo('employment-status-name'),\n    driverTerminationReason: belongsTo('termination-reason-name'),\n    provider: belongsTo('provider'),\n    address: belongsTo('address'),\n    license: belongsTo('driver-license'),\n    driverHealths: hasMany('driver-health'),\n    driverLogs: hasMany('driver-log'),\n    driverProviders: hasMany('driver-provider'),\n    driverAvailabilities: hasMany('driver-availability'),\n    driverSuspensions: hasMany('driver-suspension'),\n    driverAttributes: hasMany('driver-attribute'),\n    phoneNumbers: hasMany('driver-phone-number'),\n    routeVehicleDrivers: hasMany('route-vehicle-driver'),\n    cannedMessages: hasMany('avlm-canned-message'),\n    emergencyContacts: hasMany('driver-emergency-contact'),\n    badgeNumber: Ember.computed.alias('driverId'),\n    preferredVehicleName: Ember.computed.alias('preferredVehicle.name'),\n    workspaceStartTime: Ember.computed.alias('workspace.startDate'),\n    workspaceEndTime: Ember.computed.alias('workspace.endDate'),\n    latestVehicle: Ember.computed.alias('latestRouteVehicleDriver.vehicle'),\n    latestDsRoute: Ember.computed.alias('latestRouteVehicleDriver.route'),\n    providerName: Ember.computed.alias('provider.id'),\n    driverIdAndName: Ember.computed('driverId', 'fullName', function () {\n      const id = this.get('id');\n\n      if (Ember.isEmpty(id)) {\n        return 'None';\n      }\n\n      return `${this.get('driverId')} - ${this.get('fullName')}`;\n    }),\n    fullName: Ember.computed('firstName', 'middleName', 'lastName', function () {\n      return `${Ember.get(this, 'firstName')} ${Ember.get(this, 'middleName') || ''} ${Ember.get(this, 'lastName')}`.replace(/\\s+/, ' ');\n    }),\n    middleInitial: Ember.computed('middleName', function () {\n      const middleName = this.get('middleName');\n      if (!middleName || !middleName.length) return '';\n      return middleName[0];\n    }),\n    latestRouteVehicleDriver: Ember.computed('routeVehicleDrivers.@each.startTime', function () {\n      const routeVehicleDrivers = this.get('routeVehicleDrivers');\n      if (!routeVehicleDrivers) return [];\n      return routeVehicleDrivers.sortBy('startTime').get('lastObject');\n    }),\n    currentRouteVehicleDrivers: Ember.computed('routeVehicleDrivers.@each.startTime', 'workspaceStartTime', 'workspaceEndTime', function () {\n      let routeVehicleDrivers = this.get('routeVehicleDrivers');\n      const startTime = this.get('workspaceStartTime');\n      const endTime = this.get('workspaceEndTime');\n      if (!routeVehicleDrivers) return [];\n      routeVehicleDrivers = routeVehicleDrivers.filter(routeVehicleDriver => (0, _workspaceAvailability.processTimeConstraints)(routeVehicleDriver.get('startTime'), routeVehicleDriver.get('endTime'), startTime, endTime));\n      return routeVehicleDrivers;\n    }),\n    currentVehicle: Ember.computed.alias('currentDriverShift.vehicle'),\n    // TODO: this also needs to depend on current time\n    currentDriverShift: Ember.computed('routeVehicleDrivers.@each.route', function () {\n      const now = (0, _moment.default)();\n      const routeVehicleDrivers = Ember.get(this, 'routeVehicleDrivers');\n\n      if (!Ember.isEmpty(routeVehicleDrivers)) {\n        return routeVehicleDrivers.find(routeVehicleDriver => {\n          const plannedStartTime = routeVehicleDriver.get('route.plannedStartTime');\n          const plannedEndTime = routeVehicleDriver.get('route.plannedEndTime');\n          return (0, _moment.default)(plannedEndTime).isSameOrAfter(now) && (0, _moment.default)(plannedStartTime).isSameOrBefore(now);\n        });\n      }\n\n      return false;\n    }),\n    // used by breakdown replacement\n    // volatile to make sure we get the correct availability\n    // base on current time\n    currentDriverAvailability: Ember.computed('driverAvailabilities.@each.{startTime,endTime}', function () {\n      const now = (0, _moment.default)();\n      const driverAvailabilities = this.get('driverAvailabilities');\n\n      if (!Ember.isEmpty(driverAvailabilities)) {\n        return driverAvailabilities.find(driverAvailability => {\n          const plannedStartTime = driverAvailability.get('startTime');\n          const plannedEndTime = driverAvailability.get('endTime');\n          return (0, _moment.default)(plannedEndTime).isSameOrAfter(now) && (0, _moment.default)(plannedStartTime).isSameOrBefore(now);\n        });\n      }\n    }).volatile(),\n\n    isDriverAvailable(startTime, endTime) {\n      let retVal = true;\n      const driverShifts = Ember.get(this, 'driverShifts');\n\n      if (!Ember.isEmpty(driverShifts)) {\n        driverShifts.forEach(driverShift => {\n          if (startTime.isSameOrAfter(driverShift.get('plannedStartTime')) && startTime.isSameOrBefore(driverShift.get('plannedEndTime')) || endTime.isSameOrAfter(driverShift.get('plannedStartTime')) && endTime.isSameOrBefore(driverShift.get('plannedEndTime'))) {\n            retVal = false;\n          }\n        });\n      }\n\n      return retVal;\n    },\n\n    vehicleId: Ember.computed('currentDriverShift.vehicle.name', function () {\n      return this.get('currentDriverShift.vehicle.name');\n    }),\n    routeId: Ember.computed('currentDriverShift.route.name', function () {\n      return this.get('currentDriverShift.route.id');\n    }),\n    formattedAvailabilities: Ember.computed('driverAvailabilities.[]', 'active', function () {\n      const active = this.get('active');\n      const formattedObject = {\n        header: null,\n        values: []\n      };\n      const availabilities = [];\n      const driverAvailabilities = this.get('driverAvailabilities');\n\n      if (!Ember.isEmpty(driverAvailabilities)) {\n        driverAvailabilities.forEach(function (item) {\n          const startTime = (0, _moment.default)(item.get('startTime'));\n          const endTime = (0, _moment.default)(item.get('endTime'));\n          const now = (0, _moment.default)();\n\n          if (active && now.isBetween(startTime, endTime)) {\n            formattedObject.header = null;\n            availabilities.push((0, _formatTextExtension.formatTextExtension)('mainItem', `${startTime.format(_environment.default.dateTimeFormat.dateMoment)} - ${endTime.format(_environment.default.dateTimeFormat.dateMoment)}`));\n\n            if (item.monday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Monday ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n\n            if (item.tuesday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Tuesday  ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n\n            if (item.wednesday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Wednesday ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n\n            if (item.thursday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Thursday ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n\n            if (item.friday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Friday ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n\n            if (item.saturday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Saturday ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n\n            if (item.sunday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Sunday ${item.formattedShiftStart} -${item.formattedShiftEnd}`));\n            }\n          }\n\n          formattedObject.values = availabilities;\n        });\n      }\n\n      return formattedObject;\n    }),\n    formattedPhoneNumbers: Ember.computed('phoneNumbers.[]', function () {\n      const formattedObject = {\n        header: null,\n        values: []\n      };\n      const phoneNumbers = [];\n      const formattedPhoneNumber = this.get('phoneNumbers');\n\n      if (!Ember.isEmpty(formattedPhoneNumber)) {\n        formattedPhoneNumber.forEach(function (item) {\n          formattedObject.header = item.type;\n          phoneNumbers.push((0, _formatTextExtension.formatTextExtension)('mainItem', `${item.type}`));\n          phoneNumbers.push((0, _formatTextExtension.formatTextExtension)('valueItem', item.get('formattedPhoneNumber')));\n          formattedObject.values = phoneNumbers;\n        });\n      }\n\n      return formattedObject;\n    }),\n    firstPhoneNumber: Ember.computed('formattedPhoneNumbers', function () {\n      const formattedPhoneNumbers = this.get('formattedPhoneNumbers.values').filter(value => value.className === 'valueItem');\n\n      if (!Ember.isEmpty(formattedPhoneNumbers)) {\n        return formattedPhoneNumbers.get('firstObject.value');\n      }\n    }),\n    phoneNumber: Ember.computed('phoneNumbers.[]', function () {\n      return this.get('phoneNumbers.firstObject');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/dwh-route\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var hasMany = _emberData.default.hasMany;\n  const {\n    attr\n  } = _emberData.default;\n\n  var _default = _emberData.default.Model.extend({\n    routeName: attr('string'),\n    routeStatus: attr('string'),\n    status: attr('string'),\n    provider: attr('string'),\n    tenantId: attr('number'),\n    driverId: attr('string'),\n    vehicleName: attr('string'),\n    driverPhoneNumber: attr('string'),\n    driverFirstName: attr('string'),\n    driverLastName: attr('string'),\n    type: attr('string'),\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    actualstarttime: attr('date'),\n    actualendtime: attr('date'),\n    breaks: attr('array'),\n    trips: attr('array'),\n    startGarage: attr('object'),\n    endGarage: attr('object'),\n    reconcileNotes: attr('string'),\n    dwhTrips: hasMany('dwh-trip', {\n      inverse: 'dwhRoute'\n    }),\n    dwhStops: hasMany('dwh-stop-point', {\n      inverse: 'dwhRoute'\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/dwh-stop-point\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var belongsTo = _emberData.default.belongsTo;\n  const {\n    attr\n  } = _emberData.default;\n\n  var _default = _emberData.default.Model.extend({\n    iqid: attr('string'),\n    tripId: attr('string'),\n    stoptype: attr('string'),\n    routeid: attr('string'),\n    routename: attr('string'),\n    routeordinal: attr('number'),\n    provider: attr('string'),\n    tenantId: attr('number'),\n    promisetime: attr('date'),\n    plannedEndTime: attr('date'),\n    actualarrivetime: attr('date'),\n    actualdeparttime: attr('date'),\n    passengerfirstname: attr('string'),\n    passengerlastname: attr('string'),\n    streetnumber: attr('string'),\n    streetaddress: attr('string'),\n    sublocality: attr('string'),\n    locality: attr('string'),\n    subregion: attr('string'),\n    region: attr('string'),\n    postalcode: attr('string'),\n    actualodometer: attr('number'),\n    dwhTrip: belongsTo('dwh-trip'),\n    dwhRoute: belongsTo('dwh-route'),\n    readableAddress: Ember.computed('streetnumber', 'streetaddress', 'locality', 'sublocality', 'region', 'postalcode', function () {\n      const streetNumber = Ember.get(this, 'streetnumber');\n      const streetAddress = Ember.get(this, 'streetaddress'); // const localityOrSubLocality = this.get('locality') || this.get('subLocality') || '';\n      // const region = get(this, 'region');\n      // const postalCode = get(this, 'postalcode');\n\n      const address = [];\n      address.push(streetNumber);\n      address.push(streetAddress);\n      return address.join(' '); // const result = [address.join(' ')];\n      // result.push(localityOrSubLocality);\n      // result.push(region);\n      // result.push(postalCode);\n      // return result.join(', ');\n    }).readOnly()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/dwh-trip\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  const {\n    attr\n  } = _emberData.default;\n\n  var _default = _emberData.default.Model.extend({\n    tripId: attr('string'),\n    routeId: attr('number'),\n    routeName: attr('string'),\n    provider: attr('string'),\n    tenantId: attr('number'),\n    driver: attr('object'),\n    vehicle: attr('object'),\n    rider: attr('object'),\n    start: attr('object'),\n    end: attr('object'),\n    anchor: attr('string'),\n    tripStatus: attr('string'),\n    statusReason: attr('string'),\n    tripPurpose: attr('string'),\n    fare: attr('number'),\n    fareCategoryDisplayName: attr('string'),\n    type: attr('string'),\n    paymentTypeName: attr('string'),\n    serviceCalcStartTime: attr('date'),\n    serviceCalcEndTime: attr('date'),\n    pca: attr('number'),\n    companions: attr('number'),\n    wcSeats: attr('number'),\n    requestTime: attr('date'),\n    promiseTime: attr('date'),\n    pickTime: attr('date'),\n    dropTime: attr('date'),\n    actualPickTime: attr('date'),\n    actualDropTime: attr('date'),\n    actualMiles: attr('number'),\n    reconcileNotes: attr('string'),\n    dwhRoute: belongsTo('dwh-route'),\n    dwhStops: hasMany('dwh-stop-point', {\n      inverse: 'dwhTrip'\n    }),\n    startAddress: Ember.computed('start.address.{pickStreetNumber,pickStreetAddress}', function () {\n      const streetNumber = Ember.get(this, 'start.address.pickStreetNumber');\n      const streetAddress = Ember.get(this, 'start.address.pickStreetAddress');\n      const address = [];\n      address.push(streetNumber);\n      address.push(streetAddress);\n      return address.join(' ');\n    }).readOnly(),\n    endAddress: Ember.computed('end.address.{dropStreetNumber,dropStreetAddress}', function () {\n      const streetNumber = Ember.get(this, 'end.address.dropStreetNumber');\n      const streetAddress = Ember.get(this, 'end.address.dropStreetAddress');\n      const address = [];\n      address.push(streetNumber);\n      address.push(streetAddress);\n      return address.join(' ');\n    }).readOnly()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/eligibility-category\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/eligibility-condition\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/eligibility-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/employment-status-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/etanav-route-break\", [\"exports\", \"ember-data\", \"adept-iq/config/environment\"], function (_exports, _emberData, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    activeContext: Ember.inject.service(),\n    eta: attr('date'),\n    notBefore: attr('date'),\n    status: attr('string'),\n    lat: attr('number'),\n    lng: attr('number'),\n    secondsToNext: attr('number'),\n    slackSeconds: attr('number'),\n    dwell: attr('number'),\n    type: attr('string'),\n    routeBreak: belongsTo('route-break'),\n    avlmRouteBreak: belongsTo('avlm-route-break'),\n    etaNavRoute: belongsTo('etanav-route'),\n    // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n    etaChange: !_environment.default.APP.avlmLite ? Ember.observer('eta', function () {\n      const oldETA = this.get('_oldETA');\n      const eta = this.get('eta');\n      if (Ember.isEmpty(eta)) return;else if (Ember.isEmpty(oldETA) && Ember.isPresent(eta)) {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['stop-point']);\n        this.set('_oldETA', eta);\n      } else if (oldETA.getTime() !== eta.getTime()) {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['stop-point']);\n        this.set('_oldETA', eta);\n      }\n    }) : null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/etanav-route\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    secondsToNext: attr('string'),\n    inService: attr('string'),\n    version: attr('string'),\n    route: belongsTo('route'),\n    avlmRoute: belongsTo('avlm-route'),\n    vehicle: belongsTo('vehicle'),\n    avlmVehicle: belongsTo('avlm-vehicle'),\n    etaStops: hasMany('etanav-stop-point'),\n    etaRouteBreaks: hasMany('etanav-route-break')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/etanav-stop-point\", [\"exports\", \"ember-data\", \"adept-iq/config/environment\"], function (_exports, _emberData, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    activeContext: Ember.inject.service(),\n    eta: attr('date'),\n    notBefore: attr('date'),\n    status: attr('string'),\n    lat: attr('number'),\n    lng: attr('number'),\n    secondsToNext: attr('number'),\n    slackSeconds: attr('number'),\n    dwell: attr('number'),\n    type: attr('string'),\n    stopPoint: belongsTo('stop-point'),\n    avlmStopPoint: belongsTo('avlm-stop-point'),\n    etaNavRoute: belongsTo('etanav-route'),\n    minutesToNext: Ember.computed('secondsToNext', function () {\n      const secondsToNext = this.get('secondsToNext') ? this.get('secondsToNext') : '0'; //convert secondsToNext into minutes\n\n      return Math.floor(parseInt(secondsToNext, 10) / 60);\n    }),\n    // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects\n    etaChange: !_environment.default.APP.avlmLite ? Ember.observer('eta', function () {\n      const oldETA = this.get('_oldETA');\n      const eta = this.get('eta');\n      if (Ember.isEmpty(eta)) return;else if (Ember.isEmpty(oldETA) && Ember.isPresent(eta)) {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['stop-point']);\n        this.set('_oldETA', eta);\n      } else if (oldETA.getTime() !== eta.getTime()) {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['stop-point']);\n        this.set('_oldETA', eta);\n      }\n    }) : null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/event\", [\"exports\", \"ember-data\", \"lodash\"], function (_exports, _emberData, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    time: attr('iso-date'),\n    code: attr('string'),\n    message: attr('string'),\n    description: attr('string'),\n    providerName: attr('string'),\n    createdAt: attr('date'),\n    deletedAt: attr('date'),\n    updateAt: attr('date'),\n    receivedAt: attr('date'),\n    heading: attr('number'),\n    speed: attr('number'),\n    odo: attr('number'),\n    actionType: attr('string'),\n    eventType: attr(),\n    eventLog: attr(),\n    eventAttributes: attr(),\n    vehicle: belongsTo('vehicle'),\n    avlmAlert: belongsTo('avlm-alert'),\n    driver: belongsTo('driver'),\n    route: belongsTo('route'),\n    schedule: belongsTo('schedule'),\n    user: belongsTo('sso-user'),\n    latlng: Ember.computed('lat', 'lng', function () {\n      if (!Ember.isNone(this.get('lat')) && !Ember.isNone(this.get('lng'))) {\n        return [`${this.get('lat')}`, `${this.get('lng')}`];\n      }\n\n      return null;\n    }),\n    collectedEventLog: Ember.computed('eventLog', function () {\n      const eventLog = this.get('eventLog');\n      const collective = [];\n\n      if (eventLog) {\n        (0, _lodash.forOwn)(eventLog, function (value) {\n          collective.push(...value);\n        });\n      }\n\n      return collective;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/exam-type-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/fare-category\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/fare-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/funding-agency\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    email: attr('string'),\n    phone: attr('string'),\n    address: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/generated-subscription-booking\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    date: attr('date'),\n    subscription: belongsTo('subscription')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/group\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n\n  var _default = Model.extend({\n    groupId: attr('string'),\n    description: attr('string'),\n    bookings: hasMany('booking')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/inspection-category\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/inspector-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/internal-ui-config\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    name: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/invitation\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    email: attr('string'),\n    isAdmin: attr('boolean'),\n    isUsed: attr('boolean'),\n    isExpired: attr('boolean')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/lease-company\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/leg-service-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    leg: belongsTo('leg'),\n    serviceNeedType: belongsTo('service-need-type')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/leg-travel-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    count: attr('number'),\n    leg: belongsTo('leg'),\n    travelNeedType: belongsTo('travel-need-type'),\n    passengerType: belongsTo('passenger-type'),\n    isAmbulatory: Ember.computed.equal('travelNeedType.name', 'ambulatory'),\n    isServiceAnimal: Ember.computed.equal('travelNeedType.name', 'serviceAnimal'),\n    isClient: Ember.computed.equal('passengerType.name', 'client'),\n    isPca: Ember.computed.equal('passengerType.name', 'pca'),\n    isCompanion: Ember.computed.equal('travelNeedTypeName', 'companion'),\n    isEquipment: Ember.computed('travelNeedType.name', function () {\n      return !this.get('travelNeedType.isServiceAnimal') && this.get('passengerType.isClient');\n    }),\n    isNonConsumable: Ember.computed('travelNeedType.name', function () {\n      return !this.get('isServiceAnimal') && this.get('isClient') && (Ember.isNone(this.get('count')) || this.get('count') === 0);\n    }),\n    isExtraPassenger: Ember.computed('travelNeedType.name', 'passengerType', function () {\n      return this.get('travelNeedType.isServiceAnimal') || this.get('passengerType.isPca') || this.get('passengerType.isCompanion');\n    }),\n    isWheelchair: Ember.computed('travelNeedType.{isWheelchair,isWideWheelchair,name}', function () {\n      const isWheelchair = this.get('travelNeedType.isWheelchair');\n      const isWideWheelchair = this.get('travelNeedType.isWideWheelchair');\n      return isWheelchair || isWideWheelchair;\n    }),\n    basicTravelNeedType: Ember.computed('travelNeedType.name', function () {\n      const name = Ember.get(this, 'travelNeedType.name');\n      return name === 'ambulatory' || name === 'wideAmbulatory' || name === 'wheelchair' || name === 'wideWheelchair';\n    }),\n    // travelNeedTypeName should be travelNeedType.name. It is unique. do not use displayName\n    travelNeedTypeName: Ember.computed.readOnly('travelNeedType.name'),\n    passengerTypeName: Ember.computed.readOnly('passengerType.name'),\n    travelNeedTypeNameUppercase: Ember.computed('travelNeedTypeName', function () {\n      return this.get('travelNeedTypeName') ? this.get('travelNeedTypeName').toUpperCase() : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/leg\", [\"exports\", \"ember-data\", \"adept-iq/utils/unwrapProxy\", \"lodash\"], function (_exports, _emberData, _unwrapProxy, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n  const TRAVEL_NEEDS_TO_FILTER = [];\n  const PCA = 'PCA';\n  const SERVICE_ANIMAL = 'serviceAnimal';\n  const AMBULATORY = 'AMBULATORY';\n\n  var _default = Model.extend({\n    store: Ember.inject.service(),\n    bookingService: Ember.inject.service('booking'),\n    requestTime: attr('date'),\n    anchor: attr('string'),\n    purpose: attr('string'),\n    notes: attr('string'),\n    brokerEligible: attr('boolean'),\n    rider: belongsTo('rider', {\n      async: true\n    }),\n    booking: belongsTo('booking'),\n    serviceWindow: belongsTo('service-window'),\n    fundingAgency: belongsTo('funding-agency'),\n    segments: hasMany('segment'),\n    legTravelNeeds: hasMany('leg-travel-need'),\n    legServiceNeeds: hasMany('leg-service-need'),\n    tripPurpose: belongsTo('trip-purpose'),\n    riderNotes: Ember.computed.alias('rider.notes'),\n    tripStartTime: Ember.computed.alias('booking.tripStartTime'),\n    tripEndTime: Ember.computed.alias('booking.tripEndTime'),\n    equipments: Ember.computed('legTravelNeeds.[]', function () {\n      const legTravelNeeds = Ember.get(this, 'legTravelNeeds');\n      const equipments = [];\n\n      if (!Ember.isEmpty(legTravelNeeds)) {\n        legTravelNeeds.forEach(travelNeed => {\n          if (travelNeed.get('isEquipment')) {\n            equipments.push(travelNeed);\n          }\n        });\n      }\n\n      return equipments;\n    }),\n    extraPassengers: Ember.computed.filterBy('legTravelNeeds', 'isExtraPassenger', true),\n    legEquipments: Ember.computed('leg', function () {\n      const legTravelNeeds = Ember.get(this, 'leg.legTravelNeeds');\n      const equipments = legTravelNeeds.get('equipments');\n      return equipments ? equipments : null;\n    }),\n    legExtraPassengers: Ember.computed('leg', function () {\n      const legTravelNeeds = Ember.get(this, 'leg.legTravelNeeds');\n      const extraPassengers = legTravelNeeds.get('extraPassengers');\n      return extraPassengers ? extraPassengers : null;\n    }),\n    segment: Ember.computed('segments', function () {\n      const segments = this.get('segments');\n\n      if (segments) {\n        return segments.firstObject;\n      }\n\n      return null;\n    }),\n    noOfTravelNeeds: Ember.computed('legTravelNeeds.[]', function () {\n      const noOfTravelNeeds = Ember.get(this, 'legTravelNeeds');\n\n      if (!Ember.isEmpty(noOfTravelNeeds)) {\n        return noOfTravelNeeds.length;\n      }\n\n      return 0;\n    }),\n    sortedLegTravelNeeds: Ember.computed('legTravelNeeds', function () {\n      const travelNeeds = Ember.get(this, 'legTravelNeeds');\n\n      if (!Ember.isEmpty(travelNeeds)) {\n        return travelNeeds.sortBy('travelNeedType.name');\n      }\n\n      return null;\n    }),\n    vehicleCapacityCounts: Ember.computed('legTravelNeeds.@each.{travelNeedTypeName,count}', function () {\n      const initialCounts = {\n        flexSeats: [],\n        nonConsumables: {}\n      };\n      const legTravelNeeds = this.get('legTravelNeeds');\n      if (Ember.isEmpty(legTravelNeeds)) return initialCounts;\n      return legTravelNeeds.reduce((obj, legTravelNeed) => {\n        const travelNeedtype = legTravelNeed.get('travelNeedType');\n        const tntVehicleCapacityCount = parseInt(travelNeedtype.get('vehicleCapacityCount'), 10);\n        const tntVehicleCapacityName = travelNeedtype.get('vehicleCapacityType');\n        const travelNeedTypeName = legTravelNeed.get('travelNeedTypeName');\n        const isTypeCountable = tntVehicleCapacityCount > 0;\n        const count = legTravelNeed.get('count') || 0;\n        const capacityCount = count * tntVehicleCapacityCount;\n        const originalCount = obj[tntVehicleCapacityName] ? obj[tntVehicleCapacityName] : 0; // If it is array or object, let's keep it's original data.\n\n        obj[tntVehicleCapacityName] = isTypeCountable ? originalCount + capacityCount : originalCount;\n\n        if (legTravelNeed.get('isNonConsumable')) {\n          obj.nonConsumables = { ...obj.nonConsumables,\n            [travelNeedTypeName]: count\n          };\n        }\n\n        return obj;\n      }, initialCounts);\n    }),\n    travelNeedCounts: Ember.computed('legTravelNeeds.@each.{travelNeedTypeName,count}', function () {\n      const initialCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        pca: 0,\n        extraWideLift: 0,\n        flexSeats: [],\n        nonConsumables: {}\n      };\n      const legTravelNeeds = this.get('legTravelNeeds');\n      if (Ember.isEmpty(legTravelNeeds)) return initialCounts;\n      return legTravelNeeds.reduce((obj, legTravelNeed) => {\n        const travelNeedTypeName = legTravelNeed.get('travelNeedTypeName');\n        const isTypeCountable = !(0, _lodash.isNaN)(parseInt(initialCounts[travelNeedTypeName], 10));\n        const count = legTravelNeed.get('count') || 0; // If it is array or object, let's keep it's original data.\n\n        obj[travelNeedTypeName] = isTypeCountable ? obj[travelNeedTypeName] + count : obj[travelNeedTypeName];\n\n        if (legTravelNeed.get('isNonConsumable')) {\n          obj.nonConsumables = { ...obj.nonConsumables,\n            [travelNeedTypeName]: count\n          };\n        }\n\n        return obj;\n      }, initialCounts);\n    }),\n    legOrdinal: Ember.computed('segment.legOrdinal', function () {\n      return this.get('segment.legOrdinal');\n    }),\n    nonClonedTravelNeeds: Ember.computed('legTravelNeeds.[]', function () {\n      const filteredTravelNeeds = this.get('legTravelNeeds').filter(legtravelNeed => {\n        return !TRAVEL_NEEDS_TO_FILTER.includes(legtravelNeed.get('travelNeedTypeNameUppercase')) && !legtravelNeed.get('isCloned');\n      });\n      return filteredTravelNeeds;\n    }),\n    isPcaAvailable: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const pcaTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedType.upperCaseName') === PCA;\n      });\n      return !!pcaTravelNeed;\n    }),\n    isPcaEligible: Ember.computed('isPcaAvailable', function () {\n      const isPcaAvailable = this.get('isPcaAvailable');\n      return !!isPcaAvailable;\n    }),\n    isServiceAnimalChecked: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const serviceAnimalTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedType.name') === SERVICE_ANIMAL;\n      });\n      return !!serviceAnimalTravelNeed;\n    }),\n    ambulatoryTravelNeed: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const ambulatoryTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === AMBULATORY;\n      });\n      return ambulatoryTravelNeed;\n    }),\n    configLoadUnloadTimes: Ember.computed('legTravelNeeds.[]', 'legTravelNeeds.@each.{travelNeedType}', function () {\n      const selectedTRs = this.get('legTravelNeeds').map(tr => tr.get('travelNeedTypeNameUppercase'));\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const filteredTravelNeedTypes = travelNeedTypes.toArray().filter(ctr => ctr.get('name'));\n      const selectedConfigTRs = filteredTravelNeedTypes.filter(ctr => selectedTRs.includes(ctr.get('name').toUpperCase()));\n      return {\n        loadTimes: selectedConfigTRs.map(item => parseInt(item.get('loadTime'), 10)),\n        unloadTimes: selectedConfigTRs.map(item => parseInt(item.get('unloadTime'), 10))\n      };\n    }),\n    loadTime: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      let pickDwellTime;\n      const segments = this.get('segments');\n      const rider = this.store.peekRecord('rider', this.get('bookingService.selectedRiders.firstObject.id'));\n      const riderTravelNeeds = rider.get('riderTravelNeeds');\n      segments.forEach(segment => {\n        if (segment.get('id')) {\n          pickDwellTime = segment.get('pick.dwell');\n        }\n      });\n\n      if (pickDwellTime) {\n        return pickDwellTime / 60;\n      }\n\n      const allTravelNeedLoadTimes = this.get('legTravelNeeds').map(travelNeed => {\n        const travelNeedTypePresent = !Ember.isEmpty((0, _unwrapProxy.unwrapProxy)(travelNeed.get('travelNeedType')));\n\n        if (travelNeedTypePresent) {\n          const travelNeedTypeName = travelNeed.get('travelNeedType.name');\n          const foundRiderTravelNeed = riderTravelNeeds.find(riderTravelNeed => {\n            return riderTravelNeed.get('travelNeedTypeName') === travelNeedTypeName;\n          });\n          const configTravelNeedTypeLoadTime = travelNeed.get('travelNeedType.loadTime') ? parseInt(travelNeed.get('travelNeedType.loadTime'), 10) : 0;\n          const loadTime = Ember.isEmpty(foundRiderTravelNeed) ? configTravelNeedTypeLoadTime : foundRiderTravelNeed.get('loadTime');\n          return (0, _lodash.isNumber)(loadTime) && !(0, _lodash.isNaN)(loadTime) ? loadTime : 0;\n        }\n\n        return 0;\n      });\n      const maxLoadTime = Math.max(...allTravelNeedLoadTimes);\n      return maxLoadTime;\n    }),\n    unloadTime: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      let dropDwellTime;\n      const segments = this.get('segments');\n      const rider = this.store.peekRecord('rider', this.get('bookingService.selectedRiders.firstObject.id'));\n      const riderTravelNeeds = rider.get('riderTravelNeeds');\n      segments.forEach(segment => {\n        if (segment.get('id')) {\n          dropDwellTime = segment.get('drop.dwell');\n        }\n      });\n\n      if (dropDwellTime) {\n        return dropDwellTime / 60;\n      }\n\n      const allTravelNeedUnLoadTimes = this.get('legTravelNeeds').map(travelNeed => {\n        const travelNeedTypePresent = !Ember.isEmpty((0, _unwrapProxy.unwrapProxy)(travelNeed.get('travelNeedType')));\n\n        if (travelNeedTypePresent) {\n          const travelNeedTypeName = travelNeed.get('travelNeedType.name');\n          const foundRiderTravelNeed = riderTravelNeeds.find(riderTravelNeed => {\n            return riderTravelNeed.get('travelNeedTypeName') === travelNeedTypeName;\n          });\n          const configTravelNeedTypeUnloadTime = travelNeed.get('travelNeedType.unloadTime') ? parseInt(travelNeed.get('travelNeedType.unloadTime'), 10) : 0;\n          const unloadTime = Ember.isEmpty(foundRiderTravelNeed) ? configTravelNeedTypeUnloadTime : foundRiderTravelNeed.get('unloadTime');\n          return (0, _lodash.isNumber)(unloadTime) && !(0, _lodash.isNaN)(unloadTime) ? unloadTime : 0;\n        }\n\n        return 0;\n      });\n      const maxUnLoadTime = Math.max(...allTravelNeedUnLoadTimes);\n      return maxUnLoadTime;\n    }),\n    ambulatorySeatCount: Ember.computed('ambulatoryTravelNeed', function () {\n      const ambulatoryTravelNeed = this.get('ambulatoryTravelNeed');\n      return ambulatoryTravelNeed.get('count');\n    }),\n    sortedSegment: Ember.computed('segments', function () {\n      const segments = this.get('segments').sortBy('id');\n\n      if (segments) {\n        return segments.firstObject;\n      }\n\n      return null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/location\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    lat: attr('number'),\n    lng: attr('number'),\n    geoNode: attr('number', {\n      defaultValue: 0\n    }),\n    address: belongsTo('address'),\n    places: hasMany('place'),\n    validLocation: Ember.computed.and('lat', 'lng', 'geoNode'),\n    latlng: Ember.computed('lat', 'lng', function () {\n      if (!Ember.isEmpty(this.get('lat')) && !Ember.isEmpty(this.get('lng'))) {\n        return `${this.get('lat')}/${this.get('lng')}`;\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/lock\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    entityType: attr('string'),\n    entityId: attr('string'),\n    timeToLive: attr('number'),\n    expirationTime: attr('date'),\n    status: attr('string', {\n      defaultValue: 'unlocked'\n    }),\n    persist: attr('boolean', {\n      defaultValue: false\n    }),\n    owner: belongsTo('sso-user'),\n    dispatchRoute: belongsTo('dispatch-route'),\n    route: belongsTo('route'),\n    isLocked: Ember.computed('status', 'expirationTime', function () {\n      const hasExpiration = this.get('timeToLive') > 0;\n      const status = this.get('status');\n      const currentTime = (0, _moment.default)();\n      const expirationTimeMoment = (0, _moment.default)(this.get('expirationTime'));\n      return status === 'locked' && (!hasExpiration || expirationTimeMoment.isAfter(currentTime));\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/maintenance-location-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    places: hasMany('place'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/maintenance-status-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/maintenance-type-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    scheduled: attr('boolean'),\n    isScheduled: Ember.computed('scheduled', function () {\n      const scheduled = this.get('scheduled');\n\n      if (!scheduled) {\n        return 'false';\n      }\n\n      return scheduled;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/manufacturer-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/metric\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    routes: attr('number'),\n    illegalTrips: attr('number'),\n    unusedRoutes: attr('number'),\n    scheduledTrips: attr('number'),\n    breakTrips: attr('number'),\n    manualTrips: attr('number'),\n    brokerTrips: attr('number'),\n    waitlistedTrips: attr('number'),\n    riders: attr('number'),\n    revenueHours: attr('number'),\n    revenueMiles: attr('number'),\n    totalHours: attr('number'),\n    totalMiles: attr('number'),\n    percentageTripsRidesharing: attr('number'),\n    percentageTimeSingle: attr('number'),\n    percentageTimeRidesharing: attr('number'),\n    percentageTimeEmpty: attr('number'),\n    percentageTimeOnBreak: attr('number'),\n    averageRideTimePerTrip: attr('number'),\n    schedule: belongsTo('schedule'),\n    userName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/modal\", [\"exports\", \"ember-modal-service/models/modal\"], function (_exports, _modal) {\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 _modal.default;\n    }\n  });\n});","define(\"adept-iq/models/multientry-catchall\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/navigation-info\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr; // import { belongsTo } from 'ember-data/relationships';\n\n  var _default = Model.extend({\n    guidance: attr('guidance'),\n    polyline: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/no-show-reason-category\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    code: attr('string'),\n    minutesFromPromiseTimeStart: attr('number'),\n    minutesFromPromiseTimeEnd: attr('number'),\n    driverNeedsApproval: attr('boolean')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/no-show-reason-code\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    code: attr('string'),\n    externalCode: attr('string'),\n    description: attr('string'),\n    noShow: hasMany('no-show'),\n    driverAppDefault: attr('boolean'),\n    trips: hasMany('trip'),\n    avlmTrips: hasMany('avlm-trip'),\n    name: Ember.computed.alias('description')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/no-show\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    notes: attr('string'),\n    dispatchSchedule: belongsTo('dispatch-schedule'),\n    noShowReasonCode: belongsTo('no-show-reason-category'),\n    stopPoint: belongsTo('stop-point'),\n    timestamp: attr('date')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/packet\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var attr = _emberData.default.attr;\n\n  var _default = _emberData.default.Model.extend({\n    actionType: attr('string'),\n    timestamp: attr('date'),\n    topic: attr('string'),\n    message: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/passenger-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.PCA_PASSENGER_TYPE = _exports.COMPANION_PASSENGER_TYPE = _exports.CLIENT_PASSENGER_TYPE = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n  const COMPANION_PASSENGER_TYPE = 'companion';\n  _exports.COMPANION_PASSENGER_TYPE = COMPANION_PASSENGER_TYPE;\n  const PCA_PASSENGER_TYPE = 'pca';\n  _exports.PCA_PASSENGER_TYPE = PCA_PASSENGER_TYPE;\n  const CLIENT_PASSENGER_TYPE = 'client';\n  _exports.CLIENT_PASSENGER_TYPE = CLIENT_PASSENGER_TYPE;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    riderTravelNeeds: hasMany('rider-travel-need'),\n    subscriptionTravelNeeds: hasMany('subscription-travel-need'),\n    legTravelNeeds: hasMany('leg-travel-need'),\n    isPca: Ember.computed.equal('name', 'pca'),\n    isCompanion: Ember.computed.equal('name', 'companion'),\n    isClient: Ember.computed.equal('name', 'client')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/perm-sso-role\", [\"exports\", \"ember-data\", \"lodash\"], function (_exports, _emberData, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    permissionLayer: Ember.inject.service(),\n    permissionHash: null,\n    groupedPermissions: null,\n    roleName: attr('string'),\n    name: attr('string'),\n    displayName: attr('string'),\n    status: attr('string'),\n    permissions: attr(),\n    permissionList: attr(),\n    users: hasMany('sso-user'),\n    rolePermissions: hasMany('role-permission'),\n    validRolePermissons: Ember.computed('rolePermissions', function () {\n      const rolePermissions = this.get('rolePermissions');\n      return rolePermissions.filter(role => role && role.get('category'));\n    }),\n    permissionsGroupByCatgories: Ember.computed('permissionLayer.permissions', function () {\n      const allPermissions = this.get('permissionLayer.permissions').toArray();\n      return (0, _lodash.default)(allPermissions).groupBy(p => p.get('category').replace(/\\s/g, '_').toUpperCase()).value();\n    }),\n    rolePermissionsGroupByCatgories: Ember.computed('validRolePermissons', 'permissionsGroupByCatgories', function () {\n      const permissionsGroupByCatgories = this.get('permissionsGroupByCatgories');\n      const rolePermissions = this.get('validRolePermissons');\n      const result = {};\n      Object.keys(permissionsGroupByCatgories).forEach(category => {\n        const permissionsGranted = rolePermissions.filter(p => p.get('category').replace(/\\s/g, '_').toUpperCase() === category.replace(/\\s/g, '_').toUpperCase()).length;\n        const allPermissions = permissionsGroupByCatgories[category.toUpperCase()].length;\n        result[category.toUpperCase()] = `${permissionsGranted}/${allPermissions}`;\n      });\n      return result;\n    }),\n\n    reconfigurePermissionHash(permissions) {\n      const permissionList = this.get('permissionList');\n      const permHash = permissions.reduce((acu, perm) => {\n        acu[perm.parsedId] = false;\n        return acu;\n      }, {});\n      permissionList.forEach(id => {\n        permHash[id] = true;\n      });\n      this.set('permissionHash', permHash);\n    },\n\n    reconfigurePermissionCheck(permissions) {\n      const permissionList = this.get('permissionList');\n      permissions.map(data => {\n        permissionList.map(item => {\n          if (item === data.parsedId) {\n            data.state = true;\n          }\n        });\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/perm-sso-user\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n  const convertStatusDisplay = {\n    active: 'Active',\n    inactive: 'Inactive',\n    deleted: 'Deleted'\n  };\n\n  var _default = Model.extend({\n    userId: attr('string'),\n    firstName: attr('string'),\n    lastName: attr('string'),\n    emailId: attr('string'),\n    status: attr('string', {\n      defaultValue: 'active'\n    }),\n    lastLoginAt: attr('date'),\n    loginDetails: attr('object'),\n    roles: attr('object'),\n    providers: attr('object'),\n    ssoRoles: hasMany('perm-sso-role'),\n    fullName: Ember.computed('firstName', 'lastName', function () {\n      return `${this.get('firstName')} ${this.get('lastName')}`;\n    }),\n    calculatedStatus: Ember.computed('status', 'lastLoginAt', {\n      get() {\n        if (this.get('status') === 'active' && this.get('lastLoginAt') === null) {\n          return 'pending';\n        }\n\n        const status = this.get('status');\n        const result = convertStatusDisplay[status];\n        return result;\n      },\n\n      set(key, value) {\n        this.set('status', value);\n\n        if (this.get('status') === 'active' && this.get('lastLoginAt') === null) {\n          return 'pending';\n        }\n\n        return value;\n      }\n\n    }),\n    roleNamesStr: Ember.computed('roles', function () {\n      const roles = Ember.get(this, 'roles');\n\n      if (!Ember.isEmpty(roles)) {\n        const roleNameList = roles.map(role => role.displayName);\n        return roleNameList.join(',');\n      }\n\n      return '';\n    }),\n    providerNamesStr: Ember.computed('providers', function () {\n      const providers = Ember.get(this, 'providers');\n\n      if (!Ember.isEmpty(providers)) {\n        const roleNameList = providers.map(provider => provider.providerName);\n        return roleNameList.join(',');\n      }\n\n      return '';\n    }),\n    userName: Ember.computed('loginDetails', function () {\n      const loginData = Ember.get(this, 'loginDetails');\n      if (Ember.isEmpty(loginData)) return '';\n      const data = loginData.filterBy('userId', Ember.get(this, 'userId'));\n      if (Ember.isEmpty(data)) return '';\n      return data[0] && data[0].userName ? data[0].userName : '';\n    }),\n    passwordChangedDate: Ember.computed('loginDetails', function () {\n      const loginData = Ember.get(this, 'loginDetails');\n      if (Ember.isEmpty(loginData)) return '';\n      const data = loginData.filterBy('userId', Ember.get(this, 'userId'));\n      if (Ember.isEmpty(data)) return ''; // Transfrom twice Date to remove time part so filter can work properly.\n\n      return data[0] && data[0].passwordUpdatedAt ? new Date(new Date(data[0].passwordUpdatedAt).toDateString()) : null;\n    }),\n    formattedStatus: Ember.computed('calculatedStatus', function () {\n      return this.get('calculatedStatus').charAt(0).toUpperCase() + this.get('calculatedStatus').substr(1);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/place-category-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.PASSENGER_PLACE_CATEGORY_TYPE = _exports.GARAGE_PLACE_CATEGORY_TYPE = void 0;\n  const {\n    Model,\n    hasMany,\n    attr\n  } = _emberData.default;\n  const PASSENGER_PLACE_CATEGORY_TYPE = 'passenger';\n  _exports.PASSENGER_PLACE_CATEGORY_TYPE = PASSENGER_PLACE_CATEGORY_TYPE;\n  const GARAGE_PLACE_CATEGORY_TYPE = 'garage';\n  _exports.GARAGE_PLACE_CATEGORY_TYPE = GARAGE_PLACE_CATEGORY_TYPE;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    places: hasMany('place')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/place-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    places: hasMany('place')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/place\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    geocodingMethod: attr('string'),\n    address: belongsTo('address'),\n    location: belongsTo('location'),\n    placeCategoryType: belongsTo('place-category-type'),\n    segmentStops: hasMany('segment-stop'),\n    riderPlaces: hasMany('rider-place'),\n    shiftBreaks: hasMany('shift-break'),\n    routeBreaks: hasMany('route-break'),\n    breakdownVehicle: belongsTo('vehicle-breakdown', {\n      inverse: 'place'\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/playback-driver\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    driverId: attr('number'),\n    firstname: attr('string'),\n    lastname: attr('string'),\n    badgenumber: attr('string'),\n    provider: attr('string'),\n    middlename: attr('string'),\n    email: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/playback-route\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    routeId: attr('number'),\n    routeName: attr('number'),\n    provider: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/playback-vehicle\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    vehicleId: attr('number'),\n    provider: attr('string'),\n    type: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/polyline\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    coords: attr('polyline'),\n    guidance: attr('string'),\n    version: attr('string'),\n    route: belongsTo('route'),\n    avlmRoute: belongsTo('avlm-route'),\n    stopPoint: belongsTo('stop-point'),\n    avlmStopPoint: belongsTo('avlm-stop-point')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/problem-identified-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/provider-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model\n  } = _emberData.default;\n\n  var _default = Model.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/provider\", [\"exports\", \"ember-data\", \"adept-iq/config/environment\", \"lodash\"], function (_exports, _emberData, _environment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ACTIVE_STATUS_TYPE = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n  const ACTIVE_STATUS_TYPE = 'active';\n  _exports.ACTIVE_STATUS_TYPE = ACTIVE_STATUS_TYPE;\n  const LOCAL_STORAGE_KEY = 'dashboard-info';\n\n  function getIsCheckedDefaultValue() {\n    const dashboardInfo = localStorage.getItem(LOCAL_STORAGE_KEY);\n\n    if (_environment.default.APP.avlmLite && dashboardInfo) {\n      if (dashboardInfo) {\n        return false;\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  const BROKER_TYPE = 'broker';\n  const INACTIVE_STATUS_TYPE = 'Inactive';\n\n  var _default = Model.extend({\n    session: Ember.inject.service(),\n    name: attr('string'),\n    displayName: attr('string'),\n    providerTypeName: attr('string'),\n    providerType: attr('string'),\n    isChecked: attr('boolean', {\n      defaultValue: getIsCheckedDefaultValue()\n    }),\n    status: attr('string'),\n    contactName: attr('string'),\n    contactPhone: attr('number'),\n    contactEmail: attr('string'),\n    serviceZones: attr('string'),\n    tripCount: attr('string'),\n    costs: attr('string'),\n    bookings: hasMany('booking'),\n    vehicles: hasMany('vehicle'),\n    avlmVehicle: hasMany('avlm-vehicle'),\n    trips: hasMany('trip'),\n    avlmTrip: hasMany('avlm-trip'),\n    routes: hasMany('route'),\n    avlmRoute: hasMany('avlm-route'),\n    drivers: hasMany('driver'),\n    avlmDriver: hasMany('avlm-driver'),\n    schedule: belongsTo(),\n    isBrokerProviderType: Ember.computed.equal('providerTypeName', BROKER_TYPE),\n    isInActive: Ember.computed('status', function () {\n      const status = this.get('status');\n      if (status === INACTIVE_STATUS_TYPE) return true;\n      return false;\n    }),\n    providerName: Ember.computed('name', function () {\n      const name = this.get('name');\n      if (name) return name;\n      const id = this.get('id');\n      return (0, _lodash.startCase)(id);\n    }),\n    // return true if the user have access to this provider\n    userCanAccessProvider: Ember.computed('id', function () {\n      const userProviders = this.get('session.data.authenticated.tokenInfo.providerNames') || [];\n      const canAccess = userProviders.includes('ALL') ? true : userProviders.includes(this.get('id'));\n      return canAccess;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rear-axel-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-address\", [\"exports\", \"ember-data\", \"adept-iq/utils/format-text-extension\"], function (_exports, _emberData, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    addressId: attr('number'),\n    formattedAddress: attr('string'),\n    streetName: attr('string'),\n    streetNr: attr('string'),\n    unitNr: attr('string'),\n    region: attr('string'),\n    postCode: attr('number'),\n    city: attr('string'),\n    state: attr('string'),\n    country: attr('string'),\n    lat: attr('number'),\n    lng: attr('number'),\n    identifier: attr('string'),\n    zone: attr('string'),\n    notes: attr('string'),\n    stopId: attr('string'),\n    stop: belongsTo('reconcile-stop'),\n    address: Ember.computed('formattedAddress', function () {\n      return (0, _formatTextExtension.convertToPascalCase)(Ember.get(this, 'formattedAddress'));\n    }),\n    formattedCity: Ember.computed('city', function () {\n      const c = Ember.get(this, 'city');\n\n      if (Ember.isEmpty(c)) {\n        const add = Ember.get(this, 'formattedAddress');\n\n        if (!Ember.isEmpty(add)) {\n          const addStr = (0, _formatTextExtension.convertToPascalCase)(add);\n          const addArray = addStr.split(',');\n          return addArray[addArray.length - 2];\n        }\n      }\n\n      return (0, _formatTextExtension.convertToPascalCase)(c);\n    }),\n    formattedState: Ember.computed('state', function () {\n      return (0, _formatTextExtension.convertToPascalCase)(Ember.get(this, 'state'));\n    }),\n    formattedCountry: Ember.computed('country', function () {\n      return (0, _formatTextExtension.convertToPascalCase)(Ember.get(this, 'country'));\n    }),\n    fullAddress: Ember.computed('formattedAddress', 'city', 'state', 'country', function () {\n      const address = Ember.get(this, 'formattedAddress') + ' ' + Ember.get(this, 'city') + ' ' + Ember.get(this, 'state') + ' ' + Ember.get(this, 'country');\n      return (0, _formatTextExtension.convertToPascalCase)(address.trim());\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-component\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    attributeId: attr('number'),\n    name: attr('string'),\n    amount: attr('number')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-driver\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    driverId: attr('string'),\n    firstName: attr('string'),\n    middleName: attr('string'),\n    lastName: attr('string'),\n    phoneNumber: attr('string'),\n    shiftStartTime: attr('string'),\n    shiftEndTime: attr('string'),\n    fullName: Ember.computed('firstName', 'lastName', function () {\n      return Ember.get(this, 'firstName') + ' ' + Ember.get(this, 'lastName');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-passenger\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/format-text-extension\"], function (_exports, _emberData, _moment, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  const DATE_FORMAT = 'MM/DD/YYYY';\n\n  var _default = Model.extend({\n    passengerId: attr('number'),\n    status: attr('string'),\n    firstName: attr('string'),\n    middleName: attr('string'),\n    lastName: attr('string'),\n    type: attr('string'),\n    email: attr('string'),\n    externalId: attr('number'),\n    phoneNumber: attr('string'),\n    tripId: attr('number'),\n    dateOfBirth: attr('date'),\n    eligibilityStart: attr('date'),\n    eligibilityEnd: attr('date'),\n    address: attr('string'),\n    city: attr('string'),\n    travelneeds: attr('object'),\n    formattedEligibilityStart: Ember.computed('eligibilityStart', function () {\n      return Ember.get(this, 'eligibilityStart') ? (0, _moment.default)(Ember.get(this, 'eligibilityStart')).format(DATE_FORMAT) : '';\n    }),\n    formttedEligibilityEnd: Ember.computed('eligibilityEnd', function () {\n      return Ember.get(this, 'eligibilityEnd') ? (0, _moment.default)(Ember.get(this, 'eligibilityEnd')).format(DATE_FORMAT) : '';\n    }),\n    formttedDateOfBirth: Ember.computed('dateOfBirth', function () {\n      return Ember.get(this, 'dateOfBirth') ? (0, _moment.default)(Ember.get(this, 'dateOfBirth')).format(DATE_FORMAT) : '';\n    }),\n    // trip: belongsTo('reconcile-trip')\n    clientName: Ember.computed('firstName', 'lastName', function () {\n      const str = Ember.get(this, 'lastName') + ', ' + Ember.get(this, 'firstName');\n      return (0, _formatTextExtension.convertToPascalCase)(str);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-price\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n\n  var _default = Model.extend({\n    priceId: attr('number'),\n    type: attr('string'),\n    currencyCode: attr('string'),\n    fare: attr('number'),\n    tip: attr('number'),\n    tripId: attr('number'),\n    // Relationship bindings\n    components: hasMany('reconcile-component')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-route-id\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/format-text-extension\"], function (_exports, _emberData, _moment, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    routeId: attr('string'),\n    providerName: attr('string'),\n    serviceMode: attr('string'),\n    status: attr('string'),\n    type: attr('string'),\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    actualStartTime: attr('date'),\n    actualEndTime: attr('date'),\n    odometerStart: attr('number'),\n    odometerEnd: attr('number'),\n    notes: attr('string'),\n    driverId: attr('string'),\n    vehicleId: attr('string'),\n    maxMilesPerHour: attr('number'),\n    maxTripsPerHour: attr('number'),\n    breakdownLocation: attr('string'),\n    breakdownTime: attr('date'),\n    breakdownReason: attr('string'),\n    isCompleted: attr('boolean'),\n    isDeleted: attr('boolean'),\n    verifiedDate: attr('date'),\n    verifiedBy: attr('string'),\n    closedDate: attr('date'),\n    closedBy: attr('string'),\n    reopenedDate: attr('date'),\n    reopenedBy: attr('string'),\n    routeReopenedDate: attr('date'),\n    routeReopenedBy: attr('string'),\n    vehicle: attr('object'),\n    driver: attr('object'),\n    start: attr('object'),\n    end: attr('object'),\n    isRouteDateClosed: Ember.computed.notEmpty('closedDate'),\n    isKeeperRoute: Ember.computed('type', function () {\n      return Ember.get(this, 'type') && Ember.get(this, 'type').toLowerCase() === 'keeper' ? 'Yes' : 'No';\n    }),\n    isRegularRoute: Ember.computed('type', function () {\n      return !Ember.get(this, 'type') || Ember.get(this, 'type').toLowerCase() === 'regular';\n    }),\n    tripDate: Ember.computed('plannedStartTime', function () {\n      const dt = Ember.get(this, 'plannedStartTime');\n      return dt ? (0, _moment.default)(dt).format('MM-DD-YYYY') : '';\n    }),\n    formattedStartTime: Ember.computed('plannedStartTime', function () {\n      const dt = Ember.get(this, 'plannedStartTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedEndTime: Ember.computed('plannedEndTime', function () {\n      const dt = Ember.get(this, 'plannedEndTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedActualStartTime: Ember.computed('actualStartTime', function () {\n      const dt = Ember.get(this, 'actualStartTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedActualEndTime: Ember.computed('actualEndTime', function () {\n      const dt = Ember.get(this, 'actualEndTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedBreakdownTime: Ember.computed('breakdownTime', function () {\n      const dt = Ember.get(this, 'breakdownTime');\n      return dt ? (0, _moment.default)(dt).format('MM-DD-YYYY hh:mm A') : '';\n    }),\n    formattedStatus: Ember.computed('status', function () {\n      const s = Ember.get(this, 'status');\n      return s ? (0, _formatTextExtension.convertToCapitalize)(s) : '';\n    }),\n    formattedDriverShiftStartTime: Ember.computed('driver.shiftStartTime', function () {\n      const dt = Ember.get(this, 'driver.shiftStartTime');\n      return dt ? dt : '';\n    }),\n    formattedDriverShiftEndTime: Ember.computed('driver.shiftEndTime', function () {\n      const dt = Ember.get(this, 'driver.shiftEndTime');\n      return dt ? dt : '';\n    }),\n    shiftLength: Ember.computed('actualStartTime', 'actualEndTime', function () {\n      let length = '00:00';\n      const stDt = Ember.get(this, 'actualStartTime');\n      const enDt = Ember.get(this, 'actualEndTime');\n\n      if (stDt && enDt) {\n        const duration = _moment.default.duration((0, _moment.default)(enDt).diff((0, _moment.default)(stDt)));\n\n        const hours = parseInt(duration.asHours(), 10) < 10 ? `0${parseInt(duration.asHours(), 10)}` : parseInt(duration.asHours(), 10);\n        const minutes = parseInt(duration.minutes(), 10) < 10 ? `0${parseInt(duration.minutes(), 10)}` : parseInt(duration.minutes(), 10);\n        length = [hours, minutes].join(':');\n      }\n\n      return length;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-route\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n\n  var _default = Model.extend({\n    routeId: attr('string'),\n    type: attr('string'),\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    actualStartTime: attr('date'),\n    actualEndTime: attr('date'),\n    serviceMode: attr('string', {\n      defaultValue: 'Paratransit / Broker'\n    }),\n    odometerStart: attr('number'),\n    odometerEnd: attr('number'),\n    status: attr('string'),\n    notes: attr('string'),\n    driverId: attr('string'),\n    vehicleId: attr('string'),\n    providerName: attr('string'),\n    maxMilesPerHour: attr('number'),\n    maxTripsPerHour: attr('number'),\n    breakdownLocation: attr('string'),\n    breakdownTime: attr('date'),\n    breakdownReason: attr('string'),\n    isDeleted: attr('boolean', {\n      defaultValue: false\n    }),\n    isCompleted: attr('boolean', {\n      defaultValue: false\n    }),\n    verifiedDate: attr('date'),\n    verifiedBy: attr('string'),\n    closedDate: attr('date'),\n    closedBy: attr('string'),\n    reopenedDate: attr('date'),\n    reopenedBy: attr('string'),\n    routeReopenedDate: attr('date'),\n    routeReopenedBy: attr('string'),\n    // Relationship bindings\n    vehicle: belongsTo('reconcile-vehicle'),\n    driver: belongsTo('reconcile-driver'),\n    start: belongsTo('reconcile-stop'),\n    end: belongsTo('reconcile-stop'),\n    trips: hasMany('reconcile-trip'),\n    breaks: hasMany('reconcile-stop'),\n    isRouteDateClosed: Ember.computed.notEmpty('closedDate'),\n    isKeeperRoute: Ember.computed('type', function () {\n      return Ember.get(this, 'type') && Ember.get(this, 'type').toLowerCase() === 'keeper' ? 'Yes' : 'No';\n    }),\n    isRegularRoute: Ember.computed('type', function () {\n      return !Ember.get(this, 'type') || Ember.get(this, 'type').toLowerCase() === 'regular';\n    }),\n    isBreakdownRoute: Ember.computed('type', function () {\n      return Ember.get(this, 'type') && Ember.get(this, 'type').toLowerCase() === 'breakdown';\n    }),\n    isRescueRoute: Ember.computed('type', function () {\n      return Ember.get(this, 'type') && Ember.get(this, 'type').toLowerCase() === 'rescue';\n    }),\n    isRescueReplacementRoute: Ember.computed('type', function () {\n      return Ember.get(this, 'type') && Ember.get(this, 'type').toLowerCase() === 'rescue replacement';\n    }),\n    isBreakdownReplacementRoute: Ember.computed('type', function () {\n      return Ember.get(this, 'type') && Ember.get(this, 'type').toLowerCase() === 'breakdown replacement';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-stop\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n\n  var _default = Model.extend({\n    stopId: attr('string'),\n    status: attr('string'),\n    type: attr('string'),\n    eta: attr('date'),\n    otpValue: attr('number'),\n    otpStatus: attr('string'),\n    anchor: attr('boolean'),\n    startTime: attr('date'),\n    endTime: attr('date'),\n    arriveTime: attr('date'),\n    promiseTime: attr('date'),\n    requestTime: attr('date'),\n    actualArriveTime: attr('date'),\n    //for stops\n    actualDepartTime: attr('date'),\n    //for stops\n    performed: attr('string'),\n    arriveType: attr('string'),\n    breakType: attr('string'),\n    tripId: attr('number'),\n    routeId: attr('string'),\n    ordinal: attr('number'),\n    odometerArrival: attr('number'),\n    odometerDeparture: attr('number'),\n    // Relationship bindings\n    address: attr('object'),\n    // to be changed to belongsTo reconcile-address\n    usedAttributes: hasMany('reconcile-used-attribute'),\n    // It is to be updated when proper data mapping is received\n    isWheelchair: Ember.computed('usedAttributes', function () {\n      return false;\n    }),\n    stopTime: Ember.computed('actualArriveTime', 'actualDepartTime', function () {\n      const startTime = Ember.get(this, 'actualArriveTime');\n      const endTime = Ember.get(this, 'actualDepartTime');\n      let mins = 0;\n\n      if (startTime && endTime && (0, _moment.default)(startTime).isBefore((0, _moment.default)(endTime))) {\n        const duration = _moment.default.duration((0, _moment.default)(endTime).diff((0, _moment.default)(startTime)));\n\n        mins = duration.asMinutes();\n      }\n\n      return mins;\n    }),\n    stopType: Ember.computed('status', 'stopId', function () {\n      const id = this.get('stopId');\n      const status = this.get('status');\n\n      if (id.includes('DP') || status === 'DP') {\n        return 'deployStop';\n      } else if (id.includes('P') || status === 'P') {\n        return 'pick';\n      } else if (id.includes('D') || status === 'D') {\n        return 'drop';\n      } else if (id.includes('GP') || status === 'GP') {\n        return 'pulloutGarage';\n      } else if (id.includes('GD') || status === 'GD') {\n        return 'pullinGarage';\n      } else if (id.includes('B') || status === 'B') {\n        return 'break';\n      }\n\n      return null;\n    }),\n    mapId: Ember.computed('status', 'stopType', function () {\n      const status = this.get('status');\n      const stopType = this.get('stopType');\n      const isWheelchair = this.get('isWheelchair');\n      let id = null;\n\n      if (status === 'Depart') {\n        id = 'performedStop';\n        return id;\n      }\n\n      if (isWheelchair) {\n        id = 'wheelchair';\n        return id;\n      }\n\n      if (status === 'No Show') {\n        id = 'noshow';\n        return id;\n      }\n\n      switch (stopType) {\n        case 'break':\n          id = 'break';\n          break;\n\n        case 'pick':\n          id = 'pick';\n          break;\n\n        case 'drop':\n          id = 'drop';\n          break;\n\n        case 'deployStop':\n          id = 'deployStop';\n          break;\n\n        case 'pulloutGarage':\n          id = 'pulloutGarage';\n          break;\n\n        case 'pullinGarage':\n          id = 'pullinGarage';\n          break;\n\n        default:\n          break;\n      }\n\n      return id;\n    }),\n    formattedActualArriveTime: Ember.computed('actualArriveTime', function () {\n      const dt = Ember.get(this, 'actualArriveTime');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY hh:mm A') : '';\n    }),\n    formattedActualDepartTime: Ember.computed('actualDepartTime', function () {\n      const dt = Ember.get(this, 'actualDepartTime');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY hh:mm A') : '';\n    }),\n    formattedPromiseTime: Ember.computed('promiseTime', function () {\n      const dt = Ember.get(this, 'promiseTime');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY hh:mm A') : '';\n    }),\n    formattedPromiseTimeAsTime: Ember.computed('promiseTime', function () {\n      const dt = Ember.get(this, 'promiseTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedRequestTimeAsTime: Ember.computed('requestTime', function () {\n      const dt = Ember.get(this, 'requestTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedDate: Ember.computed('actualArriveTime', function () {\n      const dt = Ember.get(this, 'actualArriveTime');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY') : '';\n    }),\n    formattedEta: Ember.computed('eta', function () {\n      const dt = Ember.get(this, 'eta');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY hh:mm A') : '';\n    }),\n    formattedEtaAsTime: Ember.computed('eta', function () {\n      const dt = Ember.get(this, 'eta');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-trip\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/format-text-extension\"], function (_exports, _emberData, _moment, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  const pickupTypes = ['pickup', 'pick', 'p'];\n  const dropoffTypes = ['dropoff', 'drop', 'd'];\n  const convertStatusDisplay = {\n    scheduled: 'Scheduled',\n    requested: 'Requested',\n    promised: 'Promised',\n    dispatched: 'Dispatched',\n    active: 'Active',\n    completed: 'Completed',\n    callback: 'Callback',\n    willCall: 'Will call',\n    failed: 'Failed',\n    canceled: 'Canceled',\n    cancelled: 'Canceled',\n    lateCancelled: 'Late Cancelled',\n    archived: 'Archived',\n    unscheduled: 'Unscheduled',\n    waitlisted: 'Waitlisted',\n    illegal: 'Illegal',\n    noShowRequest: 'No Show Request',\n    noShow: 'No Show',\n    'No Show': 'No Show',\n    'En Route': 'En Route',\n    'A': 'Active',\n    'C': 'Completed'\n  };\n\n  var _default = Model.extend({\n    tripId: attr('number'),\n    groupId: attr('number'),\n    externalTripId: attr('number'),\n    promiseTime: attr('date'),\n    status: attr('string'),\n    otpValue: attr('number'),\n    otpStatus: attr('string'),\n    routeId: attr('string'),\n    providerName: attr('string'),\n    requestTime: attr('date'),\n    serviceStartTime: attr('date'),\n    serviceEndTime: attr('date'),\n    travelNeeds: attr('object'),\n    plannedTripMiles: attr('number'),\n    actualTripMiles: attr('number'),\n    statusDate: attr('date'),\n    createdAt: attr('date'),\n    statusReason: attr('string'),\n    statusNotes: attr('string'),\n    anchor: attr('string'),\n    passenger: attr('object'),\n    price: attr('object'),\n    stops: attr('object'),\n    route: attr('object'),\n    type: attr('string'),\n    serviceMode: attr('string'),\n    passengerId: attr('number'),\n    passengerNotes: attr('string'),\n    driverNotes: attr('string'),\n    noshowDate: attr('date'),\n    previousRouteName: attr('string'),\n    noshowTime: Ember.computed('noshowDate', function () {\n      const dt = Ember.get(this, 'noshowDate');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY HH:MM A') : '';\n    }),\n    tripDate: Ember.computed('serviceStartTime', function () {\n      const dt = Ember.get(this, 'serviceStartTime');\n      return dt ? (0, _moment.default)(dt).format('MM-DD-YYYY') : '';\n    }),\n    formattedPromiseTime: Ember.computed('promiseTime', function () {\n      const dt = Ember.get(this, 'promiseTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedRequestTime: Ember.computed('requestTime', function () {\n      const dt = Ember.get(this, 'requestTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    }),\n    formattedCreatedDate: Ember.computed('createdAt', function () {\n      const dt = Ember.get(this, 'createdAt');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY HH:MM A') : '';\n    }),\n    formattedStatus: Ember.computed('status', function () {\n      const s = Ember.get(this, 'status');\n      return s ? (0, _formatTextExtension.convertToCapitalize)(s) : '';\n    }),\n    computedStatus: Ember.computed('status', function () {\n      const status = Ember.get(this, 'status');\n      const result = convertStatusDisplay[status];\n      return result;\n    }),\n    formattedServiceStartTime: Ember.computed('serviceStartTime', function () {\n      const dt = Ember.get(this, 'serviceStartTime');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY HH:MM A') : '';\n    }),\n    formattedServiceEndTime: Ember.computed('serviceEndTime', function () {\n      const dt = Ember.get(this, 'serviceEndTime');\n      return dt ? (0, _moment.default)(dt).format('MM/DD/YYYY HH:MM A') : '';\n    }),\n    statusLabel: Ember.computed('status', function () {\n      const status = Ember.get(this, 'status');\n      let statusLabel = '';\n\n      switch (status.toLowerCase()) {\n        case 'active':\n        case 'a':\n          statusLabel = 'Active';\n          break;\n\n        case 'noshow':\n        case 'n':\n          statusLabel = 'No Show';\n          break;\n\n        case 'completed':\n        case 'c':\n          statusLabel = 'Completed';\n          break;\n\n        case 'cancel':\n        case 'cancelled':\n        case 'x':\n          statusLabel = 'Cancelled';\n          break;\n\n        case 'driver arrived':\n        case 'r':\n          statusLabel = 'Driver Arrived';\n          break;\n\n        case 'passenger on board':\n        case 'p':\n          statusLabel = 'Passenger on board';\n          break;\n\n        case 'on time':\n        case 'o':\n          statusLabel = 'On time';\n          break;\n\n        case 'danger':\n        case 'in danger':\n        case 'd':\n          statusLabel = 'In danger';\n          break;\n\n        case 'late':\n        case 'l':\n          statusLabel = 'Late';\n          break;\n\n        case 'early':\n        case 'e':\n          statusLabel = 'Early';\n          break;\n\n        case 'scheduled':\n        case 's':\n          statusLabel = 'Scheduled';\n          break;\n\n        case 'waitListed':\n        case 'wl':\n          statusLabel = 'Waitlisted';\n          break;\n\n        default:\n          statusLabel = status;\n          break;\n      }\n\n      return statusLabel;\n    }),\n    polyline: Ember.computed('stops', function () {\n      const stops = Ember.get(this, 'stops');\n      let pickLat = null;\n      let pickLng = null;\n      let dropLat = null;\n      let dropLng = null;\n      stops.map(item => {\n        if (item.type === 'dropoff' && item.address) {\n          if (item.address.lat && item.address.lng && item.address.lat.toString() && item.address.lng.toString()) {\n            dropLat = item.address.lat.toString();\n            dropLng = item.address.lng.toString();\n          }\n        } else if (item.address.lat && item.address.lng && item.type === 'pickup' && item.address) {\n          if (item.address.lat.toString() && item.address.lng.toString()) {\n            pickLat = item.address.lat.toString();\n            pickLng = item.address.lng.toString();\n          }\n        }\n      });\n\n      if ([pickLat, pickLng, dropLat, dropLng].any(Ember.isNone)) {\n        return null;\n      } // Should display like P----->D, but decorator(>) can only set on start point, so we need to make D as start point\n\n\n      return [[dropLat, dropLng], [pickLat, pickLng]];\n    }),\n    travelRequirements: Ember.computed('travelNeeds', function () {\n      const travelNeeds = Ember.get(this, 'travelNeeds');\n      const result = {};\n\n      if (!Ember.isEmpty(travelNeeds)) {\n        JSON.parse(travelNeeds).map(item => {\n          result[item.name] = item.cnt;\n        });\n      }\n\n      return result;\n    }),\n    stopDetails: Ember.computed('stops', function () {\n      const stops = Ember.get(this, 'stops');\n      const result = {\n        pick: null,\n        drop: null\n      };\n\n      if (!Ember.isEmpty(stops)) {\n        stops.map(stop => {\n          if (stop.type && dropoffTypes.includes(stop.type.toLowerCase())) {\n            result.drop = stop;\n          } else if (stop.type && pickupTypes.includes(stop.type.toLowerCase())) {\n            result.pick = stop;\n          }\n        });\n      }\n\n      return result;\n    }),\n    pickStopAddressDetails: Ember.computed('pickupStopDetails', function () {\n      return Ember.get(this, 'pickupStopDetails.address');\n    }),\n    dropStopAddressDetails: Ember.computed('dropoffStopDetails', function () {\n      return Ember.get(this, 'dropoffStopDetails.address');\n    }),\n    pickStopFormattedCity: Ember.computed('pickStopAddressDetails', function () {\n      const a = Ember.get(this, 'pickStopAddressDetails');\n      const c = Ember.get(a, 'city');\n\n      if (Ember.isEmpty(c)) {\n        const add = Ember.get(a, 'formattedAddress');\n\n        if (!Ember.isEmpty(add)) {\n          const addStr = (0, _formatTextExtension.convertToPascalCase)(add);\n          const addArray = addStr.split(',');\n          return addArray[addArray.length - 2];\n        }\n      }\n\n      return (0, _formatTextExtension.convertToPascalCase)(c);\n    }),\n    dropStopFormattedCity: Ember.computed('dropStopAddressDetails', function () {\n      const a = Ember.get(this, 'dropStopAddressDetails');\n      const c = Ember.get(a, 'city');\n\n      if (Ember.isEmpty(c)) {\n        const add = Ember.get(a, 'formattedAddress');\n\n        if (!Ember.isEmpty(add)) {\n          const addStr = (0, _formatTextExtension.convertToPascalCase)(add);\n          const addArray = addStr.split(',');\n          return addArray[addArray.length - 2];\n        }\n      }\n\n      return (0, _formatTextExtension.convertToPascalCase)(c);\n    }),\n    pickupStopDetails: Ember.computed.alias('stopDetails.pick'),\n    dropoffStopDetails: Ember.computed.alias('stopDetails.drop'),\n    pickupStopTime: Ember.computed('pickupStopDetails', function () {\n      const startTime = Ember.get(this, 'pickupStopDetails.actualArriveTime');\n      const endTime = Ember.get(this, 'pickupStopDetails.actualDepartTime');\n      let mins = 0;\n\n      if (startTime && endTime && _moment.default.utc(startTime).isBefore(_moment.default.utc(endTime))) {\n        mins = _moment.default.utc((0, _moment.default)(endTime, 'HH:mm:ss').diff((0, _moment.default)(startTime, 'HH:mm:ss'))).format('mm');\n      }\n\n      return mins;\n    }),\n    dropoffStopTime: Ember.computed('dropoffStopDetails', function () {\n      const startTime = Ember.get(this, 'dropoffStopDetails.actualArriveTime');\n      const endTime = Ember.get(this, 'dropoffStopDetails.actualDepartTime');\n      let mins = 0;\n\n      if (startTime && endTime && _moment.default.utc(startTime).isBefore(_moment.default.utc(endTime))) {\n        mins = _moment.default.utc((0, _moment.default)(endTime, 'HH:mm:ss').diff((0, _moment.default)(startTime, 'HH:mm:ss'))).format('mm');\n      }\n\n      return mins;\n    }),\n    formattedPickupPromiseTime: Ember.computed('pickupStopDetails', function () {\n      const pickupStop = Ember.get(this, 'pickupStopDetails');\n      return pickupStop && pickupStop.promiseTime ? (0, _moment.default)(pickupStop.promiseTime).format('hh:mm A') : '';\n    }),\n    formattedDropoffPromiseTime: Ember.computed('dropoffStopDetails', function () {\n      const dropoffStop = Ember.get(this, 'dropoffStopDetails');\n      return dropoffStop && dropoffStop.promiseTime ? (0, _moment.default)(dropoffStop.promiseTime).format('hh:mm A') : '';\n    }),\n    formattedPickupActualArriveTime: Ember.computed('pickupStopDetails', function () {\n      const pickupStop = Ember.get(this, 'pickupStopDetails');\n      return pickupStop && pickupStop.actualArriveTime ? (0, _moment.default)(pickupStop.actualArriveTime).format('hh:mm A') : '';\n    }),\n    formattedDropoffActualArriveTime: Ember.computed('dropoffStopDetails', function () {\n      const dropoffStop = Ember.get(this, 'dropoffStopDetails');\n      return dropoffStop && dropoffStop.actualArriveTime ? (0, _moment.default)(dropoffStop.actualArriveTime).format('hh:mm A') : '';\n    }),\n    formattedPickupActualDepartTime: Ember.computed('pickupStopDetails', function () {\n      const pickupStop = Ember.get(this, 'pickupStopDetails');\n      return pickupStop && pickupStop.actualDepartTime ? (0, _moment.default)(pickupStop.actualDepartTime).format('hh:mm A') : '';\n    }),\n    formattedDropoffActualDepartTime: Ember.computed('dropoffStopDetails', function () {\n      const dropoffStop = Ember.get(this, 'dropoffStopDetails');\n      return dropoffStop && dropoffStop.actualDepartTime ? (0, _moment.default)(dropoffStop.actualDepartTime).format('hh:mm A') : '';\n    }),\n    otpValueWithSign: Ember.computed('otpStatus', 'otpValue', function () {\n      const otpStatus = Ember.get(this, 'otpStatus');\n      const otpValue = Ember.get(this, 'otpValue');\n      const msgStr = parseInt(otpStatus, 10) === -1 ? 'Late' : 'Early';\n\n      if (!otpValue) {\n        return msgStr;\n      }\n\n      return msgStr + (parseInt(otpStatus, 10) === -1 ? ' +' : ' -') + otpValue + (otpValue > 1 ? ' mins' : ' min') + ' over OTP';\n    }),\n    formattedTravelNeeds: Ember.computed('travelNeeds', function () {\n      const travelNeeds = [];\n      let equipments = this.get('travelNeeds');\n\n      if (!Ember.isEmpty(equipments)) {\n        if (typeof equipments === 'string') {\n          equipments = JSON.parse(equipments);\n        }\n\n        equipments.forEach(function (item) {\n          const count = item.cnt;\n          const name = item.name;\n          const text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${count} ${name}`);\n          travelNeeds.push(text);\n        });\n      }\n\n      travelNeeds.push((0, _formatTextExtension.formatTextExtension)('mainItem', ''));\n      return {\n        values: travelNeeds\n      };\n    }) // Relationship bindings\n\n    /*passenger: belongsTo('reconcile-passenger'),\n    price: belongsTo('reconcile-price'),\n    stops: hasMany('reconcile-stop'),\n    driver: belongsTo('reconcile-driver'),\n    route: belongsTo('reconcile-route')*/\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-used-attribute\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    attributeId: attr('number'),\n    name: attr('string'),\n    count: attr('number')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-vehicle\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    vehicleId: attr('string'),\n    lat: attr('number'),\n    lng: attr('number'),\n    providerName: attr('string'),\n    vehicleType: attr('string'),\n    wideWheelchair: attr('boolean'),\n    wheelchairSeats: attr('number'),\n    ambulatorySeats: attr('number'),\n    flexSeats: attr('number'),\n    lifo: attr('string'),\n    status: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/reconcile-verify-route\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    routeId: attr('string'),\n    providerName: attr('string'),\n    isVerified: attr('boolean'),\n    actualStartTime: attr('date'),\n    actualEndTime: attr('date'),\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    type: attr('string'),\n    status: attr('string'),\n    errors: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/report-list\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    description: attr('string'),\n    category: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-certification\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    appSentDate: attr('date', {\n      defaultValue: null\n    }),\n    appReceivedDate: attr('date', {\n      defaultValue: null\n    }),\n    sentToMDDate: attr('date', {\n      defaultValue: null\n    }),\n    receivedFromMDDate: attr('date', {\n      defaultValue: null\n    }),\n    appealedDate: attr('date', {\n      defaultValue: null\n    }),\n    appealHearingDate: attr('date', {\n      defaultValue: null\n    }),\n    appealDecisionDate: attr('date', {\n      defaultValue: null\n    }),\n    appealNotes: attr('string'),\n    appealLocation: attr('string'),\n    appealPhone: attr('string'),\n    approvedDate: attr('date', {\n      defaultValue: null\n    }),\n    deniedDate: attr('date', {\n      defaultValue: null\n    }),\n    deniedBy: attr('string'),\n    reasonDenied: attr('string'),\n    approvalComments: attr('string'),\n    assessmentDate: attr('date', {\n      defaultValue: null\n    }),\n    assessmentHearingDate: attr('date', {\n      defaultValue: null\n    }),\n    assessmentDecisionDate: attr('date', {\n      defaultValue: null\n    }),\n    assessmentNotes: attr('string'),\n    assessmentLocation: attr('string'),\n    assessmentPhone: attr('string'),\n    verificationMethod: attr('string'),\n    verifiedBy: attr('string'),\n    doctorName: attr('string'),\n    doctorPhone: attr('string'),\n    doctorEmail: attr('string'),\n    doctorExtension: attr('string'),\n    doctorAddress: attr('string'),\n    rider: belongsTo('rider')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-contact-info\", [\"exports\", \"ember-data\", \"lodash\"], function (_exports, _emberData, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    store: Ember.inject.service(),\n    name: attr('string', {\n      defaultValue: ''\n    }),\n    email: attr('string', {\n      defaultValue: ''\n    }),\n    phoneNumber: attr('string', {\n      defaultValue: ''\n    }),\n    extension: attr('string'),\n    address: attr('string', {\n      defaultValue: ''\n    }),\n    relationship: attr('string', {\n      defaultValue: ''\n    }),\n    contactType: attr('string', {\n      defaultValue: ''\n    }),\n    mailPreferenceEnabled: attr('boolean'),\n    isSoftDeleted: attr('boolean', {\n      defaultValue: false\n    }),\n    loggingMeta: attr(),\n    reason: attr('string'),\n    rider: belongsTo('rider'),\n    displayContactType: Ember.computed('contactType', function () {\n      const contactType = this.get('contactType');\n      return (0, _lodash.capitalize)(contactType);\n    }),\n    formattedPhoneNumber: Ember.computed('phoneNumber', function () {\n      const phoneNumber = this.get('phoneNumber');\n\n      if (!Ember.isEmpty(phoneNumber)) {\n        const areaCode = phoneNumber.substring(0, 3);\n        const phone = phoneNumber.substring(3, 10);\n        const extension = this.get('extension');\n        const formatedPhone = phone.match(/\\d{3}(?=\\d{2,3})|\\d+/g).join('-');\n\n        if (extension) {\n          return `(${areaCode}) ${formatedPhone}-#${extension}`;\n        }\n\n        return `(${areaCode}) ${formatedPhone}`;\n      }\n\n      return '';\n    }),\n    reasonDisplayName: Ember.computed('reason', function () {\n      const reason = this.get('reason');\n      const csReasonName = `config-System_Configuration-contact_reason_types/${reason}`;\n      const riderContactReasonType = this.get('store').peekRecord('cs-config-item', csReasonName);\n      return Ember.isEmpty(riderContactReasonType) ? '' : riderContactReasonType.get('value.displayName');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-eligibility\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _emberData, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    from: attr('date', {\n      defaultValue: null\n    }),\n    to: attr('date', {\n      defaultValue: null\n    }),\n    isSoftDeleted: attr('boolean', {\n      defaultValue: false\n    }),\n    // the 2 attributes below are used only inside IQUX as a in-memory record of the original eligibility category and eligibility condition for undo operations\n    origEligCateName: attr('string'),\n    origEligCondName: attr('string'),\n    rider: belongsTo('rider'),\n    eligibilityCategory: belongsTo('eligibility-category'),\n    eligibilityCondition: belongsTo('eligibility-condition'),\n    formattedFrom: Ember.computed('from', function () {\n      const from = (0, _moment.default)(this.get('from'));\n      return from.format(_environment.default.dateTimeFormat.dateMoment);\n    }),\n    formattedTo: Ember.computed('to', function () {\n      const to = (0, _moment.default)(this.get('to'));\n      return to.format(_environment.default.dateTimeFormat.dateMoment);\n    }),\n    formattedEligibilityStartEnd: Ember.computed('formattedFrom', 'formattedTo', function () {\n      const formattedEligibilityStart = this.get('formattedFrom');\n      const formattedEligibilityEnd = this.get('formattedTo');\n      return `${formattedEligibilityStart} - ${formattedEligibilityEnd}`;\n    }),\n    isConditional: Ember.computed('eligibilityCategory', function () {\n      const eligibilityCategory = this.get('eligibilityCategory');\n      return eligibilityCategory.get('data.conditional').toLowerCase() === 'yes';\n    }),\n    isWithinRange: Ember.computed('from', 'to', function () {\n      const from = this.get('from');\n      const to = this.get('to');\n      const current = Date.now();\n      return current >= from && current <= to;\n    }),\n    categoryDisplayName: Ember.computed('eligibilityCategory', function () {\n      const eligibilityCategory = this.get('eligibilityCategory');\n      return eligibilityCategory.get('data.displayName');\n    }),\n    conditionDisplayName: Ember.computed('eligibilityCondition', function () {\n      const eligibilityCondition = this.get('eligibilityCondition');\n      return eligibilityCondition.get('data.displayName');\n    }),\n    checkADABoundary: Ember.computed('eligibilityCategory', function () {\n      const eligibilityCategory = this.get('eligibilityCategory');\n      const checkADABoundaryData = eligibilityCategory.get('data') || {};\n      const isCheckADABoundary = Ember.isPresent(checkADABoundaryData.checkADABoundary) ? checkADABoundaryData.checkADABoundary.toUpperCase() === 'YES' : false;\n      return isCheckADABoundary;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-external-eligibility\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    status: attr('string'),\n    categories: attr(),\n    riderExternal: belongsTo('rider-external'),\n    allowedServiceModes: attr(),\n    disabilities: attr(),\n    medicaidQualified: attr('boolean'),\n    fareAmount: attr(),\n    pcaRequired: attr('boolean'),\n    certAppt: attr(),\n    riderEligibilityStart: Ember.computed('categories.0.begin', function () {\n      const eligibilityStartDTM = this.get('categories.0.begin');\n      return new Date(eligibilityStartDTM);\n    }),\n    riderEligibilityEnd: Ember.computed('categories.0.end', function () {\n      const eligibilityEndDTM = this.get('categories.0.end');\n      return new Date(eligibilityEndDTM);\n    }),\n    riderEligibilityType: Ember.computed('categories.0.type', function () {\n      return this.get('categories.0.type');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-external\", [\"exports\", \"ember-data\", \"adept-iq/mixins/disable-record\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _emberData, _disableRecord, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend(_disableRecord.default, {\n    bookingService: Ember.inject.service('booking'),\n    riderId: attr('string'),\n    firstName: attr('string'),\n    lastName: attr('string'),\n    loadTime: attr('number'),\n    unloadTime: attr('number'),\n    walkingSpeed: attr('number'),\n    notes: attr('string'),\n    passcode: attr('string'),\n    middleName: attr('string'),\n    dateOfBirth: attr('date'),\n    notificationPhoneNumbers: attr(),\n    status: attr('string'),\n    // set after a passenger search from the IQ rider's suspensions; a rider with a\n    // suspension covering today is shown as Inactive and cannot be booked\n    hasActiveSuspension: false,\n    travelNeeds: attr(),\n    categories: attr(),\n    places: attr(),\n    serviceNeeds: attr(),\n    eligibility: belongsTo('rider-external-eligibility'),\n    computedStatus: Ember.computed('status', 'hasActiveSuspension', function () {\n      if (this.get('hasActiveSuspension')) return 'SUSPENDED';\n      return this.get('status');\n    }),\n    age: Ember.computed('dateOfBirth', function () {\n      const dateOfBirth = this.get('dateOfBirth');\n      if (Ember.isBlank(dateOfBirth)) return '';\n      const dob = (0, _moment.default)(dateOfBirth, 'YYYY-MM-DD');\n      const now = (0, _moment.default)();\n      return now.diff(dob, 'years');\n    }),\n    dobFormatted: Ember.computed('dateOfBirth', function () {\n      const dateOfBirth = this.get('dateOfBirth');\n      if (Ember.isBlank(dateOfBirth)) return '';\n      const dob = (0, _moment.default)(dateOfBirth, 'YYYY-MM-DD');\n      return dob.format(_environment.default.dateTimeFormat.dateMoment);\n    }),\n    eligibilityStart: Ember.computed('categories.0.begin', function () {\n      const eligibilityStartDate = this.get('categories.0.begin');\n      if (Ember.isEmpty(eligibilityStartDate)) return '';\n      return new Date(eligibilityStartDate);\n    }),\n    eligibilityEnd: Ember.computed('categories.0.end', function () {\n      const eligibilityEndDate = this.get('categories.0.end');\n      if (Ember.isEmpty(eligibilityEndDate)) return '';\n      return new Date(eligibilityEndDate);\n    }),\n    formattedEligibilityStart: Ember.computed('eligibilityStart', function () {\n      return (0, _moment.default)(this.get('eligibilityStart')).format(_environment.default.dateTimeFormat.dateMoment);\n    }),\n    formattedEligibilityEnd: Ember.computed('eligibilityEnd', function () {\n      return (0, _moment.default)(this.get('eligibilityEnd')).format(_environment.default.dateTimeFormat.dateMoment);\n    }),\n    eligibilityType: Ember.computed('eligibility.riderEligibilityType', function () {\n      return this.get('eligibility.riderEligibilityType');\n    }),\n    isEligibilityConditional: Ember.computed('eligibilityType', function () {\n      if (this.get('eligibilityType').toLowerCase() === 'conditional') {\n        return true;\n      }\n\n      return false;\n    }),\n    pcaRequired: Ember.computed('eligibility', function () {\n      return this.get('eligibility.pcaRequired');\n    }),\n    fullName: Ember.computed('firstName', 'middleName', 'lastName', function () {\n      return `${Ember.get(this, 'firstName')} ${Ember.get(this, 'middleName') || ''} ${Ember.get(this, 'lastName')}`.replace(/\\s+/, ' ');\n    }),\n    mainPhoneNumber: Ember.computed('notificationPhoneNumbers', function () {\n      const phoneNumObject = this.get('notificationPhoneNumbers').filter(notificationPhoneNumber => notificationPhoneNumber.type.toUpperCase() === 'MAIN').firstObject;\n      return phoneNumObject ? phoneNumObject.phoneNumber : '';\n    }),\n    mainAreaCode: Ember.computed('notificationPhoneNumbers', function () {\n      const areaCodeObject = this.get('notificationPhoneNumbers').filter(areaCode => areaCode.type.toUpperCase() === 'MAIN').firstObject;\n      return areaCodeObject ? areaCodeObject.areaCode : '';\n    }),\n    formattedPhoneNumber: Ember.computed('mainPhoneNumber', 'mainAreaCode', function () {\n      const mainAreaCode = this.get('mainAreaCode');\n      const mainPhoneNumber = this.get('mainPhoneNumber');\n\n      if (Ember.isEmpty(mainPhoneNumber) && Ember.isEmpty(mainAreaCode)) {\n        return '';\n      }\n\n      return mainAreaCode + '-' + mainPhoneNumber;\n    }),\n    eligibilityConditions: Ember.computed('eligbility', function () {\n      const conditions = this.get('eligibility.categories.0.conditions');\n\n      if (!conditions || conditions.length === 0) {\n        return [];\n      }\n\n      return conditions;\n    }),\n    formattedMainPhoneNumber: Ember.computed('mainPhoneNumber', 'mainAreaCode', function () {\n      const mainAreaCode = this.get('mainAreaCode');\n      const mainPhoneNumber = this.get('mainPhoneNumber');\n\n      if (Ember.isEmpty(mainPhoneNumber) && Ember.isEmpty(mainAreaCode)) {\n        return '';\n      }\n\n      return mainAreaCode + '-' + mainPhoneNumber;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-funding\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    riderService: Ember.inject.service('rider'),\n    fundingAgencyName: attr('string'),\n    notes: attr('string'),\n    startDate: attr('date'),\n    endDate: attr('date'),\n    rider: belongsTo('rider'),\n    fundingAgency: belongsTo('funding-agency'),\n    fundingAgencyDisplayName: Ember.computed('fundingAgency.displayName', function () {\n      const fundingAgency = this.get('fundingAgency');\n      return fundingAgency.get('displayName');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-phone-number\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.MAIN_PHONE_TYPE = _exports.HOME_PHONE_TYPE = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  const MAIN_PHONE_TYPE = 'main';\n  _exports.MAIN_PHONE_TYPE = MAIN_PHONE_TYPE;\n  const HOME_PHONE_TYPE = 'home';\n  _exports.HOME_PHONE_TYPE = HOME_PHONE_TYPE;\n\n  var _default = Model.extend({\n    areaCode: attr('string'),\n    phoneNumber: attr('string'),\n    extension: attr('string'),\n    type: attr('string', {\n      defaultValue: 'default'\n    }),\n    description: attr('string', {\n      defaultValue: 'default'\n    }),\n    mobileCarrier: attr('string', {\n      defaultValue: 'default'\n    }),\n    useForSMSNotifications: attr('string', {\n      defaultValue: false\n    }),\n    useForVoiceNotifications: attr('string', {\n      defaultValue: false\n    }),\n    isSoftDeleted: attr('boolean', {\n      defaultValue: false\n    }),\n    loggingMeta: attr(),\n    rider: belongsTo('rider'),\n    formattedPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phoneMatch = !Number.isNaN(this.get('phoneNumber')) ? this.get('phoneNumber').match(/\\d{3}(?=\\d{2,3})|\\d+/g) : null;\n      const phone = Ember.isPresent(phoneMatch) ? phoneMatch.join('-') : '';\n      const extension = this.get('extension');\n      const areaCode = this.get('areaCode');\n\n      if (extension) {\n        return `(${areaCode}) ${phone}-#${extension}`;\n      }\n\n      return `(${areaCode}) ${phone}`;\n    }),\n    formattedPhoneNumberNoExt: Ember.computed('areaCode', 'phoneNumber', function () {\n      const phoneMatch = !Number.isNaN(this.get('phoneNumber')) ? this.get('phoneNumber').match(/\\d{3}(?=\\d{2,3})|\\d+/g) : null;\n      const phone = Ember.isPresent(phoneMatch) ? phoneMatch.join('-') : '';\n      const areaCode = this.get('areaCode');\n      return `(${areaCode}) ${phone}`;\n    }),\n    unformattedPhoneNumber: Ember.computed('areaCode', 'phoneNumber', function () {\n      const phone = this.get('phoneNumber');\n      const areaCode = this.get('areaCode');\n      return `${areaCode}${phone}`;\n    }),\n    typeDisplayName: Ember.computed('type', function () {\n      const typeName = this.get('type');\n      const record = `config-System_Configuration-rider_phone_types/${typeName}`;\n      const riderPhoneType = this.get('store').peekRecord('cs-config-item', record);\n      const displayName = riderPhoneType.get('value.displayName') || riderPhoneType.get('value')['Display Name'];\n      return displayName;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-place-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    value: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-place\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    mailPreferenceEnabled: attr('boolean'),\n    isSoftDeleted: attr('boolean', {\n      defaultValue: false\n    }),\n    loggingMeta: attr(),\n    rider: belongsTo('rider'),\n    place: belongsTo('place'),\n    riderPlaceType: belongsTo('rider-place-type'),\n    riderPlaceTypeName: Ember.computed.alias('riderPlaceType.id')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-service-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    isSoftDeleted: attr('boolean', {\n      defaultValue: false\n    }),\n    serviceNeedType: belongsTo('service-need-type'),\n    rider: belongsTo('rider')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-suspension\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    reason: attr('string'),\n    details: attr('string'),\n    startDate: attr('date'),\n    endDate: attr('date'),\n    rider: belongsTo('rider')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider-travel-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    count: attr('number'),\n    loadTime: attr('number'),\n    unloadTime: attr('number'),\n    loggingMeta: attr(),\n    rider: belongsTo('rider'),\n    travelNeedType: belongsTo('travel-need-type'),\n    passengerType: belongsTo('passenger-type'),\n    // used for `@each`-type computed property dependent keys\n    passengerTypeName: Ember.computed.readOnly('passengerType.name'),\n    travelNeedTypeName: Ember.computed.readOnly('travelNeedType.name'),\n    isExtraPassenger: Ember.computed('travelNeedType.isServiceAnimal', 'passengerType.{isPca,isCompanion}', function () {\n      return this.get('travelNeedType.isServiceAnimal') || this.get('passengerType.isPca') || this.get('passengerType.isCompanion');\n    }),\n    isEquipment: Ember.computed.not('isExtraPassenger')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/rider\", [\"exports\", \"ember-data\", \"adept-iq/utils/format-text-extension\", \"adept-iq/config/config-object-template\", \"moment\", \"lodash\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _emberData, _formatTextExtension, _configObjectTemplate, _moment, _lodash, _environment, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany,\n    belongsTo\n  } = _emberData.default;\n\n  const FARE_CALCULATION_TYPE = _configObjectTemplate.default['config-System_Configuration-travel_need_types'].fields.find(field => field.fieldName === 'fareCalculationType');\n\n  var _default = Model.extend({\n    bookingService: Ember.inject.service('booking'),\n    externalId: attr('string'),\n    riderId: attr('string'),\n    firstName: attr('string'),\n    lastName: attr('string'),\n    middleName: attr('string'),\n    dateOfBirth: attr('date'),\n    passcode: attr('string'),\n    provider: attr('string'),\n    notes: attr('string'),\n    driverNotes: attr('string'),\n    email: attr('string'),\n    status: attr('string', {\n      defaultValue: 'temporary'\n    }),\n    type: attr('string', {\n      defaultValue: 'client'\n    }),\n    thumbnail: attr(),\n    brokerEligible: attr('boolean'),\n    taxiEligible: attr('boolean'),\n    itpEligible: attr('boolean'),\n    walkingSpeed: attr('number', {\n      defaultValue: 0\n    }),\n    phoneNotificationEnabled: attr('boolean', {\n      defaultValue: false\n    }),\n    emailNotificationEnabled: attr('boolean', {\n      defaultValue: false\n    }),\n    smsNotificationEnabled: attr('boolean', {\n      defaultValue: false\n    }),\n    phoneNotification: attr('string', {\n      defaultValue: ''\n    }),\n    emailNotification: attr('string', {\n      defaultValue: ''\n    }),\n    smsNotification: attr('string', {\n      defaultValue: ''\n    }),\n    smsNotificationConsent: attr('boolean', {\n      allowNull: true\n    }),\n    legs: hasMany('leg'),\n    subscriptions: hasMany('subscription'),\n    riderEligibilities: hasMany('rider-eligibility'),\n    riderTravelNeeds: hasMany('rider-travel-need'),\n    riderPlaces: hasMany('rider-place'),\n    riderPhoneNumbers: hasMany('rider-phone-number'),\n    riderContacts: hasMany('rider-contact-info'),\n    riderCertifications: hasMany('rider-certification'),\n    riderSuspensions: hasMany('rider-suspension'),\n    riderFundings: hasMany('rider-funding'),\n    riderServiceNeeds: hasMany('rider-service-need'),\n    fareCategory: belongsTo('fare-category'),\n    age: Ember.computed('dateOfBirth', function () {\n      const dateOfBirth = this.get('dateOfBirth');\n      if (Ember.isBlank(dateOfBirth)) return '';\n      const dob = (0, _moment.default)(dateOfBirth, 'YYYY-MM-DD');\n      const now = (0, _moment.default)();\n      return now.diff(dob, 'years');\n    }),\n    displayStatus: Ember.computed('status', function () {\n      const status = this.get('status');\n      return (0, _lodash.capitalize)(status);\n    }),\n    thumbnailImage: Ember.computed('thumbnail', {\n      get() {\n        const thumbnail = this.get('thumbnail');\n\n        if (!thumbnail || thumbnail === 'defaultThumbnail') {\n          return ''; // fallback image\n        }\n\n        try {\n          const parsed = JSON.parse(thumbnail);\n          return parsed.image || '';\n        } catch (e) {\n          return '';\n        }\n      },\n\n      set(key, value) {\n        // Optional: you can store it back as raw Uint8Array or whatever format you want\n        this.set('thumbnail', value);\n        return value;\n      }\n\n    }),\n    travelNeeds: Ember.computed('riderTravelNeeds', function () {\n      const riderTravelNeeds = this.get('riderTravelNeeds');\n      /* eslint-disable newline-after-var */\n\n      const travelNeeds = riderTravelNeeds.map(record => {\n        let fareCalculationType = record.get('travelNeedType.value')[FARE_CALCULATION_TYPE.displayName];\n\n        if (Ember.isEmpty(fareCalculationType)) {\n          fareCalculationType = record.get('travelNeedType.value')[FARE_CALCULATION_TYPE.fieldName];\n        }\n\n        return {\n          name: record.get('travelNeedTypeName') || record.get('travelNeedType.name'),\n          count: parseInt(record.get('count'), 10),\n          fareCalculationType: fareCalculationType,\n          loadTime: record.get('loadTime'),\n          unloadTime: record.get('unloadTime')\n        };\n      });\n      /* eslint-enable newline-after-var */\n\n      return travelNeeds;\n    }),\n    segments: Ember.computed('legs.@each.segment', function () {\n      const legs = this.get('legs');\n      const segments = [];\n\n      if (!Ember.isEmpty(legs)) {\n        legs.forEach(leg => {\n          // The leg is made up of multiple segments they all should be under the same provider\n          const segment = (0, _unwrapProxy.unwrapProxy)(leg.get('segment'));\n          if (segment) segments.push(segment);\n        });\n      }\n\n      return segments;\n    }),\n    trips: Ember.computed('segments.[]', function () {\n      const trips = [];\n      const segments = this.get('segments');\n\n      if (!Ember.isEmpty(segments)) {\n        segments.forEach(segment => {\n          const tripArr = (0, _unwrapProxy.unwrapProxy)(segment.get('trips')).toArray();\n          trips.push(...tripArr);\n        });\n      }\n\n      return trips;\n    }),\n    schedules: Ember.computed('trips.[]', function () {\n      const trips = this.get('trips') || [];\n      const schedules = trips.map(trip => {\n        const schedule = (0, _unwrapProxy.unwrapProxy)(trip.get('schedule'));\n        return schedule;\n      });\n      return (0, _lodash.uniqBy)(schedules, 'id');\n    }),\n    providers: Ember.computed('segments.[].trips.firstObject.provider', function () {\n      const segments = this.get('segments');\n      const providers = [];\n      const providerHash = {};\n\n      if (!Ember.isEmpty(segments)) {\n        segments.forEach(segment => {\n          // The leg is made up of multiple segments they all should be under the same provider\n          const provider = (0, _unwrapProxy.unwrapProxy)(segment.get('trips.firstObject.provider')); // the array should be unique to only new providers\n\n          if (provider && !providerHash[provider.get('id')]) {\n            providers.push(provider);\n            providerHash[provider.get('id')] = true;\n          }\n        });\n      }\n\n      return providers;\n    }),\n    mainPhoneNumber: Ember.computed('riderPhoneNumbers.@each.type', function () {\n      const phoneNumObject = this.get('riderPhoneNumbers').filter(phoneNumber => phoneNumber.type.toLowerCase() === 'main').firstObject;\n      return phoneNumObject ? phoneNumObject : null;\n    }),\n    riderPhoneNumber: Ember.computed('riderPhoneNumbers.[]', function () {\n      return this.get('riderPhoneNumbers.firstObject');\n    }),\n    primaryAddresses: Ember.computed('riderPlaces', 'riderPlaces.{[],@each.riderPlaceTypeName}', function () {\n      const riderPlaces = this.get('riderPlaces');\n      const primaryAddresses = [];\n\n      if (!Ember.isEmpty(riderPlaces)) {\n        riderPlaces.forEach(riderPlace => {\n          if (riderPlace.get('riderPlaceTypeName') === 'primary') {\n            primaryAddresses.push(riderPlace);\n          }\n        });\n      }\n\n      return primaryAddresses;\n    }),\n    favoriteAddresses: Ember.computed('riderPlaces', 'riderPlaces.{[],@each.riderPlaceTypeName}', function () {\n      const riderPlaces = this.get('riderPlaces');\n      const favoriteAddresses = [];\n\n      if (!Ember.isEmpty(riderPlaces)) {\n        riderPlaces.forEach(riderPlace => {\n          if (riderPlace.get('riderPlaceTypeName') === 'favorite') {\n            favoriteAddresses.push(riderPlace);\n          }\n        });\n      }\n\n      return favoriteAddresses;\n    }),\n    fullName: Ember.computed('firstName', 'middleName', 'lastName', function () {\n      return `${Ember.get(this, 'firstName')} ${Ember.get(this, 'middleName') || ''} ${Ember.get(this, 'lastName')}`.replace(/\\s+/, ' ');\n    }),\n    // primaryAddresses: hasMany('address', { inverse: 'ridersPrimary' }),\n    // favoriteAddresses: hasMany('address', { inverse: 'ridersFavorite' }),\n    equipments: Ember.computed.filterBy('riderTravelNeeds', 'isEquipment', true),\n    extraPassengers: Ember.computed.filterBy('riderTravelNeeds', 'isExtraPassenger', true),\n    formattedPhoneNumbers: Ember.computed('riderPhoneNumbers.{[],@each.areaCode}', function () {\n      const phoneNumbers = [];\n      const riderPhoneNumbers = this.get('riderPhoneNumbers');\n\n      if (!Ember.isEmpty(riderPhoneNumbers)) {\n        riderPhoneNumbers.forEach(function (item) {\n          phoneNumbers.push((0, _formatTextExtension.formatTextExtension)('valueItem', `${item.get('formattedPhoneNumber')}`));\n        });\n      }\n\n      return {\n        values: phoneNumbers\n      };\n    }),\n    formattedPrimaryAddresses: Ember.computed('primaryAddresses', function () {\n      const addresses = [];\n      const primaryAddresses = this.get('primaryAddresses');\n\n      if (!Ember.isEmpty(primaryAddresses)) {\n        primaryAddresses.forEach(function (item) {\n          let address = `${item.get('place.address.streetNumber')} ${item.get('place.address.streetAddress')} ${item.get('place.address.locality')}`;\n\n          if (!Ember.isEmpty(item.get('place.address.premise'))) {\n            address = `${item.get('place.address.premise')} - ` + address;\n          }\n\n          addresses.push((0, _formatTextExtension.formatTextExtension)('valueItem', address));\n        });\n      }\n\n      return {\n        values: addresses\n      };\n    }),\n    formattedFavoriteAddresses: Ember.computed('favoriteAddresses', function () {\n      const addresses = [];\n      const favoriteAddresses = this.get('favoriteAddresses');\n\n      if (!Ember.isEmpty(favoriteAddresses)) {\n        favoriteAddresses.forEach(function (item) {\n          let address = `${item.get('place.address.streetNumber')} ${item.get('place.address.streetAddress')} ${item.get('place.address.locality')}`;\n\n          if (!Ember.isEmpty(item.get('place.address.premise'))) {\n            address = `${item.get('place.address.premise')} - ` + address;\n          }\n\n          addresses.push((0, _formatTextExtension.formatTextExtension)('valueItem', address));\n        });\n      }\n\n      return {\n        values: addresses\n      };\n    }),\n    formattedProviders: Ember.computed('providers', function () {\n      const providers = [];\n      const provider = this.get('providers');\n\n      if (!Ember.isEmpty(provider)) {\n        provider.forEach(function (item) {\n          if (item) {\n            const providerName = `${item.get('providerName')}`;\n            providers.push((0, _formatTextExtension.formatTextExtension)('valueItem', providerName));\n          }\n        });\n      }\n\n      return {\n        values: providers\n      };\n    }),\n    riderAddresses: Ember.computed('primaryAddresses', 'favoriteAddresses', function () {\n      const addresses = [];\n      const primaryAddresses = this.get('primaryAddresses');\n\n      if (!Ember.isEmpty(primaryAddresses)) {\n        primaryAddresses.forEach(function (item) {\n          addresses.push(item);\n        });\n        this.get('favoriteAddresses').forEach(function (item) {\n          addresses.push(item);\n        });\n      }\n\n      return addresses;\n    }),\n    formattedRiderTravelNeeds: Ember.computed('equipments.@each.{count,travelNeedTypeName}', 'extraPassengers.@each.{count,passengerTypeName}', function () {\n      const riderTravelNeeds = [];\n      const equipments = this.get('equipments');\n\n      if (!Ember.isEmpty(equipments)) {\n        equipments.forEach(function (item) {\n          const count = item.get('count');\n          const name = item.get('travelNeedType.name');\n          const text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${count} ${name}`);\n          riderTravelNeeds.push(text);\n        });\n      }\n\n      const extraPassengers = this.get('extraPassengers');\n\n      if (!Ember.isEmpty(extraPassengers)) {\n        extraPassengers.forEach(function (item) {\n          const count = item.get('count');\n          const name = item.get('passengerType.name');\n          const text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${count} ${name}`);\n          riderTravelNeeds.push(text);\n        });\n      }\n\n      return {\n        values: riderTravelNeeds\n      };\n    }),\n    formattedRiderEligibilities: Ember.computed('riderEligibilities.@each.{eligibilityTypeName,from,to}', function () {\n      const riderEligibilities = this.get('riderEligibilities').map(item => {\n        const eligibilityTypeName = item.get('eligibilityTypeName');\n        const startMoment = (0, _moment.default)(item.get('from'));\n        const endMoment = (0, _moment.default)(item.get('to'));\n        const startDate = startMoment.format(_environment.default.dateTimeFormat.dateMoment);\n        const endDate = endMoment.format(_environment.default.dateTimeFormat.dateMoment);\n        const text = `${eligibilityTypeName} ${startDate} - ${endDate}`;\n        return (0, _formatTextExtension.formatTextExtension)('valueItem', text);\n      });\n      return {\n        values: riderEligibilities\n      };\n    }),\n    riderEligibilityDates: Ember.computed('riderEligibilities.@each.{from,to}', function () {\n      const dates = [];\n      const riderEligibilities = this.get('riderEligibilities');\n\n      if (!Ember.isEmpty(riderEligibilities)) {\n        riderEligibilities.forEach(item => {\n          const startMoment = {\n            value: (0, _moment.default)(item.get('from')).toDate()\n          };\n          const endMoment = {\n            value: (0, _moment.default)(item.get('to')).toDate()\n          };\n          dates.push(...[startMoment, endMoment]);\n        });\n      }\n\n      return {\n        values: dates\n      };\n    }),\n    hasConditionalEligibilities: Ember.computed('riderEligibilities.@each', function () {\n      return this.get('riderEligibilities').filter(riderEligibility => riderEligibility.isConditional).length > 0;\n    }),\n    futureEligibilities: Ember.computed('riderEligibilities.@each.{from,to}', function () {\n      const riderEligibilities = this.get('riderEligibilities');\n      const today = (0, _moment.default)().startOf('day');\n      const futureEligibilities = riderEligibilities.filter(riderEligibility => {\n        const start = riderEligibility.get('from');\n        const startMoment = (0, _moment.default)((0, _moment.default)(start).startOf('day'));\n        const end = riderEligibility.get('to');\n        const endMoment = (0, _moment.default)((0, _moment.default)(end).startOf('day'));\n        return startMoment.isSameOrAfter(today) || endMoment.isSameOrAfter(today);\n      });\n      const sortedFutureEligibilities = futureEligibilities.sortBy('categoryDisplayName', 'conditionDisplayName', 'from');\n      return sortedFutureEligibilities;\n    }),\n    expiringNotRenewedEligibilityTypes: Ember.computed('riderEligibilities.@each.{from,to}', function () {\n      const eligibilityExpirationCheck = this.get('bookingService').getEligibilityExpirationCheckDays();\n      const now = (0, _moment.default)();\n      const nowStartOfDay = (0, _moment.default)().startOf('day');\n      const maximum = (0, _moment.default)((0, _moment.default)(now).add(eligibilityExpirationCheck, 'day').startOf('day'));\n      const riderEligibilities = this.get('riderEligibilities').toArray().filter(eligibility => {\n        const toMoment = (0, _moment.default)(eligibility.get('to')).startOf('day');\n        return toMoment.isSameOrAfter(nowStartOfDay);\n      });\n\n      const groupedExpiringEligibilities = _lodash.default.groupBy(riderEligibilities, riderEligibility => {\n        return riderEligibility.get('categoryDisplayName');\n      });\n\n      const notRenewedExpiringEligibilityTypes = _lodash.default.map(groupedExpiringEligibilities, (eligibilities, typeName) => {\n        const renewed = _lodash.default.filter(eligibilities, eligibility => {\n          const toMoment = (0, _moment.default)(eligibility.get('to')).startOf('day');\n          return toMoment.isSameOrAfter(maximum);\n        });\n\n        return _lodash.default.size(renewed) === 0 ? typeName : null;\n      });\n\n      return _lodash.default.compact(notRenewedExpiringEligibilityTypes);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/road-call-code-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    code: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/road-call-code\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/road-supervisor-vehicle\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  const {\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    //updated from RS Service\n    lat: attr('number'),\n    lng: attr('number'),\n    heading: attr('number'),\n    speed: attr('number'),\n    timestamp: attr('date'),\n    isThisRoadSupervisor: attr('boolean', {\n      defaultValue: true\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/role-permission\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    permSsoRole: belongsTo('perm-sso-role'),\n    roleId: attr('string'),\n    permissionId: attr('number'),\n    category: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-activity-log-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-break\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/convertDistance\", \"lodash\", \"adept-iq/models/break-type\"], function (_exports, _emberData, _moment, _convertDistance, _lodash, _breakType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.UNSCHEDULED_BREAK_STATUS = _exports.SCHEDULED_BREAK_STATUS = _exports.ON_BREAK_STOP_STATUS = _exports.OFF_BREAK_STOP_STATUS = _exports.BREAK_TYPE = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n  const SCHEDULED_BREAK_STATUS = 'scheduled';\n  _exports.SCHEDULED_BREAK_STATUS = SCHEDULED_BREAK_STATUS;\n  const UNSCHEDULED_BREAK_STATUS = 'unscheduled';\n  _exports.UNSCHEDULED_BREAK_STATUS = UNSCHEDULED_BREAK_STATUS;\n  const ON_BREAK_STOP_STATUS = 'On break';\n  _exports.ON_BREAK_STOP_STATUS = ON_BREAK_STOP_STATUS;\n  const OFF_BREAK_STOP_STATUS = 'Off break';\n  _exports.OFF_BREAK_STOP_STATUS = OFF_BREAK_STOP_STATUS;\n  const BREAK_TYPE = 'break';\n  _exports.BREAK_TYPE = BREAK_TYPE;\n\n  var _default = Model.extend({\n    state: attr('string'),\n    plannedRouteOrdinal: attr('number'),\n    requestTime: attr('date'),\n    promisedStart: attr('date'),\n    estimatedStart: attr('date'),\n    estimatedEnd: attr('date'),\n    plannedDuration: attr('string'),\n    notes: attr('string'),\n    type: attr('string', {\n      defaultValue: 'break'\n    }),\n    // front-end only property, non serializable\n    plannedSlackTime: attr('number'),\n    // front-end only property, non serializable\n    // populated by route-exec-event\n    arriveStatus: attr('string'),\n    status: attr('string'),\n    otp: attr('string'),\n    otpValue: attr('number'),\n    odometer: attr('string'),\n    arriveLat: attr('string'),\n    arriveLng: attr('string'),\n    departLat: attr('string'),\n    departLng: attr('string'),\n    actualArriveTime: attr('date'),\n    actualDepartTime: attr('date'),\n    arrivePerformedBy: attr('string'),\n    departPerformedBy: attr('string'),\n    scheduleOrdinal: attr('number'),\n    // front-end only property, non serializable\n    isRemoved: attr('boolean', {\n      defaultValue: false\n    }),\n    breakType: belongsTo('break-type'),\n    route: belongsTo('route'),\n    place: belongsTo('place'),\n    stopPoint: belongsTo('stop-point'),\n    etaNavRouteBreak: belongsTo('etanav-route-break'),\n    plannedEta: Ember.computed.alias('estimatedStart'),\n    plannedBreakStartTime: Ember.computed.alias('promisedStart'),\n    address: Ember.computed.alias('place.address.readableAddress'),\n    city: Ember.computed.alias('place.address.locality'),\n    routeName: Ember.computed.alias('route.name'),\n    routeTripStartTime: Ember.computed.readOnly('estimatedStart'),\n    routeTripEndTime: Ember.computed.readOnly('estimatedEnd'),\n    cluster: Ember.computed.alias('stopPoint.cluster'),\n    stopType: Ember.computed.readOnly('type'),\n    // populated from stops-widget iqux-service\n    scheduleStopStatus: attr('string'),\n    plannedDurationSeconds: Ember.computed('plannedDuration', function () {\n      const plannedDuration = this.get('plannedDuration') ? this.get('plannedDuration') : '0'; //convert plannedDuration into seconds.Payload request except  plannedDuration in seconds\n\n      return Math.floor(plannedDuration * 60);\n    }),\n    projectedEndDate: Ember.computed('plannedDuration', 'requestTime', function () {\n      const plannedDuration = this.get('plannedDuration') ? this.get('plannedDuration') : '0';\n      const requestTime = this.get('requestTime');\n      if (!requestTime) return;\n      const requestTimeMoment = (0, _moment.default)(requestTime);\n      const estimatedEndMoment = requestTimeMoment.clone().startOf('minute');\n      return estimatedEndMoment.add(parseInt(plannedDuration, 10), 'minutes').toDate();\n    }),\n    computedStatus: Ember.computed('status', function () {\n      const status = this.get('status') !== '' ? this.get('status') : null;\n      return status;\n    }),\n    convertedOdometer: Ember.computed('odometer', function () {\n      const odometer = this.get('odometer');\n\n      if (odometer) {\n        return (0, _convertDistance.convertMetersToMiles)(odometer);\n      }\n\n      return '';\n    }),\n    previousfixedStop: Ember.computed('route.orderedSchedulingStopsWithGaragesAndBreaks', 'breakType', function () {\n      const currentBreakId = this.get('id');\n      const breakType = this.get('breakType.name');\n      const orderedSchedulingStopsWithGaragesAndBreaks = this.get('route.orderedSchedulingStopsWithGaragesAndBreaks');\n      let previousStop = null;\n\n      if (breakType === _breakType.FLOATING_BREAK) {\n        orderedSchedulingStopsWithGaragesAndBreaks.findIndex(stop => {\n          if (stop.breakType !== _breakType.FLOATING_BREAK) {\n            previousStop = stop;\n          }\n\n          return stop.id === currentBreakId;\n        });\n      }\n\n      return previousStop;\n    }),\n    lat: Ember.computed('place.location.lat', 'breakType', function () {\n      const breakType = this.get('breakType.name');\n      const lat = this.get('place.location.lat');\n      if (breakType === _breakType.FIXED_BREAK) return lat;\n      const previousfixedStop = this.get('previousfixedStop');\n      return previousfixedStop.lat;\n    }),\n    lng: Ember.computed('place.location.lng', 'breakType', function () {\n      const breakType = this.get('breakType.name');\n      const lng = this.get('place.location.lng');\n      if (breakType === _breakType.FIXED_BREAK) return lng;\n      const previousfixedStop = this.get('previousfixedStop');\n      return previousfixedStop.lng;\n    }),\n    mapId: Ember.computed('type', function () {\n      const stopType = this.get('type');\n      return stopType;\n    }),\n    computedArrivePerformedBy: Ember.computed('arrivePerformedBy', function () {\n      const arrivePerformedBy = this.get('arrivePerformedBy');\n      return arrivePerformedBy ? `by ${(0, _lodash.upperCase)(arrivePerformedBy)}` : '';\n    }),\n    computedDepartPerformedBy: Ember.computed('departPerformedBy', function () {\n      const departPerformedBy = this.get('departPerformedBy');\n      return departPerformedBy ? `by ${(0, _lodash.upperCase)(departPerformedBy)}` : '';\n    }),\n    plannedBreakEndTime: Ember.computed('promisedStart', 'plannedDuration', function () {\n      const promisedStart = this.get('promisedStart');\n      const plannedDuration = this.get('plannedDuration') ? this.get('plannedDuration') : '0';\n      const promisedStartMoment = (0, _moment.default)(promisedStart);\n      return promisedStartMoment.add(parseInt(plannedDuration, 10), 'minutes').toDate();\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-calendar\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    monday: attr('string'),\n    tuesday: attr('string'),\n    wednesday: attr('string'),\n    thursday: attr('string'),\n    friday: attr('string'),\n    saturday: attr('string'),\n    sunday: attr('string'),\n    startDate: attr(),\n    endDate: attr('string'),\n    routeShapes: hasMany('route-shape'),\n    service: belongsTo('agency-service')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-exec-event\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    trackingId: attr('string'),\n    routeId: attr('string'),\n    routeVersion: attr('string'),\n    source: attr('string'),\n    content: attr('object'),\n    // TODO: map these to `avlm-driver`, `avlm-vehicle` associations\n    driver: attr('object'),\n    vehicle: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-shape\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    calendarId: 'number',\n    lat: attr('string'),\n    lng: attr('string'),\n    sequences: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-template-availability\", [\"exports\", \"ember-data\", \"ember-cp-validations\", \"moment\", \"adept-iq/utils/regex-functions\"], function (_exports, _emberData, _emberCpValidations, _moment, _regexFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ROUTE_TEMPLATE_DAYS = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n  var belongsTo = _emberData.default.belongsTo;\n  const ROUTE_TEMPLATE_DAYS = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'holiday']; // model validation\n\n  _exports.ROUTE_TEMPLATE_DAYS = ROUTE_TEMPLATE_DAYS;\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    shiftStart: {\n      description: 'Shift Start',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: '{description} cannot be blank'\n      })]\n    },\n    routeLength: {\n      description: 'Shift Length',\n      validators: [(0, _emberCpValidations.validator)('presence', true), (0, _emberCpValidations.validator)('format', {\n        regex: _regexFunctions.REGEX_HHMM,\n        message: '{description} must be formatted hh:mm'\n      })]\n    },\n    DOWSelected: {\n      description: 'day of week',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: 'Requires at least 1 {description} selected'\n      }), (0, _emberCpValidations.validator)('length', {\n        min: 1,\n        message: 'Requires at least 1 {description} selected'\n      })]\n    }\n  });\n\n  var _default = Model.extend(Validations, {\n    DOWSelected: attr(),\n    startTime: attr('date', {\n      defaultValue: null\n    }),\n    endTime: attr('date'),\n    calcEndDate: attr('date', {\n      defaultValue: null\n    }),\n    shiftStart: attr('date'),\n    shiftEnd: attr('date'),\n    routeLength: attr('string'),\n    routeLimit: attr('number'),\n    sunday: attr('boolean', {\n      defaultValue: false\n    }),\n    monday: attr('boolean', {\n      defaultValue: false\n    }),\n    tuesday: attr('boolean', {\n      defaultValue: false\n    }),\n    wednesday: attr('boolean', {\n      defaultValue: false\n    }),\n    thursday: attr('boolean', {\n      defaultValue: false\n    }),\n    friday: attr('boolean', {\n      defaultValue: false\n    }),\n    saturday: attr('boolean', {\n      defaultValue: false\n    }),\n    holiday: attr('boolean', {\n      defaultValue: false\n    }),\n    vehicle: belongsTo('vehicle'),\n    // place holder vehicle\n    driver: belongsTo('driver'),\n    // place holder driver\n    routeTemplate: belongsTo('route-template'),\n    // place holder vehicle\n    shiftBreaks: hasMany('shift-break'),\n    vehicleId: Ember.computed.readOnly('vehicle.id'),\n    markedDeletedShiftBreaks: Ember.computed('shiftBreaks.@each.isDeleted', function () {\n      return this.get('shiftBreaks').filter(shift => !shift.get('isDeleted'));\n    }),\n    calcShiftEnd: Ember.computed('shiftStart', 'routeLength', function () {\n      const shiftStart = (0, _moment.default)(this.get('shiftStart'));\n      const routeLength = this.get('routeLength').split(':');\n      const shiftEnd = (0, _moment.default)();\n      shiftEnd.set({\n        h: shiftStart.hour(),\n        m: shiftStart.minute(),\n        s: 0\n      });\n\n      if (routeLength || routeLength.length === 2) {\n        const routeLengthHour = parseInt(routeLength[0], 10) || 0;\n        const routeLengthMinute = parseInt(routeLength[1], 10) || 0;\n        shiftEnd.add({\n          h: routeLengthHour,\n          m: routeLengthMinute\n        });\n      }\n\n      return shiftEnd;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-template\", [\"exports\", \"ember-data\", \"ember-cp-validations\"], function (_exports, _emberData, _emberCpValidations) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ROUTE_TEMPLATE_TYPE_REGULAR = _exports.ROUTE_TEMPLATE_TYPE_KEEPER = _exports.MANUAL_SCHEDULING_MODE = _exports.CONSOLIDATE_ROUTE_FLAG = _exports.AUTOMATIC_SCHEDULING_MODE = _exports.ADJUST_BREAK_FLAG = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var hasMany = _emberData.default.hasMany;\n  // scheduling modes\n  const MANUAL_SCHEDULING_MODE = 'manual';\n  _exports.MANUAL_SCHEDULING_MODE = MANUAL_SCHEDULING_MODE;\n  const AUTOMATIC_SCHEDULING_MODE = 'automatic'; // route types\n\n  _exports.AUTOMATIC_SCHEDULING_MODE = AUTOMATIC_SCHEDULING_MODE;\n  const ROUTE_TEMPLATE_TYPE_KEEPER = 'keeper';\n  _exports.ROUTE_TEMPLATE_TYPE_KEEPER = ROUTE_TEMPLATE_TYPE_KEEPER;\n  const ROUTE_TEMPLATE_TYPE_REGULAR = 'regular'; // optimization flag bit fields\n\n  _exports.ROUTE_TEMPLATE_TYPE_REGULAR = ROUTE_TEMPLATE_TYPE_REGULAR;\n  const ADJUST_BREAK_FLAG = 0b00000001;\n  _exports.ADJUST_BREAK_FLAG = ADJUST_BREAK_FLAG;\n  const CONSOLIDATE_ROUTE_FLAG = 0b00000010; // model validation\n\n  _exports.CONSOLIDATE_ROUTE_FLAG = CONSOLIDATE_ROUTE_FLAG;\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    name: {\n      description: 'Name',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: '{description} cannot be blank'\n      }), (0, _emberCpValidations.validator)('length', {\n        max: 32\n      }), (0, _emberCpValidations.validator)('unique-route-template-name', {\n        message: 'Route name cannot duplicate an existing route name.'\n      })]\n    },\n    tripLimit: {\n      description: 'Trip Limit',\n      validators: [(0, _emberCpValidations.validator)('length', {\n        max: 3,\n        message: '{description} maximum number allowed is 999'\n      })]\n    },\n    distanceLimit: {\n      description: 'Distance Limit',\n      validators: [(0, _emberCpValidations.validator)('length', {\n        max: 4,\n        message: '{description} maximum number allowed is 9999'\n      })]\n    }\n  });\n\n  var _default = Model.extend(Validations, {\n    name: attr('string'),\n    schedulingMode: attr('string', {\n      defaultValue: AUTOMATIC_SCHEDULING_MODE\n    }),\n    type: attr('string', {\n      defaultValue: ROUTE_TEMPLATE_TYPE_REGULAR\n    }),\n    notes: attr('string'),\n    tripLimit: attr('number'),\n    distanceLimit: attr('number'),\n    active: attr('boolean'),\n    optimizationFlags: attr('number', {\n      defaultValue: 3\n    }),\n    // bit field\n    affinities: attr(),\n    // string array ex \"[1,2,3,4]\"\n    availabilities: hasMany('route-template-availability'),\n    routes: hasMany('route'),\n    isManualTrips: Ember.computed.equal('schedulingMode', MANUAL_SCHEDULING_MODE),\n    isKeeperType: Ember.computed.equal('type', ROUTE_TEMPLATE_TYPE_KEEPER),\n    isAdjustBreak: Ember.computed('optimizationFlags', function () {\n      const optimizationFlags = this.get('optimizationFlags');\n      return ADJUST_BREAK_FLAG & optimizationFlags;\n    }),\n    isConsolidateRoute: Ember.computed('optimizationFlags', function () {\n      const optimizationFlags = this.get('optimizationFlags');\n      return CONSOLIDATE_ROUTE_FLAG & optimizationFlags;\n    }),\n    mondayAvailability: Ember.computed('availabilities.@each.{monday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('monday') && !avail.get('isNew'));\n    }),\n    tuesdayAvailability: Ember.computed('availabilities.@each.{tuesday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('tuesday') && !avail.get('isNew'));\n    }),\n    wednesdayAvailability: Ember.computed('availabilities.@each.{wednesday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('wednesday') && !avail.get('isNew'));\n    }),\n    thursdayAvailability: Ember.computed('availabilities.@each.{thursday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('thursday') && !avail.get('isNew'));\n    }),\n    fridayAvailability: Ember.computed('availabilities.@each.{friday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('friday') && !avail.get('isNew'));\n    }),\n    saturdayAvailability: Ember.computed('availabilities.@each.{saturday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('saturday') && !avail.get('isNew'));\n    }),\n    sundayAvailability: Ember.computed('availabilities.@each.{sunday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('sunday') && !avail.get('isNew'));\n    }),\n    holidayAvailability: Ember.computed('availabilities.@each.{holiday,isNew}', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.find(avail => avail.get('holiday') && !avail.get('isNew'));\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route-vehicle-driver\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    startTime: attr('date'),\n    endTime: attr('date'),\n    driverPhoneNumber: attr('string'),\n    dispatchTakeover: attr('boolean'),\n    dispatchSchedule: belongsTo('dispatch-schedule'),\n    dispatchRoute: belongsTo('dispatch-route'),\n    driver: belongsTo('driver'),\n    vehicle: belongsTo('vehicle'),\n    avlmDriverStateEvent: belongsTo('avlm-driver-state-event', {\n      inverse: 'routeVehicleDriver'\n    }),\n    // previously, the `dispatchRoute` relationship was incorrectly named `route`;\n    // this alias preserves backward compatibility after the fix\n    route: Ember.computed.alias('dispatchRoute')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/route\", [\"exports\", \"ember-data\", \"adept-iq/mixins/otp-label\", \"moment\", \"lodash\", \"adept-iq/models/break-type\"], function (_exports, _emberData, _otpLabel, _moment, _lodash, _breakType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.ROUTE_SCHEDULED_STATUS = void 0;\n  // Scheduling Route Entity\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  const ROUTE_SCHEDULED_STATUS = 'scheduled';\n  _exports.ROUTE_SCHEDULED_STATUS = ROUTE_SCHEDULED_STATUS;\n  const NEW_ROUTE_STATUS = 'new';\n  const otpStatusMapper = {\n    'O': 'On Time',\n    'D': 'In Danger',\n    'L': 'Late',\n    'E': 'Early'\n  };\n\n  var _default = Model.extend(_otpLabel.default, {\n    session: Ember.inject.service(),\n    affinities: attr(),\n    name: attr('string'),\n    plannedStartTime: attr('date'),\n    plannedEndTime: attr('date'),\n    type: attr('string', {\n      defaultValue: 'regular'\n    }),\n    schedulingMode: attr('string'),\n    optimizationFlags: attr('number', {\n      defaultValue: 3\n    }),\n    // bit field\n    tripLimit: attr('number', {\n      defaultValue: 9\n    }),\n    distanceLimit: attr('number', {\n      defaultValue: 99\n    }),\n    plannedSlackTime: attr('number'),\n    dispatchRoute: belongsTo('dispatch-route'),\n    etaRoute: belongsTo('etanav-route'),\n    navigationPolyline: belongsTo('polyline'),\n    scheduledPolyline: belongsTo('schedule-polyline'),\n    vehicle: belongsTo('vehicle'),\n    driver: belongsTo('driver'),\n    schedule: belongsTo('schedule'),\n    provider: belongsTo('provider'),\n    routeTemplate: belongsTo('route-template'),\n    trips: hasMany('trip', {\n      inverse: 'route'\n    }),\n    routeBreaks: hasMany('route-break'),\n    cannedMessages: hasMany('avlm-canned-message'),\n    avlmAlert: hasMany('avlm-alert'),\n    emergencyMessages: hasMany('avlm-emergency-message'),\n    stopPoints: hasMany('stop-point'),\n    // used for pullout and pullin\n    replacedRoute: belongsTo('route', {\n      inverse: null\n    }),\n    scheduleRouteLock: belongsTo('lock'),\n    // populated by route-exec-event\n    status: attr('string'),\n    otp: attr('string'),\n    otpValue: attr('number'),\n    odometer: attr('string'),\n    // in meters\n    actualStartTimestamp: attr('date'),\n    actualEndTimestamp: attr('date'),\n    isAdjusted: attr('boolean', {\n      defaultValue: false\n    }),\n    isDriverBreakRemoved: attr('boolean', {\n      defaultValue: false\n    }),\n    noOfTrips: Ember.computed.readOnly('trips.length'),\n    noOfRouteBreaks: Ember.computed.readOnly('routeBreaks.length'),\n    hasRouteTemplateConsolidated: Ember.computed.readOnly('routeTemplate.isConsolidateRoute'),\n    hasRouteTemplateAdjusted: Ember.computed.readOnly('routeTemplate.isAdjustBreak'),\n    isScheduled: Ember.computed.equal('status', ROUTE_SCHEDULED_STATUS),\n    isNewRoute: Ember.computed.equal('status', NEW_ROUTE_STATUS),\n    vehicleId: Ember.computed.readOnly('vehicle.id'),\n    startGarage: Ember.computed.readOnly('vehicle.startGarage.location'),\n    endGarage: Ember.computed.readOnly('vehicle.endGarage.location'),\n    tripStops: Ember.computed('trips', function () {\n      const trips = this.get('trips');\n      const tripStops = trips.map(trip => trip.get('stops'));\n      return (0, _lodash.flattenDeep)(tripStops);\n    }),\n    computedPlannedStartTime: Ember.computed('plannedStartTime', 'dispatchRoute.plannedStartTime', function () {\n      const updatedStartTime = this.get('dispatchRoute.plannedStartTime');\n      const plannedStartTime = this.get('plannedStartTime');\n\n      if (Ember.isPresent(updatedStartTime)) {\n        return updatedStartTime;\n      }\n\n      return plannedStartTime;\n    }),\n    computedPlannedEndTime: Ember.computed('plannedEndTime', 'dispatchRoute.plannedEndTime', function () {\n      const updatedEndTime = this.get('dispatchRoute.plannedEndTime');\n      const plannedEndTime = this.get('plannedEndTime');\n\n      if (Ember.isPresent(updatedEndTime)) {\n        return updatedEndTime;\n      }\n\n      return plannedEndTime;\n    }),\n    canShowRemoveDriverBreak: Ember.computed('adjustedStartTime', 'adjustedEndTime', 'routeBreaks', 'isDriverBreakRemoved', function () {\n      const adjustedStartTime = this.get('adjustedStartTime');\n      const adjustedEndTime = this.get('adjustedEndTime');\n      const isDriverBreakRemoved = this.get('isDriverBreakRemoved');\n      const routeBreaks = this.get('routeBreaks');\n      return adjustedStartTime && adjustedEndTime && !isDriverBreakRemoved && !Ember.isEmpty(routeBreaks);\n    }),\n    containsSlack: Ember.computed('plannedStartTime', 'plannedEndTime', 'adjustedStartTime', 'adjustedEndTime', function () {\n      const plannedStartTime = (0, _moment.default)(this.get('plannedStartTime'));\n      const plannedEndTime = (0, _moment.default)(this.get('plannedEndTime'));\n      const newStart = (0, _moment.default)(this.get('adjustedStartTime'));\n      const newEnd = (0, _moment.default)(this.get('adjustedEndTime'));\n      return !plannedStartTime.isSame(newStart) || !plannedEndTime.isSame(newEnd);\n    }),\n    containsAdjustedTime: Ember.computed('adjustedStartTime', 'adjustedEndTime', function () {\n      const newStart = this.get('adjustedStartTime');\n      const newEnd = this.get('adjustedEndTime');\n      return !!newStart && !!newEnd;\n    }),\n    otpValueWithSign: Ember.computed('otp', 'otpValue', function () {\n      const otp = this.get('otp');\n      const otpValue = this.get('otpValue');\n      const sign = otp === 'O' || otp === 'E' || otp === otpStatusMapper.O || otp === otpStatusMapper.E ? '-' : '+';\n\n      if (!Ember.isEmpty(otpValue)) {\n        return otpValue !== 0 ? `${sign}${Math.abs(otpValue)}` : Math.abs(otpValue);\n      }\n\n      return '';\n    }),\n    tripStartTime: Ember.computed('trips.@each.tripStartTime', 'plannedStartTime', function () {\n      const trips = this.get('trips');\n      let min = this.get('plannedStartTime') ? this.get('plannedStartTime').getTime() : null;\n\n      if (!Ember.isEmpty(trips)) {\n        trips.forEach(trip => {\n          if (trip && trip.get('tripStartTime')) {\n            min = Math.min(trip.get('tripStartTime').getTime(), min);\n          }\n        });\n      }\n\n      return min ? new Date(min) : null;\n    }),\n    tripEndTime: Ember.computed('trips.@each.tripEndTime', 'plannedEndTime', function () {\n      const trips = this.get('trips');\n      let max = this.get('plannedEndTime') ? this.get('plannedEndTime').getTime() : null;\n\n      if (!Ember.isEmpty(trips)) {\n        trips.forEach(trip => {\n          if (trip && trip.get('tripEndTime')) {\n            max = Math.max(trip.get('tripEndTime').getTime(), max);\n          }\n        });\n      }\n\n      return max ? new Date(max) : null;\n    }),\n    travelNeedCounts: Ember.computed('dispatchRoute.maxTravelNeedCounts', function () {\n      const initialCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        extraWideLift: 0,\n        flexSeats: []\n      };\n      const travelNeedCounts = this.get('dispatchRoute.maxTravelNeedCounts');\n      return travelNeedCounts ? travelNeedCounts : initialCounts;\n    }),\n    shiftLength: Ember.computed('plannedStartTime', 'plannedEndTime', function () {\n      const plannedStartTime = (0, _moment.default)(this.get('plannedStartTime'));\n      const plannedEndTime = (0, _moment.default)(this.get('plannedEndTime'));\n\n      const duration = _moment.default.duration(plannedEndTime.diff(plannedStartTime));\n\n      return Math.floor(duration.asHours());\n    }),\n    routeMinutes: Ember.computed('adjustedStartTime', 'adjustedEndTime', function () {\n      const adjustedStartTime = (0, _moment.default)(this.get('adjustedStartTime'));\n      const adjustedEndTime = (0, _moment.default)(this.get('adjustedEndTime'));\n\n      const duration = _moment.default.duration(adjustedEndTime.diff(adjustedStartTime));\n\n      return duration.isValid() ? Math.floor(duration.asMinutes()) : null;\n    }),\n    plannedDriverBreaks: Ember.computed('routeBreaks', 'routeBreaks.@each.isRemoved', function () {\n      const routeBreaks = this.get('routeBreaks') || [];\n      let count = 0;\n      routeBreaks.forEach(routeBreak => {\n        if (!routeBreak.isRemoved) {\n          count = count + 1;\n        }\n      });\n      if (count === 0) return '';\n      return count;\n    }),\n    isLocked: Ember.computed('scheduleRouteLock.{isLocked,owner.firstName}', function () {\n      return this.get('scheduleRouteLock.isLocked');\n    }),\n    lockedBy: Ember.computed('scheduleRouteLock.owner.firstName', function () {\n      return `${this.get('scheduleRouteLock.owner.firstName')} ${this.get('scheduleRouteLock.owner.lastName')}`;\n    }),\n    isLockedByOtherUser: Ember.computed('scheduleRouteLock.isLocked', function () {\n      const userId = this.get('session').data.authenticated.userId;\n      return this.get('scheduleRouteLock.isLocked') && this.get('scheduleRouteLock.owner.id') !== userId;\n    }),\n    orderedSchedulingStopsWithGaragesAndBreaks: Ember.computed('tripStops', 'startGarage', 'endGarage', 'routeBreaks', function () {\n      const routeId = this.get('id');\n      const tripStops = this.get('tripStops');\n      const startGarage = this.get('startGarage');\n      const endGarage = this.get('endGarage');\n      const routeBreaks = this.get('routeBreaks');\n      const stopsWithGaragesAndBreaks = [];\n\n      if (Ember.isPresent(startGarage)) {\n        stopsWithGaragesAndBreaks.push({\n          id: `GP${routeId}`,\n          stopType: 'pulloutGarage',\n          scheduleOrdinal: 0,\n          lat: startGarage.get('lat'),\n          lng: startGarage.get('lng')\n        });\n      }\n\n      if (Ember.isPresent(tripStops)) {\n        tripStops.forEach(tripStop => {\n          stopsWithGaragesAndBreaks.push({\n            id: tripStop.get('id'),\n            stopType: tripStop.get('stopType'),\n            scheduleOrdinal: tripStop.get('scheduleOrdinal'),\n            lat: tripStop.get('lat'),\n            lng: tripStop.get('lng')\n          });\n        });\n      }\n\n      if (Ember.isPresent(routeBreaks)) {\n        routeBreaks.forEach(routeBreak => {\n          const lat = routeBreak.get('breakType.name') === _breakType.FIXED_BREAK ? routeBreak.get('lat') : null;\n          const lng = routeBreak.get('breakType.name') === _breakType.FIXED_BREAK ? routeBreak.get('lng') : null;\n          stopsWithGaragesAndBreaks.push({\n            id: routeBreak.get('id'),\n            stopType: routeBreak.get('type'),\n            breakType: routeBreak.get('breakType.name'),\n            scheduleOrdinal: routeBreak.get('scheduleOrdinal'),\n            lat: lat,\n            lng: lng\n          });\n        });\n      }\n\n      const maxOrdinal = Math.max(...stopsWithGaragesAndBreaks.map(stop => stop.scheduleOrdinal));\n\n      if (Ember.isPresent(endGarage)) {\n        stopsWithGaragesAndBreaks.push({\n          id: `GD${routeId}`,\n          stopType: 'pulloutGarage',\n          scheduleOrdinal: maxOrdinal + 1,\n          lat: endGarage.get('lat'),\n          lng: endGarage.get('lng')\n        });\n      }\n\n      return stopsWithGaragesAndBreaks.sort((a, b) => a.scheduleOrdinal - b.scheduleOrdinal);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/schedule-configuration\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    description: attr('string'),\n    name: attr('string'),\n    schedules: hasMany('schedule')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/schedule-polyline\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    coords: attr('polyline'),\n    route: belongsTo('route')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/schedule\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _emberData, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.SCHEDULE_UNSCHEDULED_STATUS = _exports.SCHEDULE_GENERATED_STATUS = _exports.SCHEDULE_EXPORT_STATUS = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n  const SCHEDULE_EXPORT_STATUS = 'exported';\n  _exports.SCHEDULE_EXPORT_STATUS = SCHEDULE_EXPORT_STATUS;\n  const SCHEDULE_GENERATED_STATUS = 'in-progress';\n  _exports.SCHEDULE_GENERATED_STATUS = SCHEDULE_GENERATED_STATUS;\n  const SCHEDULE_UNSCHEDULED_STATUS = 'unscheduled';\n  _exports.SCHEDULE_UNSCHEDULED_STATUS = SCHEDULE_UNSCHEDULED_STATUS;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    start: attr('ss-date'),\n    end: attr('ss-date'),\n    status: attr('string', {\n      defaultValue: 'unscheduled'\n    }),\n    // E.g. 'scheduled', 'unscheduled', 'in progress', 'exported'\n    engineDatasetId: attr('string'),\n    notificationStatus: attr('string'),\n    metric: belongsTo('metric'),\n    provider: belongsTo('provider'),\n    dispatchSchedule: belongsTo('dispatch-schedule'),\n    scheduleConfiguration: belongsTo('schedule-configuration'),\n    routes: hasMany('route'),\n    trips: hasMany('trip'),\n    type: attr('string'),\n    isUnScheduled: Ember.computed.equal('status', SCHEDULE_UNSCHEDULED_STATUS),\n    isGenerated: Ember.computed.equal('status', SCHEDULE_GENERATED_STATUS),\n    isExported: Ember.computed.equal('status', SCHEDULE_EXPORT_STATUS),\n    locked: Ember.computed.alias('dispatchSchedule.locked'),\n    displayName: Ember.computed('name', function () {\n      const name = this.get('name');\n      if (Ember.isEmpty(name)) return '';\n      return (0, _moment.default)(this.get('name').substring(0, 10)).format(_environment.default.dateTimeFormat.dateMoment);\n    }),\n    isNotificationInitiated: Ember.computed('notificationStatus', function () {\n      return this.get('notificationStatus') === 'initiated';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/segment-stop-phone-number\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    areaCode: attr('string'),\n    phoneNumber: attr('string'),\n    extension: attr('string'),\n    type: attr('string', {\n      defaultValue: 'home'\n    }),\n    description: attr('string'),\n    mobileCarrier: attr('string'),\n    useForSmsNotifications: attr('boolean'),\n    useForVoiceNotifications: attr('boolean'),\n    segmentStop: belongsTo('segment-stop'),\n    formattedPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phone = this.get('phoneNumber');\n      const extension = this.get('extension');\n      const areaCode = this.get('areaCode');\n\n      if (extension) {\n        return `(${areaCode})${phone}-#${extension}`;\n      }\n\n      return `(${areaCode})${phone}`;\n    }),\n    fullPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phone = this.get('phoneNumber');\n      const areaCode = this.get('areaCode');\n      return `${areaCode}${phone}`;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/segment-stop\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n\n  var _default = Model.extend({\n    type: attr('string'),\n    dwell: attr('number', {\n      defaultValue: 0\n    }),\n    //TODO: what value for dwell\n    notes: attr('string'),\n    onboardCount: attr('number'),\n    plannedEta: attr('date'),\n    place: belongsTo('place'),\n    // Ember-Data needs explicit inverses\n    tripStop: belongsTo('trip-stop', {\n      inverse: 'segmentStop'\n    }),\n    pickSegment: belongsTo('segment', {\n      inverse: 'pick'\n    }),\n    dropSegment: belongsTo('segment', {\n      inverse: 'drop'\n    }),\n    phoneNumbers: hasMany('segment-stop-phone-number'),\n    tomtomFormattedAddress: Ember.computed.alias('place.address.tomtomFormattedAddress'),\n    // use this to get the booking (e.g. from stops widget)\n    segment: Ember.computed('pickSegment', 'dropSegment', function () {\n      return this.get('pickSegment.content') || this.get('dropSegment.content');\n    }),\n    tripStartTime: Ember.computed('segment.tripStartTime', 'plannedTime', function () {\n      const tripStartTime = this.get('segment.tripStartTime');\n      return tripStartTime ? tripStartTime : this.get('tripStop.plannedEta');\n    }),\n    tripEndTime: Ember.computed('segment.tripEndTime', 'plannedTime', function () {\n      const tripEndTime = this.get('segment.tripEndTime');\n      return tripEndTime ? tripEndTime : this.get('tripStop.plannedEta');\n    }),\n    lat: Ember.computed('place.location.lat', function () {\n      const lat = this.get('place.location.lat');\n      return lat;\n    }),\n    lng: Ember.computed('place.location.lng', function () {\n      const lng = this.get('place.location.lng');\n      return lng;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/segment\", [\"exports\", \"ember-data\", \"adept-iq/config/environment\", \"moment\"], function (_exports, _emberData, _environment, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.TAXI_TYPE = _exports.PARA_TRANSIT_TYPE = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  const TAXI_TYPE = 'taxi';\n  _exports.TAXI_TYPE = TAXI_TYPE;\n  const BROKER_TYPE = 'broker';\n  const BUS_TYPE = 'bus';\n  const WALK_TYPE = 'walk';\n  const PARA_TRANSIT_TYPE = 'paratransit';\n  _exports.PARA_TRANSIT_TYPE = PARA_TRANSIT_TYPE;\n  const NO_SHARING_MAP = {\n    '0': 'Allowed',\n    '2': 'Not Allowed'\n  };\n\n  var _default = Model.extend({\n    promiseTime: attr('date'),\n    anchor: attr('string'),\n    fare: attr('number'),\n    tripMaxDate: attr('date'),\n    // Temporary variable to set the trip Max date and time\n    tripMinDate: attr('date'),\n    // Temporary variable to set the trip Min date and time\n    travelMode: attr('string'),\n    segmentType: attr('number'),\n    noSharing: attr('number'),\n    legOrdinal: attr('number'),\n    pick: belongsTo('segment-stop', {\n      inverse: 'pickSegment'\n    }),\n    drop: belongsTo('segment-stop', {\n      inverse: 'dropSegment'\n    }),\n    fareType: belongsTo('fare-type'),\n    fareCategory: belongsTo('fare-category'),\n    leg: belongsTo('leg'),\n    trips: hasMany('trip'),\n    stops: Ember.computed.collect('pick.content', 'drop.content'),\n    rider: Ember.computed.alias('leg.rider.content'),\n    noSharingText: Ember.computed('noSharing', function () {\n      const noSharingValue = NO_SHARING_MAP[this.get('noSharing')] ? NO_SHARING_MAP[this.get('noSharing')] : '';\n      return noSharingValue;\n    }),\n    tripStartTime: Ember.computed('pick.plannedTime', 'leg.requestedTime', 'promiseTime', function () {\n      const pickTime = this.get('pick.content.plannedTime');\n      return pickTime ? pickTime : this.get('promiseTime');\n    }),\n    tripEndTime: Ember.computed('drop.plannedTime', 'leg.requestedTime', 'promiseTime', function () {\n      const dropTime = this.get('drop.content.plannedTime');\n      return dropTime ? dropTime : this.get('promiseTime');\n    }),\n    formattedPromiseTime: Ember.computed('promiseTime', 'leg.requestedTime', function () {\n      if (Ember.isNone(Ember.get(this, 'promiseTime'))) {\n        return (0, _moment.default)(Ember.get(this, 'leg.requestedTime')).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n\n      return (0, _moment.default)(Ember.get(this, 'promiseTime')).format(_environment.default.dateTimeFormat.dateTimeMoment);\n    }),\n    location: Ember.computed('pick.location', 'drop.location', function () {\n      const location = [];\n      const start = [this.get('pick.location.lat'), this.get('pick.location.lng')];\n      if (Ember.isPresent(start[0]) && Ember.isPresent(start[1])) location.push(start);\n      const end = [this.get('drop.location.lat'), this.get('drop.location.lng')];\n      if (Ember.isPresent(end[0]) && Ember.isPresent(end[1])) location.push(end);\n      return location;\n    }),\n    // the trip segment does not matter if it's read in reverse or in order as a line segment to any user doesn't indicate a start or end\n    // currently the trip only uses an arrow to indicate the correct direction of a P -> D, it'd be easier to reverse the points\n    // to indicate the correct polyline for the trips\n    // If we ever need to do something more intense pattern wise, it'd be good to refactor patterns in a better way for all poly lines / zones\n    polyline: Ember.computed('pick.place.location.{lat,lng}', 'drop.place.location.{lat,lng}', function () {\n      const pickLat = this.get('pick.place.location.lat');\n      const pickLng = this.get('pick.place.location.lng');\n      const dropLat = this.get('drop.place.location.lat');\n      const dropLng = this.get('drop.place.location.lng');\n\n      if ([pickLat, pickLng, dropLat, dropLng].any(Ember.isNone)) {\n        return null;\n      }\n\n      return [[dropLat, dropLng], [pickLat, pickLng]];\n    }),\n    fareTypeName: Ember.computed.readOnly('fareType.name'),\n    fareCategoryName: Ember.computed.readOnly('fareCategory.id'),\n    isBrokerTravelMode: Ember.computed('travelMode', function () {\n      const travelMode = this.get('travelMode');\n      return travelMode === BROKER_TYPE;\n    }),\n    isTaxiTravelMode: Ember.computed('travelMode', function () {\n      const travelMode = this.get('travelMode');\n      return travelMode === TAXI_TYPE;\n    }),\n    isBusOrWalkTravelMode: Ember.computed('travelMode', function () {\n      const travelMode = this.get('travelMode').split(' ');\n      return [WALK_TYPE, BUS_TYPE].includes(travelMode.firstObject);\n    }),\n    isParaTransitTravelMode: Ember.computed('travelMode', function () {\n      const travelMode = this.get('travelMode');\n      return travelMode === PARA_TRANSIT_TYPE;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/service-need-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    description: attr('string'),\n    displayName: attr('string'),\n    legServiceNeeds: hasMany('leg-service-need'),\n    subscriptionServiceNeeds: hasMany('subscription-service-need')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/service-window\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    searchWindowStart: attr(),\n    searchWindowEnd: attr(),\n    promiseWindowStart: attr(),\n    promiseWindowEnd: attr(),\n    dropWindowStart: attr(),\n    dropWindowEnd: attr()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/shift-break\", [\"exports\", \"ember-data\", \"adept-iq/models/break-type\", \"ember-cp-validations\"], function (_exports, _emberData, _breakType, _emberCpValidations) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default; // model validation\n\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    minutesPlannedDuration: {\n      description: 'Break Length',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: '{description} cannot be blank'\n      }), (0, _emberCpValidations.validator)('length', {\n        max: 3\n      })]\n    },\n    requestTime: {\n      description: 'Start Time',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: '{description} cannot be blank'\n      })]\n    },\n    notes: {\n      description: 'notes',\n      validators: [(0, _emberCpValidations.validator)('length', {\n        max: 4096\n      })]\n    }\n  });\n\n  var _default = Model.extend(Validations, {\n    requestTime: attr('date', {\n      defaultValue: null\n    }),\n    promisedStart: attr('string', {\n      defaultValue: '06:00:00'\n    }),\n    plannedDuration: attr('number', {\n      defaultValue: 15\n    }),\n    // seconds\n    minutesPlannedDuration: attr('number', {\n      defaultValue: 15\n    }),\n    notes: attr('string'),\n    breakType: belongsTo('break-type'),\n    place: belongsTo('place'),\n    routeTemplateAvailability: belongsTo('route-template-availability'),\n    isFixedBreak: Ember.computed.equal('breakType.name', _breakType.FIXED_BREAK),\n    isFloatingBreak: Ember.computed.equal('breakType.name', _breakType.FLOATING_BREAK)\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/speed-region-address\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    streetNumber: attr('string'),\n    streetAddress: attr('string'),\n    locality: attr('string', {\n      defaultValue: ''\n    }),\n    subLocality: attr('string'),\n    region: attr('string', {\n      defaultValue: ''\n    }),\n    postalCode: attr('string', {\n      defaultValue: ''\n    }),\n    country: attr('string', {\n      defaultValue: ''\n    }),\n    lat: attr('number'),\n    lng: attr('number'),\n    isSoftDeletedRow: attr('boolean', {\n      defaultValue: false\n    }),\n    isNewRow: attr('boolean', {\n      defaultValue: false\n    }),\n    fullAddress: Ember.computed('streetNumber', 'streetAddress', 'locality', 'subLocality', 'region', 'postalCode', 'alias', function () {\n      const streetNumber = this.get('streetNumber');\n      const streetAddress = this.get('streetAddress');\n      const localityOrSubLocality = this.get('locality') || this.get('subLocality') || '';\n      const region = this.get('region');\n      const postalCode = this.get('postalCode');\n      const address = []; // this code is to avoid ', , ,' in leg form component when we bind empty address Record\n\n      if (Ember.isEmpty(streetNumber) && Ember.isEmpty(localityOrSubLocality) && Ember.isEmpty(postalCode)) {\n        return '';\n      }\n\n      address.push(streetNumber);\n      address.push(streetAddress);\n      const result = [address.join(' ')];\n      result.push(localityOrSubLocality);\n      result.push(region);\n      result.push(postalCode);\n      return result.join(', ');\n    }).readOnly()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/speed-region-group\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.DAILY_RECUR_TYPE = _exports.CONTINUOUS_RECUR_TYPE = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n  const CONTINUOUS_RECUR_TYPE = 'continuous';\n  _exports.CONTINUOUS_RECUR_TYPE = CONTINUOUS_RECUR_TYPE;\n  const DAILY_RECUR_TYPE = 'daily';\n  _exports.DAILY_RECUR_TYPE = DAILY_RECUR_TYPE;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    start: attr('date'),\n    end: attr('date'),\n    startTime: attr('date'),\n    endTime: attr('date'),\n    message: attr('string'),\n    recurrence: attr('string'),\n    // daily or continuous\n    blockout: attr('boolean', {\n      defaultValue: false\n    }),\n    addresses: attr(),\n    regions: attr(),\n    isBlockoutRegionType: Ember.computed('blockout', function () {\n      return this.get('blockout');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/speed-region\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    polygon: attr(),\n    speedFactor: attr(),\n    isSoftDeletedRow: attr('boolean', {\n      defaultValue: false\n    }),\n    isNewRow: attr('boolean', {\n      defaultValue: false\n    }),\n    originalName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/sso-permission\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    category: attr('string'),\n    description: attr('string'),\n    parsedId: Ember.computed('id', function () {\n      return parseInt(this.get('id'), 10);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/sso-role\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    permissionHash: null,\n    groupedPermissions: null,\n    roleName: attr('string'),\n    name: attr('string'),\n    displayName: attr('string'),\n    status: attr('string'),\n    permissions: attr(),\n    permissionList: attr(),\n    users: hasMany('sso-user'),\n    ssoPermissions: hasMany('sso-permission'),\n\n    reconfigurePermissionHash(permissions) {\n      const permissionList = this.get('permissionList');\n      const permHash = permissions.reduce((acu, perm) => {\n        acu[perm.parsedId] = false;\n        return acu;\n      }, {});\n      permissionList.forEach(id => {\n        permHash[id] = true;\n      });\n      this.set('permissionHash', permHash);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/sso-user\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    email: attr('string'),\n    userId: attr('string'),\n    firstName: attr('string'),\n    lastName: attr('string'),\n    status: attr('string', {\n      defaultValue: 'active'\n    }),\n    lastLoginAt: attr('date'),\n    passwordUpdatedAt: attr('date'),\n    roleNames: attr('object'),\n    roles: hasMany('sso-role'),\n    fullName: Ember.computed('firstName', 'lastName', function () {\n      return `${this.get('firstName')} ${this.get('lastName')}`;\n    }),\n    emailOrFullName: Ember.computed('email', 'fullName', function () {\n      const email = this.get('email');\n      return Ember.isEmpty(email) ? this.get('fullName') : email;\n    }),\n    isAdmin: Ember.computed('roleNames', function () {\n      const roleNames = this.get('roleNames');\n      let isAdmin = false;\n\n      if (!Ember.isEmpty(roleNames)) {\n        roleNames.forEach(role => {\n          if (role.roleName === 'admin') {\n            isAdmin = true;\n          }\n        });\n      }\n\n      return isAdmin;\n    }),\n    calculatedStatus: Ember.computed('status', 'lastLoginAt', {\n      get() {\n        if (this.get('status') === 'active' && this.get('lastLoginAt') === null) {\n          return 'pending';\n        }\n\n        return this.get('status');\n      },\n\n      set(key, value) {\n        this.set('status', value);\n\n        if (this.get('status') === 'active' && this.get('lastLoginAt') === null) {\n          return 'pending';\n        }\n\n        return value;\n      }\n\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/stop-point\", [\"exports\", \"ember-data\", \"adept-iq/mixins/otp-label\", \"moment\", \"lodash\", \"adept-iq/utils/convertDistance\"], function (_exports, _emberData, _otpLabel, _moment, _lodash, _convertDistance) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.SOFT_PERFORM = _exports.SCHEDULED_STOP_STATUS = _exports.PULLED_OUT_STOP_STATUS = _exports.PULLED_IN_STOP_STATUS = _exports.PLANNED_STOP_STATUS = _exports.PERFORMED_STOP_STATUS = _exports.PENDING_STOP_STATUS = _exports.ON_BREAK_STOP_STATUS = _exports.OFF_BREAK_STOP_STATUS = _exports.NOSHOW_STOP_STATUS = _exports.CANCELLED_STOP_STATUS = _exports.ARRIVE_STOP_STATUS = _exports.ANCHOR_DROP_TYPE = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n  const SCHEDULED_STOP_STATUS = 'Scheduled';\n  _exports.SCHEDULED_STOP_STATUS = SCHEDULED_STOP_STATUS;\n  const CANCELLED_STOP_STATUS = 'Cancelled';\n  _exports.CANCELLED_STOP_STATUS = CANCELLED_STOP_STATUS;\n  const PERFORMED_STOP_STATUS = 'Departed';\n  _exports.PERFORMED_STOP_STATUS = PERFORMED_STOP_STATUS;\n  const ARRIVE_STOP_STATUS = 'Arrived';\n  _exports.ARRIVE_STOP_STATUS = ARRIVE_STOP_STATUS;\n  const NOSHOW_STOP_STATUS = 'No showed';\n  _exports.NOSHOW_STOP_STATUS = NOSHOW_STOP_STATUS;\n  const PLANNED_STOP_STATUS = 'planned';\n  _exports.PLANNED_STOP_STATUS = PLANNED_STOP_STATUS;\n  const PENDING_STOP_STATUS = 'Pending';\n  _exports.PENDING_STOP_STATUS = PENDING_STOP_STATUS;\n  const ON_BREAK_STOP_STATUS = 'On break';\n  _exports.ON_BREAK_STOP_STATUS = ON_BREAK_STOP_STATUS;\n  const OFF_BREAK_STOP_STATUS = 'Off break';\n  _exports.OFF_BREAK_STOP_STATUS = OFF_BREAK_STOP_STATUS;\n  const PULLED_OUT_STOP_STATUS = 'Pulled out';\n  _exports.PULLED_OUT_STOP_STATUS = PULLED_OUT_STOP_STATUS;\n  const PULLED_IN_STOP_STATUS = 'Pulled in';\n  _exports.PULLED_IN_STOP_STATUS = PULLED_IN_STOP_STATUS;\n  const ANCHOR_DROP_TYPE = 'drop';\n  _exports.ANCHOR_DROP_TYPE = ANCHOR_DROP_TYPE;\n  const otpStatusMapper = {\n    'O': 'On Time',\n    'D': 'In Danger',\n    'L': 'Late',\n    'E': 'Early'\n  };\n  const SOFT_PERFORM = 'Soft Perform';\n  _exports.SOFT_PERFORM = SOFT_PERFORM;\n\n  var _default = Model.extend(_otpLabel.default, {\n    store: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    stopType: attr('string'),\n    parentType: attr('string'),\n    waypointType: attr('string'),\n    waypointSource: attr('string'),\n    waypoint: attr('string'),\n    onBoardCount: attr('number'),\n    routeOrdinal: attr('number'),\n    clusterOrdinal: attr('number'),\n    lockedForOptimization: attr('boolean'),\n    cluster: belongsTo('cluster'),\n    noShow: belongsTo('no-show'),\n    trip: belongsTo('trip'),\n    tripStop: belongsTo('trip-stop'),\n    etaNavStopPoint: belongsTo('etanav-stop-point'),\n    routeBreak: belongsTo('route-break'),\n    stopRoute: belongsTo('route'),\n    dispatchSchedule: belongsTo('dispatch-schedule'),\n    polyline: belongsTo('polyline'),\n    // contains the polyline from one stop-point to another stop-point\n    waypointPlace: belongsTo('place'),\n    onboardPassengers: attr('number'),\n    odometerOnArrival: attr('number'),\n    widgetEta: attr('date'),\n    // populated by route-exec-event\n    arriveStatus: attr('string'),\n    status: attr('string'),\n    otp: attr('string'),\n    otpValue: attr('number'),\n    odometer: attr('string'),\n    arriveLat: attr('string'),\n    arriveLng: attr('string'),\n    departLat: attr('string'),\n    departLng: attr('string'),\n    actualArriveTime: attr('date'),\n    actualDepartTime: attr('date'),\n    noShowTime: attr('date'),\n    perform: attr('string'),\n    arrivePerformedBy: attr('string'),\n    departPerformedBy: attr('string'),\n    actualArriveLat: attr('number'),\n    actualArriveLng: attr('number'),\n    actualDepartLat: attr('number'),\n    actualDepartLng: attr('number'),\n    slackInMinutes: attr('number'),\n    // populated from stops-widget iqux-service\n    segmentStopPhoneNumbers: attr('object'),\n    formattedSegmentStopPhoneNumbers: attr('object'),\n    // We need to always find the scheduling route information by going through dispatch route, in case the stop has been moved onto a new route\n    route: Ember.computed.alias('dispatchRoute.route.content'),\n    routeName: Ember.computed.alias('route.name'),\n    serviceWindow: Ember.computed.alias('trip.segment.leg.serviceWindow'),\n    polylinePoints: Ember.computed.readOnly('polyline.coords'),\n    // note `promisedTime` vs. `promiseTime`\n    promisedTime: Ember.computed.readOnly('trip.promiseTime'),\n    isPick: Ember.computed.equal('stopType', 'pick'),\n    isDrop: Ember.computed.equal('stopType', 'drop'),\n    isPickOrDrop: Ember.computed.or('isPick', 'isDrop'),\n    isGaragePullin: Ember.computed.equal('stopType', 'pullinGarage'),\n    isGaragePullout: Ember.computed.equal('stopType', 'pulloutGarage'),\n    isGarage: Ember.computed.or('isGaragePullin', 'isGaragePullout'),\n    isArrived: Ember.computed.equal('computedStatus', ARRIVE_STOP_STATUS),\n    isBreakPerformed: Ember.computed.equal('computedStatus', OFF_BREAK_STOP_STATUS),\n    notPerformed: Ember.computed.equal('computedStatus', PENDING_STOP_STATUS),\n    isNoShow: Ember.computed.equal('computedStatus', NOSHOW_STOP_STATUS),\n    isBreak: Ember.computed.equal('stopType', 'break'),\n    isDispatchDashboard: Ember.computed.readOnly('workspace.isDispatchDashboard'),\n    isScheduleDashboard: Ember.computed.readOnly('workspace.isScheduleDashboard'),\n    // Update when trying to perform 'noShow'\n    noShowTimeThreshold: null,\n    // Set by side-drawer perform pick/drop, only defined attributes can be rollback.\n    // If not having these values, side-drawer edit stopPoint will get nonempty values.\n    arriveTimestamp: attr('date'),\n    departTimestamp: attr('date'),\n    // populated from stops-widget iqux-service\n    scheduleStopStatus: attr('string'),\n    isPerformed: Ember.computed('computedStatus', 'isGaragePullout', 'etaNavStopPoint.status', function () {\n      const computedStatus = this.get('computedStatus');\n\n      if (this.get('isGaragePullout')) {\n        return computedStatus === PULLED_OUT_STOP_STATUS;\n      }\n\n      if (this.get('isGaragePullin')) {\n        return computedStatus === PULLED_IN_STOP_STATUS;\n      }\n\n      if (this.get('isBreak')) {\n        return computedStatus === OFF_BREAK_STOP_STATUS;\n      }\n\n      return computedStatus === PERFORMED_STOP_STATUS || computedStatus === NOSHOW_STOP_STATUS;\n    }),\n    isSoftPerformed: Ember.computed('perform', 'isPerformed', function () {\n      const perform = this.get('perform');\n      const isPerformed = this.get('isPerformed');\n      return isPerformed && perform === SOFT_PERFORM;\n    }),\n    isPerformable: Ember.computed('stopType', 'trip.stopPoints.@each.isPerformed', function () {\n      const stopType = this.get('stopType');\n\n      if (stopType === 'drop') {\n        return this.get('trip.stopPoints').filter(s => s.get('stopType') === 'pick').every(s => s.get('isPerformed'));\n      }\n\n      return !this.get('isPerformed');\n    }),\n    isRealPerformable: Ember.computed('isSoftPerformed', 'stopType', 'trip.stopPoints.@each.isSoftPerformed', function () {\n      const stopType = this.get('stopType');\n\n      if (stopType === 'drop') {\n        return this.get('trip.stopPoints').filter(s => s.get('stopType') === 'pick').every(s => s.get('isPerformed') && !s.get('isSoftPerformed'));\n      }\n\n      return this.get('isSoftPerformed');\n    }),\n    isPerformedOrBeingPerformed: Ember.computed('computedStatus', 'isGaragePullout', 'etaNavStopPoint.status', 'stopType', function () {\n      const stopType = this.get('stopType');\n      const isDrop = stopType === 'drop'; // Drop should not consider no show status as performed.\n\n      const performedDrops = [PERFORMED_STOP_STATUS, ARRIVE_STOP_STATUS];\n      const performedOthers = [PERFORMED_STOP_STATUS, ARRIVE_STOP_STATUS, NOSHOW_STOP_STATUS, OFF_BREAK_STOP_STATUS, ON_BREAK_STOP_STATUS, PULLED_IN_STOP_STATUS];\n      const computedStatus = this.get('computedStatus');\n      return isDrop ? performedDrops.includes(computedStatus) : performedOthers.includes(computedStatus);\n    }),\n    computedProvider: Ember.computed('trip.{isUnscheduled,provider}', 'dispatchRoute.provider', function () {\n      if (this.get('trip.isUnscheduled')) {\n        return this.get('trip.provider');\n      }\n\n      return this.get('dispatchRoute.provider');\n    }),\n    computedArrivePerformedBy: Ember.computed('arrivePerformedBy', function () {\n      const arrivePerformedBy = this.get('arrivePerformedBy');\n      return arrivePerformedBy ? `by ${(0, _lodash.upperCase)(arrivePerformedBy)}` : '';\n    }),\n    computedDepartPerformedBy: Ember.computed('departPerformedBy', function () {\n      const departPerformedBy = this.get('departPerformedBy');\n      return departPerformedBy ? `by ${(0, _lodash.upperCase)(departPerformedBy)}` : '';\n    }),\n    computedPerformedBy: Ember.computed('computedArrivePerformedBy', 'computedDepartPerformedBy', function () {\n      const computedArrivePerformedBy = this.get('computedArrivePerformedBy');\n      const computedDepartPerformedBy = this.get('computedDepartPerformedBy');\n      return Ember.isPresent(computedDepartPerformedBy) ? computedDepartPerformedBy : computedArrivePerformedBy;\n    }),\n    computedStatus: Ember.computed('status', function () {\n      const status = this.get('status') !== '' ? this.get('status') : null;\n      return status;\n    }),\n    computedOdometer: Ember.computed('convertedOdometer', 'routeBreak.convertedOdometer', function () {\n      const odometer = this.get('convertedOdometer');\n      if (this.get('isBreak')) return this.get('routeBreak.convertedOdometer');\n      return odometer;\n    }),\n    computedArriveLat: Ember.computed('arriveLat', 'actualArriveLat', function () {\n      const arriveLat = this.get('arriveLat');\n      if (this.get('isBreak')) return this.get('actualArriveLat');\n      return arriveLat;\n    }),\n    computedArriveLng: Ember.computed('arriveLng', 'actualArriveLng', function () {\n      const arriveLng = this.get('arriveLng');\n      if (this.get('isBreak')) return this.get('actualArriveLng');\n      return arriveLng;\n    }),\n    computedDepartLat: Ember.computed('departLat', 'actualDepartLat', function () {\n      const departLat = this.get('departLat');\n      if (this.get('isBreak')) return this.get('actualDepartLat');\n      return departLat;\n    }),\n    computedDepartLng: Ember.computed('departLng', 'actualDepartLng', function () {\n      const departLng = this.get('departLng');\n      if (this.get('isBreak')) return this.get('actualDepartLng');\n      return departLng;\n    }),\n    computedActualArriveTime: Ember.computed('actualArriveTime', 'routeBreak.actualArriveTime', 'computedStatus', 'stopType', function () {\n      const actualArriveTime = this.get('actualArriveTime');\n      if (this.get('isBreak')) return this.get('routeBreak.actualArriveTime') || actualArriveTime;\n      if (this.get('arrive')) return actualArriveTime;\n      if (this.get('computedStatus') === '') return '';\n      return actualArriveTime;\n    }),\n    computedActualDepartTime: Ember.computed('actualDepartTime', 'routeBreak.actualDepartTime', 'computedStatus', 'stopType', function () {\n      const actualDepartTime = this.get('actualDepartTime');\n      if (this.get('isBreak')) return this.get('routeBreak.actualDepartTime') || actualDepartTime;\n      if (this.get('depart')) return actualDepartTime;\n      if (this.get('computedStatus') === '') return '';\n      return actualDepartTime;\n    }),\n    computedPromiseTime: Ember.computed('isPick', 'promisedTime', function () {\n      const isPick = this.get('isPick');\n\n      if (isPick) {\n        return this.get('promisedTime');\n      }\n\n      return '';\n    }),\n    computedApptTime: Ember.computed('isDrop', 'trip.segment.leg.requestTime', function () {\n      const anchor = this.get('trip.segment.anchor');\n      const isDrop = this.get('isDrop');\n\n      if (anchor === ANCHOR_DROP_TYPE && isDrop) {\n        return this.get('trip.segment.leg.requestTime');\n      }\n\n      return '';\n    }),\n    slackSecondsToMin: Ember.computed('etaNavStopPoint.slackSeconds', function () {\n      const seconds = this.get('etaNavStopPoint.slackSeconds');\n      if (Ember.isEmpty(seconds) && isNaN(seconds)) return '';\n      return Math.floor(seconds / 60);\n    }),\n    slackTimeToSeconds: Ember.computed('etaNavStopPoint.slackSeconds', 'routeBreak.etaNavRouteBreak.slackSeconds', function () {\n      const slackNavStopPoint = this.get('etaNavStopPoint.slackSeconds');\n      const slackNavRouteBreak = this.get('routeBreak.etaNavRouteBreak.slackSeconds');\n\n      if (this.get('isBreak')) {\n        // Show EMPTY slack value if it is none\n        if ((0, _lodash.isNil)(slackNavRouteBreak) || Ember.isEmpty(slackNavRouteBreak)) return '';\n        return Math.floor(slackNavRouteBreak / 60);\n      } // Show EMPTY slack value if it is none\n\n\n      if ((0, _lodash.isNil)(slackNavStopPoint) || Ember.isEmpty(slackNavStopPoint)) return '';\n      return Math.floor(slackNavStopPoint / 60);\n    }),\n    slackTime: Ember.computed('etaNavStopPoint.slackSeconds', 'routeBreak.etaNavRouteBreak.slackSeconds', function () {\n      const slackNavStopPoint = this.get('etaNavStopPoint.slackSeconds');\n      const slackNavRouteBreak = this.get('routeBreak.etaNavRouteBreak.slackSeconds');\n\n      if (this.get('isBreak')) {\n        return slackNavRouteBreak;\n      }\n\n      return slackNavStopPoint;\n    }),\n    arrivalTime: Ember.computed('tripStop.plannedEta', function () {\n      return this.get('tripStop.plannedEta');\n    }),\n    departTime: Ember.computed('tripStop.{plannedEta,trip.promiseTime}', 'trip.rider.{loadTime,unloadTime}', function () {\n      const anchor = this.get('trip.segment.anchor'); // some stops with serviceTypeId = 8 or 9 won't have plannedEta\n\n      const plannedEta = this.get('tripStop.plannedEta') || this.get('tripStop.trip.promiseTime');\n      const mPlannedEta = (0, _moment.default)(plannedEta);\n\n      if (!Ember.isPresent(plannedEta)) {\n        return '';\n      }\n\n      if (anchor === 'pick') {\n        const loadTime = this.get('trip.rider.loadTime');\n\n        if (loadTime) {\n          mPlannedEta.add(loadTime, 'seconds');\n        }\n\n        return mPlannedEta.toDate();\n      }\n\n      if (anchor === 'drop') {\n        const unloadTime = this.get('trip.rider.loadTime');\n\n        if (unloadTime) {\n          mPlannedEta.add(unloadTime, 'seconds');\n        }\n\n        return mPlannedEta.toDate();\n      }\n\n      return '';\n    }),\n    otpValueWithSign: Ember.computed('otp', 'otpValue', function () {\n      const otp = this.get('otp');\n      const otpValue = this.get('otpValue');\n      const sign = otp === 'O' || otp === 'E' || otp === otpStatusMapper.O || otp === otpStatusMapper.E ? '-' : '+';\n\n      if (!Ember.isEmpty(otpValue)) {\n        return otpValue !== 0 ? `${sign}${Math.abs(otpValue)}` : Math.abs(otpValue);\n      }\n\n      return '';\n    }),\n    convertedOdometer: Ember.computed('odometer', function () {\n      const odometer = this.get('odometer');\n\n      if (odometer) {\n        return (0, _convertDistance.convertMetersToMiles)(odometer);\n      }\n\n      return '';\n    }),\n    dispatchRoute: Ember.computed('cluster.dispatchRoute', 'stopRoute.dispatchRoute', function () {\n      const dispatchRoute = this.get('stopRoute.dispatchRoute.content');\n      const dispatchRouteFromCluster = this.get('cluster.dispatchRoute.content');\n\n      if (dispatchRouteFromCluster) {\n        return dispatchRouteFromCluster;\n      }\n\n      return dispatchRoute;\n    }),\n    place: Ember.computed('dispatchRoute.{startGarage,endGarage}', 'trip.segment.{pick.place,drop.place}', 'waypointPlace', 'stopType', 'routeBreak', 'isNoShow', 'stopRoute.vehicle.{startGarage,endGarage}', function () {\n      const routeBreak = this.get('routeBreak.content');\n      const trip = this.get('trip.content');\n      const stopType = this.get('stopType');\n      const isNoShow = this.get('isNoShow');\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      if (isNoShow && this.get('isDrop')) return null;\n      if (routeBreak) return routeBreak.get('place');\n      if (trip && trip.get('status') !== 'canceled' && stopType) return trip.get(`segment.${stopType}.place`);\n\n      if (this.get('isGaragePullout')) {\n        if (isScheduleDashboard) {\n          return this.get('stopRoute.vehicle.startGarage');\n        }\n\n        return this.get('dispatchRoute.startGarage');\n      }\n\n      if (this.get('isGaragePullin')) {\n        if (isScheduleDashboard) {\n          return this.get('stopRoute.vehicle.endGarage');\n        }\n\n        return this.get('dispatchRoute.endGarage');\n      }\n\n      if (this.get('waypointPlace')) return this.get('waypointPlace');\n      return null;\n    }),\n    notes: Ember.computed('trip', 'stopType', function () {\n      const trip = this.get('trip.content');\n      const stopType = this.get('stopType');\n      if (trip && stopType) return trip.get(`segment.${stopType}.notes`);\n      return null;\n    }),\n    tripStartTime: Ember.computed('trip.tripStartTime', 'actualDepartTime', 'tripStop.plannedEta', 'routeBreak.estimatedStart', 'etaNavStopPoint.{eta,notBefore}', 'widgetEta', function () {\n      const tripStartTime = this.get('trip.tripStartTime');\n      const minTripStartTime = this.get('dispatchRoute.route.tripStartTime');\n      const actualDepartTime = this.get('actualDepartTime');\n      const plannedEta = this.get('tripStop.plannedEta');\n      const estimatedStart = this.get('routeBreak.estimatedStart');\n      const parentType = this.get('parentType');\n      const eta = this.get('etaNavStopPoint.eta') || this.get('widgetEta');\n\n      switch (parentType) {\n        case 'break':\n          return estimatedStart;\n\n        case 'pulloutGarage':\n          return minTripStartTime ? minTripStartTime : this.get('etaNavStopPoint.notBefore') || this.get('widgetEta');\n\n        case 'pullinGarage':\n          return minTripStartTime ? minTripStartTime : eta;\n\n        default:\n          // when the stop is performed\n          if (actualDepartTime) return actualDepartTime; // currently happening\n          else if (eta) return eta; // planned time is given as route hasn't started\n          else if (tripStartTime) return tripStartTime;\n          return plannedEta;\n      }\n    }),\n    tripEndTime: Ember.computed('trip.tripEndTime', 'actualDepartTime', 'tripStop.plannedEta', 'routeBreak.estimatedEnd', 'etaNavStopPoint.{eta,notBefore}', function () {\n      const tripEndTime = this.get('trip.tripEndTime');\n      const maxTripEndTime = this.get('dispatchRoute.route.tripEndTime');\n      const plannedEta = this.get('tripStop.plannedEta');\n      const actualDepartTime = this.get('actualDepartTime');\n      const estimatedEnd = this.get('routeBreak.estimatedEnd');\n      const parentType = this.get('parentType');\n      const eta = this.get('etaNavStopPoint.eta');\n\n      switch (parentType) {\n        case 'break':\n          return maxTripEndTime ? maxTripEndTime : estimatedEnd;\n\n        case 'pulloutGarage':\n          return maxTripEndTime ? maxTripEndTime : this.get('etaNavStopPoint.notBefore');\n\n        case 'pullinGarage':\n          return maxTripEndTime ? maxTripEndTime : eta;\n\n        default:\n          // when the stop is performed\n          if (actualDepartTime) return actualDepartTime; // currently happening\n          else if (eta) return eta; // planned end time is given as route hasn't started\n          else if (maxTripEndTime) return maxTripEndTime;else if (tripEndTime) return tripEndTime;\n          return plannedEta;\n      }\n    }),\n    noShowAvailableTime: Ember.computed('noShowTimeThreshold', 'promisedTime', 'actualArriveTime', function () {\n      const noShowTimeThreshold = this.get('noShowTimeThreshold');\n      const promisedTime = this.get('promisedTime'); // When actualArriveTime is null, avoid noShowAvailableTime become NaN\n\n      const actualArriveTime = this.get('actualArriveTime') || this.get('promisedTime');\n\n      const noShowAvailableTime = _moment.default.max((0, _moment.default)(promisedTime), (0, _moment.default)(actualArriveTime));\n\n      if (noShowTimeThreshold) {\n        noShowAvailableTime.add(parseInt(noShowTimeThreshold.value, 10), noShowTimeThreshold.unit);\n      }\n\n      return noShowAvailableTime.toDate();\n    }),\n    routeTripStartTime: Ember.computed('dispatchRoute.tripStartTime', 'tripStartTime', function () {\n      const routeStartTime = this.get('dispatchRoute.tripStartTime');\n      const tripStartTime = this.get('tripStartTime');\n\n      if (routeStartTime) {\n        return routeStartTime;\n      }\n\n      return tripStartTime;\n    }),\n    routeTripEndTime: Ember.computed('dispatchRoute.tripEndTime', 'tripEndTime', function () {\n      const routeEndTime = this.get('dispatchRoute.tripEndTime');\n      const tripEndTime = this.get('tripEndTime');\n\n      if (routeEndTime) {\n        return routeEndTime;\n      }\n\n      return tripEndTime;\n    }),\n    lat: Ember.computed('estimatedBreakLatLng', 'place.location.lat', 'etaNavStopPoint.lat', 'isNoShow', 'routeBreak.place.location.lat', function () {\n      const dsStopLat = this.get('place.location.lat');\n      const breakLatLng = this.get('estimatedBreakLatLng');\n      const etaLat = this.get('etaNavStopPoint.lat');\n      const hypoBreakLat = this.get('routeBreak.place.location.lat');\n      if (this.get('isNoShow') && this.get('isDrop')) return null; // Remove For AVLM 2.1\n\n      if (!dsStopLat && breakLatLng) {\n        return breakLatLng[0];\n      }\n\n      if (dsStopLat) return dsStopLat;\n      if (etaLat) return etaLat;\n      return hypoBreakLat;\n    }),\n    lng: Ember.computed('estimatedBreakLatLng', 'place.location.lng', 'etaNavStopPoint.lng', 'isNoShow', 'routeBreak.place.location.lng', function () {\n      const dsStopLng = this.get('place.location.lng');\n      const breakLatLng = this.get('estimatedBreakLatLng');\n      const etaLng = this.get('etaNavStopPoint.lng');\n      const hypoBreakLng = this.get('routeBreak.place.location.lng');\n      if (this.get('isNoShow') && this.get('isDrop')) return null;\n\n      if (!dsStopLng && breakLatLng) {\n        return breakLatLng[1];\n      }\n\n      if (dsStopLng) return dsStopLng;\n      if (etaLng) return etaLng;\n      return hypoBreakLng;\n    }),\n    scheduleLocked: Ember.computed('dispatchSchedule.locked', function () {\n      return this.get('dispatchSchedule.locked');\n    }),\n    stopDate: Ember.computed('dispatchRoute.route.plannedStartTime', function () {\n      return this.get('dispatchRoute.route.plannedStartTime');\n    }),\n    mapId: Ember.computed('computedStatus', 'stopType', function () {\n      const status = this.get('computedStatus');\n      const stopType = this.get('stopType');\n      if (status === NOSHOW_STOP_STATUS) return 'noshow';\n      if (status === PERFORMED_STOP_STATUS) return 'performedStop';\n      return stopType;\n    }),\n    isLocked: Ember.computed('dispatchRoute.isLocked', function () {\n      return this.get('dispatchRoute.isLocked');\n    }),\n    lockedBy: Ember.computed('dispatchRoute.lockedBy', function () {\n      return this.get('dispatchRoute.lockedBy');\n    }),\n    lockedId: Ember.computed('isLocked', function () {\n      return this.get('dispatchRoute.id');\n    }),\n    isLockedByOtherUser: Ember.computed('dispatchRoute.isLockedByOtherUser', function () {\n      return this.get('dispatchRoute.isLockedByOtherUser');\n    }),\n    eta: Ember.computed('isNoShow', 'etaNavStopPoint.eta', 'routeBreak.etaNavRouteBreak.eta', function () {\n      const etaNavStopPoint = this.get('etaNavStopPoint.eta');\n      const etaNavRouteBreak = this.get('routeBreak.etaNavRouteBreak.eta'); // discard eta if stop becomes no-show\n\n      if (this.get('isNoShow')) return this.get('noShowTime');\n\n      if (this.get('isBreak')) {\n        return etaNavRouteBreak;\n      }\n\n      return etaNavStopPoint;\n    }),\n    computedEta: Ember.computed('isNoShow', 'etaNavStopPoint.eta', 'routeBreak.etaNavRouteBreak.eta', function () {\n      const etaNavStopPoint = this.get('etaNavStopPoint.eta');\n      const etaNavRouteBreak = this.get('routeBreak.etaNavRouteBreak.eta');\n\n      if (this.get('isBreak')) {\n        return etaNavRouteBreak;\n      }\n\n      return etaNavStopPoint;\n    }),\n    stopCloseToBreak: Ember.computed('routeOrdinal', 'dispatchRoute.orderedStopsWithGaragesAndBreaks', function () {\n      const ordinal = this.get('routeOrdinal');\n      const orderedStops = this.get('dispatchRoute.orderedStopsWithGaragesAndBreaks') || [];\n      const orderedStopsLength = orderedStops.length;\n\n      if (this.get('parentType') === 'break' && ordinal && ordinal > 0 && orderedStops) {\n        // either a stop in front or behind the break\n        const behind = ordinal - 1;\n        const inFront = ordinal + 1;\n        const isBreakAtLast = orderedStopsLength - 1 === inFront; // get behind stop if break is last\n\n        let stop = orderedStops.find(s => s.get('routeOrdinal') === behind);\n\n        if (stop) {\n          return stop;\n        } // get infront stop first as the closer stop\n\n\n        stop = orderedStops.find(s => s.get('routeOrdinal') === inFront);\n\n        if (stop && !isBreakAtLast) {\n          return stop;\n        }\n      }\n\n      return null;\n    }),\n    estimatedBreakLatLng: Ember.computed('stopCloseToBreak', 'actualArriveLat', 'actualArriveLng', 'routeBreak.breakType', function () {\n      const isFloating = this.get('routeBreak.breakType.isFloating');\n      const stop = this.get('stopCloseToBreak'); // this is only used by lat/lng and the break on marker for the map.\n\n      const breakLat = this.get('actualArriveLat') || this.get('routeBreak.arriveLat');\n      const breakLng = this.get('actualArriveLng') || this.get('routeBreak.arriveLng');\n\n      if (breakLat && breakLng) {\n        return [breakLat, breakLng];\n      }\n\n      if (isFloating && stop) {\n        // otherwise return an estimated lat,lng\n        const polyline = stop.get('polyline.coords');\n\n        if (polyline) {\n          const median = Math.floor(polyline.length / 2);\n          return polyline[median];\n        }\n\n        const lat = stop.get('lat');\n        const lng = stop.get('lng');\n        return [lat, lng];\n      }\n\n      return null;\n    }),\n    computedMaximumStartTime: Ember.computed('computedStartTime', 'promisedTime', 'widgetEta', 'etaNavStopPoint.eta', function () {\n      const computedStartTime = this.get('computedStartTime');\n      const promisedTime = this.get('promisedTime');\n      const eta = this.get('widgetEta') || this.get('etaNavStopPoint.eta');\n\n      if (!Ember.isEmpty(promisedTime) && Ember.isEmpty(eta)) {\n        return promisedTime;\n      }\n\n      if (!Ember.isEmpty(eta)) {\n        return eta;\n      }\n\n      return computedStartTime;\n    }),\n    // This computedStartEta only for dispatchRoute findNewBreakRoutePosition.\n    computedStartEta: Ember.computed('widgetEta', 'isNoShow', 'etaNavStopPoint.eta', 'tripStop.plannedEta', 'routeBreak.etaNavRouteBreak.eta', 'tripStartTime', function () {\n      const stopType = this.get('stopType');\n      const plannedEta = this.get('tripStop.plannedEta');\n      const eta = this.get('widgetEta') || this.get('etaNavStopPoint.eta');\n      const breakPlannedEta = this.get('routeBreak.etaNavRouteBreak.eta');\n      const tripStartTime = this.get('tripStartTime'); // discard eta if noshow drop\n\n      if (this.get('isNoShow') && stopType === 'drop') return null;\n\n      if (stopType === 'pulloutGarage') {\n        return tripStartTime;\n      }\n\n      if (stopType !== 'break') {\n        if (Ember.isEmpty(eta)) {\n          return plannedEta;\n        }\n\n        return eta;\n      }\n\n      return breakPlannedEta;\n    }),\n    computedStartTime: Ember.computed('widgetEta', 'isNoShow', 'etaNavStopPoint.eta', 'tripStop.plannedEta', 'routeBreak.etaNavRouteBreak.eta', 'tripStartTime', function () {\n      const stopType = this.get('stopType');\n      const plannedEta = this.get('tripStop.plannedEta');\n      const eta = this.get('widgetEta') || this.get('etaNavStopPoint.eta');\n      const breakPlannedEta = this.get('routeBreak.etaNavRouteBreak.eta');\n      const tripStartTime = this.get('tripStartTime'); // discard eta if stop becomes no-show\n\n      if (this.get('isNoShow')) return null;\n\n      if (stopType === 'pulloutGarage') {\n        return tripStartTime;\n      }\n\n      if (stopType !== 'break') {\n        if (Ember.isEmpty(eta)) {\n          return plannedEta;\n        }\n\n        return eta;\n      }\n\n      return breakPlannedEta;\n    }),\n    availableTimeBeforeStop: Ember.computed('tripStop.plannedEta', 'etaNavStopPoint.eta', 'promisedTime', 'computedStartTime', 'actualDepartTime', 'actualArriveTime', function () {\n      const isPick = this.get('isPick');\n      const isGarage = this.get('isGarage');\n      const computedStartTime = this.get('computedStartTime');\n      const sources = [this.get('tripStop.plannedEta'), this.get('etaNavStopPoint.eta'), this.get('promisedTime')];\n      const isPerformed = Ember.isPresent(this.get('actualDepartTime')) || Ember.isPresent(this.get('actualArriveTime'));\n      const times = sources.reduce((a, s) => {\n        if (Ember.isPresent(s)) {\n          a.push((0, _moment.default)(s));\n        }\n\n        return a;\n      }, []);\n\n      if (isGarage) {\n        return this.get('widgetEta');\n      }\n\n      if (isPick && !isPerformed) {\n        return _moment.default.max(times).toDate();\n      }\n\n      return computedStartTime;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-activity-log-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-exclusion\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    startDate: attr('date', {\n      defaultValue: null\n    }),\n    endDate: attr('date', {\n      defaultValue: null\n    }),\n    type: attr('string'),\n    subscription: belongsTo('subscription'),\n    suspend: attr('boolean', {\n      defaultValue: false\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-group\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    groupId: attr('string'),\n    description: attr('string'),\n    subscription: hasMany('subscription')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-phone-number\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    areaCode: attr('string'),\n    phoneNumber: attr('string'),\n    extension: attr('string'),\n    type: attr('string', {\n      defaultValue: 'home'\n    }),\n    description: attr('string'),\n    mobileCarrier: attr('string'),\n    useForSmsNotifications: attr('boolean'),\n    useForVoiceNotifications: attr('boolean'),\n    formattedPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phone = this.get('phoneNumber');\n      const extension = this.get('extension');\n      const areaCode = this.get('areaCode');\n\n      if (extension) {\n        return `(${areaCode})${phone}-#${extension}`;\n      }\n\n      return `(${areaCode})${phone}`;\n    }),\n    fullPhoneNumber: Ember.computed('areaCode', 'phoneNumber', 'extension', function () {\n      const phone = this.get('phoneNumber');\n      const areaCode = this.get('areaCode');\n      return `${areaCode}${phone}`;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-recurrence-pattern\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n  const WOM_OPTIONS = {\n    first: 'first',\n    second: 'second',\n    third: 'third',\n    fourth: 'fourth',\n    last: 'last'\n  };\n\n  var _default = Model.extend({\n    type: attr('string'),\n    separationCount: attr('number', {\n      defaultValue: 0\n    }),\n    sunday: attr('boolean'),\n    monday: attr('boolean'),\n    tuesday: attr('boolean'),\n    wednesday: attr('boolean'),\n    thursday: attr('boolean'),\n    friday: attr('boolean'),\n    saturday: attr('boolean'),\n    holiday: attr('boolean'),\n    dayOfMonth: attr('number', {\n      defaultValue: null\n    }),\n    weekOfMonth: attr('number', {\n      defaultValue: null\n    }),\n    monthOfYear: attr('number', {\n      defaultValue: null\n    }),\n    everyweekday: attr('string'),\n    pattern: attr('string'),\n    recurring: attr('boolean', {\n      defaultValue: true\n    }),\n    subscription: belongsTo('subscription'),\n    selectedDOWs: Ember.computed('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', function () {\n      const selectedDOWArray = [];\n      if (this.get('sunday')) selectedDOWArray.push('sunday');\n      if (this.get('monday')) selectedDOWArray.push('monday');\n      if (this.get('tuesday')) selectedDOWArray.push('tuesday');\n      if (this.get('wednesday')) selectedDOWArray.push('wednesday');\n      if (this.get('thursday')) selectedDOWArray.push('thursday');\n      if (this.get('friday')) selectedDOWArray.push('friday');\n      if (this.get('saturday')) selectedDOWArray.push('saturday');\n      return selectedDOWArray;\n    }),\n    selectedDOWHolidays: Ember.computed('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'holiday', function () {\n      const selectedDOWHolidayArray = [];\n      if (this.get('sunday')) selectedDOWHolidayArray.push('sunday');\n      if (this.get('monday')) selectedDOWHolidayArray.push('monday');\n      if (this.get('tuesday')) selectedDOWHolidayArray.push('tuesday');\n      if (this.get('wednesday')) selectedDOWHolidayArray.push('wednesday');\n      if (this.get('thursday')) selectedDOWHolidayArray.push('thursday');\n      if (this.get('friday')) selectedDOWHolidayArray.push('friday');\n      if (this.get('saturday')) selectedDOWHolidayArray.push('saturday');\n      if (this.get('holiday')) selectedDOWHolidayArray.push('holiday');\n      return selectedDOWHolidayArray;\n    }),\n    isEveryDay: Ember.computed('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', function () {\n      return this.get('sunday') && this.get('monday') && this.get('tuesday') && this.get('wednesday') && this.get('thursday') && this.get('friday') && this.get('saturday');\n    }),\n    selectedWOM: Ember.computed('weekOfMonth', {\n      get() {\n        const weekOfMonth = this.get('weekOfMonth');\n\n        switch (weekOfMonth) {\n          case -1:\n            return WOM_OPTIONS.last;\n\n          case 1:\n            return WOM_OPTIONS.first;\n\n          case 2:\n            return WOM_OPTIONS.second;\n\n          case 3:\n            return WOM_OPTIONS.third;\n\n          case 4:\n            return WOM_OPTIONS.fourth;\n\n          default:\n            return null;\n        }\n      },\n\n      set(_, value) {\n        let weekOfMonth = null;\n\n        switch (value) {\n          case WOM_OPTIONS.last:\n            weekOfMonth = -1;\n            break;\n\n          case WOM_OPTIONS.first:\n            weekOfMonth = 1;\n            break;\n\n          case WOM_OPTIONS.second:\n            weekOfMonth = 2;\n            break;\n\n          case WOM_OPTIONS.third:\n            weekOfMonth = 3;\n            break;\n\n          case WOM_OPTIONS.fourth:\n            weekOfMonth = 4;\n            break;\n\n          default:\n            weekOfMonth = null;\n        }\n\n        this.set('weekOfMonth', weekOfMonth);\n        return value;\n      }\n\n    }),\n    subscriptionStartDate: Ember.computed('subscription.startDate', {\n      get() {\n        return this.get('subscription.startDate');\n      },\n\n      set(_, value) {\n        this.set('subscription.startDate', value);\n        return value;\n      }\n\n    }),\n    subscriptionEndDate: Ember.computed('subscription.endDate', {\n      get() {\n        return this.get('subscription.endDate');\n      },\n\n      set(_, value) {\n        this.set('subscription.endDate', value);\n        return value;\n      }\n\n    }),\n    subscriptionMaxOccurences: Ember.computed('subscription.maximumOccurrences', {\n      get() {\n        return this.get('subscription.maximumOccurrences');\n      },\n\n      set(_, value) {\n        this.set('subscription.maximumOccurrences', value);\n        return value;\n      }\n\n    }),\n    exclusionStartDate: Ember.computed('subscription.exclusions.firstObject.startDate', {\n      get() {\n        return this.get('subscription.exclusions.firstObject.startDate');\n      },\n\n      set(_, value) {\n        this.set('subscription.exclusions.firstObject.startDate', value);\n        return value;\n      }\n\n    }),\n    exclusionEndDate: Ember.computed('subscription.exclusions.firstObject.endDate', {\n      get() {\n        return this.get('subscription.exclusions.firstObject.endDate');\n      },\n\n      set(_, value) {\n        this.set('subscription.exclusions.firstObject.endDate', value);\n        return value;\n      }\n\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-service-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    subscription: belongsTo('subscription'),\n    serviceNeedType: belongsTo('service-need-type')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription-travel-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    count: attr('number'),\n    travelNeedTypeName: attr('string'),\n    passengerTypeName: attr('string'),\n    subscription: belongsTo('subscription'),\n    travelNeedType: belongsTo('travel-need-type'),\n    passengerType: belongsTo('passenger-type'),\n    isClient: Ember.computed.equal('passengerType.name', 'client'),\n    isPca: Ember.computed.equal('passengerType.name', 'pca'),\n    isCompanion: Ember.computed.equal('passengerType.name', 'companion'),\n    basicTravelNeedType: Ember.computed('travelNeedType', function () {\n      const name = Ember.get(this, 'travelNeedType.name');\n      return name === 'ambulatory' || name === 'wideAmbulatory' || name === 'wheelchair' || name === 'wideWheelchair';\n    }),\n    isEquipment: Ember.computed('travelNeedType', function () {\n      return !this.get('travelNeedType.isServiceAnimal');\n    }),\n    isExtraPassenger: Ember.computed('travelNeedType', function () {\n      return this.get('travelNeedType.isServiceAnimal');\n    }),\n    travelNeedTypeNameUppercase: Ember.computed('travelNeedType.name', function () {\n      return this.get('travelNeedType.name') ? this.get('travelNeedType.name').toUpperCase() : null;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/subscription\", [\"exports\", \"ember-data\", \"adept-iq/utils/format-text-extension\", \"adept-iq/config/mapped-status\", \"adept-iq/models/route-template\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _emberData, _formatTextExtension, _mappedStatus, _routeTemplate, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var hasMany = _emberData.default.hasMany;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    status: attr('string'),\n    requestTime: attr('date'),\n    anchor: attr('string'),\n    purpose: attr('string'),\n    fare: attr('number'),\n    noSharing: attr('number'),\n    originNotes: attr('string'),\n    destinationNotes: attr('string'),\n    legNotes: attr('string'),\n    startDate: attr('date', {\n      defaultValue: null\n    }),\n    endDate: attr('date', {\n      defaultValue: null\n    }),\n    maximumOccurrences: attr('number'),\n    serviceWindowName: attr('string'),\n    remainingOccurrences: attr('number', {\n      defaultValue: 0\n    }),\n    schedulingMode: attr('string', {\n      defaultValue: _routeTemplate.AUTOMATIC_SCHEDULING_MODE\n    }),\n    originPlannedEta: attr('date', {\n      defaultValue: null\n    }),\n    destinationPlannedEta: attr('date', {\n      defaultValue: null\n    }),\n    origin: belongsTo('place'),\n    destination: belongsTo('place'),\n    rider: belongsTo('rider'),\n    group: belongsTo('subscription-group'),\n    serviceWindow: belongsTo('service-window'),\n    fundingAgency: belongsTo('funding-agency'),\n    fareType: belongsTo('fare-type'),\n    fareCategory: belongsTo('fare-category'),\n    bookings: hasMany('generated-subscription-booking'),\n    exclusions: hasMany('subscription-exclusion'),\n    recurrencePatterns: hasMany('subscription-recurrence-pattern'),\n    subscriptionTravelNeeds: hasMany('subscription-travel-need'),\n    subscriptionServiceNeeds: hasMany('subscription-service-need'),\n    phoneNumbers: hasMany('subscription-phone-number'),\n    provider: belongsTo(),\n    tripPurpose: belongsTo('trip-purpose'),\n    routeTemplate: belongsTo('route-template'),\n    isInactive: Ember.computed.alias('isExpired'),\n    isManualSchedulingMode: Ember.computed('schedulingMode', function () {\n      return this.get('schedulingMode') === _routeTemplate.MANUAL_SCHEDULING_MODE;\n    }),\n    origins: Ember.computed('origin', function () {\n      return [this.get('origin.content')];\n    }),\n    destinations: Ember.computed('destination', function () {\n      return [this.get('destination.content')];\n    }),\n    noOfTravelNeeds: Ember.computed.alias('subscriptionTravelNeeds.length'),\n    equipments: Ember.computed.filterBy('subscriptionTravelNeeds', 'isEquipment', true),\n    extraPassengers: Ember.computed.filterBy('subscriptionTravelNeeds', 'isExtraPassenger', true),\n    formattedRecurrence: Ember.computed('latestRecurrence', function () {\n      const formattedObject = {\n        header: null,\n        values: []\n      };\n      const recurrencePatterns = this.get('latestRecurrence');\n      const selectedDOWArray = [];\n      if (Ember.isEmpty(recurrencePatterns)) return [];\n\n      if (recurrencePatterns.get('sunday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'sunday'));\n      }\n\n      if (recurrencePatterns.get('monday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'monday'));\n      }\n\n      if (recurrencePatterns.get('tuesday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'tuesday'));\n      }\n\n      if (recurrencePatterns.get('wednesday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'wednesday'));\n      }\n\n      if (recurrencePatterns.get('thursday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'thursday'));\n      }\n\n      if (recurrencePatterns.get('friday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'friday'));\n      }\n\n      if (recurrencePatterns.get('saturday')) {\n        selectedDOWArray.push((0, _formatTextExtension.formatTextExtension)('valueItem', 'saturday'));\n      }\n\n      formattedObject.values = selectedDOWArray;\n      return formattedObject;\n    }),\n    latestRecurrence: Ember.computed('recurrencePatterns', function () {\n      const recurrencePatterns = this.get('recurrencePatterns');\n      const sortedRecurrencePatterns = recurrencePatterns.sortBy('id');\n      return sortedRecurrencePatterns.get('lastObject');\n    }),\n    requestTimeForDisplay: Ember.computed('requestTime', 'anchor', function () {\n      const anchor = this.get('anchor') === 'pick' ? 'pick' : 'appt';\n      const requestTimeObject = this.get('requestTime');\n      const requestTime = (0, _moment.default)(requestTimeObject).format(_environment.default.dateTimeFormat.timeMoment);\n      return `${anchor} / ${requestTime}`;\n    }),\n    isExpired: Ember.computed('endDate', function () {\n      const endDate = this.get('endDate');\n      const now = new Date();\n      return endDate && now > endDate;\n    }),\n    computedStatus: Ember.computed('status', 'isExpired', {\n      get() {\n        const isExpired = this.get('isExpired');\n        return isExpired ? 'inactive' : this.get('status');\n      },\n\n      set(key, value) {\n        this.set('status', value);\n        return value;\n      }\n\n    }),\n    displayStatus: Ember.computed('status', 'isExpired', function () {\n      const isExpired = this.get('isExpired');\n\n      if (isExpired) {\n        return 'Inactive';\n      }\n\n      const status = this.get('status');\n      const result = _mappedStatus.convertSubscriptionStatus[status];\n      return result ? result : status;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/system-config-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    type: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/termination-reason-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/travel-need-type\", [\"exports\", \"ember-data\", \"adept-iq/config/config-object-template\"], function (_exports, _emberData, _configObjectTemplate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.WHEELCHAIR_TRAVELNEED_TYPE = _exports.LIFTREQUIRED_TRAVELNEED_TYPE = _exports.COMPANION_TRAVELNEED_TYPE = _exports.AMBULATORY_TRAVELNEED_TYPE = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo,\n    hasMany\n  } = _emberData.default;\n\n  const FARE_CALCULATION_TYPE = _configObjectTemplate.default['config-System_Configuration-travel_need_types'].fields.find(field => field.fieldName === 'fareCalculationType');\n\n  const AMBULATORY_TRAVELNEED_TYPE = 'ambulatory';\n  _exports.AMBULATORY_TRAVELNEED_TYPE = AMBULATORY_TRAVELNEED_TYPE;\n  const WHEELCHAIR_TRAVELNEED_TYPE = 'wheelchair';\n  _exports.WHEELCHAIR_TRAVELNEED_TYPE = WHEELCHAIR_TRAVELNEED_TYPE;\n  const LIFTREQUIRED_TRAVELNEED_TYPE = 'liftRequired';\n  _exports.LIFTREQUIRED_TRAVELNEED_TYPE = LIFTREQUIRED_TRAVELNEED_TYPE;\n  const COMPANION_TRAVELNEED_TYPE = 'companion';\n  _exports.COMPANION_TRAVELNEED_TYPE = COMPANION_TRAVELNEED_TYPE;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    vehicleCapacityCount: attr('number'),\n    loadTime: attr('number'),\n    unloadTime: attr('number'),\n    displayName: attr('string'),\n    displayOrder: attr('number'),\n    schedule: belongsTo('schedule'),\n    vehicleCapacityType: attr('string'),\n    value: attr(),\n    subscriptionTravelNeeds: hasMany('subscription-travel-need'),\n    legTravelNeeds: hasMany('leg-travel-need'),\n    riderTravelNeeds: hasMany('rider-travel-need'),\n    isConsumable: Ember.computed('vehicleCapacityCount', function () {\n      return this.get('vehicleCapacityCount') > 0;\n    }),\n    isServiceAnimal: Ember.computed('name', function () {\n      return this.get('name') === 'serviceAnimal';\n    }),\n    isAmbulatory: Ember.computed('name', function () {\n      return this.get('name') === 'ambulatory';\n    }),\n    isCompanion: Ember.computed('value', function () {\n      const value = this.get('value');\n      let fareCalculationType = value[FARE_CALCULATION_TYPE.displayName];\n\n      if (!fareCalculationType) {\n        fareCalculationType = value[FARE_CALCULATION_TYPE.fieldName];\n      }\n\n      return fareCalculationType === 'companion';\n    }),\n    isWheelchair: Ember.computed.equal('name', 'wheelchair'),\n    isWideAmbulatory: Ember.computed.equal('name', 'wideAmbulatory'),\n    isWideWheelchair: Ember.computed.equal('name', 'wideWheelchair'),\n    upperCaseName: Ember.computed('displayName', function () {\n      if (this.get('displayName')) {\n        return this.get('displayName').toUpperCase();\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/travel-need\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    count: attr('number'),\n    // these probably should be aliased through belongsTo relationships, but\n    // streaming topics don't supply IDs\n    passengerTypeName: attr('string'),\n    travelNeedTypeName: attr('string'),\n    travelNeedType: belongsTo(),\n    passengerType: belongsTo(),\n    // Not sure why this was a Has Many Relationship?\n    trip: belongsTo('trip')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/trim-slack-contract-management\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  const {\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    startRouteName: attr('string'),\n    endRouteName: attr('string'),\n    trimSlack: attr('boolean'),\n    adjustMins: attr('string'),\n    minRouteLength: attr('string'),\n    pullOutMinCap: attr('string'),\n    pullOutMaxCap: attr('string'),\n    pullInMinCap: attr('string'),\n    pullInMaxCap: attr('string'),\n    providerName: attr('string'),\n    convertToMinutes: Ember.computed('minRouteLength', function () {\n      const minRouteLength = this.get('minRouteLength');\n      const fieldArray = minRouteLength.split(':');\n      return parseInt(fieldArray[0], 10) + 60 * parseInt(fieldArray[1], 10);\n    }),\n    convertToHourMinutes: Ember.computed('minRouteLength', function () {\n      const minRouteLength = this.get('minRouteLength');\n      const minsNum = parseFloat(minRouteLength, 10);\n      let hours = Math.floor(minsNum / 60);\n      let minutes = Math.floor(minsNum - hours * 3600 / 60);\n\n      if (hours < 10) {\n        hours = '0' + hours;\n      }\n\n      if (minutes < 10) {\n        minutes = '0' + minutes;\n      }\n\n      return hours + ':' + minutes;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/trip-activity-log-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/trip-purpose\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/trip-route-assignment\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n\n  var _default = Model.extend({\n    ordinal: attr('number'),\n    context: attr('string'),\n    // scheduling or dispatching\n    operation: attr('string', {\n      defaultValue: ''\n    }),\n    user: attr('string', {\n      defaultValue: ''\n    }),\n    timestamp: attr('date'),\n    trip: belongsTo('trip', {\n      inverse: 'routeAssignments'\n    }),\n    route: belongsTo('route')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/trip-stop\", [\"exports\", \"ember-data\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/models/trip\"], function (_exports, _emberData, _unwrapProxy, _trip) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  const TRIP_STATUSES_TO_IGNORE = [_trip.TRIP_CANCELED_STATUS, _trip.TRIP_LATE_CANCELED_STATUS];\n\n  var _default = Model.extend({\n    plannedDistanceToNext: attr('string'),\n    // in miles\n    plannedTravelTimeToNext: attr('string'),\n    // in minutes\n    plannedEta: attr('date'),\n    status: attr('string'),\n    slack: attr('string'),\n    plannedSlackTime: attr('number'),\n    plannedRouteOrdinal: attr('number'),\n    stopPoint: belongsTo('stop-point', {\n      inverse: 'tripStop'\n    }),\n    pickTripStop: belongsTo('trip', {\n      inverse: 'pick'\n    }),\n    dropTripStop: belongsTo('trip', {\n      inverse: 'drop'\n    }),\n    segmentStop: belongsTo('segment-stop', {\n      inverse: 'tripStop'\n    }),\n    travelNeeds: Ember.computed.readOnly('trip.segment.leg.legTravelNeeds'),\n    lat: Ember.computed.readOnly('segmentStop.lat'),\n    lng: Ember.computed.readOnly('segmentStop.lng'),\n    type: Ember.computed.readOnly('segmentStop.type'),\n    stopType: Ember.computed.readOnly('type'),\n    // stops-widget uses stopType property for active context filtering\n    notes: Ember.computed.alias('segmentStop.notes'),\n    address: Ember.computed.alias('segmentStop.place.address.readableAddress'),\n    city: Ember.computed.alias('segmentStop.place.address.locality'),\n    routeName: Ember.computed.readOnly('trip.route.name'),\n    scheduleOrdinal: attr('number'),\n    eta: attr('string'),\n    scheduleEta: attr('string'),\n    // populated from stops-widget iqux-service\n    segmentStopPhoneNumbers: attr('object'),\n    formattedSegmentStopPhoneNumbers: attr('object'),\n    scheduleStopStatus: attr('string'),\n    sdbPlannedEta: attr('date'),\n    computedPlannedEta: Ember.computed('plannedEta', 'sdbPlannedEta', 'trip.computedStatus', function () {\n      const computedStatus = this.get('trip.computedStatus');\n      const sdbPlannedEta = this.get('sdbPlannedEta');\n      const plannedEta = this.get('plannedEta');\n      if (TRIP_STATUSES_TO_IGNORE.includes(computedStatus)) return '';\n      if (!Ember.isEmpty(sdbPlannedEta)) return sdbPlannedEta;\n      return plannedEta;\n    }),\n    segmentStopPhoneNumber: Ember.computed('segmentStop.phoneNumbers.[]', function () {\n      const phoneNumber = this.get('segmentStop.phoneNumbers.firstObject');\n      return phoneNumber ? phoneNumber : null;\n    }),\n    trip: Ember.computed('pickTripStop', 'dropTripStop', function () {\n      const trip = (0, _unwrapProxy.unwrapProxy)(this.get('pickTripStop'));\n      return trip ? trip : (0, _unwrapProxy.unwrapProxy)(this.get('dropTripStop'));\n    }),\n    mapId: Ember.computed('type', function () {\n      const stopType = this.get('type');\n      return stopType;\n    }),\n    isPick: Ember.computed('stopType', function () {\n      return this.get('stopType') === 'pick';\n    }),\n    isDrop: Ember.computed('stopType', function () {\n      return this.get('stopType') === 'drop';\n    }),\n    route: Ember.computed('trip', function () {\n      const route = this.get('trip.route');\n      return route;\n    }),\n    isLocked: Ember.computed('route.isLocked', function () {\n      return this.get('route.isLocked');\n    }),\n    lockedBy: Ember.computed('route.lockedBy', function () {\n      return this.get('route.lockedBy');\n    }),\n    lockedId: Ember.computed('isLocked', function () {\n      return this.get('route.id');\n    }),\n    isLockedByOtherUser: Ember.computed('route.isLockedByOtherUser', function () {\n      return this.get('route.isLockedByOtherUser');\n    }),\n    computedStatus: Ember.computed('status', function () {\n      const status = this.get('status') !== '' ? this.get('status') : null;\n      return status;\n    }),\n    computedSlack: Ember.computed('slack', function () {\n      const slack = this.get('slack') !== '' ? this.get('slack') : null;\n      return slack;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/trip\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/format-text-extension\", \"adept-iq/mixins/otp-label\", \"adept-iq/models/stop-point\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/environment\"], function (_exports, _emberData, _moment, _formatTextExtension, _otpLabel, _stopPoint, _unwrapProxy, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.TRIP_WILLCALL_STATUS = _exports.TRIP_WAITLIST_STATUS = _exports.TRIP_UNSCHEDULED_STATUS = _exports.TRIP_SCHEDULED_STATUS = _exports.TRIP_REQUESTED_STATUS = _exports.TRIP_NOSHOW_STATUS = _exports.TRIP_NOSHOWREQUESTED_STATUS = _exports.TRIP_LATE_CANCELED_STATUS = _exports.TRIP_LATECANCELED_STATUS = _exports.TRIP_ILLEGAL_STATUS = _exports.TRIP_FAILED_STATUS = _exports.TRIP_ENROUTE_STATUS = _exports.TRIP_DISPATCH_STATUS = _exports.TRIP_COMPLETED_STATUS = _exports.TRIP_CANCELED_STATUS = _exports.TRIP_CALLBACK_STATUS = _exports.TRIP_ARCHIVED_STATUS = _exports.TRIP_ACTIVE_STATUS = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n  var belongsTo = _emberData.default.belongsTo;\n  var hasMany = _emberData.default.hasMany;\n  // TRIP STATUS Notes\n  // Requested :  New booking (eligibility verified) and Client (NYCT) agrees to fulfil the trip.\n  // Promised :  time Promised (not scheduled) using Demand Smoother.\n  // Scheduled : Time Promised and Assigned to Route & Provider (Service Mode / booking with eHail API)\n  // Waitlisted : Trip could not be assigned to a route  - either it failed auto scheduling or dispatcher manually Waitlist-ed a Trip.\n  // Dispatched : Route on which Trip was assigned now assigned to Vehicle / Driver\n  // En route : Trip's route has started but the vehicle is not yet at the trip's pick up stop. Trip not started. (OTW to perform a pick)\n  // Active : Pick performed\n  // Completed : Drop performed\n  // No showed  : Trip's pickup stop was saved as no-show\n  // No show requested: driver has requested that dispatch save trip as noshow\n  // Callback : More info needed from the passenger to confirm the Booking. Booking is saved and results in a Trip but not Scheduled yet.\n  // Will call : Booking failed to be acknowledged and no Promise time added. Trip is saved in IQ but not yet scheduled. an orphaned booking.\n  // Failed : Route or Trip failed for other reasons. Can be system failure. Need System Error codes to define this Status further.\n  // Canceled : Trip was canceled\n  // Late canceled : Trip was cancelled late (as per config definition)\n  // Archived: TBD Driver/dispatcher has ended the trip's route.\n  // Illegal : no vehicle to service the trip or Max Ride time violated or Leg of A (was on Voucher first or Broker, and then comes back to ADEPT to schedule) forcing promise time of Leg B to be violated\n  // The following trip statuses will be displayed in IQ for version R4.x:\n  // Scheduled: trip has a route ID and is not completed. In R4.x version only scheduled trips are exported from ADEPT 4.\n  // Waitlisted: trip has no route ID\n  // Active: the trip's pick stop has been arrived and departed\n  // Completed: the trip's drop stop has been arrived and departed\n  // Canceled: Trip was canceled. In R4.x version the trip must be cancelled in ADEPT 4 and then the status is sent to IQ.\n  // Illegal: engine tried but was unable to schedule the trip.\n  const convertStatusDisplay = {\n    scheduled: 'Scheduled',\n    requested: 'Requested',\n    promised: 'Promised',\n    dispatched: 'Dispatched',\n    active: 'Active',\n    completed: 'Completed',\n    callback: 'Callback',\n    willCall: 'Will call',\n    failed: 'Failed',\n    canceled: 'Canceled',\n    cancelled: 'Canceled',\n    latecanceled: 'Late canceled',\n    lateCancelled: 'Late canceled',\n    'late canceled': 'Late canceled',\n    archived: 'Archived',\n    unscheduled: 'Unscheduled',\n    waitlisted: 'Waitlisted',\n    illegal: 'Illegal',\n    noShowRequest: 'No Show Request',\n    noShow: 'No Show',\n    'No Show': 'No Show',\n    'noshow': 'No Show',\n    'no showed': 'No Show',\n    'En Route': 'En Route',\n    'en route': 'En Route',\n    'A': 'Active',\n    'C': 'Completed'\n  };\n  const otpStatusMapper = {\n    'O': 'On Time',\n    'D': 'In Danger',\n    'L': 'Late',\n    'E': 'Early'\n  }; // Trip status coming from iqux service based on route exec events\n\n  const TRIP_CANCELED_STATUS = 'Canceled';\n  _exports.TRIP_CANCELED_STATUS = TRIP_CANCELED_STATUS;\n  const TRIP_LATE_CANCELED_STATUS = 'Late canceled';\n  _exports.TRIP_LATE_CANCELED_STATUS = TRIP_LATE_CANCELED_STATUS;\n  const TRIP_WAITLIST_STATUS = 'Waitlisted';\n  _exports.TRIP_WAITLIST_STATUS = TRIP_WAITLIST_STATUS;\n  const TRIP_NOSHOW_STATUS = 'No showed';\n  _exports.TRIP_NOSHOW_STATUS = TRIP_NOSHOW_STATUS;\n  const TRIP_SCHEDULED_STATUS = 'Scheduled';\n  _exports.TRIP_SCHEDULED_STATUS = TRIP_SCHEDULED_STATUS;\n  const TRIP_UNSCHEDULED_STATUS = 'Unscheduled';\n  _exports.TRIP_UNSCHEDULED_STATUS = TRIP_UNSCHEDULED_STATUS;\n  const TRIP_ILLEGAL_STATUS = 'Illegal';\n  _exports.TRIP_ILLEGAL_STATUS = TRIP_ILLEGAL_STATUS;\n  const TRIP_ENROUTE_STATUS = 'En route';\n  _exports.TRIP_ENROUTE_STATUS = TRIP_ENROUTE_STATUS;\n  const TRIP_ACTIVE_STATUS = 'Active';\n  _exports.TRIP_ACTIVE_STATUS = TRIP_ACTIVE_STATUS;\n  const TRIP_COMPLETED_STATUS = 'Completed';\n  _exports.TRIP_COMPLETED_STATUS = TRIP_COMPLETED_STATUS;\n  const TRIP_NOSHOWREQUESTED_STATUS = 'No show requested';\n  _exports.TRIP_NOSHOWREQUESTED_STATUS = TRIP_NOSHOWREQUESTED_STATUS;\n  const TRIP_CALLBACK_STATUS = 'Callback';\n  _exports.TRIP_CALLBACK_STATUS = TRIP_CALLBACK_STATUS;\n  const TRIP_WILLCALL_STATUS = 'Will call';\n  _exports.TRIP_WILLCALL_STATUS = TRIP_WILLCALL_STATUS;\n  const TRIP_FAILED_STATUS = 'Failed';\n  _exports.TRIP_FAILED_STATUS = TRIP_FAILED_STATUS;\n  const TRIP_LATECANCELED_STATUS = 'Late canceled';\n  _exports.TRIP_LATECANCELED_STATUS = TRIP_LATECANCELED_STATUS;\n  const TRIP_ARCHIVED_STATUS = 'Archived';\n  _exports.TRIP_ARCHIVED_STATUS = TRIP_ARCHIVED_STATUS;\n  const TRIP_DISPATCH_STATUS = 'Dispatched';\n  _exports.TRIP_DISPATCH_STATUS = TRIP_DISPATCH_STATUS;\n  const TRIP_REQUESTED_STATUS = 'Requested'; // Trip status coming from scheduling trip model\n\n  _exports.TRIP_REQUESTED_STATUS = TRIP_REQUESTED_STATUS;\n  const SCHEDULING_TRIP_COMPLETED_STATUS = 'completed';\n  const SCHEDULING_TRIP_SCHEDULED_STATUS = 'scheduled';\n  const UNSCHEDULING_TRIP_SCHEDULED_STATUS = 'unscheduled';\n  const SCHEDULING_TRIP_WAITLISTED_STATUS = 'waitlisted';\n  const SCHEDULING_TRIP_NOSHOW_STATUS = 'noShow';\n  const SCHEDULING_TRIP_ILLEGAL_STATUS = 'illegal';\n  const SCHEDULING_TRIP_CANCELLED_STATUS = 'cancelled';\n  const SCHEDULING_TRIP_CALLBACK_STATUS = 'callback';\n  const SCHEDULING_LATE_TRIP_CANCELLED_STATUS = 'lateCanceled';\n  const MANUAL_SCHEDULING_MODE = 'manual';\n\n  var _default = Model.extend(_otpLabel.default, {\n    activeContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tripId: attr('string'),\n    promiseTime: attr('date'),\n    status: attr('string'),\n    // \t'unscheduled', 'scheduled', 'waitlisted', 'illegal'\n    otp: attr('string'),\n    schedulingMode: attr('string'),\n    statusReason: attr('string'),\n    otpValue: attr('number'),\n    plannedDirectDistance: attr('number'),\n    currentProviderName: attr('string'),\n    schedule: belongsTo('schedule'),\n    route: belongsTo('route'),\n    subscription: belongsTo('subscription'),\n    booking: belongsTo('booking'),\n    segment: belongsTo('segment'),\n    reason: belongsTo('no-show-reason-category'),\n    pick: belongsTo('trip-stop', {\n      inverse: 'pickTripStop'\n    }),\n    drop: belongsTo('trip-stop', {\n      inverse: 'dropTripStop'\n    }),\n    stopPoints: hasMany('stop-point'),\n    routeAssignments: hasMany('trip-route-assignment'),\n    provider: belongsTo('provider'),\n    // populated by trips widget iqux service\n    noShowRequestReasonCode: attr('string'),\n    paymentType: attr('string'),\n    fare: attr('number'),\n    maxRideTime: attr('number'),\n    failedStatus: attr('string'),\n    tripStatus: attr('string'),\n    sdbRouteName: attr('string'),\n    anchor: Ember.computed.alias('segment.anchor'),\n    rider: Ember.computed.alias('segment.leg.rider'),\n    routeName: Ember.computed.alias('route.name'),\n    dispatchRoute: Ember.computed.alias('pickStopPoint.dispatchRoute'),\n    travelNeedCounts: Ember.computed.readOnly('segment.leg.travelNeedCounts'),\n    vehicleCapacityCounts: Ember.computed.readOnly('segment.leg.vehicleCapacityCounts'),\n    isScheduled: Ember.computed.equal('status', SCHEDULING_TRIP_SCHEDULED_STATUS),\n    isUnScheduledTrip: Ember.computed.equal('status', UNSCHEDULING_TRIP_SCHEDULED_STATUS),\n    isNoShow: Ember.computed.equal('status', SCHEDULING_TRIP_NOSHOW_STATUS),\n    isIllegal: Ember.computed.equal('status', SCHEDULING_TRIP_ILLEGAL_STATUS),\n    isCallback: Ember.computed.equal('status', SCHEDULING_TRIP_CALLBACK_STATUS),\n    isManualSchedulingMode: Ember.computed.equal('schedulingMode', MANUAL_SCHEDULING_MODE),\n    isPickPerformed: Ember.computed.readOnly('pickStopPoint.isPerformed'),\n    isDropPerformed: Ember.computed.readOnly('dropStopPoint.isPerformed'),\n    isWaitlisted: Ember.computed('status', function () {\n      const status = this.get('status') ? this.get('status').toLowerCase() : '';\n      return status === SCHEDULING_TRIP_WAITLISTED_STATUS;\n    }),\n    isCompleted: Ember.computed('status', function () {\n      const status = this.get('status') ? this.get('status').toLowerCase() : '';\n      if (status === SCHEDULING_TRIP_COMPLETED_STATUS.toLowerCase() || status === TRIP_COMPLETED_STATUS.toLowerCase()) return true;\n      return false;\n    }),\n    computedRouteName: Ember.computed('routeName', 'sdbRouteName', 'isCanceled', 'isWaitlisted', function () {\n      const isCanceled = this.get('isCanceled');\n      const isWaitlisted = this.get('isWaitlisted');\n      const sdbRouteName = this.get('sdbRouteName');\n      const routeName = this.get('routeName');\n      if (isCanceled || isWaitlisted) return '';\n      if (!Ember.isEmpty(sdbRouteName)) return sdbRouteName;\n      return routeName;\n    }),\n    providerName: Ember.computed('sortedRouteAssignments.[]', 'status', function () {\n      return this.get('pickStopPoint.dispatchRoute.provider.name') ? this.get('currentRoute.provider.name') : this.get('pickStopPoint.dispatchRoute.provider.name');\n    }),\n    stops: Ember.computed('pick', 'drop', function () {\n      const pick = (0, _unwrapProxy.unwrapProxy)(this.get('pick'));\n      const drop = (0, _unwrapProxy.unwrapProxy)(this.get('drop'));\n      return [pick, drop];\n    }),\n    sortedRouteAssignments: Ember.computed('routeAssignments.[]', function () {\n      return this.get('routeAssignments').sortBy('ordinal');\n    }),\n    lastRouteAssignment: Ember.computed('sortedRouteAssignments.[]', function () {\n      const routeAssignment = this.get('sortedRouteAssignments').lastObject;\n      return routeAssignment;\n    }),\n    fundingAgencyDisplayName: Ember.computed('segment.leg.fundingAgency', function () {\n      const fundingAgency = this.get('segment.leg.fundingAgency');\n      return fundingAgency.get('displayName');\n    }),\n    polyline: Ember.computed('segment.polyline', 'pickStopPoint.{lat,lng}', 'dropStopPoint.{lat,lng,computedStatus}', function () {\n      const dropStopPointStatus = this.get('dropStopPoint.computedStatus');\n      if (dropStopPointStatus === _stopPoint.NOSHOW_STOP_STATUS) return null;\n      const segmentPolyline = this.get('segment.polyline');\n      if (segmentPolyline) return segmentPolyline; // segment polyline doesn't exist use, dispatch stop points to generate polyline\n\n      const dropStopPoint = this.get('dropStopPoint');\n      const pickStopPoint = this.get('pickStopPoint');\n\n      if ([dropStopPoint, pickStopPoint].any(Ember.isNone)) {\n        return null;\n      }\n\n      const pickLat = pickStopPoint.get('lat');\n      const pickLng = pickStopPoint.get('lng');\n      const dropLat = dropStopPoint.get('lat');\n      const dropLng = dropStopPoint.get('lng');\n\n      if ([pickLat, pickLng, dropLat, dropLng].any(Ember.isNone)) {\n        return null;\n      }\n\n      return [[dropLat, dropLng], [pickLat, pickLng]];\n    }),\n    previousRouteAssignment: Ember.computed('sortedRouteAssignments.[]', 'status', function () {\n      const assignmentLength = this.get('sortedRouteAssignments').length;\n      let routeAssignment; // sortedRouteAssignments will contain at least one item if the trip was ever scheduled.\n      // If the trip is scheduled or no showed then return the next to last assignment.\n      // Otherwise, the trip is no longer on a route so return the last assignment.\n\n      if (assignmentLength > 0) {\n        routeAssignment = this.get('isScheduled') || this.get('isNoShow') ? this.get('sortedRouteAssignments').slice(0, assignmentLength - 1).lastObject : this.get('sortedRouteAssignments').lastObject;\n      }\n\n      return routeAssignment;\n    }),\n    isCanceled: Ember.computed('status', function () {\n      const status = this.get('status') ? this.get('status').toLowerCase() : '';\n      return status === SCHEDULING_TRIP_CANCELLED_STATUS.toLowerCase() || status === TRIP_CANCELED_STATUS.toLowerCase() || status === TRIP_LATE_CANCELED_STATUS.toLowerCase() || status === SCHEDULING_LATE_TRIP_CANCELLED_STATUS.toLowerCase();\n    }),\n    otpValueWithSign: Ember.computed('otp', 'otpValue', function () {\n      const otp = this.get('otp');\n      const otpValue = this.get('otpValue');\n      const sign = otp === 'O' || otp === 'E' || otp === otpStatusMapper.O || otp === otpStatusMapper.E ? '-' : '+';\n\n      if (!Ember.isEmpty(otpValue)) {\n        return otpValue !== 0 ? `${sign}${Math.abs(otpValue)}` : Math.abs(otpValue);\n      }\n\n      return '';\n    }),\n    pickStopPoint: Ember.computed('stopPoints', function () {\n      return this.get('stopPoints').findBy('stopType', 'pick');\n    }),\n    actualArriveTime: Ember.computed('pickStopPoint.actualArriveTime', 'id', function () {\n      const stoppick = this.get('stopPoints').findBy('stopType', 'pick');\n\n      if (stoppick.actualArriveTime) {\n        return (0, _moment.default)(stoppick.actualArriveTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n\n      return null;\n    }),\n    dropStopPoint: Ember.computed('stopPoints', function () {\n      return this.get('stopPoints').findBy('stopType', 'drop');\n    }),\n    //this property is used to find any stopoint has partially performed\n    isStopPointPerformed: Ember.computed('stopPoints.@each.{isPerformed,isArrived}', function () {\n      const performedStopPoints = this.get('stopPoints').filter(stopPoint => stopPoint.get('isPerformed') || stopPoint.get('isArrived'));\n      return performedStopPoints.length;\n    }),\n    noShow: Ember.computed('pickStopPoint.noShow.noShowReasonCode', 'dropStopPoint.noShow.noShowReasonCode', function () {\n      const pick = (0, _unwrapProxy.unwrapProxy)(this.get('pickStopPoint.noShow'));\n      const drop = (0, _unwrapProxy.unwrapProxy)(this.get('dropStopPoint.noShow'));\n      return pick ? pick : drop;\n    }),\n    ordinalStops: Ember.computed('stops.@each.{ordinal,status}', function () {\n      // IQUX-1860 because of an issue in ESS to sent delete record from\n      // a cancel or trip transfer, we are just hiding the trip and stop\n      // for now\n      if (this.get('status') === 'Removed') {\n        return [];\n      }\n\n      const stops = this.get('stops');\n      if (!Ember.isEmpty(stops)) return stops.filter(stop => Ember.isPresent(stop.get('ordinal')));\n      return [];\n    }),\n    formattedTravelNeeds: Ember.computed('segment.leg.legTravelNeeds.[]', function () {\n      const equipments = this.get('segment.leg.legTravelNeeds');\n      const travelNeedsJson = {};\n      let travelNeeds = [];\n\n      if (!Ember.isEmpty(equipments)) {\n        equipments.forEach(function (item) {\n          const count = item.get('count');\n          const name = item.get('travelNeedType.name');\n          const displayName = item.get('travelNeedType.displayName');\n          if (travelNeedsJson[name]) travelNeedsJson[name].count += count;else travelNeedsJson[name] = {\n            count,\n            displayName\n          };\n        });\n        travelNeeds = Object.keys(travelNeedsJson).map(item => {\n          if (travelNeedsJson[item].count > 0) {\n            return (0, _formatTextExtension.formatTextExtension)('valueItem', `${travelNeedsJson[item].count} ${travelNeedsJson[item].displayName} `);\n          }\n\n          return (0, _formatTextExtension.formatTextExtension)('valueItem', `${travelNeedsJson[item].displayName} `);\n        });\n      }\n\n      travelNeeds.push((0, _formatTextExtension.formatTextExtension)('mainItem', ''));\n      return {\n        values: travelNeeds\n      };\n    }),\n    formattedServiceNeeds: Ember.computed('segment.leg.legServiceNeeds.[]', function () {\n      const legServiceNeeds = this.get('segment.leg.legServiceNeeds');\n      const serviceNeedsJson = {};\n      let serviceNeeds = [];\n\n      if (!Ember.isEmpty(legServiceNeeds)) {\n        legServiceNeeds.forEach(function (item) {\n          const count = 1;\n          const name = item.get('serviceNeedType.name');\n          const displayName = item.get('serviceNeedType.displayName');\n          if (serviceNeedsJson[name]) serviceNeedsJson[name].count += count;else serviceNeedsJson[name] = {\n            count,\n            displayName\n          };\n        });\n        serviceNeeds = Object.keys(serviceNeedsJson).map(item => {\n          if (serviceNeedsJson[item].count > 1) {\n            return (0, _formatTextExtension.formatTextExtension)('valueItem', `${serviceNeedsJson[item].count} ${serviceNeedsJson[item].displayName} `);\n          }\n\n          return (0, _formatTextExtension.formatTextExtension)('valueItem', ` ${serviceNeedsJson[item].displayName} `);\n        });\n      }\n\n      serviceNeeds.push((0, _formatTextExtension.formatTextExtension)('mainItem', ''));\n      return {\n        values: serviceNeeds\n      };\n    }),\n    noOfTravelNeeds: Ember.computed.alias('formattedTravelNeeds.length'),\n    requestTimeForDisplay: Ember.computed('segment.{leg.requestTime,anchor}', function () {\n      const segment = this.get('segment');\n      const anchor = segment.get('leg.anchor') ? segment.get('leg.anchor') : 'pick';\n      const requestTimeObject = segment.get('leg.requestTime');\n      const requestDate = (0, _moment.default)(requestTimeObject).format(_environment.default.dateTimeFormat.dateMoment);\n      const requestTime = (0, _moment.default)(requestTimeObject).format(_environment.default.dateTimeFormat.timeMoment);\n      return `${requestDate} / ${anchor} / ${requestTime}`;\n    }),\n    legRequestTimeFormat: Ember.computed('segment.leg.requestTime', function () {\n      const requestTime = this.get('segment.leg.requestTime');\n\n      if (!Ember.isEmpty(requestTime)) {\n        return (0, _moment.default)(requestTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n\n      return null;\n    }),\n    tripStartTime: Ember.computed('pick.segmentStop.tripStartTime', 'promiseTime', 'segment.leg.requestTime', function () {\n      const pickTime = this.get('pick.content.tripStartTime');\n      const requestTime = this.get('segment.leg.requestTime');\n      const promiseTime = this.get('promiseTime');\n\n      if (pickTime) {\n        return pickTime;\n      }\n\n      if (promiseTime) {\n        return promiseTime;\n      }\n\n      return requestTime;\n    }),\n    tripEndTime: Ember.computed('drop.segmentStop.tripStartTime', 'promiseTime', 'segment.leg.requestTime', function () {\n      const dropTime = this.get('drop.content.tripEndTime');\n      const requestTime = this.get('segment.leg.requestTime');\n      const promiseTime = this.get('promiseTime');\n\n      if (dropTime) {\n        return dropTime;\n      }\n\n      if (promiseTime) {\n        return promiseTime;\n      }\n\n      return requestTime;\n    }),\n    routeTripStartTime: Ember.computed('tripStartTime', 'dispatchRoute.tripStartTime', function () {\n      const routeStart = this.get('dispatchRoute.tripStartTime');\n      const tripStart = this.get('tripStartTime');\n\n      if (routeStart) {\n        return routeStart;\n      }\n\n      return tripStart;\n    }),\n    routeTripEndTime: Ember.computed('tripEndTime', 'dispatchRoute.tripEndTime', function () {\n      const routeEnd = this.get('dispatchRoute.tripEndTime');\n      const tripEnd = this.get('tripEndTime');\n\n      if (routeEnd) {\n        return routeEnd;\n      }\n\n      return tripEnd;\n    }),\n    isUnscheduled: Ember.computed('computedStatus', function () {\n      const status = this.get('computedStatus').toLowerCase(); // Only set waitlisted trips for now\n\n      if ([TRIP_WAITLIST_STATUS].includes(status)) {\n        return true;\n      }\n\n      return false;\n    }),\n    tripProvider: Ember.computed('isUnscheduled', 'pickStopPoint.dispatchRoute.provider', 'provider', function () {\n      // only unschedule trips use its own provider\n      if (this.get('isUnscheduled')) {\n        return this.get('provider');\n      }\n\n      return this.get('pickStopPoint.dispatchRoute.provider');\n    }),\n    anchorStop: Ember.computed('segment.anchor', function () {\n      const anchor = this.get('segment.anchor');\n      return this.get(`${anchor}`);\n    }),\n    serviceWindowStartTime: Ember.computed('segment.leg.serviceWindow', function () {\n      const serviceWindow = this.get('segment.leg.serviceWindow');\n      const promiseTime = this.get('promiseTime');\n      if (Ember.isEmpty(promiseTime)) return null;\n      const earliestPickTime = (0, _moment.default)(promiseTime);\n\n      if (!Ember.isEmpty(serviceWindow)) {\n        // if the service window information is available, the earliest pick time is the start of the promise window\n        const promiseWindowStart = parseInt(this.get('segment.leg.serviceWindow.promiseWindowStart'), 10);\n        earliestPickTime.subtract(promiseWindowStart, 'm');\n      }\n\n      return earliestPickTime;\n    }),\n    serviceWindowEndTime: Ember.computed('segment.leg.serviceWindow', function () {\n      const serviceWindow = this.get('segment.leg.serviceWindow');\n      const promiseTime = this.get('promiseTime');\n      if (Ember.isEmpty(promiseTime)) return null;\n      const earliestDropTime = (0, _moment.default)(promiseTime);\n\n      if (serviceWindow && earliestDropTime !== null) {\n        // if the service window information is available, the earliest drop time is the start of the promise window\n        const dropWindowStart = parseInt(this.get('segment.leg.serviceWindow.promiseWindowEnd'), 10);\n        earliestDropTime.add(dropWindowStart, 'm');\n      }\n\n      return earliestDropTime;\n    }),\n    driver: Ember.computed.alias('dispatchRoute.assignedDriver'),\n    // currently status is a lowercase string\n    // @TODO remove capitalize once status are more standardized\n    mapId: Ember.computed('computedStatus', function () {\n      const status = this.get('computedStatus');\n      if (Ember.isPresent(status)) return Ember.String.capitalize(status);\n      return null;\n    }),\n    type: Ember.computed('type', function () {\n      const dsBooking = this.get('booking');\n      if (dsBooking.get('subscription.content')) return 'Subscription';\n      return 'single';\n    }),\n    plannedMiles: Ember.computed('pick.plannedDistanceToNext', 'drop.plannedDistanceToNext', function () {\n      const pickMiles = parseFloat(this.get('pick.plannedDistanceToNext'));\n      const dropMiles = parseFloat(this.get('drop.plannedDistanceToNext'));\n      if (!isNaN(pickMiles) && !isNaN(dropMiles)) return pickMiles + dropMiles;else if (!isNaN(pickMiles)) return pickMiles;\n      return !isNaN(dropMiles) ? dropMiles : 0;\n    }),\n    computedNoShowReason: Ember.computed('pickStopPoint.isNoShow', function () {\n      const isNoShow = this.get('pickStopPoint.isNoShow');\n\n      if (isNoShow) {\n        return this.get('reason.name');\n      }\n\n      return '';\n    }),\n    // scheduling service / booking service trip statuses: 'unscheduled', 'scheduled', 'waitlisted', 'illegal'\n    computedStatus: Ember.computed('status', 'isCompleted', 'pickStopPoint.isNoShow', 'isDropPerformed', function () {\n      const isCompleted = this.get('isDropPerformed');\n      const isNoShow = this.get('pickStopPoint.isNoShow');\n      const status = this.get('status') ? this.get('status').toLowerCase() : this.get('status');\n      const result = convertStatusDisplay[status];\n      const enRouteTrip = this.get('tripStatus');\n\n      if (enRouteTrip === 'En route') {\n        return 'Enroute';\n      }\n\n      if (isCompleted) {\n        return convertStatusDisplay.completed;\n      }\n\n      if (isNoShow) {\n        return convertStatusDisplay.noShow;\n      }\n\n      return result ? result : '';\n    }),\n    inService: Ember.computed('status', function () {\n      const status = this.get('status').toLowerCase();\n      const inServiceArray = [TRIP_ACTIVE_STATUS.toLowerCase()];\n      return inServiceArray.includes(status);\n    }),\n    isNoShowed: Ember.computed('status', function () {\n      const status = this.get('status').toLowerCase();\n      const noShowArray = [SCHEDULING_TRIP_NOSHOW_STATUS.toLowerCase(), TRIP_NOSHOW_STATUS.toLowerCase()];\n      return noShowArray.includes(status);\n    }),\n    scheduleLocked: Ember.computed('schedule.locked', function () {\n      return this.get('schedule.locked');\n    }),\n    isLocked: Ember.computed('dispatchRoute.isLocked', 'route.isLocked', function () {\n      return this.get('dispatchRoute.isLocked') || this.get('route.isLocked');\n    }),\n    lockedBy: Ember.computed('dispatchRoute.lockedBy', 'route.lockedBy', function () {\n      return this.get('dispatchRoute.lockedBy') || this.get('route.lockedBy');\n    }),\n    lockedId: Ember.computed('isLocked', function () {\n      return this.get('dispatchRoute.id') || this.get('route.id');\n    }),\n    isLockedByOtherUser: Ember.computed('dispatchRoute.isLockedByOtherUser', 'route.isLockedByOtherUser', function () {\n      return this.get('dispatchRoute.isLockedByOtherUser') || this.get('route.isLockedByOtherUser');\n    }),\n    currentRoute: Ember.computed('route', 'pickStopPoint.dispatchRoute.route', function () {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard'); // populating route for the schedule, if it is a schedule workspace\n\n      if (isScheduleDashboard) {\n        return this.get('route');\n      } // if trip has reached dispatch, source its route via cluster\n\n\n      const currentRoute = this.get('pickStopPoint.dispatchRoute.route');\n      if (currentRoute && currentRoute.get('id')) return currentRoute;\n    }),\n    currentRouteName: Ember.computed('computedStatus', 'currentRoute.name', function () {\n      const status = this.get('computedStatus').toLowerCase();\n\n      if ([TRIP_WAITLIST_STATUS, TRIP_CANCELED_STATUS].includes(status)) {\n        return '';\n      }\n\n      return this.get('currentRoute.name');\n    }),\n    formattedPromiseTime: Ember.computed('promiseTime', function () {\n      return !Ember.isNone(Ember.get(this, 'promiseTime')) ? (0, _moment.default)(Ember.get(this, 'promiseTime')).format(_environment.default.dateTimeFormat.dateTimeMoment) : '';\n    }),\n    formattedScheduledPromiseTime: Ember.computed('promiseTime', 'isScheduled', function () {\n      const promiseTime = this.get('promiseTime');\n      const isScheduled = this.get('isScheduled');\n\n      if (!Ember.isNone(promiseTime) && isScheduled) {\n        return (0, _moment.default)(promiseTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n    }),\n    cancelTripFormattedPromiseTime: Ember.computed('promiseTime', function () {\n      return !Ember.isNone(Ember.get(this, 'promiseTime')) ? (0, _moment.default)(Ember.get(this, 'promiseTime')).format(_environment.default.dateTimeFormat.timeMoment) : '';\n    }),\n    cancelTripFormattedRequestTime: Ember.computed('segment.leg.requestTime', function () {\n      return !Ember.isNone(Ember.get(this, 'segment.leg.requestTime')) ? (0, _moment.default)(Ember.get(this, 'segment.leg.requestTime')).format(_environment.default.dateTimeFormat.timeMoment) : '';\n    }),\n    currentRouteId: Ember.computed('currentRoute', function () {\n      const currentRoute = this.get('currentRoute');\n      return currentRoute.get('id');\n    }),\n    tripPickUpAddress: Ember.computed('pick', function () {\n      const address = this.get('segment.pick.place.address');\n      return address.get('locality') || address.get('subLocality') || address.get('region') || address.get('subRegion');\n    }),\n    tripDropOffAddress: Ember.computed('drop', function () {\n      const address = this.get('segment.drop.place.address');\n      return address.get('locality') || address.get('subLocality') || address.get('region') || address.get('subRegion');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/user-activity-log-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/user-event\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr; // created new model to display dispatchToDriverMessage, driverToDispatchMessage in activity-log of vehicle widget- IQUX-2947\n\n  var _default = Model.extend({\n    content: attr('object'),\n    vehicle: attr('object'),\n    message: attr('string'),\n    driver: attr('object')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-activity-log-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    category: attr('string'),\n    displayName: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-availability\", [\"exports\", \"ember-data\", \"moment\", \"ember-cp-validations\", \"adept-iq/utils/regex-functions\", \"adept-iq/config/environment\"], function (_exports, _emberData, _moment, _emberCpValidations, _regexFunctions, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    belongsTo\n  } = _emberData.default;\n  const TIME_ZONE = _environment.default.moment.timeZone ? _environment.default.moment.timeZone : 'America/Los_Angeles'; // model validation\n\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    shiftStart: {\n      description: 'Shift Start',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: '{description} cannot be blank'\n      })]\n    },\n    routeLength: {\n      description: 'Shift Length',\n      validators: [(0, _emberCpValidations.validator)('presence', true), (0, _emberCpValidations.validator)('format', {\n        regex: _regexFunctions.REGEX_HHMM,\n        message: '{description} must be formatted hh:mm'\n      })]\n    },\n    DOWSelected: {\n      description: 'day of week',\n      validators: [(0, _emberCpValidations.validator)('presence', {\n        presence: true,\n        message: 'Requires at least 1 {description} selected presence'\n      }), (0, _emberCpValidations.validator)('length', {\n        min: 1,\n        message: 'Requires at least 1 {description} selected'\n      })]\n    }\n  });\n\n  var _default = Model.extend(Validations, {\n    DOWSelected: attr(),\n    startTime: attr('iso-date', {\n      defaultValue: null\n    }),\n    endTime: attr(),\n    calcEndDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    shiftStart: attr('iso-date', {\n      defaultValue: null\n    }),\n    shiftEnd: attr('iso-date', {\n      defaultValue: null\n    }),\n    routeLength: attr('string'),\n    sunday: attr('boolean'),\n    monday: attr('boolean'),\n    tuesday: attr('boolean'),\n    wednesday: attr('boolean'),\n    thursday: attr('boolean'),\n    friday: attr('boolean'),\n    saturday: attr('boolean'),\n    holiday: attr('boolean'),\n    vehicle: belongsTo('vehicle'),\n    vehicleId: Ember.computed.readOnly('vehicle.id'),\n    localShiftStart: Ember.computed('shiftStart', {\n      get() {\n        const shiftStart = _moment.default.tz((0, _moment.default)().format('Y-MM-DDT') + this.get('shiftStart'), TIME_ZONE);\n\n        return shiftStart.format(_environment.default.dateTimeFormat.timeMoment);\n      },\n\n      set(key, value) {\n        const shiftStart = _moment.default.tz('2020-01-01T' + value, TIME_ZONE);\n\n        this.set('shiftStart', shiftStart.utc().format('HH:mm:ssZ'));\n        return value;\n      }\n\n    }),\n    localShiftEnd: Ember.computed('shiftEnd', {\n      get() {\n        const shiftEnd = _moment.default.tz((0, _moment.default)().format('Y-MM-DDT') + this.get('shiftEnd'), TIME_ZONE);\n\n        return shiftEnd.format(_environment.default.dateTimeFormat.timeMoment);\n      },\n\n      set(key, value) {\n        const shiftEnd = _moment.default.tz('2020-01-01T' + value, TIME_ZONE);\n\n        this.set('shiftEnd', shiftEnd.utc().format('HH:mm:ssZ'));\n        return value;\n      }\n\n    }),\n    formattedShiftStart: Ember.computed('shiftStart', function () {\n      return (0, _moment.default)(this.get('shiftStart'), 'HH:mm:ss').format(_environment.default.dateTimeFormat.timeMoment);\n    }),\n    formattedShiftEnd: Ember.computed('shiftEnd', function () {\n      return (0, _moment.default)(this.get('shiftEnd'), 'HH:mm:ss').format(_environment.default.dateTimeFormat.timeMoment);\n    }),\n    selectedDOWs: Ember.computed('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'holiday', function () {\n      const selectedDOWArray = [];\n      if (this.get('sunday')) selectedDOWArray.push('sunday');\n      if (this.get('monday')) selectedDOWArray.push('monday');\n      if (this.get('tuesday')) selectedDOWArray.push('tuesday');\n      if (this.get('wednesday')) selectedDOWArray.push('wednesday');\n      if (this.get('thursday')) selectedDOWArray.push('thursday');\n      if (this.get('friday')) selectedDOWArray.push('friday');\n      if (this.get('saturday')) selectedDOWArray.push('saturday');\n      if (this.get('holiday')) selectedDOWArray.push('holiday');\n      return selectedDOWArray;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-body-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    name: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-body-width\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    name: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-breakdown\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    time: attr('date'),\n    description: attr('string'),\n    vehicle: belongsTo('vehicle'),\n    place: belongsTo('place', {\n      inverse: 'breakdownVehicle'\n    }),\n    type: belongsTo('breakdown-type')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-capacity-config\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    count: attr('number'),\n    name: attr('string'),\n    group: attr('number'),\n    vehicleType: belongsTo('vehicle-type'),\n    vehicleCapacityType: belongsTo('vehicle-capacity-type'),\n    vehicleCapacityTypeName: Ember.computed.readOnly('vehicleCapacityType.name'),\n    isSavedNewRecord: false\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-capacity-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    engineId: attr('string'),\n    engineName: attr('string'),\n    constrainedByLIFO: attr('boolean'),\n    dwellFactor: attr('number'),\n    description: attr('string'),\n    schedule: belongsTo(),\n    vehicleCapacityConfigs: hasMany()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-chassis\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    name: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-dot-inspection\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    inspectionDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    nextInspectionDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    failedDot: attr('string'),\n    mileage: attr('string'),\n    oosDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    reinspection: attr('boolean', {\n      defaultValue: false\n    }),\n    notes: attr('string'),\n    vehicle: belongsTo('vehicle'),\n    provider: belongsTo('provider'),\n    inspectorName: belongsTo('inspector-name'),\n    inspectionCategory: belongsTo('inspection-category'),\n    providerName: Ember.computed.readOnly('provider.name'),\n    inspectionProviderName: Ember.computed.readOnly('inspectionProvider.name'),\n    inspectionCategoryName: Ember.computed.readOnly('inspectionCategory.name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-equipment\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    specialized: attr('boolean'),\n    installDate: attr('iso-date', {\n      defaultValue: ''\n    }),\n    type: attr('string'),\n    notes: attr('string'),\n    vehicle: belongsTo('vehicle'),\n    maintenanceLocationName: belongsTo('maintenance-location-name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-event\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    trackingId: attr('string'),\n    vehicleId: attr('string'),\n    type: attr('string'),\n    lat: attr('number'),\n    lng: attr('number'),\n    odo: attr('number'),\n    note: attr('string'),\n    preCheckedId: attr('number'),\n    postCheckedId: attr('number'),\n    content: attr('object'),\n    vehicle: attr('object'),\n    message: attr('string'),\n    // TODO: map these to `avlm-driver` associations\n    driver: attr('object'),\n    timestamp: attr('date'),\n    receivedAt: attr('date'),\n    heading: attr('number'),\n    speed: attr('number'),\n    time: Ember.computed('timestamp', function () {\n      return (0, _moment.default)(this.get('timestamp')).format('HH:mm A');\n    }),\n    latlng: Ember.computed('lat', 'lng', function () {\n      if (!Ember.isNone(this.get('lat')) && !Ember.isNone(this.get('lng'))) {\n        return [`${this.get('lat')}`, `${this.get('lng')}`];\n      }\n\n      return null;\n    }),\n    eventType: attr('string', {\n      defaultValue: 'GPS Ping'\n    }),\n    // Below are the attribute added under story NYAAR-8097 and Issue-NYAAR-9671\n    // TODO: update the model according to api\n    routeId: attr('number'),\n    //belongsTo('avlm-route'),\n    stopId: attr('string'),\n    stopType: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    stopAddress: attr('string', {\n      defaultValue: 'N/A'\n    }),\n    passengerLName: attr('string'),\n    passengerFName: attr('string'),\n    passengerId: attr('number'),\n    isReconciled: attr('boolean', {\n      defaultValue: false\n    }),\n    tripId: attr('number'),\n    eventId: Ember.computed('eventId', function () {\n      return (0, _moment.default)(this.get('timestamp')).format() + this.get('vehicleId');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-fuel-cap\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    name: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-fuel-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var Model = _emberData.default.Model;\n  var attr = _emberData.default.attr;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    name: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-maintenance\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    scheduled: attr('boolean', {\n      defaultValue: true\n    }),\n    mileage: attr('string'),\n    serviceDate: attr('iso-date', {\n      defaultValue: ''\n    }),\n    accepted: attr('boolean', {\n      defaultValue: false\n    }),\n    acceptedDate: attr('iso-date', {\n      defaultValue: ''\n    }),\n    maintenanceDate: attr('iso-date', {\n      defaultValue: ''\n    }),\n    notes: attr('string'),\n    comments: attr('string'),\n    maintenanceLocationName: belongsTo('maintenance-location-name'),\n    vehicle: belongsTo('vehicle'),\n    maintenanceTypeName: belongsTo('maintenance-type-name'),\n    maintenanceStatusName: belongsTo('maintenance-status-name'),\n    inspectorName: belongsTo('inspectorName'),\n    problemIdentifiedName: belongsTo('problem-identified-name')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-model-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr,\n    hasMany\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string'),\n    vehicleTypes: hasMany('vehicle-type')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-road-call\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    belongsTo,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    callDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    mileage: attr('number'),\n    notes: attr('string'),\n    vehicle: belongsTo('vehicle'),\n    roadCallCodeName: belongsTo('road-call-code-name'),\n    driver: belongsTo('driver'),\n    route: belongsTo('route')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-status-name\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-tire-size\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-transmission\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    displayName: attr('string'),\n    description: attr('string'),\n    defaultValue: attr('string'),\n    value: attr('string'),\n    unit: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-type\", [\"exports\", \"ember-data\", \"lodash\", \"adept-iq/utils/format-text-extension\"], function (_exports, _emberData, _lodash, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // third party libraries\n  const {\n    Model,\n    belongsTo,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    description: attr('string'),\n    displayName: attr('string'),\n    inServiceDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    endServiceDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    vehicleBodyLength: attr('number'),\n    xWideLiftAvailable: attr('boolean', {\n      defaultValue: null\n    }),\n    notes: attr('string'),\n    vehicleBodyType: belongsTo('vehicle-body-type'),\n    vehicleBodyWidth: belongsTo('vehicle-body-width'),\n    vehicleChassis: belongsTo('vehicle-chassis'),\n    vehicleFuelCap: belongsTo('vehicle-fuel-cap'),\n    vehicleFuelType: belongsTo('vehicle-fuel-type'),\n    vehicleModel: belongsTo('vehicle-model-name'),\n    vehicleWheelBaseType: belongsTo('vehicle-wheelbase-type'),\n    vehicleTireSize: belongsTo('vehicle-tire-size'),\n    vehicleTransmission: belongsTo('vehicle-transmission'),\n    rearAxel: belongsTo('rear-axel-name'),\n    vehicleCapacityConfigs: hasMany('vehicle-capacity-config'),\n    vehicles: hasMany('vehicle'),\n    // TODO: Ankur -  Hardcoded will be remove to some configuration\n    noOfAmbulatorySeats: Ember.computed.readOnly('capacityCounts.ambulatory'),\n    noOfWideAmbulatorySeats: Ember.computed.readOnly('capacityCounts.wideAmbulatory'),\n    noOfWheelChairSeats: Ember.computed.readOnly('capacityCounts.wheelchair'),\n    noOfWideWheelChairSeats: Ember.computed.readOnly('capacityCounts.wideWheelchair'),\n    noOfServiceAnimalSeats: Ember.computed.readOnly('capacityCounts.serviceAnimal'),\n    noOfFlexSeats: Ember.computed.readOnly('capacityCounts.flexSeats'),\n    extraWideLift: Ember.computed.gt('capacityCounts.extraWideLift', 0),\n    noOfAmbulatoryFlexSeats: Ember.computed('capacityCounts.{flexSeats,ambulatory}', function () {\n      const flexSeats = this.get('capacityCounts.flexSeats');\n\n      if (flexSeats.length > 1) {\n        return flexSeats.map(flexSeat => flexSeat.ambulatory).join(' / ');\n      }\n\n      return this.get('capacityCounts.ambulatory');\n    }),\n    noOfWheelChairFlexSeats: Ember.computed('capacityCounts.{flexSeats,wheelchair}', function () {\n      const flexSeats = this.get('capacityCounts.flexSeats');\n\n      if (flexSeats.length > 1) {\n        return flexSeats.map(flexSeat => flexSeat.wheelchair).join(' / ');\n      }\n\n      return this.get('capacityCounts.wheelchair');\n    }),\n    capacityCounts: Ember.computed('vehicleCapacityConfigs.@each.{vehicleCapacityTypeName,count}', function () {\n      const initialCounts = {\n        wheelchair: 0,\n        wideWheelchair: 0,\n        ambulatory: 0,\n        wideAmbulatory: 0,\n        serviceAnimal: 0,\n        extraWideLift: 0,\n        flexSeats: []\n      };\n      const vehicleCapacityConfigs = this.get('vehicleCapacityConfigs') || [];\n      let capacityCount = initialCounts;\n      const flexSeats = {};\n      const nonConsumables = {};\n      capacityCount = vehicleCapacityConfigs.reduce((obj, vehicleCapacityConfig) => {\n        const vehicleCapacityTypeName = vehicleCapacityConfig.get('vehicleCapacityTypeName');\n        const count = vehicleCapacityConfig.get('count');\n        const groupNumber = vehicleCapacityConfig.get('group');\n        obj[vehicleCapacityTypeName] = count; // collect the group capacity config\n\n        let group = flexSeats[groupNumber];\n\n        if (Ember.isNone(group)) {\n          group = {\n            group: groupNumber,\n            wheelchair: 0,\n            wideWheelchair: 0,\n            ambulatory: 0,\n            wideAmbulatory: 0,\n            serviceAnimal: 0,\n            extraWideLift: 0\n          };\n        }\n\n        group[vehicleCapacityTypeName] = count;\n        flexSeats[groupNumber] = group; // save non-consumable capacities\n\n        if (groupNumber === '0' && count === 0) {\n          nonConsumables[vehicleCapacityTypeName] = count;\n        }\n\n        return obj;\n      }, initialCounts); // filter out none ambulatory or wheelchair types\n\n      const filteredFlexSeats = (0, _lodash.pickBy)(flexSeats, value => {\n        return value.ambulatory > 0 || value.wheelchair > 0;\n      });\n      capacityCount.flexSeats = Object.values(filteredFlexSeats);\n      capacityCount.nonConsumables = nonConsumables;\n      return capacityCount;\n    }),\n    capacityConfigGroup: Ember.computed('vehicleCapacityConfigs.@each.{group,count,vehicleCapacityType,isSavedNewRecord}', function () {\n      let capacityConfigs = this.get('vehicleCapacityConfigs') ? this.get('vehicleCapacityConfigs').toArray() : []; //capacityConfigs.forEach(c => console.log('test', c.isSavedNewRecord, c.isNew));\n\n      capacityConfigs = capacityConfigs.filter(c => !c.isNew || c.isSavedNewRecord);\n      const groupSet = [];\n      const groups = (0, _lodash.groupBy)(capacityConfigs, capacity => {\n        return capacity.get('group');\n      });\n      Object.entries(groups).forEach(_ref => {\n        let [group] = _ref;\n        groupSet.push((0, _formatTextExtension.formatTextExtension)('valueItem', group));\n      });\n      return {\n        header: null,\n        values: groupSet\n      };\n    }),\n    capacityConfigGroupSortKey: Ember.computed('capacityConfigGroup', function () {\n      const groupsetValues = this.get('capacityConfigGroup');\n      return groupsetValues.values.length > 1 ? `${groupsetValues.values.length} Groups` : `${groupsetValues.values.length}`;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-wc-lift-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle-wheelbase-type\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    description: attr('string')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/vehicle\", [\"exports\", \"ember-data\", \"moment\", \"adept-iq/utils/format-text-extension\", \"adept-iq/config/environment\", \"adept-iq/mixins/otp-label\", \"ember-data-model-fragments/attributes\", \"ember-cp-validations\"], function (_exports, _emberData, _moment, _formatTextExtension, _environment, _otpLabel, _attributes, _emberCpValidations) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.VEHICLE_BREAKDOWN_STATUS = _exports.ROAD_SUPERVISOR = _exports.COMMUNICATION_FAILURE_STATUS = void 0;\n  const {\n    Model,\n    belongsTo,\n    hasMany,\n    attr\n  } = _emberData.default;\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    name: {\n      description: 'Name',\n      validators: [(0, _emberCpValidations.validator)('presence', true), (0, _emberCpValidations.validator)('length', {\n        max: 32\n      })]\n    }\n  });\n  const VEHICLE_BREAKDOWN_STATUS = 'Breakdown';\n  _exports.VEHICLE_BREAKDOWN_STATUS = VEHICLE_BREAKDOWN_STATUS;\n  const ROAD_SUPERVISOR = 'SUP';\n  _exports.ROAD_SUPERVISOR = ROAD_SUPERVISOR;\n  const COMMUNICATION_FAILURE_STATUS = 'offline';\n  _exports.COMMUNICATION_FAILURE_STATUS = COMMUNICATION_FAILURE_STATUS;\n\n  var _default = Model.extend(Validations, _otpLabel.default, {\n    workspace: Ember.inject.service(),\n    name: attr('string'),\n    displayStatus: attr('string'),\n    mobileId: attr('string', {\n      defaultValue: null\n    }),\n    active: attr('boolean', {\n      defaultValue: true\n    }),\n    status: attr('string', {\n      defaultValue: 'operational'\n    }),\n    placeholder: attr('boolean', {\n      defaultValue: false\n    }),\n    nonRevenueVehicle: attr('boolean'),\n    inService: attr('boolean'),\n    displayInManager: attr('boolean'),\n    displayInArchive: attr('boolean'),\n    modelYear: attr('number'),\n    leaseEndDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    vin: attr('string'),\n    licensePlate: attr('string'),\n    wheelChairLiftSerialNumber: attr('string'),\n    engineType: attr('string'),\n    siteDef: attr('string'),\n    inServiceDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    avlmInstallDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    avlmRemoveDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    endServiceDate: attr('iso-date', {\n      defaultValue: null\n    }),\n    voipId: attr('string'),\n    voipPasscode: attr('string'),\n    comments: attr('string'),\n    version: attr('number', {\n      defaultValue: null\n    }),\n    vehicleRouteExecEvent: attr('string'),\n    // startingGarage/endingGarage were generated from IQUX-service\n    startingGarage: attr('string'),\n    endingGarage: attr('string'),\n    driverAppVersion: attr('string'),\n    otp: attr('string'),\n    otpWithSign: attr('string'),\n    revenue: attr('boolean'),\n    rvdStartTime: attr('date'),\n    rvdEndTime: attr('date'),\n    rvdHistory: attr('object'),\n    inProgress: attr('boolean'),\n    routeStatus: attr('string'),\n    isCompleted: attr('boolean', {\n      defaultValue: false\n    }),\n    hasPowerOn: attr('boolean'),\n    isGpsFailure: attr('boolean'),\n    isCommFailure: attr('boolean'),\n    isLeaveGarageSignOff: attr('boolean'),\n    isOnBreak: attr('boolean'),\n    // Vehicle Widget emergency related fields\n    replyToMessageId: attr('string'),\n    preReplyId: attr('string'),\n    emergency: attr('string'),\n    schedule: belongsTo(),\n    provider: belongsTo('provider'),\n    vehicleType: belongsTo('vehicle-type'),\n    routes: hasMany('route'),\n    startGarage: belongsTo('place'),\n    endGarage: belongsTo('place'),\n    etaRoute: belongsTo('etanav-route'),\n    vehicleAvailabilities: hasMany('vehicle-availability'),\n    inspections: hasMany('vehicle-dot-inspection'),\n    vehicleMaintenances: hasMany('vehicle-maintenance'),\n    vehicleRoadCall: hasMany('vehicle-road-call'),\n    shiftBreaks: hasMany('shift-break'),\n    // drivers: hasMany('driver'),\n    routeVehicleDrivers: hasMany('route-vehicle-driver'),\n    cannedMessages: hasMany('avlm-canned-message'),\n    avlmAlert: hasMany('avlm-alert'),\n    emergencyMessages: hasMany('avlm-emergency-message'),\n    // Vehicle Lookup\n    manufacturerName: belongsTo('manufacturer-name'),\n    vehicleStatusName: belongsTo('vehicle-status-name'),\n    leaseCompany: belongsTo('lease-company'),\n    vehicleMaintLocation: belongsTo('maintenance-location-name'),\n    vehicleInspectionCategory: belongsTo('inspection-category'),\n    maintenanceStatus: belongsTo('maintenance-status-name'),\n    problemIdentified: belongsTo('problem-identified-name'),\n    roadCallCode: belongsTo('road-call-code'),\n    vehicleBodyType: belongsTo('vehicle-body-type'),\n    vehicleChassis: belongsTo('vehicle-chassis'),\n    bodyWidth: belongsTo('vehicle-body-width'),\n    vehicleFuelCaps: belongsTo('vehicle-fuel-cap'),\n    // vehicle breakdown\n    breakdowns: hasMany('vehicle-breakdown'),\n    address: belongsTo('address'),\n    // only store most current ping\n    avlLocation: (0, _attributes.fragment)('avl-location'),\n    lat: Ember.computed.readOnly('avlLocation.lat'),\n    lng: Ember.computed.readOnly('avlLocation.lng'),\n    heading: Ember.computed.readOnly('avlLocation.heading'),\n    speed: Ember.computed.readOnly('avlLocation.speed'),\n    odo: Ember.computed.readOnly('avlLocation.odo'),\n    timestamp: Ember.computed.readOnly('avlLocation.timestamp'),\n    latestRoute: Ember.computed.readOnly('latestDsRoute'),\n    providerId: Ember.computed.readOnly('provider.id'),\n    providerName: Ember.computed.readOnly('provider.name'),\n    isPlaceholder: Ember.computed.readOnly('placeholder'),\n    vehicleTypeName: Ember.computed.readOnly('vehicleType.name'),\n    vehicleTypeId: Ember.computed.readOnly('vehicleType.id'),\n    leaseCompanyName: Ember.computed.readOnly('leaseCompany.displayName'),\n    workspaceStartTime: Ember.computed.alias('workspace.startDate'),\n    workspaceEndTime: Ember.computed.alias('workspace.endDate'),\n    isWidgetEmergency: Ember.computed.notEmpty('emergency'),\n    isWidgetApprovedEmergency: Ember.computed('isWidgetEmergency', 'emergency', function () {\n      return this.get('isWidgetEmergency') && this.get('emergency').includes('Acknowledged');\n    }),\n    isWidgetEmergencyRecAck: Ember.computed('emergency', function () {\n      return ['Emergency Acknowledged', 'Emergency Received'].includes(this.get('emergency'));\n    }),\n    widgetEmergencyReplyMsgId: Ember.computed('isWidgetEmergency', 'preReplyId', 'replyToMessageId', function () {\n      const isWidgetEmergency = this.get('isWidgetEmergency');\n\n      if (isWidgetEmergency) {\n        return this.get('replyToMessageId');\n      }\n\n      return null;\n    }),\n    isEmergency: Ember.computed.alias('lastEmergencyMessage.isEmergency'),\n    isApprovedEmergency: Ember.computed.alias('lastEmergencyMessage.isAcknowledged'),\n    isApprovedEmergencyPending: Ember.computed.alias('lastEmergencyMessage.isAcknowledgedPending'),\n    currentDriverId: Ember.computed.alias('driverId'),\n    isEmergencyVehicle: Ember.computed('isEmergency', 'isApprovedEmergency', function () {\n      if (this.get('isEmergency') || this.get('isApprovedEmergency')) {\n        return true;\n      }\n\n      return false;\n    }),\n    latestVehicleBreakdown: Ember.computed('breakdowns.@each.time', function () {\n      const breakdowns = this.get('breakdowns');\n      if (!breakdowns) return [];\n      return breakdowns.sortBy('time').get('lastObject');\n    }),\n    callSign: Ember.computed.alias('name'),\n    // iqux-service related attributes\n    currentDriver: belongsTo('driver'),\n    currentRouteName: attr('string'),\n    currentRoutePk: attr('number'),\n    driverId: attr('string'),\n    revenueVehicleStatus: Ember.computed('nonRevenueVehicle', function () {\n      return !this.get('nonRevenueVehicle');\n    }),\n    isRoadSupervisor: Ember.computed('currentRouteName', function () {\n      const routeName = this.get('currentRouteName');\n      return routeName && routeName.includes(ROAD_SUPERVISOR);\n    }),\n    sortedEmergencyMessages: Ember.computed('emergencyMessages.[]', function () {\n      return this.get('emergencyMessages').sortBy('sortedId', 'createdTime');\n    }),\n    point: Ember.computed.collect('lat', 'lng'),\n    // contains an emergency message with status unresolved or acknowledged\n    lastEmergencyMessage: Ember.computed('sortedEmergencyMessages.[]', function () {\n      const emergencyMessage = this.get('sortedEmergencyMessages').lastObject;\n      return emergencyMessage;\n    }),\n    latestReceivedEmergencyMessage: Ember.computed('sortedEmergencyMessages.[]', function () {\n      const emergencyMessages = this.get('sortedEmergencyMessages').toArray();\n\n      for (let i = emergencyMessages.length - 1; i >= 0; i--) {\n        if (emergencyMessages[i].get('isEmergency') || emergencyMessages[i].get('isAcknowledged')) {\n          return emergencyMessages[i];\n        }\n      }\n\n      return null;\n    }),\n    latestDriver: Ember.computed('currentDriver', 'latestRouteVehicleDriver', function () {\n      const currentDriver = this.get('currentDriver');\n      if (currentDriver && currentDriver.get('id')) return currentDriver;\n      const latestRouteVehicleDriver = this.get('latestRouteVehicleDriver.driver');\n      return latestRouteVehicleDriver;\n    }),\n    latestDsRoute: Ember.computed.alias('latestRouteVehicleDriver.route'),\n    latestRouteVehicleDriver: Ember.computed('routeVehicleDrivers.[]', 'rvdHistory', function () {\n      const routeVehicleDrivers = this.get('routeVehicleDrivers');\n      if (!routeVehicleDrivers) return null;\n      const rvdHistory = this.get('rvdHistory') ? Object.values(this.get('rvdHistory')) : []; // Find the route been started\n\n      if (rvdHistory.length > 0) {\n        const currentRvd = rvdHistory.find(rvd => rvd.isStarted && !rvd.isCompleted);\n        const latestDpRouteId = currentRvd ? currentRvd.dpRouteId : null;\n\n        if (latestDpRouteId) {\n          const latestRvd = routeVehicleDrivers.findBy('dispatchRoute.id', latestDpRouteId);\n          if (latestRvd) return latestRvd;\n        }\n      } // Otherwise just sort by startTime\n\n\n      return routeVehicleDrivers.sortBy('startTime').get('lastObject');\n    }),\n    // Remove the start/end time filter cause iqux-perf dynamically fetch this from server\n    currentRouteVehicleDrivers: Ember.computed.alias('routeVehicleDrivers'),\n    currentAssignment: Ember.computed('routeVehicleDrivers', function () {\n      const routeVehicleDrivers = Ember.get(this, 'routeVehicleDrivers');\n      const now = (0, _moment.default)();\n\n      if (!Ember.isEmpty(routeVehicleDrivers)) {\n        const currentRvd = routeVehicleDrivers.find(Rvd => {\n          const {\n            startTime,\n            endTime\n          } = Ember.getProperties(Rvd, 'startTime', 'endTime');\n          return (0, _moment.default)(endTime).isAfter(now) && (0, _moment.default)(startTime).isBefore(now);\n        });\n\n        if (!Ember.isEmpty(currentRvd)) {\n          return currentRvd;\n        }\n      }\n\n      return null;\n    }),\n    isAssignable: Ember.computed('routeVehicleDrivers.[]', function () {\n      return Ember.get(this, 'routeVehicleDrivers.length') === 0;\n    }),\n    isBroken: Ember.computed('status', function () {\n      return Ember.get(this, 'status') === 'breakdown';\n    }),\n\n    isVehicleAvailable(startTime, endTime) {\n      let retVal = true;\n      const routeVehicleDrivers = Ember.get(this, 'routeVehicleDrivers');\n\n      if (!Ember.isEmpty(routeVehicleDrivers)) {\n        routeVehicleDrivers.forEach(routeVehicleDriver => {\n          if (startTime.isSameOrAfter(routeVehicleDriver.get('startTime')) && startTime.isSameOrBefore(routeVehicleDriver.get('endTime')) || endTime.isSameOrAfter(routeVehicleDriver.get('startTime')) && endTime.isSameOrBefore(routeVehicleDriver.get('endTime'))) {\n            retVal = false;\n          }\n        });\n      }\n\n      return retVal;\n    },\n\n    noOfAmbulatorySeats: Ember.computed.readOnly('vehicleType.noOfAmbulatorySeats'),\n    noOfWideAmbulatorySeats: Ember.computed.readOnly('vehicleType.noOfWideAmbulatorySeats'),\n    noOfWheelChairSeats: Ember.computed.readOnly('vehicleType.noOfWheelChairSeats'),\n    noOfWideWheelChairSeats: Ember.computed.readOnly('vehicleType.noOfWideWheelChairSeats'),\n    noOfServiceAnimalSeats: Ember.computed.readOnly('vehicleType.noOfServiceAnimalSeats'),\n    noOfAmbulatoryFlexSeats: Ember.computed.readOnly('vehicleType.noOfAmbulatoryFlexSeats'),\n    noOfWheelChairFlexSeats: Ember.computed.readOnly('vehicleType.noOfWheelChairFlexSeats'),\n    formattedAvailabilities: Ember.computed('vehicleAvailabilities', 'active', function () {\n      const active = this.get('active');\n      const formattedObject = {\n        header: null,\n        values: [],\n        fieldName: 'Availabilities'\n      };\n      const availabilities = [];\n      const vehicleAvailabilities = this.get('vehicleAvailabilities');\n\n      if (!Ember.isEmpty(vehicleAvailabilities)) {\n        vehicleAvailabilities.forEach(function (item) {\n          const startTime = (0, _moment.default)(item.get('startTime'));\n          const endTime = (0, _moment.default)(item.get('endTime'));\n          const now = (0, _moment.default)();\n\n          if (active && now.isBetween(startTime, endTime)) {\n            formattedObject.header = null;\n            availabilities.push((0, _formatTextExtension.formatTextExtension)('mainItem', `${startTime.format(_environment.default.dateTimeFormat.dateMoment)} - ${endTime.format(_environment.default.dateTimeFormat.dateMoment)}`));\n\n            if (item.monday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Monday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n\n            if (item.tuesday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Tuesday  ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n\n            if (item.wednesday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Wednesday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n\n            if (item.thursday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Thursday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n\n            if (item.friday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Friday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n\n            if (item.saturday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Saturday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n\n            if (item.sunday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Sunday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n            }\n          }\n\n          formattedObject.values = availabilities;\n        });\n      }\n\n      return formattedObject;\n    }),\n    formattedBreaks: Ember.computed('shiftBreaks', 'active', function () {\n      const active = this.get('active');\n      const shiftBreaks = this.get('shiftBreaks');\n      const formattedObject = {\n        header: null,\n        values: [],\n        fieldName: 'Breaks'\n      };\n      const breaks = [];\n      if (!shiftBreaks) return formattedObject;\n      shiftBreaks.forEach(function (item) {\n        const startTime = (0, _moment.default)(item.get('startTime'));\n        const endTime = (0, _moment.default)(item.get('endTime'));\n        const now = (0, _moment.default)();\n\n        if (active && now.isBetween(startTime, endTime)) {\n          formattedObject.header = null;\n          breaks.push((0, _formatTextExtension.formatTextExtension)('mainItem', `${startTime.format(_environment.default.dateTimeFormat.dateMoment)} - ${endTime.format(_environment.default.dateTimeFormat.dateMoment)}`));\n\n          if (item.monday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Monday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n\n          if (item.tuesday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Tuesday  ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n\n          if (item.wednesday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Wednesday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n\n          if (item.thursday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Thursday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n\n          if (item.friday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Friday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n\n          if (item.saturday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Saturday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n\n          if (item.sunday) {\n            breaks.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Sunday ${item.formattedShiftStart} - ${item.formattedShiftEnd}`));\n          }\n        }\n\n        formattedObject.values = breaks;\n      });\n      return formattedObject;\n    }),\n    capacityCounts: Ember.computed.readOnly('vehicleType.capacityCounts'),\n    vehicleStatus: Ember.computed('lastEmergencyMessage.{isEmergency,isAcknowledged,isCanceled,isAcknowledgedPending}', 'status', function () {\n      const message = this.get('lastEmergencyMessage');\n      const status = this.get('status');\n\n      if (status === 'breakdown') {\n        return VEHICLE_BREAKDOWN_STATUS;\n      }\n\n      if (!message) return '';\n\n      if (message.get('isEmergency')) {\n        return 'Emergency Received';\n      }\n\n      if (message.get('isAcknowledged')) {\n        return 'Emergency Acknowledged';\n      }\n\n      return '';\n    }),\n    mapId: Ember.computed('lastEmergencyMessage.{isEmergency,isAcknowledged,isCanceled}', 'vehicleStatus', 'hasPowerOn', 'isGpsFailure', 'isRoadSupervisor', 'isCommFailure', 'isLeaveGarageSignOf', 'isOnBreak', function () {\n      let id = 'iq-vehicle';\n      const otp = this.get('otp');\n      const message = this.get('lastEmergencyMessage');\n      const vehicleStatus = this.get('vehicleStatus');\n      const hasPowerOn = this.get('hasPowerOn');\n      const isGpsFailure = this.get('isGpsFailure');\n      const isRoadSupervisor = this.get('isRoadSupervisor');\n      const isCommFailure = this.get('isCommFailure');\n      const isEmergency = message && (message.get('isEmergency') || message.get('isAcknowledged'));\n      const isLeaveGarageSignOff = this.get('isLeaveGarageSignOff');\n      const isOnBreak = this.get('isOnBreak');\n\n      if (vehicleStatus === VEHICLE_BREAKDOWN_STATUS) {\n        id += '-breakdown';\n        return id;\n      }\n\n      if (isEmergency && (otp === 'D' || 'In Danger')) {\n        id += '-emergency-danger';\n        return id;\n      }\n\n      if (isEmergency && (otp === 'L' || 'Late')) {\n        id += '-emergency-late';\n        return id;\n      }\n\n      if (isEmergency) {\n        id += '-emergency';\n        return id;\n      }\n\n      if (isCommFailure) {\n        id += '-communication-failure';\n        return id;\n      } // These events priority are lower than emergency;\n\n\n      switch (otp) {\n        case 'D':\n        case 'In Danger':\n          id += '-danger';\n          return id;\n\n        case 'L':\n        case 'Late':\n          id += '-late';\n          return id;\n\n        default:\n          break;\n      }\n\n      if (isOnBreak) {\n        id += '-break';\n        return id;\n      }\n\n      if (hasPowerOn || isLeaveGarageSignOff) {\n        id += '-powered-on';\n        return id;\n      }\n\n      if (isGpsFailure) {\n        id += '-gps-failure';\n        return id;\n      }\n\n      if (isRoadSupervisor) {\n        id += '-roadsup';\n        return id;\n      }\n\n      return id;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/widget-config\", [\"exports\", \"ember-data\", \"lodash\"], function (_exports, _emberData, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    componentName: attr('string'),\n    title: attr('string'),\n    width: attr('number'),\n    minWidth: attr('number'),\n    height: attr('number'),\n    minHeight: attr('number'),\n    x: attr('number'),\n    y: attr('number'),\n    options: attr('object', {\n      defaultValue: () => {}\n    }),\n    rowComponent: attr('string'),\n    hideWidgetControls: attr('boolean'),\n\n    mergeOptions() {\n      let changes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const options = this.get('options');\n\n      const mergedOptions = _lodash.default.merge({}, options, changes);\n\n      this.set('options', mergedOptions);\n      this.notifyPropertyChange('options');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/zip-code\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    allowBrokerTrips: attr('boolean')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/zone-type\", [\"exports\", \"ember-data\", \"adept-iq/config/config-object-template\"], function (_exports, _emberData, _configObjectTemplate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Model,\n    hasMany,\n    attr\n  } = _emberData.default;\n\n  const ZONE_TYPE_DISPLAY_NAME = _configObjectTemplate.default['config-System_Configuration-zones'].fields.find(field => field.fieldName === 'displayName');\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    value: attr(),\n    addresses: hasMany('address'),\n    zoneId: Ember.computed('name', function () {\n      return parseInt(this.get('name'), 10);\n    }),\n    valueDisplayName: Ember.computed('value', function () {\n      const value = this.get('value');\n      if (Ember.isEmpty(value)) return '';\n      const displayName = value[ZONE_TYPE_DISPLAY_NAME.displayName];\n      return displayName ? displayName : value.displayName;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/models/zone\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.AFFINITY_PREFERRED = _exports.AFFINITY_NO_SERVICE = _exports.AFFINITY_NORMAL = _exports.AFFINITY_LAST_RESORT = void 0;\n  const {\n    Model,\n    attr\n  } = _emberData.default;\n  const AFFINITY_PREFERRED = {\n    type: 'Preferred',\n    val: 5\n  };\n  _exports.AFFINITY_PREFERRED = AFFINITY_PREFERRED;\n  const AFFINITY_NORMAL = {\n    type: 'Normal',\n    val: 4\n  };\n  _exports.AFFINITY_NORMAL = AFFINITY_NORMAL;\n  const AFFINITY_LAST_RESORT = {\n    type: 'Last Resort',\n    val: 1\n  };\n  _exports.AFFINITY_LAST_RESORT = AFFINITY_LAST_RESORT;\n  const AFFINITY_NO_SERVICE = {\n    type: 'No Service',\n    val: 0\n  };\n  _exports.AFFINITY_NO_SERVICE = AFFINITY_NO_SERVICE;\n\n  var _default = Model.extend({\n    name: attr('string'),\n    displayName: attr('string'),\n    type: attr('string'),\n    points: attr(),\n    zoneId: Ember.computed('id', function () {\n      return parseInt(this.get('id'), 10);\n    }),\n    convertAffinityValue: Ember.computed('affinityValue', function () {\n      const affinityValue = this.get('affinityValue');\n\n      switch (affinityValue) {\n        case AFFINITY_PREFERRED.val:\n          {\n            return AFFINITY_PREFERRED.type;\n          }\n\n        case AFFINITY_NORMAL.val:\n          {\n            return AFFINITY_NORMAL.type;\n          }\n\n        case AFFINITY_LAST_RESORT.val:\n          {\n            return AFFINITY_LAST_RESORT.type;\n          }\n\n        default:\n          {\n            return AFFINITY_NO_SERVICE.type;\n          }\n      }\n    }),\n    noOfPoints: Ember.computed('points', function () {\n      return this.get('points') ? this.get('points.length') : 0;\n    }),\n    polypoints: Ember.computed('points', 'noOfPoints', function () {\n      const polygonPoints = [];\n      const points = this.get('points');\n\n      if (!points && this.get('noOfPoints') === 1) {\n        const item = points[1];\n        return item;\n      } else if (this.get('points') !== null) {\n        points.forEach(item => {\n          const polygonPoint = [];\n          polygonPoint.push(item.lat);\n          polygonPoint.push(item.lng);\n          polygonPoints.push(polygonPoint);\n        });\n      }\n\n      return polygonPoints;\n    }),\n    status: Ember.computed('points', function () {\n      return 'normal';\n    }),\n    calculateCenter: Ember.computed('points', 'noOfPoints', function () {\n      let minlat = false;\n      let minlng = false;\n      let maxlat = false;\n      let maxlng = false;\n      let lat = null;\n      let lng = null;\n      const points = this.get('points');\n\n      if (!Ember.isEmpty(points)) {\n        points.forEach(item => {\n          if (minlat === false) {\n            minlat = item.lat;\n          } else {\n            minlat = item.lat < minlat ? item.lat : minlat;\n          }\n\n          if (maxlat === false) {\n            maxlat = item.lat;\n          } else {\n            maxlat = item.lat > maxlat ? item.lat : maxlat;\n          }\n\n          if (minlng === false) {\n            minlng = item.lng;\n          } else {\n            minlng = item.lng < minlng ? item.lng : minlng;\n          }\n\n          if (maxlng === false) {\n            maxlng = item.lng;\n          } else {\n            maxlng = item.lng > maxlng ? item.lng : maxlng;\n          }\n        }); // Calculate the center\n\n        lat = maxlat - (maxlat - minlat) / 2;\n        lng = maxlng - (maxlng - minlng) / 2;\n      }\n\n      return {\n        lat: lat,\n        lng: lng\n      };\n    }),\n    lat: Ember.computed.alias('calculateCenter.lat'),\n    lng: Ember.computed.alias('calculateCenter.lng')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/modifiers/did-insert\", [\"exports\", \"@ember/render-modifiers/modifiers/did-insert\"], function (_exports, _didInsert) {\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 _didInsert.default;\n    }\n  });\n});","define(\"adept-iq/modifiers/did-update\", [\"exports\", \"@ember/render-modifiers/modifiers/did-update\"], function (_exports, _didUpdate) {\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 _didUpdate.default;\n    }\n  });\n});","define(\"adept-iq/modifiers/sortable-group\", [\"exports\", \"ember-sortable/modifiers/sortable-group\"], function (_exports, _sortableGroup) {\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 _sortableGroup.default;\n    }\n  });\n});","define(\"adept-iq/modifiers/sortable-handle\", [\"exports\", \"ember-sortable/modifiers/sortable-handle\"], function (_exports, _sortableHandle) {\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 _sortableHandle.default;\n    }\n  });\n});","define(\"adept-iq/modifiers/sortable-item\", [\"exports\", \"ember-sortable/modifiers/sortable-item\"], function (_exports, _sortableItem) {\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 _sortableItem.default;\n    }\n  });\n});","define(\"adept-iq/modifiers/will-destroy\", [\"exports\", \"@ember/render-modifiers/modifiers/will-destroy\"], function (_exports, _willDestroy) {\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 _willDestroy.default;\n    }\n  });\n});","define(\"adept-iq/pods/application/controller\", [\"exports\", \"adept-iq/utils/mobile\", \"adept-iq/config/environment\"], function (_exports, _mobile, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // these are the top-level things that can focus can be rotated through\n  const FOCUSABLE_WIDGET_SELECTOR = '.header-nav, .dashboard-widget'; // used to select first control to receive browser focus on rotation\n\n  const INITIAL_CONTROL_SELECTOR = '.initial-focus-control';\n  const GENERIC_CONTROL_SELECTOR = 'input, button, .ember-basic-dropdown-trigger';\n\n  var _default = Ember.Controller.extend({\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    isWidgetMinified: Ember.computed.alias('maximizer.isWidgetMinified'),\n    data: null,\n    avlmLite: false,\n\n    // remove this for avlm lite 2.1 and above\n    init() {\n      this._super(...arguments);\n\n      this.set('isTouchDevice', _mobile.isTouchDevice);\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('actions', this, 'onKeyDown', event);\n      };\n\n      document.body.addEventListener('keydown', this._onKeyDown);\n      this.set('avlmLite', _environment.default.APP.avlmLite); // remove this for avlm lite 2.1 and above\n\n      const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n\n      if (isMobile) {\n        Ember.$('body').addClass('mobile-view');\n      } else {\n        Ember.$('body').removeClass('mobile-view');\n      }\n    },\n\n    destroy() {\n      document.body.removeEventListener('keydown', this._onKeyDown);\n\n      this._super(...arguments);\n    },\n\n    onKeyDown(event) {\n      // Escape key\n      if (event.keyCode === 27) {\n        this.get('geocode').deactivateGeocode();\n      } // don't activate global shortcuts when editing a form\n\n\n      if (event.target.tagName === 'INPUT') return; // shortcut for next widget\n\n      if (event.key === '`' && !event.altKey && !event.ctrlKey) {\n        event.preventDefault();\n        this.rotateFocus();\n      } // shortcut for previous widget\n\n\n      if (event.key === '~' && !event.altKey && !event.ctrlKey) {\n        event.preventDefault();\n        this.rotateFocus(-1);\n      }\n    },\n\n    isAuthenticated: Ember.computed.alias('session.isAuthenticated'),\n    isExported: Ember.computed.readOnly('workspace.isExported'),\n\n    rotateFocus() {\n      let offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n      let nextElement;\n      const focusables = Array.from(document.querySelectorAll(FOCUSABLE_WIDGET_SELECTOR));\n      const closestFocusable = document.activeElement.closest(FOCUSABLE_WIDGET_SELECTOR);\n\n      if (closestFocusable) {\n        const index = focusables.indexOf(closestFocusable);\n        const nextIndex = (index + offset + focusables.length) % focusables.length;\n        nextElement = focusables[nextIndex];\n      } else {\n        nextElement = focusables[0];\n      }\n\n      if (nextElement) {\n        const control = nextElement.querySelector(INITIAL_CONTROL_SELECTOR) || nextElement.querySelector(GENERIC_CONTROL_SELECTOR);\n\n        if (control) {\n          control.focus();\n        }\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/application/route\", [\"exports\", \"ember-simple-auth/mixins/application-route-mixin\"], function (_exports, _applicationRouteMixin) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend(_applicationRouteMixin.default, {\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    socket: Ember.inject.service(),\n    work: Ember.inject.service(),\n    user: Ember.inject.service(),\n    map: Ember.inject.service(),\n\n    beforeModel() {\n      if (this.session.isAuthenticated) {\n        this.get('map'); // Initialized to be used in map-contexts/base.js\n\n        return this.get('workspace').initUserRecord(this.session.isAuthenticated);\n      } // Move clearLocalStorage here to avoid token expired won't trigger sessionInvalidate.\n\n\n      this.clearLocalStorage();\n    },\n\n    clearLocalStorage() {\n      const lastDashboardId = localStorage.getItem('lastDashboardId');\n      const currentUser = localStorage.getItem('currentUser');\n      localStorage.clear();\n      if (Ember.isNone(currentUser) || Ember.isNone(lastDashboardId)) return; // put this back for re-login\n\n      const userDash = `${currentUser}*${lastDashboardId}`;\n      localStorage.setItem('currentUser', currentUser);\n      localStorage.setItem('userDash', userDash);\n      localStorage.setItem('lastDashboardId', lastDashboardId);\n    },\n\n    sessionInvalidated() {\n      // `store.unloadAll()` takes a really long time; this is much quicker\n      window.location.assign('/login');\n    },\n\n    actions: {\n      openDashboard(dashboard) {\n        // TODO: prompt to save changes\n        this.get('tooltip').reset();\n        this.transitionTo('dashboard', dashboard);\n      },\n\n      transitionTo() {\n        this.transitionTo(...arguments);\n      },\n\n      async logout() {\n        return Ember.RSVP.resolve().then(() => {\n          if (this.get('user').isRoadSupEnable()) {\n            return this.get('roadSupervisor').onLogoutPerformPullIn();\n          }\n        }).then(() => {\n          return this.get('session').invalidate();\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/application/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"z00nM+/E\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"application-wrapper \\\",[27,\\\"if\\\",[[23,[\\\"isTouchDevice\\\"]],\\\"is-touch-device\\\",\\\"\\\"],null],\\\" \\\",[27,\\\"if\\\",[[23,[\\\"isExported\\\"]],\\\"disable-pointer-events\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"workspace\\\",\\\"isGlobalSpinnerVisible\\\"]],[23,[\\\"workspace\\\",\\\"isConnectionUnstable\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"global-spinner\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isDashboardPickerOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"dashboard-picker\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isDashboardSaveAsOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"dashboard-save-as\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isDashboardEditAsOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"dashboard-edit-as\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isClosingSchedule\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"close-schedule\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isReoptimizeOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"reoptimize-modal\\\",null,[[\\\"stackFrame\\\"],[[23,[\\\"workspace\\\",\\\"stack\\\",\\\"lastObject\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isScheduleGenerate\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"schedule-generate-modal\\\",null,[[\\\"stackFrame\\\"],[[23,[\\\"workspace\\\",\\\"stack\\\",\\\"lastObject\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"reoptimizeInProgress\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"reoptimize-inprogress\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-nav-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"header-nav\\\",null,[[\\\"dashboards\\\",\\\"openDashboard\\\",\\\"transitionTo\\\",\\\"onLogout\\\"],[[23,[\\\"data\\\",\\\"dashboards\\\"]],[27,\\\"route-action\\\",[\\\"openDashboard\\\"],null],[27,\\\"route-action\\\",[\\\"transitionTo\\\"],null],[27,\\\"route-action\\\",[\\\"logout\\\"],null]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isAuthenticated\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"workspace-nav-wrapper \\\",[27,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isScheduleDashboard\\\"]],\\\"schedule-dashboard\\\"],null]]]],[9],[0,\\\"\\\\n      \\\"],[1,[21,\\\"workspace-navbar\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isAuthenticated\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"notification-bar\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"workspace\\\",\\\"isDispatchDashboard\\\"]],[23,[\\\"workspace\\\",\\\"isEditingTimeline\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"timeline-picker-dropdown\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[21,\\\"timeline-picker\\\"],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isShowAbout\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"about-adept\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"content-wrapper \\\",[27,\\\"unless\\\",[[23,[\\\"isWidgetMinified\\\"]],\\\"maximize-widget-only\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"action-modal\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isRoadSupervisorModeEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[21,\\\"road-supervisor-modal\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"sideDrawerComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer-container\\\",null,[[\\\"sideDrawerComponent\\\"],[[23,[\\\"workspace\\\",\\\"sideDrawerComponent\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[1,[21,\\\"outlet\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/application/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/change-password-confirmation/route\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    session: Ember.inject.service(),\n    actions: {\n      redirectToLogin() {\n        this.get('session').invalidate();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/change-password-confirmation/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"jczq5e7t\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"change-password-confirmation\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h1\\\"],[9],[0,\\\"\\\\n    Password Changed\\\\n  \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"content\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n        Your password has been successfully changed. Please use the new password to log in.\\\\n    \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn\\\"],[9],[0,\\\"OK\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"redirectToLogin\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/change-password-confirmation/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/change-password/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    errors: Ember.computed.alias('data.errors')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/change-password/route\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    errors: null,\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('displayError', false);\n    },\n\n    setupController(controller\n    /*, model*/\n    ) {\n      controller.set('data', {});\n      controller.set('displayError', false);\n    },\n\n    actions: {\n      passwordChange(password, newPassword) {\n        const ajax = this.get('ajax');\n        const session = this.get('session');\n        const {\n          host\n        } = _apiUrls.API.ssoService;\n        const username = localStorage.getItem('currentUser');\n        const userId = localStorage.getItem('currentUserId');\n        const url = host + `/basicUser/${userId}`;\n        const data = {\n          username: username,\n          password: newPassword,\n          passwordUpdatedAt: new Date().toISOString()\n        };\n        return ajax.put(url, {\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: data\n        }).then(() => {\n          this.transitionTo('change-password-confirmation');\n        }).catch(e => {\n          if (e && e.status === 400) {\n            this.set('displayError', true);\n          }\n        }); // this.set('controller.displayError', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/change-password/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eR2tSeBK\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"style\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"displayError\\\"]],true],null],\\\"display: none;\\\"],null]],[11,\\\"id\\\",\\\"change-password\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h1\\\"],[9],[0,\\\"\\\\n    Change Password\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[1,[27,\\\"change-password-form\\\",null,[[\\\"errors\\\",\\\"onSubmit\\\"],[[27,\\\"readonly\\\",[[23,[\\\"errors\\\"]]],null],[27,\\\"route-action\\\",[\\\"passwordChange\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[12,\\\"style\\\",[28,[[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"displayError\\\"]],false],null],\\\" display: none;\\\"],null],\\\" margin: 100px\\\"]]],[11,\\\"id\\\",\\\"error-info\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h1\\\"],[9],[0,\\\"\\\\n    Bad Request\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"content\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n          There was a problem with your request.\\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n          If the problem persists, contact your administrator.\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[4,\\\"link-to\\\",[\\\"require-new-password\\\"],[[\\\"class\\\",\\\"style\\\"],[\\\"btn btn-outline-primary-simple\\\",\\\"marginTop: 15px\\\"]],{\\\"statements\\\":[[0,\\\"Retry\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/change-password/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/about-adept/component\", [\"exports\", \"adept-iq/config/api-urls\", \"adept-iq/config/environment\"], function (_exports, _apiUrls, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    aboutAdeptDescription: 'ADEPT IQ provides a comprehensive operations management solution for the Demand Response business.',\n    versionData: null,\n    uiVersion: '',\n    uiBuildNumber: '',\n\n    init() {\n      const session = this.get('session');\n      const ajax = this.get('ajax');\n\n      this._super(...arguments);\n\n      if (_environment.default.aboutAdeptDescription) {\n        this.set('aboutAdeptDescription', _environment.default.aboutAdeptDescription);\n      } // replace with proper endpoint\n\n\n      if (!_environment.default.APP.avlmLite) {\n        return ajax.post(_apiUrls.API.aboutPageService.host, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        }).then(response => {\n          const defaultVersionData = response ? response.body : {};\n          this.set('uiVersion', defaultVersionData.ReleaseVersion);\n          this.set('uiBuildNumber', defaultVersionData.BuildNumber);\n          this.set('versionData', defaultVersionData.components);\n        });\n      }\n    },\n\n    actions: {\n      onCloseAboutAdept() {\n        const workspace = this.get('workspace');\n        workspace.toggleProperty('isShowAbout');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/about-adept/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Q+5pmAob\",\n    \"block\": \"{\\\"symbols\\\":[\\\"version\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseAboutAdept\\\"],null],\\\"about-adept-styles-overlay\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-adept\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-adept-header\\\"],[9],[0,\\\"About ADEPT IQ\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseAboutAdept\\\"],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-logo-image\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"adept-ui-version\\\"],[9],[0,\\\"Version \\\"],[1,[21,\\\"uiVersion\\\"],false],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"adept-ui-version\\\"],[9],[0,\\\"Build: \\\"],[1,[21,\\\"uiBuildNumber\\\"],false],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"adept-ui-copyright\\\"],[9],[0,\\\"Copyright ©2025 DDS Wireless International Inc. All rights reserved.\\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"adept-ui-copyright\\\"],[9],[0,\\\"Notices and Acknowledgements \\\"],[10],[0,\\\"\\\\n  \\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-adept-body\\\"],[9],[0,\\\"\\\\n    Map Data and Line Services licensed by TomTom North America, Inc. ©1992-2025 TomTom\\\\n    \\\"],[1,[21,\\\"aboutAdeptDescription\\\"],false],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-adept-versions-header\\\"],[9],[0,\\\"Component Versions\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-adept-versions\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"scroll\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"versionData\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"about-adept-version\\\"],[9],[7,\\\"tr\\\"],[9],[7,\\\"th\\\"],[9],[1,[22,1,[\\\"serviceName\\\"]],false],[0,\\\":\\\"],[10],[0,\\\" \\\"],[7,\\\"th\\\"],[9],[1,[22,1,[\\\"version\\\"]],false],[10],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/about-adept/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/action-modal/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    didRender() {\n      this._super(...arguments);\n\n      this.$('.ember-modal-dialog').draggable();\n    },\n\n    actions: {\n      onPrimaryActionButtonClick() {\n        this.get('tooltip.primaryActionTask').perform();\n      },\n\n      onSecondaryActionButtonClick() {\n        this.get('tooltip.secondaryActionTask').perform();\n      },\n\n      onThirdActionButtonClick() {\n        this.get('tooltip.thirdActionTask').perform();\n      },\n\n      onCloseTooltipModal() {\n        this.get('tooltip.closeActionTask').perform();\n        const thirdAction = this.get('tooltip.thirdAction');\n\n        if (thirdAction) {\n          thirdAction();\n        }\n\n        this.get('tooltip').reset();\n      },\n\n      onClickOverlayTooltipModal() {\n        const hasOverlay = this.get('tooltip.hasOverlay');\n\n        if (hasOverlay) {\n          return false;\n        }\n\n        this.get('tooltip').reset();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/action-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"R5n9gNRT\",\n    \"block\": \"{\\\"symbols\\\":[\\\"error\\\",\\\"item\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"title\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"onClickOverlay\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseTooltipModal\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickOverlayTooltipModal\\\"],null],\\\"tooltip-modal-styles-overlay\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"tooltip-modal \\\",[23,[\\\"tooltip\\\",\\\"class\\\"]]]]],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-header\\\"],[9],[1,[23,[\\\"tooltip\\\",\\\"title\\\"]],false],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseTooltipModal\\\"],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-body\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-text\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"warning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"svg-jar\\\",[\\\"ic-new-warning\\\"],[[\\\"class\\\"],[\\\"warning-icon\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"tooltip-tip\\\"],[9],[1,[23,[\\\"tooltip\\\",\\\"tip\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"subTips\\\",\\\"items\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-sub-text\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-sub-tip-header\\\"],[9],[1,[23,[\\\"tooltip\\\",\\\"subTips\\\",\\\"header\\\"]],false],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"tooltip\\\",\\\"subTips\\\",\\\"items\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-sub-tip\\\"],[9],[1,[22,2,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"error-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"errors\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"errorMainMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-error-mainMessage\\\"],[9],[1,[23,[\\\"tooltip\\\",\\\"errorMainMessage\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"error-list\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"tooltip\\\",\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"error-item\\\"],[9],[1,[22,1,[\\\"validation\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-button\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"thirdActionText\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary data-test-third\\\"],[12,\\\"disabled\\\",[23,[\\\"tooltip\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n\\\\n            \\\"],[1,[23,[\\\"tooltip\\\",\\\"thirdActionText\\\"]],false],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onThirdActionButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"secondaryActionText\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary data-test-secondary\\\"],[12,\\\"disabled\\\",[23,[\\\"tooltip\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n\\\\n            \\\"],[1,[23,[\\\"tooltip\\\",\\\"secondaryActionText\\\"]],false],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSecondaryActionButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"primaryActionText\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-outline-primary data-test-primary \\\",[27,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"isRunning\\\"]],\\\"tooltip-running\\\",\\\"\\\"],null]]]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"tooltip\\\",\\\"isRunning\\\"]],[23,[\\\"tooltip\\\",\\\"isDisabled\\\"]]],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tooltip\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[23,[\\\"tooltip\\\",\\\"primaryActionText\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onPrimaryActionButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/action-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/adhoc-reports-widget/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    report: Ember.inject.service(),\n    isAdhocViewEnabled: false,\n    hasFetchedAdhocUrl: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n    },\n\n    willInsertElement() {\n      this._super(...arguments);\n\n      this.getAdhocViewUrl();\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    actions: {\n      onIFrameLoad() {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        const notifications = this.get('notifications');\n        const that = document.getElementById('reportViewFrame');\n\n        try {\n          const isLoaded = that.contentWindow.window.length; // 0 or 1\n\n          if (isLoaded === 0) {\n            notifications.warning('Error related to the url link of the adhoc report report');\n          }\n        } catch (err) {\n          notifications.warning('Error into the try/catch iframe onload section');\n        }\n      }\n\n    },\n\n    async getAdhocViewUrl() {\n      this.workspace.set('isGlobalSpinnerVisible', true);\n\n      try {\n        const result = await this.report.getAdhocViewUrl();\n\n        if (!Ember.isEmpty(result)) {\n          this.set('iframeSrc', result);\n          this.set('isAdhocViewEnabled', true);\n        }\n      } catch (error) {\n        this.notifications.warning('Failed to load Adhoc View');\n      } finally {\n        this.workspace.set('isGlobalSpinnerVisible', false);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/adhoc-reports-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"OrJMpnCt\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isAdhocViewEnabled\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"adhoc-report-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"widget\\\"],[11,\\\"style\\\",\\\"height:100%\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"iframe\\\"],[11,\\\"id\\\",\\\"reportViewFrame\\\"],[11,\\\"marginwidth\\\",\\\"0\\\"],[11,\\\"marginheight\\\",\\\"0\\\"],[11,\\\"hspace\\\",\\\"0\\\"],[11,\\\"vspace\\\",\\\"0\\\"],[11,\\\"align\\\",\\\"middle\\\"],[11,\\\"frameborder\\\",\\\"0\\\"],[11,\\\"height\\\",\\\"100%\\\"],[11,\\\"scrolling\\\",\\\"no\\\"],[11,\\\"width\\\",\\\"100%\\\"],[12,\\\"src\\\",[28,[[21,\\\"iframeSrc\\\"]]]],[12,\\\"onload\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onIFrameLoad\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"loader\\\"],[9],[0,\\\"Loading...\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/adhoc-reports-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/change-password-form/component\", [\"exports\", \"md5\"], function (_exports, _md) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PASSWORD__SHOULD_CONTAIN_ATLEAST_ONE_UPPERCASE = 'Password contains at least 1 uppercase';\n  const PASSWORD__SHOULD_CONTAIN_ATLEAST_ONE_LOWERCASE = 'Password contains at least 1 lowercase';\n  const PASSWORD_SHOULD_CONTAIN_ATLEAST_ONE_NUMBER = 'Password contains at least 1 digit';\n  const PASSWORD_DO_NOT_HAVE_MINIMUM_LENGTH = 'Password contains minimum 6 characters';\n  const PASSWORDS_DO_NOT_MATCH = 'Two password entries match';\n  const PASSWORD_SHOULD_CONTAIN_ATLEAST_ONE_SPECIAL_CHAR = 'Password contains at least 1 special character [~!@#$%^&*()_-+={};:\\'\"|<>,.?/]';\n  const PASSWORD_DIFFERENT_FROM_CURRENT = 'Password is different from current password';\n  const newPasswordCriteriaCheckList = [{\n    isValid: (newPassword, confirmPassword) => {\n      return Ember.isPresent(newPassword) && Ember.isPresent(confirmPassword) && newPassword === confirmPassword;\n    },\n    text: PASSWORDS_DO_NOT_MATCH\n  }, {\n    isValid: newPassword => /[A-Z]+/.test(newPassword) === true,\n    text: PASSWORD__SHOULD_CONTAIN_ATLEAST_ONE_UPPERCASE\n  }, {\n    isValid: newPassword => /[a-z]+/.test(newPassword) === true,\n    text: PASSWORD__SHOULD_CONTAIN_ATLEAST_ONE_LOWERCASE\n  }, {\n    isValid: newPassword => /\\d/.test(newPassword) === true,\n    text: PASSWORD_SHOULD_CONTAIN_ATLEAST_ONE_NUMBER\n  }, {\n    isValid: newPassword => /[~!@#$%^&*()_\\-+={};:'\"|\\\\<>,.?/]/.test(newPassword) === true,\n    text: PASSWORD_SHOULD_CONTAIN_ATLEAST_ONE_SPECIAL_CHAR\n  }, {\n    isValid: newPassword => newPassword && newPassword.length >= 6,\n    text: PASSWORD_DO_NOT_HAVE_MINIMUM_LENGTH\n  }, {\n    isValid: newPassword => (0, _md.default)(newPassword) !== localStorage.getItem('currentPassword'),\n    text: PASSWORD_DIFFERENT_FROM_CURRENT\n  }];\n\n  var _default = Ember.Component.extend({\n    session: Ember.inject.service(),\n    errors: null,\n    password: null,\n    newPassword: null,\n    confirmPassword: null,\n    newPasswordCriteriaList: newPasswordCriteriaCheckList.map(item => ({\n      text: item.text,\n      isValid: false\n    })),\n    isValid: Ember.computed('newPasswordCriteriaList', 'password', function () {\n      const newPasswordCriteriaList = this.get('newPasswordCriteriaList');\n      const password = this.get('password');\n      const storedPassword = localStorage.currentPassword;\n      const isCurrentPasswordValid = Ember.isPresent(password) && (0, _md.default)(password) === storedPassword;\n      return newPasswordCriteriaList.every(item => item.isValid) && isCurrentPasswordValid;\n    }),\n    isCurrentPasswordValid: Ember.computed('password', function () {\n      const password = this.get('password');\n      return Ember.isPresent(password) && (0, _md.default)(password) === localStorage.currentPassword;\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      redirectToLogin() {\n        window.location.assign('/require-new-password');\n      },\n\n      checkCriteria(e) {\n        const newPassword = this.get('newPassword');\n        const confirmPassword = this.get('confirmPassword');\n        const validationList = newPasswordCriteriaCheckList.map(item => ({\n          text: item.text,\n          isValid: item.isValid(newPassword, confirmPassword)\n        }));\n        this.set('newPasswordCriteriaList', validationList);\n        e.preventDefault();\n      },\n\n      onSubmit(password, newPassword, confirmPassword, e) {\n        e.preventDefault();\n        this.get('onSubmit')(password, newPassword, confirmPassword);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/change-password-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"W8mTvZuz\",\n    \"block\": \"{\\\"symbols\\\":[\\\"item\\\"],\\\"statements\\\":[[7,\\\"form\\\"],[12,\\\"onsubmit\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubmit\\\",[23,[\\\"password\\\"]],[23,[\\\"newPassword\\\"]],[23,[\\\"confirmPassword\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Enter Current Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"password\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"password\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Enter New Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"newPassword\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"newPassword\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeyup\\\",[27,\\\"action\\\",[[22,0,[]],\\\"checkCriteria\\\"],null]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Confirm New Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"confirmPassword\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"confirmPassword\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeyup\\\",[27,\\\"action\\\",[[22,0,[]],\\\"checkCriteria\\\"],null]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn mt-2 enabled-button\\\"],[9],[0,\\\"\\\\n    Cancel\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"redirectToLogin\\\"]],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn btn mt-2 \\\",[27,\\\"if\\\",[[23,[\\\"isValid\\\"]],\\\"enabled-button\\\"],null]]]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isValid\\\"]]],null]],[11,\\\"data-test-login-button\\\",\\\"\\\"],[11,\\\"type\\\",\\\"submit\\\"],[9],[0,\\\"\\\\n    OK\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"password-criteria\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"li\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCurrentPasswordValid\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-fa-regular fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[11,\\\"style\\\",\\\"color:green\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-fal fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[11,\\\"style\\\",\\\"color:red\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[9],[0,\\\"Current password is entered correctly\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"newPasswordCriteriaList\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"li\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,1,[\\\"isValid\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-fa-regular fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[11,\\\"style\\\",\\\"color:green\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-fal fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[11,\\\"style\\\",\\\"color:red\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"p\\\"],[9],[1,[22,1,[\\\"text\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/change-password-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/close-schedule/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['dashboard-picker'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    schedules: null,\n\n    init() {\n      this._super(...arguments);\n\n      const schedules = [];\n      const routes = this.get('activeContext.workspaceData.route') || [];\n      routes.forEach(route => {\n        if (!schedules.includes(route.schedule.content)) {\n          if (!route.schedule.content.locked) {\n            schedules.push(route.schedule.content);\n          }\n        }\n      });\n      this.set('schedules', schedules);\n    },\n\n    closeSchedule() {\n      const schedules = this.get('schedules') || [];\n      schedules.forEach(schedule => {\n        schedule.set('locked', true);\n        schedule.save();\n      });\n    },\n\n    actions: {\n      onYesButtonClick() {\n        this.closeSchedule();\n        this.get('workspace').popState('closeSchedule');\n      },\n\n      onNoButtonClick() {\n        this.get('workspace').popState('closeSchedule');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/close-schedule/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"axtWRJtP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"schedule\\\"],\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[\\\"Close Schedule\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNoButtonClick\\\"],null],[23,[\\\"loadDashboardsTask\\\",\\\"isRunning\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section-title\\\"],[9],[0,\\\"\\\\n      Close Schedule\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"schedules\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-item\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[22,1,[\\\"scheduleName\\\"]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-item\\\"],[9],[0,\\\"\\\\n      Closing a schedule makes its data non-editable. Proceed?\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"button\\\"],[9],[0,\\\" Yes \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onYesButtonClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[9],[0,\\\" No \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onNoButtonClick\\\"]],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/close-schedule/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dashboard-edit-as/component\", [\"exports\", \"adept-iq/config/mapped-permIds\", \"ember-concurrency\"], function (_exports, _mappedPermIds, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    router: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    classNames: ['dashboard-save-as'],\n    name: null,\n    displayName: Ember.computed.readOnly('workspace.topOptions.displayName'),\n    workspaceName: Ember.computed.readOnly('workspace.topOptions.workspaceName'),\n    isLoading: Ember.computed.oneWay('findUnusedNameTask.isRunning'),\n    isRunning: Ember.computed.or('saveTask.isRunning', 'cancelTask.isRunning'),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const baseName = this.get('workspaceName');\n      this.set('name', baseName);\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('afterRender', this, 'onKeyDown', event);\n      };\n\n      this.$().on('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      this.$().off('keydown', this._onKeyDown);\n      this._onKeyDown = null;\n\n      this._super(...arguments);\n    },\n\n    cancelTask: (0, _emberConcurrency.task)(function* () {\n      yield this.get('workspace').popState('editWorkspaceAs');\n    }).drop(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const permissionLayer = this.get('permissionLayer');\n      const userId = this.get('session').data.authenticated.userId.replace(/-/g, '_');\n      const baseName = this.get('workspaceName');\n      const notifications = this.get('notifications');\n      const dashboards = this.get('store').peekAll('dashboard');\n      const dashboardModel = dashboards.findBy('name', baseName);\n      const currentDashboard = this.get('workspace.dashboardModel');\n      const savePrivateWorkspacePerm = permissionLayer.permInUserHash(_mappedPermIds.default.savePrivateWorkspace);\n      const saveWorkspacePerm = permissionLayer.permInUserHash(_mappedPermIds.default.saveWorkspace);\n      const category = `workspaces-${userId}`;\n\n      if (dashboardModel.get('isPublicWorkspace') && !saveWorkspacePerm && dashboardModel.get('userId') !== userId || dashboardModel.get('isPrivateWorkspace') && (dashboardModel.get('category') !== category || !savePrivateWorkspacePerm)) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Save Workspace',\n          tip: 'Unable to save. You must use the \"Save Workspace As\" option to save changes made to a public workspace.',\n          warning: true,\n          primaryActionText: 'Ok',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n        return;\n      }\n\n      const isUpdatingCurrent = dashboardModel === currentDashboard;\n      const options = dashboardModel.getOptionsForClone();\n      const clone = this.get('store').createRecord('dashboard', options); // update name using value in input box\n\n      clone.set('name', this.get('name'));\n      clone.set('userId', userId);\n\n      if (!this.get('isPublic')) {\n        clone.set('category', `workspaces-${userId}`);\n      }\n\n      try {\n        yield clone.save();\n        yield dashboardModel.destroyRecord();\n        yield dashboardModel.unloadRecord();\n\n        if (isUpdatingCurrent) {\n          yield this.get('router').transitionTo('dashboard', clone);\n        }\n\n        notifications.success(`Successfully Saved Workspace ${this.get('name')}`);\n        yield this.get('workspace').popState('editWorkspaceAs');\n      } catch (e) {\n        notifications.warning(`Failed to Save Workspace ${this.get('name')}`);\n        clone.destroyRecord();\n        clone.unloadRecord();\n      } finally {\n        this.get('tooltip').reset();\n      }\n    }).drop(),\n\n    onSaveWorkspace() {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        tip: 'Are you sure you want to commit these changes?',\n        title: 'Workspace',\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveTask').perform();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n          return;\n        }\n      });\n    },\n\n    onKeyDown(event) {\n      switch (event.key) {\n        case 'Enter':\n          this.onSaveWorkspace();\n          break;\n\n        default:\n          return null;\n      }\n    },\n\n    actions: {\n      onSaveClick() {\n        this.onSaveWorkspace();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dashboard-edit-as/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"aQSRm7bv\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[[23,[\\\"displayName\\\"]],[27,\\\"perform\\\",[[23,[\\\"cancelTask\\\"]]],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body-label\\\"],[9],[0,\\\"Workspace Name:\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"workspace-name-input\\\"],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"name\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"name\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"saveTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"mt-3 mb-0\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Saving...\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"saveTask\\\",\\\"last\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"text-danger mt-3 mb-0\\\"],[9],[0,\\\"Error: \\\"],[1,[23,[\\\"saveTask\\\",\\\"last\\\",\\\"error\\\"]],false],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-primary\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[9],[0,\\\"\\\\n\\\\n      Save\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-secondary\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"cancelTask\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[9],[0,\\\"\\\\n\\\\n      Cancel\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/dashboard-edit-as/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dashboard-picker/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/models/dashboard\", \"adept-iq/config/mapped-permIds\"], function (_exports, _emberConcurrency, _dashboard, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    router: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    classNames: ['dashboard-picker'],\n    dashboards: null,\n    selectedSection: null,\n    inlineRowModel: null,\n    workspacePermissions: Ember.computed.readOnly('workspace.configPermissions.workspaces'),\n    isLoading: Ember.computed.or('loadDashboardsTask.isRunning', 'transitionTask.isRunning'),\n    roles: _dashboard.DASHBOARD_ROLES,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.createContextMenu();\n      this.get('loadDashboardsTask').perform().then(() => {\n        Ember.run.schedule('afterRender', () => {\n          this.$('.open-last-saved').focus();\n          this.setupDefaultSection();\n        });\n      });\n    },\n\n    createContextMenu() {\n      this.set('singleActions', this.createSingleActions());\n    },\n\n    createSingleActions() {\n      return [{\n        id: 'editWorkspaceAs',\n        permId: _mappedPermIds.default.saveWorkspaceAs,\n        name: 'Edit Name',\n        action: () => {\n          this.get('workspace').pushState('editWorkspaceAs', {\n            displayName: 'Edit Workspace As',\n            workspaceName: this.get('inlineRowModel.name')\n          });\n        }\n      }];\n    },\n\n    setupDefaultSection() {\n      const dashboardModel = this.get('workspace.dashboardModel');\n      const sections = this.get('sections');\n      if (Ember.isEmpty(sections) || Ember.isEmpty(dashboardModel)) return;\n      sections.forEach(section => {\n        if (Ember.isEmpty(section.dashboards)) return;\n        const found = section.dashboards.find(dashboard => dashboard.name === dashboardModel.name);\n\n        if (Ember.isPresent(found)) {\n          this.set('selectedSection', section.title);\n        }\n      });\n    },\n\n    loadDashboardsTask: (0, _emberConcurrency.task)(function* () {\n      const userId = this.get('session').data.authenticated.userId.replace(/-/g, '_');\n      const dashboards = yield this.get('store').query('dashboard', {\n        privateWorkspace: `workspaces-${userId}`\n      });\n      this.set('dashboards', dashboards);\n    }).drop(),\n    transitionTask: (0, _emberConcurrency.task)(function* (dashboard) {\n      const workspace = this.get('workspace');\n      const maximizer = this.get('maximizer');\n\n      if (maximizer.get('maximizedWidget')) {\n        maximizer.minimize();\n      }\n\n      yield workspace.popState('openWorkspace');\n\n      if (dashboard === workspace.get('dashboardModel')) {\n        // setting again will trigger reload\n        workspace.set('dashboardModel', dashboard);\n      } else {\n        yield this.get('router').transitionTo('dashboard', dashboard);\n      }\n    }).drop(),\n    dashboardDefaultLength: Ember.computed('selectedDashboards', 'selectedSection', function () {\n      const dashboards = this.get('dashboards');\n      const selectedSection = this.get('selectedSection');\n      const count = [];\n\n      if (dashboards) {\n        dashboards.filter(data => {\n          if (data && data.role === selectedSection && data.isDefaultWorkspace) {\n            count.push(data);\n          }\n        });\n      }\n\n      return count.length;\n    }),\n    dashboardPublicLength: Ember.computed('selectedDashboards', 'selectedSection', function () {\n      const dashboards = this.get('dashboards');\n      const selectedSection = this.get('selectedSection');\n      const count = [];\n\n      if (dashboards) {\n        dashboards.filter(data => {\n          if (data && data.role === selectedSection && !data.isDefaultWorkspace && data.isPublicWorkspace) {\n            count.push(data);\n          }\n        });\n      }\n\n      return count.length;\n    }),\n    dashboardPrivateLength: Ember.computed('selectedDashboards', 'selectedSection', function () {\n      const dashboards = this.get('dashboards');\n      const selectedSection = this.get('selectedSection');\n      const count = [];\n\n      if (dashboards) {\n        dashboards.filter(data => {\n          if (data && data.role === selectedSection && data.isPrivateWorkspace) {\n            count.push(data);\n          }\n        });\n      }\n\n      return count.length;\n    }),\n    sections: Ember.computed('dashboards.[]', function () {\n      let workspacePermissions = this.get('workspacePermissions');\n      const dashboards = this.get('dashboards');\n      if (Ember.isEmpty(dashboards)) return [];\n\n      if (Ember.isPresent(workspacePermissions)) {\n        workspacePermissions = workspacePermissions.sortBy('priority');\n      }\n\n      return workspacePermissions.map(workspacePermission => {\n        const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default[workspacePermission.permission], null);\n        const isRoadSupEnable = this.get('user').isRoadSupEnable();\n        const disabledInRoadSupMode = isRoadSupEnable && workspacePermission.permission !== 'accessRoadSupervisorWorkspace';\n\n        if (permGranted && !disabledInRoadSupMode) {\n          return {\n            title: workspacePermission.displayName,\n            dashboards: dashboards.filterBy('role', workspacePermission.role).sortBy('isDefaultWorkspace:asc')\n          };\n        }\n      }).filter(Boolean);\n    }),\n    selectedDashboards: Ember.computed('sections', 'selectedSection', function () {\n      const sections = this.get('sections');\n      const selectedSection = this.get('selectedSection');\n      if (Ember.isEmpty(sections) || Ember.isEmpty(selectedSection)) return [];\n      return sections.filter(section => {\n        return section.title === selectedSection;\n      });\n    }),\n    actions: {\n      onXButtonClick() {\n        this.get('workspace').popState('openWorkspace');\n      },\n\n      selectSectionTab(tab) {\n        this.set('selectedSection', tab);\n      },\n\n      openContextMenu(name, row) {\n        this.set('inlineRowMenuPosition', () => {\n          return {\n            style: {\n              top: row.clientY,\n              left: row.clientX\n            }\n          };\n        });\n        const dashboards = this.get('dashboards');\n        const dashboardModel = dashboards.findBy('name', name);\n        this.set('inlineRowModel', dashboardModel);\n        this.inlineRowMenu.actions.open();\n        return false;\n      },\n\n      setInlineRowMenu(dropdown) {\n        this.set('inlineRowMenu', dropdown);\n      },\n\n      onSingleRowAction(action) {\n        this.inlineRowMenu.actions.close();\n\n        if (action.action) {\n          action.action();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dashboard-picker/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"AQ+S9MsC\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"index\\\",\\\"section\\\",\\\"dashboard\\\",\\\"section\\\",\\\"dashboard\\\",\\\"section\\\",\\\"dashboard\\\",\\\"section\\\"],\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[\\\"Open Workspace\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"dashboard-picker-tabs\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"sections\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedSection\\\"]],[22,10,[\\\"title\\\"]]],null],\\\" active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[1,[22,10,[\\\"title\\\"]],false],[0,\\\" \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectSectionTab\\\",[22,10,[\\\"title\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[10]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"dashboard-picker-label\\\"],[9],[0,\\\"Default (\\\"],[1,[21,\\\"dashboardDefaultLength\\\"],false],[0,\\\")\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"selectedDashboards\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section-scroll\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,8,[\\\"dashboards\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,9,[\\\"isDefaultWorkspace\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[12,\\\"oncontextmenu\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openContextMenu\\\",[22,9,[\\\"name\\\"]]],null]],[12,\\\"class\\\",[28,[\\\"dashboard-picker-item \\\",[27,\\\"if\\\",[[22,9,[\\\"isDirty\\\"]],\\\"is-dirty\\\",\\\"is-clean\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,9,[]],[23,[\\\"workspace\\\",\\\"dashboardModel\\\"]]],null],\\\"is-open\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[1,[22,9,[\\\"name\\\"]],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,9,[\\\"isDefaultWorkspace\\\"]],\\\"[default]\\\"],null],false],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn-primary data-test-open-btn \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,9,[]],[23,[\\\"workspace\\\",\\\"dashboardModel\\\"]]],null],\\\"is-open\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"transitionTask\\\"]],[22,9,[]]],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,9,[\\\"isDefaultWorkspace\\\"]]],null,{\\\"statements\\\":[[0,\\\"          Default\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          Open\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[9]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"  \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"dashboard-picker-label\\\"],[9],[0,\\\"Private (\\\"],[1,[21,\\\"dashboardPrivateLength\\\"],false],[0,\\\")\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"selectedDashboards\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section-scroll\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,6,[\\\"dashboards\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,7,[\\\"isPrivateWorkspace\\\"]],true],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[12,\\\"oncontextmenu\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openContextMenu\\\",[22,7,[\\\"name\\\"]]],null]],[12,\\\"class\\\",[28,[\\\"dashboard-picker-item \\\",[27,\\\"if\\\",[[22,7,[\\\"isDirty\\\"]],\\\"is-dirty\\\",\\\"is-clean\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,7,[]],[23,[\\\"workspace\\\",\\\"dashboardModel\\\"]]],null],\\\"is-open\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isDefaultWorkspace\\\"]],\\\"[default]\\\"],null],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isPlaybackWorkspace\\\"]],\\\"[playback]\\\"],null],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isReconcileWorkspace\\\"]],\\\"[reconcile]\\\"],null],false],[0,\\\"  \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isReportsWorkspace\\\"]],\\\"[reports]\\\"],null],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isBookingWorkspace\\\"]],\\\"[booking]\\\"],null],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isScheduleWorkspace\\\"]],\\\"[schedule]\\\"],null],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,7,[\\\"isAdhocReportsWorkspace\\\"]],\\\"[adhocReports]\\\"],null],false],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn-primary data-test-open-btn \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,7,[]],[23,[\\\"workspace\\\",\\\"dashboardModel\\\"]]],null],\\\"is-open\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"transitionTask\\\"]],[22,7,[]]],null]],[9],[0,\\\"\\\\n          Open\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[7]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"dashboard-picker-label\\\"],[9],[0,\\\"Public (\\\"],[1,[21,\\\"dashboardPublicLength\\\"],false],[0,\\\")\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"selectedDashboards\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-picker-section-scroll\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,4,[\\\"dashboards\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,5,[\\\"isPublicWorkspace\\\"]],true],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[12,\\\"oncontextmenu\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openContextMenu\\\",[22,5,[\\\"name\\\"]]],null]],[12,\\\"class\\\",[28,[\\\"dashboard-picker-item \\\",[27,\\\"if\\\",[[22,5,[\\\"isDirty\\\"]],\\\"is-dirty\\\",\\\"is-clean\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,5,[]],[23,[\\\"workspace\\\",\\\"dashboardModel\\\"]]],null],\\\"is-open\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\" \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isDefaultWorkspace\\\"]],\\\"[default]\\\"],null],false],[0,\\\" \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isPlaybackWorkspace\\\"]],\\\"[playback]\\\"],null],false],[0,\\\" \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isReconcileWorkspace\\\"]],\\\"[reconcile]\\\"],null],false],[0,\\\"  \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isReportsWorkspace\\\"]],\\\"[reports]\\\"],null],false],[0,\\\" \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isAdhocReportsWorkspace\\\"]],\\\"[adhocReports]\\\"],null],false],[0,\\\" \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isBookingWorkspace\\\"]],\\\"[booking]\\\"],null],false],[0,\\\" \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isRiderManagementWorkspace\\\"]],\\\"[riderManagement]\\\"],null],false],[0,\\\" \\\\n        \\\"],[1,[27,\\\"if\\\",[[22,5,[\\\"isScheduleWorkspace\\\"]],\\\"[schedule]\\\"],null],false],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn-primary data-test-open-btn \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,5,[]],[23,[\\\"workspace\\\",\\\"dashboardModel\\\"]]],null],\\\"is-open\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"transitionTask\\\"]],[22,5,[]]],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,5,[\\\"isDefaultWorkspace\\\"]]],null,{\\\"statements\\\":[[0,\\\"          Default\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          Open\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"inlineRowMenuPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setInlineRowMenu\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/dashboard-picker/template.hbs' @ L105:C5) \\\"],null]],[[\\\"class\\\"],[\\\"column-widget-button data-test-plus-button\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/dashboard-picker/template.hbs' @ L107:C5) \\\"],null]],[[\\\"class\\\"],[\\\"widget-dropdown-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"singleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,3,[]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"inlineRowModel\\\",\\\"isPrivateWorkspace\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSingleRowAction\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/dashboard-picker/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dashboard-save-as/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/mapped-permIds\"], function (_exports, _emberConcurrency, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_NAME = 'Untitled';\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    router: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    classNames: ['dashboard-save-as'],\n    name: null,\n    isPublic: false,\n    displayName: Ember.computed.readOnly('workspace.topOptions.displayName'),\n    isLoading: Ember.computed.oneWay('findUnusedNameTask.isRunning'),\n    isRunning: Ember.computed.or('saveTask.isRunning', 'cancelTask.isRunning'),\n    saveWorkspaceAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.saveWorkspace, null);\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('findUnusedNameTask').perform().then(name => {\n        this.set('name', name);\n        Ember.run.schedule('afterRender', () => {\n          this.$('.workspace-name-input').focus();\n        });\n      });\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('afterRender', this, 'onKeyDown', event);\n      };\n\n      this.$().on('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      this.$().off('keydown', this._onKeyDown);\n      this._onKeyDown = null;\n\n      this._super(...arguments);\n    },\n\n    findUnusedNameTask: (0, _emberConcurrency.task)(function* () {\n      let baseName = this.get('workspace.dashboard.name');\n      let version = 0;\n\n      if (Ember.isPresent(baseName)) {\n        // extract base name and version from names like \"My Dashboard (3)\"\n        const regEx = /^(.*)\\s+\\((\\d+)\\)\\s*$/;\n        const matches = regEx.exec(baseName);\n\n        if (matches) {\n          baseName = matches[1];\n          version = parseInt(matches[2], 10) + 1;\n        }\n      } else {\n        baseName = DEFAULT_NAME;\n      }\n\n      const dashboards = yield this.get('store').findAll('dashboard');\n      let name = version === 0 ? baseName : `${baseName} (${version})`;\n\n      while (dashboards.findBy('name', name)) {\n        version += 1;\n        name = `${baseName} (${version})`;\n      }\n\n      return name;\n    }).drop(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const dashboardAdapter = store.adapterFor('dashboard');\n      const userId = this.get('session').data.authenticated.userId.replace(/-/g, '_'); // clone persisted changes\n\n      const dashboardModel = this.get('workspace.dashboardModel');\n      const options = dashboardModel.getOptionsForClone();\n      const clone = this.get('store').createRecord('dashboard', options);\n      const notifications = this.get('notifications'); // clone unsaved changes\n\n      const dashboardInstance = this.get('workspace.dashboardInstance');\n      const workspaceId = this.get('workspace.dashboard.id');\n      const includeWidgetStates = true;\n      let dashboard;\n\n      if (!this.get('isPublic')) {\n        const privateWorkspaceName = `workspaces-${userId}`;\n        const privateCategory = this.get('store').peekAll('cs-config-category').find(category => category.get('path') === privateWorkspaceName);\n        clone.set('category', privateWorkspaceName);\n        dashboard = yield dashboardAdapter.fetchConfigItemsByCategory(store, privateWorkspaceName);\n\n        if (!Ember.isPresent(dashboard.data) && !Ember.isPresent(privateCategory)) {\n          yield dashboardAdapter.postUserCategory();\n        }\n      }\n\n      clone.set('userId', userId);\n      clone.commitInstance(dashboardInstance, includeWidgetStates); // update name using value in input box\n\n      clone.set('name', this.get('name'));\n\n      try {\n        yield clone.save();\n        yield this.get('workspace').popState('saveWorkspaceAs');\n        yield this.get('router').transitionTo('dashboard', clone);\n        notifications.success(`Successfully Saved Workspace ${this.get('name')}`);\n        this.get('tooltip').reset();\n        Ember.run.next(async () => {\n          this.get('store').peekRecord('dashboard', workspaceId).rollbackAttributes();\n        });\n      } catch (e) {\n        const defaultWarningMessage = `Failed to Save Workspace ${this.get('name')}`;\n        const errorCode = Ember.isPresent(e.errors.get('firstObject').status) ? e.errors.get('firstObject').status : null;\n\n        if (errorCode === 409) {\n          notifications.warning(`${defaultWarningMessage} - Workspace name already exists`);\n        } else {\n          notifications.warning(defaultWarningMessage);\n        }\n\n        clone.rollbackAttributes();\n      }\n    }).drop(),\n    cancelTask: (0, _emberConcurrency.task)(function* () {\n      // modal 'X' button can be clicked at any time, even during load\n      this.get('findUnusedNameTask').cancelAll();\n      this.get('saveTask').cancelAll();\n      yield this.get('workspace').popState('saveWorkspaceAs');\n    }).drop(),\n\n    onKeyDown(event) {\n      switch (event.key) {\n        case 'Enter':\n          {\n            event.preventDefault();\n            return this.get('saveTask').perform();\n          }\n\n        default:\n          return null;\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dashboard-save-as/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"uSa/aFu8\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[[23,[\\\"displayName\\\"]],[27,\\\"perform\\\",[[23,[\\\"cancelTask\\\"]]],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body-label\\\"],[9],[0,\\\"Workspace Name:\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body-input\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"workspace-name-input\\\"],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"name\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"name\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"saveWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"workspace-name-checkbox\\\"],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[12,\\\"value\\\",[21,\\\"isPublic\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"isPublic\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" \\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"workspace-name-checkbox-label\\\"],[9],[0,\\\"Public\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"saveTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"mt-3 mb-0\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Saving...\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"saveTask\\\",\\\"last\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"text-danger mt-3 mb-0\\\"],[9],[0,\\\"Error: \\\"],[1,[23,[\\\"saveTask\\\",\\\"last\\\",\\\"error\\\"]],false],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-primary\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"saveTask\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[9],[0,\\\"\\\\n\\\\n      Save\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-secondary\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"cancelTask\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[9],[0,\\\"\\\\n\\\\n      Cancel\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/dashboard-save-as/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dropdown-provider/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ACTIVE_STATUS = 'active';\n  const UNASSIGNED_PROVIDER = 'UNASSIGNED';\n\n  var _default = Ember.Component.extend({\n    classNames: ['dropdown-provider'],\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    user: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    isEnable: Ember.computed('isEnabled', 'user', 'workspace.dashboardModel', function () {\n      const isRoadSupEnable = this.get('user').isRoadSupEnable();\n      const isPermissionWorkspace = this.get('workspace.isPermissionsDashboard');\n      return !isRoadSupEnable && !isPermissionWorkspace;\n    }),\n    isEnabled: Ember.computed.oneWay('isEnable'),\n    isOpen: false,\n    isOpened: Ember.computed.oneWay('isOpen'),\n    providersList: Ember.computed.alias('workspaceContext.providersList'),\n    disabledProvider: null,\n    allProviders: Ember.computed.alias('workspaceContext._allProviders'),\n    providerNames: Ember.computed.alias('workspaceContext.providerNames'),\n    // disable all provider checkboxes\n    hasOneProvider: Ember.computed.lte('providersList.length', 1),\n\n    resetDisableProvider() {\n      const disabledProvider = this.get('disabledProvider');\n\n      if (disabledProvider) {\n        disabledProvider.set('isDisabled', false);\n        this.set('disabledProvider', null);\n      }\n    },\n\n    updateTitle: Ember.observer('workspaceContext.providersList', function () {\n      const workspaceContext = this.get('workspaceContext');\n      const providersList = workspaceContext.get('providersList');\n      const results = providersList.filterBy('isChecked', true);\n      const userCanSeeAll = workspaceContext.get('providerNames').includes('ALL') || false;\n\n      if (results.length === 1) {\n        workspaceContext.set('providerTitle', results[0].providerName);\n        Ember.set(results[0], 'isDisabled', true);\n        this.set('disabledProvider', results[0]);\n\n        if (results.length === workspaceContext.providersList.length && userCanSeeAll) {\n          workspaceContext.set('_allProviders', true);\n        } else {\n          workspaceContext.set('_allProviders', false);\n        }\n      } else if (results.length < workspaceContext.providersList.length && results.length > 1) {\n        workspaceContext.set('providerTitle', 'Multiple');\n        workspaceContext.set('_allProviders', false);\n        this.resetDisableProvider();\n      } else if (results.length === workspaceContext.providersList.length) {\n        workspaceContext.set('providerTitle', 'All Providers');\n        workspaceContext.set('_allProviders', true);\n        this.resetDisableProvider();\n      }\n    }),\n\n    //NYAAR-20043. This function to trigger a refresh of the All Providers drop down, when a provider details are changed or new provider added or if a provider is deleted.\n    setProviderChanges() {\n      const workspaceContext = this.get('workspaceContext');\n      const providersList = workspaceContext.get('providersList');\n      const filteredProviders = [];\n      const allProviders = this.get('store').peekAll('provider');\n      providersList.forEach(provider => {\n        const currentProviderId = provider.get('id');\n\n        if (currentProviderId) {\n          const providerRecord = currentProviderId === UNASSIGNED_PROVIDER ? provider : this.get('store').peekRecord('provider', currentProviderId);\n\n          if (providerRecord && providerRecord.get('userCanAccessProvider') && (providerRecord.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS || !provider.get('status'))) {\n            filteredProviders.pushObject(provider);\n          }\n        }\n      });\n      allProviders.forEach(provider => {\n        const providerId = provider.get('id');\n        const providerData = filteredProviders.findBy('id', providerId);\n\n        if (!providerData && provider.get('userCanAccessProvider') && provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS) {\n          Ember.set(provider, 'isChecked', true);\n          filteredProviders.pushObject(provider);\n        }\n      });\n      workspaceContext.set('providersList', filteredProviders);\n    },\n\n    async setupProviderList() {\n      const workspaceContext = this.get('workspaceContext');\n      const providers = this.get('store').peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && (provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS || !provider.get('status'));\n      });\n      providers.forEach(provider => provider.set('isChecked', true)); //add unassigned Provider to the list in case user has access\n\n      const userProviders = this.get('session.data.authenticated.tokenInfo.providerNames') || [];\n      const canAccessUnassigned = userProviders.some(provider => {\n        return provider === 'ALL' || provider === UNASSIGNED_PROVIDER;\n      });\n\n      if (canAccessUnassigned) {\n        const unassignedProvider = Ember.Object.create({\n          id: UNASSIGNED_PROVIDER,\n          name: UNASSIGNED_PROVIDER,\n          isChecked: true,\n          isDisabled: false,\n          isNew: false,\n          status: 'Active',\n          isInActive: false,\n          providerTypeName: 'dedicated_carrier',\n          isBrokerProviderType: false,\n          providerName: UNASSIGNED_PROVIDER,\n          userCanAccessProvider: canAccessUnassigned\n        });\n        providers.push(unassignedProvider);\n      }\n\n      workspaceContext.set('providersList', providers);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const workspaceContext = this.get('workspaceContext');\n      workspaceContext.set('_allProviders', true);\n      this.get('store').findAll('provider').then(() => {\n        this.setupProviderList();\n        this.updateTitle();\n      }).then(() => {\n        const providersList = workspaceContext.get('providersList');\n        providersList.forEach(provider => {\n          Ember.set(provider, 'isChecked', true);\n        });\n      });\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    actions: {\n      onToggleSelect() {\n        this.toggleSelect();\n      },\n\n      onOpen() {\n        this.toggleSelect();\n        this.setProviderChanges();\n      },\n\n      onClose() {\n        this.toggleSelect();\n      },\n\n      async onClickCheckAll(event) {\n        const workspaceContext = this.get('workspaceContext');\n        const providersList = workspaceContext.get('providersList');\n        const topActiveContext = this.get('activeContext.topActiveContext');\n        const activeContextNodes = topActiveContext.get('nodes') || [];\n\n        if (event.target.checked) {\n          providersList.forEach(provider => {\n            Ember.set(provider, 'isChecked', event.target.checked);\n          });\n        } else {\n          providersList.forEach((provider, index) => {\n            if (index === 0) {\n              // keep first provider checked.\n              Ember.set(provider, 'isChecked', !event.target.checked);\n            } else {\n              Ember.set(provider, 'isChecked', event.target.checked);\n            }\n          });\n        }\n\n        this.updateTitle();\n        this.get('workspaceContext').setSelectedProviders();\n        this.get('widgetService').globalFilterChanged();\n        topActiveContext.clearCheckedItems();\n        activeContextNodes.reduce((obj, node) => {\n          this.get('workspaceContext').trigger('change', [node.modelName]);\n        });\n      },\n\n      async onClickCheckBox(provider, event) {\n        const selectedProvider = provider;\n        const topActiveContext = this.get('activeContext.topActiveContext');\n        const activeContextNodes = topActiveContext.get('nodes') || [];\n        Ember.set(selectedProvider, 'isChecked', event.target.checked);\n        this.updateTitle();\n        this.get('workspaceContext').setSelectedProviders();\n        this.get('widgetService').globalFilterChanged();\n        topActiveContext.clearCheckedItems();\n        activeContextNodes.reduce((obj, node) => {\n          this.get('workspaceContext').trigger('change', [node.modelName]);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/dropdown-provider/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"0C6c5gdO\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"provider\\\",\\\"index\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isEnabled\\\"]]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/dropdown-provider/template.hbs' @ L8:C7) \\\"],null]],[[\\\"class\\\"],[\\\"dropdown-provider select\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title\\\"],[12,\\\"title\\\",[28,[[23,[\\\"workspaceContext\\\",\\\"providerTitle\\\"]]]]],[9],[1,[23,[\\\"workspaceContext\\\",\\\"providerTitle\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/dropdown-provider/template.hbs' @ L15:C7) \\\"],null]],[[\\\"class\\\"],[\\\"dropdown-provider options\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"providersList\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"option\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[12,\\\"id\\\",[28,[\\\"checkbox_provider_header_\\\",[22,3,[]]]]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[22,2,[\\\"isDisabled\\\"]],[23,[\\\"hasOneProvider\\\"]]],null]],[12,\\\"checked\\\",[22,2,[\\\"isChecked\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickCheckBox\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_provider_header_\\\",[22,3,[]]]]],[12,\\\"title\\\",[28,[[22,2,[\\\"providerName\\\"]]]]],[9],[1,[22,2,[\\\"providerName\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/dropdown-provider/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/ember-chart-fix/component\", [\"exports\", \"ember-cli-chart/components/ember-chart\"], function (_exports, _emberChart) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _emberChart.default.extend({\n    updateChart() {\n      const chart = this.get('chart');\n      const data = this.get('data');\n      const options = this.get('options');\n      const animate = this.get('animate');\n\n      if (!data.labels) {\n        data.labels = [];\n      }\n\n      if (chart) {\n        chart.config.data = data;\n        chart.options = options;\n\n        if (animate) {\n          chart.update();\n        } else {\n          chart.update(0);\n        }\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/forgot-form/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    errors: null,\n    success: null,\n    email: null,\n    isValid: Ember.computed('email', function () {\n      const email = this.get('email');\n      return Ember.isPresent(email);\n    }),\n    actions: {\n      onSubmit(email, e) {\n        e.preventDefault();\n        this.get('onSubmit')(email);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/forgot-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"DH9qyjMD\",\n    \"block\": \"{\\\"symbols\\\":[\\\"error\\\"],\\\"statements\\\":[[7,\\\"form\\\"],[12,\\\"onsubmit\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubmit\\\",[23,[\\\"email\\\"]]],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Email\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"email\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"email\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"required\\\",\\\"\\\"],[11,\\\"type\\\",\\\"email\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"li\\\"],[9],[1,[22,1,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"success\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"success\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[1,[21,\\\"success\\\"],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn\\\"],[12,\\\"onclick\\\",[27,\\\"route-action\\\",[\\\"cancel\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n    Cancel\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isValid\\\"]]],null]],[11,\\\"type\\\",\\\"submit\\\"],[9],[0,\\\"\\\\n    Confirm\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/forgot-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    config: null,\n    editableSections: Ember.computed.readOnly('config.editableSections'),\n    userActivitySelected: null,\n    details: '',\n    isDetailsDisabled: Ember.computed('userActivitySelected', function () {\n      const activty = this.get('userActivitySelected');\n      return Ember.isEmpty(activty);\n    }),\n    route: Ember.computed.readOnly('workspace.topOptions.route'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    filteredSections: Ember.computed('editableSections', function () {\n      const sections = Ember.copy(this.get('editableSections'), true) || [];\n      return sections.map(section => {\n        return section;\n      }).filter(section => section.fields.length > 0);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/enum/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-select'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    dataFromModel: false,\n    options: null,\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n    optionSearchPath: Ember.computed.alias('extra.optionSearchPath'),\n\n    async init() {\n      this._super(...arguments);\n\n      if (!Ember.isNone(this.get('extra.options'))) {\n        this.set('options', this.get('extra.options'));\n      } else if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        this.set('dataFromModel', true);\n        const options = await this.get('store').query('cs-config-item', {\n          category: this.get('extra.optionConfigCategoryName')\n        });\n        this.set('options', options);\n      }\n    },\n\n    selected: Ember.computed('value', 'options', function () {\n      if (!Ember.isNone(this.get('extra.optionModelName')) && !Ember.isNone(this.get('options'))) {\n        return this.get('options').find(option => {\n          return option.get('name') === this.get('value');\n        });\n      }\n\n      return false;\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/enum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"09+wvVg5\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],true],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"options\\\",\\\"onchange\\\",\\\"searchField\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],false,[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null],[27,\\\"readonly\\\",[[23,[\\\"optionSearchPath\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[27,\\\"get\\\",[[22,1,[]],[23,[\\\"optionSearchPath\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/activity-log-entry/enum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/section/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    section: null,\n    isOpen: true,\n    actions: {\n      onHeaderClick() {\n        this.toggleProperty('isOpen');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/section/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"40cB/nZq\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"100\\\"],[11,\\\"class\\\",\\\"sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[23,[\\\"section\\\",\\\"title\\\"]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[14,1,[[23,[\\\"section\\\",\\\"fields\\\"]]]],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/activity-log-entry/section/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vJxa6cll\",\n    \"block\": \"{\\\"symbols\\\":[\\\"section\\\",\\\"fields\\\",\\\"field\\\"],\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filteredSections\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[27,\\\"eq\\\",[[22,1,[\\\"title\\\"]],\\\"Read Only\\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"form-components/activity-log-entry/section\\\",null,[[\\\"section\\\"],[[27,\\\"readonly\\\",[[22,1,[]]],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"subsections\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-button-cell\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-button-primary\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"addItem\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n                      Add New Config\\\\n                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[22,2,[]]],null,{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\" \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"editable\\\"]],false],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[27,\\\"get\\\",[[23,[\\\"record\\\"]],[22,3,[\\\"valuePath\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"form-components/activity-log-entry/\\\",[22,3,[\\\"type\\\"]]],null]],[[\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,0,[]],[22,3,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,3,[\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"isDetailsDisabled\\\"]]],null],[27,\\\"readonly\\\",[[22,3,[\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onValueChange\\\"]],[22,3,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"        \\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n  \\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/activity-log-entry/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/text-area/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-text-area'],\n    value: null,\n    disabled: false,\n    actions: {\n      onInput() {\n        const value = this.get('value');\n        this.get('onChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/activity-log-entry/text-area/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"v/zFFNsd\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"value\\\",\\\"focus-out\\\"],[\\\"3\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\"Write a user activity log\\\",\\\"500\\\",[23,[\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"hint\\\"],[9],[1,[23,[\\\"value\\\",\\\"length\\\"]],false],[0,\\\"/500\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/activity-log-entry/text-area/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/address-place-search/component\", [\"exports\", \"lodash\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _lodash, _emberConcurrency, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PLACE_CATEGORY = ['ad_hoc', 'certification_location'];\n\n  var _default = Ember.Component.extend({\n    classNames: ['address-place-search'],\n    store: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    isExpanded: false,\n    addressesOfRiderToBook: null,\n    recentAddress: null,\n    favoriteAddress: null,\n    dropDownAction: null,\n    limitedPreviousAddress: null,\n    searchRecentAddress: null,\n    searchFavoriteAddress: null,\n    searchConfigureResults: null,\n    isConfigExpanded: false,\n    recentAddressText: '',\n    configAddressText: '',\n    favoriteAddressText: '',\n\n    init() {\n      this._super(...arguments);\n\n      this.setRiderRecentAddress();\n      this.setRiderFavoriteAddress();\n    },\n\n    didInsertElement() {\n      this._bodyClickHandler = event => {\n        if (this.get('isDestroyed')) return; // close dropdown if we click elsewhere in application\n\n        if (!event.target.closest('.address-search-component')) {\n          this.set('isExpanded', false);\n          this.set('recentChecked', false);\n          this.set('configuredChecked', false);\n          this.set('isConfigExpanded', false);\n          this.set('searchConfigureResults', null);\n        }\n      };\n\n      document.body.addEventListener('click', this._bodyClickHandler);\n    },\n\n    async setRiderRecentAddress() {\n      const rootNode = this.get('systemConfig.rootNodes');\n      const configBookTrips = rootNode.filter(ele => ele.label === 'Book Trips');\n      const maxPreviousAddress = configBookTrips.get('firstObject.children').filter(ele => ele.label === 'Maximum previous addresses');\n      const maxPreviousAddressValue = parseInt(maxPreviousAddress.get('firstObject.value'), 10);\n      const riderQueryRecord = await this.recentAddressQuery.perform();\n      const segments = riderQueryRecord.map(ele => ele.segments).flat();\n      const segmentStops = segments.map(ele => ele.stops).flat();\n      const recentStopAddresses = segmentStops.map(stop => {\n        const stopAddress = (0, _unwrapProxy.unwrapProxy)(stop.get('place.address'));\n        const stopNotes = stop.get('notes');\n\n        if (Ember.isPresent(stopAddress)) {\n          stopAddress.set('notes', stopNotes);\n        }\n\n        return stopAddress;\n      }).filter(segmentStop => segmentStop);\n      const subscriptionsMap = riderQueryRecord.map(ele => ele.subscriptions).flat();\n      const recentSubscriptionAddresses = subscriptionsMap.map(subscriptions => {\n        const addresses = [];\n        subscriptions.map(subscription => {\n          const origin = (0, _unwrapProxy.unwrapProxy)(subscription.get('origin'));\n          const originAddress = (0, _unwrapProxy.unwrapProxy)(origin.get('address'));\n          const originNotes = subscription.get('originNotes');\n          originAddress.set('notes', originNotes);\n          addresses.push(originAddress);\n          const destination = (0, _unwrapProxy.unwrapProxy)(subscription.get('destination'));\n          const destinationAddress = (0, _unwrapProxy.unwrapProxy)(destination.get('address'));\n          const destinationNotes = subscription.get('destinationNotes');\n          destinationAddress.set('notes', destinationNotes);\n          addresses.push(destinationAddress);\n        });\n        return addresses;\n      }).flat(); //NYAAR-19476-most recent addresses need to show at the top of the Recent Addresses drop-down\n\n      const recentAddresses = _lodash.default.concat(recentStopAddresses, recentSubscriptionAddresses).sortBy('id').reverse();\n\n      const placeAddress = _lodash.default.uniq(recentAddresses);\n\n      const filteredAddress = placeAddress.filter(ele => {\n        return ele && ele.get('address');\n      }); // remove duplicate address\n\n      const uniqAddresses = _lodash.default.uniqBy(filteredAddress, 'fullAddress');\n\n      const limitedPreviousAddress = uniqAddresses.slice(0, maxPreviousAddressValue);\n      this.set('recentAddress', limitedPreviousAddress);\n      this.set('limitedPreviousAddress', limitedPreviousAddress);\n    },\n\n    async setRiderFavoriteAddress() {\n      const store = this.get('store');\n      const riderId = this.get('riderRecord.id');\n      const rider = store.peekRecord('rider', riderId);\n      const riderPlaces = rider.get('favoriteAddresses');\n      const addressIdsClause = riderPlaces.map(place => `'${place.get('place.id')}'`).join(',');\n      const placeQuery = `in(id,(${addressIdsClause}))&include=address,location`;\n      const favoritePlaces = riderPlaces.length > 0 ? await store.query('place', {\n        filter: placeQuery\n      }) : [];\n      const addresses = favoritePlaces.map(favoriteAddress => {\n        return (0, _unwrapProxy.unwrapProxy)(favoriteAddress.get('address'));\n      });\n      this.set('favoriteAddress', addresses);\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    searchRecentAddressTask: (0, _emberConcurrency.task)(function* () {\n      const text = this.get('recentAddressText');\n      const recentAddress = this.get('limitedPreviousAddress');\n      let results; // can't do a blank search\n\n      if (Ember.isEmpty(text)) {\n        this.set('searchRecentAddress', recentAddress);\n        return;\n      }\n\n      this.set('isExpanded', true);\n\n      if (!Ember.isEmpty(recentAddress)) {\n        results = recentAddress;\n      }\n\n      if (Ember.isEmpty(results)) {\n        return;\n      } // Show Assesment Center Place into Address lookup NYAAR-10385\n\n\n      results = yield this.insertAssesmentAddressList(results, text);\n      const matchedAddresses = results.filter(result => {\n        return result.get('fullAddress') === text;\n      });\n\n      if (matchedAddresses.length > 0) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(matchedAddresses[0]);\n          this.set('searchRecentAddress', matchedAddresses);\n        });\n        return;\n      }\n\n      this.set('searchRecentAddress', results);\n    }).restartable(),\n    searchFavoriteAddressTask: (0, _emberConcurrency.task)(function* () {\n      const text = this.get('favoriteAddressText').toLowerCase();\n      const favoriteAddress = this.get('favoriteAddress');\n      let results; // can't do a blank search\n\n      if (Ember.isEmpty(text)) {\n        this.set('searchFavoriteAddress', favoriteAddress);\n        return;\n      }\n\n      this.set('isExpanded', true);\n\n      if (!Ember.isEmpty(favoriteAddress)) {\n        results = favoriteAddress;\n      }\n\n      if (Ember.isEmpty(results)) {\n        return;\n      }\n\n      const matchedAddresses = yield results.filter(result => {\n        return result.get('aliasPlaceAddress').toLowerCase().includes(text);\n      });\n      this.set('searchFavoriteAddress', matchedAddresses);\n    }).restartable(),\n\n    insertAssesmentAddressList(searchResults, searchText) {\n      const assesmentAddressList = searchResults.filter(result => {\n        return result.get('fullAddress').includes(searchText);\n      }); // remove duplicate address\n\n      const uniqSearchResults = _lodash.default.uniqBy(assesmentAddressList, function (address) {\n        return address.get('aliasAddress');\n      });\n\n      return uniqSearchResults;\n    },\n\n    recentAddressQuery: (0, _emberConcurrency.task)(function* () {\n      const riderId = this.get('riderRecord.id');\n      const query = `eq('id','${riderId}')`;\n      const results = yield this.store.query('rider', {\n        filter: query\n      });\n      return results;\n    }).restartable(),\n\n    /**\n    *\n    * @param {* string} value\n    * @param {* string} addressColumn\n    * @returns queried address results\n    */\n    addressQuery(query) {\n      return this.get('store').query('address', {\n        filter: query\n      });\n    },\n\n    searchConfigurePlaceAddressTask: (0, _emberConcurrency.task)(function* () {\n      const searchText = this.get('configAddressText');\n\n      if (searchText.length) {\n        const splitedSearchText = searchText.trim().split(' ');\n        const aliasQuery = `ilike('alias','${splitedSearchText[0]}%')`;\n        const aliasAddressList = yield this.addressQuery(aliasQuery);\n        const addresses = aliasAddressList.toArray(); //NYAAR-19063 searchText must have a length greater than 1, need to query streetAddress with searchText.\n\n        let streetAddressList = [];\n\n        if (searchText.length > 1) {\n          streetAddressList = parseInt(splitedSearchText[0], 10) && splitedSearchText.length > 1 ? yield this.addressQuery(`ilike('streetAddress','${splitedSearchText[1]}%')`) : yield this.addressQuery(`ilike('streetAddress','${searchText}%')`);\n        }\n\n        const streetAddresses = streetAddressList.toArray();\n        const concatAddresses = addresses.concat(streetAddresses); //if there is no results for streetAddress, need to query for streetNumber\n\n        if (!streetAddresses.length) {\n          const streetNumberList = yield this.addressQuery(`ilike('streetNumber','${splitedSearchText[0]}')`);\n          const streetNumbers = streetNumberList.toArray();\n          concatAddresses.push(...streetNumbers);\n        }\n\n        const addressIdsClause = concatAddresses.map(address => `'${address.get('id')}'`).join(',');\n        const placeQuery = `in(addressId,(${addressIdsClause}))&include=address,location`;\n        const places = yield this.store.query('place', {\n          filter: placeQuery\n        });\n        const placeList = places.toArray();\n        const placeAddresses = placeList.filter(place => PLACE_CATEGORY.includes(place.get('placeCategoryType.name').toLowerCase())).map(place => {\n          const location = place.get('location');\n          const address = (0, _unwrapProxy.unwrapProxy)(place.get('address')); //Reg - NYAAR-20228 Place Name is displayed twice in configured places\n\n          address.rollbackAttributes();\n          address.set('lat', location.get('lat'));\n          address.set('lng', location.get('lng'));\n          return address;\n        });\n        this.set('searchConfigureResults', (0, _unwrapProxy.unwrapProxy)(placeAddresses));\n        this.set('isConfigExpanded', true);\n      } else {\n        this.set('searchConfigureResults', null);\n        this.set('isConfigExpanded', false);\n      }\n    }).restartable(),\n    actions: {\n      onRadioRecentButtonClick(value, dropdown) {\n        this.set('recentAddressText', '');\n        this.set('recentChecked', value);\n        this.set('configuredChecked', !value);\n        this.set('favoriteChecked', !value);\n        this.set('isExpanded', true);\n        this.set('dropDownAction', dropdown);\n      },\n\n      onRadioFavoriteButtonClick(value, dropdown) {\n        this.set('favoriteAddressText', '');\n        this.set('favoriteChecked', value);\n        this.set('configuredChecked', !value);\n        this.set('recentChecked', !value);\n        this.set('isExpanded', true);\n        this.set('dropDownAction', dropdown);\n      },\n\n      onRadioConfiguredButtonClick(value, dropdown) {\n        this.set('configAddressText', '');\n        this.set('configuredChecked', value);\n        this.set('recentChecked', !value);\n        this.set('favoriteChecked', !value);\n        this.set('isExpanded', true);\n        this.set('dropDownAction', dropdown);\n      },\n\n      onAddressSelect(address, close) {\n        const addressType = this.get('addressType');\n        const configuredChecked = this.get('configuredChecked');\n\n        if (address) {\n          address.set('lat', address.get('position.lat'));\n          address.set('lng', address.get('position.lng'));\n          address.set('freeformAddress', address.get('address.address.freeformAddress'));\n          this.updateLocationForAddressSelect(address, close, addressType); //NYAAR-18629 configured Places on create booking side panel After address is selected, address is displayed as Place name-Place address.\n\n          if (configuredChecked) {\n            const freeformAddress = !address.get('alias') ? `${address.get('freeformAddress')}` : `${address.get('alias')} - ${address.get('freeformAddress')}`;\n            address.set('freeformAddress', freeformAddress);\n          }\n        }\n\n        if (address !== null) {\n          const dropDownAction = this.get('dropDownAction');\n          dropDownAction.actions.close();\n          this.set('isExpanded', false);\n          this.set('configuredChecked', false);\n          this.set('recentChecked', false);\n          this.set('favoriteChecked', false);\n        }\n      },\n\n      onOpen() {\n        this.toggleSelect();\n      },\n\n      onClose() {\n        this.toggleSelect();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/address-place-search/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VL7nSjYj\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\"],\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\",\\\"disabled\\\"],[\\\"center\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],[23,[\\\"isFieldDisabled\\\"]]]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/form-components/address-place-search/template.hbs' @ L7:C7) \\\"],null]],[[\\\"class\\\"],[\\\"recentConfigDropDownTrigger\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-bars\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/form-components/address-place-search/template.hbs' @ L15:C6) \\\"],null]],[[\\\"class\\\"],[\\\"recentConfigDropDownContent\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[true,[23,[\\\"recentChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioRecentButtonClick\\\",true,[22,1,[]]],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"mr-3 ml-2 radio-btn\\\"],[9],[0,\\\"Recent Addresses\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[true,[23,[\\\"favoriteChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioFavoriteButtonClick\\\",true,[22,1,[]]],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"mr-3 ml-2 radio-btn\\\"],[9],[0,\\\"Favorite Addresses\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[true,[23,[\\\"configuredChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioConfiguredButtonClick\\\",true,[22,1,[]]],null],\\\"radio-button-input mr-4\\\"]],{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"mr-4 ml-2 radio-btn\\\"],[9],[0,\\\"Configured Places\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"isExpanded\\\"]],[23,[\\\"recentChecked\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"assesmentCenterList\\\",\\\"isExpanded\\\",\\\"initialAddresses\\\",\\\"searchResults\\\",\\\"autoFocus\\\",\\\"inputClass\\\",\\\"placeHolder\\\",\\\"text\\\",\\\"searchTask\\\",\\\"onTextChange\\\",\\\"onAddressSelect\\\",\\\"recentChecked\\\"],[[23,[\\\"recentAddress\\\"]],[23,[\\\"isExpanded\\\"]],[23,[\\\"recentAddress\\\"]],[23,[\\\"searchRecentAddress\\\"]],false,\\\"map-widget-location-search-box\\\",\\\"Search\\\",[27,\\\"readonly\\\",[[23,[\\\"recentAddressText\\\"]]],null],[23,[\\\"searchRecentAddressTask\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"recentAddressText\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\"],null],[23,[\\\"recentChecked\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"isExpanded\\\"]],[23,[\\\"favoriteChecked\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"assesmentCenterList\\\",\\\"isExpanded\\\",\\\"initialAddresses\\\",\\\"searchResults\\\",\\\"autoFocus\\\",\\\"inputClass\\\",\\\"placeHolder\\\",\\\"text\\\",\\\"searchTask\\\",\\\"onTextChange\\\",\\\"onAddressSelect\\\",\\\"favoriteChecked\\\"],[[23,[\\\"favoriteAddress\\\"]],[23,[\\\"isExpanded\\\"]],[23,[\\\"favoriteAddress\\\"]],[23,[\\\"searchFavoriteAddress\\\"]],false,\\\"map-widget-location-search-box\\\",\\\"Search\\\",[27,\\\"readonly\\\",[[23,[\\\"favoriteAddressText\\\"]]],null],[23,[\\\"searchFavoriteAddressTask\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"favoriteAddressText\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\"],null],[23,[\\\"favoriteChecked\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"isExpanded\\\"]],[23,[\\\"configuredChecked\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"assesmentCenterList\\\",\\\"isExpanded\\\",\\\"initialAddresses\\\",\\\"searchResults\\\",\\\"autoFocus\\\",\\\"inputClass\\\",\\\"placeHolder\\\",\\\"text\\\",\\\"searchTask\\\",\\\"onTextChange\\\",\\\"onAddressSelect\\\",\\\"configuredChecked\\\"],[[23,[\\\"searchConfigureResults\\\"]],[23,[\\\"isConfigExpanded\\\"]],[23,[\\\"searchConfigureResults\\\"]],[23,[\\\"searchConfigureResults\\\"]],false,\\\"map-widget-location-search-box\\\",\\\"Search\\\",[27,\\\"readonly\\\",[[23,[\\\"configAddressText\\\"]]],null],[23,[\\\"searchConfigurePlaceAddressTask\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"configAddressText\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\"],null],[23,[\\\"configuredChecked\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/address-place-search/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/address-search/component\", [\"exports\", \"ember-concurrency\", \"lodash\"], function (_exports, _emberConcurrency, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_DEBOUNCE_TIME = 1200;\n  const DEFAULT_PLACEHOLDER = 'Search Address...';\n  const UP_ARROW_KEYCODE = 38;\n  const DOWN_ARROW_KEYCODE = 40;\n  const ENTER_KEYCODE = 13;\n\n  var _default = Ember.Component.extend({\n    classNames: ['address-search-component'],\n    classNameBindings: ['isFocused', 'isBlurred', 'hasSelection', 'isEmpty'],\n    addressService: Ember.inject.service('address'),\n    user: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    text: '',\n    selectedAddress: null,\n    inputClass: null,\n    debounceTime: DEFAULT_DEBOUNCE_TIME,\n    placeHolder: DEFAULT_PLACEHOLDER,\n    onTextChange: () => null,\n    onAddressSelect: () => null,\n    searchResults: null,\n    assesmentCenterList: null,\n    isFocused: false,\n    isExpanded: false,\n    autoFocus: true,\n    selectedAddressIndex: null,\n    isAddressHovered: false,\n    isBlurred: Ember.computed.not('isFocused'),\n    hasSelection: Ember.computed.bool('selectedAddress'),\n    isEmpty: Ember.computed.not('hasSelected'),\n    selectedRecentAddressIndex: null,\n    isRecentAddressHovered: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        assesmentCenterList: this.get('assesmentCenterList') || []\n      });\n      const initialAddresses = this.get('initialAddresses');\n\n      if (initialAddresses) {\n        this.set('searchResults', initialAddresses);\n      }\n\n      this.set('selectedAddressIndex', -1);\n    },\n\n    didInsertElement() {\n      Ember.run.schedule('afterRender', () => {\n        if (this.get('autoFocus')) {\n          this.$('input').focus();\n        }\n      });\n\n      this._bodyClickHandler = event => {\n        if (this.get('isDestroyed')) return; // close dropdown if we click elsewhere in application\n\n        if (!event.target.closest('.address-search-component')) {\n          this.set('isExpanded', false);\n        }\n      };\n\n      document.body.addEventListener('click', this._bodyClickHandler);\n    },\n\n    willRemoveElement() {\n      document.body.removeEventListener('click', this._bodyClickHandler);\n    },\n\n    searchTask: (0, _emberConcurrency.task)(function* () {\n      const text = this.get('text');\n      let results; // can't do a blank search\n\n      if (Ember.isEmpty(text)) {\n        this.set('searchResults', null);\n        this.set('isExpanded', false);\n        return;\n      }\n\n      this.set('isExpanded', true);\n\n      if (this.user.isRoadSupEnable()) {\n        const center = this.roadSupervisor.getLocation();\n        results = yield this.get('addressService').fuzzySearch(text, {\n          center,\n          limit: 10\n        });\n      } else {\n        results = yield this.get('addressService').fuzzySearch(text, {\n          limit: 10\n        });\n      }\n\n      if (Ember.isEmpty(results)) {\n        this.set('searchResults', null);\n        return;\n      } // Show Assesment Center Place into Address lookup NYAAR-10385\n\n\n      results = this.insertAssesmentAddressList(results, text);\n      const matchedAddresses = results.filter(result => {\n        return result.get('fullAddress') === text;\n      });\n\n      if (matchedAddresses.length > 0) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(matchedAddresses[0]);\n          this.set('searchResults', matchedAddresses);\n          this.set('isExpanded', false);\n        });\n        return;\n      }\n\n      this.set('searchResults', results);\n    }).restartable(),\n\n    // wrapped so we can use `debounce`\n    performSearchTask() {\n      this.get('searchTask').perform();\n    },\n\n    //get AssementCenterList\n    getAssesmentCenterList() {\n      return this.get('assesmentCenterList');\n    },\n\n    insertAssesmentAddressList(searchResults, searchText) {\n      const assesmentCenterList = this.getAssesmentCenterList(); //if assesmentCenterList is empty return the searchResults\n\n      if (assesmentCenterList.length === 0) {\n        return searchResults;\n      }\n\n      const assesmentAddressList = assesmentCenterList.filter(result => {\n        return result.get('fullAddress').includes(searchText);\n      }); // insert assesmentAddressList to top of the searchResults\n\n      searchResults.unshiftObjects(assesmentAddressList); // remove duplicate address\n\n      const uniqSearchResults = (0, _lodash.uniqBy)(searchResults, function (address) {\n        return address.get('streetAddress');\n      });\n      return uniqSearchResults;\n    },\n\n    //adding the hover properties while address selected using up or down arrow keys\n    addClassForSelectedAddress(selectedAddressIndex) {\n      const searchResults = this.get('searchResults');\n      searchResults.forEach((result, index) => {\n        const className = `.selectedAddress${index}`;\n        this.$(className).removeClass('selectedAddress');\n\n        if (selectedAddressIndex === index) {\n          this.$(className).addClass('selectedAddress');\n        }\n      });\n    },\n\n    //setting the selected address for pick or drop address\n    onSelectAddress(searchResults, selectedAddressIndex) {\n      const address = searchResults[selectedAddressIndex];\n      Ember.run.schedule('afterRender', () => {\n        this.onAddressSelect(address);\n        this.set('isExpanded', false);\n      });\n      this.set('selectedAddressIndex', -1);\n    },\n\n    actions: {\n      onInputFocus() {\n        Ember.run.schedule('afterRender', () => {\n          this.set('isFocused', true);\n\n          if (!Ember.isEmpty(this.get('searchResults'))) {\n            this.set('isExpanded', true);\n          }\n        });\n      },\n\n      onInputBlur() {\n        Ember.run.schedule('afterRender', () => {\n          this.set('isFocused', false);\n        });\n      },\n\n      onInput(text) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(null);\n          this.onTextChange(text);\n          Ember.run.debounce(this, 'performSearchTask', this.get('debounceTime'));\n        });\n        this.set('selectedAddressIndex', -1);\n      },\n\n      onAddressSelect(address) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(address);\n          this.set('isExpanded', false);\n        });\n      },\n\n      onKeyDown(event) {\n        const recentChecked = this.get('recentChecked');\n        const configuredChecked = this.get('configuredChecked');\n        const favoriteChecked = this.get('favoriteChecked');\n        const searchResults = this.get('searchResults') || [];\n        const isAddressHovered = this.get('isAddressHovered');\n\n        if ((recentChecked || configuredChecked || favoriteChecked) && searchResults.length && !isAddressHovered) {\n          let selectedAddressIndex = this.get('selectedAddressIndex');\n\n          if (event.keyCode === UP_ARROW_KEYCODE) {\n            //if the first address is selected we dont have any address before that\n            if (selectedAddressIndex > 0) {\n              selectedAddressIndex--;\n            }\n\n            this.addClassForSelectedAddress(selectedAddressIndex);\n          } else if (event.keyCode === DOWN_ARROW_KEYCODE) {\n            //if the last address is selected we dont have any address after that\n            if (selectedAddressIndex < searchResults.length - 1) {\n              selectedAddressIndex++;\n            }\n\n            this.addClassForSelectedAddress(selectedAddressIndex);\n          } else if (event.keyCode === ENTER_KEYCODE) {\n            this.onSelectAddress(searchResults, selectedAddressIndex);\n          }\n\n          this.set('selectedAddressIndex', selectedAddressIndex);\n        }\n      },\n\n      //if the address is selected using mouse hover we have to remove the keyboard selected class\n      onHoverAddress() {\n        const searchResults = this.get('searchResults');\n        searchResults.forEach((result, index) => {\n          const className = `.selectedAddress${index}`;\n          this.$(className).removeClass('selectedAddress');\n        });\n        this.set('selectedAddressIndex', -1);\n        this.set('isAddressHovered', true);\n      },\n\n      onUnHoverAddress() {\n        this.set('isAddressHovered', false);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/address-search/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"JHb5ngJM\",\n    \"block\": \"{\\\"symbols\\\":[\\\"address\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"class\\\",[28,[\\\"address-search-input \\\",[21,\\\"inputClass\\\"]]]],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"placeholder\\\",[21,\\\"placeHolder\\\"]],[12,\\\"value\\\",[27,\\\"or\\\",[[23,[\\\"selectedAddress\\\",\\\"placeNameAddress\\\"]],[23,[\\\"text\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onfocus\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputFocus\\\"],null]],[12,\\\"onblur\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputBlur\\\"],null]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onKeyDown\\\"],null]],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isExpanded\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"address-search-dropdown\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"searchTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"loading-message\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Loading...\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"searchResults\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"address-search-result selectedAddress\\\",[22,2,[]]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\",[22,1,[]]],null]],[12,\\\"onmouseenter\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHoverAddress\\\"],null]],[12,\\\"onmouseleave\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onUnHoverAddress\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"configuredChecked\\\"]],[22,1,[\\\"alias\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"alias\\\"]],false],[0,\\\" - \\\"],[1,[22,1,[\\\"fullAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,1,[\\\"alias\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,1,[\\\"alias\\\"]],false],[0,\\\" - \\\"],[1,[22,1,[\\\"fullAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,1,[\\\"fullAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"no-results-message\\\"],[9],[0,\\\"No results found.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/address-search/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/address-vehicle-place-search/component\", [\"exports\", \"ember-concurrency\", \"lodash\"], function (_exports, _emberConcurrency, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_DEBOUNCE_TIME = 1200;\n  const VEHICLE_ID_PLACEHOLDER = 'vehicle id';\n  const PLACE_PLACEHOLDER = 'place';\n  const PASSENGER_TYPE_PLACE_CATEGORY = 'passenger';\n\n  var _default = Ember.Component.extend({\n    classNames: ['address-search-component'],\n    classNameBindings: ['isFocused', 'isBlurred', 'hasSelection', 'isEmpty'],\n    addressService: Ember.inject.service('address'),\n    user: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    store: Ember.inject.service(),\n    text: '',\n    selectedAddress: null,\n    inputClass: null,\n    debounceTime: DEFAULT_DEBOUNCE_TIME,\n    onTextChange: () => null,\n    onAddressSelect: () => null,\n    searchResults: null,\n    assesmentCenterList: null,\n    isFocused: false,\n    isExpanded: false,\n    autoFocus: true,\n    isBlurred: Ember.computed.not('isFocused'),\n    hasSelection: Ember.computed.bool('selectedAddress'),\n    isEmpty: Ember.computed.not('hasSelected'),\n    isVehicleSearchEnabled: false,\n    isPlaceSearchEnabled: false,\n    isPlaceNameDropdown: false,\n    selectedValue: Ember.computed('selectedAddress', 'text', 'isPlaceNameDropdown', function () {\n      const isPlaceNameDropdown = this.get('isPlaceNameDropdown');\n      const selectedAddress = this.get('selectedAddress');\n      const text = this.get('text');\n\n      if (isPlaceNameDropdown) {\n        return selectedAddress && `${selectedAddress.get('alias')} - ${selectedAddress.get('fullAddress')}` || text;\n      }\n\n      return selectedAddress && selectedAddress.get('fullAddress') || text;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        assesmentCenterList: this.get('assesmentCenterList') || []\n      });\n      const initialAddresses = this.get('initialAddresses');\n\n      if (initialAddresses) {\n        this.set('searchResults', initialAddresses);\n      }\n    },\n\n    didInsertElement() {\n      Ember.run.schedule('afterRender', () => {\n        if (this.get('autoFocus')) {\n          this.$('input').focus();\n        }\n      });\n\n      this._bodyClickHandler = event => {\n        if (this.get('isDestroyed')) return; // close dropdown if we click elsewhere in application\n\n        if (!event.target.closest('.address-search-component')) {\n          this.set('isExpanded', false);\n        }\n      };\n\n      document.body.addEventListener('click', this._bodyClickHandler);\n    },\n\n    willRemoveElement() {\n      document.body.removeEventListener('click', this._bodyClickHandler);\n    },\n\n    searchTask: (0, _emberConcurrency.task)(function* () {\n      const text = this.get('text');\n      let results; // can't do a blank search\n\n      if (Ember.isEmpty(text)) {\n        this.set('searchResults', null);\n        this.set('isExpanded', false);\n        return;\n      }\n\n      this.set('isExpanded', true);\n\n      if (this.user.isRoadSupEnable()) {\n        const center = this.roadSupervisor.getLocation();\n        results = yield this.get('addressService').fuzzySearch(text, {\n          center,\n          limit: 25\n        });\n      } else {\n        results = yield this.get('addressService').fuzzySearch(text, {\n          limit: 25\n        });\n      }\n\n      if (Ember.isEmpty(results)) {\n        return;\n      } // Show Assesment Center Place into Address lookup NYAAR-10385\n\n\n      results = this.insertAssesmentAddressList(results, text);\n      const matchedAddresses = results.filter(result => {\n        return result.get('fullAddress') === text;\n      });\n\n      if (matchedAddresses.length > 0) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(matchedAddresses[0]);\n          this.set('searchResults', matchedAddresses);\n          this.set('isExpanded', false);\n        });\n        return;\n      }\n\n      this.set('searchResults', results);\n    }).restartable(),\n    searchPlaceTask: (0, _emberConcurrency.task)(function* () {\n      const text = this.get('text');\n      const splits = text.toLowerCase().split('=');\n      const placeText = splits.lastObject.trim(); // can't do a blank search\n\n      if (Ember.isEmpty(placeText)) {\n        return;\n      }\n\n      this.set('isExpanded', true);\n      const query = `ilike('alias','%${placeText}%')`;\n      const results = yield this.store.query('address', {\n        filter: query\n      });\n      const addresses = results.toArray();\n      const addressIdsClause = addresses.map(address => `'${address.get('id')}'`).join(',');\n      const placeQuery = `in(addressId,(${addressIdsClause}))&include=address,location`;\n      const places = yield this.store.query('place', {\n        filter: placeQuery\n      });\n      const placeList = places.toArray();\n      const placeAddresses = placeList.filter(place => place.get('placeCategoryType.name').toLowerCase() !== PASSENGER_TYPE_PLACE_CATEGORY).map(place => {\n        const location = place.get('location');\n        const address = place.get('address');\n        address.set('lat', location.get('lat'));\n        address.set('lng', location.get('lng'));\n        return address;\n      });\n      this.set('searchResults', placeAddresses);\n    }).restartable(),\n\n    // wrapped so we can use `debounce`\n    performSearchTask() {\n      this.get('searchTask').perform();\n    },\n\n    // wrapped so we can use `debounce`\n    performPlaceSearchTask() {\n      this.get('searchPlaceTask').perform();\n    },\n\n    //get AssementCenterList\n    getAssesmentCenterList() {\n      return this.get('assesmentCenterList');\n    },\n\n    insertAssesmentAddressList(searchResults, searchText) {\n      const assesmentCenterList = this.getAssesmentCenterList(); //if assesmentCenterList is empty return the searchResults\n\n      if (assesmentCenterList.length === 0) {\n        return searchResults;\n      }\n\n      const assesmentAddressList = assesmentCenterList.filter(result => {\n        return result.get('fullAddress').includes(searchText);\n      }); // insert assesmentAddressList to top of the searchResults\n\n      searchResults.unshiftObjects(assesmentAddressList); // remove duplicate address\n\n      const uniqSearchResults = (0, _lodash.uniqBy)(searchResults, function (address) {\n        return address.get('streetAddress');\n      });\n      return uniqSearchResults;\n    },\n\n    isVehicleSearch(text) {\n      const splits = text.toLowerCase().split('=');\n      return text.toLowerCase().includes('=') || text.toLowerCase().includes('id') || splits.length === 2 && splits.firstObject.trim() === VEHICLE_ID_PLACEHOLDER;\n    },\n\n    isPlaceSearch(text) {\n      const splits = text.toLowerCase().split('=');\n      return splits.length === 2 && splits.firstObject.trim() === PLACE_PLACEHOLDER;\n    },\n\n    clearAddressSearchFields() {\n      if (this.get('searchTask.isRunning')) {\n        this.get('searchTask').perform().cancel();\n      }\n\n      this.set('isExpanded', false);\n      this.set('searchResults', null);\n    },\n\n    actions: {\n      onInputFocus() {\n        Ember.run.schedule('afterRender', () => {\n          this.set('isFocused', true);\n\n          if (!Ember.isEmpty(this.get('searchResults'))) {\n            this.set('isExpanded', true);\n          }\n        });\n      },\n\n      onInputBlur() {\n        Ember.run.schedule('afterRender', () => {\n          this.set('isFocused', false);\n        });\n      },\n\n      onInput(text) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(null);\n          this.onTextChange(text);\n          this.set('isPlaceNameDropdown', false);\n\n          if (this.get('isPlaceSearchEnabled') && this.isPlaceSearch(text)) {\n            this.set('isPlaceNameDropdown', true);\n            this.clearAddressSearchFields();\n            Ember.run.debounce(this, 'performPlaceSearchTask', this.get('debounceTime'));\n            return;\n          }\n\n          if (this.get('isVehicleSearchEnabled') && this.isVehicleSearch(text)) {\n            this.clearAddressSearchFields();\n            this.get('onVehicleSearch')(text);\n            return;\n          }\n\n          Ember.run.debounce(this, 'performSearchTask', this.get('debounceTime'));\n        });\n      },\n\n      onAddressSelect(address) {\n        Ember.run.schedule('afterRender', () => {\n          this.onAddressSelect(address);\n          this.set('isExpanded', false);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/address-vehicle-place-search/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VJVGye9m\",\n    \"block\": \"{\\\"symbols\\\":[\\\"address\\\"],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"class\\\",[28,[\\\"address-search-input \\\",[21,\\\"inputClass\\\"]]]],[11,\\\"placeholder\\\",\\\"Search Address...\\\"],[12,\\\"value\\\",[21,\\\"selectedValue\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onfocus\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputFocus\\\"],null]],[12,\\\"onblur\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputBlur\\\"],null]],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isExpanded\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"address-search-dropdown\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"searchTask\\\",\\\"isRunning\\\"]],[23,[\\\"searchPlaceTask\\\",\\\"isRunning\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"loading-message\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Loading...\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"searchResults\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"address-search-result\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\",[22,1,[]]],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isPlaceNameDropdown\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"alias\\\"]],false],[0,\\\" - \\\"],[1,[22,1,[\\\"fullAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"fullAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"no-results-message\\\"],[9],[0,\\\"No results found.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/address-vehicle-place-search/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/addresses/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  const DEFAULT_DEBOUNCE_TIME = 1200;\n\n  var _default = Ember.Component.extend({\n    // Rename classNames to address and then separate that class into the actual trigger, dropdown content, and pin\n    // want to give people a better css ruleset to override wherever this component is embedded\n    classNames: ['locations-input'],\n    classNameBindings: ['geocode.activeGeo'],\n    store: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    // default placeholder for search address\n    placeholder: _placeholders.SEARCH_ADDRESS_PLACEHOLDER,\n    validateLocationInBlockoutRegion: null,\n    // used by blockout region for validation\n    addressOptions: null,\n    notesReadOnly: false,\n    addressType: null,\n    markerType: 'pick',\n    address: null,\n    showPinButton: true,\n    renderInPlace: false,\n    selectedAddress: null,\n    addressRecord: null,\n    disableAddress: false,\n    locationsPath: 'latlng',\n    activeGeo: Ember.computed.readOnly('geocode.activeGeo'),\n    aliasPath: Ember.computed.readOnly('extra.aliasPath'),\n    streetNumberPath: Ember.computed.readOnly('extra.streetNumberPath'),\n    streetAddressPath: Ember.computed.readOnly('extra.streetAddressPath'),\n    premisePath: Ember.computed.readOnly('extra.premisePath'),\n    streetNamePath: Ember.computed.readOnly('extra.streetNamePath'),\n    localityPath: Ember.computed.readOnly('extra.localityPath'),\n    regionPath: Ember.computed.readOnly('extra.regionPath'),\n    subRegionPath: Ember.computed.readOnly('extra.subRegionPath'),\n    postalCodePath: Ember.computed.readOnly('extra.postalCodePath'),\n    countryPath: Ember.computed.readOnly('extra.countryPath'),\n    notesPath: Ember.computed.readOnly('extra.notesPath'),\n    freeformAddressPath: Ember.computed.readOnly('extra.freeformAddressPath'),\n    defaultOptionsPath: Ember.computed.readOnly('extra.defaultOptionsPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n    useRecordWithId: Ember.computed.readOnly('extra.useRecordWithId'),\n    addressTypeOption: Ember.computed.readOnly('extra.addressType'),\n    markerTypeOption: Ember.computed.readOnly('extra.markerTypeOption'),\n    selectedAddressRecord: Ember.computed('valuePath', 'record', function () {\n      const valuePath = this.get('valuePath');\n      return this.get(`record.${valuePath}`) || this.get('record');\n    }),\n    isDisabledAddressSelect: Ember.computed('disabled', 'disableAddress', function () {\n      const disabled = this.get('disabled');\n      const disableAddress = this.get('disableAddress');\n      return disabled || disableAddress;\n    }),\n    publicApi: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setAddress();\n      this.publicApi = {\n        onValueChange: value => {\n          this.send('setValue', value);\n        }\n      };\n      const markerTypeOption = this.get('markerTypeOption');\n\n      if (!Ember.isNone(markerTypeOption)) {\n        this.set('markerType', markerTypeOption);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const action = this.get('registerPublicApi');\n\n      if (action) {\n        action(this.publicApi);\n      }\n    },\n\n    willDestroyElement() {\n      const action = this.get('registerPublicApi');\n\n      if (action) {\n        action(null);\n      }\n\n      this._super(...arguments);\n    },\n\n    geocodeAddressChange() {\n      const record = this.get('addressRecord');\n      const address = this.get('geocode.address');\n      const markerType = this.get('markerType');\n      const validateLocationInBlockoutRegion = this.get('validateLocationInBlockoutRegion');\n\n      if (markerType === 'speed-region' && Ember.isPresent('validateLocationInBlockoutRegion')) {\n        if (validateLocationInBlockoutRegion(address.position)) {\n          return;\n        }\n      }\n\n      if (!Ember.isEmpty(address)) {\n        this.convertTTAddressToModel(record, address).then(() => {\n          this.disableAddressSearchOnMap(record, markerType);\n        });\n      }\n    },\n\n    saveReverseGeocodeAddress() {\n      this.geocodeAddressChange();\n      this.removeObserver('geocode.address', this.saveReverseGeocodeAddress);\n    },\n\n    validateAddresses() {\n      const record = this.get('address');\n      this.set('editModal.errors', []);\n\n      if (record.get('location.content.lat') === 0 || record.get('location.content.lng') === 0) {\n        this.get('editModal.errors').pushObject('Address does not have lat/lng. Please select position on the map.');\n      }\n    },\n\n    setAddress() {\n      const place = this.get('value'); // component expects a place model\n      // then onchange method to mutate in parent\n      // we should refactor this component where it can take any value and returns the address object\n      // then the parent should decide what to do with that object would be better, in my opinion to be more inline with functional programming paradigm\n\n      this.set('address', place);\n      this.set('addressOptions', []);\n      const selectedAddressRecord = this.get('selectedAddressRecord');\n\n      if (selectedAddressRecord) {\n        this.get('addressOptions').push(selectedAddressRecord);\n      }\n    },\n\n    addressSearchResults(results) {\n      results.forEach(result => {\n        // benomad postalCode consist of cityCode and postal code V6L1C6/V6L. Sometimes postal code placed after city code\n        const [pos1, pos2] = result.address.postalCode.trim().split('/');\n        let postalCode;\n\n        if (pos1.length > 3) {\n          postalCode = pos1;\n        } else if (Ember.isPresent(pos2)) {\n          postalCode = pos2;\n        } else {\n          postalCode = pos1;\n        }\n\n        const [strPos1, strPos2] = result.address.street ? result.address.street.trim().split(', ') : ['', ''];\n        const street = strPos2 ? strPos2 : strPos1;\n        result.address.postalCode = postalCode;\n        result.address.street = street;\n      });\n      this.set('addressOptions', results);\n    },\n\n    searchAddress: (0, _emberConcurrency.task)(function* (term) {\n      yield (0, _emberConcurrency.timeout)(DEFAULT_DEBOUNCE_TIME);\n      const result = yield this.get('geocode').geoCodingApi(term);\n      this.addressSearchResults(result);\n    }).restartable(),\n    convertTTAddressToModel: function (record, ttAddress) {\n      const useOptionRecord = this.get('useOptionRecord');\n      const geocode = this.get('geocode') || [];\n      const markerType = this.get('markerType');\n      const valuePath = this.get('locationsPath');\n      const addressTypeOption = this.get('addressTypeOption');\n      const options = {\n        record,\n        valuePath,\n        useOptionRecord,\n        addressTypeOption\n      };\n      this.set('record.isForceDirty', true);\n      record.set('isForceDirty', true);\n      options.valuePath = 'address.zoneName';\n      this.get('onChange')(null, options);\n      this.get('onChange')(cleanFieldString(ttAddress.position), options);\n      options.valuePath = this.get('streetNumberPath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.streetNumber), options);\n      options.valuePath = this.get('premisePath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.premise), options);\n      options.valuePath = this.get('streetNamePath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n      options.valuePath = this.get('streetAddressPath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.street), options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.city), options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.state), options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.postalCode), options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')(cleanFieldString(ttAddress.address.country), options);\n\n      if (this.get('freeformAddressPath')) {\n        options.valuePath = this.get('freeformAddressPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n      }\n\n      if (this.get('aliasPath')) {\n        options.valuePath = this.get('aliasPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.alias), options);\n      }\n\n      options.valuePath = 'location.lat';\n      this.get('onChange')(ttAddress.position.lat, options);\n      options.valuePath = 'location.lng';\n      this.get('onChange')(ttAddress.position.lon, options);\n\n      if (Ember.isPresent(ttAddress.position.geoNode)) {\n        options.valuePath = 'location.geoNode';\n        this.get('onChange')(ttAddress.position.geoNode, options);\n      }\n\n      this.cursorWait();\n      return this.get('geocode').calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n        if (!Ember.isNone(result) && !Ember.isEmpty(result.zone.zoneName) && result.zone.zoneName > '0') {\n          if (record.get('isForceDirty')) {\n            const zoneName = result.zone.zoneName ? this.get('store').peekAll('zone-type').findBy('id', result.zone.zoneName) : null;\n            const zName = result.zone.zoneName ? zoneName.name : null;\n            this.set('address.address.zoneName', zoneName);\n            this.set('address.address.zName', zName);\n            options.valuePath = 'address.zoneName';\n            this.get('onChange')(zoneName, options);\n          }\n        } else {\n          this.clearAddressModel(record);\n          this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n        }\n\n        this.cursorDefault();\n        geocode.activateGeocode(false, record, markerType);\n        this.validateAddresses();\n        this.set('addressOptions', ttAddress);\n      });\n    },\n    clearAddressModel: function (record) {\n      const useOptionRecord = this.get('useOptionRecord');\n      const valuePath = this.get('streetNumberPath');\n      const addressTypeOption = this.get('addressTypeOption');\n      const options = {\n        record,\n        valuePath,\n        useOptionRecord,\n        addressTypeOption\n      };\n      this.get('onChange')('', options);\n      options.valuePath = this.get('streetNamePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('freeformAddressPath');\n      this.get('onChange')('', options);\n      options.valuePath = 'location.lat';\n      this.get('onChange')('', options);\n      options.valuePath = 'location.lng';\n      this.get('onChange')('', options);\n      options.valuePath = 'location.geoNode';\n      this.get('onChange')('', options);\n      record.set('lat', 0);\n      record.set('lng', 0);\n    },\n\n    enableAddressSearchOnMap(record, markerType) {\n      Ember.$('html,body,.tomtom-map,#speed-region').addClass('custom-cursor');\n      this.get('geocode').activateGeocode(true, record, markerType);\n      this.set('addressRecord', record);\n      this.addObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    disableAddressSearchOnMap(record, markerType) {\n      Ember.$('html,body,.tomtom-map,#speed-region').removeClass('custom-cursor');\n      this.get('geocode').activateGeocode(false, record, markerType);\n      this.set('addressRecord', null);\n      this.removeObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    /**\n     * address's position contains empty lat, lng, and lon .. need to check all values empty..\n     * Though correct address is selected, saveNewGeocode  is throwing error;\n     * @param record\n     * @returns {boolean}\n     */\n    isEmptyPosition(record) {\n      const position = record.get('address.position');\n      return Ember.isEmpty(position) || !position.lat && !position.lng && !position.lon;\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    actions: {\n      setValue(value) {\n        this.set('value', value);\n        this.setAddress();\n      },\n\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onAddressSelected(record, valuePath, value) {\n        if (this.get('useRecordWithId') && !Ember.isNone(value.get('id'))) {\n          this.set('record.place', value);\n          this.set('addresses', [value]);\n        } else {\n          this.convertTTAddressToModel(record, value).then(() => {\n            // reposition flag\n            if (!this.isEmptyPosition(record)) {\n              this.get('geocode').saveNewGeocode(record.get('address.position'), value);\n            }\n          }).then(() => {\n            // onChange is called for each field. this function is invoked after all fields are changed\n            const onRecordChanged = this.get('onRecordChanged');\n\n            if (onRecordChanged) {\n              onRecordChanged(value);\n            }\n          });\n        }\n      },\n\n      onPickOnMap(record) {\n        const activeGeocode = this.get('geocode.activeGeo');\n        const markerType = this.get('markerType');\n\n        if (activeGeocode) {\n          this.disableAddressSearchOnMap(record, markerType);\n        } else {\n          this.enableAddressSearchOnMap(record, markerType);\n        }\n      },\n\n      handleKeydown(record, valuePath, dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        }\n\n        const text = e.target.value;\n        const options = {\n          record,\n          valuePath: 'streetAddress'\n        };\n        this.get('onChange')(text, options);\n        this.set('addressRecord', record);\n        this.validateAddresses();\n      },\n\n      onDropDownOpen() {\n        this.set('addressOptions', []);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/addresses/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1XAb7BYv\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell edit\\\"],[11,\\\"style\\\",\\\"max-width: 210px;\\\"],[11,\\\"data-test-address-field\\\",\\\"\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"options\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"renderInPlace\\\",\\\"search\\\",\\\"selected\\\",\\\"onkeydown\\\",\\\"onopen\\\",\\\"onchange\\\"],[\\\"data-test-power-select form-control\\\",[23,[\\\"addressOptions\\\"]],[23,[\\\"isDisabledAddressSelect\\\"]],[23,[\\\"placeholder\\\"]],[23,[\\\"renderInPlace\\\"]],[27,\\\"perform\\\",[[23,[\\\"searchAddress\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"address\\\",\\\"address\\\",\\\"address\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"handleKeydown\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDropDownOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelected\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"format-address\\\",[[22,1,[]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showPinButton\\\"]]],null,{\\\"statements\\\":[[7,\\\"button\\\"],[11,\\\"class\\\",\\\"cell button\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disabled\\\"]],[23,[\\\"disableAddress\\\"]]],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"address\\\"]],[23,[\\\"activeGeo\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/addresses/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/availabilities/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-availabilities'],\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    dayOfWeeks: null,\n    availabilities: Ember.computed.readOnly('value'),\n    availabilityType: Ember.computed.readOnly('valuePath'),\n    startTimePath: Ember.computed.readOnly('extra.startTimePath'),\n    endTimePath: Ember.computed.readOnly('extra.endTimePath'),\n    shiftStartPath: Ember.computed.readOnly('extra.shiftStartPath'),\n    shiftEndPath: Ember.computed.readOnly('extra.shiftEndPath'),\n    sundayPath: Ember.computed.readOnly('extra.sundayPath'),\n    mondayPath: Ember.computed.readOnly('extra.mondayPath'),\n    tuesdayPath: Ember.computed.readOnly('extra.tuesdayPath'),\n    wednesdayPath: Ember.computed.readOnly('extra.wednesdayPath'),\n    thursdayPath: Ember.computed.readOnly('extra.thursdayPath'),\n    fridayPath: Ember.computed.readOnly('extra.fridayPath'),\n    saturdayPath: Ember.computed.readOnly('extra.saturdayPath'),\n\n    init() {\n      this.set('dayOfWeeks', ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']);\n      this.set('datePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.timeMoment);\n      this.set('dateFormat', _environment.default.dateTimeFormat.dateFlatPickr);\n      this.set('timeFormat', _environment.default.dateTimeFormat.timeFlatPickr);\n\n      this._super(...arguments);\n    },\n\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onChangeDate(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value[0], options);\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid) {\n          // $(`#${datePicker.element.id}`).focus();\n          this.set('editModal.errors', ['Date entered is invalid.']);\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          // date format is for database so should not be from config\n          datePicker.setDate(newValueMoment.toDate(), true);\n        } // $(datePicker.altInput.className).select();\n        // $(datePicker.element).select();\n        // $('.effective-start').select();\n\n      },\n\n      onChangeTime(record, valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(momentTime.format('HH:mm:ss'), options);\n      },\n\n      onCheckboxChange(record, valuePath) {\n        let switchState = record.get(valuePath);\n        const options = {\n          record,\n          valuePath\n        };\n        switchState = !switchState;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(switchState, options);\n      },\n\n      onDOWChange(record, values) {\n        record.set('sunday', values.includes('sunday'));\n        record.set('monday', values.includes('monday'));\n        record.set('tuesday', values.includes('tuesday'));\n        record.set('wednesday', values.includes('wednesday'));\n        record.set('thursday', values.includes('thursday'));\n        record.set('friday', values.includes('friday'));\n        record.set('saturday', values.includes('saturday'));\n        this.set('record.isForceDirty', true);\n      },\n\n      onAddNewAvailability() {\n        this.get('onCreate')();\n      },\n\n      onRemoveAvailability(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.get('onRemove')(value, options);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/availabilities/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"UlfQytpp\",\n    \"block\": \"{\\\"symbols\\\":[\\\"availability\\\",\\\"name\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 availabilities-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"availabilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Day of the Week\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-day-of-week\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"closeOnSelect\\\",\\\"onchange\\\"],[[23,[\\\"dayOfWeeks\\\"]],[22,1,[\\\"selectedDOWs\\\"]],\\\"Select some names...\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDOWChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Shift Start\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-shift-start-input\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"minuteIncrement\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",true,1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"shiftStartPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[22,1,[]],[23,[\\\"shiftStartPath\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Shift End\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-shift-end-input\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"minuteIncrement\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",true,1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"shiftEndPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[22,1,[]],[23,[\\\"shiftEndPath\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-start-date-input\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"startTimePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"startTimePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-end-date-input\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"endTimePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"endTimePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveAvailability\\\",[22,1,[]],[23,[\\\"shiftEndPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-remove\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          Remove\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewAvailability\\\",[23,[\\\"record\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary mt-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n        Add New Availability\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/availabilities/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/boolean-slider/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    booleanValue: Ember.computed.alias('value'),\n    sliderIdPath: Ember.computed.readOnly('extra.sliderId'),\n    actions: {\n      onSliderToggle(event) {\n        this.set('booleanValue', event.target.checked);\n        this.get('onChange')(this.get('booleanValue'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/boolean-slider/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"C4JHDoT0\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"onoffswitch\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"input\\\"],[12,\\\"id\\\",[21,\\\"sliderIdPath\\\"]],[11,\\\"class\\\",\\\"form-control onoffswitch-checkbox\\\"],[12,\\\"checked\\\",[21,\\\"booleanValue\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSliderToggle\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"onoffswitch-label\\\"],[12,\\\"for\\\",[21,\\\"sliderIdPath\\\"]],[9],[0,\\\"\\\\n    \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-inner\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-switch\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/boolean-slider/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/boolean/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-boolean'],\n    value: null,\n    disabled: false,\n    options: Ember.computed.alias('extra.options'),\n    selected: Ember.computed('value', 'options', function () {\n      const options = this.get('options');\n      if (!Ember.isEmpty(options)) return {};\n      return options.find(option => {\n        return option.value === this.get('value');\n      });\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(Ember.get(option, 'value'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/boolean/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"nescf5Oh\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[22,1,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/boolean/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/breakdown-location/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/zone-validation\"], function (_exports, _emberConcurrency, _zoneValidation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-breakdown-place'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    addressOptions: null,\n    notesReadOnly: false,\n    addressType: null,\n    address: null,\n    streetNumberPath: Ember.computed.readOnly('extra.streetNumberPath'),\n    streetAddressPath: Ember.computed.readOnly('extra.streetAddressPath'),\n    freeformAddressPath: Ember.computed.readOnly('extra.freeformAddressPath'),\n    tomtomFormattedAddressPath: Ember.computed.readOnly('extra.tomtomFormattedAddressPath'),\n    premisePath: Ember.computed.readOnly('extra.premisePath'),\n    streetNamePath: Ember.computed.readOnly('extra.streetNamePath'),\n    localityPath: Ember.computed.readOnly('extra.localityPath'),\n    regionPath: Ember.computed.readOnly('extra.regionPath'),\n    subRegionPath: Ember.computed.readOnly('extra.subRegionPath'),\n    postalCodePath: Ember.computed.readOnly('extra.postalCodePath'),\n    countryPath: Ember.computed.readOnly('extra.countryPath'),\n    defaultOptionsPath: Ember.computed.readOnly('extra.defaultOptionsPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n    useRecordWithId: Ember.computed.readOnly('extra.useRecordWithId'),\n    uneditable: Ember.computed.readOnly('extra.uneditable'),\n    locationsPath: 'latlng',\n    addressRecord: null,\n    selected: null,\n\n    geocodeAddressChange() {\n      const record = this.get('addressRecord');\n      const address = this.get('geocode.address');\n\n      if (!Ember.isEmpty(address) && !Ember.isEmpty(record)) {\n        this.convertTTAddressToModel(record, address).then(() => {\n          this.disableAddressSearchOnMap(record);\n        });\n      } else if (Ember.isEmpty(address)) {\n        this.set('address', null);\n        this.set('addressRecord', null);\n      }\n    },\n\n    saveReverseGeocodeAddress() {\n      this.geocodeAddressChange();\n      this.removeObserver('geocode.address', this.saveReverseGeocodeAddress);\n    },\n\n    validateAddresses() {\n      const record = this.get('address');\n      this.set('editModal.errors', []);\n\n      if (record.get('location.content.lat') === 0 || record.get('location.content.lng') === 0) {\n        this.get('editModal.errors').pushObject('Address does not have lat/lng. Please select position on the map.');\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      if (this.get('extra.notesReadOnly')) {\n        this.$().find('.locations-notes-row').addClass('row-hidden');\n      }\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const place = this.get('value');\n      this.set('address', place);\n      this.set('addressOptions', []);\n      this.get('addressOptions').push(place);\n      this.set('addressRecord', place); // reverse geocode the last position\n\n      if (place.get('address.position.lat')) {\n        this.get('geocode').saveNewGeocode(place.get('address.position'));\n        const valuePath = this.get('streetAddressPath');\n\n        if (Ember.isNone(place.get(valuePath))) {\n          this.addObserver('geocode.tomtomAddress', this, 'geocodeAddressChange');\n        }\n      }\n    },\n\n    willDestroyElement() {\n      this.get('geocode').deactivateGeocode();\n\n      this._super(...arguments);\n    },\n\n    addressSearchResults(results) {\n      this.set('addressOptions', results);\n    },\n\n    searchAddress: (0, _emberConcurrency.task)(function* (term) {\n      const result = yield this.get('geocode').geoCodingApi(term);\n      this.addressSearchResults(result);\n    }),\n    convertTTAddressToModel: function (record, ttAddress) {\n      const useOptionRecord = this.get('useOptionRecord');\n      const geocode = this.get('geocode');\n\n      if (Ember.isNone(ttAddress.id)) {\n        const valuePath = this.get('streetNumberPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n\n        if (ttAddress.address && ttAddress.address.freeformAddress) {\n          return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n            if (!Ember.isNone(result) || (!Ember.isNone(ttAddress.address.streetName) || !Ember.isNone(ttAddress.address.freeformAddress)) && !Ember.isNone(ttAddress.position.lat) && !Ember.isNone(ttAddress.position.lon)) {\n              this.set('record.isForceDirty', true);\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetNumber), options);\n              options.valuePath = this.get('premisePath');\n              this.get('onChange')(cleanFieldString(ttAddress.premise), options);\n              options.valuePath = this.get('streetNamePath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n              options.valuePath = this.get('localityPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n              options.valuePath = this.get('regionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countrySubdivisionName), options);\n              options.valuePath = this.get('subRegionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countrySecondarySubdivision), options);\n              options.valuePath = this.get('postalCodePath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.postalCode), options);\n              options.valuePath = this.get('countryPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countryCode), options);\n              options.valuePath = this.get('streetAddressPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n              options.valuePath = this.get('freeformAddressPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n              record.set('address.content.places.firstObject.location.lat', ttAddress.position.lat);\n              record.set('address.content.places.firstObject.location.lng', ttAddress.position.lon);\n              this.validateAddresses();\n            } else {\n              this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n              return;\n            }\n\n            geocode.activateGeocode(false, record);\n            this.set('addressOptions', ttAddress);\n          });\n        }\n      } else {\n        const valuePath = this.get('streetNumberPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n\n        if (ttAddress.tomtomFormattedAddress && ttAddress.tomtomFormattedAddress.address && ttAddress.tomtomFormattedAddress.address.freeformAddress) {\n          return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n            if (!Ember.isNone(result) || !Ember.isNone(ttAddress.streetName) && !Ember.isNone(ttAddress.locations.firstObject.lat) && !Ember.isNone(ttAddress.locations.firstObject.lng)) {\n              this.set('record.isForceDirty', true);\n              this.get('onChange')(cleanFieldString(ttAddress.streetNumber), options);\n              options.valuePath = this.get('premisePath');\n              this.get('onChange')(cleanFieldString(ttAddress.premise), options);\n              options.valuePath = this.get('streetNamePath');\n              this.get('onChange')(cleanFieldString(ttAddress.streetAddress), options);\n              options.valuePath = this.get('localityPath');\n              this.get('onChange')(cleanFieldString(ttAddress.locality), options);\n              options.valuePath = this.get('regionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.countrySubdivisionName), options);\n              options.valuePath = this.get('subRegionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.countrySecondarySubdivision), options);\n              options.valuePath = this.get('postalCodePath');\n              this.get('onChange')(cleanFieldString(ttAddress.postalCode), options);\n              options.valuePath = this.get('countryPath');\n              this.get('onChange')(cleanFieldString(ttAddress.countryCode), options);\n              record.set('address.content.places.firstObject.location.lat', ttAddress.locations.firstObject.lat);\n              record.set('address.content.places.firstObject.location.lng', ttAddress.locations.firstObject.lng);\n              this.validateAddresses();\n            } else {\n              this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n              return;\n            }\n\n            geocode.activateGeocode(false, record);\n            this.set('addressOptions', ttAddress);\n          });\n        }\n      }\n    },\n    clearAddressModel: function (record) {\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath\n      };\n      this.get('onChange')('', options);\n      options.valuePath = this.get('streetNamePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')('', options);\n      record.set('lat', 0);\n      record.set('lng', 0);\n    },\n\n    enableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').addClass('custom-cursor');\n      this.get('geocode').activateGeocode(true, record);\n      this.set('addressRecord', record);\n      this.addObserver('geocode.tomtomAddress', this, 'geocodeAddressChange');\n    },\n\n    disableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      this.get('geocode').activateGeocode(false, record);\n      this.set('addressRecord', null);\n      this.removeObserver('geocode.tomtomAddress', this, 'geocodeAddressChange');\n    },\n\n    tomtomAddressObserver: Ember.observer('geocode.address', function () {\n      this.geocodeAddressChange();\n    }),\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onAddressSelected(record, valuePath, value) {\n        const boundingBox = this.get('map.boundingBox');\n\n        if (this.get('useRecordWithId') && !Ember.isNone(value.get('id'))) {\n          this.set('record.place', value);\n          this.set('addresses', [value]);\n        } else {\n          if (!(0, _zoneValidation.insideZone)([value.position.lat, value.position.lon], boundingBox)) {\n            this.get('notifications').warning('Invalid Zone');\n            return;\n          }\n\n          this.convertTTAddressToModel(record, value).then(() => {\n            // reposition flag\n            this.get('geocode').saveNewGeocode(record.get('address.position'), value);\n          });\n        }\n      },\n\n      onPickOnMap(record) {\n        const activeGeocode = this.get('geocode.activeGeocode');\n\n        if (activeGeocode) {\n          this.disableAddressSearchOnMap(record, 'pick');\n        } else {\n          this.enableAddressSearchOnMap(record, 'pick');\n        }\n      },\n\n      handleKeydown(record, valuePath, dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/breakdown-location/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"sZdimf8s\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 places-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[11,\\\"data-test-address-field\\\",\\\"\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"options\\\",\\\"disabled\\\",\\\"search\\\",\\\"selected\\\",\\\"onkeydown\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",[23,[\\\"addressOptions\\\"]],[23,[\\\"uneditable\\\"]],[27,\\\"perform\\\",[[23,[\\\"searchAddress\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"tomtomFormattedAddressPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"handleKeydown\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelected\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"address\\\",\\\"freeformAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"address\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary places-inline-button\\\"],[12,\\\"disabled\\\",[21,\\\"uneditable\\\"]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/breakdown-location/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/bs-subscriptions/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DAILY_OPTIONS = {\n    everyDay: 'Every Day',\n    weekDay: 'Every WeekDay'\n  };\n  const FREQUENCY_OPTIONS = {\n    daily: 'daily',\n    weekly: 'weekly',\n    monthly: 'monthly'\n  };\n  const END_OPTIONS = {\n    noEnd: {\n      type: 'noEnd',\n      label: 'No end date'\n    },\n    endAfter: {\n      type: 'endAfter',\n      label: 'After number of occurences'\n    },\n    endBy: {\n      type: 'endBy',\n      label: 'By'\n    }\n  };\n  const WOM_OPTIONS = {\n    first: 'first',\n    second: 'second',\n    third: 'third',\n    fourth: 'fourth',\n    last: 'last'\n  };\n  const MONTHLY_TYPE_OPTIONS = {\n    dayOfMonth: 'dayOfMonth',\n    weekOfMonth: 'weekOfMonth'\n  };\n  const DAY_OF_WEEK_OPTIONS = {\n    sunday: 'sunday',\n    monday: 'monday',\n    tuesday: 'tuesday',\n    wednesday: 'wednesday',\n    thursday: 'thursday',\n    friday: 'friday',\n    saturday: 'saturday'\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-subscriptions'],\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    dayOfWeeks: null,\n    recurring: false,\n    subscriptions: Ember.computed.readOnly('value'),\n    recurringPath: Ember.computed.readOnly('extra.recurringPath'),\n    dailyConfigPath: Ember.computed.readOnly('extra.dailyConfigPath'),\n    availabilityType: Ember.computed.readOnly('valuePath'),\n    startTimePath: Ember.computed.readOnly('extra.startTimePath'),\n    endTimePath: Ember.computed.readOnly('extra.endTimePath'),\n    shiftStartPath: Ember.computed.readOnly('extra.shiftStartPath'),\n    shiftEndPath: Ember.computed.readOnly('extra.shiftEndPath'),\n    sundayPath: Ember.computed.readOnly('extra.sundayPath'),\n    mondayPath: Ember.computed.readOnly('extra.mondayPath'),\n    tuesdayPath: Ember.computed.readOnly('extra.tuesdayPath'),\n    wednesdayPath: Ember.computed.readOnly('extra.wednesdayPath'),\n    thursdayPath: Ember.computed.readOnly('extra.thursdayPath'),\n    fridayPath: Ember.computed.readOnly('extra.fridayPath'),\n    saturdayPath: Ember.computed.readOnly('extra.saturdayPath'),\n    startDatePath: Ember.computed.readOnly('extra.startDateTimePath'),\n    endDatePath: Ember.computed.readOnly('extra.endDateTimePath'),\n    exStartDatePath: Ember.computed.readOnly('extra.excludeStartDateTimePath'),\n    exEndDatePath: Ember.computed.readOnly('extra.excludeEndDateTimePath'),\n    selectedWOMPath: Ember.computed.readOnly('extra.selectedWOMPath'),\n    maxOccurencesPath: Ember.computed.readOnly('extra.maxOccurencesPath'),\n    separationCountPath: Ember.computed.readOnly('extra.separationCountPath'),\n    dayOfMonthPath: Ember.computed.readOnly('extra.dayOfMonthPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n\n    init() {\n      this._super(...arguments);\n\n      const recurring = this.get(`record.${this.get('valuePath')}.firstObject.${this.get('recurringPath')}`);\n      this.set('dayOfWeeks', [DAY_OF_WEEK_OPTIONS.sunday, DAY_OF_WEEK_OPTIONS.monday, DAY_OF_WEEK_OPTIONS.tuesday, DAY_OF_WEEK_OPTIONS.wednesday, DAY_OF_WEEK_OPTIONS.thursday, DAY_OF_WEEK_OPTIONS.friday, DAY_OF_WEEK_OPTIONS.saturday]);\n      this.set('dateTimePlaceHolder', _environment.default.dateTimeFlatPickr);\n\n      if (recurring) {\n        this.set('recurring', true);\n      } else {\n        this.set('recurring', false);\n      }\n\n      this.set('frequencyOptions', [FREQUENCY_OPTIONS.daily, FREQUENCY_OPTIONS.weekly, FREQUENCY_OPTIONS.monthly]);\n      this.set(this.get('dailyConfigPath'), FREQUENCY_OPTIONS.daily);\n      this.set('dailyDaysOptions', [DAILY_OPTIONS.everyDay, DAILY_OPTIONS.weekDay]);\n\n      if (!Ember.isEmpty(this.subscriptions)) {\n        this.subscriptions.forEach(subscription => {\n          // setup daily days\n          if (subscription.isEveryDay) {\n            subscription.set('dailyDays', DAILY_OPTIONS.everyDay);\n          } else {\n            subscription.set('dailyDays', DAILY_OPTIONS.weekDay);\n          } // setup exclude range dates\n\n\n          subscription.set('excludeRangeDate', [subscription.get(this.get('exStartDatePath')), subscription.get(this.get('exEndDatePath'))]); // setup end options\n\n          subscription.set('endOptions', [END_OPTIONS.noEnd, END_OPTIONS.endAfter, END_OPTIONS.endBy]); // setup what is the end option selected\n\n          if (!Ember.isNone(subscription.get(this.get('endDatePath')))) {\n            subscription.set('endSelected', END_OPTIONS.endBy);\n          } else if (!Ember.isNone(subscription.get(this.get('maxOccurencesPath')))) {\n            subscription.set('endSelected', END_OPTIONS.endAfter);\n          } else {\n            subscription.set('endSelected', END_OPTIONS.noEnd);\n          } // setup monthlyType\n\n\n          if (!Ember.isNone(subscription.get(this.get('dayOfMonthPath')))) {\n            subscription.set('monthlyType', MONTHLY_TYPE_OPTIONS.dayOfMonth);\n          } else {\n            subscription.set('monthlyType', MONTHLY_TYPE_OPTIONS.weekOfMonth);\n          }\n        });\n      }\n\n      this.set('weekOfMonthOptions', [WOM_OPTIONS.first, WOM_OPTIONS.second, WOM_OPTIONS.third, WOM_OPTIONS.fourth, WOM_OPTIONS.last]);\n      this.set('datePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.timeMoment);\n      this.set('dateFormat', _environment.default.dateTimeFormat.dateFlatPickr);\n    },\n\n    frequencyOptionChange(record) {\n      const frequency = record.get(this.get('dailyConfigPath'));\n\n      if (frequency === FREQUENCY_OPTIONS.daily || frequency === FREQUENCY_OPTIONS.weekly) {\n        record.set(this.get('separationCountPath'), 1);\n      } else if (frequency === FREQUENCY_OPTIONS.monthly) {\n        const daysOfWeeks = this.get('dayOfWeeks');\n\n        if (!Ember.isEmpty(daysOfWeeks)) {\n          daysOfWeeks.forEach(day => {\n            record.set(day, false);\n          });\n        }\n      }\n    },\n\n    actions: {\n      onInput(record, valuePath, monthlyType, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n        record.set('monthlyType', monthlyType);\n      },\n\n      onChangeDate(record, valuePath, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value[0], options);\n      },\n\n      onChangeRangeDate(record, startPath, endPath, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n\n        if (value.length === 2) {\n          let options = {\n            record,\n            valuePath: startPath,\n            useOptionRecord\n          };\n          this.get('onChange')(value[0], options);\n          options = {\n            record,\n            valuePath: endPath,\n            useOptionRecord\n          };\n          this.get('onChange')(value[1], options);\n          this.set('record.isForceDirty', true);\n        }\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid) {\n          this.set('editModal.errors', ['Date entered is invalid.']);\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          // date format is for database so should not be from config\n          datePicker.setDate(newValueMoment.format(_environment.default.dateTimeFormat.dateMoment), true);\n        }\n      },\n\n      onChangeTime(record, valuePath, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        const momentTime = (0, _moment.default)(value[0]);\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(momentTime.format('HH:mm:ss'), options);\n      },\n\n      onCheckboxChange(record, valuePath) {\n        const useOptionRecord = this.get('useOptionRecord');\n        let switchState = record.get(valuePath);\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        switchState = !switchState;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(switchState, options);\n      },\n\n      onDOWChange(record, values) {\n        const daysOfWeeks = this.get('dayOfWeeks');\n\n        if (!Ember.isEmpty(daysOfWeeks)) {\n          daysOfWeeks.forEach(day => {\n            record.set(day, false);\n          });\n        }\n\n        switch (values) {\n          case DAY_OF_WEEK_OPTIONS.sunday:\n            record.set('sunday', true);\n            break;\n\n          case DAY_OF_WEEK_OPTIONS.monday:\n            record.set('monday', true);\n            break;\n\n          case DAY_OF_WEEK_OPTIONS.tuesday:\n            record.set('tuesday', true);\n            break;\n\n          case DAY_OF_WEEK_OPTIONS.wednesday:\n            record.set('wednesday', true);\n            break;\n\n          case DAY_OF_WEEK_OPTIONS.thursday:\n            record.set('thursday', true);\n            break;\n\n          case DAY_OF_WEEK_OPTIONS.friday:\n            record.set('friday', true);\n            break;\n\n          case DAY_OF_WEEK_OPTIONS.saturday:\n            record.set('saturday', true);\n            break;\n\n          default:\n            break;\n        }\n\n        this.set('record.isForceDirty', true);\n      },\n\n      onAddNewAvailability() {\n        this.get('onCreate')();\n      },\n\n      // onRecurringChange(record, value){\n      //   record.set('recurring',value);\n      //   this.set('recurring',value);\n      // },\n      onFrequencyChange(record, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        const valuePath = this.get('dailyConfigPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('frequency', value);\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n        this.frequencyOptionChange(record);\n      },\n\n      onDailyOptionsChange(record, value) {\n        record.set('dailyDays', value);\n        this.frequencyOptionChange(record);\n      },\n\n      onEndOptionChange(record, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        record.set('endSelected', value);\n\n        if (value === END_OPTIONS.endBy) {\n          // null out max occurences\n          const valuePath = this.get('maxOccurencesPath');\n          const options = {\n            record,\n            valuePath,\n            useOptionRecord\n          };\n          this.get('onChange')(null, options);\n        } else if (value === END_OPTIONS.endAfter) {\n          // null out end date\n          const valuePath = this.get('endDatePath');\n          const options = {\n            record,\n            valuePath,\n            useOptionRecord\n          };\n          this.get('onChange')(null, options);\n        } else {\n          // no end option\n          let valuePath = this.get('endDatePath');\n          let options = {\n            record,\n            valuePath,\n            useOptionRecord\n          }; // null out end date\n\n          this.get('onChange')(null, options); // null out max occurences\n\n          valuePath = this.get('maxOccurencesPath');\n          options = {\n            record,\n            valuePath,\n            useOptionRecord\n          };\n          this.get('onChange')(null, options);\n          this.set('record.isForceDirty', true);\n        }\n\n        this.set('record.isForceDirty', true);\n      },\n\n      onWOMChange(record, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        const valuePath = this.get('selectedWOMPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onEnableSubscriptionChange(record) {\n        this.toggleProperty('recurring');\n        record.set(this.get('recurringPath'), this.get('recurring'));\n        const yesterdayDate = (0, _moment.default)().subtract(1, 'days');\n        record.set(this.get('endDatePath'), yesterdayDate.toDate());\n      },\n\n      onMonthlyTypeChange(record, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n\n        if (value === MONTHLY_TYPE_OPTIONS.dayOfMonth) {\n          const valuePath = this.get('selectedWOMPath');\n          const options = {\n            record,\n            valuePath,\n            useOptionRecord\n          };\n          this.get('onChange')(null, options);\n          record.set(this.get('dayOfMonthPath'), 1);\n        } else {\n          const valuePath = this.get('dayOfMonthPath');\n          const options = {\n            record,\n            valuePath,\n            useOptionRecord\n          };\n          this.get('onChange')(null, options);\n          record.set(this.get('selectedWOMPath'), WOM_OPTIONS.first);\n        }\n\n        this.set('record.isForceDirty', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/bs-subscriptions/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"AzTo7sUl\",\n    \"block\": \"{\\\"symbols\\\":[\\\"subscription\\\",\\\"option\\\",\\\"name\\\",\\\"name\\\",\\\"name\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"subscriptions-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"subscriptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"onoffswitch subscription-recurring\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"subscriptionSwitch\\\"],[11,\\\"class\\\",\\\"form-control countInput onoffswitch-checkbox\\\"],[12,\\\"checked\\\",[21,\\\"recurring\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onEnableSubscriptionChange\\\",[22,1,[]]],null]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"onoffswitch-label\\\"],[11,\\\"for\\\",\\\"subscriptionSwitch\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-inner\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-switch\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"recurring\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label cell-label-frequency\\\"],[9],[0,\\\"Frequency\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell subscription-frequency\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"frequencyOptions\\\"]],[22,1,[\\\"type\\\"]],\\\"Select some names...\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFrequencyChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,5,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"recurring\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"eq\\\",[[22,1,[\\\"type\\\"]],\\\"daily\\\"],null],[27,\\\"eq\\\",[[22,1,[\\\"type\\\"]],\\\"weekly\\\"],null]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"subscription-recur-on-label\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"Recur on the following days:\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"sunday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"sunday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Sun\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"monday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"monday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Mon\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"tuesday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"tuesday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Tue\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"wednesday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"wednesday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Wed\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"thursday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"thursday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Thu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"friday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"friday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Fri\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[22,1,[\\\"saturday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"saturday\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Sat\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"type\\\"]],\\\"monthly\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"dayOfMonth\\\",[22,1,[\\\"monthlyType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onMonthlyTypeChange\\\",[22,1,[]]],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"radio-button-group\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"radio-button-1-label\\\"],[9],[0,\\\"Day\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"1\\\"],[11,\\\"max\\\",\\\"31\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"dayOfMonthPath\\\"]]],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,1,[]],[23,[\\\"dayOfMonthPath\\\"]],\\\"dayOfMonth\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"radio-button-2-label\\\"],[9],[0,\\\"of every month\\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"weekOfMonth\\\",[22,1,[\\\"monthlyType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onMonthlyTypeChange\\\",[22,1,[]]],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"monthly-wom-line\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"radio-button-1-label\\\"],[9],[0,\\\"The\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"monthly-wom-select\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"weekOfMonthOptions\\\"]],[22,1,[\\\"selectedWOM\\\"]],\\\"Select week of the month...\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onWOMChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,4,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"monthly-dow-select\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"dayOfWeeks\\\"]],[22,1,[\\\"selectedDOWs\\\"]],\\\"Select some names...\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDOWChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"radio-button-2-label\\\"],[9],[0,\\\"of every month\\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"minuteIncrement\\\",\\\"locale\\\",\\\"allowInput\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[1,\\\"en\\\",true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"startDatePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"startDatePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell subscription-end\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"subscription-end-option\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[22,1,[\\\"endOptions\\\"]],[22,1,[\\\"endSelected\\\"]],\\\"Select some names...\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEndOptionChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"endSelected\\\",\\\"type\\\"]],\\\"endBy\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"endDatePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"endDatePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"endSelected\\\",\\\"type\\\"]],\\\"endAfter\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"1\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"maxOccurencesPath\\\"]]],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,1,[]],[23,[\\\"maxOccurencesPath\\\"]],\\\"weekOfMonth\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Exclude\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"minuteIncrement\\\",\\\"locale\\\",\\\"mode\\\",\\\"allowInput\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[1,\\\"en\\\",\\\"range\\\",true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[22,1,[\\\"excludeRangeDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRangeDate\\\",[22,1,[]],[23,[\\\"exStartDatePath\\\"]],[23,[\\\"exEndDatePath\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/bs-subscriptions/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/bs-travel-needs/component\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // status of travel needs within the UI\n  const STATUS_TYPE_EXISTING = 'existing'; // already part of rider\n\n  const STATUS_TYPE_AVAILABLE = 'available'; // available for rider to add\n\n  const STATUS_TYPE_ADDED = 'added'; // it will be added to rider once it is saved\n\n  const LEG_TRAVEL_NEED = 'leg-travel-need';\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-travel-need'],\n    store: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    pcaState: false,\n    serviceAnimalState: false,\n    travelNeedTypes: null,\n    passengerTypes: null,\n    travelNeeds: Ember.computed.readOnly('value'),\n    countPath: Ember.computed.readOnly('extra.countPath'),\n    travelNeedTypePath: Ember.computed.readOnly('extra.travelNeedTypePath'),\n    passengerTypePath: Ember.computed.readOnly('extra.passengerTypePath'),\n    modelName: Ember.computed.readOnly('field.modelName'),\n    equipments: Ember.computed('record.segment.leg.{equipments,newTravelNeeds}', 'record.{equipments,newTravelNeeds}', function () {\n      const equipments = this.get('record.segment.leg.equipments') || [];\n      const legTravelNeeds = this.get('record.segment.leg.legTravelNeeds') || [];\n      const recordEquipments = this.get('record.segment.equipments') || [];\n      const newTravelNeeds = this.get('record.segment.newTravelNeeds') || [];\n\n      if (equipments && legTravelNeeds) {\n        equipments.map(travelNeed => {\n          travelNeed.set('status', STATUS_TYPE_EXISTING);\n        });\n        legTravelNeeds.map(travelNeed => {\n          travelNeed.set('status', STATUS_TYPE_AVAILABLE);\n        });\n        return (0, _lodash.concat)(equipments, legTravelNeeds);\n      }\n\n      recordEquipments.map(travelNeed => {\n        travelNeed.set('status', STATUS_TYPE_EXISTING);\n      });\n      newTravelNeeds.map(travelNeed => {\n        travelNeed.set('status', STATUS_TYPE_AVAILABLE);\n      });\n      return (0, _lodash.concat)(recordEquipments, newTravelNeeds);\n    }),\n    newEquipments: Ember.computed('record.segment.{newTravelNeeds,leg.newTravelNeeds}', function () {\n      const legNewTravelNeeds = this.get('record.segment.leg.newTravelNeeds') || [];\n      const newTravelNeeds = this.get('record.segment.newTravelNeeds') || [];\n      let travelNeeds = [];\n\n      if (legNewTravelNeeds) {\n        travelNeeds = legNewTravelNeeds.filter(travelNeed => {\n          return travelNeed.get('passengerType.isClient') && !travelNeed.get('travelNeedType.isServiceAnimal') && travelNeed.get('status') === STATUS_TYPE_AVAILABLE;\n        });\n      }\n\n      travelNeeds = newTravelNeeds.filter(travelNeed => {\n        return travelNeed.get('passengerType.isClient') && !travelNeed.get('travelNeedType.isServiceAnimal') && travelNeed.get('status') === STATUS_TYPE_AVAILABLE;\n      });\n      return travelNeeds;\n    }),\n    extraPassengers: Ember.computed('record.segment.{extraPassengers,newTravelNeeds,leg.extraPassengers,leg.newTravelNeeds}', function () {\n      const legExtraPassengers = this.get('record.segment.leg.extraPassengers') || [];\n      const newTravelNeeds = this.get('record.segment.newTravelNeeds') || [];\n      const extraPassengers = this.get('record.segment.extraPassengers') || [];\n      let tempArray = null;\n\n      if (legExtraPassengers) {\n        tempArray = (0, _lodash.concat)(legExtraPassengers, newTravelNeeds);\n      } else tempArray = (0, _lodash.concat)(extraPassengers, newTravelNeeds);\n\n      const extraPassObjects = []; // arrange in specific order\n\n      extraPassObjects.push(tempArray.find(travelNeed => travelNeed.get('travelNeedType.isServiceAnimal')));\n      extraPassObjects.push(tempArray.find(travelNeed => travelNeed.get('passengerType.isPca')));\n      extraPassObjects.push(tempArray.find(travelNeed => travelNeed.get('passengerType.isCompanion')));\n      return extraPassObjects;\n    }),\n    init: function () {\n      this._super(...arguments);\n\n      const travelNeedTypeModelName = this.get('extra.travelNeedTypeModelName');\n      const passengerTypeModelName = this.get('extra.passengerTypeModelName');\n      this.set('travelNeedTypes', this.get('store').peekAll(travelNeedTypeModelName));\n      this.set('passengerTypes', this.get('store').peekAll(passengerTypeModelName));\n      this.setupNewEquipments();\n      this.setupNewExtraPassengers();\n    },\n    clientPassengerType: function () {\n      const passengerTypes = this.get('passengerTypes');\n      return passengerTypes.find(types => types.isClient);\n    },\n    serviceAnimalTravelNeedType: function () {\n      const travelNeedTypes = this.get('travelNeedTypes');\n      return travelNeedTypes.find(types => types.isServiceAnimal);\n    },\n    ambulatoryTravelNeedType: function () {\n      const travelNeedTypes = this.get('travelNeedTypes');\n      return travelNeedTypes.find(types => types.isAmbulatory);\n    },\n    pcaPassengerType: function () {\n      const passengerTypes = this.get('passengerTypes');\n      return passengerTypes.find(types => types.isPca);\n    },\n    companionPassengerType: function () {\n      const passengerTypes = this.get('passengerTypes');\n      return passengerTypes.find(types => types.isCompanion);\n    },\n    setupNewEquipments: function () {\n      const currentTravelNeeds = this.get('travelNeeds') || [];\n      const travelNeedTypes = this.get('travelNeedTypes') || [];\n      const newTravelNeeds = []; // add other travel need types that this person does not have\n      // with empty count\n\n      travelNeedTypes.map(travelNeedType => {\n        if (!travelNeedType.isServiceAnimal && !currentTravelNeeds.any(travelNeed => {\n          return travelNeed.get('travelNeedType.id') === travelNeedType.id;\n        })) {\n          const newRecord = this.get('store').createRecord(this.get('modelName'));\n          newRecord.set('travelNeedType', travelNeedType);\n          newRecord.set('passengerType', this.clientPassengerType());\n          newRecord.set('status', STATUS_TYPE_AVAILABLE);\n          newTravelNeeds.push(newRecord);\n        }\n      });\n      if (this.isLegTravelNeedModel(this.get('modelName'))) this.set('record.segment.leg.newTravelNeeds', newTravelNeeds);\n      this.set('record.newTravelNeeds', newTravelNeeds);\n    },\n    setupNewExtraPassengers: function () {\n      const currentTravelNeeds = this.get('travelNeeds') || [];\n      const travelNeeds = this.get('record.newTravelNeeds') || [];\n      const newTravelNeeds = [];\n      let retVal;\n      travelNeeds.forEach(travelNeed => {\n        newTravelNeeds.push(travelNeed);\n      }); // add service animal travel need type if this rider does not have\n      // in current travel needs. leave count as empty\n\n      retVal = currentTravelNeeds.find(travelNeed => travelNeed.get('travelNeedType.isServiceAnimal'));\n\n      if ((0, _lodash.isUndefined)(retVal)) {\n        const newRecord = this.get('store').createRecord(this.get('modelName'));\n        this.set('serviceAnimalState', false);\n        newRecord.set('travelNeedType', this.serviceAnimalTravelNeedType());\n        newRecord.set('passengerType', this.clientPassengerType());\n        newTravelNeeds.push(newRecord);\n      } else {\n        this.set('serviceAnimalState', retVal.get('count') > 0);\n      } // add pca passenger type for this rider if it does not have\n      // in current travel needs. leave count as empty\n\n\n      retVal = currentTravelNeeds.find(travelNeed => {\n        return travelNeed.get('passengerType.isPca');\n      });\n\n      if ((0, _lodash.isUndefined)(retVal)) {\n        const newRecord = this.get('store').createRecord(this.get('modelName'));\n        this.set('pcaState', false);\n        newRecord.set('travelNeedType', this.ambulatoryTravelNeedType());\n        newRecord.set('passengerType', this.pcaPassengerType());\n        newTravelNeeds.push(newRecord);\n      } else {\n        this.set('pcaState', retVal.get('count') > 0);\n      } // add companion passenger type for this rider if it does not have\n      // in current travel needs. leave count as empty\n\n\n      retVal = currentTravelNeeds.find(travelNeed => travelNeed.get('passengerType.isCompanion'));\n\n      if ((0, _lodash.isUndefined)(retVal)) {\n        const newRecord = this.get('store').createRecord(this.get('modelName'));\n        newRecord.set('travelNeedType', this.ambulatoryTravelNeedType());\n        newRecord.set('passengerType', this.companionPassengerType());\n        newTravelNeeds.push(newRecord);\n      }\n\n      if (this.isLegTravelNeedModel(this.get('modelName'))) this.set('record.segment.leg.newTravelNeeds', newTravelNeeds);\n      this.set('record.newTravelNeeds', newTravelNeeds);\n    },\n    isLegTravelNeedModel: function (modelName) {\n      return LEG_TRAVEL_NEED === modelName;\n    },\n    actions: {\n      onInput(record, valuePath, value) {\n        const useOptionRecord = true;\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(parseInt(value, 10), options);\n      },\n\n      onAddNewTravelNeed() {\n        const newEquipments = this.newEquipments() || [];\n        const travelNeed = newEquipments.find(currTravelNeed => {\n          return currTravelNeed.status === STATUS_TYPE_AVAILABLE && currTravelNeed.isEquipment;\n        });\n\n        if (!Ember.isNone(travelNeed)) {\n          travelNeed.set('status', STATUS_TYPE_ADDED);\n        }\n      },\n\n      onTravelNeedTypeChange(oldTravelNeed, newTravelNeed) {\n        oldTravelNeed.set('status', STATUS_TYPE_AVAILABLE);\n        oldTravelNeed.set('count', 0);\n        newTravelNeed.set('status', STATUS_TYPE_ADDED);\n      },\n\n      onRemoveTravelNeed(record, valuePath) {\n        const options = {\n          record,\n          valuePath\n        };\n\n        if (!Ember.isNone(record)) {\n          record.set('status', STATUS_TYPE_AVAILABLE);\n        }\n\n        this.get('onChange')(0, options);\n      },\n\n      onPCAChange(record, valuePath) {\n        const useOptionRecord = true;\n        this.toggleProperty('pcaState');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        const currValue = this.get('pcaState') ? 1 : 0;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(currValue, options);\n      },\n\n      onServiceAnimalChange(record, valuePath) {\n        const useOptionRecord = true;\n        this.toggleProperty('serviceAnimalState');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        const currValue = this.get('serviceAnimalState') ? 1 : 0;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(currValue, options);\n      },\n\n      onPassengerTypeChange(record, valuePath, value) {\n        const useOptionRecord = true;\n        const options = {\n          record,\n          valuePath\n        };\n        this.get('onChange')(value, options, useOptionRecord);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/bs-travel-needs/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Qp/A+UG3\",\n    \"block\": \"{\\\"symbols\\\":[\\\"travelNeed\\\",\\\"travelNeed\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-div\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 travel-need-table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label table-label\\\"],[9],[0,\\\"Equipments\\\"],[10],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"equipments\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"status\\\"]],\\\"existing\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"newEquipments\\\"]],[22,2,[]],[27,\\\"readonly\\\",[true],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,4,[\\\"travelNeedType\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[11,\\\"max\\\",\\\"10\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],[23,[\\\"countPath\\\"]]],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,2,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveTravelNeed\\\",[22,2,[]],[23,[\\\"countPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"status\\\"]],\\\"added\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"newEquipments\\\"]]],null],[27,\\\"readonly\\\",[[22,2,[]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedTypeChange\\\",[22,2,[]]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,3,[\\\"travelNeedType\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[11,\\\"max\\\",\\\"10\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],[23,[\\\"countPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"\\\"],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,2,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveTravelNeed\\\",[22,2,[]],[23,[\\\"countPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewTravelNeed\\\",[23,[\\\"record\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary trip-travel-need-btn mt-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n        Add New Travel Need\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-div\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 travel-need-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"extraPassengers\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,1,[\\\"isExtraPassenger\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"travelNeedType\\\",\\\"name\\\"]],\\\"serviceAnimal\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[22,1,[\\\"travelNeedType\\\",\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"onoffswitch\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"serviceAnimalSwitch\\\"],[11,\\\"class\\\",\\\"form-control countInput onoffswitch-checkbox\\\"],[12,\\\"checked\\\",[21,\\\"serviceAnimalState\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[\\\"travelNeedType\\\",\\\"name\\\"]],\\\"serviceAnimal\\\",[23,[\\\"ravelNeed\\\"]],[23,[\\\"countPath\\\"]]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onServiceAnimalChange\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"onoffswitch-label\\\"],[11,\\\"for\\\",\\\"serviceAnimalSwitch\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-inner\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-switch\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"passengerType\\\",\\\"name\\\"]],\\\"pca\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"PCA\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"onoffswitch\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"pcaSwitch\\\"],[11,\\\"class\\\",\\\"form-control countInput onoffswitch-checkbox\\\"],[12,\\\"checked\\\",[21,\\\"pcaState\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[\\\"passengerType\\\",\\\"name\\\"]],\\\"pca\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onPCAChange\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"onoffswitch-label\\\"],[11,\\\"for\\\",\\\"pcaSwitch\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-inner\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-switch\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Companion\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[11,\\\"max\\\",\\\"10\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"countPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"\\\"],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/bs-travel-needs/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/checkbox/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"09lt3HI+\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"type\\\",\\\"checked\\\"],[\\\"assign-vehicle-checkbox\\\",true,\\\"checkbox\\\",[23,[\\\"value\\\"]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/checkbox/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/combobox/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-combobox'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    dataFromModel: false,\n    options: Ember.computed.alias('extra.options'),\n\n    init() {\n      this._super(...arguments);\n\n      if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        this.set('dataFromModel', true);\n        this.set('options', this.get('store').peekAll(this.get('extra.optionModelName')));\n      }\n    },\n\n    actions: {\n      onChange(option) {\n        this.set('selected', option);\n      },\n\n      createNew(option) {\n        console.log('New option'); // eslint-disable-line no-console\n\n        this.options.push(option);\n      },\n\n      deleteOption(option) {\n        console.log('Delete option', option); // eslint-disable-line no-console\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/combobox/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8B6+J2gE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"power-select-with-create\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"onchange\\\",\\\"oncreate\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],true,\\\"label\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"createNew\\\"],null]]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex; justify-content:space-between;\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"data-option-index\\\",\\\"-1\\\"],[11,\\\"aria-disabled\\\",\\\"true\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"deleteComboItem\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"deleteOption\\\",[22,1,[]]],null]],[11,\\\"style\\\",\\\"border: none; background: transparent; width: 25px; padding: 0; margin: 0; margin-right: 5px;\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle\\\"],[11,\\\"style\\\",\\\"margin: auto 1rem;\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/combobox/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/date/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-datetimeflatpickr'],\n    editModal: Ember.inject.service(),\n    record: null,\n    value: null,\n    disabled: false,\n    defaultDate: null,\n    readonlyCell: false,\n    format: null,\n    maxDate: null,\n    minDate: null,\n    minDatePath: Ember.computed.readOnly('extra.minDatePath'),\n\n    init() {\n      this._super(...arguments);\n\n      const value = this.get('value') || '';\n      const disabled = this.get('disabled');\n      const format = this.get('format') || 'm/d/Y';\n      const record = this.get('record');\n      const minDatePath = this.get('minDatePath');\n      const minDate = minDatePath ? (0, _moment.default)(record.get(this.get('minDatePath'))).startOf('day') : (0, _moment.default)().subtract(125, 'years');\n      const placeholder = this.get('readonlyCell') ? '' : _environment.default.dateTimeFormat.dateMoment;\n      this.set('minDate', minDate.toDate());\n      this.set('value', value);\n      this.set('format', format);\n      this.set('disabled', disabled);\n      this.set('datePlaceholder', placeholder);\n    },\n\n    didUpdateAttrs() {\n      this.set('datePlaceHolder', (0, _moment.default)(this.value).format(_environment.default.dateTimeFormat.dateMoment));\n    },\n\n    actions: {\n      onOpenDatePickr(value) {\n        this.get('onOpen')(value[0]);\n      },\n\n      onChangeDate(value) {\n        // If it is readOnly we should not allow the value to be overwritten.\n        if (!this.get('readonlyCell')) {\n          this.get('onChange')(value[0]);\n        }\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        this.set('minDate', null);\n        this.set('maxDate', null);\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid && stringValue) {\n          this.set('editModal.errors', ['Date entered is invalid.']);\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          datePicker.setDate(newValueMoment.toDate(), true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/date/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"oO5Me2Hb\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"placeholder\\\",\\\"defaultDate\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"time_24hr\\\",\\\"date\\\",\\\"disabled\\\",\\\"minuteIncrement\\\",\\\"classNames\\\",\\\"clickOpens\\\",\\\"class\\\",\\\"onOpen\\\",\\\"onChange\\\",\\\"onClose\\\",\\\"readonly\\\"],[\\\"en\\\",true,[23,[\\\"datePlaceholder\\\"]],[23,[\\\"defaultDate\\\"]],[23,[\\\"format\\\"]],false,[23,[\\\"minDate\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"value\\\"]],[23,[\\\"disabled\\\"]],1,[23,[\\\"classNames\\\"]],[27,\\\"not\\\",[[23,[\\\"readonlyCell\\\"]]],null],[23,[\\\"classNames\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onOpenDatePickr\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],[23,[\\\"readonlyCell\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/date/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/dateflatpickr/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-datetimeflatpickr'],\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    defaultDate: null,\n    minDate: null,\n\n    init() {\n      this._super(...arguments);\n\n      const value = this.get('value') || (0, _moment.default)().toDate();\n      this.set('minDate', (0, _moment.default)(this.get('value')).startOf('day').toDate());\n      this.set('value', value);\n      this.set('dateFormat', _environment.default.dateTimeFormat.dateFlatPickr);\n      this.set('datePlaceholder', _environment.default.dateTimeFormat.dateMoment);\n    },\n\n    actions: {\n      onChangeDate(value) {\n        this.get('onChange')(value[0]);\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const errMessage = 'Date entered is invalid.';\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid) {\n          this.set('editModal.errors', [errMessage]);\n        } else {\n          const errors = this.get('editModal.errors') || [];\n          this.set('editModal.errors', errors.filter(item => item !== errMessage));\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          datePicker.setDate(newValueMoment.toDate(), true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/dateflatpickr/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"X5FzQqeF\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"time_24hr\\\",\\\"enableTime\\\",\\\"minDate\\\",\\\"date\\\",\\\"minuteIncrement\\\",\\\"classNames\\\",\\\"class\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",true,[23,[\\\"datePlaceholder\\\"]],[23,[\\\"dateFormat\\\"]],true,false,[23,[\\\"minDate\\\"]],[23,[\\\"value\\\"]],1,[23,[\\\"classNames\\\"]],[23,[\\\"classNames\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/dateflatpickr/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/datetime/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DATETIME_FORMAT = /^\\d\\d\\\\d\\d\\\\d\\d\\\\d\\d\\d\\d \\d\\d:\\d\\d$/;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-datetime'],\n    value: null,\n    disabled: false,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    actions: {\n      onInput(value) {\n        if (!DATETIME_FORMAT.test(value)) return;\n        this.get('onChange')((0, _moment.default)(value, _environment.default.dateTimeFormat.dateTimeMoment).toDate());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/datetime/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"knWME0dY\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"value\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/datetime/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/datetimeflatpickr/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _moment, _environment, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly\n  } = Ember.computed;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-datetimeflatpickr'],\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    defaultDate: null,\n    maxDate: null,\n    minDate: null,\n    clickOpens: true,\n    format: null,\n    extra: null,\n    readonlyCell: false,\n    minTimePath: readOnly('extra.minTimePath'),\n    maxTimePath: readOnly('extra.maxTimePath'),\n    routeStartFlag: readOnly('extra.routeStartFlag'),\n\n    init() {\n      this._super(...arguments);\n\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('record')); //this \"path\"/flag is set only to allow this component to know that it is the edit form,\n      //otherwise we end up with both start and end datetimeflatpickrs made read-only, when it should just be start\n\n      const routeStartFlag = this.get('routeStartFlag');\n      const computedReadOnlyCell = record.get('computedReadOnlyCell') && routeStartFlag;\n      const minTimePath = this.get('minTimePath');\n      const maxDateTimePath = this.get('maxTimePath');\n\n      const format = this.get('format') || _environment.default.dateTimeFormat.dateTimeFlatPickr; // time needs to be inclusive, so we cut seconds off\n\n\n      const minDateValue = minTimePath ? record.get(`${minTimePath}`) : this.get('value');\n      const maxDateValue = maxDateTimePath ? record.get(`${maxDateTimePath}`) : null;\n      const minDate = _moment.default.isMoment(minDateValue) ? minDateValue.toDate() : minDateValue;\n      let maxDate = null;\n\n      if (maxDateValue) {\n        maxDate = _moment.default.isMoment(maxDateValue) ? maxDateValue.toDate() : maxDateValue;\n      }\n\n      this.set('dateFormat', format);\n      this.set('minDate', minDate);\n      this.set('maxDate', maxDate);\n      this.set('readonlyCell', computedReadOnlyCell || this.get('readonlyCell'));\n\n      if (this.get('readonlyCell')) {\n        this.set('clickOpens', false);\n      }\n    },\n\n    didRender() {\n      this._super(...arguments);\n\n      this.setValueWhenBlank();\n    },\n\n    // TODO: remove this workaround when flatpickr got upgraded.\n    setValueWhenBlank() {\n      if (this.$('input.ember-flatpickr-input')[0].value === '') {\n        const value = (0, _moment.default)(this.get('value')).format(_environment.default.dateTimeFormat.dateTimeMoment);\n        this.$('input.ember-flatpickr-input')[0].value = value;\n      }\n    },\n\n    actions: {\n      isValidDate(value) {\n        const newValueMoment = (0, _moment.default)(value);\n\n        if (newValueMoment._isValid) {\n          this.set('value', newValueMoment.toDate());\n        }\n      },\n\n      onChangeDate() {},\n\n      onClose(currentValue, stringValue) {\n        const newValueMoment = (0, _moment.default)(stringValue);\n        const hasMinDate = this.get('minDate');\n        const hasMaxDate = this.get('maxDate');\n\n        if (!hasMinDate && !hasMaxDate) {\n          if (!newValueMoment._isValid) {\n            this.set('editModal.errors', ['Date entered is invalid.']);\n            return;\n          }\n        }\n\n        this.get('onChange')(new Date(currentValue));\n        Ember.run.later(this, function () {\n          this.setValueWhenBlank();\n        }, 300);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/datetimeflatpickr/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"o1DMfQrI\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"datepickr-tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"label\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[21,\\\"label\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"dateFormat\\\",\\\"readonly\\\",\\\"clickOpens\\\",\\\"enableTime\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"dateFormat\\\"]],[23,[\\\"readonlyCell\\\"]],[23,[\\\"clickOpens\\\"]],true,[23,[\\\"minDate\\\"]],[23,[\\\"maxDate\\\"]],[23,[\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/datetimeflatpickr/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/driverenum/component\", [\"exports\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\"], function (_exports, _fetchAssignableVehicleDrivers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    classNames: ['form-components-select'],\n    store: Ember.inject.service(),\n    drivers: null,\n    value: null,\n    disabled: false,\n    extra: null,\n    dataFromModel: false,\n    options: Ember.computed.alias('extra.options'),\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    onlyAssignableDrivers: Ember.computed.readOnly('extra.onlyAssignableDrivers'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n    provider: Ember.computed.readOnly('record.route.provider'),\n    //used in fetch vehicle driver mixin\n    plannedStartTime: Ember.computed.readOnly('record.replacementStartTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('record.replacementEndTime'),\n\n    //used in fetch vehicle driver mixin\n    init() {\n      this._super(...arguments);\n\n      const onlyAssignableDrivers = this.get('onlyAssignableDrivers');\n\n      if (onlyAssignableDrivers) {\n        this.get('fetchDriversTask').perform();\n      }\n    },\n\n    availableDrivers: Ember.computed('plannedStartTime', 'plannedEndTime', 'drivers.[]', function () {\n      const onlyAssignableDrivers = this.get('onlyAssignableDrivers');\n      if (!onlyAssignableDrivers) return this.get('store').peekAll(this.get('extra.optionModelName'));\n      const drivers = this.get('drivers');\n      if (!drivers || !drivers.length) return [];\n\n      if (this.get('record.computedStatus') === 'Breakdown') {\n        drivers.push(this.get('record.assignedDriver'));\n        return drivers;\n      }\n    }),\n    selected: Ember.computed('value', 'options', function () {\n      if (!Ember.isNone(this.get('extra.optionModelName')) && !Ember.isNone(this.get('options'))) {\n        return this.get('options').find(option => {\n          return option.id === this.get('value.id');\n        });\n      }\n\n      return false;\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/driverenum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"gWPS9asn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],true],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"searchField\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[23,[\\\"availableDrivers\\\"]],\\\"driverId\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,2,[\\\"driverId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],false],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"searchField\\\",\\\"options\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],\\\"driverId\\\",[27,\\\"readonly\\\",[[23,[\\\"availableDrivers\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,1,[\\\"driverId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/driverenum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/eligibilities/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-eligibilities'],\n    store: Ember.inject.service(),\n    value: null,\n    eligibilityTypes: null,\n    eligibilities: Ember.computed.readOnly('value'),\n    fromPath: Ember.computed.readOnly('extra.fromPath'),\n    toPath: Ember.computed.readOnly('extra.toPath'),\n    eligibilityTypePath: Ember.computed.readOnly('extra.eligibilityTypePath'),\n\n    init() {\n      this.set('datePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.timeMoment);\n      this.set('dateFormat', _environment.default.dateTimeFormat.dateFlatPickr);\n      this.set('timeFormat', _environment.default.dateTimeFormat.timeFlatPickr);\n\n      this._super(...arguments);\n    },\n\n    didInsertElement: function () {\n      const eligibilityTypeModelName = this.get('extra.eligibilityTypeModelName');\n      this.set('eligibilityTypes', this.get('store').peekAll(eligibilityTypeModelName));\n    },\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.get('onChange')(value, options);\n      },\n\n      onChangeDate(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value[0], options);\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid) {\n          // $(`#${datePicker.element.id}`).focus();\n          this.set('editModal.errors', ['Date entered is invalid.']);\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          // date format is for database so should not be from config\n          datePicker.setDate(newValueMoment.format(_environment.default.dateTimeFormat.dateMoment), true);\n        } // $(datePicker.altInput.className).select();\n        // $(datePicker.element).select();\n        // $('.effective-start').select();\n\n      },\n\n      onAddNewEligibility() {\n        const eligibility = this.get('onCreate')();\n        eligibility.set('eligibilityType', '');\n      },\n\n      onRemoveEligibility(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        record.deleteRecord();\n        this.get('onRemove')(value, options);\n      },\n\n      onEligibilityTypeChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/eligibilities/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YdfFK4Hc\",\n    \"block\": \"{\\\"symbols\\\":[\\\"eligibility\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 eligibility-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"eligibilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Eligibility Type\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"eligibilityTypePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"eligibilityTypes\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityTypeChange\\\",[22,1,[]],[23,[\\\"eligibilityTypePath\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-eligibilityFrom-input\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"fromPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"fromPath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-eligibilityTo-input\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"toPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"toPath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveEligibility\\\",[22,1,[]],[23,[\\\"eligibilityTypePath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-remove\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          Remove\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewEligibility\\\",[23,[\\\"record\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary mt-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n        Add New Eligibility\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/eligibilities/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/enum/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-select'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    dataFromModel: false,\n    readonlyCell: false,\n    options: Ember.computed.alias('extra.options'),\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n    optionDisplayName: Ember.computed.alias('extra.optionDisplayName'),\n    optionSearchPath: Ember.computed.alias('extra.optionSearchPath'),\n    optionReadonlyCellPath: Ember.computed.alias('extra.optionReadonlyCellPath'),\n\n    init() {\n      this._super(...arguments);\n\n      if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        this.set('dataFromModel', true);\n        this.set('options', this.get('store').peekAll(this.get('extra.optionModelName')));\n      }\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      if (!Ember.isNone(this.get('optionReadonlyCellPath'))) {\n        this.set('readonlyCell', this.get(`record.${this.get('optionReadonlyCellPath')}`));\n      }\n    },\n\n    isDisabledreadonlyEnumCell: Ember.computed('disabled', 'readonlyCell', function () {\n      const disabled = this.get('disabled');\n      const readonlyCell = this.get('readonlyCell');\n      return disabled || readonlyCell;\n    }),\n    selected: Ember.computed('value', 'options', function () {\n      if (!Ember.isNone(this.get('extra.optionModelName')) && !Ember.isNone(this.get('options'))) {\n        return this.get('options').find(option => {\n          return option.id === this.get('value.id');\n        });\n      }\n\n      return false;\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/enum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"RiVwbPxO\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],true],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\",\\\"searchField\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null],[23,[\\\"isDisabledreadonlyEnumCell\\\"]],[23,[\\\"optionSearchPath\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"optionDisplayName\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"get\\\",[[22,2,[]],[23,[\\\"optionDisplayName\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],false],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"onchange\\\",\\\"searchField\\\"],[[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[23,[\\\"isDisabledreadonlyEnumCell\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null],[23,[\\\"optionSearchPath\\\"]]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/enum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/location-pick/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    addressService: Ember.inject.service('address'),\n    notifications: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    geocode: Ember.inject.service(),\n    searchResults: null,\n    disabled: false,\n    // Component properties to control address search and marker/pin display.\n    removeAddress: false,\n    removeMarker: false,\n    activeMarker: null,\n    selectedStartLocation: null,\n    selectedEndLocation: null,\n    // Component properties to control styleing od address search and marker/pin.\n    styleAddressCell: '',\n    styleAddress: '',\n    styleMarker: '',\n    // Component properties to provide result back to called function.\n    onPickSearch: null,\n    onAddressSearch: null,\n    isHidePicker: false,\n    // Fetch map from workspace, is map widget is used.\n    map: Ember.computed.readOnly('workspace.activeContext.topActiveContext.map'),\n    mapResetLayers: Ember.computed.readOnly('workspace.activeContext.topActiveContext.mapResetLayers'),\n    selectedAddress: Ember.computed('selectAddress', 'selectedStartLocation', 'selectedEndLocation', function () {\n      if (Ember.get(this, 'selectAddress')) return Ember.get(this, 'selectAddress');\n\n      if (Ember.get(this, 'selectedStartLocation')) {\n        this.addPinMarker(Ember.get(this, 'selectedStartLocation').latlng);\n        return Ember.get(this, 'selectedStartLocation');\n      }\n\n      if (Ember.get(this, 'selectedEndLocation')) {\n        this.addPinMarker(Ember.get(this, 'selectedEndLocation').latlng);\n        return Ember.get(this, 'selectedEndLocation');\n      }\n\n      return [];\n    }),\n    resetLocation: Ember.observer('canResetAddress', 'workspace.activeContext.topActiveContext.resetLocation', function () {\n      if (Ember.get(this, 'canResetAddress') || Ember.get(this, 'workspace.activeContext.topActiveContext.resetLocation')) {\n        Ember.set(this, 'selectAddress', []);\n        const map = Ember.get(this, 'map.native');\n        const layers = Ember.get(this, 'mapResetLayers');\n        if (map && layers) map.eachLayer(layer => {\n          if (layer.myCustomID) layer.remove();\n        });\n\n        if (Ember.get(this, 'workspace.activeContext.topActiveContext.resetLocation')) {\n          Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n          Ember.set(this, 'workspace.activeContext.topActiveContext.resetLocation', false);\n          this.notifyPropertyChange('workspace.activeContext.topActiveContext.resetLocation');\n        }\n      }\n    }),\n    resetMapFlag: Ember.observer('canReset', 'workspace.activeContext.topActiveContext.resetMapFlag', function () {\n      if (Ember.get(this, 'canReset') || Ember.get(this, 'workspace.activeContext.topActiveContext.resetMapFlag')) {\n        const map = Ember.get(this, 'map.native');\n        const layers = Ember.get(this, 'mapResetLayers');\n        if (map && layers) map.eachLayer(layer => {\n          if (layer.myCustomID) layer.remove();\n        });\n\n        if (Ember.get(this, 'workspace.activeContext.topActiveContext.resetMapFlag')) {\n          Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n          Ember.set(this, 'workspace.activeContext.topActiveContext.resetMapFlag', false);\n          this.notifyPropertyChange('workspace.activeContext.topActiveContext.resetMapFlag');\n        }\n      }\n    }),\n    searchTask: (0, _emberConcurrency.task)(function* (term) {\n      const searchText = term.toString().trim(); // can't do a blank search\n\n      if (Ember.isEmpty(searchText)) {\n        return;\n      } // TODO: change center for fuzzySearch\n\n\n      const results = yield this.get('addressService').fuzzySearch(searchText, {\n        limit: 25\n      });\n      return results;\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    addressLocated(address) {\n      Ember.set(this, 'selectAddress', address);\n      this.onPickSearch(address);\n    },\n\n    searchCenterObserver(coord) {\n      const searchCenter = coord;\n      Ember.get(this, 'addressService').reverseGeocode(searchCenter).then(this.addressLocated.bind(this));\n    },\n\n    addPinMarker(latlng) {\n      if (!latlng || !latlng.lat || !latlng.lng) {\n        // this.get('notifications').warning('Unable to mark address on map latitute and longitude not present');\n        return;\n      }\n\n      const map = this.get('map.native');\n      const pintPointIcon = {\n        icon: new bemap.Icon({\n          src: '/map-icons/icon-pinpoint.svg',\n          anchorX: 0.5,\n          anchorY: 1,\n          height: 30,\n          width: 30,\n          anchorXUnits: 'fraction',\n          anchorYUnits: 'fraction',\n          scale: 1\n        }),\n        keyboard: false,\n        interactive: false\n      };\n      const coord = new bemap.Coordinate(latlng.lng, latlng.lat);\n      const tomtomMarker = new bemap.Marker(coord, pintPointIcon);\n      map.panTo(new window.L.LatLng(latlng.lat, latlng.lng));\n      Ember.set(this, 'geocode.activeMarker', tomtomMarker);\n      Ember.set(this, 'mapService.topMapContext.lat', latlng.lat);\n      Ember.set(this, 'mapService.topMapContext.lng', latlng.lng);\n      Ember.set(this, 'mapService.topMapContext.centerLat', latlng.lat);\n      Ember.set(this, 'mapService.topMapContext.centerLng', latlng.lng);\n    },\n\n    setSearchCenter(coord) {\n      if (Ember.get(this, 'searchCenter')) {\n        Ember.get(this, 'searchCenter').remove();\n      }\n\n      const map = Ember.get(this, 'map.native');\n      if (!map) return;\n      Ember.set(this, 'searchCenter', this.addPinMarker(coord));\n      Ember.set(this, 'markerLocation', { ...coord,\n        lon: coord.lng\n      });\n      this.searchCenterObserver(coord);\n    },\n\n    actions: {\n      onAddressSelected(record) {\n        const lat = record.get('lat');\n        const lng = record.get('lng');\n        this.set('selectAddress', record);\n        this.onAddressSearch(record);\n\n        if (!this.get('isHidePicker')) {\n          this.addPinMarker({\n            lat,\n            lng\n          });\n        }\n      },\n\n      pickOnMap() {\n        const mapNative = this.get('map.native');\n        const map = this.get('map');\n\n        if (this.get('geocode.activeMarker')) {\n          map.removeMarker(this.get('geocode.activeMarker'));\n        }\n\n        Ember.set(this, 'isSearchingLocation', !Ember.get(this, 'isSearchingLocation'));\n\n        if (Ember.get(this, 'isSearchingLocation')) {\n          Ember.$('html,body,.tomtom-map').addClass('pinpoint-cursor');\n          mapNative.on('click', e => {\n            if (mapNative) {\n              this.setSearchCenter(e.latlng);\n              Ember.set(this, 'isSearchingLocation', false);\n              Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n              mapNative.off('click');\n            }\n          });\n        } else {\n          Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n          mapNative.off('click');\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/location-pick/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"y4V9Ipoo\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"w-100\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[12,\\\"class\\\",[28,[\\\"edit-cell p-0 \\\",[21,\\\"styleAddressCell\\\"]]]],[11,\\\"data-test-address-field\\\",\\\"\\\"],[12,\\\"aria-hidden\\\",[28,[[21,\\\"removeAddress\\\"]]]],[11,\\\"width\\\",\\\"90%\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"location-box d-flex align-items-center\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"search\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",\\\"Address\\\",[23,[\\\"searchResults\\\"]],[23,[\\\"disabled\\\"]],[27,\\\"perform\\\",[[23,[\\\"searchTask\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"selectedAddress\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelected\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,1,[\\\"freeformAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"isHidePicker\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"pickOnMap\\\",[23,[\\\"address\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[12,\\\"aria-hidden\\\",[28,[[21,\\\"removeMarker\\\"]]]],[12,\\\"class\\\",[28,[\\\"btn btn-outline-secondary places-button \\\",[21,\\\"styleMarker\\\"]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/location-pick/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/locations/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/zone-validation\"], function (_exports, _emberConcurrency, _zoneValidation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-places'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    addressOptions: null,\n    notesReadOnly: false,\n    addressType: null,\n    address: null,\n    addressLabel: Ember.computed.readOnly('field.label'),\n    streetNumberPath: Ember.computed.readOnly('extra.streetNumberPath'),\n    streetAddressPath: Ember.computed.readOnly('extra.streetAddressPath'),\n    tomtomFormattedAddressPath: Ember.computed.readOnly('extra.tomtomFormattedAddressPath'),\n    premisePath: Ember.computed.readOnly('extra.premisePath'),\n    streetNamePath: Ember.computed.readOnly('extra.streetNamePath'),\n    localityPath: Ember.computed.readOnly('extra.localityPath'),\n    regionPath: Ember.computed.readOnly('extra.regionPath'),\n    subRegionPath: Ember.computed.readOnly('extra.subRegionPath'),\n    postalCodePath: Ember.computed.readOnly('extra.postalCodePath'),\n    countryPath: Ember.computed.readOnly('extra.countryPath'),\n    freeformAddressPath: Ember.computed.readOnly('extra.freeformAddressPath'),\n    defaultOptionsPath: Ember.computed.readOnly('extra.defaultOptionsPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n    useRecordWithId: Ember.computed.readOnly('extra.useRecordWithId'),\n    locationsPath: 'latlng',\n    addressRecord: null,\n    selected: null,\n\n    geocodeAddressChange() {\n      const record = this.get('addressRecord');\n      const address = this.get('geocode.address');\n\n      if (!Ember.isEmpty(address)) {\n        this.convertTTAddressToModel(record, address).then(() => {\n          this.disableAddressSearchOnMap(record, record.get('type'));\n        });\n      }\n    },\n\n    saveReverseGeocodeAddress() {\n      this.geocodeAddressChange();\n      this.removeObserver('geocode.address', this.saveReverseGeocodeAddress);\n    },\n\n    validateAddresses() {\n      const record = this.get('address');\n      this.set('editModal.errors', []);\n\n      if (record.get('location.content.lat') === 0 || record.get('location.content.lng') === 0) {\n        this.get('editModal.errors').pushObject('Address does not have lat/lng. Please select position on the map.');\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      if (this.get('extra.notesReadOnly')) {\n        this.$().find('.locations-notes-row').addClass('row-hidden');\n      }\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const place = this.get('value');\n      this.set('address', place);\n      this.set('addressOptions', []);\n\n      if (!Ember.isNone(place)) {\n        this.get('addressOptions').push(place);\n      }\n    },\n\n    willDestroyElement() {\n      this.get('geocode').deactivateGeocode();\n\n      this._super(...arguments);\n    },\n\n    addressSearchResults(results) {\n      this.set('addressOptions', results);\n    },\n\n    searchAddress: (0, _emberConcurrency.task)(function* (term) {\n      const result = yield this.get('geocode').geoCodingApi(term);\n      this.addressSearchResults(result);\n    }),\n    convertTTAddressToModel: function (record, ttAddress) {\n      const useOptionRecord = this.get('useOptionRecord');\n      const geocode = this.get('geocode');\n\n      if (Ember.isNone(ttAddress.id)) {\n        const valuePath = this.get('streetNumberPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n\n        if (ttAddress.address && ttAddress.address.freeformAddress) {\n          return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n            if (!Ember.isNone(result)) {\n              this.set('record.isForceDirty', true);\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetNumber), options);\n              options.valuePath = this.get('premisePath');\n              this.get('onChange')(cleanFieldString(ttAddress.premise), options);\n              options.valuePath = this.get('streetNamePath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n              options.valuePath = this.get('localityPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n              options.valuePath = this.get('regionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countrySubdivisionName), options);\n              options.valuePath = this.get('subRegionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countrySecondarySubdivision), options);\n              options.valuePath = this.get('postalCodePath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.postalCode), options);\n              options.valuePath = this.get('countryPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countryCode), options);\n              options.valuePath = this.get('streetAddressPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n\n              if (this.get('freeformAddressPath')) {\n                options.valuePath = this.get('freeformAddressPath');\n                this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n              }\n\n              record.set('location.lat', ttAddress.position.lat);\n              record.set('location.lng', ttAddress.position.lon);\n              this.validateAddresses();\n            } else {\n              this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n              return;\n            }\n\n            geocode.activateGeocode(false, record, 'pick');\n            this.set('addressOptions', ttAddress);\n          });\n        }\n      }\n\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath,\n        useOptionRecord\n      };\n\n      if (ttAddress.tomtomFormattedAddress && ttAddress.tomtomFormattedAddress.address && ttAddress.tomtomFormattedAddress.address.freeformAddress) {\n        return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n          if (!Ember.isNone(result)) {\n            this.set('record.isForceDirty', true);\n            this.get('onChange')(cleanFieldString(ttAddress.streetNumber), options);\n            options.valuePath = this.get('premisePath');\n            this.get('onChange')(cleanFieldString(ttAddress.premise), options);\n            options.valuePath = this.get('streetNamePath');\n            this.get('onChange')(cleanFieldString(ttAddress.streetAddress), options);\n            options.valuePath = this.get('localityPath');\n            this.get('onChange')(cleanFieldString(ttAddress.locality), options);\n            options.valuePath = this.get('regionPath');\n            this.get('onChange')(cleanFieldString(ttAddress.countrySubdivisionName), options);\n            options.valuePath = this.get('subRegionPath');\n            this.get('onChange')(cleanFieldString(ttAddress.countrySecondarySubdivision), options);\n            options.valuePath = this.get('postalCodePath');\n            this.get('onChange')(cleanFieldString(ttAddress.postalCode), options);\n            options.valuePath = this.get('countryPath');\n            this.get('onChange')(cleanFieldString(ttAddress.countryCode), options);\n\n            if (this.get('freeformAddressPath')) {\n              options.valuePath = this.get('freeformAddressPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n            }\n\n            record.set('location.lat', ttAddress.locations.firstObject.lat);\n            record.set('location.lng', ttAddress.locations.firstObject.lng);\n            this.validateAddresses();\n          } else {\n            this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n            return;\n          }\n\n          geocode.activateGeocode(false, record, 'pick');\n          this.set('addressOptions', ttAddress);\n        });\n      }\n    },\n    clearAddressModel: function (record) {\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath\n      };\n      this.get('onChange')('', options);\n      options.valuePath = this.get('streetNamePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')('', options);\n      record.set('lat', 0);\n      record.set('lng', 0);\n    },\n\n    enableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').addClass('custom-cursor');\n      this.get('geocode').activateGeocode(true, record, 'pick');\n      this.set('addressRecord', record);\n      this.addObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    disableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      this.get('geocode').activateGeocode(false, record, 'pick');\n      this.set('addressRecord', null);\n      this.removeObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onAddressSelected(record, valuePath, value) {\n        const boundingBox = this.get('map.boundingBox');\n\n        if (this.get('useRecordWithId') && !Ember.isNone(value.get('id'))) {\n          this.set('record.place', value);\n          this.set('addresses', [value]);\n        } else {\n          if (!(0, _zoneValidation.insideZone)([value.position.lat, value.position.lon], boundingBox)) {\n            this.get('notifications').warning('Invalid Zone');\n            return;\n          }\n\n          this.convertTTAddressToModel(record, value).then(() => {\n            // reposition flag\n            this.get('geocode').saveNewGeocode(record.get('address.position'), value);\n          });\n        }\n      },\n\n      onPickOnMap(record) {\n        const activeGeocode = this.get('geocode.activeGeocode');\n\n        if (activeGeocode) {\n          this.disableAddressSearchOnMap(record, 'pick');\n        } else {\n          this.enableAddressSearchOnMap(record, 'pick');\n        }\n      },\n\n      handleKeydown(record, valuePath, dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        }\n\n        const text = e.target.value;\n        const options = {\n          record,\n          valuePath: 'streetAddress'\n        }; // address has been forced without geocodes\n        // this.set('record.isForceDirty', true);\n\n        this.clearAddressModel(record); // this.set('record.isForceDirty', true);\n\n        this.get('onChange')(text, options);\n        this.set('addressRecord', record);\n        this.validateAddresses();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/multi-select-dropdown/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['dropdown-provider'],\n    store: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    user: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    isEnable: Ember.computed('isEnabled', 'workspaceContext.providerNames', function () {\n      const providerNames = this.get('workspaceContext.providerNames');\n      return providerNames.includes('ALL') || providerNames.length > 1;\n    }),\n    isEnabled: Ember.computed.oneWay('isEnable'),\n    title: '',\n    isOpen: false,\n    isOpened: Ember.computed.oneWay('isOpen'),\n    dropDownList: Ember.computed.alias('enumList'),\n    allSelectedText: Ember.computed.readOnly('allSelectedTitle'),\n    multipleSelectedText: Ember.computed.readOnly('multipleSelectedTitle'),\n    isDropDownListDisabled: Ember.computed.alias('isObjectDisabled'),\n    disabledObject: null,\n    allObjects: true,\n    hasOneObject: Ember.computed.lte('dropDownList.length', 1),\n\n    resetDisableProvider() {\n      const disabledObject = this.get('disabledObject');\n\n      if (disabledObject) {\n        Ember.set(disabledObject, 'isDisabled', false);\n        this.set('disabledObject', null);\n      }\n    },\n\n    updateTitle: Ember.observer('dropDownList', function () {\n      const dropDownList = this.get('dropDownList') || [];\n      const results = dropDownList.filterBy('isChecked', true);\n\n      if (results.length === 1) {\n        this.set('title', results[0].name);\n        Ember.set(results[0], 'isDisabled', true);\n        this.set('disabledObject', results[0]);\n        this.set('allObjects', false);\n      } else if (results.length < dropDownList.length && results.length > 1) {\n        this.set('title', this.get('multipleSelectedText'));\n        this.set('allObjects', false);\n        this.resetDisableProvider();\n      } else if (dropDownList.length > 0 && results.length === dropDownList.length) {\n        this.set('title', this.get('allSelectedText'));\n        this.set('allObjects', true);\n        this.resetDisableProvider();\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('allObjects', true);\n      this.updateTitle();\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    actions: {\n      onToggleSelect() {\n        this.toggleSelect();\n      },\n\n      onOpen() {\n        this.toggleSelect();\n      },\n\n      onClose() {\n        this.toggleSelect();\n      },\n\n      async onClickCheckBox(object, event) {\n        Ember.set(object, 'isChecked', event.target.checked);\n        this.updateTitle();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/multi-select-dropdown/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"B5qVn/cH\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"object\\\",\\\"index\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isEnabled\\\"]]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\",\\\"disabled\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],[23,[\\\"isDropDownListDisabled\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/form-components/multi-select-dropdown/template.hbs' @ L9:C9) \\\"],null]],[[\\\"class\\\"],[\\\"dropdown-provider select\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title\\\"],[12,\\\"title\\\",[28,[[21,\\\"title\\\"]]]],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/form-components/multi-select-dropdown/template.hbs' @ L16:C9) \\\"],null]],[[\\\"class\\\"],[\\\"dropdown-provider options\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dropDownList\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"option\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"input\\\"],[12,\\\"id\\\",[28,[\\\"checkbox_provider_header_\\\",[22,3,[]]]]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[22,2,[\\\"isDisabled\\\"]],[23,[\\\"hasOneObject\\\"]]],null]],[12,\\\"checked\\\",[22,2,[\\\"isChecked\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickCheckBox\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_provider_header_\\\",[22,3,[]]]]],[12,\\\"title\\\",[28,[[22,2,[\\\"name\\\"]]]]],[9],[1,[22,2,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/multi-select-dropdown/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/multientry/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /*\n    This component is based off the \"eligibilities\" and \"places\" components\n  \n    It generates a form of text fields based on a config that supplies \"rows\" in a collection\n    For each key in a \"row\" object,\n    it pulls out the column key\n    and supplies a cell label and an input field from that key/value pair\n  \n    The intent is that a serializer would pull a model from an API,\n    translate it into the desired form configuration object\n    and supply new records based on these arbitrary fields\n  \n    TODO: hook this component/a model into a Mirage serializer\n    to supply a backend and multiple records on page load\n  \n    Sample config entries:\n    app/pods/components/iq-widgets/edit-settings-form-widget/config.js\n    {\n      title: 'Wifi Network',\n      fields: [{\n        id: 'wifiNetwork',\n        type: 'multientry',\n        label: '',\n        valuePath: 'wifiNetwork',\n        modelName: 'rms-address',\n        isMultiType: true,\n        extra: {\n          rows: [\n            {password: 'default', networkName: 'default'}\n          ]\n        }\n      }]},\n  */\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-multientry'],\n    store: Ember.inject.service(),\n    value: null,\n    editableRecords: null,\n    editableSections: null,\n    service: null,\n    columns: Ember.computed('extra.rows.firstObject', function () {\n      const row = this.get('extra.rows.firstObject');\n      return Object.keys(row);\n    }),\n    rows: Ember.computed.readOnly('extra.rows'),\n    model: null,\n    apiService: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onInput() {// do something with typed values\n      },\n\n      onClose() {},\n\n      onAddNew(model, valuePath, modelName) {\n        // create a new table item\n        const newItem = this.get('editModal').pushRecordValue(model, valuePath, modelName);\n        this.get('editModal').pushRecordValue(newItem, 'multientry-catchall', 'rms-location');\n      },\n\n      onRemove() {// remove an item from a table\n        // alert('Remove me', model)\n        // let options = { record, valuePath };\n        // this.get('onRemove')(value, options);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/multientry/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ZxgvXlC7\",\n    \"block\": \"{\\\"symbols\\\":[\\\"entry\\\",\\\"column\\\"],\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3\\\"],[11,\\\"style\\\",\\\"border: 0;\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"rows\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[22,2,[]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[22,2,[]]],null]],null]],[12,\\\"placeholder\\\",[22,2,[]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,1,[]],[22,2,[]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemove\\\",[22,1,[]]],null]],[11,\\\"class\\\",\\\"btn btn-remove\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n              Remove\\\\n            \\\"],[10],[0,\\\"  \\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNew\\\",[23,[\\\"record\\\"]],[23,[\\\"valuePath\\\"]],[23,[\\\"field\\\",\\\"modelName\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary mt-3\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          Add New\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/multientry/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/number-mask/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-component-input-mask-layout'],\n    value: null,\n    disabled: false,\n    placeholder: null,\n    mask: '',\n    // default mask is empty\n    inputClass: '',\n    decimal: false,\n    complete: false,\n    onChange: null,\n    onComplete: null,\n    requireCompleteInput: false,\n    actions: {\n      onInput(unmasked, masked) {\n        const requiredCompleteInput = this.get('requireCompleteInput');\n        const onChange = this.get('onChange');\n        const complete = this.get('complete');\n\n        if (requiredCompleteInput) {\n          if (complete && onChange) onChange({\n            unmasked,\n            masked\n          });\n          return;\n        }\n\n        if (onChange) onChange({\n          unmasked,\n          masked\n        });\n      },\n\n      onComplete() {\n        this.toggleProperty('complete');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/number-mask/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Z3Boowvi\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"one-way-number-mask\\\",null,[[\\\"class\\\",\\\"mask\\\",\\\"value\\\",\\\"disabled\\\",\\\"decimal\\\",\\\"placeholder\\\",\\\"update\\\",\\\"options\\\"],[[27,\\\"concat\\\",[\\\"form-control \\\",[23,[\\\"inputClass\\\"]]],null],[23,[\\\"mask\\\"]],[23,[\\\"value\\\"]],[23,[\\\"disabled\\\"]],[23,[\\\"decimal\\\"]],[23,[\\\"placeholder\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null],[27,\\\"hash\\\",null,[[\\\"oncomplete\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onComplete\\\"],null]]]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/number-mask/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/number/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const FLOAT_FORMAT = /^\\d*\\.*\\d*$/;\n  const NUMBER_FORMAT = /^\\d*$/;\n  const {\n    readOnly\n  } = Ember.computed;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-number'],\n    value: null,\n    disabled: false,\n    extra: null,\n    placeholder: null,\n    numberFormat: NUMBER_FORMAT,\n    min: readOnly('extra.min'),\n    max: readOnly('extra.max'),\n    length: readOnly('extra.length'),\n    isFloat: readOnly('extra.isFloat'),\n    setLimit: readOnly('extra.setLimit'),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const isFloat = this.get('isFloat');\n\n      if (isFloat) {\n        this.set('numberFormat', FLOAT_FORMAT);\n      }\n    },\n\n    actions: {\n      onInput(value) {\n        const min = this.get('min');\n        const max = this.get('max');\n        const numFormat = this.get('numberFormat');\n        const numVal = parseInt(value, 10);\n        const setLimit = this.get('setLimit');\n        const oldValue = this.get('value');\n        const length = this.get('length') || 10; // Reset input value to prior value unless changed value matches format.\n\n        if (!numFormat.test(value) || value.length > length) {\n          return this.notifyPropertyChange('value');\n        }\n\n        if (isNaN(numVal) && !Ember.isPresent(setLimit)) {\n          this.get('onChange')(min);\n          return value;\n        } // Reset input value to restricted max or min depending on config.\n\n\n        if (numVal >= max && Ember.isPresent(max)) {\n          this.set('value', max);\n\n          if (Ember.isPresent(setLimit)) {\n            this.set('value', oldValue);\n            this.get('onChange')(oldValue);\n            return;\n          }\n        }\n\n        if (numVal <= min && Ember.isPresent(min)) {\n          this.set('value', min);\n\n          if (Ember.isPresent(setLimit)) {\n            this.set('value', '');\n            this.get('onChange')('');\n            return;\n          }\n        }\n\n        this.get('onChange')(value);\n        return value;\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/number/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"bdQG/k8V\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"placeholder\\\",[27,\\\"readonly\\\",[[23,[\\\"placeholder\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"readonly\\\",[21,\\\"readonlyCell\\\"]],[9],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/number/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/on-board-trips/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-onboard'],\n    replacementMoveAllTripsPath: Ember.computed.readOnly('extra.replacementMoveAllTripsPath'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onCheckboxChange(record, valuePath) {\n        const useOptionRecord = this.get('useOptionRecord');\n        let switchState = record.get(valuePath);\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        switchState = !switchState;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(switchState, options);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/on-board-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"lG3mdbAQ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"label\\\"],[11,\\\"class\\\",\\\"replacement-onboard-trips-label\\\"],[9],[0,\\\"if the checkbox is deselected, you will need to move these trips manually in the trip widget\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"replacement-onboard-trips-checkbox\\\",\\\"checkbox\\\",[23,[\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[23,[\\\"record\\\"]],[23,[\\\"replacementMoveAllTripsPath\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"replacement-onboard-trips-label2\\\"],[9],[0,\\\"Move all On-board Trips on to the Replacement Route.\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/on-board-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/permission/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-permission'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    toggelAll: false,\n    category: Ember.computed.readOnly('extra.category'),\n    permissionsPath: Ember.computed.alias('extra.permissionsPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n    rolePermIds: Ember.computed.readOnly('extra.rolePermIds'),\n    permissions: null,\n\n    init() {\n      const groupedPermissions = this.get('record.groupedPermissions') || [];\n      const category = this.get('category') || [];\n      const permissionHash = this.get('record.permissionHash') || [];\n      groupedPermissions[category].forEach(perm => {\n        if (!permissionHash) {\n          perm.set('state', false);\n        } else if (permissionHash[perm.get('id')] || perm.get('state')) {\n          perm.set('state', true);\n        } else perm.set('state', false);\n      });\n      this.set('permissions', groupedPermissions[category]);\n\n      this._super(...arguments);\n    },\n\n    actions: {\n      onCheckboxChange(record, valuePath) {\n        let switchState = record.state;\n        const useOptionRecord = this.get('useOptionRecord');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        switchState = !switchState;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(switchState, options);\n      },\n\n      onToggelAll(checkbox, records, valuePath) {\n        const toggel = !checkbox;\n\n        if (!Ember.isEmpty(records)) {\n          records.forEach(record => {\n            const useOptionRecord = this.get('useOptionRecord');\n            const options = {\n              record,\n              valuePath,\n              useOptionRecord\n            };\n            this.set('record.isForceDirty', true);\n            this.get('onChange')(toggel, options);\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/permission/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"m2HlFah4\",\n    \"block\": \"{\\\"symbols\\\":[\\\"permission\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permissions-table\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permission-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Enable / Disable \\\"],[1,[21,\\\"category\\\"],false],[0,\\\" permissions\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"permission-input\\\",\\\"checkbox\\\",[23,[\\\"toggelAll\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onToggelAll\\\",[23,[\\\"toggelAll\\\"]],[23,[\\\"permissions\\\"]],\\\"state\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"permissions\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permission-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[22,1,[\\\"description\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"permission-input\\\",\\\"checkbox\\\",[22,1,[\\\"state\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],\\\"state\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/permission/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/places/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/zone-validation\"], function (_exports, _emberConcurrency, _zoneValidation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-places'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    addressOptions: null,\n    display: null,\n    addressType: null,\n    addresses: Ember.computed.readOnly('display'),\n    aliasPath: Ember.computed.readOnly('extra.aliasPath'),\n    notesPath: Ember.computed.readOnly('extra.notesPath'),\n    premisePath: Ember.computed.readOnly('extra.premisePath'),\n    streetNumberPath: Ember.computed.readOnly('extra.streetNumberPath'),\n    streetAddressPath: Ember.computed.readOnly('extra.streetAddressPath'),\n    localityPath: Ember.computed.readOnly('extra.localityPath'),\n    subLocalityPath: Ember.computed.readOnly('extra.subLocalityPath'),\n    regionPath: Ember.computed.readOnly('extra.regionPath'),\n    subRegionPath: Ember.computed.readOnly('extra.subRegionPath'),\n    postalCodePath: Ember.computed.readOnly('extra.postalCodePath'),\n    countryPath: Ember.computed.readOnly('extra.countryPath'),\n    locationsPath: Ember.computed.readOnly('extra.locationsPath'),\n    tomtomFormattedAddressPath: Ember.computed.readOnly('extra.tomtomFormattedAddressPath'),\n    freeformAddressPath: Ember.computed.readOnly('extra.freeformAddressPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n    addressRecord: null,\n    selected: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this.get('geocode').deactivateGeocode();\n\n      this._super(...arguments);\n    },\n\n    geocodeAddressChange() {\n      const record = this.get('addressRecord');\n      const address = this.get('geocode.address');\n\n      if (!Ember.isEmpty(address)) {\n        this.convertTTAddressToModel(record, address).then(() => {\n          this.disableAddressSearchOnMap();\n        });\n      }\n    },\n\n    validateAddresses() {\n      const records = this.get('addresses') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        if (record.get('place.location.lat') === 0 || record.get('place.location.lng') === 0) {\n          this.get('editModal.errors').pushObject('Address does not have lat/lng. Please select position on the map.');\n        }\n      });\n    },\n\n    addressSearchResults(results) {\n      this.set('addressOptions', results);\n    },\n\n    searchAddress: (0, _emberConcurrency.task)(function* (term) {\n      const result = yield this.get('geocode').geoCodingApi(term);\n      this.addressSearchResults(result);\n    }),\n    isAddressAtMax: Ember.computed('addresses.[]', function () {\n      const length = this.get('addresses').length;\n      let isAtMax = false;\n\n      if (this.get('field.addressType') === 'primary' && length >= 1) {\n        isAtMax = true;\n      }\n\n      return isAtMax;\n    }),\n    convertTTAddressToModel: function (record, ttAddress) {\n      const useOptionRecord = this.get('useOptionRecord');\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath,\n        useOptionRecord\n      };\n\n      if (ttAddress.address && ttAddress.address.freeformAddress) {\n        return this.get('geocode').calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n          if (!Ember.isNone(result)) {\n            this.set('record.isForceDirty', true);\n            this.get('onChange')(cleanFieldString(ttAddress.address.streetNumber), options);\n            options.valuePath = this.get('streetAddressPath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n            options.valuePath = this.get('localityPath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n            options.valuePath = this.get('subLocalityPath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n            options.valuePath = this.get('regionPath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.countrySubdivisionName), options);\n            options.valuePath = this.get('subRegionPath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.countrySecondarySubdivision), options);\n            options.valuePath = this.get('postalCodePath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.postalCode), options);\n            options.valuePath = this.get('countryPath');\n            this.get('onChange')(cleanFieldString(ttAddress.address.countryCode), options);\n\n            if (this.get('freeformAddressPath')) {\n              options.valuePath = this.get('freeformAddressPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n            }\n\n            record.set('place.location.lat', ttAddress.position.lat);\n            record.set('place.location.lng', ttAddress.position.lon);\n            this.validateAddresses();\n          } else {\n            this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n            return;\n          }\n        });\n      }\n    },\n    clearAddressModel: function (record) {\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath\n      };\n      this.get('onChange')('', options);\n      options.valuePath = this.get('streetAddressPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('subLocalityPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')('', options);\n      record.set('place.content.address.content.locations.firstObject.lat', 0);\n      record.set('place.content.address.content.locations.locations.firstObject.lng', 0);\n    },\n\n    enableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').addClass('custom-cursor');\n      this.get('geocode').activateGeocode(true, record, 'pick');\n      this.set('addressRecord', record);\n      this.addObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    disableAddressSearchOnMap() {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      this.get('geocode').deactivateGeocode();\n      this.set('addressRecord', null);\n      this.removeObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    actions: {\n      onInput(record, valuePath, value) {\n        const useOptionRecord = this.get('useOptionRecord');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onAddressSelected(record, valuePath, value) {\n        const boundingBox = this.get('map.boundingBox'); // if the point is outside the valid zone poolygon\n        // return error and exit\n\n        if (!(0, _zoneValidation.insideZone)([value.position.lat, value.position.lon], boundingBox)) {\n          this.get('notifications').warning('Invalid Zone');\n          return;\n        }\n\n        this.convertTTAddressToModel(record, value);\n      },\n\n      onPickOnMap(record) {\n        const activeGeocode = this.get('geocode.activeGeocode');\n\n        if (activeGeocode) {\n          this.disableAddressSearchOnMap();\n        } else {\n          this.enableAddressSearchOnMap(record);\n        }\n      },\n\n      onAddNewAddress(record, valuePath, modelName) {\n        const placeType = this.get('field.addressType');\n        const riderPlaceType = this.get('store').peekRecord('rider-place-type', placeType);\n        const newRiderPlace = this.get('editModal').pushRecordValue(record, valuePath, modelName);\n        newRiderPlace.set('riderPlaceType', riderPlaceType);\n        newRiderPlace.set('rider', record);\n        const place = this.get('editModal').addRecordValue(newRiderPlace, 'place', 'place');\n        const address = this.get('editModal').addRecordValue(place, 'address', 'address');\n        const location = this.get('editModal').addRecordValue(place, 'location', 'location');\n        newRiderPlace.set('place', place);\n        address.get('locations').pushObject(location);\n      },\n\n      onRemoveAddress(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        record.deleteRecord();\n        this.get('onRemove')(value, options);\n      },\n\n      handleKeydown(record, valuePath, dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        }\n\n        const text = e.target.value;\n        const options = {\n          record,\n          valuePath: 'streetAddress'\n        }; // address has been forced without geocodes\n        // this.set('record.isForceDirty', true);\n\n        this.clearAddressModel(record); // this.set('record.isForceDirty', true);\n\n        this.get('onChange')(text, options);\n        this.set('addressRecord', record);\n        this.validateAddresses();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/playback-address-search/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-playback-address-search'],\n    notifications: Ember.inject.service(),\n    addressService: Ember.inject.service('address'),\n    searchResults: null,\n    selectedAddress: null,\n    value: null,\n    // callback function from playback widget\n    onPickOnMap: null,\n    searchCenter: Ember.computed.alias('value'),\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    searchTask: (0, _emberConcurrency.task)(function* (term) {\n      // can't do a blank search\n      if (Ember.isEmpty(term)) {\n        return;\n      } // TODO: change center for fuzzySearch\n\n\n      const results = yield this.get('addressService').fuzzySearch(term, {\n        limit: 25\n      });\n      return results;\n    }),\n\n    addressLocated(address) {\n      this.set('selectedAddress', address);\n    },\n\n    searchCenterObserver: Ember.observer('searchCenter', function () {\n      const searchCenter = this.get('searchCenter');\n      this.get('addressService').reverseGeocode(searchCenter).then(this.addressLocated.bind(this));\n    }),\n    actions: {\n      onAddressSelected(record) {\n        this.set('selectedAddress', record);\n      },\n\n      pickOnMap(record) {\n        this.onPickOnMap(record);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/playback-address-search/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8RaxRONc\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 places-table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[11,\\\"data-test-address-field\\\",\\\"\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"dropdownClass\\\",\\\"placeholder\\\",\\\"options\\\",\\\"search\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",\\\"address-drop-down\\\",\\\"Address\\\",[23,[\\\"searchResults\\\"]],[27,\\\"perform\\\",[[23,[\\\"searchTask\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"selectedAddress\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelected\\\"],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,1,[\\\"freeformAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"pickOnMap\\\",[23,[\\\"address\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary places-inline-button\\\"],[12,\\\"disabled\\\",[21,\\\"isFixedType\\\"]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/playback-address-search/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/quick-filters/component\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    maximizer: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    classNames: ['column-widget-filter'],\n    classNameBindings: ['isActive'],\n    isActive: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.filter.quickFilterComponent = this;\n      this.setIsActive();\n      this.get('maximizer.isWidgetMinified');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const widgetInstanceId = `${this.get('widget.typeId')}_${this.get('widget.id')}`;\n      const newlyCreatedQuickFilter = this.get('workspace.newlyCreatedQuickFilter');\n      const filter = this.get('filter');\n\n      if (Ember.isPresent(newlyCreatedQuickFilter) && widgetInstanceId === newlyCreatedQuickFilter.widgetInstanceId && filter.id === newlyCreatedQuickFilter.id) {\n        this.toggleFilter();\n        this.set('workspace.newlyCreatedQuickFilter', null);\n      }\n    },\n\n    updateWidgetStateQuickFilter(isActive) {\n      const filterId = this.get('filter.id');\n      const widgetType = this.get('widget.typeId');\n      const widgetStates = { ...this.get('workspace.widgetStates')\n      };\n      const widgetState = widgetStates[widgetType] || {};\n      const quickFilters = widgetState.quickFilters || [];\n      const foundQuickFilter = quickFilters.find(quickFilter => quickFilter.id === filterId);\n      foundQuickFilter.active = isActive;\n    },\n\n    clearWidgetStateQuickFilter() {\n      const widgetType = this.get('widget.typeId');\n      const widgetStates = { ...this.get('workspace.widgetStates')\n      };\n      const widgetState = widgetStates[widgetType] || {};\n      const quickFilters = widgetState.quickFilters || [];\n      quickFilters.forEach(quickFilter => {\n        quickFilter.active = false;\n      });\n    },\n\n    getWidgetStateQuickFilter() {\n      const filterId = this.get('filter.id');\n      const widgetType = this.get('widget.typeId');\n      const widgetStates = { ...this.get('workspace.widgetStates')\n      };\n      const widgetState = widgetStates[widgetType] || {};\n      const quickFilters = widgetState.quickFilters || [];\n      const foundQuickFilter = quickFilters.find(quickFilter => quickFilter.id === filterId);\n      return foundQuickFilter;\n    },\n\n    onFilterChanged: Ember.observer('isActive', function () {\n      this.set('filter.active', this.get('isActive'));\n    }),\n    isWidgetMinifiedChanged: Ember.observer('maximizer.isWidgetMinified', function () {\n      const isWidgetMinified = this.get('maximizer.isWidgetMinified');\n\n      if (isWidgetMinified) {\n        const maximizedWidget = this.get('maximizer.maximizedWidget');\n        const maximizedWidgetInstanceId = `${maximizedWidget.typeId}_${maximizedWidget.id}`;\n        const activeQuickFilter = this.get('maximizer.activeQuickFilter');\n        const widgetInstanceId = `${this.get('widget.typeId')}_${this.get('widget.id')}`;\n\n        if (maximizedWidgetInstanceId === widgetInstanceId) {\n          if (Ember.isPresent(activeQuickFilter) && activeQuickFilter.id === this.get('filter.id')) {\n            this.set('isActive', true);\n          } else {\n            this.set('isActive', false);\n          }\n        }\n\n        this.get('onRefresh')();\n      }\n    }),\n\n    toggleFilter() {\n      const active = this.get('isActive');\n      this.clearFilters();\n\n      if (!active) {\n        this.set('isActive', true);\n        this.updateWidgetStateQuickFilter(this.get('isActive'));\n      }\n\n      this.get('onRefresh')();\n    },\n\n    clearFilters() {\n      const columnList = this.get('tableColumns') || [];\n      const quickFilters = this.get('quickFilters') || [];\n      const columns = columnList.reduce((obj, column) => {\n        obj[column.id] = {\n          filterTypeId: 'null',\n          // this is actually the id of the null filter\n          filterValues: null\n        };\n        return obj;\n      }, {});\n      quickFilters.forEach(filter => {\n        const active = filter.quickFilterComponent.get('isActive');\n\n        if (active) {\n          const quickFilterComponent = filter.quickFilterComponent;\n\n          if (!quickFilterComponent.isDestroyed) {\n            quickFilterComponent.set('isActive', false);\n          }\n        }\n      });\n      this.clearWidgetStateQuickFilter();\n      this.get('widget').mergeState({\n        columns\n      });\n    },\n\n    clearSpecificFilter(removeFilter) {\n      const quickFilters = this.get('quickFilters') || [];\n      quickFilters.forEach(filter => {\n        const active = filter.quickFilterComponent.get('isActive');\n\n        if (active && filter.id === removeFilter.id) {\n          const quickFilterComponent = filter.quickFilterComponent;\n\n          if (!quickFilterComponent.isDestroyed) {\n            quickFilterComponent.set('isActive', false);\n            quickFilterComponent.updateWidgetStateQuickFilter(false);\n            quickFilterComponent.get('onRefresh')();\n          }\n        }\n      });\n    },\n\n    removeQuickFilter() {\n      const currentId = this.get('filter.id');\n      const widgetTypeId = this.get('widget.typeId');\n      const widgetStates = { ...this.get('workspace.widgetStates')\n      };\n      const widgetState = widgetStates[widgetTypeId] || {};\n      const quickFilters = widgetState.quickFilters || []; // remove from local copy\n\n      _lodash.default.remove(quickFilters, filter => {\n        const removeFilter = filter.id === currentId;\n        if (removeFilter && filter.widgetInstanceId) this.clearSpecificFilter(filter);\n        return removeFilter;\n      });\n\n      this.set('workspace.widgetStates', widgetStates); // remove from dashboard model\n\n      const dashboardWidgetStates = { ...this.get('workspace.dashboardInstance.widgetStates')\n      };\n      const dashboardWidgetState = dashboardWidgetStates[widgetTypeId] || {};\n      const dashboardQuickFilters = dashboardWidgetState.quickFilters || [];\n\n      _lodash.default.remove(dashboardQuickFilters, filter => {\n        return filter.id === currentId;\n      });\n\n      this.set('workspace.dashboardInstance.widgetStates', dashboardWidgetStates);\n    },\n\n    setIsActive() {\n      const quickFilterComponent = this.filter.quickFilterComponent;\n\n      if (!quickFilterComponent.isDestroyed) {\n        quickFilterComponent.set('isActive', this.get('filter.active'));\n      }\n    },\n\n    actions: {\n      onRemoveFilterClick() {\n        const tooltip = this.get('tooltip');\n        const filterName = this.get('filter.displayName');\n        tooltip.pushConfirmation({\n          title: 'Manage Filter',\n          tip: `Are you sure you want to delete the ${filterName} filter?`,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            this.removeQuickFilter();\n            return tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      },\n\n      onFilterApplyAction() {\n        this.toggleFilter();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/quick-filters/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"jXZ8caAh\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-filter-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveFilterClick\\\"]],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-filter-action\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterApplyAction\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"filter\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n  \\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/quick-filters/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/routeenum/component\", [\"exports\", \"adept-iq/utils/isRouteAssignable\"], function (_exports, _isRouteAssignable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-select'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    dataFromModel: false,\n    options: Ember.computed.alias('extra.options'),\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n\n    init() {\n      this._super(...arguments);\n\n      if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        this.set('dataFromModel', true);\n        const routeOptions = this.get('store').peekAll(this.get('extra.optionModelName')) || [];\n        const assignableRoute = [];\n        routeOptions.forEach(function (route) {\n          if ((0, _isRouteAssignable.isRouteAssignable)(route)) {\n            assignableRoute.push(route);\n          }\n        });\n        this.set('options', assignableRoute);\n      }\n    },\n\n    selected: Ember.computed('value', 'options', function () {\n      if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        return this.get('options').find(option => {\n          return option.id === this.get('value.id');\n        });\n      }\n\n      return false;\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/routeenum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"0pW7hpAt\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],true],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"searchField\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[23,[\\\"options\\\"]],\\\"name\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],false],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/routeenum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/scheduleavailabilities/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-availabilities'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    dayOfWeeks: null,\n    store: Ember.inject.service(),\n    availabilities: Ember.computed.readOnly('value'),\n    availabilityType: Ember.computed.readOnly('valuePath'),\n    startTimePath: Ember.computed.readOnly('extra.startTimePath'),\n    endTimePath: Ember.computed.readOnly('extra.endTimePath'),\n    shiftStartPath: Ember.computed.readOnly('extra.shiftStartPath'),\n    shiftEndPath: Ember.computed.readOnly('extra.shiftEndPath'),\n    sundayPath: Ember.computed.readOnly('extra.sundayPath'),\n    selected: null,\n\n    init() {\n      this.set('dayOfWeeks', ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']);\n      this.set('datePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.timeMoment);\n      this.set('dateFormat', _environment.default.dateTimeFormat.dateFlatPickr);\n      this.set('timeFormat', _environment.default.dateTimeFormat.timeFlatPickr);\n\n      this._super(...arguments);\n    },\n\n    didInsertElement: function () {},\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onChangeDate(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value[0], options);\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid) {\n          // $(`#${datePicker.element.id}`).focus();\n          this.set('editModal.errors', ['Date entered is invalid.']);\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          // date format is for database so should not be from config\n          datePicker.setDate(newValueMoment.toDate(), true);\n        }\n      },\n\n      onChangeTime(record, valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(momentTime.format('HH:mm:ss'), options);\n      },\n\n      onCheckboxChange(record, valuePath) {\n        let switchState = record.get(valuePath);\n        const options = {\n          record,\n          valuePath\n        };\n        switchState = !switchState;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(switchState, options);\n      },\n\n      onDOWChange(record, values) {\n        record.set('sunday', values.includes('sunday'));\n        record.set('monday', values.includes('monday'));\n        record.set('tuesday', values.includes('tuesday'));\n        record.set('wednesday', values.includes('wednesday'));\n        record.set('thursday', values.includes('thursday'));\n        record.set('friday', values.includes('friday'));\n        record.set('saturday', values.includes('saturday'));\n        this.set('record.isForceDirty', true);\n      },\n\n      onAddNewAvailability() {\n        this.get('onCreate')();\n      },\n\n      onRemoveAvailability(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.get('onRemove')(value, options);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/scheduleavailabilities/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"WaWkvEV9\",\n    \"block\": \"{\\\"symbols\\\":[\\\"availability\\\",\\\"name\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 availabilities-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"availabilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Day of the Week\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"closeOnSelect\\\",\\\"onchange\\\"],[[23,[\\\"dayOfWeeks\\\"]],[22,1,[\\\"selectedDOWs\\\"]],\\\"Select some names...\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDOWChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"startTimePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"startTimePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"minuteIncrement\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",true,true,1,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"endTimePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"endTimePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"minuteIncrement\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",true,true,1,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"shiftStartPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[22,1,[]],[23,[\\\"shiftStartPath\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"minuteIncrement\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",true,1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"shiftEndPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[22,1,[]],[23,[\\\"shiftEndPath\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveAvailability\\\",[22,1,[]],[23,[\\\"shiftEndPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-remove\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n      Remove\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewAvailability\\\",[23,[\\\"record\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary mt-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n      Add New Availability\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/scheduleavailabilities/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/searchable-enum/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // Updated isFloating value to true if\n  const BREAKTYPE = {\n    NAME: 'break-type',\n    VALUE: 'floating'\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-select'],\n    store: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    extra: null,\n    options: null,\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    optionSearchPath: Ember.computed.alias('extra.optionSearchPath'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n    optionSearchEnabled: Ember.computed.alias('extra.optionSearchEnabled'),\n    optionTempRecordSelected: Ember.computed.alias('extra.optionTempRecordSelected'),\n    optionFilterFunction: Ember.computed.alias('extra.optionFilterFunction'),\n    includes: Ember.computed('extra.optionIncludes', function () {\n      return !Ember.isNone(this.get('extra.optionIncludes')) ? this.get('extra.optionIncludes') : '';\n    }),\n\n    init() {\n      const selectedPath = this.get('extra.optionSelectedPath');\n\n      if (!this.get('optionSearchEnabled')) {\n        if (Ember.isEmpty(selectedPath)) {\n          this.set('selected', this.get('value'));\n        } else {\n          this.set('selected', this.get(`value.${selectedPath}`));\n        }\n      } else {\n        const object = {};\n        object[this.get('optionSearchPath')] = this.get('value'); // this.set('selected', object);\n\n        this.set('selected', this.get('value'));\n      }\n\n      if (!this.get('optionSearchEnabled')) {\n        this.loadEnum();\n      }\n\n      this._super(...arguments);\n    },\n\n    loadEnum() {\n      this.store.findAll(this.get('optionModelName')).then(results => {\n        this.searchResults(results);\n      });\n    },\n\n    searchResults(results) {\n      if (this.get('optionFilterFunction')) {\n        const filteredResults = results.filter(result => {\n          const available = this.get('record')[this.get('optionFilterFunction')](result);\n          return available;\n        });\n        this.set('options', filteredResults);\n      } else {\n        this.set('options', results);\n      }\n    },\n\n    // will do this when optionSearchEnabled is true\n    // otherwise it will do loadEnum\n    search: (0, _emberConcurrency.task)(function* (term) {\n      yield (0, _emberConcurrency.timeout)(500);\n      const query = {\n        filter: `ilike(${this.get('optionSearchPath')},'%${term}%')`,\n        include: this.get('includes')\n      };\n      const results = yield this.store.query(this.get('optionModelName'), query);\n      this.searchResults(results);\n    }),\n\n    updateBreakType(record) {\n      if (this.optionModelName === BREAKTYPE.NAME && record.get('name') === BREAKTYPE.VALUE) this.set('editModal.isFloatingType', true);else this.set('editModal.isFloatingType', false);\n    },\n\n    actions: {\n      onSelected(newRecord) {\n        this.set('selected', newRecord);\n\n        if (this.get('optionSearchEnabled')) {\n          this.set(`record.${this.get('valuePath')}`, newRecord);\n          this.set(`record.${this.get('optionTempRecordSelected')}`, newRecord);\n        } else {\n          this.set(`record.${this.get('valuePath')}`, newRecord);\n        }\n\n        this.set('record.isForceDirty', true);\n        this.updateBreakType(newRecord);\n      },\n\n      handleKeydown(dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        } // TODO: add code to store data\n        //  to correct api host when kafka topic is done.\n\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/searchable-enum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"sLh4pDHA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"search\\\",\\\"selected\\\",\\\"onkeydown\\\",\\\"onchange\\\"],[[23,[\\\"options\\\"]],[23,[\\\"optionSearchEnabled\\\"]],[27,\\\"perform\\\",[[23,[\\\"search\\\"]]],null],[23,[\\\"selected\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"handleKeydown\\\"],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelected\\\"],null]],null]]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"get\\\",[[22,1,[]],[23,[\\\"optionSearchPath\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/searchable-enum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/select/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-select'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    dataFromModel: false,\n    options: Ember.computed.alias('extra.options'),\n\n    init() {\n      this._super(...arguments);\n\n      if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        this.set('dataFromModel', true);\n        this.set('options', this.get('store').peekAll(this.get('extra.optionModelName')));\n      }\n    },\n\n    actions: {\n      onChange(option) {\n        this.set('selected', option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/select/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"4JEEjxXn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[22,1,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/select/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/shift-breaks/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\", \"ember-concurrency\"], function (_exports, _moment, _environment, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-availabilities', 'form-components-places'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    dayOfWeeks: null,\n    store: Ember.inject.service(),\n    startTimePath: Ember.computed.readOnly('extra.startTimePath'),\n    endTimePath: Ember.computed.readOnly('extra.endTimePath'),\n    sundayPath: Ember.computed.readOnly('extra.sundayPath'),\n    mondayPath: Ember.computed.readOnly('extra.mondayPath'),\n    tuesdayPath: Ember.computed.readOnly('extra.tuesdayPath'),\n    wednesdayPath: Ember.computed.readOnly('extra.wednesdayPath'),\n    thursdayPath: Ember.computed.readOnly('extra.thursdayPath'),\n    fridayPath: Ember.computed.readOnly('extra.fridayPath'),\n    saturdayPath: Ember.computed.readOnly('extra.saturdayPath'),\n    shiftBreaksPath: Ember.computed.readOnly('extra.shiftBreaksPath'),\n    shiftBreakTypePath: Ember.computed.readOnly('extra.shiftBreakTypePath'),\n    breakPromisedStartPath: Ember.computed.readOnly('extra.breakPromisedStartPath'),\n    breakPromisedEndPath: Ember.computed.readOnly('extra.breakPromisedEndPath'),\n    breakDurationPath: Ember.computed.readOnly('extra.breakDurationPath'),\n    shiftBreaks: null,\n    breakTypes: null,\n    addressOptions: null,\n    // addressType: computed.readOnly('extra.addressvaluePath'),\n    aliasPath: Ember.computed.readOnly('extra.aliasPath'),\n    notesPath: Ember.computed.readOnly('extra.notesPath'),\n    streetNumberPath: Ember.computed.readOnly('extra.streetNumberPath'),\n    streetAddressPath: Ember.computed.readOnly('extra.streetAddressPath'),\n    streetNamePath: Ember.computed.readOnly('extra.streetNamePath'),\n    localityPath: Ember.computed.readOnly('extra.localityPath'),\n    regionPath: Ember.computed.readOnly('extra.regionPath'),\n    subRegionPath: Ember.computed.readOnly('extra.subRegionPath'),\n    postalCodePath: Ember.computed.readOnly('extra.postalCodePath'),\n    countryPath: Ember.computed.readOnly('extra.countryPath'),\n    tomtomFormattedAddressPath: Ember.computed.readOnly('extra.tomtomFormattedAddressPath'),\n    locationsPath: Ember.computed.readOnly('extra.locationsPath'),\n    addressRecord: null,\n    selected: null,\n    geocodeAddressChange: Ember.observer('geocode.address', function () {\n      const record = this.get('addressRecord');\n      const address = this.get('geocode.address');\n      this.convertTTAddressToModel(record, address).then(() => {\n        this.disableAddressSearchOnMap(record);\n      });\n    }),\n\n    init() {\n      this.set('dayOfWeeks', ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']);\n      this.set('datePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.timeMoment);\n      this.set('dateFormat', _environment.default.dateTimeFormat.dateFlatPickr);\n      this.set('timeFormat', _environment.default.dateTimeFormat.timeFlatPickr);\n\n      this._super(...arguments);\n\n      this.set('shiftBreaks', this.get('value'));\n    },\n\n    validateAddresses() {\n      const record = this.get('address');\n      this.set('editModal.errors', []);\n\n      if (record.location.content.lat === 0 || record.location.content.lng === 0) {\n        this.get('editModal.errors').pushObject('Address does not have lat/lng. Please select position on the map.');\n      }\n    },\n\n    addressSearchResults(results) {\n      this.set('addressOptions', results);\n    },\n\n    searchAddress: (0, _emberConcurrency.task)(function* (term) {\n      const result = yield this.get('geocode').geoCodingApi(term);\n      this.addressSearchResults(result);\n    }),\n    convertTTAddressToModel: function (record, ttAddress) {\n      if (Ember.isNone(ttAddress)) {\n        return;\n      }\n\n      if (Ember.isNone(ttAddress.id) || !Ember.isNone(ttAddress.position)) {\n        const useOptionRecord = true;\n        const valuePath = this.get('streetNumberPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        const geocode = this.get('geocode');\n\n        if (ttAddress.address && ttAddress.address.freeformAddress) {\n          return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n            if (!Ember.isNone(result)) {\n              this.set('record.isForceDirty', true);\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetNumber), options);\n              options.valuePath = this.get('streetAddressPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n              options.valuePath = this.get('streetNamePath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n              options.valuePath = this.get('localityPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n              options.valuePath = this.get('regionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countrySubdivisionName), options);\n              options.valuePath = this.get('subRegionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countrySecondarySubdivision), options);\n              options.valuePath = this.get('postalCodePath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.postalCode), options);\n              options.valuePath = this.get('countryPath');\n              this.get('onChange')(cleanFieldString(ttAddress.address.countryCode), options);\n              options.valuePath = this.get('aliasPath');\n              this.get('onChange')('', options);\n              record.set('location.lat', ttAddress.position.lat);\n              record.set('location.lng', ttAddress.position.lon);\n              this.validateAddresses();\n            } else {\n              this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n              return;\n            }\n\n            geocode.activateGeocode(false, record);\n            this.set('addressOptions', this.get('record').get('rider.riderAddresses'));\n          });\n        }\n      } else {\n        const useOptionRecord = true;\n        const valuePath = this.get('streetNumberPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        const geocode = this.get('geocode');\n\n        if (ttAddress.tomtomFormattedAddress && ttAddress.tomtomFormattedAddress.address && ttAddress.tomtomFormattedAddress.address.freeformAddress) {\n          return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n            if (!Ember.isNone(result)) {\n              this.set('record.isForceDirty', true);\n              this.get('onChange')(cleanFieldString(ttAddress.streetNumber), options);\n              options.valuePath = this.get('streetNamePath');\n              this.get('onChange')(cleanFieldString(ttAddress.streetAddress), options);\n              options.valuePath = this.get('localityPath');\n              this.get('onChange')(cleanFieldString(ttAddress.locality), options);\n              options.valuePath = this.get('regionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.countrySubdivisionName), options);\n              options.valuePath = this.get('subRegionPath');\n              this.get('onChange')(cleanFieldString(ttAddress.countrySecondarySubdivision), options);\n              options.valuePath = this.get('postalCodePath');\n              this.get('onChange')(cleanFieldString(ttAddress.postalCode), options);\n              options.valuePath = this.get('countryPath');\n              this.get('onChange')(cleanFieldString(ttAddress.countryCode), options);\n              options.valuePath = this.get('aliasPath');\n              this.get('onChange')(cleanFieldString(ttAddress.alias), options);\n              options.valuePath = this.get('notesPath');\n              this.get('onChange')(cleanFieldString(ttAddress.notes), options);\n              record.set('location.lat', ttAddress.locations.firstObject.lat);\n              record.set('location.lng', ttAddress.locations.firstObject.lng);\n              this.validateAddresses();\n            } else {\n              this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n              return;\n            }\n\n            geocode.activateGeocode(false, record);\n            this.set('addressOptions', this.get('record').get('rider.riderAddresses'));\n          });\n        }\n      }\n    },\n    clearAddressModel: function (record) {\n      const addressvaluePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        addressvaluePath\n      };\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('streetNamePath');\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('localityPath');\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('regionPath');\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('subRegionPath');\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('postalCodePath');\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('countryPath');\n      this.get('onChange')('', options);\n      options.addressvaluePath = this.get('aliasPath');\n      this.get('onChange')('', options);\n      record.set('lat', 0);\n      record.set('lng', 0);\n    },\n\n    enableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').addClass('custom-cursor');\n      this.get('geocode').activateGeocode(true, record);\n      this.set('addressRecord', record);\n    },\n\n    disableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      this.get('geocode').activateGeocode(false, record);\n      this.set('addressRecord', null);\n    },\n\n    didInsertElement: function () {\n      const breakTypeModelName = this.get('extra.breakTypeModelName');\n      this.set('breakTypes', this.get('store').peekAll(breakTypeModelName));\n    },\n\n    getAvailibilityBreaks(record) {\n      return record.get('shiftBreaks');\n    },\n\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onChangeDate(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value[0], options);\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const currentValueMoment = (0, _moment.default)(currentValue[0]);\n        const newValueMoment = (0, _moment.default)(stringValue);\n\n        if (!newValueMoment._isValid) {\n          // $(`#${datePicker.element.id}`).focus();\n          this.set('editModal.errors', ['Date entered is invalid.']);\n        }\n\n        if (datePicker.config.allowInput && datePicker._input.value && newValueMoment._isValid && !currentValueMoment.isSame(newValueMoment)) {\n          // date format is for database so should not be from config\n          datePicker.setDate(newValueMoment.format(_environment.default.dateTimeFormat.dateMoment), true);\n        }\n      },\n\n      onChangeTime(record, valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(momentTime.format('HH:mm:ss'), options);\n      },\n\n      onCheckboxChange(record, valuePath) {\n        let switchState = record.get(valuePath);\n        const options = {\n          record,\n          valuePath\n        };\n        switchState = !switchState;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(switchState, options);\n      },\n\n      onDOWChange(record, values) {\n        record.set('sunday', values.includes('sunday'));\n        record.set('monday', values.includes('monday'));\n        record.set('tuesday', values.includes('tuesday'));\n        record.set('wednesday', values.includes('wednesday'));\n        record.set('thursday', values.includes('thursday'));\n        record.set('friday', values.includes('friday'));\n        record.set('saturday', values.includes('saturday'));\n        this.set('record.isForceDirty', true);\n      },\n\n      onAddNewBreak(record, valuePath, modelName) {\n        const place = this.get('store').createRecord('place') || [];\n        const address = this.get('editModal').addRecordValue(place, 'address', 'address') || [];\n        const location = this.get('editModal').addRecordValue(place, 'location', 'location') || [];\n        const shiftBreak = this.get('store').createRecord(modelName) || [];\n        address.get('locations').pushObject(location);\n        shiftBreak.set('breakType', this.get('breakTypes.firstObject'));\n        shiftBreak.set('place', place);\n        shiftBreak.set('provider', this.store.peekAll('provider').firstObject);\n        this.set('address', place);\n        record.set('isForceDirty', true);\n        Ember.get(record, valuePath).pushObject(shiftBreak);\n      },\n\n      onbreakTypeChange(record, valuePath, value) {\n        record.set(valuePath, value);\n        this.record.set(valuePath, value);\n        this.set('record.isForceDirty', true);\n      },\n\n      onRemoveBreak(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.get('onRemove')(value, options);\n      },\n\n      onAddressSelected(record, valuePath, value) {\n        this.convertTTAddressToModel(record, value);\n      },\n\n      onAliasAddressSelected(record, valuePath, value) {\n        this.convertTTAliasAddressToModel(record, value);\n      },\n\n      onPickOnMap(record) {\n        const activeGeocode = this.get('geocode.activeGeocode');\n\n        if (activeGeocode) {\n          this.disableAddressSearchOnMap(record);\n        } else {\n          this.enableAddressSearchOnMap(record);\n        }\n      },\n\n      handleKeydown(record, valuePath, dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        }\n\n        const text = e.target.value;\n        const options = {\n          record,\n          valuePath: 'streetAddress'\n        }; // address has been forced without geocodes\n        // this.set('record.isForceDirty', true);\n\n        this.clearAddressModel(record); // this.set('record.isForceDirty', true);\n\n        this.get('onChange')(text, options);\n        this.set('addressRecord', record);\n        this.validateAddresses();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/shift-breaks/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"f7hozs+i\",\n    \"block\": \"{\\\"symbols\\\":[\\\"shiftBreak\\\",\\\"option\\\",\\\"option\\\",\\\"name\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 availabilities-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"shiftBreaks\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Day of the Week\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"closeOnSelect\\\",\\\"onchange\\\"],[[23,[\\\"dayOfWeeks\\\"]],[22,1,[\\\"selectedDOWs\\\"]],\\\"Select some names...\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDOWChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,4,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"startTimePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"startTimePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\"],[\\\"en\\\",1,true,true,[23,[\\\"datePlaceHolder\\\"]],[23,[\\\"dateFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"endTimePath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",[22,1,[]],[23,[\\\"endTimePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"shiftBreakTypePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"breakTypes\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onbreakTypeChange\\\",[22,1,[]],[23,[\\\"shiftBreakTypePath\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 places-table\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Place Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"aliasPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"Place Name\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[23,[\\\"address\\\"]],[23,[\\\"aliasPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"search\\\",\\\"selected\\\",\\\"onkeydown\\\",\\\"onchange\\\"],[[23,[\\\"addressOptions\\\"]],[27,\\\"perform\\\",[[23,[\\\"searchAddress\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"tomtomFormattedAddressPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"handleKeydown\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelected\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,2,[\\\"address\\\",\\\"freeformAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"address\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary places-inline-button\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker \\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Unit\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[11,\\\"placeholder\\\",\\\"Unit\\\"],[11,\\\"readonly\\\",\\\"true\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[23,[\\\"address\\\"]],[23,[\\\"unitPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"notesPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"Notes\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[23,[\\\"address\\\"]],[23,[\\\"notesPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"City\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"localityPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"Locality\\\"],[11,\\\"readonly\\\",\\\"true\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[23,[\\\"address\\\"]],[23,[\\\"localityPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Postal Code\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"postalCodePath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"Postal Code\\\"],[11,\\\"readonly\\\",\\\"true\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[23,[\\\"address\\\"]],[23,[\\\"postalCodePath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Lat/Long\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"locationsPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"Lat/Long\\\"],[11,\\\"readonly\\\",\\\"true\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[23,[\\\"address\\\"]],[23,[\\\"locationsPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"minuteIncrement\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",true,1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"breakPromisedStartPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[22,1,[]],[23,[\\\"breakPromisedStartPath\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"breakPromisedEndPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[22,1,[]],[23,[\\\"breakPromisedEndPath\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveBreak\\\",[22,1,[]],[23,[\\\"shiftBreaksPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-remove\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n      Remove\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewBreak\\\",[23,[\\\"record\\\"]],[23,[\\\"shiftBreaksPath\\\"]],\\\"shift-break\\\"],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary mt-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n      Add New Break\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/shift-breaks/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/text-area/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-text-area'],\n    placeholder: 'description',\n    value: null,\n    disabled: false,\n    maxLength: 500,\n    showHint: true,\n    valueLength: Ember.computed('value.length', function () {\n      const length = this.get('value.length');\n      return length ? length : 0;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const onChange = this.get('onChange');\n      const onInput = this.get('onInput'); // eslint-disable-next-line no-console\n\n      if (!onChange) console.warn('Component Output to Parent Component requires an onChange method to be passed into text-area component'); // eslint-disable-next-line no-console\n\n      if (!onInput) console.warn('Component Output to Parent Component requires an onInput method to be passed into text-area component');\n    },\n\n    actions: {\n      onInput() {\n        const value = this.get('value');\n        this.get('onInput')(value);\n      },\n\n      onChange() {\n        const value = this.get('value');\n        this.get('onChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/text-area/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"OtoYbAtw\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-area-container\\\"],[9],[0,\\\"\\\\n\\\"],[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"value\\\",\\\"focus-out\\\",\\\"input\\\"],[\\\"3\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[23,[\\\"placeholder\\\"]],[23,[\\\"maxLength\\\"]],[23,[\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showHint\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"hint\\\"],[9],[7,\\\"span\\\"],[9],[1,[21,\\\"valueLength\\\"],false],[0,\\\"/\\\"],[1,[21,\\\"maxLength\\\"],false],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/text-area/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/text-mask/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // at some point replace input with this component\n  var _default = Ember.Component.extend({\n    classNames: ['form-component-input-mask-layout'],\n    value: null,\n    disabled: false,\n    placeholder: null,\n    mask: '',\n    // default mask is empty\n    complete: false,\n    onChange: null,\n    onComplete: null,\n    requireCompleteInput: false,\n    actions: {\n      onInput(unmasked, masked) {\n        const requiredCompleteInput = this.get('requireCompleteInput');\n        const onChange = this.get('onChange');\n        const complete = this.get('complete');\n\n        if (requiredCompleteInput) {\n          if (complete && onChange) onChange({\n            unmasked,\n            masked\n          });\n          return;\n        }\n\n        if (onChange) onChange({\n          unmasked,\n          masked\n        });\n      },\n\n      onComplete() {\n        this.toggleProperty('complete');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/text-mask/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"+cYU8E7g\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"one-way-input-mask\\\",null,[[\\\"class\\\",\\\"mask\\\",\\\"value\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"update\\\",\\\"options\\\"],[\\\"form-control\\\",[23,[\\\"mask\\\"]],[23,[\\\"value\\\"]],[23,[\\\"disabled\\\"]],[23,[\\\"placeholder\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null],[27,\\\"hash\\\",null,[[\\\"oncomplete\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onComplete\\\"],null]]]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/text-mask/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/text/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SPECIAL_CHARACTER_FORMAT = /[^a-zA-Z0-9]/g;\n  const SPACE_FORMAT = /\\s/g;\n  const NUMBER_FORMAT = /[^0-9]/g;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-text'],\n    value: null,\n    disabled: false,\n    placeholder: null,\n    extra: null,\n    max: Ember.computed.readOnly('extra.max'),\n    maxWithSpace: Ember.computed.readOnly('extra.maxWithSpace'),\n    removeSpecialCharacter: Ember.computed.readOnly('extra.removeSpecialCharacter'),\n    removeCharacter: Ember.computed.readOnly('extra.removeCharacter'),\n    removeSpace: Ember.computed.readOnly('extra.removeSpace'),\n    actions: {\n      onInput: function (event) {\n        const max = this.get('max');\n        const maxWithSpace = this.get('maxWithSpace');\n        const removeSpecialCharacter = this.get('removeSpecialCharacter');\n        const removeCharacter = this.get('removeCharacter');\n        const removeSpace = this.get('removeSpace');\n        let textVal = event.target.value;\n\n        if (maxWithSpace) {\n          textVal = event.target.value.slice(0, maxWithSpace);\n          event.target.value = textVal;\n        }\n\n        if (removeSpecialCharacter) {\n          textVal = event.target.value.replace(SPECIAL_CHARACTER_FORMAT, '');\n          event.target.value = textVal;\n        }\n\n        if (removeCharacter) {\n          textVal = event.target.value.replace(NUMBER_FORMAT, '');\n          event.target.value = textVal;\n        }\n\n        if (removeSpace) {\n          textVal = event.target.value.replace(SPACE_FORMAT, '');\n          event.target.value = textVal;\n        }\n\n        if (max) {\n          textVal = event.target.value.slice(0, max);\n          event.target.value = textVal;\n        }\n\n        this.get('onChange')(textVal);\n      }\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/text/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"toY3AW9G\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"placeholder\\\",[27,\\\"readonly\\\",[[23,[\\\"placeholder\\\"]]],null]],[12,\\\"readonly\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"maxlength\\\",[27,\\\"readonly\\\",[[23,[\\\"max\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null]],[12,\\\"readonly\\\",[21,\\\"readonlyCell\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/text/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/time/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TIME_FORMAT = /^\\d\\d:\\d\\d (AM|PM)$/;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-time'],\n    value: null,\n    disabled: false,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    actions: {\n      onInput(value) {\n        if (!TIME_FORMAT.test(value)) return;\n        const date = (0, _moment.default)(this.get('value')).format(_environment.default.dateTimeFormat.dateMoment);\n        const newValue = (0, _moment.default)(`${date} ${value}`, _environment.default.dateTimeFormat.dateTimeMoment).toDate();\n        this.get('onChange')(newValue);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/time/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"yJC+XdLS\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"value\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"timeMoment\\\"]]],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"readonly\\\",[21,\\\"readonlyCell\\\"]],[9],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/time/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/timeflatpickr/component\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-datetimeflatpickr'],\n    value: null,\n    disabled: false,\n    defaultDate: null,\n    readonlyCell: false,\n    maxDate: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('timeFormat', _environment.default.dateTimeFormat.timeFlatPickr);\n      this.set('timePlaceholder', _environment.default.dateTimeFormat.timeMoment);\n    },\n\n    actions: {\n      onChangeTime() {// required by flatpickr\n      },\n\n      onClose(currentValue) {\n        let newValue = null;\n\n        if (Ember.isBlank(this.get('value'))) {\n          newValue = new Date();\n        } else {\n          newValue = new Date(this.get('value'));\n        } // change the date part only\n\n\n        newValue.setHours(currentValue[0].getHours());\n        newValue.setMinutes(currentValue[0].getMinutes());\n        this.get('onChange')(newValue);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/timeflatpickr/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VNgDCiud\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"disabled\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"noCalendar\\\",\\\"minuteIncrement\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"clickOpens\\\",\\\"date\\\",\\\"onChange\\\",\\\"onClose\\\",\\\"readonly\\\",\\\"getFlatpickrRef\\\"],[\\\"en\\\",[23,[\\\"isFieldDisabled\\\"]],true,true,true,1,[23,[\\\"timePlaceholder\\\"]],[23,[\\\"timeFormat\\\"]],true,[27,\\\"not\\\",[[23,[\\\"readonlyCell\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],[23,[\\\"readonlyCell\\\"]],[23,[\\\"getFlatpickrRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/timeflatpickr/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/travel-needs/component\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // status of travel needs within the UI\n  const STATUS_TYPE_EXISTING = 'existing'; // already part of rider\n\n  const STATUS_TYPE_AVAILABLE = 'available'; // available for rider to add\n\n  const STATUS_TYPE_ADDED = 'added'; // it will be added to rider once it is saved\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-travel-need'],\n    store: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    value: null,\n    disabled: false,\n    pcaState: false,\n    serviceAnimalState: false,\n    travelNeedTypes: null,\n    passengerTypes: null,\n    travelNeeds: Ember.computed.readOnly('value'),\n    countPath: Ember.computed.readOnly('extra.countPath'),\n    travelNeedTypePath: Ember.computed.readOnly('extra.travelNeedTypePath'),\n    passengerTypePath: Ember.computed.readOnly('extra.passengerTypePath'),\n    modelName: Ember.computed.readOnly('field.modelName'),\n    equipments: Ember.computed('record.{equipments,newTravelNeeds}', function () {\n      this.get('record.equipments').map(travelNeed => {\n        travelNeed.set('status', STATUS_TYPE_EXISTING);\n      });\n      const recordNewTravelNeeds = this.get('record.newTravelNeeds') || [];\n      const recordEquipments = this.get('record.equipments') || [];\n      recordNewTravelNeeds.map(travelNeed => {\n        travelNeed.set('status', STATUS_TYPE_AVAILABLE);\n      });\n      return _lodash.default.concat(recordEquipments, recordNewTravelNeeds);\n    }),\n    newEquipments: Ember.computed('record.newTravelNeeds', function () {\n      const newTravelNeeds = this.get('record.newTravelNeeds') || [];\n      newTravelNeeds.filter(travelNeed => {\n        return travelNeed.get('passengerType.isClient') && !travelNeed.get('travelNeedType.isServiceAnimal') && travelNeed.get('status') === STATUS_TYPE_AVAILABLE;\n      });\n    }),\n    extraPassengers: Ember.computed('record.{extraPassengers,newTravelNeeds}', function () {\n      const recordExtraPassengers = this.get('record.extraPassengers') || [];\n      const recordNewTravelNeed = this.get('record.newTravelNeeds') || [];\n\n      const tempArray = _lodash.default.concat(recordExtraPassengers, recordNewTravelNeed);\n\n      const extraPassObjects = []; // arrange in specific order\n\n      extraPassObjects.push(tempArray.find(travelNeed => travelNeed.get('travelNeedType.isServiceAnimal')));\n      extraPassObjects.push(tempArray.find(travelNeed => travelNeed.get('passengerType.isPca')));\n      extraPassObjects.push(tempArray.find(travelNeed => travelNeed.get('passengerType.isCompanion')));\n      return extraPassObjects;\n    }),\n    init: function () {\n      this._super(...arguments);\n\n      const travelNeedTypeModelName = this.get('extra.travelNeedTypeModelName') || [];\n      const passengerTypeModelName = this.get('extra.passengerTypeModelName') || [];\n      this.set('travelNeedTypes', this.get('store').peekAll(travelNeedTypeModelName));\n      this.set('passengerTypes', this.get('store').peekAll(passengerTypeModelName));\n      this.setupNewEquipments();\n      this.setupNewExtraPassengers();\n    },\n    clientPassengerType: function () {\n      const passengerTypes = this.get('passengerTypes') || [];\n      return passengerTypes.find(types => types.isClient);\n    },\n    serviceAnimalTravelNeedType: function () {\n      const travelNeedTypes = this.get('travelNeedTypes') || [];\n      return travelNeedTypes.find(types => types.isServiceAnimal);\n    },\n    ambulatoryTravelNeedType: function () {\n      const travelNeedTypes = this.get('travelNeedTypes') || [];\n      return travelNeedTypes.find(types => types.isAmbulatory);\n    },\n    pcaPassengerType: function () {\n      const passengerTypes = this.get('passengerTypes') || [];\n      return passengerTypes.find(types => types.isPca);\n    },\n    companionPassengerType: function () {\n      const passengerTypes = this.get('passengerTypes') || [];\n      return passengerTypes.find(types => types.isCompanion);\n    },\n    setupNewEquipments: function () {\n      const currentTravelNeeds = this.get('record.equipments') || [];\n      const newTravelNeeds = []; // add other travel need types that this person does not have\n      // with empty count\n\n      this.get('travelNeedTypes').map(travelNeedType => {\n        if (!travelNeedType.isServiceAnimal && _lodash.default.findIndex(currentTravelNeeds, travelNeed => {\n          return travelNeed.get('travelNeedType.id') === travelNeedType.id;\n        }) < 0) {\n          const newRecord = this.get('store').createRecord(this.get('modelName'));\n          newRecord.set('travelNeedType', travelNeedType);\n          newRecord.set('passengerType', this.clientPassengerType());\n          newTravelNeeds.push(newRecord);\n        }\n      });\n      this.set('record.newTravelNeeds', newTravelNeeds);\n    },\n    setupNewExtraPassengers: function () {\n      const currentTravelNeeds = this.get('record.extraPassengers') || [];\n      const newTravelNeeds = [];\n      let retVal; // add service animal travel need type if this rider does not have\n      // in current travel needs. leave count as empty\n\n      retVal = currentTravelNeeds.find(travelNeed => travelNeed.get('travelNeedType.isServiceAnimal'));\n\n      if (_lodash.default.isUndefined(retVal)) {\n        const newRecord = this.get('store').createRecord(this.get('modelName'));\n        this.set('serviceAnimalState', false);\n        newRecord.set('travelNeedType', this.serviceAnimalTravelNeedType());\n        newRecord.set('passengerType', this.clientPassengerType());\n        newTravelNeeds.push(newRecord);\n      } else {\n        this.set('serviceAnimalState', retVal.get('count') > 0);\n      } // add pca passenger type for this rider if it does not have\n      // in current travel needs. leave count as empty\n\n\n      retVal = currentTravelNeeds.find(travelNeed => {\n        return travelNeed.get('passengerType.isPca');\n      });\n\n      if (_lodash.default.isUndefined(retVal)) {\n        const newRecord = this.get('store').createRecord(this.get('modelName'));\n        this.set('pcaState', false);\n        newRecord.set('travelNeedType', this.ambulatoryTravelNeedType());\n        newRecord.set('passengerType', this.pcaPassengerType());\n        newTravelNeeds.push(newRecord);\n      } else {\n        this.set('pcaState', retVal.get('count') > 0);\n      } // add companion passenger type for this rider if it does not have\n      // in current travel needs. leave count as empty\n\n\n      retVal = currentTravelNeeds.find(travelNeed => travelNeed.get('passengerType.isCompanion'));\n\n      if (_lodash.default.isUndefined(retVal)) {\n        const newRecord = this.get('store').createRecord(this.get('modelName'));\n        newRecord.set('travelNeedType', this.ambulatoryTravelNeedType());\n        newRecord.set('passengerType', this.companionPassengerType());\n        newTravelNeeds.push(newRecord);\n      }\n\n      this.get('record.newTravelNeeds').addObjects(newTravelNeeds);\n    },\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(parseInt(value, 10), options);\n      },\n\n      onAddNewTravelNeed() {\n        const travelNeed = this.get('newEquipments').find(currTravelNeed => {\n          return currTravelNeed.status === STATUS_TYPE_AVAILABLE && currTravelNeed.isEquipment;\n        });\n\n        if (!Ember.isNone(travelNeed)) {\n          travelNeed.set('status', STATUS_TYPE_ADDED);\n        }\n      },\n\n      onTravelNeedTypeChange(oldTravelNeed, newTravelNeed) {\n        oldTravelNeed.set('status', STATUS_TYPE_AVAILABLE);\n        oldTravelNeed.set('count', 0);\n        newTravelNeed.set('status', STATUS_TYPE_ADDED);\n      },\n\n      onRemoveTravelNeed(record, valuePath) {\n        const options = {\n          record,\n          valuePath\n        };\n\n        if (!Ember.isNone(record)) {\n          record.set('status', STATUS_TYPE_AVAILABLE);\n        }\n\n        this.get('onChange')(0, options);\n      },\n\n      onPCAChange(record, valuePath\n      /*, value*/\n      ) {\n        this.toggleProperty('pcaState');\n        const options = {\n          record,\n          valuePath\n        };\n        const pcaState = this.get('pcaState') ? 1 : 0;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(pcaState, options);\n      },\n\n      onServiceAnimalChange(record, valuePath\n      /*, value*/\n      ) {\n        this.toggleProperty('serviceAnimalState');\n        const options = {\n          record,\n          valuePath\n        };\n        const serviceAnimalState = this.get('serviceAnimalState') ? 1 : 0;\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(serviceAnimalState, options);\n      },\n\n      onPassengerTypeChange(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.get('onChange')(value, options);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/travel-needs/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"HhRISjYg\",\n    \"block\": \"{\\\"symbols\\\":[\\\"travelNeed\\\",\\\"travelNeed\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-div\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 travel-need-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"equipments\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"status\\\"]],\\\"existing\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"newEquipments\\\"]],[22,2,[]],[27,\\\"readonly\\\",[true],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,4,[\\\"travelNeedType\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[11,\\\"max\\\",\\\"10\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],[23,[\\\"countPath\\\"]]],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,2,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveTravelNeed\\\",[22,2,[]],[23,[\\\"countPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary remove-travelNeed-button\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"status\\\"]],\\\"added\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"newEquipments\\\"]]],null],[27,\\\"readonly\\\",[[22,2,[]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedTypeChange\\\",[22,2,[]]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,3,[\\\"travelNeedType\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[11,\\\"max\\\",\\\"10\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],[23,[\\\"countPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"\\\"],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,2,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveTravelNeed\\\",[22,2,[]],[23,[\\\"countPath\\\"]],[23,[\\\"target\\\",\\\"value\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-outline-secondary remove-travelNeed-button\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewTravelNeed\\\",[23,[\\\"record\\\"]]],null]],[11,\\\"class\\\",\\\"multitype-button btn btn-outline-secondary\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        Add New Travel Need\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-div\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"mt-3 travel-need-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"extraPassengers\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,1,[\\\"isExtraPassenger\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"travelNeedType\\\",\\\"name\\\"]],\\\"serviceAnimal\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label switch-cell-label\\\"],[9],[1,[22,1,[\\\"travelNeedType\\\",\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"onoffswitch\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"serviceAnimalSwitch\\\"],[11,\\\"class\\\",\\\"form-control countInput onoffswitch-checkbox\\\"],[12,\\\"checked\\\",[21,\\\"serviceAnimalState\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[\\\"travelNeedType\\\",\\\"name\\\"]],\\\"serviceAnimal\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onServiceAnimalChange\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"onoffswitch-label\\\"],[11,\\\"for\\\",\\\"serviceAnimalSwitch\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-inner\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-switch\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"passengerType\\\",\\\"name\\\"]],\\\"pca\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label switch-cell-label\\\"],[9],[0,\\\"PCA\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"onoffswitch\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"pcaSwitch\\\"],[11,\\\"class\\\",\\\"form-control countInput onoffswitch-checkbox\\\"],[12,\\\"checked\\\",[21,\\\"pcaState\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[\\\"passengerType\\\",\\\"name\\\"]],\\\"pca\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onPCAChange\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"onoffswitch-label\\\"],[11,\\\"for\\\",\\\"pcaSwitch\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-inner\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"onoffswitch-switch\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Companion\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[11,\\\"max\\\",\\\"10\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"countPath\\\"]]],null]],null]],[11,\\\"placeholder\\\",\\\"\\\"],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\",[22,1,[]],[23,[\\\"countPath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"button-cell\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/travel-needs/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/component\", [\"exports\", \"lodash\", \"ember-light-table\", \"adept-iq/pods/components/form-components/vehicle-selection/config\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _lodash, _emberLightTable, _config, _fetchAssignableVehicleDrivers, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // sort out proxies\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    classNames: ['form-components-vehicle-selection'],\n    store: Ember.inject.service(),\n    vehiclesTable: null,\n    vehicleIdSearchText: '',\n    vehicleSort: null,\n    // dispatchRoute: readOnly('stackFrame.options.dispatchRoute'),\n    route: Ember.computed.readOnly('dispatchRoute.route'),\n    // scheduling route,\n    placeholderVehicle: Ember.computed.readOnly('route.vehicle'),\n    provider: Ember.computed.readOnly('route.provider'),\n    plannedStartTime: Ember.computed.readOnly('route.plannedStartTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('route.plannedEndTime'),\n    //used in fetch vehicle driver mixin\n    hasSelectedVehicle: Ember.computed.bool('selectedVehicle.id'),\n    hasSelectedDriver: Ember.computed.bool('selectedDriver.id'),\n    routeVehicleDriver: Ember.computed.alias('dispatchRoute.latestRouteVehicleDriver'),\n    refreshFlagPath: Ember.computed.readOnly('extra.refreshFlagPath'),\n    selectedVehiclePath: Ember.computed.readOnly('extra.selectedVehiclePath'),\n    previousSelectedVehicle: Ember.computed.readOnly('extra.previousSelectedVehicle'),\n    refreshFlag: null,\n    isUnselectAssignedVehicle: Ember.computed.readOnly('unselectAssignedVehicle'),\n    notShowAssignedVehicle: Ember.computed.readOnly('extra.notShowAssignedVehicle'),\n\n    // do not show assigned vehicle for rescue and breakdown routes.\n    init() {\n      this._super(...arguments);\n\n      const dispatchRoute = this.get('dispatchRoute');\n      const record = this.get('record');\n      const vehiclesTable = new _emberLightTable.default(_config.vehiclesTableColumns);\n      const vehicleSort = {\n        valuePath: '',\n        sortOrder: 'asc'\n      };\n      this.set('vehicleSort', vehicleSort);\n      this.set('vehiclesTable', vehiclesTable);\n\n      if (Ember.isNone(dispatchRoute) && Ember.isPresent(record)) {\n        this.set('dispatchRoute', record);\n      } // initialize observer\n\n\n      this.updateVehiclesTable();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('selectedDriver', currentState.selectedDriver);\n        this.set('selectedVehicle', currentState.selectedVehicle);\n        this.set('driverPhoneNumber', currentState.driverPhoneNumber);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setVehicle();\n      this.refresh();\n      const refreshFlagPath = this.get('refreshFlagPath');\n\n      if (Ember.isPresent(refreshFlagPath)) {\n        const propertyName = `record.${refreshFlagPath}`;\n        this.addObserver(propertyName, this.refresh);\n      }\n    },\n\n    willDestroyElement() {\n      const refreshFlagPath = this.get('refreshFlagPath');\n\n      if (Ember.isPresent(refreshFlagPath)) {\n        const propertyName = `record.${refreshFlagPath}`;\n        this.removeObserver(propertyName, this.refresh);\n      }\n\n      this._super(...arguments);\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n    },\n\n    didUpdateAttrs() {\n      this._super(...arguments);\n\n      this.setVehicle();\n      const oldRefreshFlag = this.get('_previousRefreshFlag');\n      const newRefreshFlag = this.get('refreshFlag');\n\n      if (oldRefreshFlag && oldRefreshFlag !== newRefreshFlag) {\n        this.refresh();\n      }\n\n      this.set('_previousRefreshFlag', newRefreshFlag);\n    },\n\n    setVehicle() {\n      // Avoid circular updates: need to store previousSelectedVehicle, so we can restore previous selection.\n      if (this.get('previousSelectedVehicle.id') && this.get('previousSelectedVehicle.id') === this.get('selectedVehicle.id')) {\n        return;\n      } // Avoid select None and set the default vehicle back.\n\n\n      if (this.get('isNoVehicle')) return; // vehicle can come from dispatch or scheduling\n\n      let vehicle = this.get('previousSelectedVehicle');\n\n      if (!this.get('notShowAssignedVehicle') && Ember.isNone(vehicle)) {\n        vehicle = (0, _unwrapProxy.unwrapProxy)(this.get('routeVehicleDriver.vehicle')) || (0, _unwrapProxy.unwrapProxy)(this.get('placeholderVehicle'));\n      }\n\n      this.setProperties({\n        selectedVehicle: (0, _unwrapProxy.unwrapProxy)(vehicle)\n      });\n      this.updateVehiclesTable();\n    },\n\n    refresh() {\n      const selectedVehiclePath = this.get('selectedVehiclePath');\n\n      if (Ember.isPresent(selectedVehiclePath)) {\n        const selectedVehicle = (0, _unwrapProxy.unwrapProxy)(this.get(`record.${selectedVehiclePath}`));\n\n        if (Ember.isEmpty(selectedVehicle)) {\n          this.setProperties({\n            selectedVehicle: null\n          });\n        }\n      }\n\n      this.set('vehicleSort.valuePath', null);\n      this.set('vehicleSort.sortOrder', null);\n      this.set('vehicleIdSearchText', '');\n      this.get('vehiclesTable.rows').clear();\n      this.get('fetchVehiclesTask').perform();\n    },\n\n    sortVehicleOptions(vehicles, valuePath, sortOrder) {\n      if (valuePath) {\n        return _lodash.default.orderBy(vehicles, vehicle => {\n          return Ember.get(vehicle, valuePath);\n        }, sortOrder);\n      }\n\n      const sortedVehicles = _lodash.default.sortBy(vehicles, 'vehicle.name');\n\n      return sortedVehicles;\n    },\n\n    filterVehicleOptions(vehicles, searchText) {\n      if (Ember.isEmpty(searchText)) {\n        return vehicles;\n      }\n\n      const filteredVehicles = vehicles.filter(option => {\n        // Don't filter out None option\n        if (option.isNoVehicle) return true;\n        const vehicle = option.vehicle;\n\n        if (vehicle) {\n          if (vehicle.name.startsWith(searchText)) {\n            return true;\n          }\n        }\n\n        return false;\n      });\n      return filteredVehicles;\n    },\n\n    vehicleOptions: Ember.computed('vehicles.[]', 'vehicle.capacityCounts', 'vehicleSort.{valuePath,sortOrder}', 'vehicleIdSearchText', function () {\n      const vehicles = this.get('vehicles') || [];\n      const valuePath = this.get('vehicleSort.valuePath');\n      const sortOrder = this.get('vehicleSort.sortOrder');\n      const vehicleIdSearchText = this.get('vehicleIdSearchText');\n      const selectedVehicle = this.get('selectedVehicle') || {\n        noOfWheelChairSeats: 0,\n        noOfAmbulatorySeats: 0,\n        noOfServiceAnimalSeats: 0\n      };\n      const options = [{\n        vehicle: null,\n        isNoVehicle: true\n      }];\n\n      if (!Ember.isEmpty(vehicles)) {\n        vehicles.forEach(vehicle => {\n          options.push({\n            vehicle,\n            isNoVehicle: false\n          });\n        });\n      }\n\n      const filteredVehicles = this.filterVehicleOptions(options, vehicleIdSearchText);\n      const sortedVehicles = this.sortVehicleOptions(filteredVehicles, valuePath, sortOrder); // always show selected vehicle\n\n      if (selectedVehicle && !this.get('notShowAssignedVehicle') && Ember.isEmpty(sortedVehicles.findBy('vehicle.id', selectedVehicle.id)) && !selectedVehicle.isBroken && !this.get('isNoVehicle')) {\n        sortedVehicles.unshift({\n          vehicle: selectedVehicle,\n          isNoVehicle: false\n        });\n      }\n\n      return sortedVehicles;\n    }),\n    updateVehiclesTable: Ember.observer('vehicleOptions', function () {\n      const vehicleOptions = this.get('vehicleOptions');\n      const selectedVehicle = this.get('selectedVehicle');\n      this.get('vehiclesTable').setRows(vehicleOptions);\n      const rows = this.get('vehiclesTable.rows');\n      const selectedRow = selectedVehicle ? rows.findBy('vehicle', selectedVehicle) : rows.findBy('isNoVehicle', true);\n\n      if (selectedRow && !this.get('isUnselectAssignedVehicle')) {\n        selectedRow.set('selected', true);\n      }\n    }),\n\n    updateVehicleSearch(searchText) {\n      this.set('vehicleIdSearchText', searchText);\n    },\n\n    actions: {\n      onColumnClick(column) {\n        const valuePath = column.valuePath;\n        const sortOrder = column.ascending ? 'asc' : 'desc';\n        this.set('vehicleSort.valuePath', valuePath);\n        this.set('vehicleSort.sortOrder', sortOrder);\n      },\n\n      onSearchTextChange(searchText) {\n        const previousSearchText = this.get('vehicleIdSearchText');\n\n        if (searchText === previousSearchText) {\n          return;\n        }\n\n        Ember.run.debounce(this, 'updateVehicleSearch', searchText, 250);\n      },\n\n      onClearSearchClick() {\n        this.set('vehicleIdSearchText', '');\n      },\n\n      onSolutionRowClick(row\n      /*, event */\n      ) {\n        const rows = this.get('vehiclesTable.rows');\n        const selectedRow = rows.findBy('selected');\n        if (row === selectedRow) return;\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n        }\n\n        row.set('selected', true);\n        const vehicle = row.get('vehicle');\n        const selectedVehiclePath = this.get('selectedVehiclePath');\n        this.set('selectedVehicle', vehicle);\n        this.set('isNoVehicle', row.get('isNoVehicle'));\n\n        if (Ember.isPresent(selectedVehiclePath)) {\n          this.set(`record.${selectedVehiclePath}`, vehicle);\n        } else {\n          this.onSelectedVehicle(vehicle);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.vehiclesTableColumns = void 0;\n  const vehiclesTableColumns = [{\n    width: '40px',\n    resizable: false,\n    cellComponent: 'table/cells/radio-button'\n  }, {\n    label: 'Vehicle ID',\n    valuePath: 'vehicle.name',\n    resizable: true,\n    width: '90px',\n    minResizeWidth: 40,\n    component: 'form-components/vehicle-selection/vehicle-header',\n    cellComponent: 'form-components/vehicle-selection/vehicle-cell'\n  }, {\n    label: 'Wheelchairs',\n    valuePath: 'vehicle.noOfWheelChairFlexSeats',\n    resizable: true,\n    width: '100px',\n    minResizeWidth: 40,\n    component: 'form-components/vehicle-selection/vehicle-header',\n    cellComponent: 'form-components/vehicle-selection/vehicle-cell'\n  }, {\n    label: 'Ambulatory Seats',\n    valuePath: 'vehicle.noOfAmbulatoryFlexSeats',\n    resizable: true,\n    width: '100px',\n    minResizeWidth: 40,\n    component: 'form-components/vehicle-selection/vehicle-header',\n    cellComponent: 'form-components/vehicle-selection/vehicle-cell'\n  }, {\n    label: 'Service Animals',\n    valuePath: 'vehicle.noOfServiceAnimalSeats',\n    resizable: true,\n    width: '100px',\n    minResizeWidth: 40,\n    component: 'form-components/vehicle-selection/vehicle-header',\n    cellComponent: 'form-components/vehicle-selection/vehicle-cell'\n  }, {\n    label: 'Vehicle Type',\n    valuePath: 'vehicle.vehicleType.name',\n    resizable: true,\n    minResizeWidth: 40,\n    component: 'form-components/vehicle-selection/vehicle-header',\n    cellComponent: 'form-components/vehicle-selection/vehicle-cell'\n  }];\n  _exports.vehiclesTableColumns = vehiclesTableColumns;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"UEC38Ufm\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"p\\\"],[9],[0,\\\"Select one vehicle that matches the route's Travel Needs. Vehicles that do not match are listed in red.\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"vehicle-search-row\\\"],[9],[0,\\\"\\\\n  Vehicle ID \\\\n  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"vehicle-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"vehicleIdSearchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"vehicle-search-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onClearSearchClick\\\"]],[10],[0,\\\"  \\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"vehiclesTable\\\"]]],[[\\\"estimatedRowHeight\\\",\\\"occlusion\\\",\\\"extra\\\"],[23,true,[27,\\\"hash\\\",null,[[\\\"travelNeedCounts\\\",\\\"dispatchRoute\\\"],[[23,[\\\"route\\\",\\\"travelNeedCounts\\\"]],[23,[\\\"dispatchRoute\\\"]]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/form-components/vehicle-selection/template.hbs' @ L24:C6) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/form-components/vehicle-selection/template.hbs' @ L31:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"tableActions\\\",\\\"onRowClick\\\",\\\"rowComponent\\\"],[false,[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]]],[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null],[27,\\\"component\\\",[\\\"form-components/vehicle-selection/vehicle-row\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchVehiclesTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/form-components/vehicle-selection/template.hbs' @ L39:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchVehiclesTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/form-components/vehicle-selection/template.hbs' @ L45:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[23,[\\\"fetchVehiclesTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"vehiclesTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/form-components/vehicle-selection/template.hbs' @ L51:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            No vehicles found.\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"vehicle-selection-detail\\\"],[9],[0,\\\" \\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"vehicle-selection-header\\\"],[9],[0,\\\"Vehicle Detail\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchVehiclesTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-loader\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"selectedVehicle\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Type\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"vehicleType\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Wheelchairs\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"noOfWheelChairSeats\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Ambulatory Seats\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"noOfAmbulatorySeats\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Service Animals\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"noOfServiceAnimalSeats\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Placeholder\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"placeholder\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[9],[0,\\\"No vehicle selected.\\\"],[10],[0,\\\"\\\\n  \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/vehicle-selection/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/vehicle-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNameBindings: ['meetsTravelNeeds'],\n    meetsTravelNeeds: Ember.computed('row.vehicle.noOfServiceAnimalSeats', 'extra.travelNeedCounts', function () {\n      const vehicle = this.get('row.vehicle');\n      const needs = this.get('extra.travelNeedCounts');\n      const typesToCheck = ['serviceAnimal'];\n\n      if (!vehicle || this.get('row.isNoVehicle')) {\n        return false;\n      }\n\n      const needsNotMet = typesToCheck.some(need => {\n        return needs[need] > vehicle.get(`noOf${Ember.String.capitalize(need)}Seats`);\n      });\n\n      if (needsNotMet) {\n        return 'needs-not-met';\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/vehicle-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EF2PUC6z\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[23,[\\\"column\\\",\\\"label\\\"]],\\\"Vehicle ID\\\"],null],[23,[\\\"row\\\",\\\"isNoVehicle\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"  None\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"is-empty\\\",[[23,[\\\"value\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"  -\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/vehicle-selection/vehicle-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/vehicle-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-vehicle-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/vehicle-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8Xma87ak\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/vehicle-selection/vehicle-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicle-selection/vehicle-row/component\", [\"exports\", \"ember-light-table/components/lt-row\", \"adept-iq/utils/vehicleCapacity\"], function (_exports, _ltRow, _vehicleCapacity) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ltRow.default.extend({\n    classNameBindings: ['isUnderCapacity', 'isDisabled'],\n    vehicle: Ember.computed.readOnly('row.vehicle'),\n    isDisabled: Ember.computed.readOnly('vehicle.placeholder'),\n    // we need to check maximum capacity per clusters of a route\n    isUnderCapacity: Ember.computed('extra.dispatchRoute.clusters.@each.maxTravelNeedCounts', 'vehicle.capacityCounts', function () {\n      const dispatchRoute = this.get('extra.dispatchRoute');\n      const vehicleCapacityCounts = this.get('vehicle.capacityCounts');\n      return (0, _vehicleCapacity.isUnderCapacity)(dispatchRoute, vehicleCapacityCounts);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicleenum/component\", [\"exports\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\"], function (_exports, _fetchAssignableVehicleDrivers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    classNames: ['form-components-select'],\n    store: Ember.inject.service(),\n    vehicles: null,\n    value: null,\n    disabled: false,\n    extra: null,\n    dataFromModel: false,\n    // record is dispatchRoute\n    options: Ember.computed.alias('extra.options'),\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n    onlyAssignableVehicles: Ember.computed.readOnly('extra.onlyAssignableVehicles'),\n    optionTravelNeedCounts: Ember.computed.alias('extra.optionTravelNeedCounts'),\n    dispatchRoute: Ember.computed.readOnly('record'),\n    provider: Ember.computed.readOnly('record.route.provider'),\n    //used in fetch vehicle driver mixin\n    plannedStartTime: Ember.computed.readOnly('record.replacementStartTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('record.replacementEndTime'),\n\n    //used in fetch vehicle driver mixin\n    init() {\n      this._super(...arguments);\n\n      const onlyAssignableVehicles = this.get('onlyAssignableVehicles');\n\n      if (onlyAssignableVehicles) {\n        this.get('fetchVehiclesTask').perform();\n      }\n    },\n\n    availableVehicles: Ember.computed('plannedStartTime', 'plannedEndTime', 'vehicles.[]', function () {\n      const onlyAssignableVehicles = this.get('onlyAssignableVehicles');\n      if (!onlyAssignableVehicles) return this.get('store').peekAll(this.get('extra.optionModelName'));\n      const vehicles = this.get('vehicles');\n      if (!vehicles || !vehicles.length) return [];\n      return vehicles;\n    }),\n    selected: Ember.computed('value', 'options', function () {\n      if (!Ember.isNone(this.get('extra.optionModelName'))) {\n        return this.get('options').find(option => {\n          return option.id === this.get('value.id');\n        });\n      }\n\n      return false;\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/form-components/vehicleenum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"D7ZXVgQY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],true],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"searchField\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],[23,[\\\"availableVehicles\\\"]],\\\"name\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],false],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"searchField\\\",\\\"options\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],\\\"name\\\",[27,\\\"readonly\\\",[[23,[\\\"availableVehicles\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/form-components/vehicleenum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/availabilities/component\", [\"exports\", \"ember-changeset-cp-validations\", \"ember-changeset\", \"lodash\", \"adept-iq/config/environment\", \"moment\"], function (_exports, _emberChangesetCpValidations, _emberChangeset, _lodash, _environment, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const MAX_DATE = (0, _moment.default)().add(1000, 'years');\n\n  var _default = Ember.Component.extend({\n    classNames: ['availabilities'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    availabilities: null,\n    parentModel: null,\n    shouldDisplayValidations: true,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    daysOfWeek: Ember.computed('filteredAvailabilities', function () {\n      const availabilities = this.get('filteredAvailabilities') || [];\n      const dayOptions = [{\n        day: 'monday',\n        display: 'Mon',\n        disabled: false\n      }, {\n        day: 'tuesday',\n        display: 'Tues',\n        disabled: false\n      }, {\n        day: 'wednesday',\n        display: 'Wed',\n        disabled: false\n      }, {\n        day: 'thursday',\n        display: 'Thurs',\n        disabled: false\n      }, {\n        day: 'friday',\n        display: 'Fri',\n        disabled: false\n      }, {\n        day: 'saturday',\n        display: 'Sat',\n        disabled: false\n      }, {\n        day: 'sunday',\n        display: 'Sun',\n        disabled: false\n      }, {\n        day: 'holiday',\n        display: 'Holiday',\n        disabled: false\n      }];\n      availabilities.forEach(availability => {\n        dayOptions.forEach(option => {\n          if (availability.get(option.day)) {\n            option.disabled = true;\n          }\n        });\n      });\n      return dayOptions;\n    }),\n    filteredAvailabilities: Ember.computed('availabilities.@each.hasDeleted', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.filter(avail => !avail.get('hasDeleted'));\n    }),\n    disableAddAvailabilityBtn: Ember.computed('filteredAvailabilities', 'daysOfWeek.@each.disabled', function () {\n      const options = this.get('daysOfWeek');\n      const totalDOWSelection = this.getDOWCount(this.get('filteredAvailabilities')) || [];\n      const everyOptionsIsSelected = options.every(option => option.disabled);\n      return everyOptionsIsSelected || totalDOWSelection === options.length;\n    }),\n\n    getDOWCount(availabilities) {\n      return availabilities.reduce((totalDOW, avail) => {\n        const DOWLength = avail.data && avail.data.DOWSelected ? avail.data.DOWSelected.length : 0;\n        return totalDOW + DOWLength;\n      }, 0);\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('availabilityRef', this);\n    },\n\n    willDestroyElement() {\n      const dayOptions = this.get('daysOfWeek') || [];\n      dayOptions.forEach(day => {\n        Ember.set(day, 'disabled', false);\n      });\n\n      this._super(...arguments);\n    },\n\n    configureAvailabilities(availability) {\n      const {\n        validateFn,\n        validationMap\n      } = (0, _emberChangesetCpValidations.buildChangeset)(availability);\n      return new _emberChangeset.default(availability, validateFn, validationMap);\n    },\n\n    calcEndDate(availabilities, routeLength) {\n      const start = availabilities.get('shiftStart');\n      if (!start || !routeLength) return null;\n      const clone = (0, _moment.default)(start);\n      const duration = routeLength.split(':');\n      const hours = duration[0];\n      const minutes = duration.length > 1 ? duration[1] : 0;\n      clone.add(hours, 'hours');\n      clone.add(minutes, 'minutes');\n      return clone.toDate();\n    },\n\n    async onDateChange(record, path, dateStr) {\n      record.set(path, dateStr);\n      const calcEndDate = this.get('calcEndDate')(record, record.get('routeLength'));\n      record.set('calcEndDate', calcEndDate);\n    },\n\n    actions: {\n      onRouteLengthChange: async function (availabilities, maskObj) {\n        const routeLength = maskObj.masked;\n        const oldVal = availabilities.get('routeLength'); // This method gets called multiple times (even while hitting a ENTER key). So If oldValue is equal to newValue then no need to validate\n\n        if (routeLength === oldVal) {\n          return;\n        }\n\n        let value = maskObj.masked.replace(/_/img, '0');\n        if (!value) value = '00:00';\n        availabilities.set('routeLength', routeLength);\n        const calcEndDate = this.get('calcEndDate')(availabilities, value);\n        availabilities.set('calcEndDate', calcEndDate);\n      },\n\n      async onDOWChange(availability, options) {\n        const filteredAvailabilities = this.get('filteredAvailabilities').filter(avail => avail !== availability);\n        const dayOptions = this.get('daysOfWeek') || [];\n        const DOWSelected = [];\n        dayOptions.forEach(day => {\n          availability.set(day.day, false);\n        });\n        let deselectedDayOptions = dayOptions; // updated DOWs on availability\n\n        options.forEach(option => {\n          availability.set(option.day, true);\n          const findDay = dayOptions.find(dayOption => dayOption.day === option.day);\n\n          if (findDay) {\n            Ember.set(findDay, 'disabled', true);\n            DOWSelected.pushObject(findDay);\n          }\n        });\n        availability.set('DOWSelected', DOWSelected); // any days missing re-enable those days\n\n        filteredAvailabilities.forEach(avail => {\n          const curDOW = avail.get('DOWSelected');\n          deselectedDayOptions = (0, _lodash.differenceBy)(deselectedDayOptions, curDOW, 'day');\n        });\n        deselectedDayOptions = (0, _lodash.differenceBy)(deselectedDayOptions, DOWSelected, 'day');\n        deselectedDayOptions.forEach(option => {\n          Ember.set(option, 'disabled', false);\n        });\n      },\n\n      onDateChange(record, path, value) {\n        this.onDateChange(record, path, value);\n      },\n\n      addNewAvailability() {\n        const store = this.get('store');\n        const modelName = this.get('modelName');\n        const addAvailability = store.createRecord(modelName, {\n          shiftStart: new Date()\n        });\n        const availability = this.configureAvailabilities(addAvailability);\n        this.get('availabilities').pushObject(availability);\n        this.get('availabilities').forEach(avail => {\n          const shiftStart = avail.get('shiftStart');\n          const calcEndDate = avail.get('calcEndDate');\n          avail.setProperties({\n            startTime: shiftStart,\n            shiftEnd: calcEndDate,\n            endTime: MAX_DATE.toDate()\n          });\n        });\n      },\n\n      onRemoveAvailability(availability) {\n        const dayOptions = this.get('daysOfWeek');\n        const DOWSelected = availability.get('DOWSelected');\n        const deselectedDayOptions = (0, _lodash.intersectionBy)(dayOptions, DOWSelected, 'day') || [];\n        deselectedDayOptions.forEach(option => {\n          Ember.set(option, 'disabled', false);\n        });\n        availability.set('hasDeleted', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/availabilities/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"9n7VaGs8\",\n    \"block\": \"{\\\"symbols\\\":[\\\"availability\\\",\\\"index\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"availability-layout\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"add-new-availability-btn\\\"],[12,\\\"disabled\\\",[21,\\\"disableAddAvailabilityBtn\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"addNewAvailability\\\"],null]],[9],[0,\\\"\\\\n      Add Availability \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[2,\\\" information label row \\\"],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filteredAvailabilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-lg-5 col-3\\\"],[9],[0,\\\"Day(s) Of Week\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Shift Start\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Shift Length\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Shift End\\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[2,\\\" input row \\\"],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row \\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-lg-5 col-3 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[22,1,[\\\"error\\\",\\\"DOWSelected\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"closeOnSelect\\\",\\\"onchange\\\"],[[23,[\\\"daysOfWeek\\\"]],[22,1,[\\\"DOWSelected\\\"]],\\\"Select Day Of Week\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDOWChange\\\",[22,1,[]]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[\\\"display\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[22,1,[\\\"error\\\",\\\"shiftStart\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"placeholder\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[true,false,true,\\\"HH:MM\\\",[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[22,1,[\\\"shiftStart\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",[22,1,[]],\\\"shiftStart\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"and\\\",[[22,1,[\\\"error\\\",\\\"routeLength\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null]],null],\\\"error\\\"],null],[22,1,[\\\"routeLength\\\"]],\\\"HH:MM\\\",\\\"99:99\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRouteLengthChange\\\",[22,1,[]]],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"format\\\",\\\"readonlyCell\\\",\\\"value\\\"],[true,false,true,true,\\\"\\\",[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],true,[22,1,[\\\"calcEndDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveAvailability\\\",[22,1,[]]],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"text\\\"],[\\\"bottom\\\",\\\"Remove Availability\\\"]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/availabilities/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/base-table/component\", [\"exports\", \"resize-observer-polyfill\"], function (_exports, _resizeObserverPolyfill) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-component'],\n    classNameBindings: ['disabled'],\n    // override with per-widget static configuration\n    config: null,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._resizeObserver = new _resizeObserverPolyfill.default(() => {\n        Ember.run.debounce(this, 'onWidgetResize', 250);\n      });\n\n      this._resizeObserver.observe(this.$()[0]);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      if (this._resizeObserver) {\n        this._resizeObserver.disconnect();\n\n        this._resizeObserver = null;\n      }\n    },\n\n    // override this to resize 3rd party integrations (e.g. map)\n    onWidgetResize() {}\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/content-overlay/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['content-overlay']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/content-overlay/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EEtvGW5g\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[2,\\\" reuse overlay from secondary window \\\"],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/content-overlay/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/datetimeflatpickr/component\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/encoding\", \"moment\"], function (_exports, _environment, _unwrapProxy, _encoding, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly,\n    notEmpty\n  } = Ember.computed;\n\n  var _default = Ember.Component.extend({\n    classNames: ['datetimeflatpickr-wrapper', 'flatpickr'],\n    classNameBindings: ['focus', 'disabled'],\n    flatpickrRef: null,\n    value: null,\n    disabled: false,\n    defaultDate: null,\n    maxDate: null,\n    minDate: null,\n    clickOpens: true,\n    format: null,\n    extra: null,\n    isOpened: null,\n    showCaret: true,\n    allowInput: false,\n    enableTime: false,\n    noCalendar: false,\n    showClearButton: false,\n    placeholder: 'Select Date',\n    closeCalender: false,\n    focus: readOnly('isOpened'),\n    minTimePath: readOnly('extra.minTimePath'),\n    maxTimePath: readOnly('extra.maxTimePath'),\n    valuePath: readOnly('extra.valuePath'),\n    isDatePresent: notEmpty('value'),\n\n    init() {\n      this._super(...arguments);\n\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('record'));\n      const valuePath = this.get('valuePath');\n      const minTimePath = this.get('minTimePath');\n      const maxDateTimePath = this.get('maxTimePath');\n\n      const format = this.get('format') || _environment.default.dateTimeFormat.dateFlatPickrDate;\n\n      if (record) {\n        let minDateValue = record.get(`${minTimePath}`);\n        minDateValue = minDateValue ? (0, _moment.default)(minDateValue).format(_environment.default.dateTimeFormat.dateTimeMoment) : (0, _moment.default)().format(_environment.default.dateTimeFormat.dateTimeMoment);\n        const minDate = minTimePath ? minDateValue : (0, _moment.default)(this.get('value')).format(_environment.default.dateTimeFormat.dateTimeMoment);\n        let maxDate = record.get(`${maxDateTimePath}`);\n        maxDate = maxDate ? (0, _moment.default)(maxDate).format(_environment.default.dateTimeFormat.dateTimeMoment) : null;\n        this.set('minDate', minDate);\n        this.set('maxDate', maxDate);\n      }\n\n      if (valuePath && record) {\n        this.set('value', record.get(valuePath));\n      } // time needs to be inclusive, so we cut seconds off\n\n\n      this.set('dateFormat', format);\n\n      if (this.get('readonlyCell')) {\n        this.set('clickOpens', false);\n      }\n    },\n\n    getCurrentDateValue() {\n      const value = this.get('value');\n\n      if ((0, _encoding.isDate)(value)) {\n        return value.getTime();\n      }\n\n      return value;\n    },\n\n    isValueChanged(changedValue) {\n      const value = this.getCurrentDateValue();\n      if (Ember.isEmpty(changedValue)) return true;\n      return value !== changedValue.getTime();\n    },\n\n    actions: {\n      isValidDate(value) {\n        const newValueMoment = (0, _moment.default)(value);\n\n        if (newValueMoment._isValid) {\n          this.set('value', newValueMoment.toDate());\n        }\n      },\n\n      onChangeDate(value) {\n        const changedValue = value[0];\n\n        if (!changedValue) {\n          this.get('onChange')(null);\n          this.set('isOpened', true);\n          this.flatpickrRef.toggle();\n        } //when AM/PM is changed, flatpickr  triggers the event two times.. it causes duplicate calling of onChange method\n        else if (this.isValueChanged(changedValue)) {\n          this.get('onChange')(changedValue);\n        }\n      },\n\n      onOpen() {\n        if (this.get('closeCalender')) {\n          this.send('toggleCalendar');\n          this.set('closeCalender', false);\n        } else {\n          this.set('isOpened', true);\n          this.set('closeCalender', true);\n        }\n      },\n\n      onClose(currentValue, stringValue, datePicker) {\n        const val = currentValue.length ? currentValue[0] : stringValue;\n        const newValueMoment = (0, _moment.default)(val);\n        this.set('isOpened', false);\n        this.set('closeCalender', false);\n\n        if (datePicker._input.value && newValueMoment._isValid) {\n          this.get('onChange')(newValueMoment.toDate());\n        }\n      },\n\n      toggleCalendar() {\n        if (this.get('isOpened')) return;\n        this.flatpickrRef.toggle();\n      },\n\n      onClearDate() {\n        this.get('onChange')(null);\n      },\n\n      onReady(_selectedDates, _dateStr, instance) {\n        if (Ember.isPresent(this.get('onReady'))) this.get('onReady')(instance);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/datetimeflatpickr/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"O7Ac2tZ5\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"class\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"dateFormat\\\",\\\"readonly\\\",\\\"disabled\\\",\\\"clickOpens\\\",\\\"noCalendar\\\",\\\"enableTime\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"defaultDate\\\",\\\"date\\\",\\\"placeholder\\\",\\\"time_24hr\\\",\\\"onChange\\\",\\\"onClose\\\",\\\"onOpen\\\",\\\"onReady\\\",\\\"getFlatpickrRef\\\"],[\\\"px-1\\\",\\\"en\\\",1,[23,[\\\"allowInput\\\"]],[23,[\\\"dateFormat\\\"]],[23,[\\\"readonlyCell\\\"]],[23,[\\\"disabled\\\"]],[23,[\\\"clickOpens\\\"]],[23,[\\\"noCalendar\\\"]],[23,[\\\"enableTime\\\"]],[23,[\\\"minDate\\\"]],[23,[\\\"maxDate\\\"]],[23,[\\\"defaultDate\\\"]],[23,[\\\"value\\\"]],[23,[\\\"placeholder\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onReady\\\"],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"flatpickrRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showClearButton\\\"]],[23,[\\\"isDatePresent\\\"]]],null]],null,{\\\"statements\\\":[[7,\\\"a\\\"],[11,\\\"class\\\",\\\"clear-button px-1\\\"],[11,\\\"title\\\",\\\"clear\\\"],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClearDate\\\"],null]],[11,\\\"data-clear\\\",\\\"\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showCaret\\\"]]],null,{\\\"statements\\\":[[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"input-button \\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"is-open\\\"],null]]]],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[11,\\\"title\\\",\\\"toggle\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/datetimeflatpickr/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/number-format/component\", [\"exports\", \"adept-iq/utils/regex-functions\"], function (_exports, _regexFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly\n  } = Ember.computed;\n\n  var _default = Ember.Component.extend({\n    classNames: ['ember-text-field-holder'],\n    value: null,\n    disabled: false,\n    extra: null,\n    placeholder: null,\n    oldVal: null,\n    numberFormat: _regexFunctions.REGEX_NUMBER,\n    removedNumberFormat: _regexFunctions.REGEX_REMOVE_DECIMAL_FORMAT,\n    min: readOnly('extra.min'),\n    max: readOnly('extra.max'),\n    isFloat: readOnly('extra.isFloat'),\n    isDecimalRemoved: readOnly('extra.isDecimalRemoved'),\n    digitPrecision: readOnly('extra.digitPrecision'),\n    onChange: null,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const isFloat = this.get('isFloat');\n\n      if (isFloat) {\n        this.set('numberFormat', _regexFunctions.REGEX_FLOAT);\n        this.set('removedNumberFormat', _regexFunctions.REGEX_REMOVE_TEXT_FORMAT);\n      }\n    },\n\n    willDestroy() {\n      this.set('oldVal', null);\n\n      this._super(...arguments);\n    },\n\n    actions: {\n      onInput(value) {\n        let val = value;\n        const onChange = this.get('onChange');\n        const numFormat = this.get('numberFormat');\n        const removedNumberFormat = this.get('removedNumberFormat');\n        const numVal = parseFloat(value, 10);\n        const oldVal = this.get('oldVal');\n        const min = this.get('min');\n        const max = this.get('max');\n        const digitPrecision = this.get('digitPrecision');\n        const isFloat = this.get('isFloat'); // Automatic removal of the character when the user enters  wrong input other than numbers, so no need for old value\n\n        if (!numFormat.test(val)) {\n          if (onChange) {\n            this.get('onChange')(value.replace(removedNumberFormat, ''));\n          }\n\n          return this.notifyPropertyChange('value');\n        } // Reset input value to prior value unless changed value matches format.\n\n\n        if (min && numVal < min) {\n          if (oldVal && onChange) {\n            this.get('onChange')(oldVal);\n          }\n\n          return this.notifyPropertyChange('value');\n        }\n\n        if (isFloat && digitPrecision) {\n          if (val.includes('.')) {\n            const decimalValues = val.split('.'); // Prevents entering more than one decimal point('.')\n\n            if (decimalValues.length > 2) {\n              const index = val.indexOf('.') + 1;\n              val = val.substr(0, index);\n              this.get('onChange')(val);\n              return this.notifyPropertyChange('value');\n            }\n\n            const decimalValue = decimalValues[1];\n            decimalValues[1] = decimalValue.slice(0, 2);\n            val = decimalValues.join('.');\n\n            if (decimalValue.length > digitPrecision) {\n              this.get('onChange')(val);\n              return this.notifyPropertyChange('value');\n            }\n          }\n        }\n\n        if (value.length > max) {\n          if (oldVal && onChange) {\n            this.get('onChange')(oldVal);\n          }\n\n          return this.notifyPropertyChange('value');\n        }\n\n        if (isNaN(numVal)) {\n          this.set('oldVal', '');\n          this.get('onChange')('');\n          return '';\n        }\n\n        if (onChange) {\n          this.get('onChange')(val);\n        }\n\n        this.set('oldVal', val);\n        return val;\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/number-format/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"zxkFqBUZ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"ember-text-field\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"placeholder\\\",[27,\\\"readonly\\\",[[23,[\\\"placeholder\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/number-format/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/panel/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['generic-panel'],\n    classNameBindings: ['isCollapsible', 'isInitial', 'isCollapsed', 'isExpanded'],\n    title: null,\n    isCollapsible: false,\n    collapseState: 'initial',\n    isInitial: Ember.computed.equal('collapseState', 'initial'),\n    isCollapsed: Ember.computed.equal('collapseState', 'collapsed'),\n    isExpanded: Ember.computed.equal('collapseState', 'expanded'),\n    // Passed in attributes for panel header buttons\n    // should think about turning this into a contextual component\n    onDeleteButtonClick: null,\n    onSaveButtonClick: null,\n    onEditButtonClick: null,\n    onAddButtonClick: null,\n    disableHeaderActions: null,\n    disableSaveBtn: false,\n    disableEditBtn: false,\n    disableDeleteBtn: false,\n    disableAddBtn: false,\n\n    toggleCollapse() {\n      const collapseState = this.get('collapseState');\n\n      if (collapseState === 'collapsed') {\n        this.set('collapseState', 'expanded');\n      } else {\n        this.set('collapseState', 'collapsed');\n      }\n    },\n\n    actions: {\n      onAddButtonClick() {\n        this.get('onAddButtonClick')();\n      },\n\n      onEditButtonClick() {\n        this.get('onEditButtonClick')();\n      },\n\n      onDeleteButtonClick() {\n        this.get('onDeleteButtonClick')();\n      },\n\n      onSaveButtonClick() {\n        this.get('onSaveButtonClick')();\n      },\n\n      onHeaderClick() {\n        if (this.get('isCollapsible')) this.toggleCollapse();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/panel/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"HMwB8sGP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"title\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"panel-header \\\",[27,\\\"if\\\",[[23,[\\\"isCollapsible\\\"]],\\\"is-collapsible\\\",\\\"\\\"],null]]]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isCollapsible\\\"]]],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"panel-title\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCollapsible\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isCollapsed\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-right mr-1\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHeaderClick\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-down mr-1\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHeaderClick\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-actions\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onDeleteButtonClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Delete\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableDeleteBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableDeleteBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDeleteButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onEditButtonClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Edit\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onEditButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onAddButtonClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Add\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableHeaderActions\\\"]],[23,[\\\"disableAddBtn\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditBtn\\\"]],[23,[\\\"disableAddBtn\\\"]]],null]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAddButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onSaveButtonClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Save\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableHeaderActions\\\"]],[23,[\\\"disableSaveBtn\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableHeaderActions\\\"]],[23,[\\\"disableSaveBtn\\\"]]],null]],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSaveButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-body\\\"],[9],[0,\\\"\\\\n  \\\"],[14,1],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/panel/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/progress-bar/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['progress-window', 'ml-2'],\n    progress: null,\n    text: null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/progress-bar/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"r8fatB8D\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"progress\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"progress-bar progress-bar-striped progress-bar-animated\\\"],[11,\\\"role\\\",\\\"progressbar\\\"],[12,\\\"aria-valuenow\\\",[28,[[21,\\\"progress\\\"]]]],[11,\\\"aria-valuemin\\\",\\\"0\\\"],[11,\\\"aria-valuemax\\\",\\\"100\\\"],[12,\\\"style\\\",[28,[\\\"width: \\\",[21,\\\"progress\\\"],\\\"%\\\"]]],[9],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/progress-bar/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/ring-loader/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['ring-window'],\n    text: null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/ring-loader/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"a8NJEU3v\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"loader\\\"],[9],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/ring-loader/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/solution-preview-table/component\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    rowComponent: 'table/rows/colored-row',\n    sortDirection: 'asc',\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onColumnClick(column) {\n        if (column.sorted) {\n          this.set('sortDirection', column.ascending ? 'asc' : 'desc');\n        }\n\n        const valuePath = column.get('valuePath');\n        const rowsToSort = (0, _lodash.orderBy)(this.get('solutionPreviewTable.rows'), row => {\n          return row.get(valuePath);\n        }, [this.get('sortDirection')]);\n        this.set('solutionPreviewTable.rows', rowsToSort);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/solution-preview-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"5hFwfQmx\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[4,\\\"light-table\\\",[[23,[\\\"solutionPreviewTable\\\"]]],[[\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[true,200]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/generic-components/solution-preview-table/template.hbs' @ L6:C2) \\\"],null]],[[\\\"onColumnClick\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/generic-components/solution-preview-table/template.hbs' @ L11:C3) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"rowComponent\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"solutionPreviewTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/generic-components/solution-preview-table/template.hbs' @ L18:C3) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/solution-preview-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/tab-group/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['tab-group']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/tab-group/tab-button/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    // passed in from parent component\n    // link-text name\n    link: null,\n    disabled: false,\n    // pass wizard and step name\n    wizard: null,\n    transitionName: null,\n    isActive: Ember.computed('wizard.currentStep', 'transitionName', function () {\n      const w = this.get('wizard');\n      const transitionName = this.get('transitionName');\n      return w.currentStep === transitionName;\n    }),\n    actions: {\n      onclick() {\n        const w = this.get('wizard');\n        const onTabClick = this.get('onTabClick');\n        const transitionName = this.get('transitionName');\n\n        if (onTabClick) {\n          return onTabClick({\n            curStep: w.currentStep,\n            newStep: transitionName,\n            w\n          });\n        }\n\n        return w['transition-to'](transitionName);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/tab-group/tab-button/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"mQcB+mDZ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"tab-button \\\",[27,\\\"if\\\",[[23,[\\\"isActive\\\"]],\\\"active\\\",\\\"\\\"],null]]]],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[12,\\\"active\\\",[21,\\\"isActive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onclick\\\"],null]],[12,\\\"aria-pressed\\\",[27,\\\"eq\\\",[[23,[\\\"wizard\\\",\\\"currentStep\\\"]],[23,[\\\"transitionName\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[1,[21,\\\"link\\\"],false],[0,\\\"\\\\n    \\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/tab-group/tab-button/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/tab-group/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"SeLkxZRK\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[14,1]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/tab-group/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/base-cell/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/cells/base-cell/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-cell', 'data-test-table-base-cell'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    tooltipText: Ember.computed('row.isLocked', function () {\n      const isLocked = this.get('row.isLocked');\n\n      if (Ember.isNone(isLocked)) {\n        return null;\n      }\n\n      if (isLocked) {\n        return `Locked by ${this.get('row.lockedBy')}`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'row.isLocked', function () {\n      const tooltipText = this.get('tooltipText');\n      const isLocked = this.get('row.isLocked');\n      return Ember.isPresent(tooltipText) && isLocked;\n    }),\n    tabindex: 0\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"poH05Po7\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",500,\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/cells/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/check-box/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    activeContext: Ember.inject.service(),\n    disableRowSelection: Ember.computed.readOnly('extra.disableRowSelection'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n        if (this.get('disableRowSelection')) return;\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n        row.set('isPreviouslyChecked', event.target.checked);\n        event.stopPropagation(); // prevent event propagation into other click handler events like on select row actions\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"aCR+UHYi\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"disabled\\\",[21,\\\"disableRowSelection\\\"]],[12,\\\"checked\\\",[23,[\\\"row\\\",\\\"selected\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/cells/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/date-cell/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/cells/base-cell/component\", \"adept-iq/config/environment\"], function (_exports, _component, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-trip-eta-cell'],\n    classNameBindings: ['row.otp'],\n    dateFormat: Ember.computed('column.format', 'format', function () {\n      const columnFormat = this.get('column.format');\n      if (columnFormat) return columnFormat;\n      return _environment.default.dateTimeFormat.dateTimeMoment;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/date-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"QVTDfzPN\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"value\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"moment-format\\\",[[23,[\\\"value\\\"]],[23,[\\\"dateFormat\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/cells/date-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/radio-button/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-radio-button-cell', 'data-test-table-radio-button-cell']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/radio-button/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"t4oI+PVt\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"id\\\",[23,[\\\"row\\\",\\\"id\\\"]]],[12,\\\"disabled\\\",[21,\\\"disableRowSelection\\\"]],[12,\\\"checked\\\",[23,[\\\"row\\\",\\\"selected\\\"]]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/cells/radio-button/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/text-extension/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/cells/base-cell/component\", \"adept-iq/mixins/table-row-value\"], function (_exports, _component, _tableRowValue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_tableRowValue.default, {\n    classNames: ['table-text-extension-cell'],\n    textContent: Ember.computed('value', function () {\n      const value = this.get('value.values');\n      if (!value || value.length < 1) return '';\n      const length = value.filter(val => val.className === 'valueItem').length; // show the actual value when there is only one item\n\n      if (length > 1) {\n        return `${length} ${this.get('column.cellDesc')}`;\n      } else if (length === 1) {\n        return value.firstObject.value;\n      }\n\n      return '';\n    }),\n    actions: {\n      showDropdown(dropdown, event) {\n        if (this.value.values.length > 1) {\n          dropdown.actions.open(event);\n        }\n      },\n\n      hideDropdown(dropdown, event) {\n        if (this.value.values.length > 1) {\n          dropdown.actions.close(event);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/cells/text-extension/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"kLOlIypq\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"item\\\"],\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"verticalPosition\\\"],[\\\"auto\\\",\\\"auto\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/generic-components/table/cells/text-extension/template.hbs' @ L5:C5) \\\"],null]],[[\\\"class\\\",\\\"onMouseEnter\\\",\\\"onMouseLeave\\\",\\\"eventType\\\"],[\\\"can-focus\\\",[27,\\\"action\\\",[[22,0,[]],\\\"showDropdown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hideDropdown\\\"],null],\\\"onMouseEnter\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"textContent\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/generic-components/table/cells/text-extension/template.hbs' @ L13:C5) \\\"],null]],[[\\\"class\\\"],[\\\"cell-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell-text-content-extension\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header\\\"],[9],[1,[23,[\\\"value\\\",\\\"header\\\"]],false],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"value\\\",\\\"values\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[22,2,[\\\"className\\\"]]],[9],[1,[22,2,[\\\"value\\\"]],false],[10],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/cells/text-extension/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/classes/checkbox-row\", [\"exports\", \"ember-light-table/classes/Row\"], function (_exports, _Row) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class CheckboxRow extends _Row.default {}\n\n  _exports.default = CheckboxRow;\n  CheckboxRow.reopen({\n    isLastChecked: false,\n    isSelected: false,\n    isAlertCheckBox: false,\n    selected: false,\n    isPreviouslyChecked: false,\n    record: Ember.computed.alias('content'),\n    id: Ember.computed.alias('content.id'),\n    isChecked: Ember.computed.readOnly('selected')\n  });\n});","define(\"adept-iq/pods/components/generic-components/table/classes/sort-column\", [\"exports\", \"ember-light-table/classes/Column\", \"adept-iq/config/column-types\"], function (_exports, _Column, _columnTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class SortColumn extends _Column.default {}\n\n  _exports.default = SortColumn;\n  SortColumn.reopen({\n    id: null,\n    config: null,\n    valuePathMap: Ember.computed('valuePaths', function () {\n      const valuePaths = this.get('valuePaths');\n      if (!valuePaths) return {};\n      const valuePathMap = valuePaths.reduce((obj, _ref) => {\n        let {\n          modelName,\n          valuePath\n        } = _ref;\n        obj[modelName] = valuePath;\n        return obj;\n      }, {});\n      return valuePathMap;\n    }),\n    columnType: Ember.computed('config.type', function () {\n      const columnTypeId = this.get('config.type');\n\n      const columnType = _columnTypes.default.findBy('id', columnTypeId);\n\n      if (!columnType) {\n        /*eslint-disable */\n        console.error(`no column type with id '${columnTypeId}'`);\n        /*eslint-enable */\n\n        return null;\n      }\n\n      return columnType;\n    })\n  });\n});","define(\"adept-iq/pods/components/generic-components/table/columns/base-column/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-column'],\n    attributeBindings: ['tabindex'],\n    tabindex: 0,\n    isEditing: false,\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/columns/check-box/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-check-box-column'],\n    disableRowSelection: Ember.computed.readOnly('extra.disableRowSelection'),\n    isChecked: Ember.computed('table.rows.@each.isChecked', function () {\n      const rows = this.get('table.rows'); // it's weird to see checkbox when no records are shown\n\n      if (!rows || rows.length === 0) return false;\n      return rows.isEvery('isChecked');\n    }),\n    actions: {\n      onCheckboxToggle(event) {\n        // these are passed by the generic column widget's template\n        const {\n          checkAll,\n          uncheckAll\n        } = this.get('extra');\n\n        if (event.target.checked && checkAll) {\n          Ember.run.next(checkAll);\n        } else if (uncheckAll) {\n          Ember.run.next(uncheckAll);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/columns/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"CTua4csJ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"disabled\\\",[21,\\\"disableRowSelection\\\"]],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/columns/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/columns/sort-capable/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/columns/base-column/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-filter-capable-column']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/columns/sort-capable/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TVs2EoNY\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"config\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/columns/sort-capable/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/base-table/component\", \"ember-light-table\", \"ember-concurrency\", \"moment\", \"papaparse\", \"adept-iq/classes/data-joins/table\", \"adept-iq/pods/components/generic-components/table/classes/sort-column\", \"adept-iq/utils/compute-ordered-ids\", \"adept-iq/utils/mobile\", \"adept-iq/utils/remove-focus\", \"adept-iq/pods/components/generic-components/table/classes/checkbox-row\", \"adept-iq/pods/components/generic-components/table/template\", \"adept-iq/config/column-types\", \"adept-iq/utils/sorts\", \"adept-iq/config/environment\", \"adept-iq/utils/filters\"], function (_exports, _component, _emberLightTable, _emberConcurrency, _moment, _papaparse, _table, _sortColumn, _computeOrderedIds, _mobile, _removeFocus, _checkboxRow, _template, _columnTypes, _sorts, _environment, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // default currently\n  const logger = {\n    log: () => null,\n    warn: console.warn // eslint-disable-line no-console\n\n  };\n  const DEFAULT_COLUMN_WIDTH = 100;\n  const MIN_COLUMN_WIDTH = 50;\n  const CHECKBOX_COLUMN_WIDTH = 30; // number of records to load at a time while scrolling\n\n  const PAGINATION_LIMIT = 50; // how close to bottom do we need to scroll before loading more\n\n  const PAGINATION_TRIGGER_OFFSET = 100;\n  const ENUM_TYPE = 'enum';\n\n  const toPixels = x => `${x}px`;\n\n  const fromPixels = x => parseInt(x.split('px')[0], 10);\n\n  const isValidDateConfig = config => {\n    return ['date', 'datetime', 'time', 'datetimeflatpickr'].includes(config.type) && config.format;\n  };\n\n  const formatDateConfigType = (value, config) => {\n    const prefixExportDateFormat = config.prefixExportDateFormat;\n    const exportFormat = config.exportFormat;\n\n    if (Ember.isEmpty(value) || !isValidDateConfig(config)) {\n      return value;\n    } // for export data. prefix of ' ' will take this format value instead\n    // of excel converting it to it's own default format\n\n\n    if (!Ember.isEmpty(exportFormat)) {\n      if (!Ember.isEmpty(prefixExportDateFormat)) {\n        return `${prefixExportDateFormat}${(0, _moment.default)(value).format(exportFormat)}`;\n      }\n\n      return (0, _moment.default)(value).format(exportFormat);\n    }\n\n    return (0, _moment.default)(value).format(config.format);\n  };\n\n  const RADIO_ROW_SELECTION_TYPE = 'radio';\n  const TABLE_PARENT_ELEMENT_TAG = 'OCCLUDED-CONTENT';\n\n  var _default = _component.default.extend({\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    interaction: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    work: Ember.inject.service(),\n    classNameBindings: ['disabled'],\n    // necessary to allow derived table components to inherit template\n    layout: _template.default,\n    // overload this with a static config object\n    config: null,\n    // overload this with row class\n    Row: _checkboxRow.default,\n    // override for tables that don't need a header\n    showHeader: true,\n    // override for table that don't need a table header row\n    showTableHeaderRow: true,\n    // override for tableAction\n    showTableActions: true,\n    // append to table actions\n    tableActions: null,\n    // override to trigger loading icon on table\n    isTaskRunning: null,\n    // table is using radio button on changing rows a popup will ask user to continue editing or not\n    // any dirty record is used to tell the table there are unsaved changes\n    hasPendingChanges: false,\n    // enable warning tooltip (action modal)\n    enableWarningRowChangeAlert: false,\n    defaultCheckboxRowSelected: false,\n    // allow the developer the ability to disable all row selections\n    disableRowSelection: false,\n    queryParams: null,\n    limit: PAGINATION_LIMIT,\n    offset: 0,\n    paginationEnabled: false,\n    // pagination disabled by default\n    records: null,\n    visibleRecords: null,\n    searchText: '',\n    isSearchEnabled: false,\n    isSearchAllowed: true,\n    // set for demo\n    isSavingInProgress: false,\n    table: null,\n    dataJoin: null,\n    lastRowClicked: false,\n    inlineRowMenu: null,\n    inlineRowMenuPosition: null,\n    refreshSync: false,\n    resetScroll: false,\n    isPaginating: false,\n    showSelectedRowLength: true,\n    disableHeaderActions: null,\n    disableSaveBtn: false,\n    disableEditBtn: false,\n    disableDeleteBtn: false,\n    disableAdditionalBtn: false,\n    onCancelButtonEnable: false,\n    sortId: Ember.computed.alias('state.sortId'),\n    sortAsc: Ember.computed.alias('state.sortAsc'),\n    isLoading: Ember.computed.alias('fetchDataTask.isRunning'),\n    isError: Ember.computed.alias('fetchDataTask.last.isError'),\n    usingRadioRowComponent: Ember.computed.equal('config.rowSelectionType', RADIO_ROW_SELECTION_TYPE),\n    checkedRows: Ember.computed('table.selectedRows.[]', function () {\n      const checkedRows = this.get('table.selectedRows');\n      return checkedRows.map(row => row.get('record'));\n    }),\n    tableColumns: Ember.computed('config.{columns,columns.[]}', function () {\n      let isCheckBox = true;\n      const tableColumns = [];\n      const columnConfigs = this.get('config.columns');\n      const orderedColumnIds = (0, _computeOrderedIds.default)(columnConfigs) || [];\n      const radioSelction = this.get('usingRadioRowComponent');\n      const hideCheckBox = this.get('config.hideCheckBox');\n\n      if (!Ember.isEmpty(this.get('config.rowSelectionType'))) {\n        isCheckBox = this.get('config.rowSelectionType') === 'checkbox';\n      }\n\n      if (isCheckBox) {\n        tableColumns.push(hideCheckBox ? {\n          id: 'checkbox',\n          sortable: false,\n          isResizable: true,\n          width: '0px'\n        } : {\n          id: 'checkbox',\n          valuePath: 'checked',\n          cellComponent: 'generic-components/table/cells/check-box',\n          component: 'generic-components/table/columns/check-box',\n          sortable: false,\n          isResizable: true,\n          width: _mobile.isTouchDevice ? '70px' : toPixels(CHECKBOX_COLUMN_WIDTH)\n        });\n      } else if (radioSelction) {\n        tableColumns.push(hideCheckBox ? {\n          id: 'checkbox',\n          sortable: false,\n          isResizable: true,\n          width: '0px'\n        } : {\n          id: 'radio',\n          valuePath: 'checked',\n          cellComponent: 'generic-components/table/cells/radio-button',\n          sortable: false,\n          isResizable: true,\n          width: _mobile.isTouchDevice ? '70px' : toPixels(CHECKBOX_COLUMN_WIDTH)\n        });\n      }\n\n      orderedColumnIds.forEach(id => {\n        const config = columnConfigs.findBy('id', id);\n        const tableColumn = {\n          id: id,\n          component: 'generic-components/table/columns/sort-capable',\n          cellClassNames: config.id,\n          classNames: config.id,\n          label: config.label,\n          cellDesc: config.cellDesc,\n          valuePath: `record.${config.valuePath}`,\n          valuePaths: config.valuePaths,\n          hidden: config.hidden || config.unAvailable,\n          resizable: Ember.isPresent(config.resizable) ? config.resizable : true,\n          minResizeWidth: MIN_COLUMN_WIDTH,\n          width: toPixels(config.defaultWidth || DEFAULT_COLUMN_WIDTH),\n          config\n        };\n\n        if (config.type.includes('enum')) {\n          tableColumn.cellComponent = 'table/cells/text-extension';\n        } else if (config.type.includes('text-break')) {\n          tableColumn.cellComponent = 'table/cells/text-break';\n        } else {\n          tableColumn.cellComponent = 'table/cells/base-cell';\n        }\n\n        if (config.highlightable) {\n          tableColumn.cellClassNames = ['highlightable'];\n        }\n\n        if (['date', 'datetime', 'time', 'datetimeflatpickr'].includes(config.type) && config.format) {\n          tableColumn.format = value => {\n            return Ember.isEmpty(value) ? value : (0, _moment.default)(value).format(config.format);\n          };\n\n          switch (config.type) {\n            case 'date':\n            case 'datetimeflatpickr':\n            case 'datetime':\n              tableColumn.parse = value => {\n                return (0, _moment.default)(value, config.format).toDate();\n              };\n\n              break;\n\n            case 'time':\n              tableColumn.parse = (timeString, originalValue) => {\n                const date = (0, _moment.default)(originalValue).format(_environment.default.dateTimeFormat.dateMoment);\n                const newValue = (0, _moment.default)(`${date} ${timeString}`, _environment.default.dateTimeFormat.dateTimeMoment).toDate();\n                return newValue;\n              };\n\n              break;\n\n            default:\n              break;\n          }\n        }\n\n        tableColumns.push(tableColumn);\n      }); // fills the rest of the space with an empty column\n\n      tableColumns.push({\n        id: 'spacer',\n        width: '100%',\n        sortable: false,\n        isResizable: true\n      });\n      return tableColumns;\n    }),\n    click: function (event) {\n      if (['fa fa-search active-button', 'table-component-search-box data-test-search-box'].includes(event.target.className)) {\n        return false;\n      }\n\n      (0, _removeFocus.removeFocus)();\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const config = this.get('config');\n      (true && !(Ember.typeOf(config) === 'object') && Ember.assert('{{generic-components/table}} requires extending components to provide a `config` object', Ember.typeOf(config) === 'object'));\n      const Row = this.get('Row');\n      const table = new _emberLightTable.default([], [], {\n        enableSync: false\n      });\n\n      const dataJoin = _table.default.create({\n        table,\n        activeContext: this.get('activeContext'),\n        work: this.get('work'),\n        Row\n      });\n\n      this.setProperties({\n        table,\n        dataJoin,\n        records: [],\n        visibleRecords: []\n      });\n      this.set('tableActions', [{\n        id: 'print',\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      }]);\n\n      if (!Ember.isEmpty(this.get('config.showSelectedRowLength'))) {\n        this.set('showSelectedRowLength', this.get('config.showSelectedRowLength'));\n      }\n\n      if (this.get('config.showSelectedRowLength') === false) {\n        this.set('showSelectedRowLength', this.get('config.showSelectedRowLength'));\n      }\n\n      this.set('selectFirstRowCache', this.get('config.selectFirstRow'));\n      this.cancelRow = this.cancelRow.bind(this);\n    },\n\n    destroy() {\n      const tableColumns = this.get('table.columns') || [];\n      this.get('dataJoin').destroy(); // destroy data join to exit each row\n\n      tableColumns.forEach(column => column.destroy()); // destroy column component\n\n      this.get('table').destroy(); // destroy table component\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.onTableColumnsChange();\n      this.onRecordsChange();\n      Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n      this.onKeyDownEvent = this.onKeyDownEvent.bind(this); // listen for column resize\n\n      if (typeof MutationObserver !== 'undefined') {\n        const mutationObserver = new MutationObserver(mutationList => {\n          if (mutationList[0].target.classList.contains('is-resizing')) {\n            this.get('interaction').didStartResizingColumn();\n          } else {\n            this.get('interaction').didStopResizingColumn();\n          }\n        });\n        const el = this.$('.ember-light-table')[0];\n\n        if (el) {\n          mutationObserver.observe(el, {\n            attributeFilter: ['class']\n          });\n          this.set('mutationObserver', mutationObserver);\n        }\n      }\n\n      document.addEventListener('keydown', this.onKeyDownEvent);\n    },\n\n    didRender() {\n      this._super(...arguments);\n\n      if (this.get('table.selectedRows.length') === 0 && this.get('table.rows.length') > 0) {\n        Ember.run.scheduleOnce('afterRender', this, () => this.firstRowSelected());\n      }\n    },\n\n    willDestroyElement() {\n      const selectFirstRowCache = this.get('selectFirstRowCache');\n      this.$().off('keydown', this._onKeyDown);\n      this.$().off('mousedown', this._onMouseDown);\n      document.removeEventListener('keydown', this.onKeyDownEvent);\n      this.onUncheckAll(); // unselect each row\n\n      this.get('dataJoin').clear();\n      this.clearData();\n      this.set('config.selectFirstRow', selectFirstRowCache);\n      const mutationObserver = this.get('mutationObserver');\n\n      if (typeof MutationObserver !== 'undefined' && mutationObserver) {\n        mutationObserver.disconnect();\n      }\n\n      this._super(...arguments);\n    },\n\n    onKeyDownEvent(event) {\n      const ltCell = event.target.closest('.lt-cell');\n\n      if (!ltCell) {\n        return;\n      }\n\n      event.preventDefault();\n      const row = ltCell.closest('.lt-row');\n      let siblingElementRow = null; // eslint-disable-next-line default-case\n\n      switch (event.key) {\n        case 'ArrowDown':\n          {\n            siblingElementRow = row.nextElementSibling;\n            break;\n          }\n\n        case 'ArrowUp':\n          {\n            siblingElementRow = row.previousElementSibling;\n            break;\n          }\n      }\n\n      if (siblingElementRow && siblingElementRow.tagName !== TABLE_PARENT_ELEMENT_TAG) {\n        const tableRows = this.get('table.rows'); // move table selection down one row\n\n        const recordId = siblingElementRow.getAttribute('data-record-id');\n        const siblingTableElementRow = tableRows.findBy('content.id', recordId);\n        tableRows.setEach('selected', false);\n        siblingTableElementRow.set('selected', true);\n      }\n    },\n\n    setTableColumns() {\n      const oldColumns = this.get('table.columns').slice() || [];\n      const tableColumns = this.get('tableColumns') || [];\n      this.set('table.columns', tableColumns.map(col => new _sortColumn.default(col)));\n      oldColumns.forEach(column => column.destroy());\n    },\n\n    updateTableColumns() {\n      const state = this.get('state') || {};\n      const config = this.get('config') || {};\n      const columns = this.get('table.columns') || [];\n      let shouldResize = false;\n      let scrollLeft;\n      const body = this.$('.table-component-body');\n\n      if (body) {\n        scrollLeft = this.$('.table-component-body').scrollLeft();\n      }\n\n      if (columns) {\n        const sortId = state.sortId || config.defaultSortId;\n        columns.forEach(column => {\n          let sortAsc = column.ascending;\n          const sorted = column.sorted;\n          column.set('sorted', sorted);\n          column.set('ascending', sortAsc);\n\n          if (Ember.isPresent(sortId) && sortId === column.get('id')) {\n            if (Ember.isPresent(state.sortAsc)) {\n              sortAsc = state.sortAsc;\n            } else if (Ember.isPresent(config.defaultSortAsc)) {\n              sortAsc = config.defaultSortAsc;\n            }\n\n            column.set('sorted', true);\n            column.set('ascending', sortAsc);\n          }\n        });\n      }\n\n      const columnsHash = columns || {};\n      Object.entries(columnsHash).forEach(_ref => {\n        let [id, columnState] = _ref;\n        const column = columns.findBy('id', id);\n\n        if (!column) {\n          return;\n        }\n\n        if (Ember.isPresent(columnState.width)) {\n          column.set('width', toPixels(columnState.width));\n          shouldResize = true;\n        }\n      });\n\n      if (shouldResize) {\n        // resize at end of _next_ loop so that all changes are applied\n        Ember.run.next(() => {\n          if (Ember.isPresent(scrollLeft)) {\n            // wait an additional loop before restoring scroll position\n            Ember.run.next(() => {\n              Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n            });\n          }\n        });\n      }\n\n      Ember.run.debounce(this, 'refreshData', 250);\n    },\n\n    refreshData() {\n      if (this.get('isDestroyed')) return;\n      const rows = this.get('table.rows');\n      const defaultCheckboxRowSelected = this.get('defaultCheckboxRowSelected');\n      this.get('fetchDataTask').perform().then(() => {\n        if (rows.length && defaultCheckboxRowSelected) {\n          Ember.run.scheduleOnce('actions', this, 'onCheckAll');\n          this.set('defaultCheckboxRowSelected', false);\n        }\n      }).catch(err => {\n        if (!(0, _emberConcurrency.didCancel)(err)) {\n          throw err;\n        }\n      });\n    },\n\n    // derived table components can override function to do a different type of fetch\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n      const recordLength = this.get('records.length');\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: recordLength\n          };\n        } else {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let activeData = store.peekAll(modelName) || [];\n\n      if (Ember.isPresent(this.get('config.fetchModelData'))) {\n        activeData = (await store.findAll(modelName)) || [];\n      }\n\n      if (Ember.isPresent(this.get('config.queryModelData'))) {\n        const queryParams = this.get('queryParams') || {};\n        activeData = await store.query(modelName, queryParams);\n      }\n\n      if (Ember.isPresent(this.get('config.inactiveProviderFilterPath'))) {\n        const providerPath = this.get('config.inactiveProviderFilterPath');\n        const providers = await this.get('store').findAll('provider');\n        const activeProviders = providers.filter(provider => provider.get('status') === 'Active');\n        const activeProviderHash = activeProviders.reduce((hash, p) => {\n          hash[p.id] = true;\n          return hash;\n        }, {}); // If there is no provider then should be able to show\n\n        activeData = activeData.filter(d => !d.get(providerPath) || activeProviderHash[d.get(providerPath)]);\n      }\n\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    buildSortParam() {\n      const config = this.get('config');\n      const state = this.get('state');\n      let columnConfig; // user-specified sort order always takes precedence\n\n      if (Ember.isPresent(state) && Ember.isPresent(state.sortId)) {\n        columnConfig = config.columns.findBy('id', state.sortId);\n\n        if (!columnConfig) {\n          // this can occur naturally if the user sorts by a column, saves, and\n          // that column is later removed from the widget's configuration\n          logger.warn(`workspace configuration specifies that ${config.title} widget should be sorted by column with id '${state.sortId}', but no such column exists`);\n        }\n      } // fall back to default sort order; this is optional in widget config\n\n\n      if (!columnConfig && Ember.isPresent(config.defaultSortId)) {\n        columnConfig = config.columns.findBy('id', config.defaultSortId);\n\n        if (!columnConfig) {\n          logger.warn(`${config.title} widget is configured with default sort ID '${config.defaultSortId}', but has no column with matching ID`);\n        }\n      } // collection will be unsorted; this is expected when there is no specified\n      // workspace sort or widget default sort\n\n\n      if (!columnConfig) {\n        return null;\n      }\n\n      const columnType = _columnTypes.default.findBy('id', columnConfig.type);\n\n      if (!columnType) {\n        logger.warn(`tried to sort by column with ID '${columnConfig.id}', but its type '${columnConfig.type}' is not a valid column type`);\n        return null;\n      }\n\n      if (!columnType.compare) {\n        logger.warn(`column type '${columnType.id}' does not have a compare function configured`);\n        return null;\n      }\n\n      let sortAsc = true;\n\n      if (Ember.isPresent(state) && Ember.isPresent(state.sortAsc)) {\n        sortAsc = state.sortAsc;\n      } else if (Ember.isPresent(config.defaultSortAsc)) {\n        sortAsc = config.defaultSortAsc;\n      }\n\n      return {\n        path: columnConfig.type === ENUM_TYPE ? columnConfig.mapValuePath : columnConfig.valuePath,\n        asc: sortAsc,\n        compare: columnType.compare\n      };\n    },\n\n    setupFilterType() {\n      const searchText = this.get('searchText');\n      const res = searchText.split('=');\n\n      if (Ember.isEmpty(res[0]) || Ember.isEmpty(res[1])) {\n        return [this.buildSearchFilter()];\n      }\n\n      return [this.buildSearchFilterByParameter()];\n    },\n\n    buildSearchFilterByParameter() {\n      const searchText = this.get('searchText');\n      const res = searchText.split('=');\n      const attr = res[0].toLowerCase().trim();\n      const value = res[1].trim();\n      const columns = this.get('table.columns') || [];\n\n      function configFilter(config) {\n        return config.label.toLowerCase().trim() === attr;\n      }\n\n      if (Ember.isEmpty(searchText)) {\n        return null;\n      }\n\n      const searchableConfigs = columns.mapBy('config').compact().filter(configFilter);\n      const args = searchableConfigs.map(config => {\n        const columnType = _columnTypes.default.findBy('id', config.type) || {};\n        const filterType = columnType.searchFilterType;\n        const valuePath = config.alternateValuePath ? config.alternateValuePath : config.valuePath;\n        return (0, _filters.buildValueFilterNode)(filterType, valuePath, [value], config.format);\n      });\n      return (0, _filters.buildCompoundFilterNode)('or', args);\n    },\n\n    buildSearchFilter() {\n      const searchText = this.get('searchText');\n      const columns = this.get('table.columns') || [];\n\n      if (Ember.isEmpty(searchText)) {\n        return null;\n      }\n\n      const searchableConfigs = columns.rejectBy('hidden').mapBy('config').compact().filterBy('searchable');\n      const args = searchableConfigs.map(config => {\n        const columnType = _columnTypes.default.findBy('id', config.type) || {};\n        const filterType = columnType.searchFilterType;\n        const valuePath = config.alternateValuePath ? config.alternateValuePath : config.valuePath;\n        return (0, _filters.buildValueFilterNode)(filterType, valuePath, [searchText], config.format);\n      });\n      return (0, _filters.buildCompoundFilterNode)('or', args);\n    },\n\n    clearData() {\n      const paginationEnabled = this.get('paginationEnabled');\n      this.set('records', []);\n\n      if (paginationEnabled) {\n        this.set('offset', 0);\n      }\n\n      this.get('dataJoin').clear();\n    },\n\n    exportData() {\n      const table = this.get('table');\n      const columns = table.get('columns') || [];\n      const rows = table.get('rows') || [];\n      const records = this.get('records') || [];\n      const paginationEnabled = this.get('paginationEnabled');\n      const dataArray = paginationEnabled ? records : rows;\n      const fields = columns.reduce((arr, column) => {\n        const id = column.get('id');\n\n        if (['checkbox', 'spacer', 'radio'].includes(id)) {\n          return arr;\n        }\n\n        const label = column.get('label');\n        arr.push(label);\n        return arr;\n      }, []);\n      const data = dataArray.map(row => {\n        return columns.reduce((arr, column) => {\n          const config = column.get('config');\n          const id = column.get('id');\n\n          if (['checkbox', 'spacer', 'radio'].includes(id)) {\n            return arr;\n          } // If getting results directly from records, we need to remove 'record.' from valuePath.\n\n\n          const valuePath = paginationEnabled ? column.get('valuePath').replace('record.', '') : column.get('valuePath');\n          let value = row.get(valuePath);\n\n          if (config.type.includes('enum') && Ember.isPresent(value)) {\n            let values = null;\n\n            if (Ember.isPresent(value.values)) {\n              values = value.values.map(obj => obj.value);\n              value = values.join(';');\n            }\n          } // format date based on config\n\n\n          value = formatDateConfigType(value, config);\n          arr.push(value);\n          return arr;\n        }, []);\n      });\n\n      const csv = _papaparse.default.unparse({\n        fields,\n        data\n      }, {\n        quotes: true,\n        quoteChar: '\"',\n        escapeChar: '\"'\n      });\n\n      const link = document.createElement('a');\n      const timestamp = (0, _moment.default)().format('YYYY-MM-DD_HH-MM-SS');\n      const {\n        title\n      } = this.get('config');\n      const filename = `${timestamp}_${title}.csv`;\n      const blob = new Blob([csv], {\n        type: 'text/csv;charset=utf-8;'\n      });\n      const url = URL.createObjectURL(blob);\n      link.setAttribute('href', url);\n      link.setAttribute('download', filename);\n      link.style.visibility = 'hidden';\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n    },\n\n    setScrollLeft(scrollLeft) {\n      if (!this.$('.table-component-body')) {\n        return;\n      }\n\n      this.$('.table-component-body').scrollLeft(scrollLeft);\n    },\n\n    fetchDataTask: (0, _emberConcurrency.task)(function* () {\n      if (this.skipQuery) {\n        this.set('records', []);\n      } else {\n        const records = yield this.fetchDataQuery();\n        this.set('records', records);\n      }\n    }).restartable(),\n    onTableColumnsChange: Ember.observer('tableColumns', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'setTableColumns');\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n    onWidgetStateChange: Ember.observer('state', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n    onRecordsChange: Ember.observer('records', 'offset', function () {\n      const limit = this.get('limit');\n      const offset = this.get('offset');\n      const records = this.get('records');\n      const paginationEnabled = this.get('paginationEnabled');\n      let visibleRecords = [];\n\n      if (records && paginationEnabled) {\n        visibleRecords = this.get('records').slice(0, offset + limit);\n      } else visibleRecords = records;\n\n      this.set('visibleRecords', visibleRecords);\n      this.set('refreshSync', true);\n      const refreshSync = this.get('refreshSync');\n      const resetScroll = this.get('resetScroll');\n      this.get('dataJoin').join(visibleRecords, refreshSync);\n      this.set('refreshSync', false);\n\n      if (resetScroll) {\n        // reset scroll and pagination to top\n        if (paginationEnabled) this.set('offset', 0);\n        this.$('.table-component-body').scrollTop(0);\n      }\n\n      this.set('resetScroll', false);\n    }),\n\n    keyDown(event) {\n      const ltCell = event.target.closest('.lt-cell'); // need to exempt checkboxes to allow right arrow from checkbox col\n\n      const targetIsControl = event.target.tagName === 'INPUT' && event.target.type !== 'checkbox';\n\n      switch (event.key) {\n        case 'Escape':\n          {\n            const targetIsSearchBox = event.target.classList.contains('table-component-search-box');\n\n            if (targetIsSearchBox) {\n              event.preventDefault();\n              this.set('isSearchEnabled', false);\n              this.$('.table-component-search-button').focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowLeft':\n          {\n            if (!ltCell || targetIsControl) {\n              return;\n            }\n\n            event.preventDefault();\n            const previousCell = ltCell.previousElementSibling;\n\n            if (!previousCell) {\n              return;\n            }\n\n            const focusElement = previousCell.querySelector('.can-focus') || previousCell.firstElementChild;\n\n            if (focusElement) {\n              focusElement.focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowRight':\n          {\n            if (!ltCell || targetIsControl) {\n              return;\n            }\n\n            event.preventDefault();\n            const nextCell = ltCell.nextElementSibling;\n\n            if (!nextCell) {\n              return;\n            }\n\n            const focusElement = nextCell.querySelector('.can-focus') || nextCell.firstElementChild;\n\n            if (focusElement) {\n              focusElement.focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowDown':\n          {\n            if (!ltCell) {\n              return;\n            }\n\n            event.preventDefault();\n            const row = ltCell.closest('.lt-row'); // an HTMLCollection isn't really an array\n\n            const rowChildren = [].slice.call(row.children);\n            const index = rowChildren.indexOf(ltCell);\n            const nextRow = row.nextElementSibling;\n\n            if (nextRow && nextRow.tagName !== 'OCCLUDED-CONTENT') {\n              // move table selection down one row\n              const tableRows = this.get('table.rows');\n              const recordId = nextRow.getAttribute('data-record-id');\n              const nextTableRow = tableRows.findBy('content.id', recordId);\n              nextTableRow.set('selected', true); // move browser focus to same column in next row\n\n              const nextLtCell = nextRow.children[index];\n              const focusElement = nextLtCell.querySelector('.can-focus') || nextLtCell.firstElementChild;\n\n              if (focusElement) {\n                focusElement.focus();\n              }\n            }\n\n            break;\n          }\n\n        case 'ArrowUp':\n          {\n            if (!ltCell) {\n              return;\n            }\n\n            event.preventDefault();\n            const row = ltCell.closest('.lt-row'); // an HTMLCollection isn't really an array\n\n            const rowChildren = [].slice.call(row.children);\n            const index = rowChildren.indexOf(ltCell);\n            const previousRow = row.previousElementSibling;\n\n            if (previousRow && previousRow.tagName !== 'OCCLUDED-CONTENT') {\n              // move table selection down one row\n              const tableRows = this.get('table.rows');\n              const recordId = previousRow.getAttribute('data-record-id');\n              const previousTableRow = tableRows.findBy('content.id', recordId);\n              previousTableRow.set('selected', true); // move browser focus to same column in previous row\n\n              const previousLtCell = previousRow.children[index];\n              const focusElement = previousLtCell.querySelector('.can-focus') || previousLtCell.firstElementChild;\n\n              if (focusElement) {\n                event.preventDefault();\n                focusElement.focus();\n              }\n            }\n\n            break;\n          }\n\n        case ' ':\n        case 'Enter':\n          {\n            const isColumn = event.target.classList.contains('table-base-column');\n\n            if (isColumn) {\n              event.preventDefault();\n              this.$(event.target).trigger('click');\n            }\n\n            break;\n          }\n\n        default:\n          break;\n      }\n    },\n\n    onCheckAll() {\n      this.get('table.rows').setEach('selected', true);\n      this.get('table.rows').setEach('isPreviouslyChecked', true);\n    },\n\n    onUncheckAll() {\n      this.get('table.rows').setEach('selected', false);\n      this.get('table.rows').setEach('isPreviouslyChecked', false);\n    },\n\n    // override this function to provide tables the ability to extend the rollback to belongTo / hasMany associations\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record) record.rollbackAttributes();\n      }\n    },\n\n    onClearSearchText() {\n      this.set('searchText', '');\n      this.set('refreshSync', true);\n      Ember.run.debounce(this, 'refreshData', 250);\n    },\n\n    //\n\n    /**\n     * @summary\n     * table component will provide a generic save functionality for the intended record\n     * however if there are belongsTo / hasMany relationship and those must also be saved alongside the record being saved\n     * then the table that extends from this component will require either closure actions or overloading the function\n     *\n     * @param {record} record - intended record to be saved\n     * @return {Promise} - Promise resolves with saved record otherwise bubbles up error\n     */\n    saveRecord(record) {\n      if (record) {\n        return record.save().catch(e => {\n          throw e;\n        });\n      }\n    },\n\n    selectRow(curRow, newRow) {\n      if (curRow) {\n        curRow.set('selected', false);\n      }\n\n      if (newRow) {\n        newRow.set('selected', true);\n      }\n    },\n\n    /**\n     * TODO: Since the manual click of radio button does not changing the data, not able to uncheck it while cancelling\n     * Hence unChecking using event via the element\n     * @param event\n     */\n    cancelRow(event) {\n      if (this.isRadioBtn(event)) {\n        event.target.checked = false;\n      }\n    },\n\n    isRadioBtn(event) {\n      if (Ember.isPresent(event) && Ember.isPresent(event.target)) {\n        return event.target.type === 'radio';\n      }\n\n      return false;\n    },\n\n    /**\n     * Before saving the selected record this method will check the validate record method.\n     * @param params\n     * @returns {Promise<void>}\n     */\n    async primaryTooltipSave(params) {\n      const {\n        selectRow,\n        cancelRow,\n        saveRecord,\n        currentRecord,\n        currentRow,\n        newRow,\n        tooltip\n      } = params;\n      const onSelectRow = this.get('onSelectRow');\n\n      const saveRecordFun = async () => {\n        tooltip.reset();\n\n        try {\n          await saveRecord(currentRecord);\n          if (Ember.isPresent(onSelectRow)) onSelectRow();\n\n          if (Ember.isPresent(newRow)) {\n            selectRow(currentRow, newRow);\n          } else {\n            selectRow(newRow, currentRow);\n          }\n        } catch (err) {\n          cancelRow();\n        }\n      };\n\n      const valid = true;\n\n      try {\n        this.set('isSavingInProgress', true);\n        await saveRecordFun();\n        this.set('isSavingInProgress', false);\n        return valid;\n      } catch (err) {\n        console.log(err); // eslint-disable-line\n      }\n\n      return valid;\n    },\n\n    promptChangeWarning(newRow, event) {\n      const currentRow = this.get('table.selectedRows.firstObject');\n      const rollbackRecord = this.get('rollbackRecord').bind(this);\n      const saveRecord = this.get('saveRecord').bind(this);\n      const currentRecord = currentRow ? currentRow.get('record') : null;\n      const tooltip = this.get('tooltip');\n      const tableName = this.get('config.tooltipTitle');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      const onSelectRow = this.get('onSelectRow');\n      const selectRow = this.get('selectRow');\n      const cancelRow = this.get('cancelRow').bind(null, event);\n      const primaryTooltipSaveInfo = {\n        cancelRow,\n        selectRow,\n        saveRecord,\n        currentRecord,\n        currentRow,\n        newRow,\n        tooltip\n      };\n      const primaryTooltipSave = this.get('primaryTooltipSave').bind(this, primaryTooltipSaveInfo);\n      const isMaxBrokerProviderRecords = this.get('checkMaxBrokerProviderRecords'); // user has no pending changes meaning the user is trying to move to a different row\n\n      if (!hasPendingChanges) {\n        tooltip.reset();\n        if (!newRow) return;\n        return selectRow(currentRow, newRow);\n      }\n\n      return tooltip.pushConfirmation({\n        title: tableName,\n        tip: 'There are unsaved changes',\n        warning: true,\n        hasOverlay: true,\n        // covers interface so user must able to select only those three function\n        thirdActionText: 'Cancel',\n        thirdAction: () => {\n          cancelRow(); // we don't need to adjust selected properties as they are already set correctly\n\n          return tooltip.reset();\n        },\n        secondaryActionText: 'Do Not Save',\n        secondaryAction: () => {\n          // we don't need to undo because every time we switch to a different row,\n          // we create a new changeset object from the unedited ember data model\n          rollbackRecord(currentRecord);\n          if (Ember.isPresent(onSelectRow)) onSelectRow();\n\n          if (Ember.isPresent(newRow)) {\n            selectRow(currentRow, newRow);\n          } else if (Ember.isPresent(currentRow)) {\n            selectRow(newRow, currentRow);\n          }\n\n          if (!currentRow && !newRow) {\n            this.set('tableRef.config.selectFirstRow', this.get('selectFirstRowCache'));\n            Ember.run.scheduleOnce('afterRender', this, () => this.firstRowSelected());\n          }\n\n          return tooltip.reset();\n        },\n        primaryActionText: 'Save',\n        primaryAction: () => {\n          if (isMaxBrokerProviderRecords) {\n            if (isMaxBrokerProviderRecords()) {\n              return this.get('maxBrokerProviderWarning')();\n            }\n          }\n\n          this.set('tableRef.config.selectFirstRow', this.get('selectFirstRowCache'));\n          primaryTooltipSave();\n        }\n      });\n    },\n\n    async tableRowSelect(newRow, event) {\n      const selectRow = this.get('selectRow');\n      const cancelRow = this.get('cancelRow').bind(null, event);\n      const hasPendingChanges = this.get('hasPendingChanges');\n      const onSelectRow = this.get('onSelectRow');\n      const validateRecord = this.get('validateRecord');\n      const tooltip = this.get('tooltip');\n      if (event) event.stopPropagation();\n      if (this.get('disableRowSelection')) return;\n\n      if (this.get('usingRadioRowComponent')) {\n        const currentRow = this.get('table.selectedRows.firstObject');\n        const enableWarningRowChangeAlert = this.get('enableWarningRowChangeAlert');\n        if (newRow === currentRow) return; // If there is no event, it means trigger by didRender, do not show promp messages.\n\n        if (hasPendingChanges && enableWarningRowChangeAlert && event) {\n          try {\n            //If validation fails it displays the error pop-up and remain in the current editable screen\n            if (validateRecord) {\n              const valid = await validateRecord.perform();\n\n              if (valid) {\n                this.promptChangeWarning(newRow, event);\n              } else {\n                tooltip.set('confirmations.lastObject.hasOverlay', true);\n                cancelRow();\n              }\n            } else {\n              this.promptChangeWarning(newRow, event);\n            }\n          } catch (err) {\n            console.log(err); // eslint-disable-line\n          }\n\n          return;\n        }\n\n        if (Ember.isPresent(onSelectRow)) onSelectRow();\n        selectRow(currentRow, newRow);\n      }\n    },\n\n    async searchBtnClick() {\n      const validateRecord = this.get('validateRecord');\n\n      const searchFun = () => {\n        this.send('onSearchTextChange', '');\n        this.toggleProperty('isSearchEnabled');\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isSearchEnabled')) {\n            this.$('.table-component-search-box').focus();\n          }\n        });\n      };\n\n      if (this.get('usingRadioRowComponent')) {\n        const enableWarningRowChangeAlert = this.get('enableWarningRowChangeAlert');\n        const hasPendingChanges = this.get('hasPendingChanges');\n\n        if (enableWarningRowChangeAlert) {\n          if (hasPendingChanges) {\n            if (validateRecord) {\n              const valid = await validateRecord.perform();\n              if (!valid) return;\n            }\n          }\n\n          if (!hasPendingChanges) {\n            this.moveSelectedRecordToNormalState();\n            searchFun();\n          } else {\n            this.promptChangeWarning();\n          }\n        } else {\n          searchFun();\n        }\n      } else {\n        searchFun();\n      }\n    },\n\n    firstRowSelected() {\n      if (this.get('isSavingInProgress')) return;\n      const rows = this.get('table.rows');\n      const selectedRow = this.get('checkedRows.firstObject'); // selecting first row\n      // needs more refactoring as it should only occur after render, but no longer selects rows afterwards\n\n      if ((this.get('config.selectFirstRow') || this.get('config.selectFirstConfigRow')) && !selectedRow && rows.length) {\n        this.tableRowSelect(rows.firstObject);\n      }\n    },\n\n    firstRowSelectedTask: (0, _emberConcurrency.task)(function* () {\n      if (this.get('isSavingInProgress')) return;\n      const rows = yield this.get('table.rows');\n      const selectedRow = this.get('checkedRows.firstObject'); // selecting first row\n      // needs more refactoring as it should only occur after render, but no longer selects rows afterwards\n\n      if ((this.get('config.selectFirstRow') || this.get('config.selectFirstConfigRow')) && !selectedRow && rows.length) {\n        this.tableRowSelect(rows.firstObject);\n      }\n    }).drop(),\n    selectFirstRowTask: (0, _emberConcurrency.task)(function* () {\n      if (this.get('isSavingInProgress')) return;\n      const rows = yield this.get('table.rows');\n      this.tableRowSelect(rows.firstObject);\n    }).drop(),\n\n    /**\n     *when user click the remove search icon while editing show the unsaved changes pop-up\n     */\n    onRemoveSearchClick() {\n      const searchTextChange = this.searchTextChange.bind(this);\n\n      const removeSearchText = () => {\n        searchTextChange('');\n        this.toggleProperty('isSearchEnabled');\n        this.$('.table-component-search-button').focus();\n      };\n\n      this.promptSearchOrSortWarning(removeSearchText);\n    },\n\n    onColumnClick(column) {\n      if (!column.sorted) {\n        return;\n      }\n\n      const onColumnSortClick = () => {\n        this.onColumnSortClick(column);\n      };\n\n      this.promptSearchOrSortWarning(onColumnSortClick);\n    },\n\n    searchTextChange(searchText) {\n      this.set('searchText', searchText);\n      this.set('refreshSync', true);\n      Ember.run.debounce(this, 'refreshData', 250);\n    },\n\n    /**\n     * when user searching for another record while editing show the unsaved changes pop-up\n     * @param event\n     * @returns {Promise<void>}\n     */\n    onSearchTextChange(event) {\n      const previousSearchText = this.get('searchText');\n      const searchTextElement = event ? event.target : null;\n      const searchText = searchTextElement ? searchTextElement.value : '';\n\n      if (searchText === previousSearchText) {\n        return;\n      }\n\n      this.searchTextChange(searchText);\n    },\n\n    //This warning is used while searching in search bar or sorting the grid columns\n    async promptSearchOrSortWarning(searchOrSortCb) {\n      const newRow = this.get('table.rows.firstObject');\n      const currentRow = this.get('table.selectedRows.firstObject');\n      const rollbackRecord = this.get('rollbackRecord').bind(this);\n      const saveRecord = this.get('saveRecord').bind(this);\n      const currentRecord = currentRow ? currentRow.get('record') : null;\n      const tooltip = this.get('tooltip');\n      const tableName = this.get('config.tooltipTitle');\n      const selectRow = this.get('selectRow');\n      const cancelRow = this.get('cancelRow');\n      const validateRecord = this.get('validateRecord');\n      const primaryTooltipSaveInfo = {\n        selectRow,\n        cancelRow,\n        saveRecord,\n        currentRecord,\n        currentRow,\n        newRow,\n        tooltip\n      };\n      const primaryTooltipSave = this.get('primaryTooltipSave').bind(this, primaryTooltipSaveInfo);\n      const {\n        enableWarningRowChangeAlert,\n        usingRadioRowComponent,\n        hasPendingChanges\n      } = this.getProperties('enableWarningRowChangeAlert', 'usingRadioRowComponent', 'hasPendingChanges');\n      const isMaxBrokerProviderRecords = this.get('checkMaxBrokerProviderRecords');\n\n      if (usingRadioRowComponent && enableWarningRowChangeAlert && hasPendingChanges) {\n        if (validateRecord) {\n          const valid = await validateRecord.perform();\n\n          if (!valid) {\n            return;\n          }\n        }\n\n        tooltip.pushConfirmation({\n          title: tableName,\n          tip: 'There are unsaved changes',\n          warning: true,\n          hasOverlay: true,\n          thirdActionText: 'Cancel',\n          thirdAction: () => {\n            return tooltip.reset();\n          },\n          secondaryActionText: 'Do Not Save',\n          secondaryAction: () => {\n            // we don't need to undo because every time we switch to a different row,\n            // we create a new changeset object from the unedited ember data model\n            rollbackRecord(currentRecord);\n            searchOrSortCb();\n            return tooltip.reset();\n          },\n          primaryActionText: 'Save',\n          primaryAction: () => {\n            if (isMaxBrokerProviderRecords) {\n              if (isMaxBrokerProviderRecords()) {\n                return this.get('maxBrokerProviderWarning')();\n              }\n            }\n\n            this.set('tableRef.config.selectFirstRow', this.get('selectFirstRowCache'));\n            primaryTooltipSave().then(valid => {\n              if (valid) searchOrSortCb();\n            });\n          }\n        });\n        return;\n      }\n\n      searchOrSortCb();\n    },\n\n    onColumnSortClick(column) {\n      setTimeout(() => {\n        this.set('state', {\n          sortAsc: column.ascending,\n          sortId: column.get('id')\n        });\n      }, 1000);\n      this.set('refreshSync', true);\n      this.set('resetScroll', true);\n      Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n    },\n\n    /**\n     * Regarding NYAAR-16611 -> When a row is selected and edited but the fields are not updated and when the search\n     * icon is clicked then the selected record is moved out from edit mode\n     */\n    moveSelectedRecordToNormalState() {\n      const selectedRow = this.get('checkedRows.firstObject');\n      const config = this.get('config');\n      const rows = this.get('table.rows');\n      this.onUncheckAll();\n      config.selectFirstRow = false;\n      config.selectFirstConfigRow = false;\n\n      if (Ember.isPresent(selectedRow)) {\n        const previouslySelectedRecord = rows.find(r => r.id === selectedRow.id);\n        previouslySelectedRecord.set('selected', true);\n      }\n    },\n\n    onCheckRows(rows) {\n      rows.forEach(row => {\n        const isPreviouslyChecked = row.isPreviouslyChecked;\n        row.set('selected', isPreviouslyChecked);\n      });\n    },\n\n    /**\n     * NYAAR-20346 - Record should be deselected after searching and deselecting in Adjust Driver Break Reoptimization screen\n     */\n    fetchCheckedRows() {\n      if (this.get('isDestroyed')) return;\n      const rows = this.get('table.rows');\n      const defaultCheckboxRowSelected = this.get('defaultCheckboxRowSelected');\n      const isTableLoadedForFirstTime = this.get('isTableLoadedForFirstTime');\n      this.get('fetchDataTask').perform().then(() => {\n        //when loading for the first time select all the checkboxes\n        if (rows.length && defaultCheckboxRowSelected && isTableLoadedForFirstTime) {\n          this.onCheckAll();\n          this.set('defaultCheckboxRowSelected', false);\n        } //set the unchecked checkboxes as selected false\n\n\n        if (rows.length && defaultCheckboxRowSelected && !isTableLoadedForFirstTime) {\n          this.onCheckRows(rows);\n          this.set('defaultCheckboxRowSelected', false);\n        }\n      }).catch(err => {\n        if (!(0, _emberConcurrency.didCancel)(err)) {\n          throw err;\n        }\n      });\n    },\n\n    actions: {\n      // Header Actions\n      onClearSearchText() {\n        this.onClearSearchText();\n      },\n\n      onSearchTextChange(event) {\n        this.onSearchTextChange(event);\n      },\n\n      onTableActionClick(action, dropdown) {\n        dropdown.actions.close();\n\n        if (action.action) {\n          action.action();\n        }\n      },\n\n      // Ember Light Table Actions\n      async onColumnClick(column) {\n        this.onColumnClick(column);\n      },\n\n      onColumnResize(column, pixels) {\n        const scrollLeft = this.$('.table-component-body').scrollLeft();\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          width: fromPixels(pixels)\n        };\n        Ember.run.next(() => {\n          Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n        });\n      },\n\n      onSearchButtonClick() {\n        this.searchBtnClick();\n      },\n\n      onEditButtonClick() {\n        const onEditButtonClick = this.get('onEditButtonClick');\n        if (onEditButtonClick) onEditButtonClick();\n      },\n\n      onDeleteButtonClick() {\n        const onDeleteButtonClick = this.get('onDeleteButtonClick');\n        if (onDeleteButtonClick) onDeleteButtonClick();\n      },\n\n      onRemoveSearchClick() {\n        this.onRemoveSearchClick();\n      },\n\n      onScroll() {\n        // pause background processing while scrolling\n        this.get('interaction').didScrollWidget(); // close any open dropdown\n\n        const dropdown = this.get('inlineRowMenu');\n        const paginationEnabled = this.get('paginationEnabled');\n\n        if (dropdown) {\n          dropdown.actions.close(); //this.set('inlineRowMenu', null);\n        } // figure out if we need to increase pagination\n\n\n        const body = this.$('.table-component-body')[0];\n        const scrollPosition = body.scrollTop + body.offsetHeight;\n        const triggerPosition = body.scrollHeight - PAGINATION_TRIGGER_OFFSET; // scroll height takes a while to update, so we don't reset pagination\n        // flag until we observe it change in a subsequent `onScroll()` action\n\n        if (body.scrollHeight !== this._scrollHeight) {\n          this._scrollHeight = body.scrollHeight;\n          this.set('isPaginating', false);\n        }\n\n        if (scrollPosition >= triggerPosition && paginationEnabled && !this.isPaginating) {\n          const visibleCount = this.get('visibleRecords.length');\n          const offset = this.get('offset');\n          const limit = this.get('limit');\n\n          if (offset < visibleCount) {\n            this.set('offset', offset + limit);\n            this.set('isPaginating', true);\n            this.set('refreshSync', true);\n          }\n        }\n      },\n\n      onCheckAll() {\n        this.onCheckAll();\n      },\n\n      onUncheckAll() {\n        this.onUncheckAll();\n      },\n\n      onRowClick(row, event) {\n        this.tableRowSelect(row, event);\n      },\n\n      hasPendingChanges(record) {\n        return this.hasPendingChanges(record);\n      },\n\n      onCancelButtonClick() {}\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/rows/base-row/component\", [\"exports\", \"ember-light-table/components/lt-row\"], function (_exports, _ltRow) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ltRow.default.extend({\n    classNames: ['table-base-row', 'data-test-table-base-row']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/rows/row/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/rows/base-row/component\", \"adept-iq/pods/components/generic-components/table/rows/row/template\"], function (_exports, _component, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-action-row', 'data-test-table-action-row'],\n    classNameBindings: ['status'],\n    attributeBindings: ['data-record-id'],\n    layout: _template.default,\n    // this property name must be dasherized\n    'data-record-id': Ember.computed.alias('row.content.id'),\n    status: Ember.computed.alias('row.content.status'),\n    modelName: Ember.computed.alias('row.content.constructor.modelName')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/rows/row/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"zH1AVdvq\",\n    \"block\": \"{\\\"symbols\\\":[\\\"column\\\"],\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"light-table/cells/\\\",[22,1,[\\\"cellType\\\"]]],null]],[[\\\"table\\\",\\\"extra\\\",\\\"row\\\",\\\"disable\\\",\\\"column\\\",\\\"rawValue\\\"],[[23,[\\\"table\\\"]],[23,[\\\"extra\\\"]],[23,[\\\"row\\\"]],true,[22,1,[]],[27,\\\"get\\\",[[23,[\\\"row\\\"]],[27,\\\"if\\\",[[22,1,[\\\"valuePaths\\\"]],[27,\\\"get\\\",[[22,1,[\\\"valuePathMap\\\"]],[23,[\\\"modelName\\\"]]],null],[22,1,[\\\"valuePath\\\"]]],null]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/rows/row/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Q13yxsUQ\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\",\\\"dropdown\\\",\\\"event\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isTaskRunning\\\"]]],null,{\\\"statements\\\":[[1,[21,\\\"generic-components/ring-loader\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"showHeader\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showSelectedRowLength\\\"]]],null,{\\\"statements\\\":[[0,\\\"    (\\\"],[1,[23,[\\\"checkedRows\\\",\\\"length\\\"]],false],[0,\\\"/\\\"],[1,[23,[\\\"records\\\",\\\"length\\\"]],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"config\\\",\\\"reconcileSearchTables\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"records\\\",\\\"length\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[9],[0,\\\"No Records Found\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[9],[0,\\\" - \\\"],[1,[23,[\\\"records\\\",\\\"length\\\"]],false],[0,\\\" Record(s) Found\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"hideWidgetControls\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"config\\\",\\\"reconcileSearchTables\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button table-component-search-button data-test-search-button initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-search \\\",[27,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onDeleteButtonClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Delete\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableDeleteBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"class\\\",\\\"table-component-button table-component-search-button data-test-edit-button test-delete initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableDeleteBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDeleteButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onEditButtonClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Edit\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"class\\\",\\\"table-component-button table-component-search-button data-test-edit-button test-edit initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onEditButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showTableActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"disabled\\\"],[\\\"right\\\",[27,\\\"or\\\",[[23,[\\\"disableAdditionalBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"      \\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tableActions\\\",\\\"length\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/generic-components/table/template.hbs' @ L63:C11) \\\"],null]],[[\\\"class\\\"],[\\\"table-component-button data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/generic-components/table/template.hbs' @ L68:C9) \\\"],null]],[[\\\"class\\\"],[\\\"table-component-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"tableActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTableActionClick\\\",[22,4,[]],[22,3,[]]],null]],[9],[0,\\\"\\\\n        \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onCancelButtonEnable\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"title\\\",\\\"Cancel\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditBtn\\\"]],[23,[\\\"disableHeaderActions\\\"]]],null]],[11,\\\"class\\\",\\\"table-component-button table-component-search-button data-test-edit-button test-edit initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-close\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onCancelButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-input\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"table-component-search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"hasPendingChanges\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],[23,[\\\"disableRowSelection\\\"]],[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/generic-components/table/template.hbs' @ L120:C4) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/generic-components/table/template.hbs' @ L131:C5) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"config\\\",\\\"reconcileSearchTables\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"config\\\",\\\"noRecordsFound\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2 mb-2 longTable \\\"],[9],[0,\\\"\\\\n          No Records Found\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/generic-components/table/template.hbs' @ L145:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/vertical-menu/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vertical-panel'],\n    // passed from parent component\n    models: null,\n    onItemSelect: null,\n    disableList: null,\n    // initial selected item\n    selectedModel: null,\n    initialIndex: 0,\n\n    init() {\n      this._super(...arguments);\n\n      const models = this.get('models') || [];\n      const initialModel = models.length ? models[this.initialIndex] : null;\n      const selectedModel = this.get('selectedModel') || initialModel;\n\n      if (selectedModel) {\n        this.onSelect(selectedModel);\n      }\n    },\n\n    onSelect(model) {\n      const selectedModel = this.get('selectedModel');\n      if (!model || model === selectedModel) return;\n      if (selectedModel) selectedModel.set('selected', false);\n      model.set('selected', true);\n      this.set('selectedModel', model);\n      this.get('onItemSelect')(model);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      const selectedModel = this.get('selectedModel');\n      selectedModel.set('selected', false);\n    },\n\n    actions: {\n      onItemSelect(model) {\n        this.onSelect(model);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/vertical-menu/item/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['item'],\n    classNameBindings: ['isSelected', 'disabled'],\n    // passed from vertical-menu component\n    model: null,\n    selectedIndex: null,\n    index: null,\n    onItemSelect: null,\n    disableList: null,\n    disabled: Ember.computed.or('model.disabled', 'disableList'),\n    isSelected: Ember.computed.readOnly('model.selected'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onItemSelect() {\n        if (this.get('isSelected') || this.get('disabled')) return;\n        this.get('onItemSelect')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/vertical-menu/item/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"sRwo2GFU\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"li\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onItemSelect\\\"],null]],[9],[0,\\\"\\\\n\\\"],[7,\\\"span\\\"],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[9],[1,[23,[\\\"model\\\",\\\"title\\\"]],false],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/vertical-menu/item/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-components/vertical-menu/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"62LuY0Mg\",\n    \"block\": \"{\\\"symbols\\\":[\\\"model\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"vertical-menu\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"models\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"generic-components/vertical-menu/item\\\",null,[[\\\"model\\\",\\\"index\\\",\\\"disableList\\\",\\\"onItemSelect\\\"],[[22,1,[]],[22,2,[]],[23,[\\\"disableList\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onItemSelect\\\",[22,1,[]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-components/vertical-menu/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/base-widget/component\", [\"exports\", \"resize-observer-polyfill\"], function (_exports, _resizeObserverPolyfill) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    classNames: ['dashboard-widget'],\n    classNameBindings: ['disabled'],\n    // override with per-widget static configuration\n    config: null,\n    // widget model (see: `app/classes/widget.js`)\n    widget: null,\n    width: Ember.computed.alias('widget.width'),\n    height: Ember.computed.alias('widget.height'),\n    state: Ember.computed.alias('widget.state'),\n    isEditing: Ember.computed.alias('workspace.isEditing'),\n    disabled: Ember.computed.readOnly('isEditing'),\n    widgetTypeId: Ember.computed.alias('widget.typeId'),\n    dashboardwidgets: Ember.computed.alias('workspace.dashboard.widgets'),\n    isMaximized: Ember.computed('maximizer.maximizedWidget', 'widget', function () {\n      return this.get('maximizer.maximizedWidget') === this.get('widget');\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._resizeObserver = new _resizeObserverPolyfill.default(() => {\n        Ember.run.debounce(this, 'onWidgetResize', 250);\n      });\n\n      this._resizeObserver.observe(this.$()[0]);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      if (this._resizeObserver) {\n        this._resizeObserver.disconnect();\n\n        this._resizeObserver = null;\n      }\n    },\n\n    removeMaximizedPostFix(widgetInstanceId) {\n      const buffer = Ember.isPresent(widgetInstanceId) ? widgetInstanceId : '';\n      return buffer.replace('_maximized', '');\n    },\n\n    dashboardWidget: Ember.computed('widgetTypeId', 'dashboardwidgets', function () {\n      const widgetInstanceId = this.removeMaximizedPostFix(this.get('widgetInstanceId'));\n      const dashboardwidgets = this.get('dashboardwidgets');\n      const dashboardWidget = dashboardwidgets.find(widget => {\n        const widgetId = `${this.get('config.modelName')}_${widget.get('id')}`; // this will be unique id\n\n        return widgetId === widgetInstanceId;\n      });\n\n      if (!Ember.isNone(dashboardWidget) && Ember.isNone(dashboardWidget.get('isTraversalEnabled'))) {\n        dashboardWidget.set('isTraversalEnabled', true);\n      }\n\n      return dashboardWidget;\n    }),\n    isTraversalEnabled: Ember.computed.alias('dashboardWidget.isTraversalEnabled'),\n\n    // override this to resize 3rd party integrations (e.g. map)\n    onWidgetResize() {}\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/chartjs-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['analytics-widget'],\n    colors: Ember.computed('', function () {\n      return ['#D6E1EA', '#B8AFC0', '#D3DDE6', '#BADCF8', '#E3EBF0', '#CFD5DD', '#D6DEE3'];\n    }),\n    warningColor: Ember.computed('', function () {\n      return '#BADCF8';\n    }),\n    urgentColor: Ember.computed('', function () {\n      return '#B8AFC0';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/chartjs-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"L1kkZ/5M\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[14,1]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/chartjs-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/column-widget/classes/checkbox-row\", [\"exports\", \"ember-light-table/classes/Row\"], function (_exports, _Row) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class CheckboxRow extends _Row.default {}\n\n  _exports.default = CheckboxRow;\n  CheckboxRow.reopen({\n    activeContext: null,\n    isLastChecked: false,\n    isSelected: false,\n    isAlertCheckBox: false,\n    record: Ember.computed.alias('content'),\n    id: Ember.computed.alias('content.id'),\n    isDisabled: Ember.computed.readOnly('record.isDisabled'),\n    isChecked: Ember.computed('activeContext.checkedItems.[]', {\n      get() {\n        const record = this.get('record');\n        return this.get('activeContext').isRecordChecked(record);\n      },\n\n      set(key, value) {\n        const record = this.get('record');\n        this.get('activeContext').setRecordsChecked([record], value);\n        return value;\n      }\n\n    })\n  });\n});","define(\"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\", [\"exports\", \"ember-light-table/classes/Column\", \"adept-iq/config/column-types\", \"adept-iq/config/filter-types\", \"adept-iq/utils/filters\"], function (_exports, _Column, _columnTypes, _filterTypes, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class FilterColumn extends _Column.default {}\n\n  _exports.default = FilterColumn;\n  FilterColumn.reopen({\n    id: null,\n    config: null,\n    filterTypeId: null,\n    filterValues: null,\n    valuePathMap: Ember.computed('valuePaths', function () {\n      const valuePaths = this.get('valuePaths');\n      if (!valuePaths) return {};\n      const valuePathMap = valuePaths.reduce((obj, _ref) => {\n        let {\n          modelName,\n          valuePath\n        } = _ref;\n        obj[modelName] = valuePath;\n        return obj;\n      }, {});\n      return valuePathMap;\n    }),\n    columnType: Ember.computed('config.type', function () {\n      const columnTypeId = this.get('config.type');\n\n      const columnType = _columnTypes.default.findBy('id', columnTypeId);\n\n      if (!columnType) {\n        /*eslint-disable */\n        throw `no column type with id '${columnTypeId}'`;\n        /*eslint-enable */\n      }\n\n      return columnType;\n    }),\n    filterType: Ember.computed('filterTypeId', function () {\n      const filterTypeId = this.get('filterTypeId');\n      const filterType = _filterTypes.filterTypesHash[filterTypeId];\n\n      if (!filterType) {\n        return _filterTypes.nullFilter;\n      }\n\n      return filterType;\n    }),\n    shouldDisableFilterInput: Ember.computed('filterType', 'hidden', function () {\n      const filterType = this.get('filterType');\n      const hidden = this.get('hidden');\n      return filterType.arity === 0 || hidden;\n    }),\n    filterTypes: Ember.computed('columnType', function () {\n      const columnType = this.get('columnType');\n      return columnType.filterTypes;\n    }),\n    isFiltered: Ember.computed('filterType', 'filterValues', function () {\n      const filterType = this.get('filterType');\n      const filterValues = this.get('filterValues');\n      return (0, _filters.testFilterValues)(filterType, filterValues);\n    }),\n    filterNode: Ember.computed('filterType', 'filterValues', 'config.{alternateValuePath,valuePath,format}', function () {\n      const filterType = this.get('filterType');\n      let filterValues = this.get('filterValues') || [];\n      if (!(0, _filters.testFilterValues)(filterType, filterValues)) return null;\n      filterValues = filterValues.map(filterType.parseValue);\n      const valuePath = this.get('config.alternateValuePath') ? this.get('config.alternateValuePath') : this.get('config.valuePath');\n      return (0, _filters.buildValueFilterNode)(filterType, valuePath, filterValues, this.get('config.format'));\n    })\n  });\n});","define(\"adept-iq/pods/components/generic-widgets/column-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"ember-light-table\", \"moment\", \"adept-iq/classes/data-joins/column-widget\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\", \"adept-iq/utils/compute-ordered-ids\", \"ember-concurrency\", \"papaparse\", \"lodash\", \"adept-iq/utils/mobile\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/remove-focus\", \"adept-iq/config/environment\"], function (_exports, _component, _emberLightTable, _moment, _columnWidget, _filterColumn, _computeOrderedIds, _emberConcurrency, _papaparse, _lodash, _mobile, _mappedPermIds, _removeFocus, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_COLUMN_WIDTH = 100;\n  const MIN_COLUMN_WIDTH = 50;\n  const CHECKBOX_COLUMN_WIDTH = 30; // number of records to load at a time while scrolling\n\n  const PAGINATION_LIMIT = 50; // how close to bottom do we need to scroll before loading more\n\n  const PAGINATION_TRIGGER_OFFSET = 100;\n\n  const toPixels = x => `${x}px`;\n\n  const fromPixels = x => parseInt(x.split('px')[0], 10);\n\n  var _default = _component.default.extend({\n    workspace: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    stopsReorder: Ember.inject.service(),\n    store: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    interaction: Ember.inject.service(),\n    work: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    canShowHeader: true,\n    routesFilter: null,\n    classNames: ['column-widget'],\n    classNameBindings: ['disabled'],\n    // overload this with a static config object\n    config: null,\n    limit: PAGINATION_LIMIT,\n    offset: 0,\n    paginationEnabled: true,\n    componentName: null,\n    tableActions: null,\n    allowedTableActions: null,\n    downloadAction: null,\n    singleActions: null,\n    bulkActions: null,\n    records: null,\n    visibleRecords: null,\n    searchText: '',\n    isSearchEnabled: false,\n    isSearchAllowed: true,\n    // set for demo\n    isFilterAllowed: true,\n    // set for demo\n    isCellEditAllowed: false,\n    localQuickFilters: null,\n    table: null,\n    dataJoin: null,\n    lastRowClicked: false,\n    inlineRowMenu: null,\n    inlineRowMenuPosition: null,\n    refreshSync: false,\n    resetScroll: false,\n    isPaginating: false,\n    scrollClassName: null,\n    allowDisplayHash: null,\n    sortId: Ember.computed.alias('widget.state.sortId'),\n    sortAsc: Ember.computed.alias('widget.state.sortAsc'),\n    tileSize: Ember.computed.alias('workspace.tileSize'),\n    tileSpacing: Ember.computed.alias('workspace.tileSpacing'),\n    isLoading: Ember.computed.alias('fetchDataTask.isRunning'),\n    isError: Ember.computed.alias('fetchDataTask.last.isError'),\n    useBulkActions: Ember.computed.gt('checkedRowsCount', 1),\n    reoptimizeInProgress: Ember.computed.readOnly('workspace.reoptimizeInProgress'),\n    disableRightClick: Ember.computed.or('workspace.{isExported,reoptimizeInProgress}'),\n    isRowInCheckedRows: Ember.computed('lastRowClicked', 'table.rows', function () {\n      const lastRowClicked = this.get('lastRowClicked');\n      const checkedRows = this.get('table.rows').filterBy('isChecked') || [];\n\n      if (!lastRowClicked) {\n        return false;\n      }\n\n      return checkedRows.some(row => row.get('content.id') === lastRowClicked.get('id'));\n    }),\n    showBulkActions: Ember.computed.and('useBulkActions', 'isRowInCheckedRows'),\n    showSingleActions: Ember.computed.equal('showBulkActions', false),\n    checkedRowsCount: Ember.computed('table.rows.@each.isChecked', function () {\n      const checkedRows = this.get('table.rows').filterBy('isChecked') || [];\n      return checkedRows.length;\n    }),\n    checkedItemsCount: Ember.computed('activeContext.topActiveContext.checkedItems.[]', function () {\n      let items = [];\n      const modelName = this.get('config.modelName');\n      const checkedItems = this.get('activeContext.topActiveContext.checkedItems') || []; // modelName will also be a array like in stop-widget for schedule workspace\n\n      if (Array.isArray(modelName)) {\n        items = checkedItems.filter(i => modelName.includes(i.modelName)) || [];\n        return items.length;\n      }\n\n      items = checkedItems.filter(i => i.modelName === modelName) || [];\n      return items.length;\n    }),\n    isFiltered: Ember.computed('table.columns.@each.{isFiltered}', function () {\n      return this.get('table.columns').isAny('isFiltered');\n    }),\n    tableColumns: Ember.computed('config.{hideCheckBox,columns}', function () {\n      const hideCheckBox = this.get('config.hideCheckBox');\n      const tableColumns = hideCheckBox ? [{\n        id: 'checkbox',\n        valuePath: 'checked',\n        sortable: false,\n        width: '0px'\n      }] : [{\n        id: 'checkbox',\n        valuePath: 'checked',\n        cellComponent: 'table/cells/check-box',\n        component: 'table/columns/check-box',\n        sortable: false,\n        width: _mobile.isTouchDevice ? '70px' : toPixels(CHECKBOX_COLUMN_WIDTH)\n      }];\n      const columnConfigs = this.get('config.columns');\n      const orderedColumnIds = (0, _computeOrderedIds.default)(columnConfigs) || [];\n      orderedColumnIds.forEach(id => {\n        const config = columnConfigs.findBy('id', id);\n        let allowColumn = this.get('allowDisplayHash')[config.allowDisplayAttr]; // disable a specific column depending if allowDisplayAttr exist in config\n\n        allowColumn = Ember.isPresent(allowColumn) ? allowColumn : true;\n        const tableColumn = {\n          id: id,\n          component: 'table/columns/filter-capable',\n          cellClassNames: config.id,\n          classNames: config.id,\n          label: config.label,\n          cellDesc: config.cellDesc,\n          valuePath: `record.${config.valuePath}`,\n          valuePaths: config.valuePaths,\n          hidden: config.hidden || config.unAvailable || !allowColumn,\n          allowColumn,\n          resizable: true,\n          minResizeWidth: MIN_COLUMN_WIDTH,\n          width: toPixels(config.defaultWidth || DEFAULT_COLUMN_WIDTH),\n          config\n        };\n\n        if (config.editable && this.isCellEditAllowed) {\n          if (config.type === 'enum') {\n            tableColumn.cellComponent = 'table/cells/user-editable-enum';\n            tableColumn.options = config.options;\n            tableColumn.allowMultiple = config.allowMultiple;\n          } else {\n            tableColumn.cellComponent = 'table/cells/user-editable';\n          }\n        } else if (config.type.includes('enum')) {\n          tableColumn.cellComponent = 'table/cells/text-extension';\n        } else {\n          tableColumn.cellComponent = config.cellComponent ? config.cellComponent : 'table/cells/base-cell';\n        }\n\n        if (config.highlightable) {\n          tableColumn.cellClassNames = ['highlightable'];\n        }\n\n        if (['date', 'datetime', 'time', 'datetimeflatpickr'].includes(config.type) && config.format) {\n          tableColumn.format = value => {\n            return Ember.isEmpty(value) ? value : (0, _moment.default)(value).format(config.format);\n          };\n\n          switch (config.type) {\n            case 'date':\n            case 'datetimeflatpickr':\n            case 'datetime':\n              tableColumn.parse = value => {\n                return (0, _moment.default)(value, config.format).toDate();\n              };\n\n              break;\n\n            case 'time':\n              tableColumn.parse = (timeString, originalValue) => {\n                const date = (0, _moment.default)(originalValue).format(_environment.default.dateTimeFormat.dateMoment);\n                const newValue = (0, _moment.default)(`${date} ${timeString}`, _environment.default.dateTimeFormat.dateTimeMoment).toDate();\n                return newValue;\n              };\n\n              break;\n\n            default:\n              break;\n          }\n        }\n\n        tableColumns.push(tableColumn);\n      }); // fills the rest of the space with an empty column\n\n      tableColumns.push({\n        id: 'spacer',\n        width: '100%',\n        sortable: false,\n        isResizable: true\n      });\n      return tableColumns;\n    }),\n    widgetClassName: Ember.computed('workspace.showGrid', function () {\n      if (this.get('workspace.showGrid')) {\n        return 'column-widget-body cell-show-border ';\n      }\n\n      return 'column-widget-body';\n    }),\n    click: function (event) {\n      if (['fa fa-search active-button', 'column-widget-search-box data-test-search-box'].includes(event.target.className)) {\n        return false;\n      }\n\n      (0, _removeFocus.removeFocus)();\n    },\n\n    // populate allowDisplayHash for columns in column widget attribute called allowDisplayAttr\n    configureAllowDisplayHash() {\n      this.set('allowDisplayHash', {\n        allowFundingAgency: this.get('booking').getAllowFundingAgency()\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.configureAllowDisplayHash();\n      const table = new _emberLightTable.default([], [], {\n        enableSync: false\n      });\n\n      const dataJoin = _columnWidget.default.create({\n        table,\n        activeContext: this.get('activeContext.topActiveContext'),\n        work: this.get('work'),\n        modelName: this.get('config.modelName')\n      });\n\n      this.setProperties({\n        table,\n        dataJoin,\n        records: [],\n        visibleRecords: []\n      });\n      this.setupDefaultTableAction();\n      this.configureSearchFilterPermission();\n      this.set('widget.models', (0, _lodash.castArray)(this.get('config.modelName')));\n\n      this._onScroll = () => {\n        const dropdown = this.get('inlineRowMenu');\n        const plusMenu = this.get('plusIconMenu');\n        if (dropdown) dropdown.actions.close();\n        if (plusMenu) plusMenu.actions.close();\n      };\n\n      const typeId = this.get('widget.typeId');\n      this.set('scrollClassName', `column-widget-filters-scroll-${typeId}`);\n      this.set('componentName', `${typeId}Widget`);\n      this.setupActiveQuickFilter();\n    },\n\n    setupActiveQuickFilter() {\n      if (this.get('isMaximized')) {\n        const maximizedWidget = this.get('maximizer.maximizedWidget');\n        const maximizedWidgetInstanceId = `${maximizedWidget.typeId}_${maximizedWidget.id}`;\n        const widgetInstanceId = `${this.get('widget.typeId')}_${this.get('widget.id')}`;\n        const localQuickFilters = this.get('quickFilters') || [];\n        const activeQuickFilter = this.get('maximizer.activeQuickFilter');\n\n        if (maximizedWidgetInstanceId === widgetInstanceId) {\n          if (Ember.isPresent(activeQuickFilter)) {\n            localQuickFilters.forEach(filter => {\n              if (filter.id === activeQuickFilter.id) {\n                filter.active = true;\n              } else {\n                filter.active = false;\n              }\n            });\n          } else {\n            localQuickFilters.forEach(filter => {\n              filter.active = false;\n            });\n          }\n        }\n      }\n    },\n\n    destroy() {\n      const tableColumns = this.get('table.columns') || [];\n      this.get('dataJoin').destroy();\n      tableColumns.forEach(column => column.destroy());\n      this.get('table').destroy();\n      this._onScroll = null;\n\n      this._super(...arguments);\n    },\n\n    isMaximized: Ember.computed('maximizer.maximizedWidget', 'widget', function () {\n      return this.get('maximizer.maximizedWidget') === this.get('widget');\n    }),\n    quickFiltersExist: Ember.computed('widgetState', function () {\n      const quickFilters = this.get('widgetState.quickFilters');\n\n      if (Ember.isPresent(quickFilters) && quickFilters.length > 0) {\n        return true;\n      }\n\n      return false;\n    }),\n    quickFilters: Ember.computed('widgetState.quickFilters', function () {\n      const quickFilters = this.get('widgetState.quickFilters') || [];\n      const localQuickFilters = this.get('localQuickFilters');\n      const widgetInstanceId = `${this.get('widget.typeId')}_${this.get('widget.id')}`;\n\n      if (Ember.isEmpty(localQuickFilters)) {\n        // eslint-disable-next-line ember/no-side-effects\n        const newQuickFilters = (0, _lodash.cloneDeep)(quickFilters);\n        newQuickFilters.forEach(filter => {\n          filter.widgetInstanceId = widgetInstanceId;\n        }); // eslint-disable-next-line ember/no-side-effects\n\n        this.set('localQuickFilters', newQuickFilters || []);\n      } else {\n        const newLocalQuickFilters = []; // add newly created filter to local array of quick filters\n\n        quickFilters.forEach(newFilter => {\n          const exist = localQuickFilters.find(currFilter => currFilter.id === newFilter.id);\n\n          if (!exist) {\n            localQuickFilters.push((0, _lodash.cloneDeep)(newFilter));\n          }\n        }); // remove filter from local array of quick filters\n\n        localQuickFilters.forEach(currFilter => {\n          const exist = quickFilters.find(newFilter => currFilter.id === newFilter.id);\n\n          if (exist) {\n            newLocalQuickFilters.push(currFilter);\n          }\n        }); // eslint-disable-next-line ember/no-side-effects\n\n        this.set('localQuickFilters', newLocalQuickFilters);\n      }\n\n      return this.get('localQuickFilters');\n    }),\n    quickFilters2: Ember.computed('widgetState', function () {\n      const widgetState = this.get('widgetState') || {};\n      return widgetState.quickFilters || [];\n    }),\n    widgetState: Ember.computed('workspace.widgetStates', 'widget.typeId', function () {\n      const widgetStates = this.get('workspace.widgetStates') || {};\n      const widgetTypeId = this.get('widget.typeId');\n      const widgetState = widgetStates[widgetTypeId] || {};\n      return widgetState;\n    }),\n\n    setupDefaultTableAction() {\n      const downloadAction = {\n        id: 'print',\n        permIds: [_mappedPermIds.default.downloadRoutes, _mappedPermIds.default.downloadStops, _mappedPermIds.default.downloadTrips, _mappedPermIds.default.downloadVehicles, _mappedPermIds.default.downloadDrivers, _mappedPermIds.default.downloadMessages, _mappedPermIds.default.downloadAlerts, // mappedPermIds.downloadMaps,\n        _mappedPermIds.default.downloadRoles, _mappedPermIds.default.downloadUsers, _mappedPermIds.default.downloadsubscriptions, _mappedPermIds.default.downloadPassengers, _mappedPermIds.default.downloadZones, _mappedPermIds.default.downloadSchedule //mappedPermIds.downloadRoadSupervisors,\n        ],\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      };\n      this.set('downloadAction', downloadAction); // eslint-disable-next-line new-cap\n\n      this.set('tableActions', Ember.A([downloadAction]));\n      this.set('allowedTableActions', this.get('tableActions'));\n    },\n\n    configureSearchFilterPermission() {\n      const configPermissions = this.get('workspace.configPermissions');\n      const widgetStates = this.get('workspace.widgetStates');\n      const widgetTypeId = this.get('widget.typeId');\n\n      if (!Ember.isNone(configPermissions)) {\n        const configPermission = configPermissions[widgetTypeId];\n\n        if (!Ember.isNone(configPermission.searchAllowed)) {\n          this.set('isSearchAllowed', configPermission.searchAllowed);\n        }\n\n        if (!Ember.isNone(configPermission.filterAllowed)) {\n          this.set('isFilterAllowed', configPermission.filterAllowed);\n        }\n\n        if (!Ember.isNone(configPermission.cellEditAllowed)) {\n          // @TODO RUX-325 will disable this feature for now, eventually it will return in R5.0+\n          this.set('isCellEditAllowed', false);\n        }\n\n        if (!Ember.isNone(widgetStates)) {\n          this.set('widgetStates', widgetStates);\n        }\n      }\n    },\n\n    exportData() {\n      const table = this.get('table');\n      const columns = table.get('columns').rejectBy('hidden') || [];\n      const rows = table.get('rows') || [];\n      const fields = columns.reduce((arr, column) => {\n        const id = column.get('id');\n\n        if (['checkbox', 'spacer'].includes(id)) {\n          return arr;\n        }\n\n        const label = column.get('label');\n        arr.push(label);\n        return arr;\n      }, []);\n      const data = rows.map(row => {\n        return columns.reduce((arr, column) => {\n          const config = column.get('config');\n          const id = column.get('id');\n          const csvReplaceRegex = config && config.csvReplaceRegex ? config.csvReplaceRegex : null;\n          let value = '';\n\n          if (['checkbox', 'spacer'].includes(id)) {\n            return arr;\n          }\n\n          const valuePath = column.get('valuePath');\n\n          if (csvReplaceRegex && csvReplaceRegex.pattern) {\n            const pattern = csvReplaceRegex.pattern;\n            const flag = csvReplaceRegex.flag ? csvReplaceRegex.flag : 'g';\n            const replace = csvReplaceRegex.replaceWith ? csvReplaceRegex.replaceWith : '';\n            const regex = new RegExp(pattern, flag);\n            value = row.get(valuePath).replace(regex, replace);\n          } else {\n            value = row.get(valuePath);\n          }\n\n          if (Ember.isPresent(value)) {\n            if (config.type.includes('enum')) {\n              let values = null;\n\n              if (Ember.isPresent(value.values)) {\n                values = value.values.map(obj => obj.value);\n                value = values.join(';');\n              } else if (Ember.isEmpty(value.values)) value = '';\n            } else if (config.type === 'datetime' || config.type === 'time' || config.type === 'date') {\n              value = (0, _moment.default)(value).local().format(config.format);\n            }\n          }\n\n          arr.push(value);\n          return arr;\n        }, []);\n      });\n\n      const csv = _papaparse.default.unparse({\n        fields,\n        data\n      }, {\n        quotes: true,\n        quoteChar: '\"',\n        escapeChar: '\"'\n      });\n\n      const link = document.createElement('a');\n      const timestamp = (0, _moment.default)().format('YYYY-MM-DD_HH-MM-SS');\n      const {\n        title\n      } = this.get('config');\n      const filename = `${timestamp}_${title}.csv`;\n      const blob = new Blob([csv], {\n        type: 'text/csv;charset=utf-8;'\n      });\n      const url = URL.createObjectURL(blob);\n      link.setAttribute('href', url);\n      link.setAttribute('download', filename);\n      link.style.visibility = 'hidden';\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      if (!this.get('config')) {\n        // eslint-disable-next-line\n        throw 'static config property not found';\n      } // bind screen scroll to close any opened drop down menus\n\n\n      Ember.$('.tile-dashboard-wrapper').on('scroll', this._onScroll);\n      this.onTableColumnsChange();\n      this.onWidgetStateChange();\n      this.onRecordsChange();\n      this.reConfigureTableActions();\n      this.reConfigureSingleActions();\n      Ember.run.scheduleOnce('afterRender', this, 'refreshData'); // listen for column resize\n\n      if (typeof MutationObserver !== 'undefined') {\n        const mutationObserver = new MutationObserver(mutationList => {\n          if (mutationList[0].target.classList.contains('is-resizing')) {\n            this.get('interaction').didStartResizingColumn();\n          } else {\n            this.get('interaction').didStopResizingColumn();\n          }\n        });\n        const el = this.$('.ember-light-table')[0];\n        mutationObserver.observe(el, {\n          attributeFilter: ['class']\n        });\n        this.set('mutationObserver', mutationObserver);\n      }\n    },\n\n    willDestroyElement() {\n      this.$().off('keydown', this._onKeyDown);\n      this.$().off('mousedown', this._onMouseDown);\n      Ember.$('.tile-dashboard-wrapper').off('scroll', this._onScroll);\n      this.get('dataJoin').clear();\n\n      if (typeof MutationObserver !== 'undefined') {\n        this.get('mutationObserver').disconnect();\n      }\n\n      this._super(...arguments);\n    },\n\n    setTableColumns() {\n      const oldColumns = this.get('table.columns').slice() || [];\n      const tableColumns = this.get('tableColumns') || [];\n      this.set('table.columns', tableColumns.map(col => new _filterColumn.default(col)));\n      oldColumns.forEach(column => column.destroy());\n    },\n\n    updateTableColumns() {\n      const state = this.get('widget.state') || {};\n      const config = this.get('config') || {};\n      const columns = this.get('table.columns') || [];\n      let shouldResize = false;\n      let scrollLeft;\n      const body = this.$('.column-widget-body');\n\n      if (body) {\n        scrollLeft = this.$('.column-widget-body').scrollLeft();\n      }\n\n      if (columns) {\n        columns.forEach(column => {\n          const sortId = state.sortId || config.defaultSortId;\n\n          if (config.modelName === 'avlm-alert') {\n            config.defaultSortId = 'priorityId';\n          }\n\n          if (Ember.isPresent(sortId) && sortId === column.get('id') || config.modelName === 'avlm-alert' && Ember.isPresent(sortId) && sortId === 'priorityId' && column.get('id') === 'priority') {\n            let sortAsc;\n\n            if (Ember.isPresent(state.sortAsc)) {\n              sortAsc = state.sortAsc;\n            } else if (Ember.isPresent(config.defaultSortAsc)) {\n              sortAsc = config.defaultSortAsc;\n            } else {\n              sortAsc = true;\n            }\n\n            column.set('sorted', true);\n            column.set('ascending', sortAsc);\n          } else {\n            column.set('sorted', false);\n          }\n        });\n      }\n\n      const columnsHash = state.columns || {};\n      Object.entries(columnsHash).forEach(_ref => {\n        let [id, columnState] = _ref;\n        const column = columns.findBy('id', id);\n\n        if (!column) {\n          return;\n        }\n\n        if (Ember.isPresent(columnState.hidden)) {\n          column.set('hidden', columnState.hidden);\n          shouldResize = true;\n        }\n\n        if (Ember.isPresent(columnState.index)) {\n          // +/- 1 accounts for checkbox column\n          const oldIndex = columns.indexOf(column) - 1;\n\n          if (columnState.index !== oldIndex) {\n            const swapColumn = columns.objectAt(1 + columnState.index);\n            columns.replace(1 + columnState.index, 1, [column]);\n            columns.replace(1 + oldIndex, 1, [swapColumn]);\n            shouldResize = true;\n          }\n        }\n\n        const wasFiltered = column.get('isFiltered');\n        ['filterTypeId', 'filterValues'].forEach(prop => {\n          // allow null value to overwrite\n          if (!columnState.hasOwnProperty(prop)) {\n            return;\n          }\n\n          column.set(prop, columnState[prop]);\n        });\n\n        if (wasFiltered || column.get('isFiltered')) {\n          Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n        }\n\n        if (Ember.isPresent(columnState.width)) {\n          column.set('width', toPixels(columnState.width));\n          shouldResize = true;\n        }\n      });\n\n      if (shouldResize) {\n        // resize at end of _next_ loop so that all changes are applied\n        Ember.run.next(() => {\n          if (Ember.isPresent(scrollLeft)) {\n            // wait an additional loop before restoring scroll position\n            Ember.run.next(() => {\n              Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n            });\n          }\n        });\n      }\n\n      Ember.run.debounce(this, 'refreshData', 250);\n    },\n\n    refreshData() {\n      if (this.get('isDestroyed')) return;\n      this.get('fetchDataTask').perform().then(() => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false);\n        }\n      }).catch(err => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false); // eslint-disable-next-line no-console\n\n          console.log('Error occoured when refreshing the Data' + err);\n        }\n\n        if (!(0, _emberConcurrency.didCancel)(err)) {\n          throw err;\n        }\n      });\n    },\n\n    clearData() {\n      this.set('records', []);\n      this.set('offset', 0);\n      this.get('dataJoin').clear();\n    },\n\n    setScrollLeft(scrollLeft) {\n      if (!this.$('.column-widget-body')) {\n        return;\n      }\n\n      this.$('.column-widget-body').scrollLeft(scrollLeft);\n    },\n\n    getWidgetIndex() {\n      if (this.get('maximizer.maximizedWidget') || !Ember.isPresent(this.element.closest('.grid-stack'))) {\n        return null;\n      }\n\n      const gridStack = this.element.closest('.grid-stack');\n      const gridStackItems = Array.from(gridStack.children).sort((a, b) => {\n        const yDiff = parseInt(a.getAttribute('data-gs-y'), 10) - parseInt(b.getAttribute('data-gs-y'), 10);\n\n        if (yDiff === 0) {\n          return parseInt(a.getAttribute('data-gs-x'), 10) - parseInt(b.getAttribute('data-gs-x'), 10);\n        }\n\n        return yDiff;\n      });\n      const gridStackItem = this.element.closest('.grid-stack-item');\n      return gridStackItems.indexOf(gridStackItem);\n    },\n\n    fetchDataTask: (0, _emberConcurrency.task)(function* () {\n      const records = yield this.fetchDataQuery();\n      this.set('records', records);\n    }).restartable(),\n    onRecordsChange: Ember.observer('records', 'offset', function () {\n      const limit = this.get('limit');\n      const offset = this.get('offset');\n      const records = this.get('records');\n      let visibleRecords = [];\n\n      if (records) {\n        visibleRecords = this.get('records').slice(0, offset + limit);\n      }\n\n      this.set('visibleRecords', visibleRecords);\n    }),\n    onVisibleRecordsChange: Ember.observer('visibleRecords', function () {\n      const visibleRecords = this.get('visibleRecords');\n      const refreshSync = this.get('refreshSync');\n      const resetScroll = this.get('resetScroll');\n      this.get('dataJoin').join(visibleRecords, refreshSync);\n      this.set('refreshSync', false);\n\n      if (resetScroll) {\n        // reset scroll and pagination to top\n        this.set('offset', 0);\n        this.$('.column-widget-body').scrollTop(0);\n      }\n\n      this.set('resetScroll', false);\n    }),\n    onTableColumnsChange: Ember.observer('tableColumns', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'setTableColumns');\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n    onWidgetStateChange: Ember.observer('widget.state', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n    onTableActionsChange: Ember.observer('tableActions.[]', function () {\n      this.reConfigureTableActions();\n    }),\n\n    reConfigureTableActions() {\n      const configPermissions = this.get('workspace.configPermissions');\n      const actions = [];\n\n      if (!Ember.isNone(configPermissions)) {\n        const configPermission = configPermissions[this.get('widget.typeId')];\n\n        if (!Ember.isNone(configPermission) && !Ember.isNone(this.get('tableActions'))) {\n          this.get('tableActions').forEach(currAction => {\n            const permGranted = this.get('permissionLayer').permInUserHash(currAction.permId, currAction.permIds);\n\n            if (permGranted && !Ember.isNone(configPermission.tableActions) && (configPermission.tableActions.includes(currAction.id) || configPermission.tableActions.includes('all'))) {\n              actions.push(currAction);\n            }\n          });\n          this.set('allowedTableActions', actions);\n        }\n      }\n    },\n\n    keyDown(event) {\n      const ltCell = event.target.closest('.lt-cell'); // need to exempt checkboxes to allow right arrow from checkbox col\n\n      const targetIsControl = event.target.tagName === 'INPUT' && event.target.type !== 'checkbox';\n\n      switch (event.key) {\n        case 'Escape':\n          {\n            const targetIsSearchBox = event.target.classList.contains('column-widget-search-box');\n\n            if (targetIsSearchBox) {\n              event.preventDefault();\n              this.set('isSearchEnabled', false);\n              this.$('.column-widget-search-button').focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowLeft':\n          {\n            if (!ltCell || targetIsControl) {\n              return;\n            }\n\n            event.preventDefault();\n            const previousCell = ltCell.previousElementSibling;\n\n            if (!previousCell) {\n              return;\n            }\n\n            const focusElement = previousCell.querySelector('.can-focus') || previousCell.firstElementChild;\n\n            if (focusElement) {\n              focusElement.focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowRight':\n          {\n            if (!ltCell || targetIsControl) {\n              return;\n            }\n\n            event.preventDefault();\n            const nextCell = ltCell.nextElementSibling;\n\n            if (!nextCell) {\n              return;\n            }\n\n            const focusElement = nextCell.querySelector('.can-focus') || nextCell.firstElementChild;\n\n            if (focusElement) {\n              focusElement.focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowDown':\n          {\n            if (!ltCell) {\n              return;\n            }\n\n            event.preventDefault();\n            const row = ltCell.closest('.lt-row'); // an HTMLCollection isn't really an array\n\n            const rowChildren = [].slice.call(row.children);\n            const index = rowChildren.indexOf(ltCell);\n            const nextRow = row.nextElementSibling;\n\n            if (nextRow && nextRow.tagName !== 'OCCLUDED-CONTENT') {\n              // move table selection down one row\n              const tableRows = this.get('table.rows');\n              tableRows.setEach('selected', false);\n              const recordId = nextRow.getAttribute('data-record-id');\n              const nextTableRow = tableRows.findBy('content.id', recordId);\n              nextTableRow.set('selected', true); // move browser focus to same column in next row\n\n              const nextLtCell = nextRow.children[index];\n              const focusElement = nextLtCell.querySelector('.can-focus') || nextLtCell.firstElementChild;\n\n              if (focusElement) {\n                focusElement.focus();\n              }\n            }\n\n            break;\n          }\n\n        case 'ArrowUp':\n          {\n            if (!ltCell) {\n              return;\n            }\n\n            event.preventDefault();\n            const row = ltCell.closest('.lt-row'); // an HTMLCollection isn't really an array\n\n            const rowChildren = [].slice.call(row.children);\n            const index = rowChildren.indexOf(ltCell);\n            const previousRow = row.previousElementSibling;\n\n            if (previousRow && previousRow.tagName !== 'OCCLUDED-CONTENT') {\n              // move table selection down one row\n              const tableRows = this.get('table.rows');\n              tableRows.setEach('selected', false);\n              const recordId = previousRow.getAttribute('data-record-id');\n              const previousTableRow = tableRows.findBy('content.id', recordId);\n              previousTableRow.set('selected', true); // move browser focus to same column in previous row\n\n              const previousLtCell = previousRow.children[index];\n              const focusElement = previousLtCell.querySelector('.can-focus') || previousLtCell.firstElementChild;\n\n              if (focusElement) {\n                event.preventDefault();\n                focusElement.focus();\n              }\n            }\n\n            break;\n          }\n\n        case ' ':\n        case 'Enter':\n          {\n            const isColumn = event.target.classList.contains('table-base-column');\n\n            if (isColumn) {\n              event.preventDefault();\n              this.$(event.target).trigger('click');\n            } else {\n              const actions = this.get('inlineRowMenu.actions');\n              if (actions) actions.close();\n            }\n\n            break;\n          }\n\n        default:\n          break;\n      }\n    },\n\n    mouseDown(event) {\n      if (!this.get('stopsReorder').reorderInProgress) {\n        const targetIsSearchBox = event.target.classList.contains('column-widget-search-box');\n\n        if (!targetIsSearchBox) {\n          event.preventDefault();\n        }\n      }\n\n      if (event.target.tagName === 'INPUT' && event.target.type === 'checkbox') {\n        // allow user to check another row without moving selection\n        return;\n      }\n\n      const ltCell = event.target.closest('.lt-cell');\n\n      if (ltCell) {\n        const row = ltCell.closest('.lt-row');\n        const recordId = row.getAttribute('data-record-id');\n        const tableRows = this.get('table.rows') || [];\n        const clickedRow = tableRows.findBy('content.id', recordId);\n        tableRows.setEach('selected', false);\n        clickedRow.set('selected', true);\n        const focusElement = ltCell.querySelector('.can-focus') || ltCell.firstElementChild;\n\n        if (focusElement) {\n          focusElement.focus();\n        }\n      }\n    },\n\n    doubleClick(event) {\n      event.preventDefault();\n\n      if (event.target.tagName === 'INPUT' && event.target.type === 'checkbox') {\n        // allow user to check another row without moving selection\n        return;\n      }\n\n      const ltCell = event.target.closest('.lt-cell');\n\n      if (ltCell) {\n        const row = ltCell.closest('.lt-row');\n        const index = Array.from(row.children).indexOf(ltCell);\n        const recordId = row.getAttribute('data-record-id');\n        const tableRows = this.get('table.rows') || [];\n        const clickedColumn = this.get('table.columns')[index];\n        const clickedRow = tableRows.findBy('content.id', recordId);\n        tableRows.setEach('selected', false);\n        const scheduleLocked = clickedRow.get('record.scheduleLocked');\n\n        if (!scheduleLocked || Ember.isNone(scheduleLocked)) {\n          clickedRow.set('isEditing', true);\n          clickedColumn.set('isEditing', true);\n        }\n      }\n    },\n\n    // Helper function to take a list of (single/bulk) actions, and the corresponding list of action names\n    // from the config service.  Order the list of actions that will be used to populate the dropdown menu\n    // based on the order from the config service, so that it's always consistent\n    // Also allow for the config list to include an \"all\" value, where anything not already specified will\n    // be inserted (in the order determined by the widget's returned action list)\n    orderActionsByConfigList(actions, listOfActionsFromConfig) {\n      const configList = Ember.isNone(listOfActionsFromConfig) ? [] : listOfActionsFromConfig; // Find any actions that were declared by the widget, but aren't in the config list\n\n      let actionsToBeIncludedAsAll = [];\n\n      if (actions) {\n        actionsToBeIncludedAsAll = actions.filter(action => !configList.some(configAction => configAction === action.id));\n      }\n\n      const result = []; // Iterate over the config list, so that we populate the result in the right order\n\n      configList.forEach(configAction => {\n        if (configAction === 'all') {\n          result.push(...actionsToBeIncludedAsAll);\n        } else {\n          const foundAction = actions.find(action => action.id === configAction);\n\n          if (foundAction) {\n            result.push(foundAction);\n          }\n        }\n      });\n      return result;\n    },\n\n    reConfigureBulkActions() {\n      const bulkActions = this.get('dynamicBulkActions') || [];\n      this.set('bulkActions', [...bulkActions]);\n    },\n\n    reConfigureSingleActions() {\n      const configPermissions = this.get('workspace.configPermissions');\n\n      if (!Ember.isNone(configPermissions)) {\n        const configPermission = configPermissions[this.get('widget.typeId')];\n        let singleActions = [];\n        const bulkActions = [];\n\n        if (!Ember.isNone(configPermission) && !Ember.isNone(this.get('singleActions'))) {\n          this.get('singleActions').forEach(currAction => {\n            const permGranted = this.get('permissionLayer').permInUserHash(currAction.permId, currAction.permIds);\n\n            if (permGranted && !Ember.isNone(configPermission.singleActions) && (configPermission.singleActions.includes(currAction.id) || configPermission.singleActions.includes('all'))) {\n              singleActions.push(currAction);\n            }\n          });\n\n          if (!Ember.isNone(singleActions)) {\n            singleActions = this.orderActionsByConfigList(singleActions, configPermission.singleActions);\n          }\n\n          this.set('singleActions', singleActions);\n        }\n\n        if (!Ember.isNone(configPermission) && !Ember.isNone(this.get('bulkActions'))) {\n          this.get('bulkActions').forEach(currAction => {\n            const permGranted = this.get('permissionLayer').permInUserHash(currAction.permId, currAction.permIds);\n\n            if (permGranted && !Ember.isNone(configPermission.bulkActions) && (configPermission.bulkActions.includes(currAction.id) || configPermission.bulkActions.includes('all'))) {\n              bulkActions.push(currAction);\n            }\n          });\n          this.set('bulkActions', bulkActions);\n        }\n      }\n    },\n\n    actions: {\n      onTitleOptionChange() {},\n\n      onUpdateIQUXRow() {},\n\n      onRowClick() {},\n\n      onRowDoubleClick() {},\n\n      onSearchTextChange(event) {\n        if (event.keyCode !== 13) {\n          return;\n        }\n\n        const searchText = event.target.value;\n        const previousSearchText = this.get('searchText');\n\n        if (searchText === previousSearchText) {\n          return;\n        }\n\n        this.set('searchText', searchText);\n        this.set('refreshSync', true);\n        this.set('widget.state.modelName', this.get('config.modelName'));\n        Ember.run.debounce(this, 'refreshData', 250);\n      },\n\n      onColumnClick(column) {\n        if (!column.sorted) {\n          return;\n        }\n\n        let sortColumnId = column.get('id');\n\n        if (this.get('config.modelName') === 'avlm-alert' && sortColumnId === 'priority') {\n          sortColumnId = 'priorityId';\n        }\n\n        this.get('widget').mergeState({\n          sortId: sortColumnId,\n          sortAsc: column.get('ascending'),\n          modelName: this.get('config.modelName')\n        });\n        this.set('refreshSync', true);\n        this.set('resetScroll', true);\n        Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n      },\n\n      onColumnResize(column, pixels) {\n        const scrollLeft = this.$('.column-widget-body').scrollLeft();\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          width: fromPixels(pixels)\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n        Ember.run.next(() => {\n          Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n        });\n      },\n\n      onSearchButtonClick() {\n        this.send('onSearchTextChange', '');\n        this.toggleProperty('isSearchEnabled');\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isSearchEnabled')) {\n            this.$('.column-widget-search-box').focus();\n          }\n        });\n      },\n\n      onRemoveSearchClick() {\n        this.set('searchText', '');\n        Ember.run.debounce(this, 'refreshData', 250);\n        this.toggleProperty('isSearchEnabled');\n        this.$('.column-widget-search-button').focus();\n      },\n\n      onHeaderDoubleClick() {\n        const maximizer = this.get('maximizer'); // when widget is maximized, minimize  the widget\n        // if (maximizer.get('isWidgetMinified')) {\n\n        if (maximizer.get('maximizedWidget') !== this.get('widget')) {\n          const localQuickFilter = this.get('localQuickFilters').find(filter => filter.active);\n          const activeQuickFilter = Ember.isPresent(localQuickFilter) ? {\n            id: localQuickFilter.id\n          } : null;\n          maximizer.maximize(this.get('widget'), activeQuickFilter);\n        } else {\n          this.send('onExitMaximizedClick', '');\n        }\n      },\n\n      onExitMaximizedClick() {\n        const maximizer = this.get('maximizer');\n        const localQuickFilter = this.get('localQuickFilters').find(filter => filter.active);\n        const activeQuickFilter = Ember.isPresent(localQuickFilter) ? {\n          id: localQuickFilter.id\n        } : null;\n        maximizer.minimize(activeQuickFilter);\n      },\n\n      onFilterButtonClick() {\n        const columns = [];\n        const workspace = this.get('workspace');\n        const widget = this.get('widget');\n        const config = this.get('config');\n        const tableColumns = this.get('table.columns') || [];\n        const displayName = `${config.title} Filters`;\n        this.set('widget.state.modelName', this.get('config.modelName')); // close sidebar if _this_ widget's filter is currently open\n        // @TODO: define and use unique keys rather than `displayName` for this\n\n        if (displayName === workspace.get('topStateDisplayName')) {\n          workspace.popState();\n          return;\n        }\n\n        let topState = workspace.get('topState');\n\n        while (topState === 'filterColumnWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        tableColumns.forEach(column => {\n          const columnConfig = column.config;\n\n          if (columnConfig) {\n            if (!columnConfig.unAvailable) {\n              columns.push(column);\n            }\n          } else {\n            columns.push(column);\n          }\n        });\n        workspace.pushState('filterColumnWidget', {\n          columns,\n          widget,\n          displayName\n        });\n      },\n\n      setInlineRowMenu(dropdown) {\n        this.set('inlineRowMenu', dropdown);\n      },\n\n      setPlusIconMenu(dropdown) {\n        this.set('plusIconMenu', dropdown);\n      },\n\n      onRowRightClick(row, event) {\n        let rowSingleActions = this.get('singleActions') || [];\n        const disableRightClick = this.get('disableRightClick');\n        if (disableRightClick) return; // disable right row click for iq-widgets when a user runs schedule generation or release routes.\n\n        this.set('inlineRowMenuPosition', () => {\n          return {\n            style: {\n              top: event.clientY,\n              left: event.clientX\n            }\n          };\n        });\n        this.set('lastRowClicked', row.get('record'));\n\n        if (Ember.isNone(this.get('dynamicSingleActions'))) {\n          this.set('dynamicSingleActions', rowSingleActions);\n        } else {\n          this.set('singleActions', this.get('dynamicSingleActions'));\n          rowSingleActions = this.get('dynamicSingleActions');\n        }\n\n        if (row.get('isLockedByOtherUser')) {\n          const singleActions = [];\n          rowSingleActions.forEach(action => {\n            if (!action.disableOnLockedRoute) {\n              singleActions.push(action);\n            }\n          });\n          this.set('singleActions', singleActions);\n        } // remove right click action if schedule record is locked\n\n\n        if (row.get('record.scheduleLocked')) {\n          const singleActions = [];\n          rowSingleActions.forEach(action => {\n            if (!action.disableOnLocked) {\n              singleActions.push(action);\n            }\n          });\n          this.set('singleActions', singleActions);\n        }\n\n        if (!Ember.isNone(rowSingleActions)) {\n          this.reConfigureSingleActions();\n        }\n\n        this.reConfigureBulkActions();\n        this._lastRowClickEvent = event; // storing for Edit Field action\n\n        this.inlineRowMenu.actions.open();\n      },\n\n      onScroll() {\n        // pause background processing while scrolling\n        this.get('interaction').didScrollWidget(); // close any open dropdown\n\n        const dropdown = this.get('inlineRowMenu');\n\n        if (dropdown) {\n          dropdown.actions.close(); //this.set('inlineRowMenu', null);\n        } // figure out if we need to increase pagination\n\n\n        const body = this.$('.column-widget-body')[0];\n        const scrollPosition = body.scrollTop + body.offsetHeight;\n        const triggerPosition = body.scrollHeight - PAGINATION_TRIGGER_OFFSET; // scroll height takes a while to update, so we don't reset pagination\n        // flag until we observe it change in a subsequent `onScroll()` action\n\n        if (body.scrollHeight !== this._scrollHeight) {\n          this._scrollHeight = body.scrollHeight;\n          this.set('isPaginating', false);\n        }\n\n        if (scrollPosition >= triggerPosition && !this._isPaginating) {\n          const visibleCount = this.get('visibleRecords.length');\n          const offset = this.get('offset');\n          const limit = this.get('limit');\n\n          if (offset < visibleCount) {\n            this.set('offset', offset + limit);\n            this.set('isPaginating', true);\n            this.set('refreshSync', true);\n          }\n        }\n      },\n\n      onTableActionClick(action, dropdown) {\n        dropdown.actions.close();\n\n        if (action.action) {\n          action.action();\n        }\n      },\n\n      onSingleRowAction(action) {\n        const model = this.get('lastRowClicked');\n        this.inlineRowMenu.actions.close();\n\n        if (action.action) {\n          action.action(model);\n        }\n      },\n\n      onBulkRowAction(action) {\n        const checkedRows = this.get('table.rows').filterBy('isChecked') || [];\n        const models = [];\n        checkedRows.forEach(row => {\n          models.push(row.get('record'));\n        });\n        this.inlineRowMenu.actions.close();\n\n        if (action.action) {\n          action.action(models);\n        }\n      },\n\n      onCheckAll() {\n        const records = this.get('records');\n        this.get('activeContext.topActiveContext').setRecordsChecked(records, true);\n      },\n\n      onUncheckAll() {\n        const records = this.get('records');\n        this.get('activeContext.topActiveContext').setRecordsChecked(records, false);\n      },\n\n      onPlusIconClick() {\n        // disable plus icon click for iq-widgets when a user runs schedule generation or release routes.\n        // allow the user though to click after reoptimize / release is finished\n        const disableRightClick = this.get('workspace.reoptimizeInProgress');\n        return !disableRightClick;\n      },\n\n      onRefresh() {\n        this.refreshData();\n      },\n\n      onLeftButtonClick() {\n        Ember.$(`.${this.get('scrollClassName')}`).animate({\n          scrollLeft: '-=100px'\n        }, 'fast');\n      },\n\n      onRightButtonClick() {\n        Ember.$(`.${this.get('scrollClassName')}`).animate({\n          scrollLeft: '+=100px'\n        }, 'fast');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/column-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"zbEKj0mb\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"event\\\",\\\"index\\\",\\\"t\\\",\\\"body\\\",\\\"dropdown\\\",\\\"event\\\",\\\"filter\\\",\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"column-widget-search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"column-widget-title data-test-column-title\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"config\\\"]],[27,\\\"and\\\",[[23,[\\\"config\\\",\\\"titleOptions\\\"]],[27,\\\"gt\\\",[[23,[\\\"config\\\",\\\"titleOptions\\\",\\\"length\\\"]],0],null]],null]],null]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"tagName\\\",\\\"options\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[\\\"title-option-selector\\\",\\\"div\\\",[23,[\\\"config\\\",\\\"titleOptions\\\"]],[23,[\\\"config\\\",\\\"titleSelected\\\"]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onTitleOptionChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,10,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[10]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[23,[\\\"config\\\",\\\"isFormControls\\\"]]],null,{\\\"statements\\\":[[0,\\\"          (\\\"],[1,[21,\\\"checkedRowsCount\\\"],false],[0,\\\"/\\\"],[1,[23,[\\\"records\\\",\\\"length\\\"]],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          (\\\"],[1,[21,\\\"checkedItemsCount\\\"],false],[0,\\\"/\\\"],[1,[23,[\\\"records\\\",\\\"length\\\"]],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"quickFiltersExist\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-left-scroll-button\\\"],[12,\\\"onClick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLeftButtonClick\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-left active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"column-widget-filters-scroll \\\",[21,\\\"scrollClassName\\\"]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"quickFilters\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/quick-filters\\\",null,[[\\\"tableColumns\\\",\\\"quickFilters\\\",\\\"filter\\\",\\\"widget\\\",\\\"onRefresh\\\"],[[23,[\\\"table\\\",\\\"columns\\\"]],[23,[\\\"quickFilters\\\"]],[22,9,[]],[23,[\\\"widget\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefresh\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[9]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-right-scroll-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRightButtonClick\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-right active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"config\\\",\\\"hideWidgetControls\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button column-widget-search-button data-test-search-button initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-search \\\",[27,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onInit\\\",\\\"onOpen\\\",\\\"disabled\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setPlusIconMenu\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPlusIconClick\\\"],null],[23,[\\\"reoptimizeInProgress\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"allowedTableActions\\\",\\\"length\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,7,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L82:C13) \\\"],null]],[[\\\"class\\\"],[\\\"column-widget-button data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,7,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L87:C13) \\\"],null]],[[\\\"class\\\"],[\\\"widget-dropdown-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"disableRightClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTableActionClick\\\",[23,[\\\"downloadAction\\\"]],[22,7,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"downloadAction\\\",\\\"name\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"allowedTableActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTableActionClick\\\",[22,8,[]],[22,7,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[1,[22,8,[\\\"name\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[7]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button data-test-filter-button\\\"],[12,\\\"data-filter-class\\\",[28,[[23,[\\\"config\\\",\\\"modelName\\\"]]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"maximizer\\\",\\\"maximizedWidget\\\"]],[23,[\\\"widget\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitMaximizedClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"maximizer\\\",\\\"maximizedWidget\\\"]],[23,[\\\"widget\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitMaximizedClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onHeaderDoubleClick\\\"],[[\\\"on\\\"],[\\\"doubleClick\\\"]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[21,\\\"widgetClassName\\\"]],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L144:C6) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L155:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"onRowClick\\\",\\\"onRowDoubleClick\\\",\\\"rowComponent\\\",\\\"extra\\\"],[false,false,[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowDoubleClick\\\"],null],[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"hash\\\",null,[[\\\"onRightClick\\\",\\\"onUpdateIQUXRow\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowRightClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdateIQUXRow\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L168:C11) \\\"],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L175:C13) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[6]},null]],\\\"parameters\\\":[5]},null],[10],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"inlineRowMenuPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setInlineRowMenu\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L194:C5) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/generic-widgets/column-widget/template.hbs' @ L196:C5) \\\"],null]],[[\\\"isTouchDevice\\\",\\\"class\\\"],[false,\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showSingleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"singleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,3,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,4,[]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSingleRowAction\\\",[22,3,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showBulkActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"bulkActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[23,[\\\"index\\\"]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onBulkRowAction\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/column-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/dummy-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['dummy-widget'],\n    classNameBindings: ['color'],\n    color: Ember.computed.readOnly('widget.state.color')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/dummy-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"66saKHJQ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[23,[\\\"widget\\\",\\\"state\\\",\\\"text\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/dummy-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/availability-cell\", [\"exports\", \"react\", \"moment\", \"lodash\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/portal\", \"adept-iq/utils/format-text-extension\"], function (_exports, _react, _moment, _lodash, _cellItem, _portal, _formatTextExtension) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AVAILABILITY_PROPERTY_NAME = 'availability';\n  const VEHICLE_AVAILABILITY_PROPERTY_NAME = 'availabilities';\n\n  class AvailabilityCell extends _cellItem.default {\n    constructor(props) {\n      super(props);\n      this.state = {\n        isHovering: false,\n        positionX: 0,\n        positionY: 0\n      };\n      this.handleMouseHover = this.handleMouseHover.bind(this);\n    }\n\n    handleMouseHover() {\n      this.setState({\n        positionX: window.pageXOffset + event.clientX,\n        positionY: window.pageYOffset + event.clientY\n      });\n      this.setState(this.toggleHoverState);\n    }\n\n    toggleHoverState(state) {\n      const clonedState = { ...state\n      };\n      clonedState.isHovering = !state.isHovering;\n      return clonedState;\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        columnInfo,\n        selectedRowIndex,\n        selectedColumnIndex\n      } = this.props;\n      const {\n        isHovering,\n        positionX,\n        positionY\n      } = this.state;\n      const toolTipStyles = {\n        width: '200px',\n        backgroundColor: '#fff',\n        color: 'black',\n        textAlign: 'center',\n        borderRadius: '6px',\n        padding: '5px 0',\n        position: 'absolute',\n        left: `${positionX}px`,\n        top: `${positionY}px`,\n        zIndex: 1000\n      };\n      const currentRowData = data[rowIndex - 1];\n      const columnValue = currentRowData[VEHICLE_AVAILABILITY_PROPERTY_NAME] || '';\n      const classNames = this.getStylesClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue);\n      const vehicleAvailabilities = this.getVehicleAvailabilities(currentRowData.data || currentRowData);\n      const length = vehicleAvailabilities.filter(val => val.className === 'valueItem').length;\n      let columnVal = '';\n\n      if (length > 1) {\n        columnVal = `${length} ${this.props.columnInfo.cellDesc}`;\n      } else if (length === 1) {\n        columnVal = vehicleAvailabilities.firstObject.value;\n      }\n\n      return _react.default.createElement(\"span\", {\n        role: \"none\",\n        className: classNames,\n        style: style,\n        onMouseEnter: this.handleMouseHover,\n        onMouseLeave: this.handleMouseHover\n      }, columnVal, isHovering && _react.default.createElement(_portal.default, null, _react.default.createElement(\"div\", {\n        style: toolTipStyles\n      }, this.renderToolTipContent(vehicleAvailabilities))));\n    }\n\n    renderToolTipContent(vehicleAvailabilities) {\n      const mainItemStyle = {\n        'font-weight': '600',\n        'margin-top': '1px',\n        'margin-bottom': '3px',\n        'font-size': '13px'\n      };\n      const valueItemStyle = {\n        'margin-bottom': '3px',\n        'font-size': '13px'\n      };\n      if (!vehicleAvailabilities || vehicleAvailabilities.length === 0) return null;\n      return _react.default.createElement(\"div\", {\n        \"class\": \"cell-text-content-extension\"\n      }, vehicleAvailabilities.map(item => {\n        const style = item.className === 'mainItem' ? mainItemStyle : valueItemStyle;\n        return _react.default.createElement(\"label\", {\n          style: style\n        }, item.value);\n      }));\n    }\n\n    getVehicleAvailabilities(currentRowData) {\n      const active = currentRowData.active;\n      const availabilities = [];\n      let vehicleAvailabilities = currentRowData[AVAILABILITY_PROPERTY_NAME];\n\n      if (this.props.config.widgetName === 'vehicleWidget') {\n        vehicleAvailabilities = currentRowData[VEHICLE_AVAILABILITY_PROPERTY_NAME];\n      }\n\n      if (!_lodash.default.isEmpty(vehicleAvailabilities)) {\n        if (!_lodash.default.isArray(vehicleAvailabilities)) {\n          // Only one item\n          vehicleAvailabilities = [vehicleAvailabilities];\n        }\n\n        vehicleAvailabilities.forEach(function (item) {\n          const startTime = (0, _moment.default)(item.startTime);\n          const endTime = (0, _moment.default)(item.endTime);\n          const now = (0, _moment.default)();\n\n          if (active && now.isBetween(startTime, endTime)) {\n            const formattedShiftStart = item.shiftStart ? (0, _moment.default)(item.shiftStart).format('HH:mm') : '';\n            const formattedShiftEnd = item.shiftEnd ? (0, _moment.default)(item.shiftEnd).format('HH:mm') : '';\n            availabilities.push((0, _formatTextExtension.formatTextExtension)('mainItem', `${startTime.format('MM-DD-YYYY')} - ${endTime.format('MM-DD-YYYY')}`));\n\n            if (item.monday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Monday ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n\n            if (item.tuesday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Tuesday  ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n\n            if (item.wednesday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Wednesday ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n\n            if (item.thursday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Thursday ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n\n            if (item.friday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Friday ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n\n            if (item.saturday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Saturday ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n\n            if (item.sunday) {\n              availabilities.push((0, _formatTextExtension.formatTextExtension)('valueItem', `Sunday ${formattedShiftStart} - ${formattedShiftEnd}`));\n            }\n          }\n        });\n      }\n\n      return availabilities;\n    }\n\n  }\n\n  _exports.default = AvailabilityCell;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/base-cell-item\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class BaseCellItem extends _react.default.PureComponent {\n    constructor(props) {\n      super(props);\n    }\n\n    getColumnValue(data, columnInfo, rowIndex, columnIndex) {\n      const {\n        showGearIcon\n      } = this.props;\n      const actionableColumnIndex = showGearIcon ? 1 : 0; // for checkbox and gear\n\n      if (columnIndex <= actionableColumnIndex) return '';\n      const {\n        valuePath: propertyName\n      } = columnInfo;\n      const currRowData = this.getRowData(data, rowIndex);\n\n      try {\n        const columnValue = propertyName.split('.').reduce((a, b) => a[b], currRowData); // Dont display null or undefined values\n\n        if (typeof columnValue === 'undefined') {\n          return '';\n        }\n\n        if (typeof columnValue === 'boolean') {\n          return columnValue ? 'true' : 'false';\n        }\n\n        return columnValue;\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log(e);\n      }\n\n      return '';\n    }\n\n    getRowData(data, rowIndex) {\n      const currRowData = data[rowIndex - 1];\n      return currRowData;\n    }\n\n    getStylesClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue) {\n      // Each cell should have either one of the following classes - even-cell, odd-cell, selected-row\n      let cellColorCSSClass = (rowIndex - 1) % 2 ? 'even-cell' : 'odd-cell';\n      cellColorCSSClass = this.isRowSelected(rowIndex, selectedRowIndex) ? 'selected-row' : cellColorCSSClass;\n      cellColorCSSClass = this.isColumnSelected(rowIndex, columnIndex, selectedRowIndex, selectedColumnIndex) ? 'selected-column' : cellColorCSSClass;\n      const firstColumnCSS = columnIndex === 0 ? 'first-column' : '';\n      const extraCellClasses = this.getCellClasses(data, columnInfo, rowIndex, columnIndex, columnValue);\n      const classNames = `Cell ${cellColorCSSClass}  ${extraCellClasses}  ${firstColumnCSS}`;\n      return classNames;\n    }\n\n    getCellClasses() {\n      return '';\n    }\n\n    isRowSelected(rowIndex, selectedRowIndex) {\n      return rowIndex === selectedRowIndex;\n    }\n\n    isColumnSelected(rowIndex, columnIndex, selectedRowIndex, selectedColumnIndex) {\n      return rowIndex === selectedRowIndex && columnIndex === selectedColumnIndex;\n    }\n\n  }\n\n  _exports.default = BaseCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-check-box\", [\"exports\", \"react\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/base-cell-item\"], function (_exports, _react, _baseCellItem) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class CellCheckBox extends _baseCellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    render() {\n      const {\n        rowIndex,\n        isChecked,\n        isDisabled,\n        checkBtnClickHandler\n      } = this.props;\n      return _react.default.createElement(\"input\", {\n        type: \"checkbox\",\n        checked: isChecked,\n        disabled: isDisabled,\n        onChange: event => {\n          checkBtnClickHandler(rowIndex, event.target.checked);\n        }\n      });\n    }\n\n  }\n\n  _exports.default = CellCheckBox;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", [\"exports\", \"@babel/runtime/helpers/esm/extends\", \"react\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/base-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-check-box\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/portal\"], function (_exports, _extends2, _react, _baseCellItem, _cellCheckBox, _portal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.OTP_LABEL_PROPERTY_NAME = void 0;\n  const OTP_LABEL_PROPERTY_NAME = 'otpStatus';\n  _exports.OTP_LABEL_PROPERTY_NAME = OTP_LABEL_PROPERTY_NAME;\n\n  class CellItem extends _baseCellItem.default {\n    constructor(props) {\n      super(props);\n      this.state = {\n        isHovering: false,\n        positionX: 0,\n        positionY: 0\n      };\n      this.handleMouseHover = this.handleMouseHover.bind(this);\n      this.handleMouseOut = this.handleMouseOut.bind(this);\n    }\n\n    handleMouseHover(event) {\n      this.setState({\n        positionX: window.pageXOffset + event.clientX,\n        positionY: window.pageYOffset + event.clientY,\n        isHovering: true\n      });\n    }\n\n    handleMouseOut() {\n      this.setState({\n        positionX: 0,\n        positionY: 0,\n        isHovering: false\n      });\n    }\n\n    toggleHoverState(state) {\n      const clonedState = { ...state\n      };\n      clonedState.isHovering = !state.isHovering;\n      return clonedState;\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        onContextMenuClick,\n        onTableCellClick,\n        columnInfo,\n        showGearIcon,\n        scrollToColumn,\n        scrollToRow\n      } = this.props;\n      const {\n        isHovering\n      } = this.state;\n      const {\n        reordering\n      } = this.props;\n      const columnValue = this.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n      let classNames = this.getStylesClasses(data, rowIndex, columnInfo, columnIndex, scrollToRow, scrollToColumn, columnValue);\n      const rowSelClasses = this.getRowStyleClasses(data, rowIndex, columnInfo, columnIndex, scrollToRow, scrollToColumn, columnValue);\n      classNames = rowSelClasses + '  ' + classNames;\n      return _react.default.createElement(\"span\", {\n        role: \"none\",\n        className: classNames,\n        style: style,\n        onContextMenu: e => {\n          e.preventDefault();\n          onContextMenuClick(e, rowIndex, columnIndex);\n        },\n        onMouseEnter: this.handleMouseHover,\n        onMouseLeave: this.handleMouseOut,\n        onClick: () => onTableCellClick(rowIndex, columnIndex)\n      }, this.renderCellCheckBox(), showGearIcon && this.renderCellCogButton(), this.renderCellValueItem(columnValue), isHovering && !reordering && _react.default.createElement(_portal.default, {\n        className: 'tooltip'\n      }, this.renderToolTipContent(this.props)));\n    }\n\n    renderToolTipContent(props) {\n      const {\n        positionX,\n        positionY\n      } = this.state;\n      const toolTipStyles = {\n        width: '150px',\n        backgroundColor: '#000',\n        color: '#fff',\n        textAlign: 'center',\n        borderRadius: '6px',\n        fontSize: '14px',\n        padding: '2px 0',\n        position: 'absolute',\n        left: `${positionX}px`,\n        top: `${positionY}px`,\n        zIndex: 1000\n      };\n      const {\n        data,\n        rowIndex\n      } = props;\n      const rowData = data[rowIndex - 1];\n\n      if (rowData.isLocked) {\n        return _react.default.createElement(\"div\", {\n          style: toolTipStyles\n        }, \" Locked by \", rowData.lock.fullName);\n      }\n    }\n\n    renderCellCheckBox() {\n      const {\n        data,\n        columnIndex,\n        rowIndex,\n        checkedRowIds,\n        disabledRowIds\n      } = this.props;\n      const selectedRowData = this.getRowData(data, rowIndex);\n      const isDisabled = disabledRowIds.includes(selectedRowData.id);\n      const isChecked = checkedRowIds.findIndex(obj => {\n        if (selectedRowData.coreModel) {\n          return obj.model === selectedRowData.coreModel && obj.id === selectedRowData.id;\n        }\n\n        return obj.id === selectedRowData.id;\n      }) > -1;\n\n      if (columnIndex === 0) {\n        return _react.default.createElement(_cellCheckBox.default, (0, _extends2.default)({}, this.props, {\n          isChecked: isChecked,\n          isDisabled: isDisabled\n        }));\n      }\n    }\n\n    renderCellCogButton() {\n      const {\n        columnIndex,\n        rowIndex,\n        cellRightClickForTablet\n      } = this.props;\n\n      if (columnIndex === 1) {\n        return _react.default.createElement(\"button\", {\n          className: 'btn-cog',\n          onClick: e => {\n            e.preventDefault();\n            cellRightClickForTablet(e, rowIndex, columnIndex);\n          }\n        }, _react.default.createElement(\"i\", {\n          className: 'fa fa-cog ml-1'\n        }));\n      }\n    }\n\n    renderCellValueItem(columnValue) {\n      const {\n        columnIndex,\n        showGearIcon\n      } = this.props;\n      const actionableColumnIndex = showGearIcon ? 1 : 0; // for checkbox and gear\n\n      if (columnIndex > actionableColumnIndex) {\n        return _react.default.createElement(\"span\", {\n          className: 'column-label'\n        }, \" \", columnValue, \" \");\n      }\n    }\n\n    getRowStyleClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue) {\n      const {\n        rowStyleHandler\n      } = this.props;\n\n      if (rowStyleHandler) {\n        const currRowData = this.getRowData(data, rowIndex) || {};\n        return rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currRowData) || '';\n      }\n\n      return '';\n    }\n\n  }\n\n  _exports.default = CellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cellrenderer\", [\"exports\", \"@babel/runtime/helpers/esm/extends\", \"react\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/header-cell\", \"adept-iq/config/cell-item-types\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/extra-spacer-cell-item\"], function (_exports, _extends2, _react, _headerCell, _cellItemTypes, _extraSpacerCellItem) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const getCellItem = columnInfo => {\n    let CellItem = _cellItemTypes.default.CellItem; // default React class\n\n    if (columnInfo.cellItem) {\n      CellItem = _cellItemTypes.default[columnInfo.cellItem];\n    }\n\n    return CellItem;\n  };\n\n  const CellRenderer = props => {\n    const {\n      columnIndex,\n      rowIndex,\n      columns,\n      showGearIcon\n    } = props;\n    const actionableColumnIndex = showGearIcon ? 1 : 0; // for checkbox and gear\n\n    const columnIncrementerValue = showGearIcon ? 2 : 1; // for checkbox and gear\n\n    const isHeaderRow = rowIndex === 0;\n    const actionableColumnCells = columnIndex <= actionableColumnIndex;\n    const isLastCell = columns.length === columnIndex;\n    const columnInfo = actionableColumnCells ? {} : columns[columnIndex - columnIncrementerValue];\n    const CellItem = getCellItem(columnInfo);\n    return _react.default.createElement(\"span\", null, isHeaderRow && _react.default.createElement(_headerCell.default, (0, _extends2.default)({}, props, {\n      columnInfo: columnInfo\n    })), !isHeaderRow && _react.default.createElement(CellItem, (0, _extends2.default)({}, props, {\n      columnInfo: columnInfo\n    })), isLastCell && _react.default.createElement(_extraSpacerCellItem.default, (0, _extends2.default)({}, props, {\n      columnInfo: columnInfo\n    })));\n  };\n\n  var _default = CellRenderer;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/date-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"moment\"], function (_exports, _cellItem, _moment) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class DateCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getColumnValue(data, columnInfo, rowIndex, columnIndex) {\n      let columnValue = super.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n      const {\n        format\n      } = columnInfo;\n      columnValue = columnValue && _moment.default.utc(columnValue).format(format);\n      return columnValue;\n    }\n\n  }\n\n  _exports.default = DateCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/date-local-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"moment\"], function (_exports, _cellItem, _moment) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class DateCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getColumnValue(data, columnInfo, rowIndex, columnIndex) {\n      let columnValue = super.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n      const {\n        format\n      } = columnInfo;\n      columnValue = columnValue && _moment.default.utc(columnValue).local().format(format);\n      return columnValue;\n    }\n\n  }\n\n  _exports.default = DateCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/extra-spacer-cell-item\", [\"exports\", \"lodash\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\"], function (_exports, _lodash, _cellItem) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class ExtraSpacerCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        columnInfo,\n        selectedRowIndex,\n        selectedColumnIndex\n      } = this.props;\n      let classNames = this.getStylesClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex);\n      const rowSelClasses = this.getRowStyleClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, '');\n      classNames = rowSelClasses + '  ' + classNames;\n\n      const cellStyle = _lodash.default.merge({}, style);\n\n      cellStyle.left = cellStyle.left + cellStyle.width;\n      cellStyle.width = '100%';\n      return React.createElement(\"span\", {\n        role: \"none\",\n        className: classNames,\n        style: cellStyle\n      });\n    }\n\n    getStylesClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex) {\n      let cellColorCSSClass = (rowIndex - 1) % 2 ? 'even-cell' : 'odd-cell';\n      cellColorCSSClass = this.isRowSelected(rowIndex, selectedRowIndex) ? 'selected-row' : cellColorCSSClass;\n      cellColorCSSClass = this.isColumnSelected(rowIndex, columnIndex, selectedRowIndex, selectedColumnIndex) ? 'selected-column' : cellColorCSSClass;\n      const classNames = `Cell ${cellColorCSSClass}`;\n      return classNames;\n    }\n\n  }\n\n  _exports.default = ExtraSpacerCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/fetch-util\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.fetchWidgetData = _exports.fetchDataPart = void 0;\n\n  const fetchDataPart = url => {\n    return fetch(url).then(response => response.json()).then(response => {\n      return response.data;\n    }).then(data => {\n      const result = data.map(value => {\n        return value.attributes;\n      });\n      return result;\n    });\n  };\n\n  _exports.fetchDataPart = fetchDataPart;\n\n  const spinMultipleRequests = (url, pageLimit, totalPages) => {\n    const listOfRequests = [];\n\n    for (let offset = 0; offset < totalPages; offset++) {\n      const paginatedUrl = `${url}?page[limit]=${pageLimit}&page[offset]=${offset}&sort=id`;\n      const request = fetchDataPart(paginatedUrl);\n      listOfRequests.push(request);\n    }\n\n    return Promise.all(listOfRequests);\n  };\n\n  const mergeAllData = dataList => {\n    let alldata = [];\n    dataList.forEach(data => {\n      alldata = alldata.concat(data);\n    });\n    return alldata;\n  };\n\n  const fetchWidgetData = (url, pageLimit, totalPages) => {\n    return spinMultipleRequests(url, pageLimit, totalPages).then(mergeAllData).catch(error => {\n      // eslint-disable-next-line no-console\n      console.error('Error:', error);\n      return [];\n    });\n  };\n\n  _exports.fetchWidgetData = fetchWidgetData;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/grid-context-menu\", [\"exports\", \"react\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/portal\"], function (_exports, _react, _portal) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class GridContextMenu extends _react.default.Component {\n    constructor(props) {\n      super(props);\n      this.contextRef = _react.default.createRef();\n    }\n\n    onContextMenuClick(event) {\n      const index = event.target.getAttribute('index');\n      const menuItem = this.props.menusItems[index];\n      event.preventDefault();\n\n      if (menuItem) {\n        const {\n          onMenuItemClick\n        } = this.props;\n        return onMenuItemClick && onMenuItemClick(menuItem);\n      }\n    }\n\n    renderMenu() {\n      const {\n        menusItems,\n        positionX,\n        positionY\n      } = this.props;\n      var positionStyle = {\n        'position': 'absolute',\n        'left': `${positionX}px`,\n        'top': `${positionY}px`\n      };\n      return _react.default.createElement(\"div\", {\n        className: \"global-dropdown-context\",\n        onClick: this.onContextMenuClick.bind(this),\n        style: positionStyle\n      }, menusItems.map((item, index\n      /*, arr*/\n      ) => {\n        return _react.default.createElement(\"div\", {\n          key: index,\n          className: \"menu-option\",\n          index: index\n        }, item.name);\n      }));\n    }\n\n    render() {\n      return _react.default.createElement(_portal.default, {\n        className: 'menu'\n      }, _react.default.createElement(\"div\", {\n        id: \"global-dropdown\"\n      }, this.props.visible ? this.renderMenu() : null));\n    }\n\n  }\n\n  var _default = GridContextMenu;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/gridwidget\", [\"exports\", \"@babel/runtime/helpers/esm/extends\", \"react\", \"react-dom\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cellrenderer\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/grid-context-menu\", \"react-virtualized\", \"react-sortable-hoc\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/row-range-renderer\"], function (_exports, _extends2, _react, _reactDom, _cellrenderer, _gridContextMenu, _reactVirtualized, _reactSortableHoc, _rowRangeRenderer) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable prefer-const */\n\n  /* eslint-disable no-unused-vars */\n\n  /* eslint-disable no-unused-expressions */\n  const createRef = _react.default.createRef;\n  const AutoSizer = _reactVirtualized.default.AutoSizer;\n  const MultiGrid = _reactVirtualized.default.MultiGrid;\n  const Grid = _reactVirtualized.default.Grid;\n  const InfiniteLoader = _reactVirtualized.default.InfiniteLoader;\n  const ArrowKeyStepper = _reactVirtualized.default.ArrowKeyStepper;\n\n  const SortableMultiGrid = _reactSortableHoc.default.sortableContainer(MultiGrid, {\n    withRef: true\n  });\n\n  const Row = _ref => {\n    let {\n      children,\n      style\n    } = _ref;\n    return _react.default.createElement(\"div\", {\n      className: \"SortableMultiGrid__Row\",\n      style: style\n    }, children);\n  };\n\n  const SortableRow = _reactSortableHoc.default.sortableElement(Row);\n\n  const arrayMove = _reactSortableHoc.default.arrayMove;\n  const sortableRowRenderer = (0, _rowRangeRenderer.rowRangeRenderer)(props => _react.default.createElement(SortableRow, (0, _extends2.default)({\n    key: props.rowIndex\n  }, props, {\n    index: props.rowIndex\n  })));\n  const fixedRowRenderer = (0, _rowRangeRenderer.rowRangeRenderer)(props => _react.default.createElement(Row, (0, _extends2.default)({\n    key: props.rowIndex\n  }, props, {\n    index: props.rowIndex\n  })));\n  const DEFAULT_COLUMN_WIDTH = 100; // ToDO\n\n  const CHECKBOX_COLUMN_WIDTH = 25; // ToDO\n\n  const GEARCOG_COLUMN_WIDTH = 35; // ToDO\n\n  const MIN_COLUMN_WIDTH = 50;\n  const BATCH_SIZE = 20;\n  const LOADER_THRESHOLD = 20;\n  const initialContextMenuState = {\n    rowIndex: -1,\n    //\n    columnIndex: -1,\n    positionX: 0,\n    positionY: 0,\n    visible: false\n  };\n\n  class GridWidget extends _react.default.Component {\n    constructor(props) {\n      super(props);\n      const {\n        config,\n        visibleColumns,\n        widgetState,\n        modelName,\n        isMaximized,\n        isTraversalEnabled,\n        selectAllChecked\n      } = props;\n      const widgetStateSortedColumn = config.columns.filter(cfg => cfg.id === widgetState.sortId);\n      let sortId = config.defaultSortId || 'id';\n\n      if (!Ember.isEmpty(widgetStateSortedColumn)) {\n        sortId = widgetStateSortedColumn[0].id;\n      }\n\n      this.state = {\n        data: [],\n        loading: false,\n        columns: visibleColumns,\n        columnwidths: {},\n        resizing: false,\n        selectedRowLimit: config.selectedRowLimit,\n        sortId: sortId,\n        sortAsc: widgetState.sortAsc || config.defaultSortAsc || true,\n        reordering: false,\n        contextMenuState: initialContextMenuState,\n        checkedRowIds: props.checkedRowIds,\n        disabledRowIds: props.disabledRowIds,\n        hiddenRowIds: props.hiddenRowIds,\n        isFurtherSelectionAllowed: props.isFurtherSelectionAllowed,\n        selectedRowIndex: -1,\n        selectedColumnIndex: -1,\n        width: props.width,\n        height: props.height,\n        widgetInstanceId: props.widgetInstanceId,\n        showGearIcon: props.showGearIcon,\n        useTabletWidth: props.useTabletWidth,\n        isMaximized,\n        isTraversalEnabled,\n        selectAllChecked\n      };\n      this.config = config;\n      this.isArrowKeyPressing = false;\n      this.preScrollToRow = -1;\n      this.preScrollToColumn = -1;\n      this.arrowKeyPressingTimeoutId = null;\n      this.arrowKeyCellCache = {};\n      this.domNode = null;\n      this.multiGridRef = null;\n      this.infiniteLoaderRef = null;\n      this.headerCellClickHandler = this.headerCellClickHandler.bind(this);\n      this.resizeRow = this.resizeRow.bind(this);\n      this.getColumnWidth = this.getColumnWidth.bind(this);\n      this._cellRenderer = this._cellRenderer.bind(this);\n      this._rowRenderer = this._rowRenderer.bind(this);\n      this._getSortableContainer = this._getSortableContainer.bind(this);\n      this.resizeStop = this.resizeStop.bind(this);\n      this.reorderRows = this.reorderRows.bind(this);\n      this.onContextMenuClick = this.onContextMenuClick.bind(this);\n      this.onTableCellClick = this.onTableCellClick.bind(this);\n      this.menuItemCallback = this.menuItemCallback.bind(this);\n      this._infiniteLoaderChildFunction = this._infiniteLoaderChildFunction.bind(this);\n      this.isRowLoaded = this.isRowLoaded.bind(this);\n      this.checkBtnClickHandler = this.checkBtnClickHandler.bind(this);\n      this.checkBtnAllClickHandler = this.checkBtnAllClickHandler.bind(this);\n      this._selectCell = this._selectCell.bind(this);\n      this.onKeyPressHandler = this.onKeyPressHandler.bind(this);\n      this.documentClickHandler = this.documentClickHandler.bind(this);\n      this.loadMoreRowsHandler = this.loadMoreRowsHandler.bind(this);\n      this.cellRightClickForTablet = this.cellRightClickForTablet.bind(this);\n      this.documentRightClickHandler = this.documentRightClickHandler.bind(this);\n      this.init();\n    }\n\n    init() {\n      let columnIncrementerValue = 1;\n      const {\n        widgetState\n      } = this.props;\n      const {\n        columnwidths,\n        columns,\n        showGearIcon,\n        useTabletWidth\n      } = this.state;\n      columnwidths[0] = CHECKBOX_COLUMN_WIDTH;\n\n      if (showGearIcon) {\n        columnwidths[1] = GEARCOG_COLUMN_WIDTH;\n        columnIncrementerValue = 2;\n      }\n\n      columns.forEach((column, index) => {\n        const savedWidth = widgetState.columns && widgetState.columns[column.id] ? widgetState.columns[column.id].width : null;\n        const configWidth = useTabletWidth && column.defaultTabletWidth ? column.defaultTabletWidth : column.defaultWidth;\n        const defaultWidth = savedWidth || configWidth;\n        columnwidths[index + columnIncrementerValue] = defaultWidth || DEFAULT_COLUMN_WIDTH;\n      });\n    }\n\n    onArrowKeyPress(scrollToRow, scrollToColumn) {\n      if (scrollToRow >= 0 && (this.preScrollToRow !== scrollToRow || this.preScrollToColumn !== scrollToColumn)) {\n        if (this.arrowKeyPressingTimeoutId) {\n          clearTimeout(this.arrowKeyPressingTimeoutId);\n          this.arrowKeyPressingTimeoutId = null;\n        }\n\n        this.preScrollToRow = scrollToRow;\n        this.preScrollToColumn = scrollToColumn;\n        this.isArrowKeyPressing = true;\n        this.arrowKeyPressingTimeoutId = setTimeout(() => {\n          if (this.isArrowKeyPressing) {\n            this.isArrowKeyPressing = false;\n          }\n\n          this.arrowKeyPressingTimeoutId = null;\n        }, 200);\n      }\n    }\n\n    onKeyPressHandler(event) {\n      if (event.keyCode === 32) {\n        // space key\n        this.checkBtnClickHandler(this.state.selectedRowIndex);\n        event.preventDefault();\n      }\n    }\n\n    componentDidMount() {}\n\n    componentWillUnmount() {}\n\n    documentClickHandler(event) {\n      if (this.isClickedOutsideContainer(event)) {\n        this.hideContextMenu();\n      }\n    }\n\n    documentRightClickHandler(event) {\n      this.hideContextMenu();\n    } // check mouse is clicked outside the widget container\n\n\n    isClickedOutsideContainer(event) {\n      const $target = Ember.$(event.target);\n      return !$target.closest('.global-dropdown-context').length;\n    }\n\n    loadMoreRowsHandler(_ref2) {\n      let {\n        startIndex,\n        stopIndex\n      } = _ref2;\n      const {\n        onLazyLoader\n      } = this.props;\n      const {\n        sortId,\n        sortAsc\n      } = this.state;\n      const pageSize = stopIndex - startIndex + 1;\n      const offset = stopIndex;\n\n      if (offset > pageSize) {\n        onLazyLoader(offset, pageSize, sortId, sortAsc);\n      }\n\n      this.setState({\n        arrowKeyRow: null\n      });\n    }\n\n    menuItemCallback(_ref3) {\n      let {\n        name,\n        action\n      } = _ref3;\n      this.hideContextMenu();\n      const {\n        contextMenuState,\n        data,\n        checkedRowIds\n      } = this.state;\n      const {\n        fetchModelbyWidgetRecord,\n        fetchModelsbyCheckedRowIds\n      } = this.props;\n      const {\n        rowIndex\n      } = contextMenuState;\n\n      if (checkedRowIds.length > 1) {\n        const selectedRowData = data.length ? this.getRowData(data, rowIndex) : null;\n        const selectedModel = fetchModelbyWidgetRecord(selectedRowData);\n        const selectedModels = fetchModelsbyCheckedRowIds(checkedRowIds);\n        const selectedInCheckedRowIds = checkedRowIds.find(currentId => {\n          return currentId.id === selectedRowData.id;\n        }); // check if selected row was the one right clicked\n\n        if (Ember.isPresent(selectedInCheckedRowIds)) {\n          action && action(selectedModels);\n        } else {\n          action && Ember.isPresent(selectedModel) && action(selectedModel);\n        }\n      } else {\n        const selectedRowData = data.length ? this.getRowData(data, rowIndex) : null;\n        const selectedModel = fetchModelbyWidgetRecord(selectedRowData);\n        action && Ember.isPresent(selectedModel) && action(selectedModel);\n      }\n    }\n\n    onContextMenuClick(event, rowIndex, columnIndex) {\n      event.stopPropagation();\n      this.setState({\n        selectedRowIndex: rowIndex,\n        selectedColumnIndex: columnIndex\n      }, () => {\n        this.multiGridRef.forceUpdateGrids();\n      });\n      const {\n        onRowRightClick\n      } = this.props;\n      if (!onRowRightClick) return;\n      const parentContainerCssClass = `.${GridWidget.containerCssClass}`;\n      const widgetContainerOffset = Ember.$(event.target).closest(parentContainerCssClass).offset(); // const positionX = window.pageXOffset + event.clientX - widgetContainerOffset.left;\n      // const positionY = window.pageYOffset + event.clientY - widgetContainerOffset.top + 50;\n\n      const positionX = window.pageXOffset + event.clientX;\n      const positionY = window.pageYOffset + event.clientY;\n      const {\n        data\n      } = this.state;\n      const selectedRowData = data.length ? this.getRowData(data, rowIndex) : null;\n      onRowRightClick(selectedRowData).then(menusItems => {\n        this.updateContextMenuState({\n          rowIndex,\n          columnIndex,\n          positionX,\n          positionY,\n          menusItems,\n          visible: true\n        }); // Avoid duplicate event lister, so remove it before add a new one.\n\n        document.removeEventListener('click', this.documentClickHandler, false);\n        document.addEventListener('click', this.documentClickHandler);\n        document.removeEventListener('contextmenu', this.documentRightClickHandler, false);\n        document.addEventListener('contextmenu', this.documentRightClickHandler);\n      });\n    }\n\n    updateContextMenuState(updatedState) {\n      const contextMenuState = { ...this.state.contextMenuState,\n        ...updatedState\n      };\n      this.setState({\n        contextMenuState\n      }, () => {\n        this.multiGridRef.forceUpdateGrids();\n      });\n    }\n\n    onTableCellClick(selectedRowIndex, selectedColumnIndex) {\n      this.setState({\n        selectedRowIndex,\n        selectedColumnIndex\n      }, () => this.multiGridRef.forceUpdateGrids());\n      this.hideContextMenu();\n    }\n\n    hideContextMenu() {\n      if (this.state.contextMenuState !== initialContextMenuState) {\n        this.setState({\n          contextMenuState: initialContextMenuState\n        }, () => {\n          this.multiGridRef.forceUpdateGrids();\n          document.removeEventListener('click', this.documentClickHandler, false);\n          document.removeEventListener('contextmenu', this.documentRightClickHandler, false);\n        });\n      }\n    }\n    /**\n     * This is the method that will be called by components using\n     * this Widget (Since the external system is non-react we cant rerender by passing the data as props\n     * @param data\n     */\n\n\n    updateWidgetData(widgetData) {\n      const {\n        hiddenRowIds\n      } = this.state;\n      const data = widgetData.filter(_ref4 => {\n        let {\n          id\n        } = _ref4;\n        return !hiddenRowIds.includes(id);\n      });\n      this.setState({\n        data\n      }, () => {\n        this.multiGridRef && this.multiGridRef.forceUpdateGrids();\n      });\n    }\n\n    updateVisibleColumns(visibleColumns) {\n      const columnwidths = this.calculateColumnWidth(visibleColumns);\n      this.setState({\n        columns: visibleColumns,\n        columnwidths\n      }, () => {\n        this.multiGridRef && this.multiGridRef.forceUpdateGrids();\n      });\n    }\n\n    calculateColumnWidth(visibleColumns) {\n      let columnIncrementerValue = 1;\n      let {\n        columnwidths,\n        showGearIcon,\n        useTabletWidth\n      } = this.state;\n      const {\n        widgetState\n      } = this.props;\n      const calculatedColumnWidthsCount = Object.keys(columnwidths).length;\n      const visibleColumnWidthCount = visibleColumns.length + (showGearIcon ? 2 : 1);\n\n      if (calculatedColumnWidthsCount !== visibleColumnWidthCount) {\n        columnwidths = {};\n      } // update columns width\n\n\n      columnwidths[0] = CHECKBOX_COLUMN_WIDTH;\n\n      if (showGearIcon) {\n        columnwidths[1] = GEARCOG_COLUMN_WIDTH;\n        columnIncrementerValue = 2;\n      }\n\n      visibleColumns.forEach((column, index) => {\n        const savedWidth = widgetState.columns && widgetState.columns[column.id] ? widgetState.columns[column.id].width : null;\n        const configWidth = useTabletWidth && column.defaultTabletWidth ? column.defaultTabletWidth : column.defaultWidth;\n        const defaultWidth = savedWidth || configWidth || DEFAULT_COLUMN_WIDTH;\n        columnwidths[index + columnIncrementerValue] = columnwidths[index + columnIncrementerValue] || defaultWidth;\n      });\n      return columnwidths;\n    }\n\n    updateSelectionDataAndVisibility(widgetData, checkedRowIds, disabledRowIds, isFurtherSelectionAllowed, hiddenRowIds, visibleColumns, totalWidgetCount, isTraversalEnabled, selectAllChecked) {\n      const data = widgetData.filter(_ref5 => {\n        let {\n          id\n        } = _ref5;\n        return !hiddenRowIds.includes(id);\n      });\n      const columnwidths = this.calculateColumnWidth(visibleColumns);\n      const updatedState = {\n        data,\n        columns: visibleColumns,\n        columnwidths,\n        checkedRowIds: checkedRowIds,\n        disabledRowIds: disabledRowIds,\n        isFurtherSelectionAllowed: isFurtherSelectionAllowed,\n        hiddenRowIds,\n        isTraversalEnabled,\n        selectAllChecked,\n        totalWidgetCount\n      };\n      this.setState(updatedState, () => {\n        this.multiGridRef && this.multiGridRef.recomputeGridSize() && this.multiGridRef.forceUpdateGrids();\n      });\n    }\n\n    resizeRow(_ref6) {\n      let {\n        columnIndex,\n        deltaX\n      } = _ref6;\n      this.setState(prevState => {\n        const {\n          columnwidths,\n          columns,\n          showGearIcon\n        } = prevState;\n        let columnWidth = columnwidths[columnIndex];\n        columnWidth = Math.max(MIN_COLUMN_WIDTH, columnWidth + deltaX);\n        columnwidths[columnIndex] = columnWidth; // update dashboard widget state\n\n        const index = showGearIcon ? columnIndex - 2 : columnIndex - 1;\n        const columnId = columns[index].id;\n        const {\n          onWidgetStateUpdateHandler\n        } = this.props;\n        const _columns = {};\n        _columns[columnId] = {\n          width: columnWidth\n        };\n        onWidgetStateUpdateHandler({\n          columns: _columns\n        });\n        return {\n          columnwidths,\n          resizing: true\n        };\n      }, () => {\n        this.multiGridRef.recomputeGridSize({\n          columnIndex\n        });\n      });\n    }\n\n    resizeStop() {\n      this.setState({\n        resizing: false\n      }, () => {\n        this.multiGridRef.forceUpdateGrids();\n      });\n    }\n\n    reorderRows(oldIndex, newIndex) {\n      const {\n        rowReorderHandler\n      } = this.props;\n      const cache = [...this.state.data];\n      this.setState({\n        data: arrayMove(this.state.data, oldIndex, newIndex),\n        cache\n      }, () => {\n        this.multiGridRef.forceUpdateGrids();\n        rowReorderHandler(oldIndex, newIndex);\n      });\n    }\n\n    rollbackCache() {\n      const {\n        cache\n      } = this.state;\n\n      if (cache) {\n        // eslint-disable-next-line no-undefined\n        this.setState({\n          data: cache,\n          cache: undefined\n        }, () => {\n          this.multiGridRef.forceUpdateGrids();\n        });\n      }\n    }\n\n    forceUpdateGrids() {\n      this.multiGridRef.forceUpdateGrids();\n    }\n\n    headerCellClickHandler(columnInfo) {\n      let {\n        sortId: prevSortId,\n        sortAsc\n      } = this.state;\n      let sortId = columnInfo.id; //set ascending or decending flag\n\n      if (sortId === prevSortId) {\n        sortAsc = !sortAsc;\n      } else {\n        sortAsc = true;\n      }\n\n      this.setState({\n        sortAsc,\n        sortId\n      }, () => {\n        this.multiGridRef.forceUpdateGrids();\n      });\n      const {\n        onSortClickHandler\n      } = this.props;\n      onSortClickHandler && onSortClickHandler(sortId, sortAsc, this.state.data.length);\n    }\n\n    checkBtnClickHandler(rowIndex, selected) {\n      let {\n        data\n      } = this.state;\n      let selectedRowData = this.getRowData(data, rowIndex);\n      const {\n        rowCheckBtnSelectHandler,\n        rowCheckBtnUnSelectHandler\n      } = this.props;\n\n      if (selected) {\n        rowCheckBtnSelectHandler(selectedRowData);\n      } else {\n        rowCheckBtnUnSelectHandler(selectedRowData);\n      }\n    }\n\n    checkBtnAllClickHandler(value) {\n      const {\n        data,\n        isTraversalEnabled\n      } = this.state;\n      const {\n        onUnCheckAllHandler,\n        onCheckAllHandler\n      } = this.props; //call ember component's callback\n\n      if (isTraversalEnabled) {\n        onUnCheckAllHandler();\n      }\n\n      if (value) {\n        onCheckAllHandler();\n      } else {\n        onUnCheckAllHandler();\n      }\n    }\n\n    isRowLoaded(_ref7) {\n      let {\n        index\n      } = _ref7;\n      const {\n        data\n      } = this.state;\n      const isloaded = !!data[index];\n      return isloaded;\n    }\n\n    _selectCell(_ref8) {\n      let {\n        scrollToColumn,\n        scrollToRow\n      } = _ref8;\n      this.setState({\n        selectedRowIndex: scrollToRow,\n        selectedColumnIndex: scrollToColumn,\n        arrowKeyRow: scrollToRow\n      });\n    } //give some space for sorting indicator\n\n\n    getColumnWidth(_ref9) {\n      let {\n        index\n      } = _ref9;\n      const {\n        columnwidths,\n        width\n      } = this.state;\n      const sum = Object.keys(columnwidths).reduce((_sum, i) => _sum + columnwidths[i], 0);\n\n      if (index === Object.keys(columnwidths).length - 1 && sum < width) {\n        return columnwidths[index] + width - sum; //modify right-most cell width\n      }\n\n      return columnwidths[index];\n    }\n\n    updateDimension(width, height) {\n      this.setState({\n        width,\n        height\n      });\n    }\n\n    updateWidgetState(widgetState) {\n      const {\n        config\n      } = this.props;\n      const widgetStateSortedColumn = config.columns.filter(cfg => cfg.id === widgetState.sortId);\n\n      if (!Ember.isEmpty(widgetStateSortedColumn)) {\n        const sortId = widgetStateSortedColumn[0].id;\n        const sortAsc = widgetState.sortAsc;\n        const reordering = widgetState.reordering || false;\n        this.setState({\n          sortId,\n          sortAsc,\n          reordering\n        });\n      }\n    }\n\n    updateRowItemSelection(checkedRowIds, disabledRowIds, isFurtherSelectionAllowed, hiddenRowIds) {\n      this.setState({\n        checkedRowIds: checkedRowIds,\n        disabledRowIds: disabledRowIds,\n        isFurtherSelectionAllowed: isFurtherSelectionAllowed,\n        hiddenRowIds\n      });\n    }\n\n    cellRightClickForTablet(event, rowIndex, columnIndex) {\n      event.stopPropagation();\n      this.setState({\n        selectedRowIndex: rowIndex,\n        selectedColumnIndex: columnIndex\n      }, () => {\n        this.multiGridRef.forceUpdateGrids();\n      });\n      const {\n        onRowRightClick\n      } = this.props;\n      if (!onRowRightClick) return;\n      const parentContainerCssClass = `.${GridWidget.containerCssClass}`;\n      const widgetContainerOffset = Ember.$(event.target).closest(parentContainerCssClass).offset(); // const positionX = window.pageXOffset + event.clientX - widgetContainerOffset.left;\n      // const positionY = window.pageYOffset + event.clientY - widgetContainerOffset.top + 50;\n\n      const positionX = window.pageXOffset + event.clientX;\n      const positionY = window.pageYOffset + event.clientY;\n      const {\n        data\n      } = this.state;\n      const selectedRowData = data.length ? this.getRowData(data, rowIndex) : null;\n      onRowRightClick(selectedRowData).then(menusItems => {\n        this.updateContextMenuState({\n          rowIndex,\n          columnIndex,\n          positionX,\n          positionY,\n          menusItems,\n          visible: true\n        }); // Avoid duplicate event lister, so remove it before add a new one.\n\n        document.removeEventListener('click', this.documentClickHandler, false);\n        document.addEventListener('click', this.documentClickHandler);\n        document.removeEventListener('contextmenu', this.documentRightClickHandler, false);\n        document.addEventListener('contextmenu', this.documentRightClickHandler);\n      });\n    }\n\n    getRowData(data, rowIndex) {\n      return data[rowIndex - 1];\n    }\n\n    _isRowSortable(index) {\n      return index >= 0;\n    }\n\n    _getSortableContainer() {\n      this.domNode = _reactDom.default.findDOMNode(this);\n      return this.domNode;\n    }\n\n    _rowRenderer(props, scrollToRow, preScrollToRow) {\n      const isArrowKeyPressing = this.isArrowKeyPressing;\n      const arrowKeyCellCache = props.parent === this.multiGridRef._bottomRightGrid ? this.arrowKeyCellCache : null;\n\n      if (props.parent === this.multiGridRef._bottomRightGrid && this.state.reordering) {\n        return sortableRowRenderer(props);\n      }\n\n      const children = fixedRowRenderer({ ...props,\n        scrollToRow,\n        preScrollToRow,\n        isArrowKeyPressing,\n        arrowKeyCellCache\n      });\n      return children;\n    }\n\n    _cellRenderer(props) {\n      const {\n        key,\n        isScrolling\n      } = props; // Added rowStyleHandler which gets passed through {...props}\n\n      if (isScrolling) {\n        this.hideContextMenu();\n      }\n\n      return _react.default.createElement(_cellrenderer.default, (0, _extends2.default)({\n        cellKey: key\n      }, props, this.state, {\n        config: this.config,\n        resizeStop: this.resizeStop,\n        onContextMenuClick: this.onContextMenuClick,\n        resizeRow: this.resizeRow,\n        onTableCellClick: this.onTableCellClick,\n        headerCellClickHandler: this.headerCellClickHandler,\n        checkBtnClickHandler: this.checkBtnClickHandler,\n        checkBtnAllClickHandler: this.checkBtnAllClickHandler,\n        cellRightClickForTablet: this.cellRightClickForTablet\n      }));\n    }\n\n    renderMultiGridWithNoData() {\n      const {\n        columns,\n        showGearIcon\n      } = this.state;\n      const rowCount = 1;\n      const columnIncrementerValue = showGearIcon ? 2 : 1;\n      return _react.default.createElement(AutoSizer, null, _ref10 => {\n        let {\n          width,\n          height\n        } = _ref10;\n        return _react.default.createElement(MultiGrid, {\n          ref: ref => {\n            this.multiGridRef = ref;\n          },\n          cellRenderer: this._cellRenderer,\n          columnWidth: this.getColumnWidth,\n          columnCount: columns.length + columnIncrementerValue,\n          rowHeight: 23,\n          rowCount: rowCount,\n          height: height,\n          width: width\n        });\n      });\n    }\n\n    renderMultiGrid(onRowsRendered, registerChild, scrollToColumn, scrollToRow, preScrollToRow, onSectionRendered) {\n      const {\n        data,\n        columns,\n        showGearIcon\n      } = this.state;\n      const columnIncrementerValue = showGearIcon ? 2 : 1;\n      const rowCount = data.length + 1;\n      const fixedRowCount = 1;\n      let {\n        rowStyleHandler\n      } = this.props;\n      this._onRowsRendered = onRowsRendered;\n      this._onSectionRendered = onSectionRendered;\n      const arrowKeyRow = this.isArrowKeyPressing ? scrollToRow : null;\n      return _react.default.createElement(AutoSizer, null, _ref11 => {\n        let {\n          width,\n          height\n        } = _ref11;\n        return _react.default.createElement(SortableMultiGrid, {\n          ref: sortableGrid => {\n            if (sortableGrid) {\n              const multiGrid = sortableGrid.getWrappedInstance();\n              this.multiGridRef = multiGrid;\n              registerChild(multiGrid);\n            }\n          },\n          onSortEnd: _ref12 => {\n            let {\n              oldIndex,\n              newIndex\n            } = _ref12;\n            this.reorderRows(oldIndex, newIndex);\n          },\n          scrollToRow: arrowKeyRow,\n          getContainer: this._getSortableContainer,\n          onSectionRendered: _ref13 => {\n            let {\n              rowStartIndex,\n              rowStopIndex,\n              columnStartIndex,\n              columnStopIndex\n            } = _ref13;\n\n            this._onRowsRendered({\n              startIndex: rowStartIndex,\n              stopIndex: rowStopIndex\n            });\n          },\n          fixedRowCount: fixedRowCount,\n          fixedColumnCount: 0,\n          cellRangeRenderer: props => this._rowRenderer(props, scrollToRow, preScrollToRow),\n          cellRenderer: _ref14 => {\n            let {\n              columnIndex,\n              key,\n              rowIndex,\n              style,\n              isScrolling\n            } = _ref14;\n            return this._cellRenderer({\n              columnIndex,\n              key,\n              rowIndex,\n              scrollToColumn,\n              scrollToRow,\n              style,\n              rowStyleHandler,\n              isScrolling\n            });\n          },\n          columnWidth: this.getColumnWidth,\n          columnCount: columns.length + columnIncrementerValue,\n          rowHeight: 23,\n          rowCount: rowCount,\n          height: height,\n          width: width\n        });\n      });\n    }\n\n    _infiniteLoaderChildFunction(_ref15) {\n      let {\n        onRowsRendered,\n        registerChild,\n        scrollToRow,\n        scrollToColumn,\n        preScrollToRow,\n        onSectionRendered\n      } = _ref15;\n      return this.renderMultiGrid(onRowsRendered, registerChild, scrollToColumn, scrollToRow, preScrollToRow, onSectionRendered);\n    }\n\n    renderMultiGridWithArrowStepper() {\n      const {\n        selectedColumnIndex,\n        selectedRowIndex,\n        columns,\n        data,\n        showGearIcon,\n        totalWidgetCount\n      } = this.state;\n\n      if (!data.length) {\n        return this.renderMultiGridWithNoData();\n      }\n\n      const {\n        config\n      } = this.props;\n      const batchSize = config.paginationLimit || BATCH_SIZE;\n      const rowCount = totalWidgetCount > 0 && data.length + batchSize > totalWidgetCount ? data.length + 1 : data.length + batchSize;\n      const columnIncrementerValue = showGearIcon ? 2 : 1;\n      return _react.default.createElement(InfiniteLoader, {\n        isRowLoaded: this.isRowLoaded,\n        loadMoreRows: this.loadMoreRowsHandler,\n        rowCount: rowCount,\n        minimumBatchSize: batchSize,\n        threshold: LOADER_THRESHOLD,\n        ref: ref => {\n          this.infiniteLoaderRef = ref;\n        }\n      }, _ref16 => {\n        let {\n          onRowsRendered,\n          registerChild\n        } = _ref16;\n        return _react.default.createElement(ArrowKeyStepper, {\n          className: 'arrow-key-stepper',\n          columnCount: columns.length + columnIncrementerValue,\n          isControlled: false // onScrollToChange={this._selectCell} //This is used when isControlled set to true\n          ,\n          mode: 'cells',\n          rowCount: rowCount,\n          scrollToColumn: selectedColumnIndex,\n          scrollToRow: selectedRowIndex,\n          rowGetter: _ref17 => {\n            let {\n              index\n            } = _ref17;\n            return this.state.data[index];\n          }\n        }, _ref18 => {\n          let {\n            onSectionRendered,\n            scrollToRow,\n            scrollToColumn\n          } = _ref18;\n          const preScrollToRow = this.preScrollToRow;\n          this.onArrowKeyPress(scrollToRow, scrollToColumn);\n          return this._infiniteLoaderChildFunction({\n            onRowsRendered,\n            registerChild,\n            scrollToColumn,\n            scrollToRow,\n            preScrollToRow,\n            onSectionRendered\n          });\n        });\n      });\n    }\n\n    render() {\n      const {\n        contextMenuState,\n        data,\n        columns,\n        columnwidths,\n        useTabletWidth\n      } = this.state;\n      const {\n        menusItems,\n        visible\n      } = contextMenuState;\n      const containerStyle = {\n        width: `${this.state.width}px`,\n        height: `${this.state.height}px`\n      };\n      let widgetInstanceId = this.state.widgetInstanceId;\n      let headerColumnTotalWidth = 0;\n      columns.forEach((column, index) => {\n        const defaultWidth = useTabletWidth && column.defaultTabletWidth ? column.defaultTabletWidth : column.defaultWidth;\n        const columnWidth = defaultWidth || columnwidths[index];\n        headerColumnTotalWidth += columnWidth;\n      });\n      const widgetClassName = !data.length ? `${GridWidget.containerCssClass} empty-widget` : GridWidget.containerCssClass;\n      const containerClassNames = headerColumnTotalWidth < this.state.width ? `${widgetClassName} small-widget` : widgetClassName;\n      return _react.default.createElement(\"div\", null, _react.default.createElement(\"div\", {\n        id: `${widgetInstanceId}-container`,\n        ref: containerRef => {\n          this.containerRef = containerRef;\n        },\n        className: containerClassNames,\n        onKeyDown: this.onKeyPressHandler,\n        style: containerStyle\n      }, this.renderMultiGridWithArrowStepper()), menusItems && menusItems.length && visible && _react.default.createElement(_gridContextMenu.default, (0, _extends2.default)({\n        onMenuItemClick: this.menuItemCallback\n      }, contextMenuState)));\n    }\n\n  }\n\n  GridWidget.containerCssClass = 'widget-container';\n  var _default = GridWidget;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/header-cell\", [\"exports\", \"react\", \"react-draggable\"], function (_exports, _react, _reactDraggable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const getHeaderValue = (columnInfo, columnIndex) => {\n    if (columnIndex === 0) return '';\n    const {\n      label: columnValue\n    } = columnInfo;\n    return columnValue;\n  };\n\n  const HeaderCheckBox = _ref => {\n    let {\n      chkBtnAllClicked,\n      checkBtnAllClickHandler,\n      isDisabled\n    } = _ref;\n    return _react.default.createElement(\"input\", {\n      className: 'cell-checkbox',\n      type: \"checkbox\",\n      checked: chkBtnAllClicked,\n      disabled: isDisabled,\n      onChange: event => {\n        checkBtnAllClickHandler(event.target.checked);\n      }\n    });\n  };\n\n  const HeaderCell = _ref2 => {\n    let {\n      style,\n      columnIndex,\n      headerCellClickHandler,\n      resizeRow,\n      resizing,\n      resizeStop,\n      checkBtnAllClickHandler,\n      chkBtnAllClicked,\n      // eslint-disable-line no-unused-vars\n      sortAsc,\n      sortId,\n      columnInfo,\n      checkedRowIds,\n      isFurtherSelectionAllowed,\n      showGearIcon,\n      isTraversalEnabled,\n      selectAllChecked // eslint-disable-line no-unused-vars\n\n    } = _ref2;\n    const columnValue = getHeaderValue(columnInfo, columnIndex);\n    const firstColumnCSS = columnIndex === 0 ? 'first-column' : '';\n    const headerCellStyle = { ...style\n    };\n    headerCellStyle.cursor = 'pointer';\n\n    if (resizing) {\n      headerCellStyle.cursor = 'col-resize';\n    }\n\n    const sortClassName = sortAsc ? 'fa fa-fw fa-sort-asc' : 'fa fa-fw fa-sort-desc';\n    const isSortable = columnInfo.id === sortId;\n    const isDisabled = isTraversalEnabled && checkedRowIds.length === 0;\n    const deselectBtnAllClicked = isTraversalEnabled && checkedRowIds.length > 0 || !isTraversalEnabled && selectAllChecked;\n    const actionableColumnIndex = showGearIcon ? 1 : 0; // for checkbox and gear\n\n    return _react.default.createElement(\"div\", {\n      role: \"none\",\n      className: `HeaderCell ${firstColumnCSS}`,\n      style: headerCellStyle\n    }, columnIndex === 0 && _react.default.createElement(HeaderCheckBox, {\n      checkBtnAllClickHandler: checkBtnAllClickHandler,\n      chkBtnAllClicked: deselectBtnAllClicked,\n      isDisabled: isDisabled\n    }), showGearIcon && columnIndex === 1 && _react.default.createElement(\"span\", null), columnIndex > actionableColumnIndex && _react.default.createElement(\"div\", {\n      className: 'column-label',\n      onClick: () => headerCellClickHandler(columnInfo, columnIndex)\n    }, _react.default.createElement(\"span\", null, columnIndex > actionableColumnIndex && columnValue)), _react.default.createElement(\"div\", {\n      className: \"column-controls\"\n    }, isSortable && _react.default.createElement(\"i\", {\n      className: sortClassName\n    })), columnIndex > actionableColumnIndex && _react.default.createElement(_reactDraggable.default, {\n      axis: \"x\",\n      defaultClassName: \"DragHandle\",\n      defaultClassNameDragging: \"DragHandleActive\",\n      onDrag: (event, _ref3) => {\n        let {\n          deltaX\n        } = _ref3;\n        return resizeRow({\n          columnIndex,\n          deltaX\n        });\n      },\n      onStop: (event, _ref4) => {\n        let {\n          deltaX\n        } = _ref4;\n        return resizeStop({\n          columnIndex,\n          deltaX\n        });\n      },\n      position: {\n        x: 0\n      },\n      zIndex: 999\n    }, _react.default.createElement(\"div\", {\n      className: \"DragHandleIcon\"\n    })));\n  };\n\n  var _default = HeaderCell;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/otp-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\"], function (_exports, _cellItem) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // eslint-disable-next-line no-undef\n  const _ = require(\"lodash\");\n\n  const OTP_LATE = 'Late';\n  const OTP_DANGER = 'In Danger';\n\n  class OTPCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getCellClasses(data, columnInfo, rowIndex, columnIndex, columnValue) {\n      const cellClasses = [];\n      const otpLateColor = this.isOtpLate(columnInfo, columnValue) ? 'otp-late-color' : '';\n\n      if (!_.isEmpty(otpLateColor)) {\n        cellClasses.push(otpLateColor);\n      }\n\n      const otpDangerColor = this.isOtpDanger(columnInfo, columnValue) ? 'otp-danger-color' : '';\n\n      if (!_.isEmpty(otpDangerColor)) {\n        cellClasses.push(otpDangerColor);\n      }\n\n      return cellClasses.join(' ');\n    }\n\n    isOtpLate(_ref, columnValue) {\n      let {\n        valuePath\n      } = _ref;\n      return valuePath === _cellItem.OTP_LABEL_PROPERTY_NAME && columnValue === OTP_LATE;\n    }\n\n    isOtpDanger(_ref2, columnValue) {\n      let {\n        valuePath\n      } = _ref2;\n      return valuePath === _cellItem.OTP_LABEL_PROPERTY_NAME && columnValue === OTP_DANGER;\n    }\n\n  }\n\n  _exports.default = OTPCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/otp-value-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\"], function (_exports, _cellItem) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // eslint-disable-next-line no-undef\n  const _ = require(\"lodash\");\n\n  const OTP_LATE = 'Late';\n  const OTP_DANGER = 'In Danger';\n  const OTP_ON_TIME = 'On Time';\n\n  class OTPValueCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getCellClasses(data, columnInfo, rowIndex, columnIndex, columnValue) {\n      const cellClasses = [];\n      const otpLateColor = columnValue === OTP_LATE ? 'otp-danger' : '';\n\n      if (!_.isEmpty(otpLateColor)) {\n        cellClasses.push(otpLateColor);\n      }\n\n      const otpDangerColor = columnValue === OTP_DANGER ? 'otp-warning' : '';\n\n      if (!_.isEmpty(otpDangerColor)) {\n        cellClasses.push(otpDangerColor);\n      }\n\n      const otpOnTimeColor = columnValue === OTP_ON_TIME ? 'otp-ontime' : '';\n\n      if (!_.isEmpty(otpOnTimeColor)) {\n        cellClasses.push(otpOnTimeColor);\n      }\n\n      return cellClasses.join(' ');\n    }\n\n  }\n\n  _exports.default = OTPValueCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/perform-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\"], function (_exports, _cellItem) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class PerformCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n  }\n\n  _exports.default = PerformCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/portal\", [\"exports\", \"react\", \"react-dom\"], function (_exports, _react, _reactDom) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.Portal = void 0;\n\n  const Portal = _ref => {\n    let {\n      children,\n      className = 'root-portal',\n      el = 'div'\n    } = _ref;\n\n    const [container] = _react.default.useState(() => {\n      // This will be executed only on the initial render\n      // https://reactjs.org/docs/hooks-reference.html#lazy-initial-state\n      const _el = document.createElement(el);\n\n      _el.style.display = 'contents';\n      return _el;\n    });\n\n    _react.default.useEffect(() => {\n      container.classList.add(className);\n      document.body.appendChild(container);\n      return () => {\n        document.body.removeChild(container);\n      };\n    }, []);\n\n    return _reactDom.default.createPortal(children, container);\n  };\n\n  _exports.Portal = Portal;\n  var _default = Portal;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/read-time-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\"], function (_exports, _cellItem) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const READ_TIME_PROPERTY_NAME = 'readTime';\n  const YES_VALUE = 'Yes';\n  const NO_VALUE = 'No';\n\n  class ReadTimeCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getColumnValue(data, columnInfo, rowIndex) {\n      const currRowData = this.getRowData(data, rowIndex);\n      const columnValue = currRowData[READ_TIME_PROPERTY_NAME] ? YES_VALUE : NO_VALUE;\n      return columnValue;\n    }\n\n  }\n\n  _exports.default = ReadTimeCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/row-range-renderer\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.rowRangeRenderer = void 0;\n\n  /* eslint-disable no-continue */\n\n  /* eslint-disable no-lonely-if */\n\n  /* eslint-disable prefer-const */\n\n  /* eslint-disable no-unused-vars */\n\n  /* eslint-disable no-unused-expressions */\n\n  /**\n       * Default implementation of cellRangeRenderer used by Grid.\n       * This renderer supports cell-caching while the user is scrolling.\n       */\n  const rowRangeRenderer = rowRenderer => _ref => {\n    let {\n      cellCache,\n      cellRenderer,\n      columnSizeAndPositionManager,\n      columnStartIndex,\n      columnStopIndex,\n      deferredMeasurementCache,\n      horizontalOffsetAdjustment,\n      isScrolling,\n      parent,\n      // Grid (or List or Table)\n      rowSizeAndPositionManager,\n      rowStartIndex,\n      rowStopIndex,\n      styleCache,\n      verticalOffsetAdjustment,\n      visibleColumnIndices,\n      visibleRowIndices,\n      scrollToRow,\n      preScrollToRow,\n      isArrowKeyPressing,\n      arrowKeyCellCache\n    } = _ref;\n    const renderedRows = []; // Browsers have native size limits for elements (eg Chrome 33M pixels, IE 1.5M pixes).\n    // User cannot scroll beyond these size limitations.\n    // In order to work around this, ScalingCellSizeAndPositionManager compresses offsets.\n    // We should never cache styles for compressed offsets though as this can lead to bugs.\n    // See issue #576 for more.\n\n    const areOffsetsAdjusted = columnSizeAndPositionManager.areOffsetsAdjusted() || rowSizeAndPositionManager.areOffsetsAdjusted();\n    const canCacheStyle = !isScrolling && !areOffsetsAdjusted;\n\n    for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n      const rowDatum = rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex);\n      const renderedCells = [];\n      const rowKey = `${rowIndex}`;\n\n      for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n        const columnDatum = columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex);\n        const isCellVisible = columnIndex >= visibleColumnIndices.start && columnIndex <= visibleColumnIndices.stop && rowIndex >= visibleRowIndices.start && rowIndex <= visibleRowIndices.stop;\n        const cellKey = `${rowIndex}-${columnIndex}`;\n        let cellStyle, renderedCell; // Cache style objects so shallow-compare doesn't re-render unnecessarily.\n\n        if (canCacheStyle && styleCache[cellKey]) {\n          cellStyle = styleCache[cellKey];\n        } else {\n          // In deferred mode, cells will be initially rendered before we know their size.\n          // Don't interfere with CellMeasurer's measurements by setting an invalid size.\n          if (deferredMeasurementCache && !deferredMeasurementCache.has(rowIndex, columnIndex)) {\n            // Position not-yet-measured cells at top/left 0,0,\n            // And give them width/height of 'auto' so they can grow larger than the parent Grid if necessary.\n            // Positioning them further to the right/bottom influences their measured size.\n            cellStyle = {\n              height: 'auto',\n              left: 0,\n              position: 'absolute',\n              top: 0,\n              width: 'auto'\n            };\n          } else {\n            cellStyle = {\n              height: rowDatum.size,\n              left: columnDatum.offset + horizontalOffsetAdjustment,\n              position: 'absolute',\n              top: 0,\n              width: columnDatum.size,\n              whiteSpace: 'nowrap',\n              overflow: 'hidden',\n              textOverflow: 'ellipsis'\n            };\n            styleCache[cellKey] = cellStyle;\n          }\n        }\n\n        const cellRendererParams = {\n          columnIndex,\n          isScrolling,\n          isVisible: isCellVisible,\n          key: cellKey,\n          parent,\n          rowIndex,\n          style: cellStyle\n        };\n\n        const cellRendererWrapper = params => {\n          if (params.rowIndex + 1 !== scrollToRow && isArrowKeyPressing && arrowKeyCellCache) {\n            if (!arrowKeyCellCache[params.key]) {\n              arrowKeyCellCache[params.key] = cellRenderer(params);\n            }\n\n            return arrowKeyCellCache[params.key];\n          }\n\n          if (arrowKeyCellCache && arrowKeyCellCache[params.key]) {\n            delete arrowKeyCellCache[params.key];\n          }\n\n          return cellRenderer(params);\n        }; // Avoid re-creating cells while scrolling.\n        // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n        // If a scroll is in progress- cache and reuse cells.\n        // This cache will be thrown away once scrolling completes.\n        // However if we are scaling scroll positions and sizes, we should also avoid caching.\n        // This is because the offset changes slightly as scroll position changes and caching leads to stale values.\n        // For more info refer to issue #395\n\n\n        if (isScrolling && !horizontalOffsetAdjustment && !verticalOffsetAdjustment) {\n          if (!cellCache[cellKey]) {\n            cellCache[cellKey] = cellRendererWrapper(cellRendererParams);\n          }\n\n          renderedCell = cellCache[cellKey]; // If the user is pressing arrow key, try caching the cell.\n        } else {\n          renderedCell = cellRendererWrapper(cellRendererParams);\n        }\n\n        if (renderedCell === null || renderedCell === false) {\n          continue;\n        }\n\n        renderedCells.push(renderedCell);\n      }\n\n      const isRowVisible = rowIndex >= visibleRowIndices.start && rowIndex <= visibleRowIndices.stop;\n      let rowStyle; // Cache style objects so shallow-compare doesn't re-render unnecessarily.\n\n      if (canCacheStyle && styleCache[rowKey]) {\n        rowStyle = styleCache[rowKey];\n      } else {\n        rowStyle = {\n          height: rowDatum.size,\n          left: 0,\n          position: 'absolute',\n          right: 0,\n          top: rowDatum.offset + verticalOffsetAdjustment\n        };\n        styleCache[rowKey] = rowStyle;\n      }\n\n      const rowRendererParams = {\n        children: renderedCells,\n        isScrolling,\n        isVisible: isRowVisible,\n        key: rowKey,\n        parent,\n        rowIndex,\n        style: rowStyle\n      }; // The cache block is commented out - as caching rows when scrolling horizontally wont\n      // render correctly when scrolling to new columns.\n      // If re-enabled, its cache key should contain the range of column indecies that it shows.\n\n      const renderedRow = rowRenderer(rowRendererParams); // Avoid re-creating cells while scrolling.\n      // This can lead to the same cell being created many times and can cause performance issues for \"heavy\" cells.\n      // If a scroll is in progress- cache and reuse cells.\n      // This cache will be thrown away once scrolling completes.\n      // However if we are scaling scroll positions and sizes, we should also avoid caching.\n      // This is because the offset changes slightly as scroll position changes and caching leads to stale values.\n      // For more info refer to issue #395\n\n      /*\n          if (\n            isScrolling &&\n            !horizontalOffsetAdjustment &&\n            !verticalOffsetAdjustment\n          ) {\n            if (!cellCache[rowKey]) {\n              cellCache[rowKey] = rowRenderer(rowRendererParams);\n            }\n             renderedRow = cellCache[rowKey];\n             // If the user is no longer scrolling, don't cache cells.\n            // This makes dynamic cell content difficult for users and would also lead to a heavier memory footprint.\n          } else {\n            renderedRow = rowRenderer(rowRendererParams);\n          }\n          */\n\n      if (renderedRow === null) {\n        continue;\n      }\n\n      renderedRows.push(renderedRow);\n    }\n\n    return renderedRows;\n  };\n\n  _exports.rowRangeRenderer = rowRangeRenderer;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/service-needs-cell\", [\"exports\", \"react\", \"react-dom\", \"lodash\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"adept-iq/utils/format-text-extension\"], function (_exports, _react, _reactDom, _lodash, _cellItem, _formatTextExtension) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.RenderInBody = void 0;\n\n  class RenderInBody extends _react.default.PureComponent {\n    constructor(props) {\n      super(props);\n      this.el = document.createElement('div');\n      this.el.style.display = 'contents'; // The <div> is a necessary container for our content, but it should not affect our layout. Only works in some browsers, but generally doesn't matter since this is at the end anyway. Feel free to delete this line.\n    }\n\n    componentDidMount() {\n      document.body.appendChild(this.el);\n    }\n\n    componentWillUnmount() {\n      document.body.removeChild(this.el);\n    }\n\n    render() {\n      return _reactDom.default.createPortal(this.props.children, this.el);\n    }\n\n  }\n\n  _exports.RenderInBody = RenderInBody;\n\n  class ServiceNeedsCell extends _cellItem.default {\n    constructor(props) {\n      super(props);\n      this.state = {\n        isHovering: false,\n        positionX: 0,\n        positionY: 0\n      };\n      this.handleMouseHover = this.handleMouseHover.bind(this);\n    }\n\n    handleMouseHover() {\n      this.setState({\n        positionX: window.pageXOffset + event.clientX,\n        positionY: window.pageYOffset + event.clientY\n      });\n      this.setState(this.toggleHoverState);\n    }\n\n    toggleHoverState(state) {\n      const clonedState = { ...state\n      };\n      clonedState.isHovering = !state.isHovering;\n      return clonedState;\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        columnInfo,\n        selectedRowIndex,\n        selectedColumnIndex\n      } = this.props;\n      const {\n        isHovering,\n        positionX,\n        positionY\n      } = this.state;\n      const toolTipStyles = {\n        width: '200px',\n        backgroundColor: '#fff',\n        color: 'black',\n        textAlign: 'center',\n        borderRadius: '6px',\n        padding: '5px 0',\n        position: 'absolute',\n        left: `${positionX}px`,\n        top: `${positionY}px`,\n        zIndex: 1000\n      };\n      const currentRowData = data[rowIndex - 1];\n      const columnValue = '';\n      const classNames = this.getStylesClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue);\n      const serviceNeeds = this.getServiceNeeds(currentRowData);\n      const length = serviceNeeds.filter(val => val.className === 'valueItem').length;\n      let columnVal = '';\n\n      if (length > 1) {\n        columnVal = `${length} ${this.props.columnInfo.cellDesc}`;\n      } else if (length === 1) {\n        columnVal = serviceNeeds.firstObject.value;\n      }\n\n      return _react.default.createElement(\"span\", {\n        role: \"none\",\n        className: classNames,\n        style: style,\n        onMouseEnter: this.handleMouseHover,\n        onMouseLeave: this.handleMouseHover\n      }, _react.default.createElement(\"span\", {\n        \"class\": \"column-label\"\n      }, columnVal), isHovering && _react.default.createElement(RenderInBody, null, _react.default.createElement(\"div\", {\n        style: toolTipStyles\n      }, this.renderToolTipContent(serviceNeeds))));\n    }\n\n    renderToolTipContent(serviceNeeds) {\n      const toolTipStylesULStyle = {\n        maxHeight: '200px',\n        overflowY: 'auto',\n        padding: 0,\n        listStyleType: 'none'\n      };\n      return _react.default.createElement(\"ul\", {\n        style: toolTipStylesULStyle\n      }, serviceNeeds.map(function (item, key) {\n        return _react.default.createElement(\"li\", {\n          key: key,\n          style: {\n            padding: '7px'\n          }\n        }, item.value);\n      }));\n    }\n\n    getServiceNeeds(currentRowData) {\n      const serviceNeeds = [];\n      let tripServiceNeeds = currentRowData.serviceNeeds;\n\n      if (!_lodash.default.isEmpty(tripServiceNeeds)) {\n        if (!_lodash.default.isArray(tripServiceNeeds)) {\n          // Only one item\n          tripServiceNeeds = [tripServiceNeeds];\n        }\n\n        const count = tripServiceNeeds.length;\n        tripServiceNeeds.forEach(function (item) {\n          const displayName = item.displayName;\n          let text = {};\n\n          if (count === 1) {\n            text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${displayName}`);\n          } else {\n            text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${count} ${displayName}`);\n          }\n\n          serviceNeeds.push(text);\n        });\n      }\n\n      return serviceNeeds;\n      /* eslint-enable newline-after-var */\n    }\n\n  }\n\n  _exports.default = ServiceNeedsCell;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/status-reason-cell\", [\"exports\", \"@babel/runtime/helpers/esm/extends\", \"react\", \"react-dom\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/base-cell-item\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-check-box\", \"adept-iq/config/api-urls\"], function (_exports, _extends2, _react, _reactDom, _baseCellItem, _cellCheckBox, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.RenderInBody = _exports.OTP_LABEL_PROPERTY_NAME = void 0;\n  const OTP_LABEL_PROPERTY_NAME = 'otpStatus';\n  _exports.OTP_LABEL_PROPERTY_NAME = OTP_LABEL_PROPERTY_NAME;\n\n  class RenderInBody extends _react.default.PureComponent {\n    constructor(props) {\n      super(props);\n      this.el = document.createElement('div');\n      this.el.style.display = 'contents'; // The <div> is a necessary container for our content, but it should not affect our layout. Only works in some browsers, but generally doesn't matter since this is at the end anyway. Feel free to delete this line.\n    }\n\n    componentDidMount() {\n      document.body.appendChild(this.el);\n    }\n\n    componentWillUnmount() {\n      document.body.removeChild(this.el);\n    }\n\n    render() {\n      return _reactDom.default.createPortal(this.props.children, this.el);\n    }\n\n  }\n\n  _exports.RenderInBody = RenderInBody;\n\n  class StatusReasonCell extends _baseCellItem.default {\n    constructor(props) {\n      super(props);\n      this.state = {\n        isHovering: false,\n        positionX: 0,\n        positionY: 0,\n        user: ''\n      };\n      this.handleMouseHover = this.handleMouseHover.bind(this);\n    }\n\n    userList() {\n      const localStorageTokenData = JSON.parse(localStorage.getItem('ember_simple_auth-session'));\n      const {\n        data,\n        rowIndex\n      } = this.props;\n      const currRowData = this.getRowData(data, rowIndex);\n      const lock = currRowData.lock;\n      const token = localStorageTokenData.authenticated.token;\n\n      if (lock) {\n        fetch(`${_apiUrls.API.ssoService.host}/user/${lock.user}`, {\n          method: 'GET',\n          headers: {\n            'Authorization': `Bearer ${token}`\n          }\n        }).then(response => response.json()).then(userData => this.setState({\n          user: userData\n        }));\n      }\n    }\n\n    handleMouseHover() {\n      this.setState({\n        positionX: window.pageXOffset + event.clientX,\n        positionY: window.pageYOffset + event.clientY\n      });\n      this.userList();\n      this.setState(this.toggleHoverState);\n    }\n\n    toggleHoverState(state) {\n      const clonedState = { ...state\n      };\n      clonedState.isHovering = !state.isHovering;\n      return clonedState;\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        onContextMenuClick,\n        onTableCellClick,\n        columnInfo,\n        selectedRowIndex,\n        selectedColumnIndex,\n        showGearIcon\n      } = this.props;\n      const {\n        isHovering\n      } = this.state;\n      const {\n        reordering\n      } = this.props;\n      const columnValue = this.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n      let classNames = this.getStylesClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue);\n      const rowSelClasses = this.getRowStyleClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue);\n      classNames = rowSelClasses + '  ' + classNames;\n      return _react.default.createElement(\"span\", {\n        role: \"none\",\n        className: classNames,\n        style: style,\n        onContextMenu: e => {\n          e.preventDefault();\n          onContextMenuClick(e, rowIndex, columnIndex);\n        },\n        onMouseEnter: this.handleMouseHover,\n        onMouseLeave: this.handleMouseHover,\n        onClick: () => onTableCellClick(rowIndex, columnIndex)\n      }, this.renderCellCheckBox(), showGearIcon && this.renderCellCogButton(), this.renderCellValueItem(), isHovering && !reordering && _react.default.createElement(RenderInBody, null, this.renderToolTipContent(this.props, columnValue)));\n    }\n\n    renderToolTipContent(props, columnValue) {\n      const {\n        positionX,\n        positionY\n      } = this.state;\n      const toolTipLockStyles = {\n        width: '150px',\n        backgroundColor: '#000',\n        color: '#fff',\n        textAlign: 'center',\n        borderRadius: '6px',\n        fontSize: '14px',\n        padding: '2px 0',\n        position: 'absolute',\n        left: `${positionX}px`,\n        top: `${positionY}px`,\n        zIndex: 1000\n      };\n      const toolTipStyles = {\n        backgroundColor: '#fff',\n        color: 'black',\n        textAlign: 'left',\n        borderRadius: '6px',\n        position: 'absolute',\n        left: `${positionX}px`,\n        top: `${positionY}px`,\n        'white-space': 'pre',\n        padding: '0 10px 0 10px',\n        'max-height': '100px',\n        'overflow-y': 'auto',\n        zIndex: 1000\n      };\n      const {\n        data,\n        rowIndex\n      } = props;\n      const rowData = data[rowIndex - 1];\n\n      if (rowData.isLocked) {\n        if (this.state.user) {\n          return _react.default.createElement(\"div\", {\n            style: toolTipLockStyles\n          }, \" Locked by \", this.state.user.firstName);\n        }\n      }\n\n      if (columnValue) {\n        return _react.default.createElement(\"div\", {\n          style: toolTipStyles\n        }, columnValue);\n      }\n\n      return '';\n    }\n\n    renderCellCheckBox() {\n      const {\n        data,\n        columnIndex,\n        rowIndex,\n        checkedRowIds,\n        disabledRowIds\n      } = this.props;\n      const selectedRowData = this.getRowData(data, rowIndex);\n      const isDisabled = disabledRowIds.includes(selectedRowData.id);\n      const isChecked = checkedRowIds.findIndex(obj => {\n        if (selectedRowData.coreModel) {\n          return obj.model === selectedRowData.coreModel && obj.id === selectedRowData.id;\n        }\n\n        return obj.id === selectedRowData.id;\n      }) > -1;\n\n      if (columnIndex === 0) {\n        return _react.default.createElement(_cellCheckBox.default, (0, _extends2.default)({}, this.props, {\n          isChecked: isChecked,\n          isDisabled: isDisabled\n        }));\n      }\n    }\n\n    renderCellCogButton() {\n      const {\n        columnIndex,\n        rowIndex,\n        cellRightClickForTablet\n      } = this.props;\n\n      if (columnIndex === 1) {\n        return _react.default.createElement(\"button\", {\n          className: 'btn-cog',\n          onClick: e => {\n            e.preventDefault();\n            cellRightClickForTablet(e, rowIndex, columnIndex);\n          }\n        }, _react.default.createElement(\"i\", {\n          className: 'fa fa-cog ml-1'\n        }));\n      }\n    }\n\n    renderCellValueItem() {\n      const {\n        data,\n        columnIndex,\n        rowIndex,\n        columnInfo,\n        showGearIcon\n      } = this.props;\n      const actionableColumnIndex = showGearIcon ? 1 : 0; // for checkbox and gear\n\n      const columnValue = this.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n\n      if (columnIndex > actionableColumnIndex) {\n        return _react.default.createElement(\"span\", {\n          className: 'column-label'\n        }, \" \", columnValue, \" \");\n      }\n    }\n\n    getRowStyleClasses(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue) {\n      const {\n        rowStyleHandler\n      } = this.props;\n\n      if (rowStyleHandler) {\n        const currRowData = this.getRowData(data, rowIndex) || {};\n        return rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currRowData) || '';\n      }\n\n      return '';\n    }\n\n  }\n\n  _exports.default = StatusReasonCell;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/time-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"moment\"], function (_exports, _cellItem, _moment) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class TimeCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getColumnValue(data, columnInfo, rowIndex, columnIndex) {\n      let columnValue = super.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n      const {\n        format\n      } = columnInfo;\n      columnValue = columnValue ? this.getTimeStampValue(columnValue, format) : '';\n      return columnValue;\n    }\n\n    getTimeStampValue(columnValue, format) {\n      if (_moment.default.utc(columnValue).isValid()) {\n        return _moment.default.utc(columnValue).format(format);\n      }\n\n      const currentDate = (0, _moment.default)();\n      const splittedTimes = columnValue.split(':'); //set time in current moment date\n\n      return currentDate.set({\n        hour: splittedTimes[0],\n        minute: splittedTimes[1]\n      }).format(format);\n    }\n\n  }\n\n  _exports.default = TimeCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/time-local-cell-item\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"moment\"], function (_exports, _cellItem, _moment) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class TimeCellItem extends _cellItem.default {\n    constructor(props) {\n      super(props);\n    }\n\n    getColumnValue(data, columnInfo, rowIndex, columnIndex) {\n      let columnValue = super.getColumnValue(data, columnInfo, rowIndex, columnIndex);\n      const {\n        format\n      } = columnInfo;\n      columnValue = columnValue ? this.getTimeStampValue(columnValue, format) : '';\n      return columnValue;\n    }\n\n    getTimeStampValue(columnValue, format) {\n      if (_moment.default.utc(columnValue).isValid()) {\n        return _moment.default.utc(columnValue).local().format(format);\n      }\n\n      const currentDate = (0, _moment.default)().utc();\n      const splittedTimes = columnValue.split(':'); //set time in current moment date\n\n      return currentDate.set({\n        hour: splittedTimes[0],\n        minute: splittedTimes[1]\n      }).local().format(format);\n    }\n\n    getCellClasses(data, columnInfo, rowIndex\n    /*, columnIndex, columnValue*/\n    ) {\n      const {\n        classPath,\n        classValueMap\n      } = columnInfo;\n      const rowData = this.getRowData(data, rowIndex);\n      if (!classPath || !classValueMap) return '';\n      const cellClasses = [];\n      const classValue = rowData[classPath] || '';\n\n      for (const key in classValueMap) {\n        if (classValue === key) {\n          cellClasses.push(classValueMap[key]);\n        }\n      }\n\n      return cellClasses.join(' ');\n    }\n\n  }\n\n  _exports.default = TimeCellItem;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/tootip\", [\"exports\", \"react\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/base-cell-item\", \"adept-iq/config/api-urls\"], function (_exports, _react, _baseCellItem, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-console */\n\n  /* eslint-disable no-inner-declarations */\n\n  /* eslint-disable no-unused-vars */\n\n  /* eslint-disable vars-on-top */\n  class Tooltip extends _baseCellItem.default {\n    constructor(props) {\n      super(props);\n      this.state = {\n        isHovering: false,\n        positionX: 0,\n        positionY: 0,\n        User: ''\n      };\n      this.handleMouseHover = this.handleMouseHover.bind(this);\n    }\n\n    userList() {\n      const localStorageTokenData = JSON.parse(localStorage.getItem('ember_simple_auth-session'));\n      const {\n        data,\n        rowIndex\n      } = this.props;\n      const currRowData = this.getRowData(data, rowIndex);\n      const lock = currRowData.lock;\n      const token = localStorageTokenData.authenticated.token;\n\n      if (lock) {\n        fetch(`${_apiUrls.API.ssoService.host}/user/${lock.user}`, {\n          method: 'GET',\n          headers: {\n            'Authorization': `Bearer ${token}`\n          }\n        }).then(response => response.json()).then(userData => this.setState({\n          User: userData\n        }));\n      }\n    }\n\n    handleMouseHover() {\n      this.setState({\n        positionX: window.pageXOffset + event.clientX,\n        positionY: window.pageYOffset + event.clientY\n      });\n      this.userList();\n      this.setState(this.toggleHoverState);\n    }\n\n    toggleHoverState(state) {\n      const clonedState = { ...state\n      };\n      clonedState.isHovering = !state.isHovering;\n      return clonedState;\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        columnInfo,\n        selectedRowIndex,\n        selectedColumnIndex,\n        columnValue\n      } = this.props;\n      const {\n        isHovering,\n        positionX,\n        positionY\n      } = this.state;\n      const toolTipStyles = {\n        width: '150px',\n        backgroundColor: 'black',\n        color: 'white',\n        textAlign: 'center',\n        borderRadius: '6px',\n        padding: '5px 0',\n        position: 'absolute',\n        left: `${positionX - 100}px`,\n        top: '20px',\n        zIndex: 1000\n      };\n      return _react.default.createElement(\"span\", {\n        role: \"none\",\n        onMouseEnter: this.handleMouseHover,\n        onMouseLeave: this.handleMouseHover\n      }, this.props.children, isHovering && this.renderTooltip(data, rowIndex) ? _react.default.createElement(\"label\", {\n        style: toolTipStyles,\n        className: \"selected-row\"\n      }, \"Locked by \", this.state.User.firstName) : '');\n    } //render\n\n\n    renderTooltip(data, rowIndex) {\n      const currRowData = this.getRowData(data, rowIndex);\n      const isLocked = currRowData.isLocked;\n      return isLocked;\n    }\n\n  }\n\n  var _default = Tooltip;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/classes/travel-needs-cell\", [\"exports\", \"react\", \"lodash\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/portal\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/cell-item\", \"adept-iq/utils/format-text-extension\", \"adept-iq/models/travel-need-type\"], function (_exports, _react, _lodash, _portal, _cellItem, _formatTextExtension, _travelNeedType) {\n  'use strict';\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class TravelNeedsCell extends _cellItem.default {\n    constructor(props) {\n      super(props);\n      this.state = {\n        isHovering: false,\n        positionX: 0,\n        positionY: 0\n      };\n      this.handleMouseHover = this.handleMouseHover.bind(this);\n    }\n\n    handleMouseHover() {\n      this.setState({\n        positionX: window.pageXOffset + event.clientX,\n        positionY: window.pageYOffset + event.clientY\n      });\n      this.setState(this.toggleHoverState);\n    }\n\n    toggleHoverState(state) {\n      const clonedState = { ...state\n      };\n      clonedState.isHovering = !state.isHovering;\n      return clonedState;\n    }\n\n    render() {\n      const {\n        data,\n        style,\n        columnIndex,\n        rowIndex,\n        columnInfo,\n        scrollToColumn,\n        scrollToRow\n      } = this.props;\n      const {\n        isHovering,\n        positionX,\n        positionY\n      } = this.state;\n      const toolTipStyles = {\n        width: '200px',\n        backgroundColor: '#fff',\n        color: 'black',\n        textAlign: 'center',\n        borderRadius: '6px',\n        padding: '5px 0',\n        position: 'absolute',\n        left: `${positionX}px`,\n        top: `${positionY}px`,\n        zIndex: 1000\n      };\n      const currentRowData = data[rowIndex - 1];\n      const columnValue = '';\n      const classNames = this.getStylesClasses(data, rowIndex, columnInfo, columnIndex, scrollToRow, scrollToColumn, columnValue);\n      const travelNeeds = this.getTravelNeeds(currentRowData);\n      const length = travelNeeds.filter(val => val.className === 'valueItem').length;\n      let columnVal = '';\n\n      if (length > 1) {\n        columnVal = `${length} ${this.props.columnInfo.cellDesc}`;\n      } else if (length === 1) {\n        columnVal = travelNeeds.firstObject.value;\n      }\n\n      return _react.default.createElement(\"span\", {\n        role: \"none\",\n        className: classNames,\n        style: style,\n        onMouseEnter: this.handleMouseHover,\n        onMouseLeave: this.handleMouseHover\n      }, _react.default.createElement(\"span\", {\n        \"class\": \"column-label\"\n      }, columnVal), isHovering && _react.default.createElement(_portal.default, null, _react.default.createElement(\"div\", {\n        style: toolTipStyles\n      }, this.renderToolTipContent(travelNeeds))));\n    }\n\n    renderToolTipContent(travelNeeds) {\n      const toolTipStylesULStyle = {\n        maxHeight: '200px',\n        overflowY: 'auto',\n        padding: 0,\n        listStyleType: 'none'\n      };\n      return _react.default.createElement(\"ul\", {\n        style: toolTipStylesULStyle\n      }, travelNeeds.map(function (item, key) {\n        return _react.default.createElement(\"li\", {\n          key: key,\n          style: {\n            padding: '7px'\n          }\n        }, item.value);\n      }));\n    }\n\n    getTravelNeeds(currentRowData) {\n      const travelNeeds = [];\n      /* eslint-disable newline-after-var */\n\n      let totalAmbulatory = 0;\n      let totalWheelchair = 0;\n      let tripTravelNeeds = currentRowData.travelNeeds;\n      let ambulatoryDisplayName = 'Ambulatory';\n      let wheelchairDisplayName = 'Wheelchair';\n\n      if (!_lodash.default.isEmpty(tripTravelNeeds)) {\n        if (!_lodash.default.isArray(tripTravelNeeds)) {\n          // Only one item\n          tripTravelNeeds = [tripTravelNeeds];\n        }\n\n        tripTravelNeeds.forEach(function (item) {\n          const count = parseInt(item.count, 10) || 1;\n          const name = item.travelNeedTypeName;\n          const displayName = item.displayName;\n\n          if (name === _travelNeedType.AMBULATORY_TRAVELNEED_TYPE) {\n            ambulatoryDisplayName = displayName;\n            totalAmbulatory += count;\n          } else if (name === _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE) {\n            wheelchairDisplayName = displayName;\n            totalWheelchair += count;\n          } else {\n            let text = {};\n\n            if (count === 1 || typeof item.count === 'undefined') {\n              text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${displayName}`);\n            } else {\n              text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${count} ${displayName}`);\n            }\n\n            travelNeeds.push(text);\n          }\n        });\n\n        if (totalAmbulatory > 0) {\n          let text = {};\n          text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${totalAmbulatory} ${ambulatoryDisplayName}`);\n          travelNeeds.push(text);\n        }\n\n        if (totalWheelchair > 0) {\n          let text = {};\n          text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${totalWheelchair} ${wheelchairDisplayName}`);\n          travelNeeds.push(text);\n        }\n      }\n\n      return travelNeeds;\n      /* eslint-enable newline-after-var */\n    }\n\n  }\n\n  _exports.default = TravelNeedsCell;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/component\", [\"exports\", \"react\", \"adept-iq/pods/components/generic-widgets/ember-react-table/react-component\", \"adept-iq/pods/components/generic-widgets/ember-react-table/classes/gridwidget\"], function (_exports, _react, _reactComponent, _gridwidget) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reactComponent.default.extend({\n    reactVirtualGrid: null,\n    // get a handle to the Grid, so it can be updated when ever data is changed\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    socket: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    maximizer: Ember.inject.service(),\n    user: Ember.inject.service(),\n    store: Ember.inject.service(),\n    getCoreModelNameByWidgetRecord: Ember.computed.alias('activeContext.topActiveContext.getCoreModelNameByWidgetRecord'),\n    widgetStateOberserver: Ember.observer('widgetState', function () {\n      // Maximize widget may not have widgetState ready so update React component when it is ready.\n      if (this.reactVirtualGrid) {\n        this.reactVirtualGrid.updateWidgetState(this.get('widgetState'));\n      }\n    }),\n\n    fetchModelbyWidgetRecord(widgetRecord) {\n      if (!widgetRecord) return;\n      let coreModelName = this.get('config.modelName');\n      coreModelName = this.get('getCoreModelNameByWidgetRecord')(coreModelName, widgetRecord);\n      const data = this.get('store').peekRecord(coreModelName, widgetRecord.id);\n      return data;\n    },\n\n    fetchModelsbyCheckedRowIds(checkedRowIds) {\n      const data = [];\n      checkedRowIds.forEach(checkedIdObj => {\n        data.push(this.get('store').peekRecord(checkedIdObj.model, checkedIdObj.id));\n      });\n      return data;\n    },\n\n    rollbackCache() {\n      if (this.reactVirtualGrid) {\n        this.reactVirtualGrid.rollbackCache();\n      }\n    },\n\n    forceUpdateGrids() {\n      if (this.reactVirtualGrid) {\n        this.reactVirtualGrid.forceUpdateGrids();\n      }\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    renderTable() {\n      const onWidgetStateUpdateHandler = this.get('onWidgetStateUpdateHandler');\n      const rowCheckBtnSelectHandler = this.get('onSelectCheckBtnHandler');\n      const rowCheckBtnUnSelectHandler = this.get('onUnSelectCheckBtnHandler');\n      const rowReorderHandler = this.get('rowReorderHandler');\n      const onCheckAllHandler = this.get('onCheckAll');\n      const onUnCheckAllHandler = this.get('onUnCheckAll');\n      const onRowRightClick = this.get('onRowRightClick');\n      const onColumnClick = this.get('onColumnClick');\n      const loadMoreRows = this.get('loadMoreRows');\n      const rowStyleHandler = this.get('rowStyleHandler');\n      const checkedRowIds = this.get('checkedRowIds');\n      const disabledRowIds = this.get('disabledRowIds');\n      const hiddenRowIds = this.get('hiddenRowIds');\n      const isFurtherSelectionAllowed = this.get('isFurtherSelectionAllowed');\n      const fetchModelbyWidgetRecord = this.get('fetchModelbyWidgetRecord').bind(this);\n      const fetchModelsbyCheckedRowIds = this.get('fetchModelsbyCheckedRowIds').bind(this); //build config\n\n      const gridConfig = this.get('config');\n      const widgetState = this.get('widgetState');\n      const modelName = this.get('modelName');\n      const visibleColumns = this.get('visibleColumns');\n      const totalWidgetCount = this.get('totalWidgetCount'); //This works - though not a ideal solution. The dimensions needs to be in sync when User resizes the grid. TODO Ashraf\n      // Set ref to column widget\n\n      this.get('setServerDataTableRef')(this);\n      const {\n        columnBody,\n        width,\n        height\n      } = this.getContainerDimension();\n      columnBody.css('overflow', 'hidden');\n      const currentWidgetInstanceId = this.get('widgetInstanceId');\n      const isRoleSupervisor = this.user.isRoadSupEnable(false);\n      const showGearIcon = isRoleSupervisor;\n      const isMaximized = this.get('isMaximized');\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const selectAllChecked = this.get('selectAllChecked');\n      this.reactRender(_react.default.createElement(_gridwidget.default, {\n        ref: gridRef => {\n          this.reactVirtualGrid = gridRef;\n        },\n        widgetInstanceId: currentWidgetInstanceId,\n        config: gridConfig,\n        widgetState: widgetState,\n        width: width,\n        height: height,\n        modelName: modelName,\n        onLazyLoader: loadMoreRows,\n        onWidgetStateUpdateHandler: onWidgetStateUpdateHandler,\n        rowCheckBtnSelectHandler: rowCheckBtnSelectHandler,\n        rowCheckBtnUnSelectHandler: rowCheckBtnUnSelectHandler,\n        rowReorderHandler: rowReorderHandler,\n        onCheckAllHandler: onCheckAllHandler,\n        onUnCheckAllHandler: onUnCheckAllHandler,\n        onRowRightClick: onRowRightClick,\n        onSortClickHandler: onColumnClick,\n        rowStyleHandler: rowStyleHandler,\n        fetchModelbyWidgetRecord: fetchModelbyWidgetRecord,\n        fetchModelsbyCheckedRowIds: fetchModelsbyCheckedRowIds,\n        checkedRowIds: checkedRowIds,\n        disabledRowIds: disabledRowIds,\n        hiddenRowIds: hiddenRowIds,\n        isFurtherSelectionAllowed: isFurtherSelectionAllowed,\n        isMaximized: isMaximized,\n        isTraversalEnabled: isTraversalEnabled,\n        selectAllChecked: selectAllChecked,\n        data: [],\n        visibleColumns: visibleColumns,\n        showGearIcon: showGearIcon,\n        totalWidgetCount: totalWidgetCount,\n        useTabletWidth: isRoleSupervisor\n      }));\n    },\n\n    didInsertElement() {\n      this.renderTable();\n    },\n\n    didRender() {\n      this._super(...arguments);\n\n      const checkedRowIds = this.get('checkedRowIds');\n      const disabledRowIds = this.get('disabledRowIds');\n      const isFurtherSelectionAllowed = this.get('isFurtherSelectionAllowed');\n      const hiddenRowIds = this.get('hiddenRowIds');\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const selectAllChecked = this.get('selectAllChecked'); //console.log(\"Tabel-widget didRender modelName \", this.get(\"modelName\"));\n\n      const data = this.get('widgetRecords') || [];\n      const totalWidgetCount = this.get('totalWidgetCount'); //console.log(\" data length\", data.length);\n\n      const visibleColumns = this.get('visibleColumns');\n\n      if (this.reactVirtualGrid) {\n        this.reactVirtualGrid.updateSelectionDataAndVisibility(data, checkedRowIds, disabledRowIds, isFurtherSelectionAllowed, hiddenRowIds, visibleColumns, totalWidgetCount, isTraversalEnabled, selectAllChecked);\n      }\n    },\n\n    getContainerDimension() {\n      const columnBody = Ember.$(this.element).closest('.column-widget-body');\n      const width = columnBody.outerWidth();\n      const height = columnBody.outerHeight();\n      return {\n        columnBody,\n        width,\n        height\n      };\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      if (this._resizeObserver) {\n        this._resizeObserver.disconnect();\n\n        this._resizeObserver = null;\n      }\n    },\n\n    // override this to resize 3rd party integrations (e.g. map)\n    onWidgetResize() {\n      if (this.get('isDestroyed')) return;\n      const {\n        width,\n        height\n      } = this.getContainerDimension();\n\n      if (this.reactVirtualGrid) {\n        this.reactVirtualGrid.updateDimension(width, height);\n      }\n    },\n\n    onScroll() {\n      if (this.reactVirtualGrid) {\n        this.reactVirtualGrid.hideContextMenu();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-table/react-component\", [\"exports\", \"react-dom\"], function (_exports, _reactDom) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    /**\n     * Renders a react component as the current ember element\n     * @param {React.Component} reactComponent. e.g., <HelloWorld />\n     */\n    reactRender(reactComponent) {\n      _reactDom.default.render(reactComponent, this.element);\n    },\n\n    /**\n     * Removes a mounted React component from the DOM and\n     * cleans up its event handlers and state.\n     */\n    unmountReactElement() {\n      _reactDom.default.unmountComponentAtNode(this.element);\n    },\n\n    /**\n     * Cleans up the rendered react component as the ember\n     * component gets destroyed\n     */\n    willDestroyElement() {\n      this._super();\n\n      this.unmountReactElement();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-widget/classes/checkbox-row\", [\"exports\", \"ember-light-table/classes/Row\"], function (_exports, _Row) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class CheckboxRow extends _Row.default {}\n\n  _exports.default = CheckboxRow;\n  CheckboxRow.reopen({\n    activeContext: null,\n    isLastChecked: false,\n    isSelected: false,\n    isAlertCheckBox: false,\n    record: Ember.computed.alias('content'),\n    id: Ember.computed.alias('content.id'),\n    isDisabled: Ember.computed.readOnly('record.isDisabled'),\n    isChecked: Ember.computed('activeContext.checkedItems.[]', {\n      get() {\n        const record = this.get('record');\n        return this.get('activeContext').isRecordChecked(record);\n      },\n\n      set(key, value) {\n        const record = this.get('record');\n        this.get('activeContext').setRecordsChecked([record], value);\n        return value;\n      }\n\n    })\n  });\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-widget/classes/filter-column\", [\"exports\", \"ember-light-table/classes/Column\", \"adept-iq/config/column-types\", \"adept-iq/config/filter-types\", \"adept-iq/utils/filters\"], function (_exports, _Column, _columnTypes, _filterTypes, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  class FilterColumn extends _Column.default {}\n\n  _exports.default = FilterColumn;\n  FilterColumn.reopen({\n    startDate: null,\n    id: null,\n    config: null,\n    filterTypeId: null,\n    filterValues: null,\n    valuePathMap: Ember.computed('valuePaths', function () {\n      const valuePaths = this.get('valuePaths');\n      if (!valuePaths) return {};\n      const valuePathMap = valuePaths.reduce((obj, _ref) => {\n        let {\n          modelName,\n          valuePath\n        } = _ref;\n        obj[modelName] = valuePath;\n        return obj;\n      }, {});\n      return valuePathMap;\n    }),\n    columnType: Ember.computed('config.type', function () {\n      const columnTypeId = this.get('config.type');\n\n      const columnType = _columnTypes.default.findBy('id', columnTypeId);\n\n      if (!columnType) {\n        /*eslint-disable */\n        throw `no column type with id '${columnTypeId}'`;\n        /*eslint-enable */\n      }\n\n      return columnType;\n    }),\n    filterType: Ember.computed('filterTypeId', function () {\n      const filterTypeId = this.get('filterTypeId');\n      const filterType = _filterTypes.filterTypesHash[filterTypeId];\n\n      if (!filterType) {\n        return _filterTypes.nullFilter;\n      }\n\n      return filterType;\n    }),\n    shouldDisableFilterInput: Ember.computed('filterType', 'hidden', function () {\n      const filterType = this.get('filterType');\n      const hidden = this.get('hidden');\n      return filterType.arity === 0 || hidden;\n    }),\n    filterTypes: Ember.computed('columnType', function () {\n      const columnType = this.get('columnType');\n      return columnType.filterTypes;\n    }),\n    isFiltered: Ember.computed('filterType', 'filterValues', function () {\n      const filterType = this.get('filterType');\n      const filterValues = this.get('filterValues');\n      return (0, _filters.testFilterValues)(filterType, filterValues);\n    }),\n    filterNode: Ember.computed('filterType', 'filterValues', 'config.{alternateValuePath,valuePath,format}', function () {\n      const filterType = this.get('filterType');\n      const startDate = this.get('startDate');\n      let filterValues = this.get('filterValues') || [];\n      if (!(0, _filters.testFilterValues)(filterType, filterValues)) return null;\n      filterValues = filterValues.map(filterValue => filterType.parseValue(filterValue, startDate));\n      const valuePath = this.get('config.alternateValuePath') ? this.get('config.alternateValuePath') : this.get('config.valuePath');\n      return (0, _filters.buildValueFilterNode)(filterType, valuePath, filterValues, this.get('config.format'));\n    })\n  });\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"lodash\", \"ember-light-table\", \"moment\", \"adept-iq/classes/data-joins/column-widget\", \"adept-iq/pods/components/generic-widgets/ember-react-widget/classes/filter-column\", \"adept-iq/utils/compute-ordered-ids\", \"ember-concurrency\", \"papaparse\", \"adept-iq/utils/mobile\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/remove-focus\", \"adept-iq/utils/rql-generators\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\", \"adept-iq/config/filter-types\", \"adept-iq/config/environment\", \"adept-iq/config/widget-events\"], function (_exports, _component, _lodash, _emberLightTable, _moment, _columnWidget, _filterColumn, _computeOrderedIds, _emberConcurrency, _papaparse, _mobile, _mappedPermIds, _removeFocus, _rqlGenerators, _filters, _sorts, _filterTypes, _environment, _widgetEvents) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.pathToModel = _exports.default = void 0;\n  // const generateUUID = () => '_' + Math.random().toString(36).substr(2, 9);\n  const {\n    readOnly\n  } = Ember.computed;\n  const DEFAULT_COLUMN_WIDTH = 100;\n  const MIN_COLUMN_WIDTH = 50;\n  const CHECKBOX_COLUMN_WIDTH = 30; // number of records to load at a time while scrolling\n\n  const PAGINATION_LIMIT = 3000;\n  const PAGINATION_TRIGGER_OFFSET = 50; // time to wait between refreshing adjacent widgets\n  // const STAGGERING_INTERVAL = 50;\n\n  const COUNT_UPDATE_INTERVAL = 4000;\n  const MAX_ROUTE_SELECTED = 300;\n\n  const toPixels = x => `${x}px`;\n\n  const fromPixels = x => parseInt(x.split('px')[0], 10); // const MAX_STATE_INST = 'max_state_inst';\n\n\n  const pathToModel = {\n    'travelNeeds': 'travel-need-type',\n    'serviceNeeds': 'service-need-type',\n    'vehicleType': 'vehicle-type'\n  };\n  _exports.pathToModel = pathToModel;\n  const COLUMN_ARRAY_FIELDS = ['serviceNeeds'];\n\n  var _default = _component.default.extend({\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    stopsReorder: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    interaction: Ember.inject.service(),\n    work: Ember.inject.service(),\n    socket: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    coreEntityPopulator: Ember.inject.service(),\n    classNames: ['column-widget'],\n    classNameBindings: ['disabled'],\n    // overload this with a static config object\n    config: null,\n    limit: PAGINATION_LIMIT,\n    offset: 0,\n    paginationEnabled: true,\n    tableActions: null,\n    allowedTableActions: null,\n    singleActions: null,\n    bulkActions: null,\n    records: null,\n    visibleRecords: null,\n    searchText: '',\n    isSearchEnabled: false,\n    isSearchAllowed: true,\n    // set for demo\n    isFilterAllowed: true,\n    // set for demo\n    isTraversalAllowed: true,\n    // set by permission\n    isCellEditAllowed: false,\n    localQuickFilters: null,\n    table: null,\n    dataJoin: null,\n    lastRowClicked: false,\n    inlineRowMenu: null,\n    inlineRowMenuPosition: null,\n    refreshSync: false,\n    resetScroll: false,\n    isPaginating: false,\n    filterQueryString: null,\n    isFurtherSelectionAllowed: null,\n    selectionInProgress: false,\n    selectAllChecked: false,\n    traversalFilterQuery: null,\n    traversalFilterParams: null,\n    implicitFilterParams: null,\n    widgetRecords: null,\n    updatePayloads: null,\n    widgetInstanceId: null,\n    totalWidgetCount: 0,\n    previousCompoundFilterString: '',\n    //to prevent loaddata from updateColumn in initial compononent state\n    previousSortString: null,\n    maxRecordLimit: PAGINATION_LIMIT,\n    disabledRowIds: null,\n    hiddenRowIds: null,\n    serverDataTable: null,\n    newRouteAction: null,\n    scrollClassName: null,\n    allowDisplayHash: null,\n    isScheduleDashboard: readOnly('workspace.isScheduleDashboard'),\n    isDispatchDashboard: readOnly('workspace.isDispatchDashboard'),\n    disableRightClick: Ember.computed.or('workspace.{isExported,reoptimizeInProgress}'),\n    displayDownloadOption: readOnly('workspace.reoptimizeInProgress'),\n    widgetClassName: Ember.computed('workspace.showGrid', function () {\n      if (this.get('workspace.showGrid')) {\n        return 'column-widget-body cell-show-border ';\n      }\n\n      return 'column-widget-body';\n    }),\n    getCoreModelNameByWidgetRecord: Ember.computed('activeContext.topActiveContext.getCoreModelNameByWidgetRecord', function () {\n      const checkCoreModel = this.get('activeContext.topActiveContext.getCoreModelNameByWidgetRecord');\n      return checkCoreModel;\n    }),\n    fetchedIdDict: null,\n    fetchedRows: Ember.computed('fetchedIdDict', function () {\n      const fetchedIdDict = this.get('fetchedIdDict');\n      return Object.keys(fetchedIdDict).length;\n    }),\n    checkedRowIds: Ember.computed('activeContext.topActiveContext.checkedItems', function () {\n      const checkedItems = this.get('activeContext.topActiveContext.checkedItems');\n      const modelNames = Array.isArray(this.get('config.modelName')) ? this.get('config.modelName') : [this.get('config.modelName')];\n      const widgetId = this.widget.id;\n      return checkedItems.reduce((ids, item) => {\n        // get checked row ids for a specific widget id with same type\n        if (modelNames.includes(item.modelName) && item.widgetId === widgetId) {\n          ids.push({\n            model: item.modelName,\n            id: item.record.id\n          });\n        }\n\n        return _lodash.default.uniqWith(ids, _lodash.default.isEqual);\n      }, []);\n    }),\n    checkedRowCount: Ember.computed('checkedRowIds', 'selectAllChecked', 'totalWidgetCount', 'isTraversalEnabled', function () {\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const checkedRowIds = this.get('checkedRowIds');\n      const selectAllChecked = this.get('selectAllChecked');\n      const totalWidgetCount = this.get('totalWidgetCount');\n\n      if (isTraversalEnabled) {\n        return checkedRowIds.length;\n      }\n\n      return selectAllChecked ? totalWidgetCount : checkedRowIds.length;\n    }),\n    sortId: Ember.computed.alias('widget.state.sortId'),\n    sortAsc: Ember.computed.alias('widget.state.sortAsc'),\n    tileSize: Ember.computed.alias('workspace.tileSize'),\n    tileSpacing: Ember.computed.alias('workspace.tileSpacing'),\n    isLoading: false,\n    isError: false,\n    isServerDataDependency: true,\n    // Ember-react-table set this true\n    isMaximized: Ember.computed('maximizer.maximizedWidget', 'widget', function () {\n      return this.get('maximizer.maximizedWidget') === this.get('widget');\n    }),\n    useBulkActions: Ember.computed.gt('checkedItemsCount', 1),\n    isRowInCheckedRows: Ember.computed('lastRowClicked', 'checkedRowIds.[]', function () {\n      const lastRowClicked = this.get('lastRowClicked');\n      const checkedRowIds = this.get('checkedRowIds');\n\n      if (!lastRowClicked) {\n        return false;\n      }\n\n      return checkedRowIds.some(obj => {\n        if (lastRowClicked.coreModel) {\n          return lastRowClicked.id === obj.id && lastRowClicked.coreModel === obj.model;\n        }\n\n        return lastRowClicked.id === obj.id;\n      });\n    }),\n    showBulkActions: Ember.computed.and('useBulkActions', 'isRowInCheckedRows'),\n    showSingleActions: Ember.computed.equal('showBulkActions', false),\n    checkedRowsCount: Ember.computed('table.rows.@each.isChecked', function () {\n      return this.get('table.rows').filterBy('isChecked').length;\n    }),\n    checkedItemsCount: Ember.computed('checkedItems.[]', function () {\n      const checkedItems = this.get('checkedItems') || [];\n      return checkedItems.length;\n    }),\n    checkedItems: Ember.computed('activeContext.topActiveContext.checkedItems.[]', function () {\n      const widgetId = this.widget.id;\n      const modelName = this.get('config.modelName');\n      const checkedItems = this.get('activeContext.topActiveContext.checkedItems') || [];\n      const items = checkedItems.filter(storeRecord => {\n        const coreModelName = this.get('activeContext.topActiveContext').getCoreModelNameByStoreRecord(modelName, storeRecord); // filter records for a specific widget id with same type\n\n        return storeRecord.modelName === coreModelName && storeRecord.widgetId === widgetId;\n      });\n      const uniqueItems = [...new Set(items.map(item => item.record))];\n      return uniqueItems;\n    }),\n    isFiltered: Ember.computed('table.columns.@each.{isFiltered}', function () {\n      return this.get('table.columns').isAny('isFiltered');\n    }),\n    visibleColumns: Ember.computed('table.columns', function () {\n      const tableColumns = this.get('table.columns');\n      const visibleColumns = [];\n      tableColumns.forEach(column => {\n        const columnConfig = column.config;\n\n        if (!column.hidden && columnConfig) {\n          if (!columnConfig.unAvailable && column.allowColumn) {\n            visibleColumns.push(columnConfig);\n          }\n        }\n      });\n      return visibleColumns;\n    }),\n    tableColumns: Ember.computed('workspace.startDate', 'config.columns', function () {\n      const tableColumns = [{\n        id: 'checkbox',\n        valuePath: 'checked',\n        cellComponent: 'table/cells/check-box',\n        component: 'table/columns/check-box',\n        sortable: false,\n        width: _mobile.isTouchDevice ? '70px' : toPixels(CHECKBOX_COLUMN_WIDTH)\n      }];\n      const columnConfigs = this.get('config.columns');\n      const orderedColumnIds = (0, _computeOrderedIds.default)(columnConfigs);\n      const startDate = this.get('workspace.startDate');\n      orderedColumnIds.forEach(id => {\n        const config = columnConfigs.findBy('id', id);\n        let allowColumn = this.get('allowDisplayHash')[config.allowDisplayAttr]; // disable a specific column depending if allowDisplayAttr exist in config\n\n        allowColumn = Ember.isPresent(allowColumn) ? allowColumn : true;\n        const tableColumn = {\n          id: id,\n          component: 'table/columns/filter-capable',\n          cellClassNames: config.id,\n          classNames: config.id,\n          label: config.label,\n          cellDesc: config.cellDesc,\n          valuePath: `${config.valuePath}`,\n          valuePaths: config.valuePaths,\n          hidden: config.hidden || config.unAvailable || !allowColumn,\n          allowColumn,\n          resizable: true,\n          minResizeWidth: MIN_COLUMN_WIDTH,\n          width: toPixels(config.defaultWidth || DEFAULT_COLUMN_WIDTH),\n          startDate,\n          config\n        };\n\n        if (config.editable && this.isCellEditAllowed) {\n          if (config.type === 'enum') {\n            tableColumn.cellComponent = 'table/cells/user-editable-enum';\n            tableColumn.options = config.options;\n            tableColumn.allowMultiple = config.allowMultiple;\n          } else {\n            tableColumn.cellComponent = 'table/cells/user-editable';\n          }\n        } else if (config.type.includes('enum')) {\n          tableColumn.cellComponent = 'table/cells/text-extension';\n        } else {\n          tableColumn.cellComponent = 'table/cells/base-cell';\n        }\n\n        if (config.highlightable) {\n          tableColumn.cellClassNames = ['highlightable'];\n        }\n\n        if (['date', 'datetime', 'time', 'datetimeflatpickr'].includes(config.type) && config.format) {\n          tableColumn.format = value => {\n            return Ember.isEmpty(value) ? value : (0, _moment.default)(value).format(config.format);\n          };\n\n          switch (config.type) {\n            case 'date':\n            case 'datetimeflatpickr':\n            case 'datetime':\n              tableColumn.parse = value => {\n                return (0, _moment.default)(value, config.format).toDate();\n              };\n\n              break;\n\n            case 'time':\n              tableColumn.parse = (timeString, originalValue) => {\n                const date = (0, _moment.default)(originalValue).format(_environment.default.dateTimeFormat.dateMoment);\n                const newValue = (0, _moment.default)(`${date} ${timeString}`, _environment.default.dateTimeFormat.dateTimeMoment).toDate();\n                return newValue;\n              };\n\n              break;\n\n            default:\n              break;\n          }\n        }\n\n        tableColumns.push(tableColumn);\n      }); // fills the rest of the space with an empty column\n\n      tableColumns.push({\n        id: 'spacer',\n        width: '100%',\n        sortable: false,\n        isResizable: true\n      });\n      return tableColumns;\n    }),\n    click: function (event) {\n      if (['fa fa-search active-button', 'column-widget-search-box data-test-search-box'].includes(event.target.className)) {\n        return false;\n      }\n\n      (0, _removeFocus.removeFocus)();\n    },\n    sort: Ember.computed('sortId', 'sortAsc', function () {\n      const value = this.get('sortAsc') ? `${this.get('sortId')}` : `-${this.get('sortId')}`;\n      return value;\n    }),\n    quickFiltersExist: Ember.computed('widgetState', function () {\n      const quickFilters = this.get('widgetState.quickFilters');\n\n      if (Ember.isPresent(quickFilters) && quickFilters.length > 0) {\n        return true;\n      }\n\n      return false;\n    }),\n    quickFilters: Ember.computed('widgetState.quickFilters', function () {\n      const quickFilters = this.get('widgetState.quickFilters') || [];\n      const localQuickFilters = this.get('localQuickFilters');\n      const widgetInstanceId = `${this.get('widget.typeId')}_${this.get('widget.id')}`;\n\n      if (Ember.isEmpty(localQuickFilters)) {\n        // eslint-disable-next-line ember/no-side-effects\n        const newQuickFilters = (0, _lodash.cloneDeep)(quickFilters);\n        newQuickFilters.forEach(filter => {\n          filter.widgetInstanceId = widgetInstanceId;\n        }); // eslint-disable-next-line ember/no-side-effects\n\n        this.set('localQuickFilters', newQuickFilters || []);\n      } else {\n        const newLocalQuickFilters = []; // add newly created filter to local array of quick filters\n\n        quickFilters.forEach(newFilter => {\n          const exist = localQuickFilters.find(currFilter => currFilter.id === newFilter.id);\n\n          if (!exist) {\n            localQuickFilters.push((0, _lodash.cloneDeep)(newFilter));\n          }\n        }); // remove filter from local array of quick filters\n\n        localQuickFilters.forEach(currFilter => {\n          const exist = quickFilters.find(newFilter => currFilter.id === newFilter.id);\n\n          if (exist) {\n            newLocalQuickFilters.push(currFilter);\n          }\n        }); // eslint-disable-next-line ember/no-side-effects\n\n        this.set('localQuickFilters', newLocalQuickFilters);\n      }\n\n      return this.get('localQuickFilters');\n    }),\n    widgetState: Ember.computed('workspace.widgetStates', 'widget.typeId', function () {\n      const widgetStates = this.get('workspace.widgetStates') || {};\n      const widgetTypeId = this.get('widget.typeId');\n      const widgetState = widgetStates[widgetTypeId] || {};\n      return widgetState;\n    }),\n\n    setupQuickFilters() {\n      const widgetTypeId = this.get('widget.typeId');\n      this.set('scrollClassName', `column-widget-filters-scroll-${widgetTypeId}`);\n    },\n\n    // populate allowDisplayHash for columns in column widget attribute called allowDisplayAttr\n    configureAllowDisplayHash() {\n      this.set('allowDisplayHash', {\n        allowFundingAgency: this.get('booking').getAllowFundingAgency()\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.get('widgetService').setWidgetModelMap(this.get('config.widgetName'), this.get('config.modelName'));\n      const isMaximized = this.get('isMaximized');\n      this.configureAllowDisplayHash(); // widget records setup\n\n      this.set('widgetRecords', []);\n      this.set('updatePayloads', []);\n      this.set('disabledRowIds', []);\n      this.set('hiddenRowIds', []);\n      this.set('fetchedIdDict', {});\n      this.set('isFurtherSelectionAllowed', true);\n      const widgetId = `${this.get('config.modelName')}_${this.get('widget.id')}${isMaximized ? '_maximized' : ''}`; // this will be unique id\n\n      this.set('widgetInstanceId', widgetId);\n      this.setupReceiveData();\n      this.setupQuickFilters();\n      const table = new _emberLightTable.default([], [], {\n        enableSync: false\n      });\n\n      const dataJoin = _columnWidget.default.create({\n        table,\n        activeContext: this.get('activeContext.topActiveContext'),\n        work: this.get('work'),\n        modelName: this.get('config.modelName')\n      });\n\n      const permIds = [_mappedPermIds.default.downloadRoutes, _mappedPermIds.default.downloadStops, _mappedPermIds.default.downloadTrips, _mappedPermIds.default.downloadVehicles, _mappedPermIds.default.downloadDrivers, _mappedPermIds.default.downloadMessages, _mappedPermIds.default.downloadAlerts, // mappedPermIds.downloadMaps,\n      _mappedPermIds.default.downloadRoles, _mappedPermIds.default.downloadUsers, _mappedPermIds.default.downloadSubscriptions, _mappedPermIds.default.downloadPassengers, _mappedPermIds.default.downloadZones //mappedPermIds.downloadRoadSupervisors,\n      ];\n      this.setProperties({\n        table,\n        dataJoin,\n        records: [],\n        visibleRecords: [],\n        disabledTableActions: [],\n        tableActions: [{\n          id: 'print',\n          permIds,\n          name: 'Download',\n          action: () => {\n            this.exportData();\n          }\n        }]\n      });\n      this.set('saveFilterList', []); // Display Download option alone after releasing the route\n\n      if (this.get('displayDownloadOption') && this.get('isScheduleDashboard')) {\n        this.set('allowedTableActions', [{\n          id: 'print',\n          permIds,\n          name: 'Download',\n          action: () => {\n            this.exportData();\n          }\n        }]);\n      } else {\n        this.set('allowedTableActions', this.get('tableActions'));\n      }\n\n      this.configureSearchFilterPermission();\n      this.set('widget.models', _lodash.default.castArray(this.get('config.widgetName')));\n\n      this._onScroll = () => {\n        if (this.get('serverDataTable')) this.get('serverDataTable').onScroll();\n      };\n\n      this.setupActiveQuickFilter();\n    },\n\n    setupActiveQuickFilter() {\n      if (this.get('isMaximized')) {\n        const maximizedWidget = this.get('maximizer.maximizedWidget');\n        const maximizedWidgetInstanceId = `${maximizedWidget.typeId}_${maximizedWidget.id}`;\n        const widgetInstanceId = `${this.get('widget.typeId')}_${this.get('widget.id')}`;\n        const localQuickFilters = this.get('quickFilters') || [];\n        const activeQuickFilter = this.get('maximizer.activeQuickFilter');\n\n        if (maximizedWidgetInstanceId === widgetInstanceId) {\n          if (Ember.isPresent(activeQuickFilter)) {\n            localQuickFilters.forEach(filter => {\n              if (filter.id === activeQuickFilter.id) {\n                filter.active = true;\n              } else {\n                filter.active = false;\n              }\n            });\n          } else {\n            localQuickFilters.forEach(filter => {\n              filter.active = false;\n            });\n          }\n        }\n      }\n    },\n\n    destroy() {\n      this.get('dataJoin').destroy();\n      this.get('table.columns').forEach(column => column.destroy());\n      this.get('table').destroy();\n      this._onScroll = null;\n\n      this._super(...arguments);\n    },\n\n    configureSearchFilterPermission() {\n      const configPermissions = this.get('workspace.configPermissions');\n      const widgetTypeId = this.get('widget.typeId');\n\n      if (!Ember.isNone(configPermissions)) {\n        const configPermission = configPermissions[widgetTypeId];\n\n        if (!Ember.isNone(configPermission.searchAllowed)) {\n          this.set('isSearchAllowed', configPermission.searchAllowed);\n        }\n\n        if (!Ember.isNone(configPermission.filterAllowed)) {\n          this.set('isFilterAllowed', configPermission.filterAllowed);\n        }\n\n        if (!Ember.isNone(configPermission.cellEditAllowed)) {\n          // @TODO RUX-325 will disable this feature for now, eventually it will return in R5.0+\n          this.set('isCellEditAllowed', false);\n        }\n      }\n    },\n\n    exportServerData(widgetColumns) {\n      const {\n        widgetName\n      } = this.get('config'); // For exporting the widget data, Need first character capital of the name\n\n      const widgetData = widgetName.charAt(0).toUpperCase() + widgetName.slice(1);\n      const filterString = this.get('widgetCompoundFilter');\n      this.get('widgetService').downloadServerData(widgetData, filterString).then(widgetRows => {\n        const transformedWidgetRows = this.applyTransformationData(widgetRows);\n        const sortedTransformedWidgetRows = this.applySortOrder(transformedWidgetRows);\n        const data = this.formatData(sortedTransformedWidgetRows, widgetColumns);\n        this.exportCsv(data);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }).catch(error => {\n        console.log(error); //eslint-disable-line no-console\n\n        this.get('notifications').warning('Download failed');\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      });\n    },\n\n    formatField(row, column) {\n      let value = row[column.valuePath];\n\n      if (Ember.isPresent(value)) {\n        if (column.type === 'time' || column.type === 'date' || column.type === 'datetime' || column.type === 'datetimeflatpickr') {\n          value = (0, _moment.default)(value).format(column.format);\n        } else if (column.type === 'enum-date') {\n          // The code for enum-date types is based on /app/pods/components/generic-widgets/ember-react-table/classes/availability-cell.js AvailabilityCell.getVehicleAvailabilities\n          const valueArray = value.map(dates => {\n            const startTime = (0, _moment.default)(dates.startTime);\n            const endTime = (0, _moment.default)(dates.endTime);\n            const now = (0, _moment.default)();\n\n            if (row.active && now.isBetween(startTime, endTime)) {\n              const formattedDates = [];\n              formattedDates.push(`*${startTime.format('MM-DD-YYYY')} - ${endTime.format('MM-DD-YYYY')}*`);\n              const formattedShiftStart = !_lodash.default.isNil(dates.shiftStart) ? (0, _moment.default)(dates.shiftStart).format('HH:mm') : '';\n              const formattedShiftEnd = !_lodash.default.isNil(dates.shiftEnd) ? (0, _moment.default)(dates.shiftEnd).format('HH:mm') : '';\n              const formattedShiftTimes = `${formattedShiftStart} - ${formattedShiftEnd}`;\n\n              if (dates.monday) {\n                formattedDates.push(`Monday ${formattedShiftTimes}`);\n              }\n\n              if (dates.tuesday) {\n                formattedDates.push(`Tuesday ${formattedShiftTimes}`);\n              }\n\n              if (dates.wednesday) {\n                formattedDates.push(`Wednesday ${formattedShiftTimes}`);\n              }\n\n              if (dates.thursday) {\n                formattedDates.push(`Thursday ${formattedShiftTimes}`);\n              }\n\n              if (dates.friday) {\n                formattedDates.push(`Friday ${formattedShiftTimes}`);\n              }\n\n              if (dates.saturday) {\n                formattedDates.push(`Saturday ${formattedShiftTimes}`);\n              }\n\n              if (dates.sunday) {\n                formattedDates.push(`Sunday ${formattedShiftTimes}`);\n              }\n\n              return formattedDates.join(';');\n            }\n\n            return null;\n          });\n          value = valueArray.compact().join(';;');\n        } else if (column.type.includes('enum')) {\n          value = JSON.stringify(value);\n        }\n      }\n\n      return value;\n    },\n\n    formatData(rows, columns) {\n      const exportableColumns = columns;\n      const fields = exportableColumns.map(column => {\n        return column.label;\n      });\n      const data = rows.map(row => {\n        return exportableColumns.map(column => {\n          return this.formatField(row, column);\n        });\n      });\n      return {\n        fields,\n        data\n      };\n    },\n\n    exportCsv(fieldsAndData) {\n      const csv = _papaparse.default.unparse(fieldsAndData, {\n        quotes: true,\n        quoteChar: '\"',\n        escapeChar: '\"',\n        escapeFormulae: true\n      });\n\n      const link = document.createElement('a');\n      const timestamp = (0, _moment.default)().format('YYYY-MM-DD_HH-mm-ss');\n      const {\n        title\n      } = this.get('config');\n      const filename = `${timestamp}_${title}.csv`;\n      const blob = new Blob([csv], {\n        type: 'text/csv;charset=utf-8;'\n      });\n      const url = URL.createObjectURL(blob);\n      link.setAttribute('href', url);\n      link.setAttribute('download', filename);\n      link.style.visibility = 'hidden';\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    exportData() {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const widgetColumns = this.get('visibleColumns');\n\n      if (this.get('isServerDataDependency')) {\n        this.exportServerData(widgetColumns);\n      } else {\n        const widgetRows = this.get('widgetRecords');\n        const data = this.formatData(widgetRows, widgetColumns);\n        this.exportCsv(data);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      if (!this.get('config')) {\n        // eslint-disable-next-line\n        throw \"static config property not found\";\n      } // bind screen scroll to close any opened drop down menus\n\n\n      Ember.$('.tile-dashboard-wrapper').on('scroll', this._onScroll);\n      this.onTableColumnsChange();\n      this.onWidgetStateChange();\n      this.reConfigureTableActions();\n      this.reConfigureSingleActions(); // this.resetDefaultWidgetState();\n\n      this.set('previousSortString', this.get('sort')); //to prevent loaddata from updateColumn in initial compononent state\n      // this.handleWidgetMaxMinState();\n\n      this.applyTraversalFilter(this.determineApplicableFilters()); // should be called when new widget is dragged from side drawer\n      /// for new widget is dragged from side drawer\n\n      const readyToLoadInitialData = this.get('widgetService').get('readyToLoadInitialData');\n\n      if (readyToLoadInitialData) {\n        this.get('loadWidgetTask').perform().then(() => {\n          this.applySelectionConstraints();\n        }).catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      }\n    },\n\n    async resetDefaultWidgetState() {\n      const defaultSortId = this.get('config.defaultSortId') || 'id';\n      const defaultSortAsc = this.get('config.defaultSortAsc') || true;\n      const widgetSortId = this.get('widget.state.sortId');\n      const store = this.get('store');\n      let limit;\n      if (this.get('isDestroyed')) return;\n\n      try {\n        const paginationLimit = await store.findRecord('internal-ui-config', 'Widgets_Pagination_Limit');\n        limit = parseInt(paginationLimit.get('value'), 0);\n      } catch (e) {\n        limit = PAGINATION_LIMIT;\n      }\n\n      if (Ember.isEmpty(widgetSortId)) {\n        this.get('widget').mergeState({\n          sortId: defaultSortId,\n          sortAsc: defaultSortAsc\n        });\n      }\n\n      this.set('offset', 0);\n      this.set('limit', limit);\n      this.set('maxRecordLimit', limit);\n    },\n\n    loadWidgetTask: (0, _emberConcurrency.task)(function* () {\n      let readyToLoadInitialData = this.get('widgetService').get('readyToLoadInitialData');\n\n      while (!_environment.default.APP.test && !readyToLoadInitialData) {\n        yield (0, _emberConcurrency.timeout)(1000);\n        readyToLoadInitialData = this.get('widgetService').get('readyToLoadInitialData');\n      }\n\n      yield this.loadWidgetData();\n    }).keepLatest(),\n    getTotalWidgetCountTask: (0, _emberConcurrency.task)(function* (modelName, countFilterString, dateQueryFields, selectedProviders) {\n      const widgetCount = yield this.get('widgetService').getTotalWidgetCount(modelName, countFilterString, dateQueryFields, selectedProviders);\n      this.set('totalWidgetCount', widgetCount);\n    }).keepLatest(),\n\n    /**\n     * Called when ver user changes filters, initial load etc\n     * When user paginates - loadMoreData gets called.\n     * This method\n     * @returns {Promise<void>}\n     */\n    async loadWidgetData() {\n      if (this.isDestroyed) {\n        return;\n      }\n\n      const recordFilterString = this.get('widgetCompoundFilter');\n      const countFilterString = this.get('countCompoundFilter');\n      const widgetName = this.get('config.widgetName');\n      const offset = this.get('offset');\n      const sort = this.get('sort');\n      const widgetInstanceId = this.get('widgetInstanceId');\n      const descReg = /^-/;\n      const columns = this.get('config.columns');\n      const prefix = sort.match(descReg) ? '-' : '';\n      const sortId = sort.replace(descReg, '');\n      const sortColumn = columns.find(c => c.id === sortId);\n      const store = this.get('store');\n      let limit;\n\n      try {\n        const paginationLimit = await store.findRecord('internal-ui-config', 'Widgets_Pagination_Limit');\n        limit = parseInt(paginationLimit.get('value'), 0);\n      } catch (e) {\n        limit = PAGINATION_LIMIT;\n      }\n\n      let sortValuePath = 'id';\n\n      if (sortColumn) {\n        sortValuePath = sortColumn.customSortPath ? sortColumn.customSortPath : sortColumn.valuePath;\n      } // refresh data so set previous unhandled updates to empty\n\n\n      this.set('updatePayloads', []);\n      this.set('isLoading', true);\n      this.set('previousCompoundFilterString', recordFilterString);\n      this.set('previousSortString', sort);\n      const dateQueryFields = this.get('widgetService').getDateQueryFields();\n      const selectedProviders = this.get('widgetService').getSelectedProviders();\n\n      try {\n        // this.set('totalWidgetCount', 0);\n        // Data and count are independent (count only needs the filter/date/providers,\n        // all known up front). Run them concurrently instead of sequentially — this\n        // removes one serial round-trip from every grid load (filter/sort/search/open).\n        const dataPromise = this.get('widgetService').loadData(widgetInstanceId, widgetName, recordFilterString, offset, limit, prefix + sortValuePath, dateQueryFields, selectedProviders).then(fetchedData => {\n          const fetchedIdDict = {};\n          fetchedData.forEach(d => {\n            fetchedIdDict[d.id] = true;\n          });\n          this.set('fetchedIdDict', fetchedIdDict);\n          this.notifyPropertyChange('fetchedIdDict');\n          return fetchedData;\n        });\n        const countPromise = this.get('getTotalWidgetCountTask').perform(widgetName, countFilterString, dateQueryFields, selectedProviders).catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n        await Promise.all([dataPromise, countPromise]);\n\n        if (this.isDestroyed) {\n          return;\n        }\n\n        this.set('isLoading', false);\n      } catch (e) {\n        if (this.isDestroyed) {\n          return;\n        }\n\n        this.set('isLoading', false);\n      }\n    },\n\n    willDestroyElement() {\n      this.$().off('keydown', this._onKeyDown);\n      this.$().off('mousedown', this._onMouseDown);\n      Ember.$('.tile-dashboard-wrapper').off('scroll', this._onScroll);\n      this.get('dataJoin').clear();\n\n      try {\n        if (typeof MutationObserver !== 'undefined' && this.get('mutationObserver')) {\n          this.get('mutationObserver').disconnect();\n        }\n      } catch (e) {\n        console.log(e); //eslint-disable-line no-console\n      }\n\n      this.get('widgetService').off(_widgetEvents.WIDGET_DATA_ACTION, this._handleWidgetAction);\n      this.get('widgetService').off(_widgetEvents.RECEIVE_DATA_LIST_EVENT, this._handleReceiveDataEventHandler);\n      this.get('widgetService').off(_widgetEvents.LOAD_MORE_DATA_LIST_EVENT, this._handleLoadMoreEventHandler);\n      this.get('widgetService').off(_widgetEvents.INITIAL_WIDGET_LOAD_EVENT, this._initialLoadEventHandler);\n      this.get('widgetService').off(_widgetEvents.ADD_TRAVERSAL_SELECTION_EVENT, this._traversalEventHandler);\n      this.get('widgetService').off(_widgetEvents.REMOVE_TRAVERSAL_SELECTION_EVENT, this._removeSelectionEventHandler);\n      this.get('widgetService').off(_widgetEvents.DESELECT_ALL_WIDGET_EVENT, this._deselectAllEventHandler);\n\n      if (this.get('loadWidgetTask.isRunning')) {\n        this.get('loadWidgetTask').cancelAll();\n      }\n\n      if (this.get('getTotalWidgetCountTask.isRunning')) {\n        this.get('getTotalWidgetCountTask').cancelAll();\n      } // when any one of widget is maximized, copy all component's  widget state to maximizer\n      // because when you minimized , we need to retain the all the  component's state\n      // const maximizer = this.get('maximizer');\n      // if (maximizer.isMaximized()) {\n      //   this.copyComponentStateToMaximizerService();\n      // }\n\n\n      this._super(...arguments);\n    },\n\n    setTableColumns() {\n      if (this.get('isDestroyed')) return;\n      const oldColumns = this.get('table.columns').slice();\n      const tableColumns = this.get('tableColumns');\n      this.set('table.columns', tableColumns.map(col => new _filterColumn.default(col)));\n      oldColumns.forEach(column => column.destroy());\n    },\n\n    updateTableColumns() {\n      if (this.get('isDestroyed')) return;\n      const state = this.get('widget.state') || {};\n      const config = this.get('config') || {};\n      const columns = this.get('table.columns');\n      const restrictSwapColumns = config.restrictSwapColumns;\n      let shouldResize = false;\n      let scrollLeft;\n      const body = this.$('.column-widget-body');\n\n      if (body) {\n        scrollLeft = this.$('.column-widget-body').scrollLeft();\n      }\n\n      if (columns) {\n        columns.forEach(column => {\n          const sortId = state.sortId || config.defaultSortId;\n\n          if (Ember.isPresent(sortId) && sortId === column.get('id')) {\n            let sortAsc;\n\n            if (Ember.isPresent(state.sortAsc)) {\n              sortAsc = state.sortAsc;\n            } else if (Ember.isPresent(config.defaultSortAsc)) {\n              sortAsc = config.defaultSortAsc;\n            } else {\n              sortAsc = true;\n            }\n\n            column.set('sorted', true);\n            column.set('ascending', sortAsc);\n          } else {\n            column.set('sorted', false);\n          }\n        });\n      }\n\n      const columnsHash = state.columns || {};\n      Object.entries(columnsHash).forEach(_ref => {\n        let [id, columnState] = _ref;\n        const column = columns.findBy('id', id);\n\n        if (!column) {\n          return;\n        }\n\n        if (Ember.isPresent(columnState.hidden)) {\n          column.set('hidden', columnState.hidden);\n          shouldResize = true;\n        }\n\n        if (Ember.isPresent(columnState.index) && !restrictSwapColumns) {\n          // +/- 1 accounts for checkbox column\n          const oldIndex = columns.indexOf(column) - 1;\n\n          if (columnState.index !== oldIndex) {\n            const swapColumn = columns.objectAt(1 + columnState.index);\n\n            if (swapColumn && swapColumn.id !== 'spacer') {\n              columns.replace(1 + columnState.index, 1, [column]);\n              columns.replace(1 + oldIndex, 1, [swapColumn]);\n              shouldResize = true;\n            }\n          }\n        }\n\n        ['filterTypeId', 'filterValues'].forEach(prop => {\n          // allow null value to overwrite\n          if (!columnState.hasOwnProperty(prop)) {\n            return;\n          }\n\n          column.set(prop, columnState[prop]);\n        });\n\n        if (Ember.isPresent(columnState.width)) {\n          column.set('width', toPixels(columnState.width));\n          shouldResize = true;\n        }\n      });\n\n      if (shouldResize) {\n        // resize at end of _next_ loop so that all changes are applied\n        Ember.run.next(() => {\n          if (Ember.isPresent(scrollLeft)) {\n            // wait an additional loop before restoring scroll position\n            Ember.run.next(() => {\n              Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n            });\n          }\n        });\n      }\n\n      this.notifyPropertyChange('visibleColumns');\n      this.buildQuery();\n      this.updateGrid();\n    },\n\n    /**\n     * Gets called when sorting and filtering / searching is done through filter window\n     */\n    updateGrid() {\n      const filterString = this.get('widgetCompoundFilter');\n      const sortString = this.get('sort');\n      const previousCompoundFilterString = this.get('previousCompoundFilterString');\n      const previousSortString = this.get('previousSortString');\n\n      if (filterString !== previousCompoundFilterString || sortString !== previousSortString) {\n        this.set('offset', 0);\n        this.set('limit', this.get('maxRecordLimit')); // debounce(this, 'loadWidgetData', 250);\n\n        this.get('loadWidgetTask').perform().catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      }\n    },\n\n    resizeBody() {\n      if (this.get('isDestroyed')) {\n        return;\n      }\n\n      const table = this.$('.lt-head-wrap table');\n      const widgetBody = this.$('.column-widget-body');\n\n      if (!table && !widgetBody) {\n        return;\n      }\n\n      const tableWidth = table ? table.width() : -Infinity;\n      const widgetWidth = widgetBody ? widgetBody.width() : -Infinity;\n      const width = Math.max(tableWidth, widgetWidth);\n      this.$('.ember-light-table').width(width);\n    },\n\n    clearData() {\n      this.set('records', []);\n      this.set('offset', 0);\n    },\n\n    setScrollLeft(scrollLeft) {\n      if (!this.$('.column-widget-body')) {\n        return;\n      }\n\n      this.$('.column-widget-body').scrollLeft(scrollLeft);\n    },\n\n    getWidgetIndex() {\n      if (this.get('maximizer.maximizedWidget') || !Ember.isPresent(this.element.closest('.grid-stack'))) {\n        return null;\n      }\n\n      const gridStack = this.element.closest('.grid-stack');\n      const gridStackItems = Array.from(gridStack.children).sort((a, b) => {\n        const yDiff = parseInt(a.getAttribute('data-gs-y'), 10) - parseInt(b.getAttribute('data-gs-y'), 10);\n\n        if (yDiff === 0) {\n          return parseInt(a.getAttribute('data-gs-x'), 10) - parseInt(b.getAttribute('data-gs-x'), 10);\n        }\n\n        return yDiff;\n      });\n      const gridStackItem = this.element.closest('.grid-stack-item');\n      return gridStackItems.indexOf(gridStackItem);\n    },\n\n    widgetCompoundFilter: Ember.computed('filterQueryString', 'traversalFilterQuery', 'searchText', 'isTraversalEnabled', function () {\n      const allFilters = this.calculateRecordFilters();\n      return this.filterArrayToExpression(allFilters);\n    }),\n\n    calculateRecordFilters() {\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const gridConfig = this.get('config');\n      const widgetName = gridConfig.widgetName;\n      const filterQueryString = this.get('filterQueryString') || '';\n      const traversalFilter = this.get('widgetService').getTraversalFilterQuery(widgetName) || this.get('traversalFilterQuery') || '';\n      const searchFilter = this.get('searchText') || '';\n      const allFilters = [];\n      this.populateImplicitFilter(allFilters);\n\n      if (!_lodash.default.isEmpty(filterQueryString)) {\n        allFilters.push(filterQueryString);\n      }\n\n      if (!_lodash.default.isEmpty(traversalFilter) && isTraversalEnabled) {\n        allFilters.push(traversalFilter);\n      }\n\n      if (!_lodash.default.isEmpty(searchFilter)) {\n        const searchRQL = this.getSearchTextRQL(searchFilter);\n\n        if (searchRQL) {\n          allFilters.push(searchRQL);\n        }\n      }\n\n      return allFilters;\n    },\n\n    filterArrayToExpression(allFilters) {\n      if (allFilters.length === 0) {\n        return '';\n      } // Can use reduce - Ashraf TODO\n\n\n      if (allFilters.length === 5) {\n        const filterQuery = (0, _rqlGenerators.andRQL)((0, _rqlGenerators.andRQL)((0, _rqlGenerators.andRQL)((0, _rqlGenerators.andRQL)(allFilters[0], allFilters[1]), allFilters[2]), allFilters[3]), allFilters[4]);\n        return encodeURIComponent(filterQuery);\n      }\n\n      if (allFilters.length === 4) {\n        const filterQuery = (0, _rqlGenerators.andRQL)((0, _rqlGenerators.andRQL)((0, _rqlGenerators.andRQL)(allFilters[0], allFilters[1]), allFilters[2]), allFilters[3]);\n        return encodeURIComponent(filterQuery);\n      }\n\n      if (allFilters.length === 3) {\n        const filterQuery = (0, _rqlGenerators.andRQL)((0, _rqlGenerators.andRQL)(allFilters[0], allFilters[1]), allFilters[2]);\n        return encodeURIComponent(filterQuery);\n      }\n\n      if (allFilters.length === 2) {\n        const filterQuery = (0, _rqlGenerators.andRQL)(allFilters[0], allFilters[1]);\n        return encodeURIComponent(filterQuery);\n      }\n\n      if (allFilters[0]) {\n        return encodeURIComponent(allFilters[0]);\n      }\n\n      return '';\n    },\n\n    countCompoundFilter: Ember.computed('filterQueryString', 'traversalFilterQuery', 'searchText', 'isTraversalEnabled', function () {\n      const allFilters = this.calculateRecordFilters();\n      this.populateCountFilter(allFilters);\n      return this.filterArrayToExpression(allFilters);\n    }),\n\n    populateImplicitFilter(allFilters) {\n      const implicitConditions = this.get('config.implicit.conditions') || [];\n      const implicitFilters = [];\n\n      for (const condition of implicitConditions) {\n        let compareFn;\n\n        switch (condition.type) {\n          case 'stringNeRQL':\n            compareFn = _rqlGenerators.stringNeRQL;\n            break;\n\n          case 'eqRQL':\n            compareFn = _rqlGenerators.eqRQL;\n            break;\n\n          case 'neRQL':\n            compareFn = _rqlGenerators.neRQL;\n            break;\n\n          default:\n            compareFn = _rqlGenerators.eqRQL;\n        }\n\n        const statusFilter = compareFn(condition.field, condition.value);\n        implicitFilters.push(statusFilter);\n      }\n\n      this.set('implicitFilterParams', implicitFilters);\n      const compoundFilter = implicitFilters.reduce((c, f) => {\n        const _c = c ? (0, _rqlGenerators.andRQL)(c, f) : f;\n\n        return _c;\n      }, null);\n\n      if (compoundFilter) {\n        allFilters.push(compoundFilter);\n      }\n    },\n\n    // eslint-disable-next-line no-unused-vars\n    populateCountFilter(allFilters) {},\n\n    getModelsValueFromStoreItems(modelName, searchTerm) {\n      const modelTypeMapper = this.get('store').peekAll(modelName).map(record => {\n        return {\n          id: record.id,\n          name: record.name,\n          displayName: record.displayName.trim().toLowerCase().replace(/ /, '')\n        };\n      });\n      return (0, _filters.applyFilterConversion)(searchTerm, _filterTypes.enumContains.id, modelTypeMapper);\n    },\n\n    getSearchTextRQL(searchString) {\n      const searchObject = searchString.trim().split('=');\n      const searchKey = searchObject.length > 1 ? searchObject[0] : null;\n      const searchValue = searchObject.length > 1 ? searchObject[1] : searchObject[0]; // Dummy search for potential matches.\n      // Currently, it ignores spaces.\n      // Additional cases can be added in the future.\n      // And regex will be preferred if more cases will be included\n\n      const adjustedSearchValue = [searchValue.trim().toLowerCase().replace(/ /, '')];\n      let dbFieldName, modelName;\n\n      if (searchKey) {\n        dbFieldName = this.getSearchDBFieldColumn(searchKey);\n        modelName = pathToModel[dbFieldName];\n      } else {\n        const widgetVisibleColumns = this.getSearchableColumns();\n        const likePredicates = widgetVisibleColumns.map(column => {\n          modelName = pathToModel[column.valuePath];\n          return (0, _rqlGenerators.stringLikeRQL)(column.valuePath, modelName ? this.getModelsValueFromStoreItems(modelName, adjustedSearchValue) : adjustedSearchValue);\n        });\n        return (0, _rqlGenerators.orRQL)(likePredicates);\n      } // If no store model is found for the provided search string,\n      // we must include a valid filter with a non-empty searchTerm.\n      // An empty object as searchTerm would exclude the filter from RQL.\n      // Therefore, we use the original search string provided by the user\n      // to construct a valid filter.\n\n\n      const searchTerm = modelName ? this.getModelsValueFromStoreItems(modelName, adjustedSearchValue) : adjustedSearchValue;\n      return (0, _rqlGenerators.stringLikeRQL)(dbFieldName, searchTerm.length < 1 ? adjustedSearchValue : [searchTerm]);\n    },\n\n    getSearchDBFieldColumn(fieldName) {\n      const lowerCaseFieldName = fieldName.replace(/\\s+/g, '').toLowerCase();\n      const searchableColumns = this.getSearchableColumns();\n\n      for (let i = 0; i < searchableColumns.length; i++) {\n        const column = searchableColumns[i];\n        const columnId = column.id;\n        const columnLabel = column.label;\n        const lowerCaseColumnId = columnId.replace(/\\s+/g, '').toLowerCase();\n        const lowerCaseColumnLabel = columnLabel.replace(/\\s+/g, '').toLowerCase();\n\n        if ([lowerCaseColumnId, lowerCaseColumnLabel].includes(lowerCaseFieldName)) {\n          return column.valuePath;\n        }\n      }\n\n      return null;\n    },\n\n    getSearchableColumns() {\n      const widgetVisibleColumns = this.get('visibleColumns');\n      return widgetVisibleColumns; //  return widgetVisibleColumns.filter((column) => column.searchable);\n    },\n\n    onTableColumnsChange: Ember.observer('tableColumns', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'setTableColumns');\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n    onWidgetStateChange: Ember.observer('widget.state', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n    onTableActionsChange: Ember.observer('tableActions.[]', 'disabledTableActions.[]', function () {\n      this.reConfigureTableActions();\n    }),\n\n    reConfigureTableActions() {\n      const configPermissions = this.get('workspace.configPermissions');\n      const disabledTableActions = this.get('disabledTableActions');\n      const actions = [];\n\n      if (!Ember.isNone(configPermissions)) {\n        const configPermission = configPermissions[this.get('widget.typeId')];\n\n        if (!Ember.isNone(configPermission) && !Ember.isNone(this.get('tableActions'))) {\n          this.get('tableActions').forEach(currAction => {\n            const permGranted = this.get('permissionLayer').permInUserHash(currAction.permId, currAction.permIds);\n\n            if (permGranted && !Ember.isNone(configPermission.tableActions) && !disabledTableActions.includes(currAction.id) && (configPermission.tableActions.includes(currAction.id) || configPermission.tableActions.includes('all'))) {\n              actions.push(currAction);\n            }\n          });\n          this.set('allowedTableActions', actions);\n        }\n      }\n    },\n\n    keyDown(event) {\n      const ltCell = event.target.closest('.lt-cell'); // need to exempt checkboxes to allow right arrow from checkbox col\n\n      const targetIsControl = event.target.tagName === 'INPUT' && event.target.type !== 'checkbox';\n\n      switch (event.key) {\n        case 'Escape':\n          {\n            const targetIsSearchBox = event.target.classList.contains('column-widget-search-box');\n\n            if (targetIsSearchBox) {\n              event.preventDefault();\n              this.set('isSearchEnabled', false);\n              this.$('.column-widget-search-button').focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowLeft':\n          {\n            if (!ltCell || targetIsControl) {\n              return;\n            }\n\n            event.preventDefault();\n            const previousCell = ltCell.previousElementSibling;\n\n            if (!previousCell) {\n              return;\n            }\n\n            const focusElement = previousCell.querySelector('.can-focus') || previousCell.firstElementChild;\n\n            if (focusElement) {\n              focusElement.focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowRight':\n          {\n            if (!ltCell || targetIsControl) {\n              return;\n            }\n\n            event.preventDefault();\n            const nextCell = ltCell.nextElementSibling;\n\n            if (!nextCell) {\n              return;\n            }\n\n            const focusElement = nextCell.querySelector('.can-focus') || nextCell.firstElementChild;\n\n            if (focusElement) {\n              focusElement.focus();\n            }\n\n            break;\n          }\n\n        case 'ArrowDown':\n          {\n            if (!ltCell) {\n              return;\n            }\n\n            event.preventDefault();\n            const row = ltCell.closest('.lt-row'); // an HTMLCollection isn't really an array\n\n            const rowChildren = [].slice.call(row.children);\n            const index = rowChildren.indexOf(ltCell);\n            const nextRow = row.nextElementSibling;\n\n            if (nextRow && nextRow.tagName !== 'OCCLUDED-CONTENT') {\n              // move table selection down one row\n              const tableRows = this.get('table.rows');\n              tableRows.setEach('selected', false);\n              const recordId = nextRow.getAttribute('data-record-id');\n              const nextTableRow = tableRows.findBy('content.id', recordId);\n              nextTableRow.set('selected', true); // move browser focus to same column in next row\n\n              const nextLtCell = nextRow.children[index];\n              const focusElement = nextLtCell.querySelector('.can-focus') || nextLtCell.firstElementChild;\n\n              if (focusElement) {\n                focusElement.focus();\n              }\n            }\n\n            break;\n          }\n\n        case 'ArrowUp':\n          {\n            if (!ltCell) {\n              return;\n            }\n\n            event.preventDefault();\n            const row = ltCell.closest('.lt-row'); // an HTMLCollection isn't really an array\n\n            const rowChildren = [].slice.call(row.children);\n            const index = rowChildren.indexOf(ltCell);\n            const previousRow = row.previousElementSibling;\n\n            if (previousRow && previousRow.tagName !== 'OCCLUDED-CONTENT') {\n              // move table selection down one row\n              const tableRows = this.get('table.rows');\n              tableRows.setEach('selected', false);\n              const recordId = previousRow.getAttribute('data-record-id');\n              const previousTableRow = tableRows.findBy('content.id', recordId);\n              previousTableRow.set('selected', true); // move browser focus to same column in previous row\n\n              const previousLtCell = previousRow.children[index];\n              const focusElement = previousLtCell.querySelector('.can-focus') || previousLtCell.firstElementChild;\n\n              if (focusElement) {\n                event.preventDefault();\n                focusElement.focus();\n              }\n            }\n\n            break;\n          }\n\n        case ' ':\n        case 'Enter':\n          {\n            const isColumn = event.target.classList.contains('table-base-column');\n\n            if (isColumn) {\n              event.preventDefault();\n              this.$(event.target).trigger('click');\n            }\n\n            break;\n          }\n\n        default:\n          break;\n      }\n    },\n\n    doubleClick(event) {\n      event.preventDefault();\n\n      if (event.target.tagName === 'INPUT' && event.target.type === 'checkbox') {\n        // allow user to check another row without moving selection\n        return;\n      }\n\n      const ltCell = event.target.closest('.lt-cell');\n\n      if (ltCell) {\n        const row = ltCell.closest('.lt-row');\n        const index = Array.from(row.children).indexOf(ltCell);\n        const recordId = row.getAttribute('data-record-id');\n        const tableRows = this.get('table.rows');\n        const clickedColumn = this.get('table.columns')[index];\n        const clickedRow = tableRows.findBy('content.id', recordId);\n        tableRows.setEach('selected', false);\n        const scheduleLocked = clickedRow.get('record.scheduleLocked');\n\n        if (!scheduleLocked || Ember.isNone(scheduleLocked)) {\n          clickedRow.set('isEditing', true);\n          clickedColumn.set('isEditing', true);\n        }\n      }\n    },\n\n    // Helper function to take a list of (single/bulk) actions, and the corresponding list of action names\n    // from the config service.  Order the list of actions that will be used to populate the dropdown menu\n    // based on the order from the config service, so that it's always consistent\n    // Also allow for the config list to include an \"all\" value, where anything not already specified will\n    // be inserted (in the order determined by the widget's returned action list)\n    orderActionsByConfigList(actions, listOfActionsFromConfig) {\n      const configList = Ember.isNone(listOfActionsFromConfig) ? [] : listOfActionsFromConfig; // Find any actions that were declared by the widget, but aren't in the config list\n\n      const actionsToBeIncludedAsAll = actions.filter(action => !configList.some(configAction => configAction === action.id));\n      const result = []; // Iterate over the config list, so that we populate the result in the right order\n\n      configList.forEach(configAction => {\n        if (configAction === 'all') {\n          result.push(...actionsToBeIncludedAsAll);\n        } else {\n          const foundAction = actions.find(action => action.id === configAction);\n\n          if (foundAction) {\n            result.push(foundAction);\n          }\n        }\n      });\n      return result;\n    },\n\n    reConfigureBulkActions() {\n      const bulkActions = this.get('dynamicBulkActions') || this.get('bulkActions') || [];\n      this.set('bulkActions', bulkActions);\n    },\n\n    reConfigureSingleActions() {\n      const configPermissions = this.get('workspace.configPermissions');\n\n      if (!Ember.isNone(configPermissions)) {\n        const configPermission = configPermissions[this.get('widget.typeId')];\n        let singleActions = [];\n        const bulkActions = [];\n\n        if (!Ember.isNone(configPermission) && !Ember.isNone(this.get('singleActions'))) {\n          this.get('singleActions').forEach(currAction => {\n            const permGranted = this.get('permissionLayer').permInUserHash(currAction.permId, currAction.permIds);\n\n            if (permGranted && !Ember.isNone(configPermission.singleActions) && (configPermission.singleActions.includes(currAction.id) || configPermission.singleActions.includes('all'))) {\n              singleActions.push(currAction);\n            }\n          });\n\n          if (!Ember.isNone(singleActions)) {\n            singleActions = this.orderActionsByConfigList(singleActions, configPermission.singleActions);\n          }\n\n          this.set('singleActions', singleActions);\n        }\n\n        if (!Ember.isNone(configPermission) && !Ember.isNone(this.get('bulkActions'))) {\n          this.get('bulkActions').forEach(currAction => {\n            const permGranted = this.get('permissionLayer').permInUserHash(currAction.permId, currAction.permIds);\n\n            if (permGranted && !Ember.isNone(configPermission.bulkActions) && (configPermission.bulkActions.includes(currAction.id) || configPermission.bulkActions.includes('all'))) {\n              bulkActions.push(currAction);\n            }\n          });\n          this.set('bulkActions', bulkActions);\n        }\n      }\n    },\n\n    handleWidgetAction() {},\n\n    updateSelection(data, isSelected) {\n      const config = this.get('config');\n      const selectedRowLimit = config.maxLimitByRouteSelection;\n      const maxLimitRouteAssociation = config.maxLimitWithoutRouteAssociation;\n      const widgetModelName = config.widgetName;\n      const coreModelName = config.modelName;\n      const widgetInstanceId = this.get('widgetInstanceId');\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      this.set('selectionInProgress', true);\n      this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform([data], widgetModelName, coreModelName, widgetInstanceId, isSelected, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, false).then(() => {\n        this.set('selectionInProgress', false);\n      }).catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      });\n    },\n\n    setupReceiveData() {\n      const gridConfig = this.get('config');\n      const currentWidgetModelName = gridConfig.widgetName; // receiving single widget data\n\n      this._handleWidgetAction = payLoadList => {\n        if (this.get('loadWidgetTask.isRunning')) {\n          this.set('updatePayloads', this.get('updatePayloads').concat(payLoadList));\n          return;\n        }\n\n        let widgetRecords = this.get('widgetRecords');\n        let receivedNewUpdate = false;\n        const traversalActions = [];\n        const updatePayloads = this.get('updatePayloads').concat(payLoadList);\n        this.set('updatePayloads', []);\n        updatePayloads.forEach(payload => {\n          const {\n            header,\n            body\n          } = payload;\n\n          if (this.isPayloadApplicable(payload, currentWidgetModelName)) {\n            const widgetData = body.data;\n            const data = this.applyTransformationData([widgetData])[0];\n            const widgetRowAction = this.determineWidgetRecordAction(widgetRecords, header, data);\n\n            if (widgetRowAction === 'ADD' || widgetRowAction === 'UPDATE') {\n              const index = widgetRecords.findIndex(record => record._key === data._key);\n\n              if (index === -1) {\n                widgetRecords.push(data);\n                receivedNewUpdate = true;\n              } else {\n                widgetRecords[index] = data; // TODO: specify traversal fields only\n\n                if (this.get('widgetService').isSelected(currentWidgetModelName, data._key)) {\n                  traversalActions.push({\n                    action: 'UPDATE',\n                    data\n                  });\n                }\n              }\n            }\n\n            if (widgetRowAction === 'DELETE') {\n              this.removeDeletedItems(data);\n\n              if (this.get('widgetService').isSelected(currentWidgetModelName, data._key)) {\n                traversalActions.push({\n                  action: 'DELETE',\n                  data\n                });\n              }\n\n              widgetRecords = widgetRecords.filter(record => {\n                return record._key !== data._key;\n              });\n              receivedNewUpdate = true;\n            }\n          }\n        });\n        const sortedRecords = this.applySortOrder(widgetRecords);\n        this.set('widgetRecords', sortedRecords);\n\n        if (traversalActions.length > 0) {\n          traversalActions.forEach(t => {\n            if (t.action === 'UPDATE') {\n              this.updateSelection(t.data, true);\n            } else if (t.action === 'DELETE') {\n              this.updateSelection(t.data, false);\n            }\n          });\n        }\n\n        if (receivedNewUpdate) {\n          this.get('loadCountStatesTask').perform();\n        }\n      }; // receiving widget data list\n\n\n      this._handleReceiveDataEventHandler = _ref2 => {\n        let {\n          widgetInstanceId,\n          data\n        } = _ref2;\n\n        if (widgetInstanceId !== this.get('widgetInstanceId')) {\n          return;\n        }\n\n        const records = data || [];\n        const selectAllChecked = this.get('selectAllChecked');\n        const widgetModelName = gridConfig.widgetName;\n        const coreModelName = gridConfig.modelName;\n        const isTraversalEnabled = this.get('isTraversalEnabled');\n        const selectedRowLimit = gridConfig.maxLimitByRouteSelection;\n        const maxLimitRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n        this.applyTransformationData(records);\n        const filteredRecords = this.applyPostFetchFilter(records);\n        const sortedRecords = this.handleSort(filteredRecords); // optional in memory sorting\n\n        if (selectAllChecked) {\n          this.set('selectionInProgress', true);\n          this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform(sortedRecords, widgetModelName, coreModelName, widgetInstanceId, true, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, false).then(() => {\n            this.set('selectionInProgress', false);\n          }).catch(e => {\n            if (!(0, _emberConcurrency.didCancel)(e)) {\n              throw e;\n            }\n          });\n        }\n\n        this.set('widgetRecords', sortedRecords);\n        this.setMaxRecordLimit(); // Records filtered for Widget Display might still be used for Store Update, so dont give filtered Records\n\n        this.postHandleReceiveDataEventHandler(records);\n      };\n\n      this._handleLoadMoreEventHandler = _ref3 => {\n        let {\n          widgetInstanceId,\n          data\n        } = _ref3;\n\n        if (widgetInstanceId !== this.get('widgetInstanceId')) {\n          return;\n        }\n\n        const records = data || [];\n        this.applyTransformationData(records);\n        const filteredRecords = this.applyPostFetchFilter(records); // Replace existed data to avoid duplicate rows.\n\n        const widgetRecords = (0, _lodash.default)(this.get('widgetRecords')).differenceBy(filteredRecords, '_key').concat(filteredRecords).value();\n        const sortedRecords = this.handleSort(widgetRecords); // optional in memory sorting\n\n        this.set('widgetRecords', sortedRecords);\n        this.setMaxRecordLimit(); // Records filtered for Widget Display might still be used for Store Update, so dont give filtered Records\n\n        this.postHandleReceiveDataEventHandler(records);\n      };\n\n      this._initialLoadEventHandler = async () => {\n        await this.resetDefaultWidgetState();\n        this.get('loadWidgetTask').perform().catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      };\n\n      this._traversalEventHandler = async widgetInstanceId => {\n        const currentWidgetInstanceId = this.get('widgetInstanceId');\n\n        if (currentWidgetInstanceId !== widgetInstanceId) {\n          this.applyTraversalFilter(this.determineApplicableFilters());\n          await this.get('loadWidgetTask').perform().catch(e => {\n            if (!(0, _emberConcurrency.didCancel)(e)) {\n              throw e;\n            }\n          });\n        }\n\n        this.applySelectionConstraints();\n      };\n\n      this._removeSelectionEventHandler = async widgetInstanceId => {\n        const currentWidgetInstanceId = this.get('widgetInstanceId');\n\n        if (currentWidgetInstanceId !== widgetInstanceId) {\n          this.applyTraversalFilter(this.determineApplicableFilters());\n          await this.get('loadWidgetTask').perform().catch(e => {\n            if (!(0, _emberConcurrency.didCancel)(e)) {\n              throw e;\n            }\n          });\n        }\n\n        this.applySelectionConstraints();\n      };\n\n      this._deselectAllEventHandler = async () => {\n        this.deselectAllWidgets();\n        this.applyTraversalFilter(this.determineApplicableFilters());\n        await this.get('loadWidgetTask').perform().catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n        this.applySelectionConstraints();\n      };\n\n      this.get('widgetService').on(_widgetEvents.WIDGET_DATA_ACTION, this._handleWidgetAction);\n      this.get('widgetService').on(_widgetEvents.RECEIVE_DATA_LIST_EVENT, this._handleReceiveDataEventHandler);\n      this.get('widgetService').on(_widgetEvents.LOAD_MORE_DATA_LIST_EVENT, this._handleLoadMoreEventHandler);\n      this.get('widgetService').on(_widgetEvents.INITIAL_WIDGET_LOAD_EVENT, this._initialLoadEventHandler);\n      this.get('widgetService').on(_widgetEvents.ADD_TRAVERSAL_SELECTION_EVENT, this._traversalEventHandler);\n      this.get('widgetService').on(_widgetEvents.REMOVE_TRAVERSAL_SELECTION_EVENT, this._removeSelectionEventHandler);\n      this.get('widgetService').on(_widgetEvents.DESELECT_ALL_WIDGET_EVENT, this._deselectAllEventHandler);\n    },\n\n    /**\n     * All Vehicles,  Messages are loaded fully, other stats will be updated when a ADD record event comes\n     */\n    throttledCountStats() {\n      Ember.run.throttle(this, this.updateCountStats, COUNT_UPDATE_INTERVAL);\n    },\n\n    loadCountStatesTask: (0, _emberConcurrency.task)(function* () {\n      yield this.updateCountStats();\n    }).keepLatest(),\n\n    async updateCountStats() {\n      if (this.isDestroyed) {\n        return;\n      }\n\n      if (this.get('loadWidgetTask.isRunning')) {\n        return;\n      }\n\n      const countFilterString = this.get('countCompoundFilter');\n      const widgetName = this.get('config.widgetName');\n      const dateQueryFields = this.get('widgetService').getDateQueryFields();\n      const selectedProviders = this.get('widgetService').getSelectedProviders();\n\n      try {\n        await this.get('getTotalWidgetCountTask').perform(widgetName, countFilterString, dateQueryFields, selectedProviders).catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log('e', e);\n      }\n\n      if (this.isDestroyed) {\n        return;\n      }\n    },\n\n    isPayloadApplicable(payload, currentWidgetModelName) {\n      const {\n        header\n      } = payload;\n      const {\n        widgetModelName\n      } = header;\n      return currentWidgetModelName.toLowerCase() === widgetModelName.toLowerCase();\n    },\n\n    applySortOrder(widgetRecords) {\n      let isColumnArraySort = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const isSchedule = this.get('workspace.isScheduleDashboard');\n      const sortSet = widgetRecords.concat([]);\n      const sort = this.buildSortParam();\n      const compareFn = isColumnArraySort ? (0, _sorts.buildSimpleArrayCompareFunction)(sort) : (0, _sorts.buildSimpleCompareFunction)(sort);\n\n      if (!isSchedule && this.get('config.widgetName') === 'stopWidget' && this.get('stopsReorder.reorderInProgress')) {\n        return sortSet;\n      }\n\n      sortSet.sort(compareFn);\n      return sortSet;\n    },\n\n    // eslint-disable-next-line no-unused-vars\n    postHandleReceiveDataEventHandler(records) {},\n\n    /*\n     determineWidgetRecordAction(widgetRecords,header, body) {\n      return header.action;\n    },*/\n\n    /**\n     * Widget Record always comes with UPDATE flag. If the\n     *  if  the widget is not already included, return a ADD\n     *\n     * @param header\n     * @param data\n     * @returns {string|*}\n     */\n    determineWidgetRecordAction(widgetRecords, header, data) {\n      const index = widgetRecords.findIndex(record => record._key === data._key);\n      const match = this.matchesActiveFilter(data) && this.matchTraversalConstraint(data) && this.matchImplicitConstraint(data);\n\n      if (header.action === 'DELETE') {\n        return 'DELETE';\n      }\n\n      if (match && data.deleted) {\n        return 'DELETE';\n      }\n\n      if (index !== -1 && match) {\n        return 'UPDATE';\n      }\n\n      if (match && index === -1) {\n        // if the filter condition matches and if the record doesnt exist in the component then ADD it\n        return 'ADD';\n      }\n\n      if (!match) {\n        // if the filter condition doesnt match and if the record current exist in the component then DELETE it\n        return 'DELETE';\n      }\n\n      return 'NONE';\n    },\n\n    deselectAllWidgets() {\n      this.set('isFurtherSelectionAllowed', true);\n      this.set('offset', 0);\n      this.set('limit', this.get('maxRecordLimit'));\n    },\n\n    applySelectionConstraints() {\n      if (this.isDestroyed) {\n        return;\n      }\n\n      if (this.canFurtherSelectionAllowed()) {\n        this.set('disabledRowIds', []);\n        this.set('isFurtherSelectionAllowed', true);\n      } else {\n        this.disableFurtherRows();\n        this.set('isFurtherSelectionAllowed', false);\n      }\n    },\n\n    applyTransformationData(widgetRecords) {\n      return widgetRecords;\n    },\n\n    applyPostFetchFilter(widgetRecords) {\n      return widgetRecords;\n    },\n\n    hasConflict(filter, allFilters, conflicts) {\n      if (conflicts) {\n        for (const conflict of conflicts) {\n          const conflictWith = allFilters.find(f => f.model === conflict.widget && f.record[conflict.targetField] === filter.record[conflict.srcField]);\n          if (conflictWith) return true;\n        }\n      }\n\n      return false;\n    },\n\n    async applyTraversalFilter(applicableFilters) {\n      const traversal = this.get('config.traversal');\n      const excluded = this.get('config.excluded');\n      const inFilterIds = [];\n      const eqFieldQueries = [];\n      const filters = Object.values(applicableFilters).reduce((a, i) => [...a, ...i], []);\n      const nonConflictFilters = [];\n      let keyName = 'id';\n\n      if (excluded) {\n        for (const filter of filters) {\n          const conflicts = excluded[filter.model] ? excluded[filter.model].conflicts : [];\n          const isConflicted = this.hasConflict(filter, filters, conflicts);\n          if (!isConflicted) nonConflictFilters.push(filter);\n        }\n      } else {\n        nonConflictFilters.push(...filters);\n      }\n\n      for (const filter of nonConflictFilters) {\n        const links = traversal[filter.model] ? traversal[filter.model].links : [];\n\n        for (const [i, link] of links.entries()) {\n          if (filter.record[link.valuePath] || i === links.length - 1) {\n            // The last link always need to execute.\n            if (link.type === 'eq') {\n              eqFieldQueries.push(this.get('widgetService').getEqualQuery(link.field, filter.record[link.valuePath]));\n            }\n\n            if (link.type === 'stringEq') {\n              eqFieldQueries.push(this.get('widgetService').getEqualQuery(link.field, `'${filter.record[link.valuePath]}'`));\n            }\n\n            if (link.type === 'exist') {\n              eqFieldQueries.push(this.get('widgetService').getExistedQuery(`${link.field}.${filter.record[link.valuePath]}`));\n            }\n\n            if (link.type === 'inObjValues') {\n              // If not existing valuePath then all records should be filtered out.\n              const keys = filter.record[link.valuePath] ? Object.values(filter.record[link.valuePath]).map(obj => obj[link.key]) : [''];\n              inFilterIds.push(...keys);\n              keyName = link.rqlKey;\n            }\n\n            if (link.type === 'inObjKeys') {\n              // If not existing valuePath then all records should be filtered out.\n              const keys = filter.record[link.valuePath] ? Object.keys(filter.record[link.valuePath]).map(key => `${key}`) : [''];\n              inFilterIds.push(...keys);\n              keyName = 'id';\n            }\n\n            if (link.type === 'in' && filter.record[link.valuePath]) {\n              inFilterIds.push(`${filter.record[link.valuePath]}`);\n            } // only adapt the first matching criteria\n\n\n            if (link.type === '') break;\n          }\n        }\n      }\n\n      const generatedRQL = this.get('widgetService').combineInAndEqualFilters(keyName, inFilterIds, eqFieldQueries);\n      const modelName = this.get('config.modelName');\n      this.get('widgetService').setTraversalFilterQuery(modelName, generatedRQL);\n      this.set('traversalFilterQuery', generatedRQL);\n      this.set('traversalFilterParams', eqFieldQueries);\n      this.set('traversalFilterIds', inFilterIds);\n    },\n\n    determineApplicableFilters() {\n      const traversalFilters = this.get('widgetService').get('traversalFilters');\n      const applicableFilters = {};\n      const currentWidgetInstanceId = this.get('widgetInstanceId');\n      (0, _lodash.forIn)(traversalFilters, (value, key) => {\n        if (key !== currentWidgetInstanceId) {\n          applicableFilters[key] = value;\n        }\n      });\n      return applicableFilters;\n    },\n\n    setMaxRecordLimit() {\n      const widgetRecords = this.get('widgetRecords');\n      const maxRecordLimit = Math.max(widgetRecords.length, this.get('maxRecordLimit'));\n      this.set('maxRecordLimit', maxRecordLimit);\n    },\n\n    getCheckedItems() {},\n\n    getDisabledItems() {},\n\n    removeDeletedItems() {},\n\n    disableFurtherRows() {\n      const disabledRowIds = this.get('disabledRowIds');\n      const checkedItems = this.get('checkedRowIds');\n      const widgetRecords = this.get('widgetRecords');\n      widgetRecords.forEach(record => {\n        const isChecked = checkedItems.some(obj => {\n          if (record.coreModel) {\n            return record.id === obj.id && record.coreModel === obj.model;\n          }\n\n          return record.id === obj.id;\n        });\n\n        if (!isChecked) {\n          disabledRowIds.push(record.id);\n        }\n      });\n      this.set('disabledRowIds', disabledRowIds.concat([]));\n    },\n\n    doSearchText(searchText) {\n      this.set('searchText', searchText);\n      this.set('offset', 0);\n      this.set('limit', this.get('maxRecordLimit')); // debounce(this, 'loadWidgetData', 250);\n\n      this.get('loadWidgetTask').perform().catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      });\n    },\n\n    async populateEntitiesForMenuAction() {\n      await this.populateCoreEntities();\n    },\n\n    /**\n     * populate core entities of selected widget record..\n     * this method is fired  on right click\n     * @param\n     * @returns {Promise<*|Array|*>}\n     */\n    async populateCoreEntities() {\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const widgetModelName = this.get('config.widgetName');\n      await this.get('coreEntityPopulator').populateEntityGraph(widgetModelName, selectedWidgetRecord);\n      const isMultiRecordsChecked = this.get('widgetService').isMultiRecordsSelected(widgetModelName);\n\n      if (isMultiRecordsChecked) {\n        const selectedRecords = this.get('widgetService').getSelectedWidgetRecordsByModel(widgetModelName);\n        selectedRecords.forEach(async widgetrecord => {\n          await this.get('coreEntityPopulator').populateEntityGraph(widgetModelName, widgetrecord);\n        });\n      }\n    },\n\n    getSelectedCoreModel() {\n      const isSchedule = this.get('workspace.isScheduleDashboard');\n      const widgetName = this.get('config.widgetName');\n      const widgetRecord = this.get('selectedWidgetRecord');\n      let coreModelName = this.get('config.modelName');\n\n      if (isSchedule && widgetName === 'stopWidget') {\n        if (widgetRecord.type === 'break') {\n          coreModelName = 'route-break';\n        } else if (widgetRecord.type === 'pulloutGarage' || widgetRecord.type === 'pullinGarage') {\n          coreModelName = 'stop-point';\n        } else {\n          coreModelName = 'trip-stop';\n        }\n      }\n\n      const message = this.get('store').peekRecord(coreModelName, widgetRecord.id);\n      return message;\n    },\n\n    onWidgetResize() {\n      if (this.get('serverDataTable')) {\n        this.get('serverDataTable').onWidgetResize();\n      }\n    },\n\n    setTraversal() {\n      const gridConfig = this.get('config');\n      const widgetModelName = gridConfig.widgetName;\n      const isMaximized = this.get('isMaximized');\n      const widgetRecords = this.get('widgetRecords');\n      const checkedItems = this.get('checkedRowIds'); // we select/unselect the right instance whether it's minimized or maximized\n\n      const widgetInstanceId = isMaximized ? this.get('widgetInstanceId').replace('_maximized', '') : this.get('widgetInstanceId');\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const checkedWidgetRecords = widgetRecords.filter(record => {\n        if (record.coreModel) {\n          return _lodash.default.some(checkedItems, {\n            model: record.coreModel,\n            id: record.id\n          });\n        }\n\n        return _lodash.default.some(checkedItems, {\n          id: record.id\n        });\n      });\n      this.get('activeContext.topActiveContext').get('setWidgetTraversalTask').perform(checkedWidgetRecords, widgetModelName, widgetInstanceId, isTraversalEnabled).catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      });\n      this.get('loadWidgetTask').perform().catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      });\n    },\n\n    fetchDataTask: (0, _emberConcurrency.task)(function* () {\n      const records = yield this.fetchDataQuery();\n      this.set('records', records);\n    }).restartable(),\n\n    refreshData() {\n      if (this.get('isDestroyed')) return;\n      this.get('fetchDataTask').perform().then(() => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false);\n        }\n      }).catch(err => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false); // eslint-disable-next-line no-console\n\n          console.log('Error occoured when refreshing the Data' + err);\n        }\n\n        if (!(0, _emberConcurrency.didCancel)(err)) {\n          throw err;\n        }\n      });\n    },\n\n    cancelStopReorderIfInitiated() {\n      const stopsReorder = this.get('stopsReorder');\n\n      if (stopsReorder.get('reorderInProgress') && (this.get('isDispatchDashboard') || this.get('isScheduleDashboard'))) {\n        this.get('stopsReorder').stopReorder();\n      }\n    },\n\n    toggleTraversalButton() {\n      this.cancelStopReorderIfInitiated();\n      const gridConfig = this.get('config');\n      const widgetModelName = gridConfig.widgetName;\n      const coreModelName = gridConfig.modelName;\n      const selectedRowLimit = gridConfig.maxLimitByRouteSelection;\n      const maxLimitRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n      const isMaximized = this.get('isMaximized');\n      const widgetInstanceId = isMaximized ? this.get('widgetInstanceId').replace('_maximized', '') : this.get('widgetInstanceId');\n      const checkedItems = this.get('checkedRowIds');\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const widgetRecords = this.get('widgetRecords');\n      const checkedWidgetRecords = widgetRecords.filter(record => {\n        if (record.coreModel) {\n          return _lodash.default.some(checkedItems, {\n            model: record.coreModel,\n            id: record.id\n          });\n        }\n\n        return _lodash.default.some(checkedItems, {\n          id: record.id\n        });\n      });\n\n      if (this.get('selectionInProgress')) {\n        return;\n      }\n\n      this.set('selectionInProgress', true);\n      this.deselectAllWidgets();\n      this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform(checkedWidgetRecords, widgetModelName, coreModelName, widgetInstanceId, false, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled).then(() => {\n        this.set('selectionInProgress', false);\n      }).catch(e => {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      });\n      this.set('selectAllChecked', false);\n    },\n\n    isLockedByOtherUser(isLocked, lock) {\n      const userId = this.get('session').data.authenticated.userId;\n      return isLocked && lock && lock.user !== userId;\n    },\n\n    actions: {\n      onRefresh() {\n        this.refreshData();\n        this.get('loadWidgetTask').perform().catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      },\n\n      onLeftButtonClick() {\n        Ember.$(`.${this.get('scrollClassName')}`).animate({\n          scrollLeft: '-=100px'\n        }, 'fast');\n      },\n\n      onRightButtonClick() {\n        Ember.$(`.${this.get('scrollClassName')}`).animate({\n          scrollLeft: '+=100px'\n        }, 'fast');\n      },\n\n      setServerDataTableRef(tableRef) {\n        this.set('serverDataTable', tableRef);\n      },\n\n      onSearchTextChange(event) {\n        if (event.keyCode !== 13) {\n          return;\n        }\n\n        const searchText = event.target.value;\n        this.doSearchText(searchText);\n      },\n\n      onColumnClick(sortColumnId, sortAsc) {\n        this.get('widget').mergeState({\n          sortId: sortColumnId,\n          sortAsc\n        });\n      },\n\n      onColumnResize(column, pixels) {\n        const scrollLeft = this.$('.column-widget-body').scrollLeft();\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          width: fromPixels(pixels)\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n        Ember.run.next(() => {\n          Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n        });\n      },\n\n      onSearchButtonClick() {\n        this.send('onSearchTextChange', '');\n        this.toggleProperty('isSearchEnabled');\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isSearchEnabled')) {\n            this.$('.column-widget-search-box').focus();\n          }\n        });\n      },\n\n      onRemoveSearchClick() {\n        this.doSearchText('');\n        this.toggleProperty('isSearchEnabled');\n        this.$('.column-widget-search-button').focus();\n      },\n\n      onHeaderDoubleClick() {\n        if (this.get('stopsReorder.reorderInProgress')) return;\n        const maximizer = this.get('maximizer'); // when widget is maximized, minimize  the widget\n        // if (maximizer.get('isWidgetMinified')) {\n\n        if (maximizer.get('maximizedWidget') !== this.get('widget')) {\n          const localQuickFilter = this.get('localQuickFilters').find(filter => filter.active);\n          const activeQuickFilter = Ember.isPresent(localQuickFilter) ? {\n            id: localQuickFilter.id\n          } : null;\n          maximizer.maximize(this.get('widget'), activeQuickFilter);\n        } else {\n          this.send('onExitMaximizedClick', '');\n        }\n      },\n\n      onExitMaximizedClick() {\n        // when widget is minimized, copy the only current(maximized) component state to maximizer\n        // this.copyComponentStateToMaximizerService();\n        const maximizer = this.get('maximizer');\n        const localQuickFilter = this.get('localQuickFilters').find(filter => filter.active);\n        const activeQuickFilter = Ember.isPresent(localQuickFilter) ? {\n          id: localQuickFilter.id\n        } : null;\n        maximizer.minimize(activeQuickFilter); // this.minimizeWidget();\n      },\n\n      onFilterButtonClick() {\n        const columns = [];\n        const workspace = this.get('workspace');\n        const widget = this.get('widget');\n        const config = this.get('config');\n        const displayName = `${config.title} Filters`; // close sidebar if _this_ widget's filter is currently open\n        // @TODO: define and use unique keys rather than `displayName` for this\n\n        if (displayName === workspace.get('topStateDisplayName')) {\n          workspace.popState();\n          return;\n        }\n\n        let topState = workspace.get('topState');\n\n        while (topState === 'filterColumnWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        this.get('table.columns').forEach(column => {\n          const columnConfig = column.config;\n\n          if (columnConfig) {\n            if (!columnConfig.unAvailable) {\n              columns.push(column);\n            }\n          } else {\n            columns.push(column);\n          }\n        });\n        workspace.pushState('filterColumnWidget', {\n          columns,\n          widget,\n          displayName\n        });\n      },\n\n      setInlineRowMenu(dropdown) {\n        this.set('inlineRowMenu', dropdown);\n      },\n\n      setPlusIconMenu(dropdown) {\n        this.set('plusIconMenu', dropdown);\n      },\n\n      async onRowRightClick(widgetRecord) {\n        const rightClickDelay = this.get('rightClickDelay');\n        const disableRightClick = this.get('disableRightClick'); // disable right row click for iq-widgets when a user runs schedule generation or release routes.\n\n        if (disableRightClick) return;\n        this.set('lastRowClicked', widgetRecord);\n        this.set('isLoading', true);\n        this.set('selectedWidgetRecord', widgetRecord);\n        await this.populateEntitiesForMenuAction();\n        const row = this.getSelectedCoreModel();\n        await (0, _emberConcurrency.timeout)(rightClickDelay);\n\n        if (Ember.isNone(this.get('dynamicSingleActions'))) {\n          this.set('dynamicSingleActions', this.get('singleActions'));\n        } else {\n          this.set('singleActions', this.get('dynamicSingleActions'));\n        }\n\n        if (row && this.isLockedByOtherUser(widgetRecord.isLocked, widgetRecord.lock)) {\n          const singleActions = [];\n          this.get('singleActions').forEach(action => {\n            if (!action.disableOnLockedRoute) {\n              singleActions.push(action);\n            }\n          });\n          this.set('singleActions', singleActions);\n        } else {\n          const singleActions = [];\n          this.get('singleActions').forEach(action => {\n            singleActions.push(action);\n          });\n          this.set('singleActions', singleActions);\n        } // remove right click action if schedule record is locked\n\n\n        if (row && row.get('scheduleLocked')) {\n          const singleActions = [];\n          this.get('singleActions').forEach(action => {\n            if (!action.disableOnLocked) {\n              singleActions.push(action);\n            }\n          });\n          this.set('singleActions', singleActions);\n        } else {\n          const singleActions = [];\n          this.get('singleActions').forEach(action => {\n            singleActions.push(action);\n          });\n          this.set('singleActions', singleActions);\n        }\n\n        if (!Ember.isNone(this.get('singleActions'))) {\n          this.reConfigureSingleActions();\n        }\n\n        this.set('isLoading', false);\n\n        if (this.get('showBulkActions')) {\n          this.reConfigureBulkActions();\n          return this.get('bulkActions');\n        }\n\n        return this.get('singleActions');\n      },\n\n      onScroll() {\n        // pause background processing while scrolling\n        this.get('interaction').didScrollWidget(); // close any open dropdown\n\n        if (this.get('serverDataTable')) {\n          this.get('serverDataTable').onScroll();\n        } // figure out if we need to increase pagination\n\n\n        const body = this.$('.column-widget-body')[0];\n        const scrollPosition = body.scrollTop + body.offsetHeight;\n        const triggerPosition = body.scrollHeight - PAGINATION_TRIGGER_OFFSET; // scroll height takes a while to update, so we don't reset pagination\n        // flag until we observe it change in a subsequent `onScroll()` action\n\n        if (body.scrollHeight !== this._scrollHeight) {\n          this._scrollHeight = body.scrollHeight;\n          this.set('isPaginating', false);\n        }\n\n        if (scrollPosition >= triggerPosition && !this._isPaginating) {\n          const visibleCount = this.get('visibleRecords.length');\n          const offset = this.get('offset');\n          const limit = this.get('limit');\n\n          if (offset < visibleCount) {\n            this.set('offset', offset + limit);\n            this.set('isPaginating', true);\n            this.set('refreshSync', true);\n          }\n        }\n      },\n\n      onTableActionClick(action, dropdown) {\n        dropdown.actions.close();\n\n        if (action.action) {\n          action.action();\n        }\n      },\n\n      onSingleRowAction(action) {\n        const model = this.get('lastRowClicked');\n        this.inlineRowMenu.actions.close();\n\n        if (action.action) {\n          action.action(model);\n        }\n      },\n\n      onSearchChange(option) {\n        console.log('onSearchChange ', option, '  option id ', option.id); //eslint-disable-line no-console\n\n        this.set('searchSelected', option.label);\n        this.set('searchSelectedColumn', option);\n      },\n\n      onTraversalButtonClick() {\n        const isTraversalEnabled = this.get('isTraversalEnabled');\n\n        if (!isTraversalEnabled) {\n          this.toggleTraversalButton();\n        }\n\n        this.toggleProperty('isTraversalEnabled');\n        this.setTraversal();\n      },\n\n      onBulkRowAction(action) {\n        const checkedRows = this.get('table.rows').filterBy('isChecked');\n        const models = [];\n        checkedRows.forEach(row => {\n          models.push(row.get('record'));\n        });\n        this.get('inlineRowMenu').actions.close();\n\n        if (action.action) {\n          action.action(models);\n        }\n      },\n\n      onCheckAll() {\n        const totalWidgetCount = this.get('totalWidgetCount') ? parseInt(this.get('totalWidgetCount'), 10) : 0;\n\n        if (this.get('selectionInProgress')) {\n          return;\n        }\n\n        this.cancelStopReorderIfInitiated();\n        const gridConfig = this.get('config');\n        const widgetModelName = gridConfig.widgetName;\n        const coreModelName = gridConfig.modelName;\n        const widgetInstanceId = this.get('widgetInstanceId');\n        const isTraversalEnabled = this.get('isTraversalEnabled');\n        const widgetRecords = this.get('widgetRecords');\n        const selectedRowLimit = gridConfig.maxLimitByRouteSelection;\n        const maxLimitRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n\n        if (widgetModelName === 'routeWidget' && totalWidgetCount > MAX_ROUTE_SELECTED) {\n          this.get('notifications').warning(`${MAX_ROUTE_SELECTED} IS THE MAXIMUM NUMBER OF ROUTES THAT CAN BE SELECTED`);\n          return;\n        }\n\n        this.set('selectionInProgress', true);\n        this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform(widgetRecords, widgetModelName, coreModelName, widgetInstanceId, true, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, true).then(() => {\n          this.set('selectionInProgress', false);\n        }).catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n        this.set('selectAllChecked', true);\n      },\n\n      onUncheckAll() {\n        this.toggleTraversalButton();\n      },\n\n      onWidgetStateUpdateHandler(updateState) {\n        this.get('widget').mergeState({ ...updateState\n        }); // save any filter changes i.e columns reorders, visibility, and filter changes\n\n        this.get('workspace').saveTempDashboardState();\n      },\n\n      onSelectCheckBtnHandler(selectedData) {\n        this.cancelStopReorderIfInitiated();\n        const gridConfig = this.get('config');\n        const selectedRowLimit = gridConfig.maxLimitByRouteSelection ? gridConfig.maxLimitByRouteSelection : gridConfig.selectedRowLimit;\n        const maxLimitRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n        const widgetModelName = gridConfig.widgetName;\n        const coreModelName = gridConfig.modelName;\n        const isMaximized = this.get('isMaximized');\n        const isTraversalEnabled = this.get('isTraversalEnabled'); // we select/unselect the right instance whether it's minimized or maximized\n\n        const widgetInstanceId = isMaximized ? this.get('widgetInstanceId').replace('_maximized', '') : this.get('widgetInstanceId');\n\n        if (this.get('selectionInProgress')) {\n          return;\n        }\n\n        this.set('selectionInProgress', true);\n        this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform([selectedData], widgetModelName, coreModelName, widgetInstanceId, true, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, true).then(() => {\n          this.set('selectionInProgress', false);\n        }).catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      },\n\n      onUnSelectCheckBtnHandler(selectedData) {\n        if (this.get('selectAllChecked')) return;\n        this.cancelStopReorderIfInitiated();\n        const gridConfig = this.get('config');\n        const selectedRowLimit = gridConfig.maxLimitByRouteSelection;\n        const maxLimitRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n        const widgetModelName = gridConfig.widgetName;\n        const coreModelName = gridConfig.modelName;\n        const isMaximized = this.get('isMaximized');\n        const isTraversalEnabled = this.get('isTraversalEnabled'); // we select/unselect the right instance whether it's minimized or maximized\n\n        const widgetInstanceId = isMaximized ? this.get('widgetInstanceId').replace('_maximized', '') : this.get('widgetInstanceId');\n\n        if (this.get('selectionInProgress')) {\n          return;\n        }\n\n        this.set('selectionInProgress', true);\n        this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform([selectedData], widgetModelName, coreModelName, widgetInstanceId, false, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, false).then(() => {\n          this.set('selectionInProgress', false);\n        }).catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n      },\n\n      rowReorderHandler(oldIndex, newIndex) {\n        const reorderCallback = this.get('reorderCallback');\n        reorderCallback(oldIndex, newIndex);\n      },\n\n      /**\n       * Gets called form React grid when user tried scroll past the visibile limit\n       * @param offset\n       * @param pageSize\n       * @returns {Promise<void>}\n       */\n      async loadMoreRows(offset, pageSize) {\n        const gridConfig = this.get('config');\n        const widgetInstanceId = this.get('widgetInstanceId');\n        const currentWidgetCount = this.get('widgetRecords.length');\n        const totalWidgetCount = this.get('totalWidgetCount');\n        const widgetType = gridConfig.widgetName;\n        const sort = this.get('sort');\n        const descReg = /^-/;\n        const columns = this.get('config.columns');\n        const prefix = sort.match(descReg) ? '-' : '';\n        const sortId = sort.replace(descReg, '');\n        const sortColumn = columns.find(c => c.id === sortId);\n        const fetchedRows = this.get('fetchedRows');\n        let start = Math.min(offset, fetchedRows);\n        let sortValuePath = 'id';\n\n        if (sortColumn) {\n          sortValuePath = sortColumn.customSortPath ? sortColumn.customSortPath : sortColumn.valuePath;\n        }\n\n        const filterString = this.get('widgetCompoundFilter');\n        this.set('isLoading', true);\n        const dateQueryFields = this.get('widgetService').getDateQueryFields();\n        const selectedProviders = this.get('widgetService').getSelectedProviders();\n        let loadMore = !this.get('getTotalWidgetCountTask.isRunning') && totalWidgetCount > currentWidgetCount;\n        const selectAllChecked = this.get('selectAllChecked');\n        const widgetModelName = gridConfig.widgetName;\n        const coreModelName = gridConfig.modelName;\n        const isTraversalEnabled = this.get('isTraversalEnabled');\n        const selectedRowLimit = gridConfig.maxLimitByRouteSelection;\n        const maxLimitRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n\n        try {\n          while (loadMore) {\n            const fetchedData = await this.widgetService.loadMoreData(widgetInstanceId, widgetType, filterString, start, pageSize, prefix + sortValuePath, dateQueryFields, selectedProviders);\n            const fetchedIdDict = this.get('fetchedIdDict');\n            fetchedData.forEach(d => {\n              fetchedIdDict[d.id] = true;\n            });\n            this.notifyPropertyChange('fetchedIdDict');\n            const updateWidgetCount = this.get('widgetRecords.length'); // If no increase on widget records we just keep fetching to the end\n\n            if (updateWidgetCount === currentWidgetCount && updateWidgetCount < totalWidgetCount && start < totalWidgetCount) {\n              start += pageSize;\n            } else {\n              loadMore = false;\n            }\n\n            if (selectAllChecked) {\n              this.set('selectionInProgress', true);\n              this.get('activeContext.topActiveContext').get('setWidgetRecordsTask').perform(fetchedData, widgetModelName, coreModelName, widgetInstanceId, true, selectedRowLimit, maxLimitRouteAssociation, isTraversalEnabled, true).then(() => {\n                this.set('selectionInProgress', false);\n              }).catch(e => {\n                if (!(0, _emberConcurrency.didCancel)(e)) {\n                  throw e;\n                }\n              });\n            }\n          }\n        } catch (e) {\n          this.set('isLoading', false);\n        }\n\n        this.set('isLoading', false);\n      }\n\n    },\n\n    matchesActiveFilter(widgetRecord) {\n      const searchText = this.get('searchText');\n      const res = searchText.split('=');\n      let filterParts = [];\n\n      if (Ember.isEmpty(res[0]) || Ember.isEmpty(res[1])) {\n        filterParts = [this.buildSearchFilter(), this.buildColumnFilter()];\n      } else {\n        filterParts = [this.buildSearchFilterByParameter(), this.buildColumnFilter()];\n      }\n\n      const filterNode = (0, _filters.buildCompoundFilterNode)('and', filterParts);\n      const filterFn = (0, _filters.buildFilterFunction)(filterNode);\n      const resultSet = [widgetRecord].filter(filterFn);\n      return !!resultSet.length;\n    },\n\n    getByPath(widgetRecord, path) {\n      const parts = path.split('.');\n      let o = widgetRecord;\n\n      if (parts.length > 0) {\n        for (let i = 0; i < parts.length; i++) {\n          if (!o[parts[i]]) {\n            return null;\n          }\n\n          o = o[parts[i]];\n        }\n      }\n\n      return o;\n    },\n\n    matchImplicitConstraint(widgetRecord) {\n      const implicitFilterParams = this.get('implicitFilterParams');\n      const transform = this.get('config.transform');\n\n      if (Ember.isEmpty(implicitFilterParams)) {\n        return true;\n      }\n\n      let matched = true;\n\n      if (implicitFilterParams.length > 0) {\n        for (let i = 0; i < implicitFilterParams.length; i++) {\n          const [op] = implicitFilterParams[i].match(/^([eq,ne])+/);\n          const implicitFieldConstraint = implicitFilterParams[i].match(/[eq,ne]\\(([^)]+)\\)/).pop();\n          const paramParts = implicitFieldConstraint.split(',');\n          const paramName = paramParts[0]; // local widgetRecord could be transformed, but filters are using nontransformed paramName\n\n          const transformParamName = transform && transform[paramName] ? transform[paramName] : paramName;\n          const paramValue = paramParts[1].replace(/'/g, '');\n          const fieldValue = this.getByPath(widgetRecord, transformParamName); // If any traversal condition matches return true\n\n          if (op === 'eq' && (fieldValue && fieldValue === paramValue || Ember.isNone(fieldValue) && paramValue === 'null')) {\n            matched = true;\n          } else if (op === 'ne' && paramValue === 'null' && Ember.isPresent(fieldValue)) {\n            matched = true;\n          } else if (op === 'ne' && paramValue !== 'null' && Ember.isPresent(fieldValue) && `${fieldValue}` !== `${paramValue}`) {\n            matched = true;\n          } else {\n            // If one of the condition failed then return false;\n            return false;\n          }\n        }\n      }\n\n      return matched;\n    },\n\n    matchTraversalConstraint(widgetRecord) {\n      const traversalFilterParams = this.get('traversalFilterParams');\n      const traversalFilterIds = this.get('traversalFilterIds');\n      const transform = this.get('config.transform');\n\n      if (Ember.isEmpty(traversalFilterParams) && Ember.isEmpty(traversalFilterIds)) {\n        return true;\n      }\n\n      if (traversalFilterParams.length > 0) {\n        for (let i = 0; i < traversalFilterParams.length; i++) {\n          const [op] = traversalFilterParams[i].match(/^([eq,ne])+/);\n          const traversalFieldConstraint = traversalFilterParams[i].match(/[eq,ne]\\(([^)]+)\\)/).pop();\n          const paramParts = traversalFieldConstraint.split(',');\n          const paramName = paramParts[0]; // local widgetRecord could be transformed, but filters are using nontransformed paramName\n\n          const transformParamName = transform && transform[paramName] ? transform[paramName] : paramName;\n          const paramValue = paramParts[1].replace(/'/g, ''); // If any traversal condition matches return true\n\n          if (op === 'eq' && widgetRecord[transformParamName] && widgetRecord[transformParamName] === paramValue) {\n            return true;\n          } else if (op === 'ne' && paramValue === 'null' && this.getByPath(widgetRecord, transformParamName)) {\n            return true;\n          }\n        }\n      }\n\n      if (traversalFilterIds.length > 0) {\n        return traversalFilterIds.some(id => `${id}` === `${widgetRecord._key}`);\n      }\n\n      return false;\n    },\n\n    /**\n     *\n     * @param widgetRecord -- Note : Adds it to SortedSet and then checks the position\n     * @returns {*}\n     */\n    determineSortedPosition(widgetRecord) {\n      const sort = this.buildSortParam();\n      const compareFn = (0, _sorts.buildSimpleCompareFunction)(sort);\n      const widgetRecords = this.get('widgetRecords');\n      const sortSet = widgetRecords.concat([]);\n      sortSet.push(widgetRecord);\n      return widgetRecords.sort(compareFn).indexOf(sortSet);\n    },\n\n    handleSort(widgetRecords) {\n      const state = this.get('state');\n\n      if (Ember.isPresent(state.sortId) && this.getLocalSortColumns().includes(state.sortId)) {\n        const isColumnArraySort = COLUMN_ARRAY_FIELDS.includes(state.sortId);\n        return this.applySortOrder(widgetRecords, isColumnArraySort);\n      }\n\n      return widgetRecords;\n    },\n\n    getLocalSortColumns() {\n      const columns = this.get('visibleColumns');\n      const filteredColunms = columns.map(c => c.id);\n      return filteredColunms;\n    },\n\n    rollbackCache() {\n      if (this.get('serverDataTable')) {\n        this.get('serverDataTable').rollbackCache();\n      }\n    },\n\n    forceUpdateGrids() {\n      const widgetRecords = this.get('widgetRecords');\n\n      if (this.get('serverDataTable')) {\n        this.get('serverDataTable').forceUpdateGrids();\n        this.applySortOrder(widgetRecords);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/ember-react-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1rmqZRAE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"event\\\",\\\"index\\\",\\\"dropdown\\\",\\\"event\\\",\\\"filter\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"column-widget-search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"column-widget-title data-test-column-title\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isTrevesal\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"widgetRecords\\\"]]],null,{\\\"statements\\\":[[0,\\\"          (\\\"],[1,[21,\\\"checkedRowCount\\\"],false],[0,\\\"/\\\"],[1,[21,\\\"totalWidgetCount\\\"],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        (0/0)\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"widgetRecords\\\"]]],null,{\\\"statements\\\":[[0,\\\"          (\\\"],[1,[21,\\\"checkedRowCount\\\"],false],[0,\\\"/\\\"],[1,[21,\\\"totalWidgetCount\\\"],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          (0/0)\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"  \\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"quickFiltersExist\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-left-scroll-button\\\"],[12,\\\"onClick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLeftButtonClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-left active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"column-widget-filters-scroll \\\",[21,\\\"scrollClassName\\\"]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"quickFilters\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/quick-filters\\\",null,[[\\\"tableColumns\\\",\\\"quickFilters\\\",\\\"filter\\\",\\\"widget\\\",\\\"onRefresh\\\"],[[23,[\\\"table\\\",\\\"columns\\\"]],[23,[\\\"quickFilters\\\"]],[22,7,[]],[23,[\\\"widget\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefresh\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[7]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-right-scroll-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRightButtonClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-right active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"config\\\",\\\"hideWidgetControls\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button column-widget-search-button data-test-search-button initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-search \\\",[27,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isTraversalAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"column-widget-button column-widget-traversal-button\\\"],[11,\\\"value\\\",\\\"\\\"],[12,\\\"checked\\\",[21,\\\"isTraversalEnabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTraversalButtonClick\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onInit\\\",\\\"disabled\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setPlusIconMenu\\\"],null],[27,\\\"if\\\",[[23,[\\\"isScheduleDashboard\\\"]],[23,[\\\"displayDownloadOption\\\"]]],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"allowedTableActions\\\",\\\"length\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/generic-widgets/ember-react-widget/template.hbs' @ L75:C7) \\\"],null]],[[\\\"class\\\"],[\\\"column-widget-button data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/generic-widgets/ember-react-widget/template.hbs' @ L80:C7) \\\"],null]],[[\\\"class\\\"],[\\\"widget-dropdown-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"allowedTableActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTableActionClick\\\",[22,6,[]],[22,5,[]]],null]],[9],[0,\\\"\\\\n      \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button data-test-filter-button\\\"],[12,\\\"data-filter-class\\\",[28,[[23,[\\\"config\\\",\\\"modelName\\\"]]]]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"maximizer\\\",\\\"maximizedWidget\\\"]],[23,[\\\"widget\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitMaximizedClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"maximizer\\\",\\\"maximizedWidget\\\"]],[23,[\\\"widget\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitMaximizedClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[3,\\\"action\\\",[[22,0,[]],\\\"onHeaderDoubleClick\\\"],[[\\\"on\\\"],[\\\"doubleClick\\\"]]],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[21,\\\"widgetClassName\\\"]],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"generic-widgets/ember-react-table\\\",null,[[\\\"modelName\\\",\\\"config\\\",\\\"widgetRecords\\\",\\\"widgetState\\\",\\\"widgetInstanceId\\\",\\\"onWidgetStateUpdateHandler\\\",\\\"onSelectCheckBtnHandler\\\",\\\"onUnSelectCheckBtnHandler\\\",\\\"rowReorderHandler\\\",\\\"onCheckAll\\\",\\\"onUnCheckAll\\\",\\\"onRowRightClick\\\",\\\"onColumnClick\\\",\\\"loadMoreRows\\\",\\\"setServerDataTableRef\\\",\\\"rowStyleHandler\\\",\\\"checkedRowIds\\\",\\\"disabledRowIds\\\",\\\"hiddenRowIds\\\",\\\"isFurtherSelectionAllowed\\\",\\\"isMaximized\\\",\\\"visibleColumns\\\",\\\"isTraversalEnabled\\\",\\\"selectAllChecked\\\",\\\"totalWidgetCount\\\"],[[23,[\\\"config\\\",\\\"modelName\\\"]],[23,[\\\"config\\\"]],[23,[\\\"widgetRecords\\\"]],[23,[\\\"widget\\\",\\\"state\\\"]],[23,[\\\"widgetInstanceId\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onWidgetStateUpdateHandler\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectCheckBtnHandler\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUnSelectCheckBtnHandler\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"rowReorderHandler\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowRightClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"loadMoreRows\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"setServerDataTableRef\\\"],null],[23,[\\\"rowStyleHandler\\\"]],[23,[\\\"checkedRowIds\\\"]],[23,[\\\"disabledRowIds\\\"]],[23,[\\\"hiddenRowIds\\\"]],[23,[\\\"isFurtherSelectionAllowed\\\"]],[23,[\\\"isMaximized\\\"]],[23,[\\\"visibleColumns\\\"]],[23,[\\\"isTraversalEnabled\\\"]],[23,[\\\"selectAllChecked\\\"]],[23,[\\\"totalWidgetCount\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"inlineRowMenuPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setInlineRowMenu\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/generic-widgets/ember-react-widget/template.hbs' @ L148:C3) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/generic-widgets/ember-react-widget/template.hbs' @ L150:C3) \\\"],null]],[[\\\"isTouchDevice\\\",\\\"class\\\"],[false,\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showSingleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"singleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,3,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,4,[]],0],null]],null]],null,{\\\"statements\\\":[[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSingleRowAction\\\",[22,3,[]]],null]],[9],[0,\\\"\\\\n  \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showBulkActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"bulkActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[23,[\\\"index\\\"]],0],null]],null]],null,{\\\"statements\\\":[[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onBulkRowAction\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n  \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/ember-react-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/form-widget/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-widget'],\n    layoutName: 'components/generic-widgets/form-widget',\n    editableRecords: null,\n    editableSections: null,\n    service: null,\n    componentName: null,\n    saveDisable: false,\n    formType: Ember.computed('title', function () {\n      if (this.get('title') !== '') {\n        return this.get('title').split(' ')[1];\n      }\n\n      return '';\n    }),\n    title: Ember.computed('editModal.editComponent', function () {\n      const editComponent = this.get('editModal.editComponent');\n      const componentNames = editComponent.split(/[-/]+/);\n      const editFormTitle = this.get('editModal.options.title');\n\n      if (editComponent === 'iq-widgets/no-show-request-approval-form-widget') {\n        return 'NoShow Approval Form';\n      }\n\n      switch (componentNames[2]) {\n        case 'noshow':\n          if (editFormTitle) {\n            return editFormTitle;\n          }\n\n          return 'No Show';\n\n        case 'new':\n          return 'Add Trip';\n\n        case 'edit':\n          return 'Edit Trip';\n\n        case 'cancel':\n          return 'Cancel Trip';\n\n        case 'assign':\n          return 'Assign Trip to Route';\n\n        case 'driver':\n          return 'Edit Break';\n\n        case 'passengers':\n          if (this.get('editableRecords')[0].id) {\n            return 'Edit Passenger';\n          }\n\n          return 'Add Passenger';\n\n        case 'vehicles':\n          if (componentNames[3] === 'breakdown') {\n            return 'Vehicle Breakdown';\n          }\n\n          if (this.get('editableRecords')[0].id) {\n            return 'Edit Vehicle';\n          }\n\n          return 'Add Vehicle';\n\n        case 'drivers':\n          if (this.get('editableRecords')[0].id) {\n            return 'Edit Driver';\n          }\n\n          return 'Add Driver';\n\n        case 'routes':\n          if (componentNames[3] === 'start') {\n            return 'Start Route';\n          }\n\n          if (componentNames[3] === 'end') {\n            return 'End Route';\n          }\n\n          return 'Edit Route';\n\n        case 'breakdown':\n          return 'Add Replacement Route';\n\n        case 'roles':\n          return 'Edit Role';\n\n        default:\n          return '';\n      }\n    }),\n    readOnlyFields: Ember.computed('editableRecords.[]', function () {\n      const editableSections = this.get('editableSections');\n      const readOnlyFields = editableSections.find(x => x.title === 'Read Only');\n      var readOnlyItems = {};\n\n      if (!Ember.isNone(readOnlyFields)) {\n        for (let i = 0; i < readOnlyFields.fields.length; i++) {\n          const o = readOnlyFields.fields[i];\n          readOnlyItems[o.id] = o;\n        }\n      }\n\n      return readOnlyItems;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('componentName', this.get('editModal.options.componentName'));\n      (true && !(Ember.isArray(this.get('editableSections'))) && Ember.assert('{{generic-widgets/form-widget}} requires extending components to provide an `editableSections` array', Ember.isArray(this.get('editableSections'))));\n      (true && !(Ember.isPresent(this.get('service'))) && Ember.assert('{{generic-widgets/form-widget}} requires extending components to provide a `service` service', Ember.isPresent(this.get('service'))));\n      (true && !(Ember.isArray(this.get('editableRecords'))) && Ember.assert('{{generic-widgets/form-widget}} requires an `editableRecords` array', Ember.isArray(this.get('editableRecords'))));\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // auto-focus on first input control\n\n\n      const el = this.$('input');\n\n      if (el && el[0]) {\n        el[0].focus();\n      } // install keyboard listener\n\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('actions', this, 'onKeyDown', event);\n      };\n\n      document.addEventListener('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      document.removeEventListener('keydown', this._onKeyDown);\n    },\n\n    filteredSections: Ember.computed('editableSections', 'service.filter', function () {\n      const sections = Ember.copy(this.get('editableSections'), true) || [];\n      const filter = this.get('service.filter');\n      return sections.map(section => {\n        /*eslint-disable */\n        Ember.set(section, 'fields', section.fields.filter(field => {\n          return new RegExp(`^${filter}`, 'i').test(field.label);\n        }));\n        /*eslint-enable */\n\n        return section;\n      }).filter(section => section.fields.length > 0);\n    }),\n\n    onKeyDown(event) {\n      // can check to see if focused element is in this component:\n      // let el = this.$()[0];\n      // if (!el.contains(document.activeElement)) return;\n      if (event.key === 'Enter') {// Disable Enter keyDown, see NYAAR-18213\n        // return this.onEnter();\n      }\n\n      if (event.key === 'z' && (event.metaKey || event.ctrlKey)) {\n        this.get('service').undo();\n      }\n    },\n\n    onEnter() {\n      if (!document.activeElement) {\n        this.get('service').apply();\n        return;\n      } // buttons handle enter button on their own\n\n\n      if (document.activeElement.tagName === 'BUTTON') {\n        return;\n      }\n\n      const {\n        classList\n      } = document.activeElement; // power selects handle enter button on their own\n\n      if (classList.contains('ember-power-select-trigger')) {\n        return;\n      } // enter toggles an on/off switch\n\n\n      if (classList.contains('onoffswitch-switch')) {\n        document.activeElement.parentElement.click();\n        return;\n      }\n\n      const title = this.get('title');\n      this.get('service').apply(title);\n    },\n\n    actions: {\n      onCellValueChange(record, valuePath, value, options) {\n        this.get('service').setRecordValue(record, valuePath, value, options);\n\n        if (valuePath === 'vehicleType' || valuePath === 'noShowReason' || valuePath === 'assignRoute' || valuePath === 'noShowNotes') {\n          record.set('isForceDirty', true);\n          record.set(valuePath, value);\n        }\n      },\n\n      onCellValueAppend(record, valuePath, modelName) {\n        return this.get('service').pushRecordValue(record, valuePath, modelName);\n      },\n\n      onCellValueRemove(record, valuePath, modelName, options) {\n        this.get('service').pullRecordValue(record, valuePath, options.record);\n      },\n\n      onCloseClick() {\n        this.get('service').close(); // destroy the note that have not been destroyed\n\n        const editableRecords = this.get('editableRecords') || [];\n        editableRecords.forEach(currentRecord => {\n          if (!Ember.isNone(currentRecord.get('cancelNotes'))) {\n            currentRecord.set('cancelNotes', '');\n          }\n        });\n      },\n\n      onUndoClick() {\n        this.get('service').undo();\n      },\n\n      onLinkToggle() {\n        this.get('service').toggleLinkMode();\n      },\n\n      onSearchToggle() {\n        this.get('service').toggleSearchMode();\n      },\n\n      onApplyClick() {\n        const title = this.get('title');\n        this.get('service').apply(title);\n      },\n\n      onItemButtonClick() {\n        /*eslint-disable */\n        alert('Clicked button');\n        /*eslint-enable */\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/form-widget/section/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['generic-panel'],\n    classNameBindings: ['isCollapsible', 'isInitial', 'isCollapsed', 'isExpanded'],\n    title: null,\n    section: null,\n    isCollapsible: false,\n    collapseState: 'initial',\n    isInitial: Ember.computed.equal('collapseState', 'initial'),\n    isCollapsed: Ember.computed.equal('collapseState', 'collapsed'),\n    isExpanded: Ember.computed.equal('collapseState', 'expanded'),\n\n    toggleCollapse() {\n      const collapseState = this.get('collapseState');\n\n      if (collapseState === 'collapsed') {\n        this.set('collapseState', 'expanded');\n      } else {\n        this.set('collapseState', 'collapsed');\n      }\n    },\n\n    actions: {\n      onHeaderClick() {\n        if (this.get('isCollapsible')) this.toggleCollapse();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/form-widget/section/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"m6F0k8kD\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"title\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"panel-header \\\",[27,\\\"if\\\",[[23,[\\\"isCollapsible\\\"]],\\\"is-collapsible\\\",\\\"\\\"],null]]]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isCollapsible\\\"]]],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCollapsible\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isCollapsed\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"panel-title\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onHeaderClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-body\\\"],[9],[0,\\\"\\\\n  \\\"],[14,1],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/form-widget/section/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/form-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"xoaMoM3V\",\n    \"block\": \"{\\\"symbols\\\":[\\\"record\\\",\\\"index\\\",\\\"section\\\",\\\"field\\\",\\\"error\\\",\\\"record\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-header-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editModal\\\",\\\"isSearching\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-search\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-widget-search-input\\\"],[11,\\\"data-test-form-search-input\\\",\\\"\\\"],[11,\\\"placeholder\\\",\\\"Filter Fields\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"editModal\\\",\\\"filter\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"editModal\\\",\\\"filter\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-widget-search-x\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchToggle\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"form-widget-title\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"      \\\"],[1,[27,\\\"help-link\\\",null,[[\\\"componentName\\\"],[[23,[\\\"componentName\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"editModal\\\",\\\"editableRecords\\\",\\\"length\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-widget-header-button\\\"],[11,\\\"data-test-form-header-button\\\",\\\"\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLinkToggle\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-link\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editModal\\\",\\\"isShrinking\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-widget-header-button\\\"],[11,\\\"data-test-form-header-button\\\",\\\"\\\"],[11,\\\"data-test-form-refresh-button\\\",\\\"\\\"],[11,\\\"title\\\",\\\"Refresh\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-refresh\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-widget-header-button\\\"],[11,\\\"data-test-form-header-button\\\",\\\"\\\"],[11,\\\"data-test-form-refresh-button\\\",\\\"\\\"],[11,\\\"title\\\",\\\"Refresh\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-refresh\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-widget-header-button\\\"],[11,\\\"data-test-form-header-button\\\",\\\"\\\"],[11,\\\"data-test-form-apply-button\\\",\\\"\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onApplyClick\\\"],null]],[12,\\\"disabled\\\",[21,\\\"saveDisable\\\"]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-widget-header-button\\\"],[11,\\\"data-test-form-header-button\\\",\\\"\\\"],[11,\\\"data-test-form-close-button\\\",\\\"\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-subheader\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"editableRecords\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Passenger\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Passenger: \\\"],[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"fullName\\\",\\\"valuePath\\\"]]],null],false],[0,\\\" (ID#\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unassigned\\\"]],\\\"parameters\\\":[]}],[0,\\\")\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Driver\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Driver: \\\"],[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"fullName\\\",\\\"valuePath\\\"]]],null],false],[0,\\\" (ID#\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unassigned\\\"]],\\\"parameters\\\":[]}],[0,\\\")\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Vehicle\\\"],null],[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Breakdown\\\"],null]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Vehicle ID#\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"vehicleId\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"vehicleId\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unassigned\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Trip\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Passenger ID:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"riderId\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"riderId\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unassigned\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Trip ID:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unassigned\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Route\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Route:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"routeId\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"routeId\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unnamed\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"title\\\"]],\\\"NoShow Approval Form\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Trip ID:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unnamed\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"title\\\"]],\\\"No Show Stop\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Stop ID:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unnamed\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"title\\\"]],\\\"No Show Trip\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Trip ID:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"tripId\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"tripId\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unnamed\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"formType\\\"]],\\\"Replacement\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Original route:\\\\n        \\\"],[4,\\\"if\\\",[[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null]],null,{\\\"statements\\\":[[1,[27,\\\"get\\\",[[22,6,[]],[23,[\\\"readOnlyFields\\\",\\\"id\\\",\\\"valuePath\\\"]]],null],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"unnamed\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editModal\\\",\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"editModal\\\",\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"li\\\"],[9],[1,[22,5,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"subheading\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[21,\\\"subheading\\\"],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"editableRecords\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"filteredSections\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[27,\\\"eq\\\",[[22,3,[\\\"title\\\"]],\\\"Read Only\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/form-widget/section\\\",null,[[\\\"title\\\",\\\"section\\\",\\\"isCollapsible\\\"],[[27,\\\"readonly\\\",[[22,3,[\\\"title\\\"]]],null],[27,\\\"readonly\\\",[[22,3,[]]],null],true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"subsections\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-button-cell\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"form-button-primary\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"addItem\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n          Add New Config\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[22,3,[\\\"fields\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[2,\\\" multi type means the component doesn't fit label form layout \\\"],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,4,[\\\"isMultiType\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\" \\\"],[1,[22,4,[\\\"label\\\"]],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"form-edit-cell data-test-\\\",[22,4,[\\\"id\\\"]],\\\"-input\\\"]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,4,[\\\"editable\\\"]],false],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,4,[\\\"type\\\"]],\\\"date\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null],[22,4,[\\\"format\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"form-components/\\\",[22,4,[\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"markerType\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"disableAddress\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\",\\\"onChange\\\",\\\"onCreate\\\",\\\"onRemove\\\"],[[27,\\\"readonly\\\",[[22,1,[]]],null],[27,\\\"readonly\\\",[[22,4,[\\\"markerType\\\"]]],null],[27,\\\"get\\\",[[22,4,[\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,4,[\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,4,[\\\"valuePath\\\"]]],null],[27,\\\"and\\\",[[23,[\\\"editModal\\\",\\\"isLinkMode\\\"]],[27,\\\"gt\\\",[[22,2,[]],0],null]],null],[23,[\\\"editModal\\\",\\\"isAddressDisable\\\"]],[27,\\\"readonly\\\",[[22,4,[\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[22,4,[\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[22,4,[\\\"readonlyCell\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueAppend\\\",[22,1,[]],[22,4,[\\\"valuePath\\\"]],[22,4,[\\\"modelName\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueRemove\\\",[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,4,[\\\"isMultiType\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,4,[\\\"label\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\" \\\"],[1,[22,4,[\\\"label\\\"]],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"form-components/\\\",[22,4,[\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"field\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"disableAddress\\\",\\\"format\\\",\\\"extra\\\",\\\"onChange\\\",\\\"onCreate\\\",\\\"onRemove\\\"],[[27,\\\"readonly\\\",[[22,1,[]]],null],[27,\\\"readonly\\\",[[22,4,[]]],null],[27,\\\"get\\\",[[22,4,[\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"placeholder\\\"]]],null]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,4,[\\\"valuePath\\\"]]],null],[27,\\\"and\\\",[[23,[\\\"editModal\\\",\\\"isLinkMode\\\"]],[27,\\\"gt\\\",[[22,2,[]],0],null]],null],[23,[\\\"editModal\\\",\\\"isAddressDisable\\\"]],[27,\\\"readonly\\\",[[22,4,[\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[22,4,[\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueAppend\\\",[22,1,[]],[22,4,[\\\"valuePath\\\"]],[22,4,[\\\"modelName\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueRemove\\\",[22,1,[]],[22,4,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[1,2]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/form-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/map-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/config/environment\"], function (_exports, _component, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n\n  var _default = _component.default.extend({\n    interaction: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    classNames: ['map-widget'],\n    layoutName: 'components/generic-widgets/map-widget',\n    classNameBindings: ['testMapWidget'],\n    testMapWidget: false,\n    centerLat: _environment.default.tomtom.search.center.lat,\n    centerLng: _environment.default.tomtom.search.center.lon,\n    zoom: 12,\n    autoZoom: true,\n    map: null,\n    isWidgetMaximized: Ember.computed.not('maximizer.isWidgetMinified'),\n    // tomtom will only accept an element ID, so create a unique one\n    mapElementId: Ember.computed('elementId', function () {\n      const elementId = this.get('elementId');\n      return `${elementId}-map`;\n    }),\n\n    init() {\n      const mapService = this.get('mapService');\n\n      this._super(...arguments);\n\n      this._didZoomMap = () => {\n        Ember.run.scheduleOnce('afterRender', this, 'didZoomMap');\n      };\n\n      this._didWheelZoom = () => {\n        Ember.run.scheduleOnce('afterRender', this, 'didWheelZoom');\n      };\n\n      this._didPanMap = () => {\n        Ember.run.scheduleOnce('afterRender', this, 'didPanMap');\n      };\n\n      this.set('centerLat', mapService.get('center.lat'));\n      this.set('centerLng', mapService.get('center.lon'));\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const mapElementId = this.get('mapElementId');\n      const map = this.get('mapService').createLeafletMap(mapElementId);\n      map.native.on('zoomstart', this._didZoomMap);\n      map.native.on('mouseup', this._didPanMap);\n      window.L.DomEvent.on(map.native._container, 'mousewheel', this._didWheelZoom);\n      this.set('map', map);\n    },\n\n    willDestroyElement() {\n      const map = this.get('map');\n      map.native.off('zoomstart', this._didZoomMap);\n      map.native.off('mouseup', this._didPanMap);\n      map.native.remove();\n      this.set('map', null);\n\n      this._super(...arguments);\n    },\n\n    destroy() {\n      this._didZoomMap = null;\n\n      this._super(...arguments);\n    },\n\n    didZoomMap() {\n      this.get('interaction').didZoomMap();\n    },\n\n    didPanMap() {\n      this.set('autoZoom', false);\n    },\n\n    didWheelZoom() {\n      this.set('autoZoom', false);\n    },\n\n    enableAutoZoom() {\n      this.set('autoZoom', true);\n    },\n\n    onWidgetResize() {\n      this._super(...arguments);\n\n      Ember.run.scheduleOnce('afterRender', this, 'invalidateMapSize');\n    },\n\n    boundDistance: Ember.computed('bounds._southWest', function () {\n      const bounds = this.get('bounds');\n      const map = this.get('map');\n\n      if (bounds._southWest && map) {\n        const northEastCorner = bounds.getNorthEast();\n        const southWestCorner = bounds.getSouthWest();\n        const distance = Math.abs(map.native.distance(northEastCorner, southWestCorner));\n        return distance;\n      }\n\n      return null;\n    }),\n    mapBoundDistance: Ember.computed('mapBounds._southWest', function () {\n      const bounds = this.get('mapBounds');\n      const map = this.get('map');\n      if (!bounds || !map) return;\n\n      if (bounds._southWest) {\n        const northEastCorner = bounds.getNorthEast();\n        const southWestCorner = bounds.getSouthWest();\n        const distance = Math.abs(map.native.distance(northEastCorner, southWestCorner));\n        return distance;\n      }\n\n      return null;\n    }),\n    shouldRefreshMapZoom: Ember.computed('mapBoundsID', 'mapBoundDistance', 'boundsID', 'boundDistance', function () {\n      const mapBoundId = this.get('mapBoundsID');\n      const boundsID = this.get('boundsID');\n\n      if (boundsID === mapBoundId) {\n        // singular vehicle(s) moving might create different boundaries with negligible difference in distance\n        // we want to capture a boundary actually shrinking or enlarging when user selects more items or deselects less items while vehicle(s) are in motion\n        const boundDistance = Math.floor(this.get('boundDistance'));\n        const mapBoundDistance = Math.floor(this.get('mapBoundDistance'));\n        return boundDistance !== mapBoundDistance;\n      }\n\n      return true;\n    }),\n    onCenterOrZoomChange: Ember.observer('bounds._southWest', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateMapView');\n    }),\n    // bound id is a computed property determined by changes in the checked item array\n    onCheckedItemsChange: Ember.observer('boundsID', function () {\n      this.enableAutoZoom();\n    }),\n\n    invalidateMapSize() {\n      const map = this.get('map');\n      if (!map) return;\n      map.native.invalidateSize();\n      Ember.run.scheduleOnce('afterRender', this, 'resetMapView');\n    },\n\n    /**\n     *\n     * @summary A generic function to reset map view with correct zoom and center value unless re-center button is clicked only center map view\n     * @param {bool} manual - recenter map view without zoom level.\n    */\n    reCenterMapView() {\n      let manual = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      const map = this.get('map');\n      const bounds = this.get('bounds');\n      const boundId = this.get('boundsID');\n      let center = null;\n      if (!map) return;\n      let zoom = map.getZoom(); // get user's current zoom level\n\n      if (bounds && bounds._southWest) {\n        center = bounds.getCenter();\n      } // map view needs to be at least 12 or greater or zoom will be recalculated\n\n\n      if (bounds && !bounds._southWest && !manual) {\n        zoom = zoom <= this.get('zoom') ? this.get('zoom') : zoom;\n      }\n\n      const centerLat = center ? center.lat : this.get('centerLat');\n      const centerLng = center ? center.lng : this.get('centerLng');\n      if (Ember.isNone(centerLat) || Ember.isNone(centerLng) || Ember.isNone(zoom)) return;\n      const mapViewDigest = JSON.stringify([boundId, centerLat, centerLng]);\n\n      if (mapViewDigest !== this._mapViewDigest || manual) {\n        map.move(centerLng, centerLat, zoom);\n        this._mapViewDigest = mapViewDigest;\n        this.set('mapBoundsID', boundId);\n        this.set('mapBounds', bounds);\n      }\n    },\n\n    /**\n     *\n     * @summary A generic function to reset map view\n    */\n    resetMapView() {\n      const map = this.get('map');\n      const bounds = this.get('bounds');\n      if (!map || !bounds) return;\n\n      if (Ember.isNone(bounds._southWest)) {\n        return this.reCenterMapView(); // either we default to hard-coded center or use the current center lat / center lng\n      }\n\n      if (bounds._southWest) {\n        const northeast = bounds.getNorthEast();\n        const southwest = bounds.getSouthWest();\n        const bbox = new bemap.BoundingBox(southwest.lng, southwest.lat, northeast.lng, northeast.lat);\n        map.moveToBoundingBox(bbox);\n      }\n    },\n\n    /**\n     *\n     * @summary A generic function to update map view based on a new boundary\n    */\n    updateMapView() {\n      const map = this.get('map');\n      const bounds = this.get('bounds');\n      const boundId = this.get('boundsID');\n      const autoZoom = this.get('autoZoom');\n      if (!map || !autoZoom || !bounds) return;\n\n      if (Ember.isNone(bounds._southWest)) {\n        return this.reCenterMapView(); // either we default to hard-coded center or use the current center lat / center lng\n      }\n\n      const shouldRefreshMapZoom = this.get('shouldRefreshMapZoom');\n      const center = bounds.getCenter();\n      const centerLat = center.lat;\n      const centerLng = center.lng;\n      const northeast = bounds.getNorthEast();\n      const southwest = bounds.getSouthWest();\n      const mapViewDigest = JSON.stringify([boundId, centerLat, centerLng]); // don't do anything if center hasn't changed\n\n      if (mapViewDigest !== this._mapViewDigest && shouldRefreshMapZoom) {\n        const bbox = new bemap.BoundingBox(southwest.lng, southwest.lat, northeast.lng, northeast.lat);\n        map.moveToBoundingBox(bbox);\n        this._mapViewDigest = mapViewDigest;\n        this.set('mapBoundsID', boundId);\n        this.set('mapBounds', bounds);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/map-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"KezyjGq6\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"id\\\",[21,\\\"mapElementId\\\"]],[11,\\\"class\\\",\\\"tomtom-map\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/map-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-actions/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer-actions']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-body/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer-body']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer-header'],\n    title: 'Side Drawer',\n    componentName: null,\n    workspace: Ember.inject.service(),\n    // these have no effect unless a click handler is passed\n    canClose: true,\n    canShrink: true,\n    canRefresh: true,\n    canSave: true,\n    canSearch: false,\n    isSearchEnabled: false,\n    isShrunken: Ember.computed.alias('workspace.isDrawerShrunken'),\n    onCloseClick: null,\n    onAddClick: null,\n    onShrinkClick: null,\n    onRefreshClick: null,\n    onSaveClick: null,\n    onSearchClick: null\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XZM1pDz5\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"h1\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-title\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-buttons\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onShrinkClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-button\\\"],[11,\\\"title\\\",\\\"Shrink\\\"],[11,\\\"data-test-toggle-side-drawer\\\",\\\"\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canShrink\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-angle-double-left\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[1,[27,\\\"help-link\\\",null,[[\\\"componentName\\\"],[[23,[\\\"componentName\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onSearchClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"g-side-drawer-header-button \\\",[27,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]],\\\"mode-enabled\\\"],null]]]],[11,\\\"title\\\",\\\"Search\\\"],[11,\\\"data-test-toggle-side-drawer-search\\\",\\\"\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSearch\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onSearchClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onRefreshClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-button\\\"],[11,\\\"title\\\",\\\"Refresh\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canRefresh\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onRefreshClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-refresh\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onUndoClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-button\\\"],[11,\\\"title\\\",\\\"Refresh\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canUndo\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onUndoClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-refresh\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onAddClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-button\\\"],[11,\\\"title\\\",\\\"Add\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSave\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onAddClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onSaveClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-button\\\"],[11,\\\"title\\\",\\\"Save\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSave\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onSaveClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"onCloseClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-button\\\"],[11,\\\"data-test-close-side-drawer\\\",\\\"\\\"],[11,\\\"title\\\",\\\"Close\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canClose\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-panel/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer-panel'],\n    classNameBindings: ['isCollapsible', 'isInitial', 'isCollapsed', 'isExpanded'],\n    title: null,\n    isCollapsible: false,\n    collapseState: 'initial',\n    isInitial: Ember.computed.equal('collapseState', 'initial'),\n    isCollapsed: Ember.computed.equal('collapseState', 'collapsed'),\n    isExpanded: Ember.computed.equal('collapseState', 'expanded'),\n\n    toggleCollapse() {\n      const collapseState = this.get('collapseState');\n\n      if (collapseState === 'collapsed') {\n        this.set('collapseState', 'expanded');\n      } else {\n        this.set('collapseState', 'collapsed');\n      }\n    },\n\n    actions: {\n      onHeaderClick() {\n        this.toggleCollapse();\n\n        if (this.get('onPanelHeaderClick')) {\n          this.get('onPanelHeaderClick')();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-panel/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tVBX6Wbk\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"title\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCollapsible\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-header-caret\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCollapsed\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-title\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[21,\\\"title\\\"],true],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onHeaderClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"isCollapsed\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-body p-2\\\"],[9],[0,\\\"\\\\n  \\\"],[14,1],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-panel/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/side-drawer-sub-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer-sub-header']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/side-drawer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"CcDDW1sk\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[14,1,[[27,\\\"hash\\\",null,[[\\\"body\\\",\\\"header\\\",\\\"subHeader\\\",\\\"panel\\\",\\\"actions\\\"],[[27,\\\"component\\\",[\\\"generic-widgets/side-drawer/side-drawer-body\\\"],null],[27,\\\"component\\\",[\\\"generic-widgets/side-drawer/side-drawer-header\\\"],null],[27,\\\"component\\\",[\\\"generic-widgets/side-drawer/side-drawer-sub-header\\\"],null],[27,\\\"component\\\",[\\\"generic-widgets/side-drawer/side-drawer-panel\\\"],null],[27,\\\"component\\\",[\\\"generic-widgets/side-drawer/side-drawer-actions\\\"],null]]]]]]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/side-drawer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/tree-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/tree-widget/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROW_SELECTOR = '.tree-widget-row';\n  const CONTROL_SELECTOR = '.btn-expand,.tree-widget-row-input';\n  const CONTROL_SELECTOR_PRIORITY = '.tree-widget-row-input-priority';\n  const EXPAND_BUTTON_SELECTOR = '.btn-expand';\n\n  var _default = Ember.Component.extend({\n    layout: _template.default,\n    classNames: ['tree-widget'],\n    // override these when extending component\n    rootNodes: null,\n    isLoading: false,\n    query: null,\n    isSearchEnabled: false,\n    // eliminates hierarchical tree structure for easier rendering and styling\n    flattenedNodes: Ember.computed('rootNodes.@each.{label,visibleTree,visibleSearchTree}', 'isSearchEnabled', 'isSearchEffective', 'searchText', function () {\n      const rootNodes = this.get('rootNodes');\n      if (Ember.isEmpty(rootNodes)) return [];\n      const isSearchEnabled = this.get('isSearchEnabled');\n      const isSearchEffective = this.get('isSearchEffective');\n      return rootNodes.sortBy('label').reduce((arr, node) => {\n        const nodes = isSearchEnabled && isSearchEffective ? node.get('visibleSearchTree') : node.get('visibleTree');\n        arr.push(...nodes);\n        return arr;\n      }, []);\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('afterRender', this, 'onKeyDown', event);\n      };\n\n      this.$().on('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      this.$().off('keydown', this._onKeyDown);\n      this._onKeyDown = null;\n\n      this._super(...arguments);\n    },\n\n    onKeyDown(event) {\n      switch (event.key) {\n        case 'ArrowUp':\n          return this.onArrowUp(event);\n\n        case 'ArrowDown':\n          return this.onArrowDown(event);\n\n        case 'ArrowLeft':\n          return this.onArrowLeft(event);\n\n        case 'ArrowRight':\n          return this.onArrowRight(event);\n\n        default:\n          return '';\n      }\n    },\n\n    onArrowUp(event) {\n      const row = event.target.closest(ROW_SELECTOR);\n      const previousRow = row.previousElementSibling;\n      if (!previousRow) return;\n      const control = previousRow.querySelector(CONTROL_SELECTOR);\n      if (!control) return;\n      event.preventDefault();\n      control.focus();\n    },\n\n    onArrowDown(event) {\n      const row = event.target.closest(ROW_SELECTOR);\n      const nextRow = row.nextElementSibling;\n      if (!nextRow) return;\n      const control = nextRow.querySelector(CONTROL_SELECTOR);\n      if (!control) return;\n      event.preventDefault();\n      control.focus();\n    },\n\n    onArrowLeft(event) {\n      const row = event.target.closest(ROW_SELECTOR);\n      if (!row.classList.contains('is-expanded')) return;\n      const expandButton = row.querySelector(EXPAND_BUTTON_SELECTOR);\n      if (!expandButton) return;\n      event.preventDefault();\n      expandButton.click();\n    },\n\n    onArrowRight(event) {\n      const row = event.target.closest(ROW_SELECTOR);\n\n      if (!row.classList.contains('is-expandable') || row.classList.contains('is-expanded')) {\n        return;\n      }\n\n      const expandButton = row.querySelector(EXPAND_BUTTON_SELECTOR);\n      if (!expandButton) return;\n      event.preventDefault();\n      expandButton.click();\n    },\n\n    click(event) {\n      const row = event.target.closest(ROW_SELECTOR);\n      const control = row.querySelector(CONTROL_SELECTOR);\n      const controlPriority = row.querySelector(CONTROL_SELECTOR_PRIORITY);\n\n      if (controlPriority) {\n        controlPriority.focus();\n      } else if (control) {\n        control.focus();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/tree-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Mw9Hv/CD\",\n    \"block\": \"{\\\"symbols\\\":[\\\"node\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tree-widget-loading-spinner\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"flattenedNodes\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"generic-widgets/tree-widget/tree-widget-row\\\",null,[[\\\"node\\\",\\\"isSearchEnabled\\\"],[[27,\\\"readonly\\\",[[22,1,[]]],null],[27,\\\"readonly\\\",[[23,[\\\"isSearchEnabled\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/tree-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/tree-widget/tree-widget-row/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/tree-widget/tree-widget-row/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    systemConfig: Ember.inject.service(),\n    layout: _template.default,\n    classNames: ['tree-widget-row'],\n    classNameBindings: ['isExpanded', 'isContent', 'isExpandable', 'isCategory', 'isObject', 'isValue', 'isNumber', 'isString', 'isBoolean', 'rowDepthClass', 'isModified', 'isOutdated'],\n    node: null,\n    isSearchEnabled: false,\n    isSearchEffective: Ember.computed.readOnly('systemConfig.isSearchEffective'),\n    // immutable\n    label: Ember.computed.readOnly('node.label'),\n    depth: Ember.computed.readOnly('node.depth'),\n    searchText: Ember.computed.readOnly('node.searchText'),\n    isSearchMatch: Ember.computed.readOnly('node.isSearchMatch'),\n    isValueSearchMatch: Ember.computed.readOnly('node.isValueSearchMatch'),\n    canEdit: Ember.computed.readOnly('node.canEdit'),\n    isExpandable: Ember.computed.readOnly('node.isExpandable'),\n    isCustomizedPanel: Ember.computed.readOnly('node.isCustomizedPanel'),\n    showRightPanel: Ember.computed.alias('systemConfig.showRightPanel'),\n    currentComponentPath: Ember.computed.alias('systemConfig.currentComponentPath'),\n    isNew: Ember.computed.readOnly('node.isNew'),\n    isCategory: Ember.computed.readOnly('node.isCategory'),\n    isCollection: Ember.computed.readOnly('node.isCollection'),\n    isObject: Ember.computed.readOnly('node.isObject'),\n    isValue: Ember.computed.readOnly('node.isValue'),\n    isNumber: Ember.computed.readOnly('node.isNumber'),\n    isString: Ember.computed.readOnly('node.isString'),\n    isBoolean: Ember.computed.readOnly('node.isBoolean'),\n    isColor: Ember.computed.readOnly('node.isColor'),\n    // component doesn't know about hidden/deleted children\n    children: Ember.computed.readOnly('node.visibleChildren'),\n    canAdd: Ember.computed('node.{isCollection,canAdd}', function () {\n      return this.get('node.isCollection') && this.get('node.canAdd');\n    }),\n    canRemove: Ember.computed('node.parent.{isCollection,canRemove,visibleChildren.length}', function () {\n      let isWithinMinimum = true;\n      const minimumItem = this.get('node.parent.minimumItem');\n      let visibleLength = 0;\n\n      if (this.get('node.parent.visibleChildren')) {\n        visibleLength = this.get('node.parent.visibleChildren').filter(child => {\n          return !child.isNew;\n        }).length;\n      }\n\n      if (minimumItem) {\n        isWithinMinimum = visibleLength > minimumItem;\n      }\n\n      return this.get('node.parent.isCollection') && this.get('node.parent.canRemove') && isWithinMinimum;\n    }),\n    // mutable\n    value: Ember.computed.alias('node.value'),\n    isExpanded: Ember.computed.alias('node.isExpanded'),\n    // state\n    isOutdated: Ember.computed.alias('node.isTreeOutdated'),\n    isModified: Ember.computed.alias('node.isTreeModified'),\n    isContent: Ember.computed('isExpandable', function () {\n      return !this.get('isExpandable');\n    }),\n    // indentation styling\n    rowDepthClass: Ember.computed('depth', function () {\n      const depth = this.get('depth');\n      return `row-depth-${depth}`;\n    }),\n    highlightedLabel: Ember.computed('label', 'searchText', 'isSearchEnabled', 'isSearchMatch', function () {\n      const label = this.get('label');\n      const searchText = this.get('searchText');\n      const isSearchEnabled = this.get('isSearchEnabled');\n      const isSearchMatch = this.get('isSearchMatch');\n      const isSearchEffective = isSearchEnabled && Ember.isPresent(searchText) && searchText.length >= 3;\n\n      if (isSearchEffective && isSearchMatch) {\n        const regex = new RegExp(searchText, 'gi');\n        return label.replace(regex, function (str) {\n          return `<span class=\"search-highlighted\">${str}</span>`;\n        });\n      }\n\n      return label;\n    }),\n    isValueInputMatched: Ember.computed('isSearchEnabled', 'isSearchEffective', 'value', 'isValueSearchMatch', function () {\n      return this.get('isSearchEnabled') && this.get('isSearchEffective') && Ember.isPresent(this.get('value')) && this.get('isValueSearchMatch');\n    }),\n\n    // turn off every other radio node to false\n    turnOffAllOtherRadioSettings() {\n      const label = this.get('node.label');\n      const categoryNode = this.get('node.parent.parent');\n      const siblings = categoryNode.get('children') || [];\n      siblings.forEach(child => {\n        const radioNode = child.children.find(node => node.label === label);\n\n        if (radioNode && radioNode.value === true) {\n          radioNode.set('value', false);\n        }\n      });\n    },\n\n    actions: {\n      onExpandButtonToggle() {\n        this.toggleProperty('node.isExpanded');\n      },\n\n      onRemoveButtonClicked() {\n        const node = this.get('node');\n        this.get('systemConfig').onRemoveConfigItem(node);\n      },\n\n      onAddButtonClicked() {\n        const node = this.get('node');\n        this.systemConfig.insertNewItemTree(node);\n      },\n\n      onColorChanged(colorValue) {\n        this.set('node.value', colorValue);\n      },\n\n      onCheckboxClick(event) {\n        event.stopPropagation(); // if this is a radio button node and we are trying to turn on\n        // then turn off the other ones\n\n        if (!this.value && this.get('node.radioButton')) {\n          this.turnOffAllOtherRadioSettings();\n        }\n\n        this.toggleProperty('value');\n      },\n\n      onTextInput(text) {\n        this.set('node.value', text);\n      },\n\n      onDisplayNameTextInput(text) {\n        this.set('node.configItem.displayName', text);\n        this.set('node.label', text);\n      },\n\n      showCustomizedPanel(componentPath) {\n        this.setProperties({\n          'showRightPanel': true,\n          'currentComponentPath': componentPath\n        });\n      },\n\n      hideRightPanel() {\n        if (!this.get('isCustomizedPanel')) {\n          this.set('showRightPanel', false);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/generic-widgets/tree-widget/tree-widget-row/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"6PKyIas/\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isCustomizedPanel\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"component-link\\\"],[9],[1,[23,[\\\"node\\\",\\\"label\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"showCustomizedPanel\\\",[23,[\\\"node\\\",\\\"customizedPanel\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isExpandable\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-expand\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onExpandButtonToggle\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isExpanded\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-minus-square-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus-square-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tree-widget-row-label\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNew\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"tree-widget-row-input-priority tree-widget-row-input tree-widget-row-input-text\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"node\\\",\\\"configItem\\\",\\\"displayName\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDisplayNameTextInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[21,\\\"highlightedLabel\\\"],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCategory\\\"]]],null,{\\\"statements\\\":[[0,\\\"        (\\\"],[1,[23,[\\\"children\\\",\\\"length\\\"]],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"hideRightPanel\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tree-widget-row-value\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isCategory\\\"]],[23,[\\\"isObject\\\"]]],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isColor\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"spectrum-color-picker\\\",null,[[\\\"preferredFormat\\\",\\\"onChange\\\",\\\"color\\\",\\\"flat\\\",\\\"showInput\\\"],[\\\"hex\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onColorChanged\\\"],null],[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isBoolean\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"input\\\"],[12,\\\"id\\\",[28,[[21,\\\"elementId\\\"],\\\"-checkbox\\\"]]],[11,\\\"class\\\",\\\"tree-widget-row-input tree-widget-row-input-checkbox\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxClick\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"input\\\"],[12,\\\"class\\\",[28,[\\\"tree-widget-row-input tree-widget-row-input-text \\\",[27,\\\"if\\\",[[23,[\\\"isValueInputMatched\\\"]],\\\"search-highlighted\\\"],null]]]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTextInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tree-widget-row-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canRemove\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-danger btn-delete\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveButtonClicked\\\"],null]],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canAdd\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-danger btn-add\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddButtonClicked\\\"],null]],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/generic-widgets/tree-widget/tree-widget-row/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/get-special-permission/component\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    userId: null,\n    password: null,\n    isRunning: false,\n    // pass in data to component\n    haveSpecialPermission: false,\n    // value returned if it has permission\n    isShowSpecialPermission: false,\n    // close or open the modal dialog box\n    requiredPermission: null,\n    // permission needed\n    headerTitle: null,\n    bodyMessage: null,\n\n    getTokenPermissions(userId, password) {\n      const session = this.get('session');\n      const notifications = this.get('notifications');\n      const ajax = this.get('ajax');\n      const {\n        host\n      } = _apiUrls.API.ssoService;\n      const url = host + '/auth-token';\n      const json = {\n        plugin: 'internal;adept4;basic',\n        internal: {\n          email: userId,\n          password: password\n        },\n        basic: {\n          username: userId,\n          password: password\n        },\n        adept4: {\n          username: userId,\n          password: password\n        }\n      };\n      return ajax.post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).then(response => {\n        if (Ember.isPresent(response) && Ember.isPresent(response.token)) {\n          const tokenParts = response.token.split('.');\n          const tokenInfo = JSON.parse(atob(tokenParts[1]));\n          const permissions = tokenInfo.permissions;\n          return permissions;\n        }\n\n        return null;\n      }).catch(function (error) {\n        notifications.warning(`Error validating user. ${error.message}. Ensure credentials were entered properly.`);\n        return null;\n      });\n    },\n\n    getRequestPermission(userId, password) {\n      const notifications = this.get('notifications');\n      const requiredPermission = this.get('requiredPermission');\n      return this.getTokenPermissions(userId, password).then(async permissions => {\n        if (Ember.isPresent(permissions)) {\n          const hasPermission = permissions.includes(requiredPermission);\n          if (!hasPermission) notifications.warning('User does not have permission to override.');\n          return hasPermission;\n        }\n\n        return false;\n      });\n    },\n\n    actions: {\n      onCloseRequestPermission() {\n        this.set('haveSpecialPermission', false); // turn off working icon\n\n        this.set('isRunning', false);\n        this.toggleProperty('isShowSpecialPermission');\n      },\n\n      async onConfirmRequestPermission() {\n        const userId = this.get('userId');\n        const password = this.get('password');\n        const overrideTravelNeedsDetails = this.get('booking.overrideTravelNeedsDetails');\n        const overrideTravelNeed = this.get('overrideTravelNeed'); // turn on working icon\n\n        this.set('isRunning', true);\n        const hasPermission = await this.getRequestPermission(userId, password);\n\n        if (hasPermission) {\n          this.set('haveSpecialPermission', true);\n          this.set('booking.travelNeedsOverride', true);\n          overrideTravelNeedsDetails.pushObject(overrideTravelNeed);\n          this.toggleProperty('isShowSpecialPermission'); // close modal\n        } else {\n          this.set('haveSpecialPermission', false);\n        } // turn off working icon\n\n\n        this.set('isRunning', false);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/get-special-permission/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8EfmFi+r\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseRequestPermission\\\"],null],\\\"special-request-styles-overlay\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"special-request\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"special-request-header\\\"],[9],[1,[21,\\\"headerTitle\\\"],false],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseRequestPermission\\\"],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"special-request-body\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"bodyMessage\\\"],false],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"special-request-credential\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"credential-header\\\"],[9],[0,\\\"Enter credentials for an account with override privileges\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"credential-user-id\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"User ID\\\"],[10],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"userId\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"userId\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"credential-password\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"Password\\\"],[10],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"password\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"password\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"special-request-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseRequestPermission\\\"],null]],[9],[0,\\\"Cancel\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmRequestPermission\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isRunning\\\"]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"       Confirm\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/get-special-permission/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/global-spinner/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['global-spinner']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/global-spinner/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"w3ojHsNh\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-3x fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/global-spinner/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/header-nav/component\", [\"exports\", \"moment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\", \"adept-iq/utils/help-page-redirect\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/config\"], function (_exports, _moment, _mappedPermIds, _environment, _apiUrls, _helpPageRedirect, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // import RoadSupervisorApi from 'adept-iq/classes/road-supervisor-api';\n  const showWorkDiagnostics = localStorage.showWorkDiagnostics ? localStorage.showWorkDiagnostics === 'true' : _environment.default.work.showDiagnostics;\n\n  var _default = Ember.Component.extend({\n    router: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    scheduleGeneration: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    stopsReorder: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    interaction: Ember.inject.service(),\n    work: Ember.inject.service(),\n    user: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['row', 'no-gutters', 'header-wrapper', 'header-nav'],\n    classNameBindings: ['isLightMode:is-light:is-dark', 'isReordering'],\n    ajax: Ember.inject.service(),\n    dashboards: null,\n    transitionTo: null,\n    configureWorkspaceAllowed: false,\n    saveWorkspaceAllowed: false,\n    saveAsWorkspaceAllowed: false,\n    deleteWorkspaceAllowed: false,\n    openWorkspaceAllowed: false,\n    generateScheduleAllowed: false,\n    closeScheduleAllowed: false,\n    systemConfigurationAllowed: false,\n    resetPasswordAllowed: false,\n    aboutAdeptIQAllowed: true,\n    helpAdeptIQAllowed: false,\n    // using observer instead of computed because of AIQ-2944\n    // index.js:163 Uncaught Error: Assertion Failed: You modified \"helpAdeptIQAllowed\" twice on <adept-iq@component:header-nav::ember332> in a single render.\n    helpAdeptIQAllowedObserver: Ember.observer('workspace.{isVehicleDriverDashboard,helpSelectedTab}', 'systemConfig.{showRightPanel,currentComponentPath}', function () {\n      const isVehicleDriverDashboard = this.get('workspace.isVehicleDriverDashboard');\n      const isRoadSupervisorDashboard = this.get('workspace.isRoadSupervisorDashboard');\n      const selectedTab = this.get('workspace.helpSelectedTab');\n      const showRightPanel = this.get('systemConfig.showRightPanel');\n      const currentComponentPath = this.get('systemConfig.currentComponentPath');\n      const SYSTEM_CONFIG_COMPONENTS = ['route-master', 'places'];\n\n      if (showRightPanel) {\n        this.set('helpAdeptIQAllowed', SYSTEM_CONFIG_COMPONENTS.includes(currentComponentPath));\n      } else {\n        this.set('helpAdeptIQAllowed', !isRoadSupervisorDashboard && !(isVehicleDriverDashboard && selectedTab === _config.LOOKUP_TAB));\n      }\n    }),\n    //openTableauReportAllowed: false,\n    logoutAllowed: true,\n    avlmLite: false,\n    clearButtonEnabled: Ember.computed.gt('activeContext.topActiveContext.checkedItems.length', 0),\n    isReordering: Ember.computed.alias('stopsReorder.reorderInProgress'),\n    isEditing: Ember.computed.alias('workspace.isEditing'),\n    isLightMode: Ember.computed.alias('workspace.isLightMode'),\n    isAuthenticated: Ember.computed.alias('session.isAuthenticated'),\n    isNewUser: Ember.computed.alias('session.isNewUser'),\n    isHidden: Ember.computed.alias('stopsReorder.isHidden'),\n    isScheduler: Ember.computed.readOnly('user.isScheduler'),\n    isRoadSupOnTablet: Ember.computed.readOnly('user.isRoadSupOnTablet'),\n    isAuthenticatedAndValidUser: Ember.computed('isAuthenticated', 'isNewUser', function () {\n      const isValid = this.get('isAuthenticated') && this.get('isNewUser') === 'false';\n      return isValid;\n    }),\n    isBookingWorkspace: Ember.computed.alias('workspace.isBookingDashboard'),\n    isDispatchWorkspace: Ember.computed.alias('workspace.isDispatchDashboard'),\n    showConfigWorkspace: Ember.computed('workspace.dashboardModel', 'configureWorkspaceAllowed', 'isRoadSupOnTablet', function () {\n      const configWorkspaceAllowed = this.get('configureWorkspaceAllowed');\n      const isBookingWorkspace = this.get('workspace.isBookingDashboard');\n      const isPermissionWorkspace = this.get('workspace.isPermissionsDashboard');\n      const isRoadSupOnTablet = this.get('isRoadSupOnTablet');\n      return configWorkspaceAllowed && !isBookingWorkspace && !isPermissionWorkspace && !isRoadSupOnTablet;\n    }),\n    hideTimeLinePicker: Ember.computed.or('workspace.{isScheduleDashboard,isVehicleDriverDashboard,isPlaybackDashboard,isReportsDashboard,isAdhocReportsDashboard,isBookingDashboard,isReconcileDashboard,isPermissionsDashboard}'),\n    showWorkDiagnostics,\n    activeRoute: Ember.computed.alias('router.currentRouteName'),\n\n    didInsertElement() {\n      this._super(...arguments); // exposes console commands `showDiagnostics()` and `hideDiagnostics()`\n      // to view queue states; setting persists in `localStorage` for reload\n\n\n      window.showDiagnostics = () => {\n        this.set('showWorkDiagnostics', true);\n        localStorage.showWorkDiagnostics = true;\n      };\n\n      window.hideDiagnostics = () => {\n        this.set('showWorkDiagnostics', false);\n        localStorage.showWorkDiagnostics = false;\n      };\n    },\n\n    configPermissionsChange: Ember.observer('activeRoute', 'workspace.configPermissions', 'permissionLayer.userPermissionHash', 'workspace.dashboardModel', function () {\n      this.resetHeaderFunctions();\n      this.configureHeaderPermission();\n    }),\n    oneDayTimelineNotFuture: Ember.computed('workspace.{startDate,endDate}', function () {\n      const startDate = (0, _moment.default)(this.get('workspace.startDate'));\n      const endDate = (0, _moment.default)(this.get('workspace.endDate'));\n      const currentDate = (0, _moment.default)().startOf('day');\n\n      if (startDate.format('YYYY-MMM-D') !== endDate.format('YYYY-MMM-D')) {\n        return false;\n      }\n\n      if (endDate.startOf('day').isAfter(currentDate)) {\n        return false;\n      }\n\n      const routes = _environment.default.APP.avlmLite ? this.get('activeContext.workspaceData.avlm-route') : this.get('activeContext.workspaceData.route'); // Only 1 date is selected by this point\n      // make sure that the schedule is not locked already.\n\n      if (routes) {\n        if (routes.some(route => {\n          return route.get('schedule.locked');\n        })) {\n          return false;\n        }\n      }\n\n      return true;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.configPermissionsChange();\n    },\n\n    resetHeaderFunctions() {\n      this.set('configureWorkspaceAllowed', false);\n      this.set('saveWorkspaceAllowed', false);\n      this.set('saveAsWorkspaceAllowed', false);\n      this.set('deleteWorkspaceAllowed', false);\n      this.set('openWorkspaceAllowed', false);\n      this.set('generateScheduleAllowed', false);\n      this.set('closeScheduleAllowed', false);\n      this.set('systemConfigurationAllowed', false);\n      this.set('resetPasswordAllowed', false);\n      this.set('aboutAdeptIQAllowed', true);\n      this.set('logoutAllowed', true); // this.set('openTableauReportAllowed', false);\n    },\n\n    configureHeaderPermission() {\n      const configPermissions = this.get('workspace.configPermissions');\n      const activeRoute = this.get('activeRoute');\n      const userId = this.get('session').data.authenticated.userId ? this.get('session').data.authenticated.userId.replace(/-/g, '_') : '';\n      const deletePrivateWorkspacePerm = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.deletePrivateWorkspace);\n      const deletePublicWorkspacePerm = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.deletePublicWorkspace);\n      const dashboard = this.get('workspace.dashboardModel');\n      const category = `workspaces-${userId}`;\n      const canDeleteAll = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.deleteWorkspace); // Only enable headerPermission when route to dashboard.\n\n      const headerPermissionEnabled = _environment.default.APP.test || activeRoute === 'dashboard.index';\n\n      if (headerPermissionEnabled && !Ember.isNone(configPermissions)) {\n        const headerFunctions = configPermissions.headerFunctions;\n        const timelineFunction = configPermissions.timeline;\n\n        if (!Ember.isNone(timelineFunction)) {\n          if (timelineFunction[0] === 'fullAccess') {\n            this.set('timeline', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.timeline, null));\n          }\n        }\n\n        if (!Ember.isNone(headerFunctions)) {\n          headerFunctions.forEach(headerFunction => {\n            if (headerFunction === 'all') {\n              this.set('configureWorkspaceAllowed', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.configureWorkspace, null));\n              this.set('saveWorkspaceAllowed', true && this.get('permissionLayer').permInUserHash(null, [_mappedPermIds.default.saveWorkspace, _mappedPermIds.default.savePrivateWorkspace]));\n              this.set('saveAsWorkspaceAllowed', true && this.get('permissionLayer').permInUserHash(null, [_mappedPermIds.default.saveAsWorkspace, _mappedPermIds.default.savePrivateWorkspace]));\n              this.set('deleteWorkspaceAllowed', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.deletePublicWorkspace, null));\n              this.set('openWorkspaceAllowed', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.openWorkspace, null));\n              this.set('generateScheduleAllowed', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.generateSchedule, null));\n              this.set('closeScheduleAllowed', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.closeSchedule, null));\n              this.set('systemConfigurationAllowed', true && this.get('permissionLayer').permInUserHash(_mappedPermIds.default.showSystemConfig, null)); // this.set('openTableauReportAllowed', true);\n\n              this.set('aboutAdeptIQAllowed', true);\n              this.set('resetPasswordAllowed', false);\n              this.set('logoutAllowed', true);\n            } else {\n              const allowedFunctionName = headerFunction + 'Allowed';\n              let permGranted = false;\n\n              switch (headerFunction) {\n                case 'openWorkspace':\n                  permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.openWorkspace, null);\n                  break;\n\n                case 'configureWorkspace':\n                  permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.configureWorkspace, null);\n                  break;\n\n                case 'saveWorkspace':\n                  permGranted = this.get('permissionLayer').permInUserHash(null, [_mappedPermIds.default.saveWorkspace, _mappedPermIds.default.savePrivateWorkspace]);\n                  break;\n\n                case 'saveAsWorkspace':\n                  permGranted = this.get('permissionLayer').permInUserHash(null, [_mappedPermIds.default.saveAsWorkspace, _mappedPermIds.default.savePrivateWorkspace]);\n                  break;\n\n                case 'deleteWorkspace':\n                  permGranted = dashboard && (canDeleteAll && dashboard.get('isPublicWorkspace') || dashboard.get('isPublicWorkspace') && deletePublicWorkspacePerm && dashboard.get('userId') === userId || dashboard.get('isPrivateWorkspace') && deletePrivateWorkspacePerm && dashboard.get('category') === category);\n                  break;\n\n                case 'generateSchedule':\n                  permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.generateSchedule, null);\n                  break;\n\n                case 'closeSchedule':\n                  permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.closeSchedule, null);\n                  break;\n\n                case 'systemConfiguration':\n                  permGranted = this.get('permissionLayer').permInUserHash(null, [_mappedPermIds.default.showSystemConfig, _mappedPermIds.default.editPlaces, _mappedPermIds.default.editService, _mappedPermIds.default.manageRouteSchedule, _mappedPermIds.default.editContractManagement, _mappedPermIds.default.manageBlockoutRegions // TODO: temparary disable these two options\n                  // mappedPermIds.manageSpeedRegions,\n                  // mappedPermIds.manageADABoundaries\n                  ]);\n                  break;\n                // case 'openTableauReport':\n                //   permGranted = true;\n                //   break;\n\n                case 'resetPassword':\n                  permGranted = false;\n                  break;\n\n                case 'logout':\n                  permGranted = true;\n                  break;\n\n                default:\n                  permGranted = false;\n              }\n\n              this.set(allowedFunctionName, true && permGranted);\n            }\n          });\n        }\n      }\n    },\n\n    actions: {\n      onClearButtonClick() {\n        // delay for a second so updates can finish before clearing.\n        const checkedItems = this.get('activeContext.topActiveContext.checkedItems'); //NYAAR-19542: Fix Deselect All button in booking widget\n\n        if (this.get('isBookingWorkspace')) {\n          checkedItems.forEach(checkedItem => {\n            this.get('booking').removeSelectedRider(checkedItem.record);\n          });\n          this.set('booking.filteredCurrentTrips', []);\n          this.set('booking.currentBookings', []);\n          this.set('booking.currentSubscriptions', []);\n        }\n\n        if (this.get('isDispatchWorkspace') && this.isReordering) {\n          this.get('stopsReorder').stopReorder();\n        }\n\n        Ember.run.later(this, function () {\n          this.get('activeContext.topActiveContext').clearCheckedItems();\n        }, 1000);\n      },\n\n      onCloseReorder() {\n        if (!this.get('isHidden')) {\n          this.get('stopsReorder').stopReorder();\n        }\n      },\n\n      onConfirmReorder() {\n        if (!this.get('isHidden')) {\n          this.get('stopsReorder').confirmReorder();\n        }\n      },\n\n      onEditWorkspaceClick(dropdown) {\n        const workspace = this.get('workspace');\n        dropdown.actions.close();\n        if (this.get('isEditing')) return;\n        this.get('systemConfig').set('showRightPanel', false);\n        const displayName = 'Add Widgets';\n\n        if (workspace.get('dashboard.role') === 'Playback') {\n          workspace.pushState('editPlayback', {\n            displayName\n          }).then(() => {// Q: state pushed?\n          }).catch(() => {// denied access\n          });\n        } else {\n          workspace.pushState('editWorkspace', {\n            displayName\n          }).then(() => {// Q: state pushed?\n          }).catch(() => {// denied access\n          });\n        }\n      },\n\n      onSaveWorkspaceClick(dropdown) {\n        dropdown.actions.close();\n        const dashboardModel = this.get('workspace.dashboardModel');\n        const userId = this.get('session').data.authenticated.userId.replace(/-/g, '_');\n\n        if (dashboardModel.get('isDefaultWorkspace')) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Unable to Save',\n            tip: 'Unable to Save. You must use the \"Save Workspace As\" option to save changes made to a default workspace.',\n            warning: true,\n            primaryActionText: 'Ok',\n\n            primaryAction() {\n              tooltip.reset();\n            }\n\n          });\n          return;\n        }\n\n        if (dashboardModel.get('isPublicWorkspace') && dashboardModel.get('userId') !== userId) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Save Workspace',\n            tip: 'Unable to save. You must use the \"Save Workspace As\" option to save changes made to a public workspace.',\n            warning: true,\n            primaryActionText: 'Ok',\n\n            primaryAction() {\n              tooltip.reset();\n            }\n\n          });\n          return;\n        }\n\n        const dashboardInstance = this.get('workspace.dashboard');\n        const includeWidgetStates = true;\n        dashboardModel.commitInstance(dashboardInstance, includeWidgetStates);\n        /*eslint-disable */\n\n        return dashboardModel.save();\n        /*eslint-enable */\n      },\n\n      onSaveWorkspaceAsClick(dropdown) {\n        dropdown.actions.close();\n        this.get('workspace').pushState('saveWorkspaceAs', {\n          displayName: 'Save Workspace As'\n        });\n      },\n\n      onDeleteWorkspaceClick(dropdown) {\n        dropdown.actions.close();\n        const dashboardModel = this.get('workspace.dashboardModel');\n\n        if (dashboardModel.get('isDefaultWorkspace') || dashboardModel.get('isPlaybackWorkspace') || dashboardModel.get('isReconcileWorkspace') || dashboardModel.get('isReportsWorkspace') || dashboardModel.get('isBookingWorkspace') || dashboardModel.get('isRiderManagementWorkspace') || dashboardModel.get('isScheduleWorkspace')) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Unable to delete',\n            warning: true,\n            tip: 'Unable to delete. Default workspaces cannot be deleted.',\n            primaryActionText: 'Ok',\n\n            primaryAction() {\n              tooltip.reset();\n            }\n\n          });\n          return;\n        }\n\n        this.get('workspace').pushState('deleteWorkspace');\n      },\n\n      showAdministratorMessage() {\n        const tooltip = this.get('tooltip');\n        const title = '    ';\n        const tip = 'This user is not available in tableau server. Please contact to Administrator';\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          primaryActionText: 'Cancel',\n          primaryAction: () => {\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      },\n\n      RedirectToTableauServer(vizUrl) {\n        const tooltip = this.get('tooltip');\n        const title = 'Redirecting...';\n        const tip = 'You are being re-directed to tableau server';\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            window.open(vizUrl);\n            tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      },\n\n      handleRedirectionToTableauServer(token) {\n        if (token === -1) {\n          this.send('showAdministratorMessage');\n          return;\n        }\n\n        const vizUrl = `${_apiUrls.API.tableauService.host}/trusted/${token}/t/R7/projects`;\n        this.send('RedirectToTableauServer', vizUrl);\n      },\n\n      // onOpenTableauReportsClick(dropdown) {\n      //   dropdown.actions.close();\n      //   const session = this.get('session');\n      //   const currentUser = localStorage.getItem('currentUser');\n      //   if (currentUser) {\n      //     this.get('ajax').post(`${API.tableauService.host}/trusted?username=${currentUser}&&target_site=r7`, {\n      //       contentType: 'application/json',\n      //       headers: {\n      //         'Authorization': `Bearer ${session.data.authenticated.token}`\n      //       }\n      //     }).then((res) => {\n      //       this.send('handleRedirectionToTableauServer', res);\n      //     }).catch((err) => {\n      //       this.send('handleRedirectionToTableauServer', err);\n      //     });\n      //   }\n      // },\n      onOpenWorkspaceClick(dropdown) {\n        dropdown.actions.close();\n        this.get('workspace').pushState('openWorkspace');\n      },\n\n      toggleTimelinePicker() {\n        const workspace = this.get('workspace');\n        workspace.toggleProperty('isEditingTimeline');\n      },\n\n      onGenerateScheduleClick(dropdown) {\n        dropdown.actions.close();\n        this.get('scheduleGeneration.task').perform();\n      },\n\n      toggleAboutAdeptIQ() {\n        const workspace = this.get('workspace');\n        workspace.toggleProperty('isShowAbout');\n      },\n\n      openHelpPage(dropdown) {\n        const workspace = this.get('workspace');\n        const systemConfig = this.get('systemConfig');\n        let dashboardName = '';\n        let selectedTab = ''; //Help based on system configuration : component selection\n\n        if (systemConfig.get('showRightPanel')) {\n          dashboardName = 'SystemConfig';\n          selectedTab = systemConfig.get('currentComponentPath');\n        } else {\n          //Help based on workspace selection\n          dashboardName = workspace.get('dashboardModel.role');\n          selectedTab = workspace.get('helpSelectedTab');\n        } // Combine dashboardName and selectedTab only if selectedTab is not empty\n\n\n        const componentName = selectedTab ? `${dashboardName}_${selectedTab}` : dashboardName;\n        (0, _helpPageRedirect.helpRedirect)(componentName);\n        dropdown.actions.close();\n      },\n\n      transitionToForgotPassword(dropdown, link) {\n        dropdown.actions.close();\n        this.transitionTo(link);\n      },\n\n      transitionToModalAndClose(dropdown, modal) {\n        dropdown.actions.close();\n        this.transitionTo(`index.modals.${modal}`);\n      },\n\n      toggleLayoutType(dropdown) {\n        dropdown.actions.close();\n        this.toggleProperty('isLightMode');\n      },\n\n      onEditApplyCancel() {\n        this.get('editModal').cancel();\n      },\n\n      onEditApplyCommit() {\n        this.get('editModal').commit();\n      },\n\n      onCloseScheduleClick(dropdown) {\n        dropdown.actions.close();\n        this.get('workspace').pushState('closeSchedule');\n      },\n\n      onSystemConfigurationClick(dropdown) {\n        dropdown.actions.close();\n        this.get('workspace').pushState('editSystemConfiguration', {\n          displayName: 'System Configuration'\n        });\n      },\n\n      onLogout(dropdown) {\n        dropdown.actions.close();\n        this.onLogout();\n      },\n\n      toggleHeaderHelpPage() {\n        (0, _helpPageRedirect.helpRedirect)('overview');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/header-nav/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7lSjl5j3\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"dropdown\\\",\\\"dropdown\\\",\\\"queue\\\",\\\"store\\\",\\\"normalize\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"header-left\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"logo-image\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isAuthenticatedAndValidUser\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"id\\\",\\\"header-center\\\"],[11,\\\"class\\\",\\\"col text-center\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showWorkDiagnostics\\\"]]],null,{\\\"statements\\\":[[4,\\\"let\\\",[[27,\\\"find-by\\\",[\\\"name\\\",\\\"wc-store\\\",[23,[\\\"work\\\",\\\"_queues\\\"]]],null],[27,\\\"find-by\\\",[\\\"name\\\",\\\"wc-normalize\\\",[23,[\\\"work\\\",\\\"_queues\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"gt\\\",[[22,5,[\\\"displayLength\\\"]],0],null],[27,\\\"gt\\\",[[22,6,[\\\"displayLength\\\"]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5,6]},null],[0,\\\"\\\\n      [\\\"],[4,\\\"each\\\",[[23,[\\\"work\\\",\\\"_queues\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"work-queue\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\": \\\"],[1,[22,4,[\\\"displayLength\\\"]],false],[0,\\\" (\\\"],[1,[22,4,[\\\"displayChunkSize\\\"]],false],[0,\\\")\\\\n          \\\"],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[4]},null],[0,\\\"]\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isReordering\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reorder-stop\\\"],[9],[0,\\\"Reordering Stops...\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-outline-primary ml-3 \\\",[27,\\\"if\\\",[[23,[\\\"isHidden\\\"]],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseReorder\\\"],null]],[9],[0,\\\"\\\\n\\\\n          Cancel\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-outline-primary ml-3 \\\",[27,\\\"if\\\",[[23,[\\\"isHidden\\\"]],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmReorder\\\"],null]],[9],[0,\\\"\\\\n\\\\n          Confirm\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"id\\\",\\\"header-right\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-md-6 col-4 row no-gutters text-center\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[27,\\\"or\\\",[[23,[\\\"workspace\\\",\\\"isVehicleDriverDashboard\\\"]],[23,[\\\"workspace\\\",\\\"isReportsDashboard\\\"]],[23,[\\\"workspace\\\",\\\"isAdhocReportsDashboard\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column \\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-primary-simple clear-active-context-btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"clearButtonEnabled\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClearButtonClick\\\"],null]],[9],[0,\\\"\\\\n          Deselect All\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"workspace\\\",\\\"isBookingDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[21,\\\"dropdown-provider\\\"],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"configureWorkspaceAllowed\\\"]],[23,[\\\"saveWorkspaceAllowed\\\"]],[23,[\\\"saveAsWorkspaceAllowed\\\"]],[23,[\\\"deleteWorkspaceAllowed\\\"]],[23,[\\\"openWorkspaceAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\"],[\\\"right\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/header-nav/template.hbs' @ L72:C13) \\\"],null]],[[\\\"class\\\"],[\\\"header-action-button initial-focus-control data-test-menu-workspace-button\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-th workspace-icon\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/header-nav/template.hbs' @ L76:C13) \\\"],null]],[[\\\"class\\\"],[\\\"header-nav-dropdown-content data-test-workspace-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isVehicleDriverDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"openWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-open-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpenWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-folder-open-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Open Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"workspace\\\",\\\"isReportsDashboard\\\"]],[23,[\\\"workspace\\\",\\\"isAdhocReportsDashboard\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"saveWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-save-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-floppy-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Save Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"saveAsWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-saveas-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveWorkspaceAsClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-floppy-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Save Workspace As\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"deleteWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-delete-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Delete Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"openWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-open-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpenWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-folder-open-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Open Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showConfigWorkspace\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-edit-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEditWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-cog\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Configure Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"saveWorkspaceAllowed\\\"]],[23,[\\\"savePrivateWorkspaceAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-save-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-floppy-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Save Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"saveWorkspaceAllowed\\\"]],[23,[\\\"savePrivateWorkspaceAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-saveas-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveWorkspaceAsClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-floppy-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Save Workspace As\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"deleteWorkspaceAllowed\\\"]],[23,[\\\"deletePrivateWorkspaceAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-delete-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Delete Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"openWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-open-workspace\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpenWorkspaceClick\\\",[22,3,[]]],null]],[12,\\\"disabled\\\",[23,[\\\"workspace\\\",\\\"isEditing\\\"]]],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-folder-open-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Open Workspace\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"openWorkspaceAllowed\\\"]]],null,{\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\"],[\\\"right\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"generateScheduleAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/header-nav/template.hbs' @ L184:C15) \\\"],null]],[[\\\"class\\\"],[\\\"header-action-button data-test-menu-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus plus-icon\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"generateScheduleAllowed\\\"]],[23,[\\\"closeScheduleAllowed\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/header-nav/template.hbs' @ L190:C13) \\\"],null]],[[\\\"class\\\"],[\\\"header-nav-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"generateScheduleAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-generate-schedule\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onGenerateScheduleClick\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-list-alt\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Generate Schedule\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"closeScheduleAllowed\\\"]],[23,[\\\"oneDayTimelineNotFuture\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-close-schedule\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseScheduleClick\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-list-alt\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Close Schedule\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"hideTimeLinePicker\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-action-button data-test-timeline-button\\\"],[11,\\\"tabindex\\\",\\\"0\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleTimelinePicker\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"img\\\"],[11,\\\"class\\\",\\\"svg-header-icon\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"helpAdeptIQAllowed\\\"]],[23,[\\\"systemConfigurationAllowed\\\"]],[23,[\\\"resetPasswordAllowed\\\"]],[23,[\\\"logoutAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\"],[\\\"right\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/header-nav/template.hbs' @ L227:C13) \\\"],null]],[[\\\"class\\\"],[\\\"header-action-button data-test-menu-config-button\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-cog\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/header-nav/template.hbs' @ L231:C13) \\\"],null]],[[\\\"class\\\"],[\\\"header-nav-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"systemConfigurationAllowed\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[23,[\\\"workspace\\\",\\\"isVehicleDriverDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-system-configuration\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSystemConfigurationClick\\\",[22,1,[]]],null]],[9],[0,\\\"\\\\n                  System Configuration\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"helpAdeptIQAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-help-adeptIQ\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openHelpPage\\\",[22,1,[]]],null]],[9],[0,\\\"\\\\n                Help\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"aboutAdeptIQAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-about-adeptIQ\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleAboutAdeptIQ\\\",[22,1,[]],\\\"about-adeptIQ\\\"],null]],[9],[0,\\\"\\\\n                About ADEPT IQ\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"resetPasswordAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-reset-password\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"transitionToForgotPassword\\\",[22,1,[]],\\\"forgot-password\\\"],null]],[9],[0,\\\"\\\\n                Reset Password\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"logoutAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-logout\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLogout\\\",[22,1,[]]],null]],[9],[0,\\\"\\\\n                Sign Off\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/header-nav/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/help-link/component\", [\"exports\", \"adept-iq/utils/help-page-redirect\"], function (_exports, _helpPageRedirect) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['help-link-component'],\n    componentName: null,\n    actions: {\n      onHelpButtonClick() {\n        (0, _helpPageRedirect.helpRedirect)(this.get('componentName'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/help-link/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"mNTQp4LI\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"componentName\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"help-link-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHelpButtonClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/help-link/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/add-route-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editModal: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tripId: null,\n\n    init() {\n      this._super(...arguments); // const records = this.get('editableRecords') || [];\n      // const segment = records[0];\n      // if (isPresent(segment)) {\n      //   this.set('tripId', segment.trips.firstObject.get('tripId'));\n      // }\n\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        if (Ember.isNone(record.get('cancelType'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Reason cannot be blank.');\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      onCellValueChange(record, valuePath, value, options) {\n        if (record) {\n          record.set('isForceDirty', true);\n          this.get('service').setRecordValue(record, valuePath, value, options);\n        }\n      },\n\n      onUndoClick() {},\n\n      onApplyClick() {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Add New Route',\n          tip: 'Create Route ID 123456 ?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            this.send('confirm');\n            return tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      },\n\n      confirm() {\n        this.get('notifications').success('SUCCESSFULLY CREATED NEW ROUTE 123456');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/alert-widget/alerts-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/text-formatted-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CATEGORY_EMERGENCY = 'emergency';\n  const ACTIVE_EMERGENCY = 'active';\n\n  var _default = _component.default.extend({\n    alertCategory: Ember.computed('category', 'state', function () {\n      const category = this.get('category');\n      const state = this.get('state');\n\n      if (category === CATEGORY_EMERGENCY && state === ACTIVE_EMERGENCY) {\n        return 'otp-danger';\n      }\n\n      return '';\n    }),\n    category: Ember.computed.alias('row.category'),\n    state: Ember.computed.alias('row.state')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/alert-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/alert-widget',\n    rowComponent: 'iq-widgets/alert-widget/alerts-row',\n    modelName: 'avlm-alert',\n    title: 'Alerts',\n    defaultSortId: 'priority',\n    defaultSortAsc: true,\n    widgetName: 'alertWidget',\n    selectedRowLimit: 1,\n    columns: [{\n      id: 'timestamp',\n      index: 0,\n      type: 'time',\n      label: 'Time',\n      valuePath: 'time',\n      format: 'hh:mm A',\n      defaultWidth: 80,\n      highlightable: true,\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'priorityId',\n      index: 1,\n      type: 'uuid',\n      label: 'Priority ID',\n      valuePath: 'priorityId',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'priority',\n      index: 2,\n      type: 'text',\n      label: 'Priority',\n      valuePath: 'priority',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'routeId',\n      index: 3,\n      type: 'text',\n      label: 'Route ID',\n      valuePath: 'routeName',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'vehicleId',\n      index: 4,\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'body',\n      index: 5,\n      type: 'text',\n      label: 'Alert Description',\n      valuePath: 'alertDescription',\n      defaultWidth: 100,\n      searchable: true,\n      highlightable: true\n    }, {\n      id: 'tripId',\n      index: 6,\n      type: 'text',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      hidden: true,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'stopId',\n      index: 7,\n      type: 'text',\n      label: 'Stop ID',\n      valuePath: 'stopId',\n      hidden: true,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'driverId',\n      index: 8,\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'category',\n      index: 9,\n      type: 'text',\n      label: 'Category',\n      valuePath: 'category',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'state',\n      index: 10,\n      type: 'text',\n      label: 'State',\n      valuePath: 'state',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'provider',\n      index: 11,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider',\n      hidden: true,\n      defaultWidth: 70\n    }],\n    traversal: {\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'stopId',\n          valuePath: 'id'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'name'\n        }]\n      },\n      tripWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'id'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'id'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'alertId'\n        }, {\n          type: 'eq',\n          field: 'driverId',\n          valuePath: 'driverId'\n        }, {\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }, {\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'tripId'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'stringNeRQL',\n        field: 'state',\n        value: ['completed']\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/alert-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/alert-widget/config\", \"adept-iq/pods/components/iq-widgets/alert-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/rql-generators\"], function (_exports, _component, _config, _avlmConfig, _environment, _mappedPermIds, _rqlGenerators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['alert-widget', 'data-test-alerts-widget'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    config: _config.default,\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('tableActions', [{\n        id: 'showAll',\n        name: 'Show All',\n        permId: _mappedPermIds.default.showAllAlerts,\n        action: () => {\n          this.set('hiddenRowIds', []);\n        }\n      }]);\n      this.set('hideAction', {\n        id: 'hide',\n        name: 'Hide',\n        permId: _mappedPermIds.default.hideAlerts,\n        action: alertRecord => {\n          const hiddenRowIds = this.get('hiddenRowIds').concat(alertRecord.id);\n          this.set('hiddenRowIds', hiddenRowIds);\n        }\n      });\n    },\n\n    dynamicSingleActions: Ember.computed('table.rows.@each.selected}', 'selectedWidgetRecord', function () {\n      const hideAction = this.get('hideAction');\n      const row = this.getSelectedCoreModel();\n\n      if (!row) {\n        return [];\n      }\n\n      return [hideAction];\n    }),\n\n    calculateTimeQuery() {\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const startTime = startDate.getTime();\n      const endTime = endDate.getTime();\n      const dateRangeFilterQuery = (0, _rqlGenerators.dateBetweenRQLUsingFormat)('time', [startTime, endTime], 'YYYY-MM-DDTHH:mm:ss.SSS');\n      return dateRangeFilterQuery;\n    },\n\n    applyTransformationData(widgetRecords) {\n      const priorityIdMapper = {\n        'critical': 'A',\n        'high': 'B',\n        'medium': 'C',\n        'low': 'D'\n      };\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          if (widgetRecord.priority && priorityIdMapper[widgetRecord.priority.toLowerCase()]) {\n            widgetRecord.priorityId = priorityIdMapper[widgetRecord.priority.toLowerCase()];\n          }\n\n          widgetRecord._transformed = true;\n        }\n      });\n      return widgetRecords;\n    },\n\n    rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currRowData) {\n      if (currRowData.category && currRowData.category.toLowerCase() === 'emergency' || currRowData.priorityId && currRowData.priorityId === 'A') {\n        return 'danger-row';\n      }\n\n      return '';\n    },\n\n    /**\n     * Push all messages to Store\n     */\n    postHandleReceiveDataEventHandler(records) {\n      const widgetService = this.get('widgetService');\n      const widgetName = this.get('config.widgetName');\n      widgetService.updateAllCoreEntityStoreAction(widgetName, records);\n    },\n\n    /**\n     * Alert with completed state must be treated as Deleted\n     * @param header\n     * @param body\n     * @returns {string|*}\n     */\n    determineWidgetRecordAction(widgetRecords, header, data) {\n      if (data.state === 'completed') {\n        return 'DELETE';\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/alert-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/alert-widget',\n    rowComponent: 'iq-widgets/alert-widget/alerts-row',\n    modelName: 'avlm-alert',\n    title: 'Alerts',\n    defaultSortId: 'timestamp',\n    defaultSortAsc: true,\n    // hideWidgetControls: true,\n    // ember-react-widget properties\n    widgetName: 'alertWidget',\n    selectedRowLimit: 1,\n    columns: [{\n      id: 'timestamp',\n      index: 0,\n      type: 'time',\n      label: 'Time',\n      valuePath: 'time',\n      format: 'HH:mm',\n      defaultWidth: 80,\n      highlightable: true,\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'priorityId',\n      index: 1,\n      type: 'uuid',\n      label: 'Priority ID',\n      valuePath: 'priorityId',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'priority',\n      index: 2,\n      type: 'text',\n      label: 'Priority',\n      valuePath: 'priority',\n      customSortPath: 'priorityId',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'routeId',\n      index: 3,\n      type: 'text',\n      label: 'Route ID',\n      valuePath: 'routeName',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'vehicleId',\n      index: 4,\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleName',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'body',\n      index: 5,\n      type: 'text',\n      label: 'Alert Description',\n      valuePath: 'alertDescription',\n      defaultWidth: 100,\n      searchable: true,\n      highlightable: true\n    }, {\n      id: 'tripId',\n      index: 6,\n      type: 'text',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      hidden: true,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'stopId',\n      index: 7,\n      type: 'text',\n      label: 'Stop ID',\n      valuePath: 'stopId',\n      hidden: true,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'driverId',\n      index: 8,\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'category',\n      index: 9,\n      type: 'text',\n      label: 'Category',\n      valuePath: 'category',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'state',\n      index: 10,\n      type: 'text',\n      label: 'State',\n      valuePath: 'state',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'provider',\n      index: 11,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider',\n      hidden: true,\n      defaultWidth: 70\n    }],\n    traversal: {},\n    implicit: {\n      conditions: [{\n        type: 'stringNeRQL',\n        field: 'state',\n        value: ['completed']\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/bar-chart-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/chartjs-widget/component\", \"adept-iq/utils/filters\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _component, _filters, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    workspaceContext: Ember.inject.service(),\n    classNames: ['bar-chart-widget'],\n    widget: null,\n    options: Ember.computed.alias('widget.state.dataType'),\n\n    /* Applies the choice of data source. */\n    chartRecords: Ember.computed('options.modelName', 'workspaceContext.workspaceData.[]', function () {\n      const modelName = this.get('options.modelName');\n      if (Ember.isBlank(modelName)) return [];\n      const wrappedRecords = this.get('workspaceContext.workspaceData').filterBy('modelName', modelName) || [];\n      return wrappedRecords.map(a => a.record);\n    }),\n\n    /* Builds the chosen filters. */\n    filterFunction: Ember.computed('options.columns', function () {\n      const filterColumns = Object.values(this.get('options.columns')).map(col => new _filterColumn.default(col));\n      const args = filterColumns.map(column => {\n        return column.get('filterNode');\n      });\n      return (0, _filters.buildFilterFunction)((0, _filters.buildCompoundFilterNode)('and', args));\n    }),\n\n    /* Applies the choice of filters. */\n    filteredRecords: Ember.computed('chartRecords', 'filterFunction', function () {\n      const chartRecords = this.get('chartRecords') || [];\n      return chartRecords.filter(this.get('filterFunction'));\n    }),\n    chartSum: Ember.computed.alias('filteredRecords.length'),\n\n    /* Gets the choice for slicing the data. */\n    slicedBy: Ember.computed('options.displayOptions', function () {\n      if (Ember.isBlank(this.get('options.displayOptions'))) return;\n      /*eslint-disable */\n\n      return this.get('options.displayOptions').selected;\n      /*eslint-enable */\n    }),\n\n    /* Applies the choice for slicing the data. */\n    recordSlices: Ember.computed('filteredRecords', 'slicedBy', function () {\n      const categories = {};\n      const filteredRecords = this.get('filteredRecords') || [];\n      const slicedBy = this.get('slicedBy');\n      if (Ember.isBlank(slicedBy)) return categories;\n      const filterKey = this.get('slicedBy.id');\n      const metricOption = this.get('slicedBy.metricOption.id');\n      const valueCategories = this.get('slicedBy.valueCategories') || [];\n      valueCategories.forEach(category => {\n        switch (metricOption) {\n          case 'count':\n            categories[category.label] = filteredRecords.filterBy(filterKey, category.value).length;\n            break;\n\n          case 'sumOccurrences':\n            categories[category.label] = filteredRecords.reduce((a, b) => {\n              return a + b.get(filterKey).filter(item => item === category.value).length;\n            }, 0);\n            break;\n\n          default:\n            return;\n        }\n      }); // { 'label1': <value>, 'label2': <value> }\n\n      return categories;\n    }),\n\n    /* Applies the choices for displaying data counts and/or percentages. */\n    aggregatedSliceData: Ember.computed('recordSlices', 'options.visualOptions.@each.isChecked', function () {\n      const visualOptions = this.get('options.visualOptions');\n      const showValues = visualOptions.findBy('id', 'value').isChecked;\n      const showPercentage = visualOptions.findBy('id', 'percentage').isChecked;\n      const totalCount = this.get('chartSum');\n      const data = [];\n      Object.entries(this.get('recordSlices')).forEach(slice => {\n        let label = slice[0];\n        const numRecords = slice[1];\n\n        if (showValues) {\n          label += ', ' + numRecords;\n        }\n\n        if (showPercentage && totalCount !== 0) {\n          label += ', ' + Math.floor(100 * numRecords / totalCount) + '%';\n        }\n\n        data.push({\n          label: label,\n          value: numRecords\n        });\n      }); // [{...}, {...}, ...]\n\n      return data;\n    }),\n    chartData: Ember.computed('aggregatedSliceData', function () {\n      const aggregatedData = this.get('aggregatedSliceData');\n      if (Ember.isBlank(aggregatedData)) return {\n        data: [],\n        labels: []\n      };\n      const data = [];\n      const labels = [];\n      const backgroundColor = [];\n      const colors = this.get('colors');\n      aggregatedData.forEach((dataSlice, i) => {\n        data.push(dataSlice.value);\n        labels.push(dataSlice.label);\n        backgroundColor.push(colors[i % colors.length]);\n      });\n      const datasets = [{\n        data: data,\n        backgroundColor: backgroundColor,\n        borderWidth: 1\n      }];\n      return {\n        datasets,\n        labels\n      };\n    }),\n\n    /* Applies the chart title input. */\n    chartTitle: Ember.computed('widget.state.dataType.{name,title}', function () {\n      const title = this.get('widget.state.dataType.title');\n      if (Ember.isPresent(title)) return title;\n      const name = this.get('widget.state.dataType.name');\n\n      if (Ember.isPresent(name)) {\n        return `${name} Bar Chart`;\n      }\n\n      return 'Bar Chart';\n    }),\n    chartOptions: Ember.computed('', function () {\n      if (Ember.isBlank(this.get('widget.state'))) return {};\n      const options = {\n        legend: {\n          display: false\n        },\n        scales: {\n          yAxes: [{\n            ticks: {\n              min: 0\n            }\n          }]\n        }\n      };\n      return options;\n    }),\n    actions: {\n      onFilterButtonClick() {\n        const workspace = this.get('workspace');\n        let topState = workspace.get('topState');\n\n        while (topState === 'barChartWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        const displayName = 'Bar Chart';\n        const widget = this.get('widget');\n        workspace.pushState('barChartWidget', {\n          displayName,\n          widget\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/bar-chart-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7fqD+4uT\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"analytics-widget-title\\\"],[9],[1,[21,\\\"chartTitle\\\"],false],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"analytics-widget-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-filter\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-body bar-chart-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"bar-chart-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"options\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"ember-chart-fix\\\",null,[[\\\"type\\\",\\\"data\\\",\\\"options\\\",\\\"width\\\",\\\"height\\\"],[\\\"bar\\\",[23,[\\\"chartData\\\"]],[23,[\\\"chartOptions\\\"]],350,120]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/bar-chart-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-trips-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'id',\n      editable: false,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'formattedPhoneNumbers',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'email',\n      index: 4,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      editable: true,\n      searchable: true,\n      hidden: false\n    }, {\n      id: 'middleName',\n      index: 5,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-text-extension-cell'],\n    textContent: Ember.computed('value', function () {\n      const value = this.get('value');\n      return value;\n    }),\n    actions: {\n      showDropdown(dropdown, event) {\n        dropdown.actions.open(event);\n      },\n\n      hideDropdown(dropdown, event) {\n        dropdown.actions.close(event);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8nCWOC1c\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"text\\\",\\\"item\\\"],\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"verticalPosition\\\"],[\\\"auto\\\",\\\"auto\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/template.hbs' @ L5:C5) \\\"],null]],[[\\\"class\\\",\\\"onMouseEnter\\\",\\\"onMouseLeave\\\",\\\"eventType\\\"],[\\\"can-focus\\\",[27,\\\"action\\\",[[22,0,[]],\\\"showDropdown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hideDropdown\\\"],null],\\\"onMouseEnter\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"textContent\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[\\\"travelNeedDesc\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/template.hbs' @ L14:C5) \\\"],null]],[[\\\"class\\\"],[\\\"cell-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell-text-content-extension\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"textContent\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[22,2,[\\\"className\\\"]]],[9],[1,[22,2,[\\\"value\\\"]],false],[10],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/booking-trips-widget/cells/hover-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-trips-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/booking-trips-widget/config\", \"adept-iq/pods/components/iq-widgets/booking-trips-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/sorts\", \"adept-iq/config/mapped-permIds\", \"moment\"], function (_exports, _component, _config, _avlmConfig, _environment, _unwrapProxy, _sorts, _mappedPermIds, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['view-alltrips-widget'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    editComponent: 'iq-widgets/passengers-form-widget',\n    newTripComponent: 'iq-widgets/new-trip-form-widget',\n    canShowHeader: true,\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    changeRecords: Ember.observer('previousTrips', function () {\n      const previousTrips = this.get('previousTrips');\n      const sort = this.buildSortParam();\n      const compareFn = (0, _sorts.buildCompareFunction)([sort]);\n      this.set('records', previousTrips.sort(compareFn));\n    }),\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n\n      this.get('tableColumns').popObject();\n      this.get('tableColumns').lastObject.resizable = false;\n      this.getbookingTripsRecords = this.getbookingTripsRecords.bind(this);\n      this.set('getRecords', this.getbookingTripsRecords);\n    },\n\n    getbookingTripsRecords() {\n      const filteredCurrentTrips = this.get('booking.filteredCurrentTrips') || [];\n      const uniqTrips = this.get('booking').uniqTrips(filteredCurrentTrips);\n      return uniqTrips;\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      setTimeout(() => {\n        this.selectAndDeselectTableRows(false);\n      }, 100);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('cancelAction', {\n        id: 'cancel',\n        permIds: [_mappedPermIds.default.cancelFuture, _mappedPermIds.default.cancelSameDay],\n        name: 'Cancel Trip',\n        action: trip => {\n          const cutOffTime4LateCancelTrip = this.store.peekRecord('cs-config-item', 'config-Cancel_Trips/cutOffTime4LateCancelTrip');\n          const value = Number(cutOffTime4LateCancelTrip.get('value'));\n          const promiseTime = trip.get('promiseTime');\n          const tripDate = promiseTime ? (0, _moment.default)(promiseTime) : (0, _moment.default)(trip.get('segment.leg.requestTime'));\n          const currentDate = (0, _moment.default)().startOf('day');\n          const endTimeForCancellation = tripDate.subtract(value, 'minutes');\n          const currentTime = (0, _moment.default)();\n          const tripId = _environment.default.APP.avlmLite ? trip.get('externalId') : trip.get('tripId');\n          const booking = (0, _unwrapProxy.unwrapProxy)(trip.get('booking'));\n          const segment = (0, _unwrapProxy.unwrapProxy)(trip.get('segment'));\n          booking.set('timestamp', new Date());\n          const cancelTripPanelDetails = {\n            lateCancelCutoffTime: (0, _moment.default)().add(value, 'minutes'),\n            lateCancel: false,\n            displayName: 'Cancel Trip',\n            trip,\n            booking,\n            segment,\n            tripId\n          };\n\n          if (tripDate.date() <= currentDate.date() && (0, _moment.default)(endTimeForCancellation).isBefore(currentTime)) {\n            cancelTripPanelDetails.lateCancel = true;\n            return this.showLateTripCancelBookingWarning(cancelTripPanelDetails);\n          }\n\n          this.get('workspace').pushState('cancelTripForm', cancelTripPanelDetails);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editAction', {\n        id: 'edit',\n        permIds: [_mappedPermIds.default.editFuture, _mappedPermIds.default.editPast, _mappedPermIds.default.editSameDay],\n        name: 'Edit Trip',\n        action: async trip => {\n          if (!trip.get('pick.segmentStop.place.address.id') || !trip.get('drop.segmentStop.place.address.id')) {\n            const placeIdsInClause = [trip.get('pick.segmentStop.place.id'), trip.get('drop.segmentStop.place.id')].map(p => `'${p}'`).join(',');\n            const placesQuery = `in(id,(${placeIdsInClause}))&include=address,location`;\n            await this.get('store').query('place', {\n              filter: placesQuery\n            });\n          }\n\n          this.get('workspace').pushState('editTripWidget', {\n            trip,\n            showMapModal: true\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('viewAction', {\n        id: 'view',\n        permId: _mappedPermIds.default.showTrips,\n        name: 'View Trip',\n        action: async trip => {\n          if (!trip.get('pick.segmentStop.place.address.id') || !trip.get('drop.segmentStop.place.address.id')) {\n            const placeIdsInClause = [trip.get('pick.segmentStop.place.id'), trip.get('drop.segmentStop.place.id')].map(p => `'${p}'`).join(',');\n            const placesQuery = `in(id,(${placeIdsInClause}))&include=address,location`;\n            await this.get('store').query('place', {\n              filter: placesQuery\n            });\n          }\n\n          this.get('workspace').pushState('editTripWidget', {\n            trip,\n            showMapModal: true,\n            isReadOnly: true\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('activityLogAction', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLog,\n        name: 'View Activity Log',\n        action: trip => {\n          const id = _environment.default.APP.avlmLite ? trip.get('externalId') : trip.get('tripId');\n          this.get('workspace').pushState('tripActivityLog', {\n            displayName: `Trip ${id} Activity Log`,\n            trip\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n    },\n\n    showLateTripCancelBookingWarning(cancelTripPanelDetails) {\n      const lateTripCancelMessage = this.store.peekRecord('cs-config-item', 'config-Cancel_Trips/Late_Trip_Cancel_Message');\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Late Trip Cancel',\n        tip: lateTripCancelMessage.get('value'),\n        primaryActionText: 'Ok',\n        primaryAction: () => {\n          tooltip.reset();\n          this.get('workspace').pushState('cancelTripForm', cancelTripPanelDetails);\n        },\n        hasOverlay: true,\n        closeAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    selectAndDeselectTableRows(isRow) {\n      const tripsWidgetTableRows = this.get('table.rows');\n      tripsWidgetTableRows.setEach('selected', isRow);\n      tripsWidgetTableRows.setEach('isChecked', isRow);\n    },\n\n    actions: {\n      onRowClick() {},\n\n      async onUpdateIQUXRow(row) {\n        const tripPromisses = await this.get('apiContext').updateTripsFromIQUXService([row]);\n        await Promise.all(tripPromisses);\n      },\n\n      onCheckAll() {\n        const isRowHeadChecked = true;\n        this.selectAndDeselectTableRows(isRowHeadChecked);\n      },\n\n      onUncheckAll() {\n        const isRowHeadUnchecked = false;\n        this.selectAndDeselectTableRows(isRowHeadUnchecked);\n      },\n\n      onRowRightClick(row) {\n        const isCanceled = row.get('isCanceled');\n        const isCompleted = row.get('isCompleted');\n        const inService = row.get('inService');\n        const isNoShowed = row.get('isNoShowed');\n        const isArrived = row.get('pickStopPoint.isArrived');\n        const isPastTrip = row.get('isPastTrip');\n        this.set('dynamicSingleActions', []);\n\n        if (isPastTrip) {\n          // For past trips, \"View Activity Log\"\n          this.get('dynamicSingleActions').push(this.get('activityLogAction'));\n          this.get('dynamicSingleActions').push(this.get('viewAction'));\n\n          this._super(...arguments);\n\n          return;\n        }\n\n        if (!isCanceled) this.get('dynamicSingleActions').push(this.get('editAction'));\n        this.get('dynamicSingleActions').push(this.get('activityLogAction'));\n        if (!isCanceled && !isCompleted && !inService && !isNoShowed && !isArrived) this.get('dynamicSingleActions').push(this.get('cancelAction'));\n\n        this._super(...arguments);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-trips-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const hoverCellComponent = 'iq-widgets/booking-trips-widget/cells/hover-cell';\n  var _default = {\n    component: 'iq-widgets/previous-trips-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'trip',\n    defaultSortId: 'viewAllTripRequestedTime',\n    defaultSortAsc: true,\n    hideWidgetControls: false,\n    hideHeader: true,\n    checkBoxColumn: true,\n    isFormControls: true,\n    title: 'View All Trips',\n    columns: [{\n      id: 'viewAllTripRequestedTime',\n      index: 1,\n      type: 'text',\n      label: 'Date / Request / Time',\n      valuePath: 'requestTimeForDisplay',\n      customSortPath: 'legRequestTimeFormat',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: false,\n      format: `${_environment.default.dateTimeFormat.DateMoment} / / ${_environment.default.dateTimeFormat.timeMoment}`,\n      defaultWidth: 200\n    }, {\n      id: 'viewAllArriveTime',\n      index: 2,\n      type: 'time',\n      label: 'Arrive Time',\n      valuePath: 'drop.computedPlannedEta',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: false,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      defaultWidth: 90\n    }, {\n      id: 'viewAllTripId',\n      index: 3,\n      type: 'uuid',\n      isKey: true,\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 90\n    }, {\n      id: 'viewAllTripStatus',\n      index: 4,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'computedStatus',\n      hidden: false,\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 70\n    }, {\n      id: 'viewAllTripServiceMode',\n      index: 5,\n      type: 'text',\n      label: 'Service Mode',\n      valuePath: 'segment.travelMode',\n      hidden: false,\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllRouteName',\n      index: 6,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'computedRouteName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100\n    }, {\n      id: 'viewAllTripLogId',\n      index: 7,\n      type: 'uuid',\n      label: 'Leg ID',\n      valuePath: 'segment.leg.id',\n      editable: true,\n      hidden: false,\n      defaultWidth: 85\n    }, {\n      id: 'viewAllTripPassengerId',\n      index: 8,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'rider.riderId',\n      editable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllTripFirstName',\n      index: 9,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'rider.firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'viewAllTripLastName',\n      index: 10,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'rider.lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'viewAllTripPickupaddress',\n      index: 11,\n      type: 'text',\n      label: 'Pickup Address',\n      valuePath: 'segment.pick.place.address.simpleAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 140\n    }, {\n      id: 'viewAllTripPickupCity',\n      index: 12,\n      type: 'text',\n      label: 'Pickup City',\n      valuePath: 'tripPickUpAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllPickupZone',\n      index: 13,\n      type: 'number',\n      label: 'Pickup Zone',\n      valuePath: 'segment.pick.place.address.zoneName.valueDisplayName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllTripDropaddress',\n      index: 14,\n      type: 'text',\n      label: 'Drop off Address',\n      valuePath: 'segment.drop.place.address.simpleAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 140\n    }, {\n      id: 'viewAllTripDropCity',\n      index: 15,\n      type: 'text',\n      label: 'Drop off City',\n      valuePath: 'tripDropOffAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllDropoffZone',\n      index: 16,\n      type: 'number',\n      label: 'Drop off Zone',\n      valuePath: 'segment.drop.place.address.zoneName.valueDisplayName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllFare',\n      index: 17,\n      type: 'number',\n      label: 'Fare',\n      valuePath: 'segment.fare',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllFareCategoryName',\n      index: 18,\n      type: 'text',\n      label: 'Fare Category',\n      valuePath: 'segment.fareCategory.displayName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'viewAllTravelNeeds',\n      index: 19,\n      type: 'enum',\n      label: 'Travel Needs',\n      valuePath: 'formattedTravelNeeds',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120,\n      cellComponent: hoverCellComponent,\n      cellDesc: 'Travel Needs'\n    }, {\n      id: 'viewAllFundingAgencyName',\n      index: 20,\n      type: 'text',\n      label: 'Funding Agency',\n      valuePath: 'fundingAgencyDisplayName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      allowDisplayAttr: 'allowFundingAgency',\n      defaultWidth: 140\n    }, {\n      id: 'promiseTime',\n      index: 21,\n      type: 'time',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      defaultWidth: 90\n    }, {\n      id: 'serviceWindowStartTime',\n      index: 22,\n      type: 'time',\n      label: 'Pickup Window Start',\n      valuePath: 'serviceWindowStartTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      defaultWidth: 90\n    }, {\n      id: 'serviceWindowEndTime',\n      index: 23,\n      type: 'time',\n      label: 'Pickup Window End',\n      valuePath: 'serviceWindowEndTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      defaultWidth: 90\n    }, {\n      id: 'anchor',\n      index: 24,\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'segment.leg.anchor',\n      hidden: true,\n      editable: true,\n      searchable: true,\n      defaultWidth: 70\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/config/notifications\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/config-object-template\"], function (_exports, _component, _notifications, _mappedPermIds, _configObjectTemplate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const FILTERED_TRAVEL_MODES = ['walk', 'bus'];\n  const NUMBER_FORMAT = /^\\d*$/;\n  const REMOVE_TEXT_FORMAT = /[^0-9]+/g;\n  const REMOVE_SPECIAL_FORMAT = /[^a-zA-Z0-9]/g;\n\n  var _default = _component.default.extend({\n    classNames: ['booking-dashboard'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    searchedRiders: null,\n    selectableRiders: null,\n    passengerId: null,\n    passengerFirstName: null,\n    passengerLastName: null,\n    passengerBookingTable: null,\n    previousBookings: null,\n    previousTrips: null,\n    previousSubscriptions: null,\n    disabledId: false,\n    disabledFirstName: false,\n    disabledLastName: false,\n    disabledPhoneNumber: false,\n    showEligibilityRestrictions: false,\n    riderIdConditionsMap: null,\n    ridersWithConditionalEligibility: null,\n    filterRiders: null,\n    canCreateSubscription: null,\n    passengerPhoneNumber: null,\n    availableZones: null,\n    showOnlyActiveExternalRiders: true,\n    newBookingComponent: 'iq-widgets/new-booking-form',\n    subscriptionComponent: 'iq-widgets/subscription-form',\n    isFirstTab: false,\n    bookingTableRef: null,\n    subscriptionTableRef: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        searchedRiders: Ember.A(),\n        previousBookings: [],\n        previousSubscriptions: [],\n        previousTrips: []\n      });\n      this.systemConfig.refresh();\n      this.resetAllPreviousBookingsTripsSubscriptionAndRiders();\n      this.set('canCreateSubscription', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createSubscription, null));\n      const availableZones = this.store.peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-System_Configuration-zones';\n      });\n      this.set('availableZones', availableZones);\n      this.onPassengerWidgetRowClick = this.onPassengerWidgetRowClick.bind(this);\n      this.setPassengerBookingTable = this.setPassengerBookingTable.bind(this);\n      this.onGroupBookingConfirm = this.onGroupBookingConfirm.bind(this);\n      this.proceedBooking = this.proceedBooking.bind(this);\n      this.onEligibleWarningOK = this.onEligibleWarningOK.bind(this);\n      this.get('store').query('route-template', {});\n      this.get('store').findAll('route-template-availability');\n      this.get('store').findAll('shift-break');\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // install keyboard listener\n\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('actions', this, 'onKeyDown', event);\n      };\n\n      document.addEventListener('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      document.removeEventListener('keydown', this._onKeyDown);\n    },\n\n    onKeyDown(event) {\n      const element = document.activeElement.tagName;\n      const el = document.activeElement;\n      const inputElement = document.getElementsByTagName('input');\n      const buttonElement = document.getElementsByTagName('button');\n\n      if (event.key === 'Tab') {\n        if (!this.isFirstTab && element === 'BODY') {\n          event.preventDefault();\n          inputElement[0].focus();\n          this.set('isFirstTab', true);\n        }\n      }\n\n      if (event.key === 'Enter') {\n        if (el.getAttribute('name') === 'passenger-id' || el.getAttribute('name') === 'first-name' || el.getAttribute('name') === 'last-name' || el.getAttribute('name') === 'phone-number' || buttonElement[1].innerHTML === 'Search') {\n          if ((el.getAttribute('type') === 'text' || buttonElement[1].innerHTML === 'Search') && !(el.getAttribute('type') === 'checkbox')) {\n            if (el.getAttribute('name') === 'phone-number') {\n              if (!Ember.isBlank(this.get('passengerFirstName')) && this.get('passengerFirstName').length >= 1) {\n                this.searchPassenger();\n              } else if (!Ember.isBlank(this.get('passengerLastName')) && this.get('passengerLastName').length >= 1) {\n                this.searchPassenger();\n              } else if (!Ember.isBlank(this.get('passengerPhoneNumber')) && this.get('passengerPhoneNumber').length >= 1) {\n                this.searchPassenger();\n              } else {\n                this.get('notifications').warning('A full 10-digit phone number is required in order to search.');\n              }\n            } else {\n              this.searchPassenger();\n            }\n          }\n        }\n      }\n    },\n\n    bookingRecords: Ember.observer('booking.currentBookings.[]', 'booking.currentBookings', function () {\n      const currentBookings = this.get('booking.currentBookings');\n      this.set('previousBookings', currentBookings);\n    }),\n    tripRecords: Ember.observer('booking.currentTrips.[]', 'booking.currentTrips', 'booking.filteredCurrentTrips.[]', 'booking.filteredCurrentTrips', function () {\n      const currentTrips = this.get('booking.filteredCurrentTrips');\n      const sortedCurrentTrips = currentTrips.sortBy('tripId');\n      const filteredTrips = sortedCurrentTrips.filter(record => {\n        //bus travelmode is saved with bus number\n        const travelMode = record.get('segment.travelMode').split(' ');\n        return !FILTERED_TRAVEL_MODES.includes(travelMode.firstObject);\n      }); //NYAAR-19081 bookings that failed to generate a promise time,result in two trips\n\n      const uniqTrips = this.get('booking').uniqTrips(filteredTrips);\n      this.set('previousTrips', uniqTrips);\n    }),\n    onSubscriptionRecordsChange: Ember.observer('booking.currentSubscriptions.[]', 'booking.currentSubscriptions', function () {\n      const currentSubscriptions = this.get('booking.currentSubscriptions');\n      this.set('previousSubscriptions', currentSubscriptions);\n    }),\n    selectableRidersChange: Ember.observer('searchedRiders', 'showOnlyActiveExternalRiders', function () {\n      const showOnlyActiveExternalRiders = this.get('showOnlyActiveExternalRiders');\n      const searchedRiders = this.get('searchedRiders');\n      const selectedRiders = this.get('booking.selectedRiders');\n      const collectedRiders = Ember.A();\n      collectedRiders.pushObjects(selectedRiders);\n      const collectedRidersIds = collectedRiders.map(r => r.get('id'));\n\n      if (showOnlyActiveExternalRiders) {\n        searchedRiders.forEach(rider => {\n          if ((rider.get('computedStatus') === 'ACTIVE' || rider.get('computedStatus') === 'PENDING') && !collectedRidersIds.includes(rider.get('id'))) {\n            collectedRiders.pushObject(rider);\n          }\n        });\n        this.set('selectableRiders', collectedRiders);\n      } else {\n        searchedRiders.forEach(rider => {\n          if (!collectedRidersIds.includes(rider.get('id'))) {\n            collectedRiders.pushObject(rider);\n          }\n        }); // dont send same reference to selected riders. so not sending directly\n\n        this.set('selectableRiders', collectedRiders);\n      }\n\n      const passengerBookingTable = this.get('passengerBookingTable');\n      passengerBookingTable.get('rows').forEach(row => {\n        if (collectedRidersIds.includes(row.get('id'))) {\n          row.set('selected', true);\n          row.set('isChecked', true);\n        }\n      });\n    }),\n    canDoBooking: Ember.computed('booking.selectedRiders.@each.hasActiveSuspension', function () {\n      const canDoBooking = this.get('permissionLayer').permInUserHash(null, [_mappedPermIds.default.createFutureBookings, _mappedPermIds.default.createSameDayBookings]);\n\n      if (!canDoBooking) {\n        return false;\n      }\n\n      const selectedRiders = this.get('booking.selectedRiders');\n\n      if (selectedRiders.some(rider => rider.get('hasActiveSuspension'))) {\n        return false;\n      }\n\n      return selectedRiders.length >= 1;\n    }),\n    canDoSubscription: Ember.computed('booking.selectedRiders.@each.hasActiveSuspension', 'canCreateSubscription', function () {\n      const selectedRiders = this.get('booking.selectedRiders') || [];\n      const canCreateSub = this.get('canCreateSubscription');\n\n      if (selectedRiders.some(rider => rider.get('hasActiveSuspension'))) {\n        return false;\n      }\n\n      return selectedRiders.length === 1 && canCreateSub;\n    }),\n    isSearchControllDisabled: Ember.computed('passengerId', 'passengerFirstName', 'passengerLastName', 'passengerPhoneNumber', function () {\n      const passengerId = this.get('passengerId');\n      const passengerFirstName = this.get('passengerFirstName');\n      const passengerLastName = this.get('passengerLastName');\n      const passengerPhoneNumber = this.get('passengerPhoneNumber');\n\n      if (!Ember.isBlank(passengerFirstName) && passengerFirstName.length >= 1 || !Ember.isBlank(passengerLastName) && passengerLastName.length >= 1 || !Ember.isBlank(passengerId) || !Ember.isBlank(passengerPhoneNumber)) {\n        return false;\n      }\n\n      return true;\n    }),\n\n    // Clear resets the search fields and results, not the Current/Past filter: the filter\n    // dropdown renders from the widget config while the grids key off bookingDisplayMode,\n    // so forcing the mode back to Current here left the dropdown reading 'Past Bookings'\n    // while the grids rebuilt from the current set (AIQ-5254).\n    updateSearchResultsWithSelectedRiders() {\n      const selectedRiders = this.get('booking.selectedRiders');\n      this.set('searchedRiders', selectedRiders);\n    },\n\n    setPassengerBookingTable(tableInstance) {\n      this.set('passengerBookingTable', tableInstance);\n    },\n\n    async onPassengerWidgetRowClick() {\n      // const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n      const result = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n      const [bookings, trips] = result;\n      const {\n        pastBookings,\n        pastTrips\n      } = result;\n      const subscriptions = await this.get('apiContext').loadSubscriptionsForSelectedExternalRiders();\n      const isPastMode = this.get('booking.bookingDisplayMode.value') === 'past';\n      this.set('booking.futureBookings', bookings || []);\n      this.set('booking.futureTrips', trips || []);\n      this.set('booking.pastBookings', pastBookings || []);\n      this.set('booking.pastTrips', pastTrips || []); // currentBookings/currentTrips are the sets the bookings and trips grids actually\n      // render, so they have to follow the selected filter the same way onTitleOptionChange\n      // does -- otherwise checking a passenger while Past Bookings is selected reloads the\n      // grids from the current set.\n\n      this.set('booking.currentBookings', (isPastMode ? pastBookings : bookings) || []);\n      this.set('booking.currentTrips', (isPastMode ? pastTrips : trips) || []);\n      this.set('booking.currentSubscriptions', subscriptions);\n    },\n\n    showGroupBookingWarning() {\n      this.get('tooltip').pushConfirmation({\n        title: 'Create Booking',\n        tip: 'Do you want to create a group booking?',\n        primaryActionText: 'Confirm',\n        primaryAction: this.onGroupBookingConfirm,\n        secondaryActionText: 'Cancel',\n        hasOverlay: true,\n        secondaryAction: () => {\n          this.get('tooltip').reset();\n        }\n      });\n    },\n\n    async onGroupBookingConfirm() {\n      if (!this.checkRiderHasConfiguredFareCategory()) {\n        this.get('notifications').warning('ONE OR MORE PASSENGERS HAS A FARE TYPE THAT DOES NOT MATCH A FARE CATEGORY IN SYSTEM CONFIGURATION');\n        this.get('tooltip').reset();\n        return;\n      }\n\n      const isBookingEditMode = false;\n      const newBookingComponent = this.get('newBookingComponent');\n      await this.get('booking').fetchAllSelectedRidersForTravelNeeds();\n      await this.get('booking').fetchAndStoreEligibilityForAllSelectedRiders();\n      const booking = await this.get('booking').createBookingRecord(true);\n      this.set('booking.activeBooking', booking);\n      this.get('editModal').open(newBookingComponent, [isBookingEditMode, this.get('booking.selectedRiders.firstObject'), booking]);\n      this.get('tooltip').reset();\n    },\n\n    async proceedBooking() {\n      const isBookingEditMode = false;\n      const newBookingComponent = this.get('newBookingComponent');\n\n      if (this.get('booking.noOfSelectedRiders') > 1) {\n        this.showGroupBookingWarning();\n      } else {\n        const booking = await this.get('booking').createBookingRecord(false);\n        this.set('booking.activeBooking', booking);\n        this.get('editModal').open(newBookingComponent, [isBookingEditMode, this.get('booking.selectedRiders.firstObject'), booking]);\n      }\n    },\n\n    async onEligibleWarningOK() {\n      this.set('showEligibilityRestrictions', false);\n      await this.proceedBooking();\n    },\n\n    // reset when we switch back from scheduling workspace to booking workspace\n    resetAllPreviousBookingsTripsSubscriptionAndRiders() {\n      this.get('booking').clearSelectedRiders();\n      this.set('booking.currentBookings', []);\n      this.set('booking.filteredCurrentTrips', []);\n      this.set('booking.currentSubscriptions', []);\n    },\n\n    getErrorMessage(e) {\n      const status = e.payload.statusCode || e.status;\n\n      switch (status) {\n        case 404:\n          return _notifications.default.BOOKING.NO_MATCHES;\n\n        case 504:\n          return _notifications.default.BOOKING.TOO_MANY_MATCHES;\n\n        default:\n          return _notifications.default.BOOKING.SEARCH_ERROR;\n      }\n    },\n\n    async searchPassenger() {\n      this.set('booking.hasMoreExternalRiders', false);\n      const passengerId = this.get('passengerId');\n      const passengerFirstName = this.get('passengerFirstName');\n      const passengerLastName = this.get('passengerLastName');\n      const passengerPhoneNumber = this.get('passengerPhoneNumber');\n      const isShowActiveRider = this.get('showOnlyActiveExternalRiders');\n\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        let riders;\n        const regex = new RegExp('^\\\\d{10}$');\n\n        if (!Ember.isBlank(passengerId)) {\n          const filterString = `eq(riderId,'${passengerId}')`;\n          const params = `filter=${encodeURIComponent(filterString)}`;\n          riders = await this.store.query('rider-external', params);\n        } else {\n          if (Ember.isEmpty(passengerFirstName) && Ember.isEmpty(passengerLastName) && Ember.isEmpty(passengerPhoneNumber)) {\n            this.set('searchedRiders', []);\n            this.get('notifications').info(_notifications.default.BOOKING.EMPTY_SEARCH_CRITERIA);\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n            return;\n          } // This is NYCTs rider-external parameters. Save for future\n          // const params = {\n          //   firstName: passengerFirstName,\n          //   lastName: passengerLastName,\n          //   phoneNumber: passengerPhoneNumber,\n          //   activeOnly: isShowActiveRider\n          // };\n\n\n          const filterArray = [];\n\n          if (Ember.isPresent(passengerFirstName)) {\n            filterArray.push(`ilike(firstName,%${passengerFirstName}%)`);\n          }\n\n          if (Ember.isPresent(passengerLastName)) {\n            filterArray.push(`ilike(lastName,%${passengerLastName}%)`);\n          }\n\n          if (Ember.isPresent(passengerPhoneNumber)) {\n            const areaCode = passengerPhoneNumber.substring(0, 3);\n            const phone = passengerPhoneNumber.substring(3, 10);\n            filterArray.push(`eq(phoneNumbers.areaCode,'${areaCode}')`);\n            filterArray.push(`eq(phoneNumbers.phoneNumber,'${phone}')`);\n          }\n\n          if (isShowActiveRider) {\n            const currentDate = new Date();\n            const futureBookingTimeline = Math.max(this.get('booking').getFutureBookingTimeline(), 0);\n            const millisecondsInADay = 86400000;\n            const futureDate = new Date(currentDate.valueOf() + futureBookingTimeline * millisecondsInADay);\n            filterArray.push(`and(ge(eligibilities.to,'${currentDate.toISOString()}'),le(eligibilities.from,'${futureDate.toISOString()}'))`);\n          }\n\n          const filterString = filterArray.join(',');\n          const params = `filter=${encodeURIComponent(`and(${filterString})`)}`;\n\n          if (passengerPhoneNumber !== null && passengerPhoneNumber !== '' && !regex.test(passengerPhoneNumber)) {\n            this.get('notifications').warning('A full 10-digit phone number is required in order to search.');\n          } else {\n            riders = await this.store.query('rider-external', params);\n          }\n        }\n\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n\n        if (Ember.isBlank(riders) || Ember.isEmpty(riders)) {\n          this.set('searchedRiders', []);\n\n          if (passengerPhoneNumber !== null && passengerPhoneNumber !== '' && !regex.test(passengerPhoneNumber)) {\n            return;\n          }\n\n          this.get('notifications').info(_notifications.default.BOOKING.NO_MATCHES);\n          return;\n        }\n\n        if (this.get('booking.hasMoreExternalRiders')) {\n          this.get('notifications').warning('Too many matching results were found. Displaying the first 300 results. Please refine the search parameters');\n          riders = riders.slice(0, 300);\n        } else {\n          riders = riders.length ? riders : [riders];\n        }\n\n        await this.get('booking').setSuspensionStatusForRiders(riders);\n        this.set('searchedRiders', riders);\n      } catch (e) {\n        // const errorMessage = e.errors.firstObject.status === '404' ? NOTIFICATIONS.BOOKING.NO_MATCHES :\n        //   NOTIFICATIONS.BOOKING.SEARCH_ERROR;\n        const errorMessage = this.getErrorMessage(e);\n        this.set('searchedRiders', []);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('notifications').info(errorMessage);\n      }\n    },\n\n    checkRiderHasConfiguredFareCategory() {\n      const displayNameLbl = _configObjectTemplate.default['config-System_Configuration-fare_categories'].fields.find(field => field.fieldName === 'displayName').displayName;\n\n      const selectedRiders = this.get('booking.selectedRiders');\n      const configFareCategories = this.get('booking').getSystemConfigFareCategories();\n      const filteredRiders = selectedRiders.filter(rider => {\n        return configFareCategories.find(configFareCategory => {\n          const name = configFareCategory.get('name');\n          const displayName = configFareCategory.get('value').displayName || configFareCategory.get('value')[displayNameLbl];\n          return name === rider.get('fareCategory') || displayName === rider.get('fareCategory');\n        });\n      });\n\n      if (filteredRiders.length === selectedRiders.length) {\n        return true;\n      }\n\n      return false;\n    },\n\n    actions: {\n      async onCreateBookingClick() {\n        const selectedRiders = this.get('booking.selectedRiders');\n\n        if (!this.checkRiderHasConfiguredFareCategory() && selectedRiders.length === 1) {\n          this.get('notifications').warning('PASSENGER HAS A FARE TYPE THAT DOES NOT MATCH A FARE CATEGORY IN SYSTEM CONFIGURATION');\n          return;\n        }\n\n        await this.proceedBooking();\n      },\n\n      async onCreateSubscriptionClick() {\n        if (!this.checkRiderHasConfiguredFareCategory()) {\n          this.get('notifications').warning('PASSENGER HAS A FARE TYPE THAT DOES NOT MATCH A FARE CATEGORY IN SYSTEM CONFIGURATION');\n          return;\n        }\n\n        const isBookingEditMode = false;\n        const newBookingComponent = this.get('subscriptionComponent');\n        const booking = await this.get('booking').createBookingRecord(false, true);\n        this.set('booking.activeBooking', booking);\n        this.get('editModal').open(newBookingComponent, [isBookingEditMode, this.get('booking.selectedRiders.firstObject'), booking]);\n      },\n\n      handleKeyUp() {\n        const passengerId = this.get('passengerId');\n        const passengerFirstName = this.get('passengerFirstName');\n        const passengerLastName = this.get('passengerLastName');\n        const passengerPhoneNumber = this.get('passengerPhoneNumber');\n        this.set('booking.hasMoreExternalRiders', false);\n\n        if (!Ember.isBlank(passengerId)) {\n          if (!this.get('disabledFirstName')) this.set('disabledFirstName', true);\n          if (!this.get('disabledLastName')) this.set('disabledLastName', true);\n          if (!this.get('disabledPhoneNumber')) this.set('disabledPhoneNumber', true);\n        } else {\n          if (this.get('disabledFirstName')) this.set('disabledFirstName', false);\n          if (this.get('disabledLastName')) this.set('disabledLastName', false);\n          if (this.get('disabledPhoneNumber')) this.set('disabledPhoneNumber', false);\n\n          if (!Ember.isBlank(passengerFirstName) || !Ember.isBlank(passengerLastName) || !Ember.isBlank(passengerPhoneNumber)) {\n            if (!this.get('disabledId')) this.set('disabledId', true);\n          } else if (this.get('disabledId')) this.set('disabledId', false);\n        }\n      },\n\n      async onSearch() {\n        await this.searchPassenger();\n      },\n\n      onClearAll() {\n        this.updateSearchResultsWithSelectedRiders();\n        this.get('booking').unCheckAllBookings();\n        this.set('passengerId', null);\n        this.set('passengerFirstName', null);\n        this.set('passengerLastName', null);\n        this.set('passengerPhoneNumber', null);\n        this.set('previousBookings', []);\n        this.set('previousSubscriptions', []);\n        this.set('previousTrips', []);\n        this.set('booking.currentBookings', []);\n        this.set('booking.pastBookings', []);\n        this.set('booking.currentSubscriptions', []);\n        this.set('disabledId', false);\n        this.set('disabledFirstName', false);\n        this.set('disabledLastName', false);\n        this.set('disabledPhoneNumber', false);\n        this.set('booking.hasMoreExternalRiders', false);\n      },\n\n      async onEligibleWarningClose() {\n        this.set('showEligibilityRestrictions', false);\n      },\n\n      onInputChange(value, valuePath) {\n        let finalValue;\n\n        if (!NUMBER_FORMAT.test(value)) {\n          finalValue = value.replace(REMOVE_SPECIAL_FORMAT, '');\n          finalValue = value.replace(REMOVE_TEXT_FORMAT, '');\n          this.set(valuePath, finalValue);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/booking-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"R/zdjWfF\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-heading\\\"],[9],[0,\\\"\\\\n      Search Passenger\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-body container-fluid\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-sec\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fld-sec seperator-fname\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"elm\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"key-up\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"input\\\",\\\"value\\\"],[\\\"text\\\",\\\"passenger-id\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[23,[\\\"disabledId\\\"]],\\\"ID Number\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",[23,[\\\"passengerId\\\"]],\\\"passengerId\\\"],null],[23,[\\\"passengerId\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fld-sec\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"elm\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"key-up\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"value\\\"],[\\\"text\\\",\\\"first-name\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[23,[\\\"disabledFirstName\\\"]],\\\"First Name\\\",[23,[\\\"passengerFirstName\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fld-sec\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"elm\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"key-up\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"value\\\"],[\\\"text\\\",\\\"last-name\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[23,[\\\"disabledLastName\\\"]],\\\"Last Name\\\",[23,[\\\"passengerLastName\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fld-sec\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"elm\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"key-up\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"input\\\",\\\"value\\\"],[\\\"text\\\",\\\"phone-number\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[23,[\\\"disabledPhoneNumber\\\"]],\\\"000 000 0000\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",[23,[\\\"passengerPhoneNumber\\\"]],\\\"passengerPhoneNumber\\\"],null],[23,[\\\"passengerPhoneNumber\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fld-sec seperator-active-only\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"d-inline-block w-8\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"activeOnlyCheckboxLabel\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[23,[\\\"showOnlyActiveExternalRiders\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"elm align-middle\\\"],[9],[0,\\\"Active only\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fld-sec\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-sm elm\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClearAll\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isSearchControllDisabled\\\"]],[9],[0,\\\"Clear\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-sm elm\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearch\\\",[23,[\\\"firstname\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"isSearchControllDisabled\\\"]],[9],[0,\\\"Search\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"iq-widgets/passengers-booking-widget\\\",null,[[\\\"records\\\",\\\"setPassengerBookingTable\\\",\\\"widget\\\",\\\"onPassengerWidgetRowClick\\\"],[[23,[\\\"selectableRiders\\\"]],[23,[\\\"setPassengerBookingTable\\\"]],[23,[\\\"widget\\\"]],[23,[\\\"onPassengerWidgetRowClick\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"book-trip\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-sm elm\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canDoSubscription\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCreateSubscriptionClick\\\"],null]],[9],[0,\\\"Create Subscription\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-sm elm ml-2\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canDoBooking\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCreateBookingClick\\\"],null]],[9],[0,\\\"Create Booking\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-md-fluid\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 col-sm-12\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/previous-bookings-widget\\\",null,[[\\\"widget\\\",\\\"records\\\",\\\"tableRef\\\",\\\"subscriptionTableRef\\\"],[[23,[\\\"widget\\\"]],[23,[\\\"previousBookings\\\"]],[23,[\\\"bookingTableRef\\\"]],[23,[\\\"subscriptionTableRef\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-md-fluid\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 col-sm-12\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/booking-trips-widget\\\",null,[[\\\"widget\\\",\\\"previousTrips\\\"],[[23,[\\\"widget\\\"]],[23,[\\\"previousTrips\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-md-fluid\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row subscription-widget\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 col-sm-12\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/subscription-widget\\\",null,[[\\\"widget\\\",\\\"records\\\",\\\"tableRef\\\",\\\"bookingTableRef\\\"],[[23,[\\\"widget\\\"]],[23,[\\\"previousSubscriptions\\\"]],[23,[\\\"subscriptionTableRef\\\"]],[23,[\\\"bookingTableRef\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"my-cust-sec-window\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showEligibilityRestrictions\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[\\\"Eligibility Restrictions\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEligibleWarningClose\\\"],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"iq-widgets/eligibility-restriction-warning\\\",null,[[\\\"riderIdConditionsMap\\\",\\\"ridersWithConditionalEligibility\\\",\\\"onEligibleWarningOK\\\",\\\"showOnlyOk\\\",\\\"onClose\\\"],[[23,[\\\"riderIdConditionsMap\\\"]],[23,[\\\"ridersWithConditionalEligibility\\\"]],[23,[\\\"onEligibleWarningOK\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onEligibleWarningClose\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/booking-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/box-widget/box-metric/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['box-widget-metric']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/box-widget/box-metric/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"zNY6SMbo\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"h5\\\"],[9],[1,[23,[\\\"metric\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n\\\"],[7,\\\"h3\\\"],[9],[1,[23,[\\\"metric\\\",\\\"value\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/box-widget/box-metric/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/box-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/chartjs-widget/component\", \"adept-iq/utils/filters\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _component, _filters, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['analytics-widget', 'box-widget'],\n    classNameBindings: ['stateClass', 'widthConstrained'],\n    workspaceContext: Ember.inject.service(),\n    widget: null,\n    options: Ember.computed.alias('widget.state.dataType'),\n\n    /* Applies the choice of data source. */\n    chartRecords: Ember.computed('options.modelName', 'workspaceContext.workspaceData.[]', function () {\n      const modelName = this.get('options.modelName');\n      if (Ember.isBlank(modelName)) return [];\n      const wrappedRecords = this.get('workspaceContext.workspaceData').filterBy('modelName', modelName) || [];\n      return wrappedRecords.map(a => a.record);\n    }),\n\n    /* Builds the chosen filters. */\n    filterFunction: Ember.computed('options.columns', function () {\n      const filterColumns = Object.values(this.get('options.columns')).map(col => new _filterColumn.default(col));\n      const args = filterColumns.map(column => {\n        return column.get('filterNode');\n      });\n      return (0, _filters.buildFilterFunction)((0, _filters.buildCompoundFilterNode)('and', args));\n    }),\n\n    /* Applies the choice of filters. */\n    filteredRecords: Ember.computed('chartRecords', 'filterFunction', function () {\n      const chartRecords = this.get('chartRecords') || [];\n      return chartRecords.filter(this.get('filterFunction'));\n    }),\n\n    /* Applies the choices of fields and metrics. */\n    boxMetric: Ember.computed('options.displayOptions.selected', 'filteredRecords', function () {\n      const displaySelection = this.get('options.displayOptions.selected');\n      if (Ember.isBlank(displaySelection) || Ember.isBlank(displaySelection.valueKey) || Ember.isBlank(displaySelection.valueCategory) || Ember.isBlank(displaySelection.metricOption)) return;\n      const slicedRecords = this.get('filteredRecords').filterBy(displaySelection.valueKey, displaySelection.valueCategory.value);\n      const value = this.processRecords(slicedRecords, displaySelection.metricOption.id);\n      const name = displaySelection.label + ' - ' + displaySelection.valueCategory.label;\n      /*eslint-disable */\n\n      return {\n        name,\n        value\n      };\n      /*eslint-enable */\n    }),\n    stateClass: Ember.computed('boxMetrics', 'options.boxColor.{orange,red}', function () {\n      if (Ember.isBlank(this.get('options'))) return;\n      const value = this.get('boxMetric.value');\n      /*eslint-disable */\n\n      if (value >= this.get('options.boxColor.red')) {\n        return 'red-state';\n      } else if (value >= this.get('options.boxColor.orange')) {\n        return 'orange-state';\n      } else {\n        return;\n      }\n      /*eslint-enable */\n\n    }),\n    widthConstrained: Ember.computed('widget.width', function () {\n      if (this.get('widget.width') === 1) {\n        return 'width-constrained';\n      }\n\n      return null;\n    }),\n\n    /* Applies the chart title input. */\n    chartTitle: Ember.computed('widget.state.dataType.{name,title}', function () {\n      const title = this.get('widget.state.dataType.title');\n      if (Ember.isPresent(title)) return title;\n      const name = this.get('widget.state.dataType.name');\n\n      if (Ember.isPresent(name)) {\n        return `${name} Box Widget`;\n      }\n\n      return 'Box Widget';\n    }),\n\n    buildColumnFilter() {\n      const dataColumns = this.get('options.dataColumns') || [];\n      const args = dataColumns.map(column => {\n        return column.get('filterNode');\n      });\n      return (0, _filters.buildCompoundFilterNode)('and', args);\n    },\n\n    processRecords(records, metricOption\n    /*, valueKey */\n    ) {\n      switch (metricOption) {\n        case 'count':\n          if (records) return records.length;\n          break;\n\n        default:\n          return 0;\n      }\n    },\n\n    actions: {\n      onFilterButtonClick() {\n        const workspace = this.get('workspace');\n        let topState = workspace.get('topState');\n\n        while (topState === 'boxWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        const displayName = 'Box Analytics';\n        const widget = this.get('widget');\n        workspace.pushState('boxWidget', {\n          displayName,\n          widget\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/box-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"aLD/xXuy\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"to-constrain analytics-widget-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"chartTitle\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"analytics-widget-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-filter\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-body box-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"options\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"iq-widgets/box-widget/box-metric\\\",null,[[\\\"metric\\\"],[[23,[\\\"boxMetric\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/box-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/breakdown-replacement-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/breakdown-replacement-form-widget/config\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/vehicleCapacity\"], function (_exports, _component, _config, _moment, _unwrapProxy, _vehicleCapacity) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    editableSections: _config.default.editableSections,\n    originalReplacementStartTime: null,\n    originalReplacementEndTime: null,\n    classNames: ['breakdown-replacement-form-widget'],\n\n    init() {\n      this._super(...arguments);\n\n      const records = this.get('editableRecords') || [];\n      const dispatchRoute = this.get('editableRecords.firstObject');\n      records.forEach(record => {\n        record.set('vehicleSelectionRefreshFlag', false);\n      });\n      this.set('originalReplacementStartTime', dispatchRoute.get('replacementStartTime'));\n      this.set('originalReplacementEndTime', dispatchRoute.get('replacementEndTime'));\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // side panel width just for assign-vehicle-driver-to-route\n\n\n      const windowWidth = Ember.$(window).width();\n      const right = windowWidth - '600';\n      Ember.$('.ember-modal-dialog-target-attachment-left').css({\n        'right': `${right}px`\n      });\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      const dispatchRoute = this.get('editableRecords.firstObject');\n      const routeMaxTimeLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeMaxTimeLimit');\n      const routeMaxTimeLimit = routeMaxTimeLimitParam ? parseInt(routeMaxTimeLimitParam.get('value'), 10) : 720; // minutes\n\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const replacementRouteId = record.get('replacementRouteId');\n        const replacementStartTime = (0, _moment.default)(record.get('replacementStartTime'));\n        const replacementEndTime = (0, _moment.default)(record.get('replacementEndTime'));\n        const vehicleId = record.get('replacementVehicle.id');\n        const driverId = record.get('replacementDriver.id');\n        const routeTimeDiff = replacementEndTime.diff(replacementStartTime, 'minutes');\n        const schedule = record.get('route.schedule');\n        const scheduleStart = (0, _moment.default)(schedule.get('start'));\n        const scheduleEnd = (0, _moment.default)(schedule.get('end'));\n\n        if (isNaN(parseInt(replacementRouteId, 10))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Route ID must be a numerical entry');\n        }\n\n        if (!isNaN(parseInt(replacementRouteId, 10)) && (parseInt(replacementRouteId, 10) > 2147483648 || parseInt(replacementRouteId, 10) < 1)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Route ID must be between 1 to 2147483648');\n        }\n\n        if (routeTimeDiff > routeMaxTimeLimit) {\n          valid = false;\n          this.get('editModal.errors').pushObject(`Route length of ${routeTimeDiff} exceeds config Route Max Time Limit of ${routeMaxTimeLimit} minutes`);\n        }\n\n        if (replacementStartTime.isSameOrAfter(replacementEndTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Start Time cannot be after End Time');\n        }\n\n        if (scheduleStart.isValid() && scheduleEnd.isValid() && !(scheduleStart.isSameOrBefore(replacementStartTime) && scheduleEnd.isSameOrAfter(replacementEndTime))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Route duration should be within the current schedule time');\n        }\n\n        if (Ember.isEmpty(vehicleId)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Vehicle is required');\n        } else {\n          const maxTravelNeedCounts = record.get('maxTravelNeedCounts');\n          const vehicleType = (0, _unwrapProxy.unwrapProxy)(record.get('replacementVehicle.vehicleType'));\n          let isTravelNeedsNotMatched = false;\n\n          if (Ember.isPresent(maxTravelNeedCounts) && Ember.isPresent(vehicleType.capacityCounts)) {\n            isTravelNeedsNotMatched = (0, _vehicleCapacity.isUnderCapacity)(dispatchRoute, vehicleType.capacityCounts);\n          }\n\n          if (vehicleType.noOfAmbulatorySeats < maxTravelNeedCounts.ambulatory || vehicleType.noOfServiceAnimalSeats < maxTravelNeedCounts.serviceAnimal || vehicleType.noOfWheelChairSeats < maxTravelNeedCounts.wheelchair || vehicleType.noOfWideAmbulatorySeats < maxTravelNeedCounts.wideAmbulatory || vehicleType.noOfWideWheelChairSeats < maxTravelNeedCounts.wideWheelchair || isTravelNeedsNotMatched) {\n            const tooltip = this.get('tooltip');\n            const title = this.get('title');\n            const editModal = this.get('service');\n            tooltip.pushConfirmation({\n              tip: 'You are about to assign an incompatible vehicle. All trips that cannot be serviced will be waitlisted.',\n              title,\n              hasOverlay: true,\n              warning: true,\n              primaryActionText: 'Confirm',\n              primaryAction: () => {\n                record.set('ignoreCapacityViolations', true);\n                editModal.apply(title);\n              },\n              secondaryActionText: 'Cancel',\n              secondaryAction: () => {\n                tooltip.reset();\n              }\n            });\n            valid = false;\n          }\n        }\n\n        if (Ember.isEmpty(driverId)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Driver ID required');\n        }\n      });\n      return valid;\n    },\n\n    onEnter() {\n      if (this.validateRecords()) {\n        const title = this.get('title');\n        this.get('service').apply(title);\n      }\n    },\n\n    actions: {\n      onUndoClick() {\n        this.set('editModal.errors', []);\n        const dispatchRoute = this.get('editableRecords.firstObject');\n        const originalReplacementStartTime = this.get('originalReplacementStartTime');\n        const originalReplacementEndTime = this.get('originalReplacementEndTime');\n\n        if (Ember.isPresent(dispatchRoute)) {\n          dispatchRoute.rollbackAttributes();\n          dispatchRoute.set('replacementDriver', null);\n          dispatchRoute.set('replacementVehicle', null);\n          dispatchRoute.set('replacementStartTime', originalReplacementStartTime);\n          dispatchRoute.set('replacementEndTime', originalReplacementEndTime);\n          dispatchRoute.set('breakdownTime', originalReplacementStartTime); // update the vehicle selection component\n\n          dispatchRoute.toggleProperty('vehicleSelectionRefreshFlag');\n        }\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          const title = this.get('title');\n          this.get('service').apply(title);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/breakdown-replacement-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'route.name',\n        editable: false\n      }]\n    }, {\n      title: 'Add Replacement Route',\n      fields: [{\n        id: 'routeId',\n        type: 'number',\n        label: 'Route ID',\n        valuePath: 'replacementRouteId'\n      }, {\n        id: 'routeType',\n        type: 'enum',\n        label: 'Route Type',\n        valuePath: 'replacementRouteType',\n        cellDesc: 'anchor',\n        editable: true,\n        hidden: false,\n        readonlyCell: true,\n        extra: {\n          options: ['supervisor', 'rescue replacement', 'breakdown replacement'],\n          allowMultiple: false\n        }\n      }, {\n        id: 'breakdownPlace',\n        type: 'breakdown-location',\n        label: 'Breakdown Location',\n        valuePath: 'breakdownPlace',\n        modelName: 'place',\n        isMultiType: true,\n        extra: {\n          uneditable: true,\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetName',\n          localityPath: 'address.content.locality',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.subRegion',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          locationsPath: 'address.locations.content.firstObject.latlng',\n          freeformAddressPath: 'address.locations.freeformAddress'\n        }\n      }, {\n        id: 'breakdownTime',\n        type: 'time',\n        label: 'Breakdown Time',\n        readonlyCell: true,\n        valuePath: 'breakdownTime'\n      }, {\n        id: 'replacementStartTime',\n        type: 'datetimeflatpickr',\n        label: 'Set Start Time',\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        valuePath: 'replacementStartTime'\n      }, {\n        id: 'replacementEndTime',\n        type: 'datetimeflatpickr',\n        label: 'Set End Time',\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        valuePath: 'replacementEndTime'\n      }]\n    }, {\n      title: 'Assign Driver',\n      fields: [{\n        id: 'replacementDriver',\n        type: 'driverenum',\n        label: 'Driver ID',\n        valuePath: 'replacementDriver',\n        cellDesc: 'replacementDriver',\n        editable: true,\n        hidden: false,\n        extra: {\n          optionModelName: 'driver',\n          optionSearchPath: 'driverId',\n          onlyAssignableDrivers: true\n        }\n      }, {\n        id: 'driverName',\n        type: 'text',\n        label: 'Driver Name',\n        readonlyCell: true,\n        valuePath: 'replacementDriver.fullName'\n      }, {\n        id: 'shiftStartTime',\n        type: 'text',\n        label: 'Shift Start',\n        readonlyCell: true,\n        valuePath: 'replacementDriver.currentDriverAvailability.formattedShiftStart'\n      }, {\n        id: 'shiftEndTime',\n        type: 'text',\n        label: 'Shift End',\n        readonlyCell: true,\n        valuePath: 'replacementDriver.currentDriverAvailability.formattedShiftEnd'\n      }]\n    }, {\n      title: 'Assign Vehicle',\n      fields: [{\n        id: 'replacementVehicle',\n        type: 'vehicle-selection',\n        label: '',\n        valuePath: 'selectedVehicle',\n        modelName: 'vehicle',\n        isMultiType: true,\n        extra: {\n          refreshFlagPath: 'vehicleSelectionRefreshFlag',\n          selectedVehiclePath: 'replacementVehicle',\n          notShowAssignedVehicle: true\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-booking-form/booking-details/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _component, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    bookingID: null,\n    bookDate: null,\n    riderDetails: null,\n\n    init() {\n      this._super(...arguments);\n\n      const bookingData = this.get('editModal.editableRecords')[0];\n      const selectedRiderDetails = (0, _unwrapProxy.unwrapProxy)(bookingData.legs.map(ele => ele.rider)).uniqBy('id').map(ele => {\n        return {\n          'passengerID': ele.get('riderId'),\n          'name': ele.get('fullName')\n        };\n      });\n      this.set('riderDetails', selectedRiderDetails);\n      this.set('bookingID', bookingData.get('id'));\n      this.set('bookDate', bookingData.get('requestTimeForDisplay'));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-booking-form/booking-details/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eygDLUDL\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderDetail\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[11,\\\"style\\\",\\\"float:right\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Booking ID\\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"bookingID\\\"]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"riderDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[22,1,[\\\"passengerID\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[22,1,[\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n            \\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Date/Request/Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cancel-booking-detail-field\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"bookDate\\\"]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/cancel-booking-form/booking-details/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-booking-form/cancel-reason/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    cancelTypeOptions: null,\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      const cancelTypeOptions = this.store.peekAll('cancel-type');\n      this.set('cancelTypeOptions', cancelTypeOptions);\n    },\n\n    notesCharactersLength: Ember.computed('note', function () {\n      if (!Ember.isEmpty(this.get('note'))) {\n        return this.get('note').length;\n      }\n\n      return 0;\n    }),\n    actions: {\n      onNotesChange(note) {\n        this.get('onNoteChange')(note.trim());\n      },\n\n      onSelectedTypeChange(value) {\n        this.get('onSelectedCancelTypeChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-booking-form/cancel-reason/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"pGGlpMwD\",\n    \"block\": \"{\\\"symbols\\\":[\\\"cancelTypeOption\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right\\\"],[9],[0,\\\"Reason\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"data-test-power-select form-control\\\",\\\"Select reason\\\",[23,[\\\"cancelTypeOptions\\\"]],true,\\\"displayName\\\",[23,[\\\"selectedCancelType\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedCancelType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"class\\\",\\\"rows\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"oninput\\\",\\\"value\\\"],[\\\"form-control\\\",\\\"2\\\",\\\"Write a short note\\\",\\\"150\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNotesChange\\\",[23,[\\\"note\\\"]]],null],[23,[\\\"note\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"hint pull-right\\\"],[9],[1,[21,\\\"notesCharactersLength\\\"],false],[0,\\\"/150\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/cancel-booking-form/cancel-reason/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-booking-form/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/config/api-urls\"], function (_exports, _component, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['cancel-booking-form-side-drawer'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    bookingId: null,\n    tripIds: null,\n    isProgressShown: false,\n    isProcessing: false,\n    editableSections: null,\n    note: null,\n    selectedCancelType: null,\n    canSave: true,\n    cancelStatus: null,\n\n    init() {\n      this._super(...arguments);\n\n      const bookingID = this.get('editModal.editableRecords')[0].get('id');\n      this.set('bookingId', bookingID);\n      this.set('cancelStatus', this.get('editModal.editableRecords')[1]);\n      const filteredTrips = this.get('booking.currentTrips').filter(trip => bookingID === trip.get('booking.id'));\n      this.set('tripIds', filteredTrips.map(t => t.get('id')));\n      this.set('editableSections', []);\n      this.setCancelTypeInitialSelection();\n    },\n\n    setCancelTypeInitialSelection() {\n      const cancelTypeOptions = this.store.peekAll('cancel-type');\n      this.set('selectedCancelType', cancelTypeOptions.firstObject);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    saveCancellation() {\n      const booking = this.store.peekRecord('booking', this.get('bookingId'));\n      const cancellation = booking.get('cancellation');\n      const session = this.get('session');\n      const prepareCancelData = {\n        data: {\n          links: {},\n          meta: {},\n          attributes: {\n            notes: cancellation.get('notes')\n          },\n          relationships: {\n            cancelTypeName: {\n              data: {\n                id: cancellation.get('cancelType.id'),\n                type: 'cancelTypeName',\n                links: {}\n              },\n              meta: {}\n            }\n          },\n          id: this.get('bookingId'),\n          type: 'cancellation'\n        }\n      };\n      const json = JSON.stringify(prepareCancelData);\n      this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking/' + this.get('bookingId') + '/cancellation', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).then(async () => {\n        this.get('notifications').success(`BOOKING ID  ${this.get('bookingId')} WAS CANCELED SUCCESSFULLY`);\n        const tripIdsClause = this.get('tripIds').map(r => `'${r}'`).join(',');\n        const tripQuery = `in(id,(${tripIdsClause}))`;\n        await this.store.query('trip', {\n          filter: tripQuery\n        });\n        this.get('editModal').reset();\n        this.get('editModal').close();\n        booking.set('status', this.get('cancelStatus')); // todo: server is not returning status . temporary code\n\n        this.set('isProcessing', false);\n      }).catch(() => {\n        this.get('notifications').warning(`FAILED TO CANCEL BOOKING ID  ${this.get('bookingId')}`);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n        this.set('isProcessing', false);\n      });\n    },\n\n    actions: {\n      onUndoClick() {\n        this.setCancelTypeInitialSelection();\n        this.set('note', null);\n      },\n\n      onSaveClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onXButtonClick() {\n        const booking = this.store.peekRecord('booking', this.get('bookingId'));\n        booking.set('cancellation', null);\n        this.toggleProperty('isProgressShown');\n      },\n\n      onCloseClick() {\n        this.get('editModal').close();\n      },\n\n      onConfirmClick() {\n        if (this.get('isProcessing')) return;\n        this.set('isProcessing', true);\n        const booking = this.store.peekRecord('booking', this.get('bookingId'));\n        const cancelType = this.get('selectedCancelType');\n        const cancellation = this.store.createRecord('cancellation', {\n          notes: this.get('note'),\n          cancelType: cancelType\n        });\n        booking.set('cancellation', cancellation);\n        this.saveCancellation();\n      },\n\n      onNoteChange(note) {\n        this.set('note', note);\n      },\n\n      onSelectedCancelTypeChange(cancelType) {\n        this.set('selectedCancelType', cancelType);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-booking-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"bMTmtdzA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"cancel-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/cancel-booking-form/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Cancel Booking\\\",[23,[\\\"canShrink\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/iq-widgets/cancel-booking-form/template.hbs' @ L17:C3) \\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex;\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 \\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[9],[0,\\\"Booking ID: \\\"],[1,[21,\\\"bookingId\\\"],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/cancel-booking-form/template.hbs' @ L27:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/cancel-booking-form/template.hbs' @ L28:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Cancel Reason\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"iq-widgets/cancel-booking-form/cancel-reason\\\",null,[[\\\"selectedCancelType\\\",\\\"note\\\",\\\"onNoteChange\\\",\\\"onSelectedCancelTypeChange\\\"],[[23,[\\\"selectedCancelType\\\"]],[23,[\\\"note\\\"]],[23,[\\\"onNoteChange\\\"]],[23,[\\\"onSelectedCancelTypeChange\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/cancel-booking-form/template.hbs' @ L37:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Booking Details\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"iq-widgets/cancel-booking-form/booking-details\\\",null,[[\\\"editableRecords\\\",\\\"editableSections\\\"],[[23,[\\\"editableRecords\\\"]],[23,[\\\"editableSections\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"hasOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-container\\\",\\\"middle left\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Cancel Booking\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\"Do you want to cancel this booking?\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-5\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[12,\\\"disabled\\\",[21,\\\"isProcessing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null]],[9],[0,\\\"\\\\n    Cancel\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"disabled\\\",[21,\\\"isProcessing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"],null]],[9],[0,\\\"\\\\n    Confirm\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/cancel-booking-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/cancel-related-trips/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    selectedTrips: Ember.observer('subscriptionTrips.@each.{isChecked}', function () {\n      const checkedTrips = this.get('subscriptionTrips').filterBy('isChecked', true);\n      const isAllChecked = this.get('isAllChecked');\n      const isAllSubscriptionTripsChecked = this.get('subscriptionTrips').isEvery('isChecked');\n\n      if (isAllSubscriptionTripsChecked && !isAllChecked) {\n        this.toggleProperty('isAllChecked');\n      }\n\n      if (!isAllSubscriptionTripsChecked && isAllChecked) {\n        this.toggleProperty('isAllChecked');\n      }\n\n      this.get('booking').setCheckedSubscriptionTrips(checkedTrips);\n    }),\n    actions: {\n      onSelectedTrip(trip, event) {\n        // eslint-disable-next-line no-unused-expressions\n        event.target.checked ? Ember.set(trip, 'isChecked', true) : Ember.set(trip, 'isChecked', false);\n      },\n\n      onCheckAllTrips() {\n        const trips = this.get('subscriptionTrips');\n        this.toggleProperty('isAllChecked');\n        trips.setEach('isChecked', this.get('isAllChecked'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/cancel-related-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"lHKbYIZM\",\n    \"block\": \"{\\\"symbols\\\":[\\\"trip\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"cancel-trip-para\\\"],[9],[0,\\\"Select the subscription trip(s) you want to cancel.\\\\n    Note: If a trip has already been dispatched, then you must use the Dispatch workspace to cancel the trip.\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form  w-100 m-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"subscriptionTrips\\\",\\\"length\\\"]],0],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-1\\\",[23,[\\\"isAllChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAllTrips\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"strong\\\"],[9],[0,\\\"All\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"subscriptionTrips\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"ml-4 d-block\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-2\\\",[22,1,[\\\"isChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectedTrip\\\",[22,1,[]]],null]]]],false],[0,\\\"\\\\n                \\\"],[7,\\\"strong\\\"],[9],[0,\\\"Trip \\\"],[1,[22,1,[\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/cancel-related-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['cancel-booking-form-side-drawer'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    subscriptionService: Ember.inject.service('subscription'),\n    subscriptionId: null,\n    isProgressShown: false,\n    editableSections: null,\n    note: null,\n    selectedCancelType: null,\n    canSave: true,\n    subTitle: null,\n    isAllChecked: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('subscriptionId', this.get('editModal.editableRecords')[0].get('id'));\n      this.set('editableSections', []);\n      this.getSubscriptionTrips();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeCheckedProperyForSelectedSubscriptionTrips();\n    },\n\n    async cancelSubscriptionTrips() {\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        await this.get('subscriptionService').cancelFutureTrips(this.get('subscriptionId'));\n        this.get('notifications').success('Subscription trip(s) successfully canceled');\n        const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n        const subscriptions = await this.get('apiContext').loadSubscriptionsForSelectedExternalRiders();\n        this.set('booking.currentBookings', bookings);\n        this.set('booking.currentTrips', trips);\n        this.set('booking.currentSubscriptions', subscriptions);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n      } catch (error) {\n        this.get('notifications').warning(error.message);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n      }\n    },\n\n    async getSubscriptionTrips() {\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        const futureTrips = await this.get('subscriptionService').fetchTripsForCancelSubscription(this.get('subscriptionId'));\n        this.set('subscriptionTrips', futureTrips);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      } catch (error) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false); // eslint-disable-next-line no-console\n\n        console.error(error.message);\n      }\n    },\n\n    //NYAAR-19594-remove the checked property for can cancel releated trips when closing the Cancel Subscription Trips Panel\n    removeCheckedProperyForSelectedSubscriptionTrips() {\n      const subscriptionTrips = this.get('subscriptionTrips');\n      subscriptionTrips.setEach('isChecked', false);\n    },\n\n    actions: {\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onSaveClick() {\n        const message = this.get('booking').cancelSubscriptionMessage();\n        this.set('subTitle', message);\n        this.toggleProperty('isProgressShown');\n      },\n\n      onXButtonClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onCloseClick() {\n        this.get('editModal').close();\n      },\n\n      onCancelClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onConfirmClick() {\n        if (this.get('booking').tripIds.length > 0) {\n          return this.cancelSubscriptionTrips();\n        }\n\n        this.get('editModal').reset();\n        this.get('editModal').close();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/subscription-information/component\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"moment\"], function (_exports, _environment, _component, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    subscriptionID: null,\n    passengerID: null,\n    fName: null,\n    lName: null,\n    dateReqTime: null,\n    riderDetail: null,\n    bookDate: null,\n\n    init() {\n      this._super(...arguments);\n\n      const subscriptionData = this.get('editModal.editableRecords')[0];\n      this.setProperties({\n        'riderDetail': {\n          'subscriptionId': subscriptionData.get('id'),\n          'passengerID': subscriptionData.get('rider.riderId'),\n          'fName': subscriptionData.get('rider.firstName'),\n          'lName': subscriptionData.get('rider.lastName'),\n          'dateReqTime': subscriptionData.get('requestTime')\n        }\n      });\n      this.set('bookDate', (0, _moment.default)(this.riderDetail.dateReqTime).format(_environment.default.dateTimeFormat.dateTimeMoment));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/subscription-information/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"DNSSF9xF\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form  w-100 m-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"sub-row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right sub-head\\\"],[9],[0,\\\"Subscription ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right delete-sub\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"riderDetail\\\",\\\"subscriptionId\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"sub-row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right sub-head\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"riderDetail\\\",\\\"fName\\\"]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"sub-row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right sub-head\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"riderDetail\\\",\\\"lName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/subscription-information/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"CHO+BAkj\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"cancel-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Cancel Subscription Trips\\\",[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.hbs' @ L16:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 p-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"sub-id\\\"],[9],[0,\\\"Subscription ID: \\\"],[1,[21,\\\"subscriptionId\\\"],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 text-end\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.hbs' @ L26:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.hbs' @ L27:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Subscription Information\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/cancel-subscription-trips/subscription-information\\\",null,[[\\\"editableRecords\\\",\\\"editableSections\\\"],[[23,[\\\"editableRecords\\\"]],[23,[\\\"editableSections\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.hbs' @ L30:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Cancel Related Trips\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/cancel-subscription-trips/cancel-related-trips\\\",null,[[\\\"subscriptionTrips\\\",\\\"isAllChecked\\\"],[[23,[\\\"subscriptionTrips\\\"]],[23,[\\\"isAllChecked\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"hasOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-container\\\",\\\"middle left\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-subscription\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[\\\"Subscription\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[1,[21,\\\"subTitle\\\"],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-5\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCancelClick\\\"],null]],[9],[0,\\\"\\\\n          Cancel\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"],null]],[9],[0,\\\"\\\\n          Confirm\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/cancel-subscription-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-type-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/cancel-type-form-widget/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    tripId: null,\n    classNames: ['cancel-type-form-widget'],\n\n    init() {\n      this._super(...arguments);\n\n      const records = this.get('editableRecords') || [];\n      const segment = records[0];\n\n      if (Ember.isPresent(segment)) {\n        this.set('tripId', segment.trips.firstObject.get('tripId'));\n      }\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        if (Ember.isNone(record.get('cancelType'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Reason cannot be blank.');\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      onCellValueChange(record, valuePath, value, options) {\n        if (record) {\n          record.set('isForceDirty', true);\n          this.get('service').setRecordValue(record, valuePath, value, options);\n        }\n      },\n\n      onUndoClick() {\n        const records = this.get('editableRecords');\n        records.forEach(record => {\n          record.set('cancelNotes', null);\n          record.set('cancelType', null);\n        });\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          const title = this.get('title');\n          const tip = `Are you sure you want to cancel trip ${this.get('tripId')}?`;\n          const primaryActionText = 'Confirm';\n          this.get('service').apply(title, tip, primaryActionText);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/cancel-type-form-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }, {\n        id: 'fullName',\n        type: 'text',\n        label: 'Passenger First Name',\n        valuePath: 'leg.rider.fullName',\n        editable: false\n      }, {\n        id: 'riderId',\n        type: 'text',\n        label: 'Passenger ID',\n        valuePath: 'leg.rider.riderId',\n        editable: false\n      }]\n    }, {\n      title: 'Cancel Reason',\n      fields: [{\n        id: 'cancelType',\n        type: 'enum',\n        label: 'Reason',\n        valuePath: 'cancelType',\n        cellDesc: 'cancelType',\n        editable: true,\n        hidden: false,\n        extra: {\n          optionModelName: 'cancel-type',\n          optionSearchPath: 'description'\n        }\n      }, {\n        id: 'notes',\n        type: 'text',\n        editable: true,\n        label: 'Notes',\n        valuePath: 'cancelNotes'\n      }]\n    }, {\n      title: 'Trip Information',\n      fields: [{\n        id: 'riderFirstName',\n        label: 'First Name',\n        valuePath: 'leg.rider.firstName',\n        editable: false\n      }, {\n        id: 'riderLastName',\n        label: 'Last Name',\n        valuePath: 'leg.rider.lastName',\n        editable: false\n      }, {\n        id: 'externalId',\n        label: 'Trip ID',\n        valuePath: 'id',\n        editable: false\n      }, {\n        id: 'requestedTime',\n        label: 'Promise Time',\n        valuePath: 'formattedPromiseTime',\n        editable: false\n      }, {\n        id: 'pickupaddress',\n        label: 'Pick Up Address ',\n        valuePath: 'pick.place.address.simpleAddress',\n        editable: false\n      }, {\n        id: 'dropaddress',\n        label: 'Drop Off Address',\n        valuePath: 'drop.place.address.simpleAddress',\n        editable: false\n      }, {\n        id: 'anchor',\n        label: 'Anchor',\n        valuePath: 'anchor',\n        editable: false\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/column-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/column-widget/component\", \"adept-iq/config/column-types\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _columnTypes, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const logger = {\n    log: () => null,\n    warn: console.warn // eslint-disable-line no-console\n\n  };\n\n  var _default = _component.default.extend({\n    activeContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    classNames: ['iqux-column-widget'],\n    layoutName: 'components/generic-widgets/column-widget',\n    defaultIncludes: null,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._onActiveContextRefresh = modelNames => {\n        if (this.get('isDestroyed')) return;\n        const names = Ember.makeArray(this.get('config.modelName'));\n\n        if (!modelNames.includes(...names)) {\n          // not refreshing this model. give control back\n          this.set('activeContext.topActiveContext.refreshInProgress', false);\n          return;\n        }\n\n        Ember.run.schedule('afterRender', this, 'refreshData');\n      };\n\n      this._onActiveContextClear = () => {\n        this.clearData();\n      };\n\n      this._onActiveContextRemoveBindings = () => {\n        this.get('activeContext.topActiveContext').off('refresh', this._onActiveContextRefresh);\n        this.get('activeContext.topActiveContext').off('clear', this._onActiveContextClear);\n        this.get('activeContext.topActiveContext').off('unbind', this._onActiveContextRemoveBindings);\n      };\n\n      if (this.get('activeContext.topActiveContext')) {\n        this.get('activeContext.topActiveContext').on('refresh', this._onActiveContextRefresh);\n        this.get('activeContext.topActiveContext').on('clear', this._onActiveContextClear);\n        this.get('activeContext.topActiveContext').on('unbind', this._onActiveContextRemoveBindings);\n        this.refreshData();\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      if (this.get('activeContext.topActiveContext') && this.get('activeContext.topActiveContext').has('unbind')) {\n        this._onActiveContextRemoveBindings();\n      }\n\n      this._onActiveContextRefresh = null;\n      this._onActiveContextClear = null;\n      this._onActiveContextRemoveBindings = null;\n    },\n\n    setupFilterType() {\n      const searchText = this.get('searchText');\n      const res = searchText.split('=');\n\n      if (Ember.isEmpty(res[0]) || Ember.isEmpty(res[1])) {\n        return [this.buildSearchFilter(), this.buildColumnFilter()];\n      }\n\n      return [this.buildSearchFilterByParameter(), this.buildColumnFilter()];\n    },\n\n    /**\n     * In the booking workspace booking widgets, subscription widgets, and booking trip widgets data have come from\n     * the booking service, getRecord method was overridden by those widgets component because If user search the record,\n     * we should filter entire records\n     * @returns {*|Array}\n     */\n    getRecords(data) {\n      const getAllRecords = data;\n      return getAllRecords.get('records') || [];\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n      const self = this;\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelNames = Ember.makeArray(this.get('config.modelName')); //TODO need to remove future release\n\n        if (this.get('config.isFormControls')) {\n          const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n          const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n\n          if (self.get('state.modelName') === this.get('config.modelName')) {\n            return this.get('getRecords')(self).filter(filterFn).sort(compareFn);\n          }\n\n          return this.get('records');\n        }\n\n        return this.get('activeContext.topActiveContext').query(modelNames, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    buildSortParam() {\n      const config = this.get('config');\n      const state = this.get('state');\n      let columnConfig; // user-specified sort order always takes precedence\n\n      if (Ember.isPresent(state.sortId)) {\n        columnConfig = config.columns.findBy('id', state.sortId);\n\n        if (!columnConfig) {\n          // this can occur naturally if the user sorts by a column, saves, and\n          // that column is later removed from the widget's configuration\n          logger.warn(`workspace configuration specifies that ${config.title} widget should be sorted by column with id '${state.sortId}', but no such column exists`);\n        }\n      } // fall back to default sort order; this is optional in widget config\n\n\n      if (!columnConfig && Ember.isPresent(config.defaultSortId)) {\n        columnConfig = config.columns.findBy('id', config.defaultSortId);\n\n        if (!columnConfig) {\n          logger.warn(`${config.title} widget is configured with default sort ID '${config.defaultSortId}', but has no column with matching ID`);\n        }\n      } // collection will be unsorted; this is expected when there is no specified\n      // workspace sort or widget default sort\n\n\n      if (!columnConfig) {\n        return null;\n      }\n\n      const columnType = _columnTypes.default.findBy('id', columnConfig.type);\n\n      if (!columnType) {\n        logger.warn(`tried to sort by column with ID '${columnConfig.id}', but its type '${columnConfig.type}' is not a valid column type`);\n        return null;\n      }\n\n      if (!columnType.compare) {\n        logger.warn(`column type '${columnType.id}' does not have a compare function configured`);\n        return null;\n      }\n\n      let sortAsc = true;\n\n      if (Ember.isPresent(state.sortAsc)) {\n        sortAsc = state.sortAsc;\n      } else if (Ember.isPresent(config.defaultSortAsc)) {\n        sortAsc = config.defaultSortAsc;\n      }\n\n      const sortValuePath = columnConfig.customSortPath ? columnConfig.customSortPath : columnConfig.valuePath;\n      return {\n        path: sortValuePath,\n        asc: sortAsc,\n        compare: columnType.compare\n      };\n    },\n\n    buildSearchFilterByParameter() {\n      const searchText = this.get('searchText');\n      const res = searchText.split('=');\n      const attr = res[0].toLowerCase().trim();\n      const value = res[1].trim();\n      const columns = this.get('table.columns') || [];\n\n      function configFilter(config) {\n        return config.label.toLowerCase().trim() === attr;\n      }\n\n      if (Ember.isEmpty(searchText)) {\n        return null;\n      }\n\n      const searchableConfigs = columns.rejectBy('hidden').mapBy('config').compact().filter(configFilter);\n      const args = searchableConfigs.map(config => {\n        const columnType = _columnTypes.default.findBy('id', config.type) || {};\n        const filterType = columnType.searchFilterType;\n        const valuePath = config.alternateValuePath ? config.alternateValuePath : config.valuePath;\n        return (0, _filters.buildValueFilterNode)(filterType, valuePath, [value], config.format);\n      });\n      return (0, _filters.buildCompoundFilterNode)('or', args);\n    },\n\n    buildSearchFilter() {\n      const searchText = this.get('searchText');\n      const columns = this.get('table.columns') || [];\n\n      if (Ember.isEmpty(searchText)) {\n        return null;\n      }\n\n      const searchableConfigs = columns.rejectBy('hidden').mapBy('config').compact().filterBy('searchable');\n      const args = searchableConfigs.map(config => {\n        const columnType = _columnTypes.default.findBy('id', config.type) || {};\n        const filterType = columnType.searchFilterType;\n        const valuePath = config.alternateValuePath ? config.alternateValuePath : config.valuePath;\n        return (0, _filters.buildValueFilterNode)(filterType, valuePath, [searchText], config.format);\n      });\n      return (0, _filters.buildCompoundFilterNode)('or', args);\n    },\n\n    buildColumnFilter() {\n      const quickFilters = this.get('quickFilters');\n      const columns = this.get('table.columns') || [];\n      let args = columns.map(column => {\n        return column.get('filterNode');\n      });\n\n      if (Ember.isPresent(quickFilters)) {\n        quickFilters.forEach(filter => {\n          if (filter.active) {\n            args = args.concat(filter.filters);\n          }\n        });\n      }\n\n      return (0, _filters.buildCompoundFilterNode)('and', args);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-booking-form/booking-details/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _component, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    bookingID: null,\n    riderDetails: null,\n    bookDate: null,\n\n    init() {\n      this._super(...arguments);\n\n      const bookingData = this.get('editModal.editableRecords')[0];\n      const selectedRiderDetails = (0, _unwrapProxy.unwrapProxy)(bookingData.legs.map(ele => ele.rider)).uniqBy('id').map(ele => {\n        return {\n          'passengerID': ele.get('riderId'),\n          'name': ele.get('fullName')\n        };\n      });\n      this.set('riderDetails', selectedRiderDetails);\n      this.set('bookingID', bookingData.get('id'));\n      this.set('bookDate', bookingData.get('requestTimeForDisplay'));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-booking-form/booking-details/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"AHvvN6bI\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderDetail\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[11,\\\"style\\\",\\\"float:right\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Booking ID\\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"bookingID\\\"]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n           \\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"riderDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[22,1,[\\\"passengerID\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[22,1,[\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Date/Request/Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cancel-booking-detail-field\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"bookDate\\\"]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/delete-booking-form/booking-details/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-booking-form/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/config/api-urls\", \"adept-iq/models/trip\"], function (_exports, _component, _apiUrls, _trip) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['cancel-booking-form-side-drawer'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    bookingId: null,\n    isProgressShown: false,\n    editableSections: null,\n    note: null,\n    canSave: true,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('bookingId', this.get('editModal.editableRecords')[0].get('id'));\n      this.set('editableSections', []);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    async deleteBookingRecord() {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n      const bookingId = this.get('bookingId');\n      const filteredTrips = this.get('booking.currentTrips').filter(trip => bookingId === trip.get('booking.id'));\n      const tripIds = filteredTrips.map(t => t.get('id'));\n      const tripStatus = filteredTrips.every(t => t.get('status') === _trip.TRIP_CANCELED_STATUS.toLowerCase());\n      const allCanceled = tripIds.length && tripStatus;\n      const payload = {\n        doCancel: !allCanceled,\n        reason: this.get('note')\n      };\n\n      try {\n        await this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking/' + bookingId, {\n          method: 'DELETE',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          },\n          data: payload\n        });\n        await this.get('booking').deleteTrips(bookingId);\n        const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n        this.set('booking.currentBookings', bookings);\n        this.set('booking.currentTrips', trips);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n        this.get('notifications').success('Booking successfully deleted');\n      } catch (error) {\n        this.get('notifications').warning('FAILED TO DELETED BOOKING ID ' + bookingId + error.message);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n      }\n    },\n\n    actions: {\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onSaveClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onXButtonClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onCloseClick() {\n        this.get('editModal').close();\n      },\n\n      onCancelClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onConfirmClick() {\n        this.deleteBookingRecord();\n      },\n\n      onNoteChange(note) {\n        this.set('note', note);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-booking-form/delete-reason/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    notesCharactersLength: Ember.computed('note', function () {\n      if (!Ember.isEmpty(this.get('note'))) {\n        return this.get('note').length;\n      }\n\n      return 0;\n    }),\n    actions: {\n      onNotesChange(note) {\n        this.get('onNoteChange')(note.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-booking-form/delete-reason/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"CK5BdPgR\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right\\\"],[9],[0,\\\"Reason\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"class\\\",\\\"rows\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"oninput\\\",\\\"value\\\"],[\\\"form-control\\\",\\\"2\\\",\\\"Please mention Reason\\\",\\\"150\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNotesChange\\\",[23,[\\\"note\\\"]]],null],[23,[\\\"note\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"hint pull-right\\\"],[9],[1,[21,\\\"notesCharactersLength\\\"],false],[0,\\\"/150\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/delete-booking-form/delete-reason/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-booking-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"02SuV9C/\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"cancel-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/delete-booking-form/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Delete Booking\\\",[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/iq-widgets/delete-booking-form/template.hbs' @ L16:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex;\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"p\\\"],[9],[0,\\\"Booking ID: \\\"],[1,[21,\\\"bookingId\\\"],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/delete-booking-form/template.hbs' @ L26:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/delete-booking-form/template.hbs' @ L27:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Delete Reason\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/delete-booking-form/delete-reason\\\",null,[[\\\"selectedCancelType\\\",\\\"note\\\",\\\"onNoteChange\\\"],[[23,[\\\"selectedCancelType\\\"]],[23,[\\\"note\\\"]],[23,[\\\"onNoteChange\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/delete-booking-form/template.hbs' @ L35:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Booking Details\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/delete-booking-form/booking-details\\\",null,[[\\\"editableRecords\\\",\\\"editableSections\\\"],[[23,[\\\"editableRecords\\\"]],[23,[\\\"editableSections\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"hasOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-container\\\",\\\"middle left\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Delete Booking\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\"Are you sure you want to delete this booking? Once \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n          deleted, a booking cannot be recovered.\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls ml-auto mr-5 mt-5\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri mx-3 cancelBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCancelClick\\\"],null]],[9],[0,\\\"\\\\n          Cancel\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"],null]],[9],[0,\\\"\\\\n          Confirm\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/delete-booking-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/cancel-related-trips/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    selectedTrips: Ember.observer('subscriptionTrips.@each.{isChecked}', function () {\n      const checkedTrips = this.get('subscriptionTrips').filterBy('isChecked', true);\n      const isAllChecked = this.get('isAllChecked');\n      const isAllSubscriptionTripsChecked = this.get('subscriptionTrips').isEvery('isChecked');\n\n      if (isAllSubscriptionTripsChecked && !isAllChecked) {\n        this.toggleProperty('isAllChecked');\n      }\n\n      if (!isAllSubscriptionTripsChecked && isAllChecked) {\n        this.toggleProperty('isAllChecked');\n      }\n\n      this.get('booking').setCheckedSubscriptionTrips(checkedTrips);\n    }),\n    actions: {\n      onSelectedTrip(trip, event) {\n        // eslint-disable-next-line no-unused-expressions\n        event.target.checked ? Ember.set(trip, 'isChecked', true) : Ember.set(trip, 'isChecked', false);\n      },\n\n      onCheckAllTrips() {\n        const trips = this.get('subscriptionTrips');\n        this.toggleProperty('isAllChecked');\n        trips.setEach('isChecked', this.get('isAllChecked'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/cancel-related-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"N2INixfh\",\n    \"block\": \"{\\\"symbols\\\":[\\\"trip\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"cancel-trip-para\\\"],[9],[0,\\\"This passenger has trip scheduled for this subscription. You may choose to cancel any of\\\\n    them individually, or\\\\n    cancel all of them by selecting the checkbox\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form  w-100 m-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"subscriptionTrips\\\",\\\"length\\\"]],0],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-1\\\",[23,[\\\"isAllChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAllTrips\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"strong\\\"],[9],[0,\\\"All\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"subscriptionTrips\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"ml-4 d-block\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-2\\\",[22,1,[\\\"isChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectedTrip\\\",[22,1,[]]],null]]]],false],[0,\\\"\\\\n                \\\"],[7,\\\"strong\\\"],[9],[0,\\\"Trip \\\"],[1,[22,1,[\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/cancel-related-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['cancel-booking-form-side-drawer'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    subscriptionService: Ember.inject.service('subscription'),\n    subscriptionId: null,\n    isProgressShown: false,\n    editableSections: null,\n    tripsIds: null,\n    note: null,\n    canSave: true,\n    subTitle: null,\n    isAllChecked: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('subscriptionId', this.get('editModal.editableRecords')[0].get('id'));\n      this.set('editableSections', []);\n      this.getSubscriptionTrips();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeCheckedProperyForSelectedSubscriptionTrips();\n    },\n\n    async cancelSubscriptionTrips() {\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true); // Regarding NYAAR-16551\n\n        if (this.get('booking').tripIds.length > 0) {\n          await this.get('subscriptionService').cancelFutureTrips(this.get('subscriptionId'));\n        }\n\n        await this.get('subscriptionService').deleteSubscription(this.get('subscriptionId'));\n        this.get('notifications').success('SUBSCRIPTION WAS DELETED SUCCESSFULLY');\n        const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n        const subscriptions = await this.get('apiContext').loadSubscriptionsForSelectedExternalRiders();\n        this.set('booking.currentBookings', bookings);\n        this.set('booking.currentTrips', trips);\n        this.set('booking.currentSubscriptions', subscriptions);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n      } catch (error) {\n        this.get('notifications').warning(error.message);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n      }\n    },\n\n    async getSubscriptionTrips() {\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        const futureTrips = await this.get('subscriptionService').fetchTripsForCancelSubscription(this.get('subscriptionId'));\n        this.set('subscriptionTrips', futureTrips);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      } catch (error) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false); // eslint-disable-next-line no-console\n\n        console.error(error.message);\n      }\n    },\n\n    //NYAAR-19594-remove the checked property for can cancel releated trips when closing the Delete Subscription Trips Panel\n    removeCheckedProperyForSelectedSubscriptionTrips() {\n      const subscriptionTrips = this.get('subscriptionTrips');\n      subscriptionTrips.setEach('isChecked', false);\n    },\n\n    actions: {\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onSaveClick() {\n        const message = this.get('booking').subscriptionTripMessage();\n        this.set('subTitle', message);\n        this.toggleProperty('isProgressShown');\n      },\n\n      onXButtonClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onCloseClick() {\n        this.get('editModal').close();\n      },\n\n      onCancelClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onConfirmClick() {\n        this.cancelSubscriptionTrips();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/subscription-information/component\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"moment\"], function (_exports, _environment, _component, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    subscriptionId: null,\n    passengerID: null,\n    fName: null,\n    lName: null,\n    dateReqTime: null,\n    riderDetail: null,\n    bookDate: null,\n\n    init() {\n      this._super(...arguments);\n\n      const subscriptionData = this.get('editModal.editableRecords')[0];\n      this.setProperties({\n        'riderDetail': {\n          'subscriptionId': subscriptionData.get('id'),\n          'passengerID': subscriptionData.get('rider.riderId'),\n          'fName': subscriptionData.get('rider.firstName'),\n          'lName': subscriptionData.get('rider.lastName'),\n          'dateReqTime': subscriptionData.get('requestTime')\n        }\n      });\n      this.set('bookDate', (0, _moment.default)(this.riderDetail.dateReqTime).format(_environment.default.dateTimeFormat.dateMoment));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/subscription-information/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"xKpviVHR\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form  w-100 m-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"sub-row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right sub-head\\\"],[9],[0,\\\"Subscription ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right delete-sub\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"riderDetail\\\",\\\"subscriptionId\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"sub-row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right sub-head\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"riderDetail\\\",\\\"fName\\\"]]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"sub-row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-right sub-head\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"riderDetail\\\",\\\"lName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/subscription-information/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"nOtznC8c\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"cancel-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.hbs' @ L5:C2) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Delete Subscription\\\",[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.hbs' @ L16:C3) \\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 p-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"sub-id\\\"],[9],[0,\\\"Subscription ID: \\\"],[1,[21,\\\"subscriptionId\\\"],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 text-end\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.hbs' @ L26:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.hbs' @ L27:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Subscription Information\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"iq-widgets/delete-subscriptions-form/subscription-information\\\",null,[[\\\"editableRecords\\\",\\\"editableSections\\\"],[[23,[\\\"editableRecords\\\"]],[23,[\\\"editableSections\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"subscriptionTrips\\\",\\\"length\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.hbs' @ L31:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Cancel Related Trips\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/delete-subscriptions-form/cancel-related-trips\\\",null,[[\\\"subscriptionTrips\\\",\\\"isAllChecked\\\"],[[23,[\\\"subscriptionTrips\\\"]],[23,[\\\"isAllChecked\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"hasOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-container\\\",\\\"middle left\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Delete Subscription\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[1,[21,\\\"subTitle\\\"],false],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  ml-auto mr-5 mt-5\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri mx-3 cancelBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCancelClick\\\"],null]],[9],[0,\\\"\\\\n    Cancel\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"],null]],[9],[0,\\\"\\\\n    Confirm\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/delete-subscriptions-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/donut-chart-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/chartjs-widget/component\", \"adept-iq/utils/filters\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _component, _filters, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* global Chart */\n  var _default = _component.default.extend({\n    workspaceContext: Ember.inject.service(),\n    classNames: ['donut-chart-widget', 'data-test-donut-chart-widget'],\n    widget: null,\n    options: Ember.computed.alias('widget.state.dataType'),\n\n    /* Applies the choice of data source. */\n    chartRecords: Ember.computed('options.modelName', 'workspaceContext.workspaceData.[]', function () {\n      const modelName = this.get('options.modelName');\n      if (Ember.isBlank(modelName)) return [];\n      return Ember.makeArray(this.get('workspaceContext.workspaceData')).filterBy('modelName', modelName).map(a => a.record);\n    }),\n\n    /* Builds the chosen filters. */\n    filterFunction: Ember.computed('options.columns', function () {\n      const filterColumns = Object.values(this.get('options.columns')).map(col => new _filterColumn.default(col));\n      const args = filterColumns.map(column => {\n        return column.get('filterNode');\n      });\n      return (0, _filters.buildFilterFunction)((0, _filters.buildCompoundFilterNode)('and', args));\n    }),\n\n    /* Applies the choice of filters. */\n    filteredRecords: Ember.computed('chartRecords', 'filterFunction', function () {\n      const chartRecords = this.get('chartRecords') || [];\n      return chartRecords.filter(this.get('filterFunction'));\n    }),\n\n    /* Gets the choice for slicing the data. */\n    slicedBy: Ember.computed('options.displayOptions.[]', function () {\n      if (Ember.isBlank(this.get('options.displayOptions'))) return;\n      /*eslint-disable */\n\n      return this.get('options.displayOptions').findBy('id', 'slicedBy').selected;\n      /*eslint-enable */\n    }),\n    chartSum: Ember.computed.alias('filteredRecords.length'),\n\n    /* Applies the choice for slicing the data. */\n    recordSlices: Ember.computed('filteredRecords', 'slicedBy', function () {\n      const categories = {};\n      const filteredRecords = this.get('filteredRecords');\n      const slicedBy = this.get('slicedBy');\n      const valueCategories = this.get('slicedBy.valueCategories') || [];\n      const filterKey = this.get('slicedBy.valueKey');\n      if (Ember.isBlank(slicedBy)) return categories;\n      valueCategories.forEach(category => {\n        categories[category.label] = filteredRecords.filterBy(filterKey, category.value);\n      }); // { 'label1': [], 'label2': [] }\n\n      return categories;\n    }),\n\n    /* Applies the choices for displaying data counts and/or percentages. */\n    aggregatedSliceData: Ember.computed('recordSlices', 'options.visualOptions.@each.isChecked', function () {\n      const visualOptions = this.get('options.visualOptions');\n      const showValues = visualOptions.findBy('id', 'value').isChecked;\n      const showPercentage = visualOptions.findBy('id', 'percentage').isChecked;\n      const totalCount = this.get('chartSum');\n      const data = [];\n      Object.entries(this.get('recordSlices')).forEach(slice => {\n        let label = slice[0];\n        const numRecords = slice[1].length;\n\n        if (showValues) {\n          label += ', ' + numRecords;\n        }\n\n        if (showPercentage && totalCount !== 0) {\n          label += ', ' + Math.floor(100 * numRecords / totalCount) + '%';\n        }\n\n        data.push({\n          label: label,\n          value: numRecords\n        });\n      }); // [{...}, {...}, ...]\n\n      return data;\n    }),\n\n    /* Applies the choice for sorting the data. */\n    sortedData: Ember.computed('aggregatedSliceData', 'options.sortOrder.selected.sortAsc', function () {\n      if (Ember.isBlank(this.get('aggregatedSliceData'))) return [];\n      const data = this.get('aggregatedSliceData');\n      const sortAsc = this.get('options.sortOrder.selected.sortAsc');\n\n      if (sortAsc) {\n        return data.sortBy('value');\n      } // [{...}, {...}, ...]\n\n\n      return data.sortBy('value').reverse();\n    }),\n    chartData: Ember.computed('sortedData', function () {\n      const sortedData = this.get('sortedData');\n      if (Ember.isBlank(sortedData)) return {\n        data: [],\n        labels: []\n      };\n      const data = [];\n      const labels = [];\n      const backgroundColor = [];\n      const colors = this.get('colors');\n      sortedData.forEach((dataSlice, i) => {\n        data.push(dataSlice.value);\n        labels.push(dataSlice.label);\n        backgroundColor.push(colors[i % colors.length]);\n      });\n      const datasets = [{\n        data,\n        backgroundColor\n      }];\n      return {\n        datasets,\n        labels\n      };\n    }),\n\n    /* Applies the chart title input. */\n    chartTitle: Ember.computed('widget.state.dataType.{name,title}', function () {\n      const title = this.get('widget.state.dataType.title');\n      if (Ember.isPresent(title)) return title;\n      const name = this.get('widget.state.dataType.name');\n\n      if (Ember.isPresent(name)) {\n        return `${name} Donut Chart`;\n      }\n\n      return 'Donut Chart';\n    }),\n\n    /* Applies the choices for display of legend and record count total. */\n    chartOptions: Ember.computed('options.{legendPlacement,visualOptions.@each.isChecked}', function () {\n      if (Ember.isBlank(this.get('widget.state'))) return {};\n      const options = {\n        legend: {\n          position: this.get('options.legendPlacement.selected.position')\n        },\n        elements: {\n          center: {\n            text: this.get('chartSum'),\n            fontStyle: 'AvenirNext',\n            //Default Arial\n            sidePadding: 15 //Default 20 (as a percentage)\n\n          }\n        },\n        tooltips: {\n          enabled: false\n        }\n      };\n      const showTotal = this.get('options.visualOptions').findBy('id', 'total').isChecked;\n\n      if (!showTotal) {\n        delete options.elements.center;\n      }\n\n      return options;\n    }),\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      Chart.pluginService.register({\n        beforeDraw: function (chart) {\n          if (chart.config.options.elements.center) {\n            //Get ctx from string\n            const ctx = chart.chart.ctx; //Get options from the center object in options\n\n            const centerConfig = chart.config.options.elements.center;\n            const fontStyle = centerConfig.fontStyle || 'Arial';\n            const txt = centerConfig.text;\n            const color = centerConfig.color || '#000';\n            const sidePadding = centerConfig.sidePadding || 20;\n            const sidePaddingCalculated = sidePadding / 100 * (chart.innerRadius * 2); //Start with a base font of 30px\n\n            ctx.font = '45px ' + fontStyle; //Get the width of the string and also the width of the element minus 10 to give it 5px side padding\n\n            const stringWidth = ctx.measureText(txt).width;\n            const elementWidth = chart.innerRadius * 2 - sidePaddingCalculated; // Find out how much the font can grow in width.\n\n            const widthRatio = elementWidth / stringWidth;\n            const newFontSize = Math.floor(30 * widthRatio);\n            const elementHeight = chart.innerRadius * 2; // Pick a new font size so it will not be larger than the height of label.\n\n            const fontSizeToUse = Math.min(newFontSize, elementHeight); //Set font settings to draw it correctly.\n\n            ctx.textAlign = 'center';\n            ctx.textBaseline = 'middle';\n            const centerX = (chart.chartArea.left + chart.chartArea.right) / 2;\n            const centerY = (chart.chartArea.top + chart.chartArea.bottom) / 2;\n            ctx.font = fontSizeToUse + 'px ' + fontStyle;\n            ctx.fillStyle = color; //Draw text in center\n\n            ctx.fillText(txt, centerX, centerY);\n          }\n        }\n      });\n    },\n\n    actions: {\n      onFilterButtonClick() {\n        const workspace = this.get('workspace');\n        let topState = workspace.get('topState');\n\n        while (topState === 'donutChartWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        const displayName = 'Donut Chart';\n        const widget = this.get('widget');\n        workspace.pushState('donutChartWidget', {\n          displayName,\n          widget\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/donut-chart-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"fdoR3zA8\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"analytics-widget-title data-test-analytics-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"chartTitle\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"analytics-widget-button data-test-analytics-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-filter\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-body donut-chart-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"donut-chart-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"options\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"ember-chart-fix\\\",null,[[\\\"type\\\",\\\"data\\\",\\\"options\\\",\\\"width\\\"],[\\\"doughnut\\\",[23,[\\\"chartData\\\"]],[23,[\\\"chartOptions\\\"]],260]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/donut-chart-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/driver-breaks-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/driver-breaks-form-widget/config\", \"adept-iq/utils/unwrapProxy\", \"moment\", \"lodash\", \"adept-iq/mixins/version-check\"], function (_exports, _component, _config, _unwrapProxy, _moment, _lodash, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const FIXED_BREAK_TYPE = 'fixed';\n  const TITLE_BREAK = 'Breaks';\n  const ESTIMATEDSTART = 'estimatedStart';\n\n  var _default = _component.default.extend(_versionCheck.default, {\n    classNames: ['driver-break-form-widget'],\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      this.updateMinimumTimeDuration();\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const route = (0, _unwrapProxy.unwrapProxy)(record.get('route'));\n        const estimatedStartMoment = (0, _moment.default)(record.get('requestTime'));\n        const estimatedEndMoment = (0, _moment.default)(record.get('projectedEndDate'));\n        const routePlannedStartTime = (0, _moment.default)(route.get('plannedStartTime'));\n        const routeActualEndTime = route.get('actualEndTimestamp') ? (0, _moment.default)(route.get('actualEndTimestamp')) : null;\n        const routeOrdinal = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute')).editBreakRouteDuration(record);\n\n        if (routeOrdinal === -1) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Cannot find a route position for the break start time.');\n        }\n\n        record.set('plannedRouteOrdinal', routeOrdinal);\n\n        if (Ember.isNone(record.get('breakType.id'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Must select a break type.');\n        }\n\n        if (record.get('breakType.id') === FIXED_BREAK_TYPE && Ember.isEmpty(record.get('place.location.lat'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Fixed break type must have an address.');\n        }\n\n        if (estimatedStartMoment.isSameOrAfter(estimatedEndMoment)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Break start time must be before Break end time.');\n        }\n\n        if (estimatedStartMoment.isBefore(routePlannedStartTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Break start time must be after the route\\'s planned start time.');\n        }\n\n        if (routeActualEndTime) {\n          if (estimatedEndMoment.isAfter(routeActualEndTime)) {\n            valid = false;\n            this.get('editModal.errors').pushObject('Break end time must be before the route\\'s actual end time.');\n          }\n        }\n\n        record.set('estimatedStart', estimatedStartMoment.toDate());\n        record.set('estimatedEnd', estimatedEndMoment.toDate());\n      });\n      return valid;\n    },\n\n    updateMinimumTimeDuration() {\n      const editableSections = this.get('editableSections');\n      const updatedTableSections = editableSections.map(tableSection => {\n        if (tableSection.title === TITLE_BREAK) {\n          tableSection.fields.map(field => {\n            if (field.id === ESTIMATEDSTART) {\n              const record = this.get('editableRecords')[0];\n              field.extra.minTimePath = (0, _moment.default)(record.get('route.plannedStartTime')).isSameOrBefore(record.get('route.actualStartTimestamp')) ? 'route.plannedStartTime' : 'route.actualStartTimestamp';\n            }\n\n            return field;\n          });\n        }\n\n        return tableSection;\n      });\n      this.set('editableSections', updatedTableSections);\n    },\n\n    rollback(model) {\n      const changedAttributeModel = model.changedAttributes();\n\n      if (changedAttributeModel) {\n        (0, _lodash.forEach)(changedAttributeModel, function (attributevalues, attributeName) {\n          model.set(attributeName, attributevalues[0]);\n        });\n      }\n    },\n\n    undoForEditBreak() {\n      const lastUndoState = this.get('editModal.undoHistory').popObject();\n      lastUndoState.forEach(_ref => {\n        let {\n          record,\n          properties\n        } = _ref;\n\n        if (properties.hasOwnProperty('country')) {\n          this.rollback((0, _unwrapProxy.unwrapProxy)(record.get('location')));\n          this.rollback((0, _unwrapProxy.unwrapProxy)(record.get('address')));\n        }\n\n        record.setProperties(properties);\n      });\n      this.get('geocode').deactivateGeocode();\n      this.set('isLastUndoStateCommitted', true);\n    },\n\n    callSetRecordValue(record, valuePath, value, options) {\n      this.get('service').setRecordValue(record, valuePath, value, options);\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const undoHistory = this.get('editModal.undoHistory');\n        if (Ember.isPresent(undoHistory)) while (undoHistory.length > 0) this.undoForEditBreak();\n      },\n\n      async onApplyClick() {\n        const records = this.get('editableRecords.firstObject');\n        const dispatchRoute = records.get('route.dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        const closeCallback = () => {\n          this.send('onCloseClick');\n        };\n\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n        if (this.validateRecords()) {\n          try {\n            await lockRouteAction();\n            const title = this.get('title');\n            this.get('service').applyWithCallback(title, unlockRouteAction);\n          } catch (err) {\n            await unlockRouteAction();\n            return;\n          }\n        }\n      },\n\n      onCloseClick() {\n        const records = this.get('editableRecords') || [];\n        records.forEach(record => {\n          const driverBreak = record; // restore the original break times\n\n          this.rollback(driverBreak);\n        });\n        const undoHistory = this.get('editModal.undoHistory');\n        if (Ember.isPresent(undoHistory)) while (undoHistory.length > 0) this.undoForEditBreak();\n        this.get('service').close();\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        if (valuePath === 'notes') {\n          // fast changes to a field messes up the lastUndoHistory\n          Ember.run.debounce(this, 'callSetRecordValue', record, valuePath, value, options, 300);\n        } else {\n          this.get('service').setRecordValue(record, valuePath, value, options);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/driver-breaks-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }]\n    }, {\n      title: 'Breaks',\n      fields: [{\n        id: 'type',\n        type: 'enum',\n        label: 'Type',\n        valuePath: 'breakType',\n        editable: true,\n        extra: {\n          optionModelName: 'break-type',\n          optionSearchPath: 'name',\n          optionSelectedPath: '',\n          optionIncludes: '',\n          optionSearchEnabled: false\n        }\n      }, {\n        id: 'location',\n        type: 'addresses',\n        label: 'Address',\n        valuePath: 'place',\n        modelName: 'place',\n        addressType: 'originlocations',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'address.alias',\n          notesPath: 'address.notes',\n          displayPath: 'address.address',\n          premisePath: 'address.premise',\n          streetNumberPath: 'address.streetNumber',\n          streetNamePath: 'address.streetName',\n          localityPath: 'address.locality',\n          regionPath: 'address.region',\n          subRegionPath: 'address.county',\n          postalCodePath: 'address.postalCode',\n          countryPath: 'address.country',\n          freeformAddressPath: 'address.freeformAddress',\n          tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.streetAddress',\n          locationsPath: 'address.locations.content.firstObject.latlng',\n          lat: 'address.locations.content.firstObject.location.lat',\n          lng: 'address.locations.content.firstObject.location.lng',\n          geoNode: 'address.location.geoNode'\n        }\n      }, {\n        id: 'estimatedStart',\n        type: 'datetimeflatpickr',\n        label: 'Start Time',\n        editable: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        valuePath: 'requestTime',\n        extra: {\n          minTimePath: 'route.plannedStartTime',\n          maxTimePath: 'route.actualEndTimestamp'\n        }\n      }, {\n        id: 'estimatedDuration',\n        type: 'number',\n        label: 'Duration (mins)',\n        valuePath: 'plannedDuration',\n        extra: {\n          min: 0\n        }\n      }, {\n        id: 'estimatedEnd',\n        type: 'date',\n        label: 'End Time',\n        editable: true,\n        readonlyCell: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        valuePath: 'projectedEndDate'\n      }, {\n        id: 'notes',\n        type: 'text',\n        label: 'Description',\n        valuePath: 'notes'\n      }]\n    }, {\n      title: 'Information',\n      fields: [{\n        id: 'routeName',\n        type: 'text',\n        label: 'Route Name',\n        valuePath: 'route.name',\n        readonlyCell: true,\n        editable: true\n      }, {\n        id: 'vehicleId',\n        type: 'number',\n        label: 'Vehicle ID',\n        valuePath: 'route.dispatchRoute.assignedVehicle.name',\n        readonlyCell: true,\n        editable: true\n      }, {\n        id: 'driverLastName',\n        type: 'text',\n        label: 'Driver Last Name',\n        valuePath: 'route.dispatchRoute.assignedDriver.lastName',\n        readonlyCell: true,\n        editable: true\n      }, {\n        id: 'driverFirstName',\n        type: 'text',\n        label: 'Driver First Name',\n        valuePath: 'route.dispatchRoute.assignedDriver.firstName',\n        readonlyCell: true,\n        editable: true\n      }, {\n        id: 'routePlannedStartTime',\n        type: 'date',\n        label: 'Route Planned Start Time',\n        editable: true,\n        readonlyCell: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        valuePath: 'route.computedPlannedStartTime'\n      }, {\n        id: 'routeActualStartTime',\n        type: 'date',\n        label: 'Route Actual Start Time',\n        editable: true,\n        readonlyCell: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        valuePath: 'route.actualStartTimestamp'\n      }, {\n        id: 'routePlannedEndTime',\n        type: 'date',\n        label: 'Route Planned End Time',\n        editable: true,\n        readonlyCell: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        valuePath: 'route.computedPlannedEndTime'\n      }, {\n        id: 'routeActualEndTime',\n        type: 'date',\n        label: 'Route Actual End Time',\n        editable: true,\n        readonlyCell: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        valuePath: 'route.actualEndTimestamp'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/drivers-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/drivers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-driver',\n    defaultSortId: 'driverId',\n    defaultSortAsc: false,\n    title: 'Drivers',\n    columns: [{\n      id: 'driverId',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'driverId',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 30\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'firstName',\n      index: 2,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'availability',\n      index: 4,\n      type: 'enum-date',\n      label: 'Availability',\n      valuePath: 'formattedAvailabilities',\n      cellDesc: 'Availabilities',\n      editable: false,\n      unAvailable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'active',\n      index: 5,\n      type: 'boolean',\n      label: 'Active',\n      valuePath: 'active',\n      editable: true,\n      hidden: true,\n      unAvailable: true,\n      defaultWidth: 50\n    }, {\n      id: 'preferredVehicle',\n      index: 6,\n      type: 'text',\n      label: 'Preferred Vehicle ID',\n      valuePath: 'preferredVehicleName',\n      editable: false,\n      unAvailable: true,\n      hidden: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/drivers-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/drivers-widget/config\", \"adept-iq/pods/components/iq-widgets/drivers-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/dashboard\"], function (_exports, _component, _config, _avlmConfig, _environment, _mappedPermIds, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['drivers-widget', 'data-test-drivers-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    // need to sub-class this in specific widget\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const role = this.get('workspace.dashboardModel.role');\n\n      switch (role) {\n        case _dashboard.SCHEDULE_ROLENAME:\n          this._initScheduleSingleActions();\n\n          break;\n\n        case _dashboard.DISPATCH_ROLENAME:\n        default:\n          this._initDispatchSingleActions();\n\n          break;\n      }\n    },\n\n    _initDispatchSingleActions() {\n      // disable new/edit driver for 4.2. This will be added back\n      // later in 5.0\n      this.set('tableActions', [{\n        id: 'newDriver',\n        name: 'New Driver',\n        permId: _mappedPermIds.default.newDriver,\n        action: function () {\n          const modelName = this.get('config.modelName');\n          const driverPhoneNumber = this.get('store').createRecord('driver-phone-number');\n          const provider = this.get('store').createRecord('provider');\n          const newModel = this.get('store').createRecord(modelName, {\n            phoneNumbers: [driverPhoneNumber],\n            provider: provider\n          });\n          this.get('records').pushObject(newModel);\n          this.set('editModal.editableRecords', []);\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [newModel], this.get('saveRecordFunction').bind(this));\n        }.bind(this)\n      }, {\n        id: 'print',\n        permIds: [_mappedPermIds.default.downloadDrivers],\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      }]);\n      const singleActions = [{\n        id: 'sendMessage',\n        name: 'Send Message',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        action: model => {\n          this.sendMessageToDrivers([model], 'singleMessage');\n        }\n      }];\n      this.set('singleActions', singleActions); // disable new vehicle for 4.2. This will be added back\n      // later in 5.0\n\n      this.set('bulkActions', [// {\n      //   id: 'bulkEdit',\n      //   name: 'Bulk Edit',\n      //   action: (models) => {\n      //     const editComponent = this.get('editComponent');\n      //     this.get('editModal').open(editComponent, models);\n      //   }\n      // },\n      {\n        id: 'bulkMessage',\n        name: 'Bulk Message',\n        permId: _mappedPermIds.default.editDriver,\n        action: drivers => {\n          this.sendMessageToDrivers(drivers, 'bulkMessage');\n        }\n      }]);\n    },\n\n    _initScheduleSingleActions() {\n      // Clearing Add and edit driver functionality in R5\n      // As it will manage through Driver and Vehicle Management\n      this.set('bulkActions', [// {\n      //   id: 'bulkEdit',\n      //   name: 'Bulk Edit',\n      //   action: (models) => {\n      //     const editComponent = this.get('editComponent');\n      //     this.get('editModal').open(editComponent, models);\n      //   }\n      // },\n      {\n        id: 'bulkMessage',\n        name: 'Bulk Message',\n        permId: _mappedPermIds.default.editDriver,\n        action: drivers => {\n          this.sendMessageToDrivers(drivers, 'bulkMessage');\n        }\n      }]);\n    },\n\n    async sendMessageToDrivers(drivers, messageType) {\n      const driverList = drivers ? drivers : [];\n      const draftMessages = driverList.map(driver => {\n        const trueDriver = driver;\n        const driverId = driver.get('id');\n        const badgeNumber = driver.get('driverId');\n\n        if (messageType === 'singleMessage' && !badgeNumber) {\n          this.get('notifications').warning('Can not send message due to missing driver id');\n          return null;\n        }\n\n        if (messageType === 'bulkMessage' && !badgeNumber) {\n          return null;\n        }\n\n        trueDriver.set('driver', {\n          id: driverId,\n          endPointType: 'recipient',\n          fullName: driver.get('fullName'),\n          badgeNumber: badgeNumber\n        });\n        const vehicleId = trueDriver.get('latestVehicle.id') ? trueDriver.get('latestVehicle.id') : trueDriver.get('latestRouteVehicleDriver.vehicle.id');\n        const vehicleName = trueDriver.get('latestVehicle.name') ? trueDriver.get('latestVehicle.name') : trueDriver.get('latestRouteVehicleDriver.vehicle.name');\n        trueDriver.set('driverVehicle', {\n          id: vehicleId,\n          name: vehicleName\n        });\n        const routeId = trueDriver.get('latestRouteVehicleDriver.dispatchRoute.route.id');\n        const routeName = trueDriver.get('latestRouteVehicleDriver.dispatchRoute.route.name');\n        trueDriver.set('route', {\n          id: routeId,\n          name: routeName\n        });\n\n        if (_environment.default.APP.avlmLite) {\n          trueDriver.set('avlmDriver', {\n            id: driverId,\n            endPointType: 'recipient',\n            fullName: driver.get('fullName'),\n            badgeNumber: badgeNumber\n          });\n          trueDriver.set('avlmVehicle', {\n            id: vehicleId\n          });\n        }\n\n        return trueDriver;\n      }).filter(driver => !Ember.isNone(driver));\n\n      if (messageType === 'singleMessage' && draftMessages.firstObject) {\n        this.get('workspace').pushState('addNewMessage', {\n          draftMessages\n        });\n      } else if (messageType === 'bulkMessage') {\n        if (draftMessages.lenght < drivers.length) {\n          this.get('notifications').warning('Message could not be sent to some drivers which do not have driver id.');\n        }\n\n        if (!Ember.isEmpty(draftMessages)) {\n          this.get('workspace').pushState('addNewMessage', {\n            draftMessages\n          });\n        }\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/drivers-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/drivers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'driver',\n    defaultSortId: 'driverId',\n    defaultSortAsc: false,\n    title: 'Drivers',\n    // ember-react-widget properties\n    widgetName: 'driverWidget',\n    initialLimit: 5000,\n    paginationLimit: 20,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    selectedRowLimit: 20,\n    columns: [{\n      id: 'driverId',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'driverId',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 125\n    }, {\n      id: 'firstName',\n      index: 2,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 125\n    }, {\n      id: 'availability',\n      index: 4,\n      type: 'enum-date',\n      label: 'Availability',\n      valuePath: 'availability',\n      cellDesc: 'Availabilities',\n      editable: false,\n      hidden: true,\n      cellItem: 'AvailabilityCell'\n    }, {\n      id: 'active',\n      index: 5,\n      type: 'boolean',\n      label: 'Active',\n      valuePath: 'active',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'exist',\n          field: 'routeStartTime',\n          valuePath: 'routeId'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'exist',\n          field: 'routeStartTime',\n          valuePath: 'routeId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'driverPk'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'exist',\n          field: 'routeStartTime',\n          valuePath: 'routeId'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/edit-trip-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/edit-trip-form-widget/config\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/location-validation\"], function (_exports, _component, _config, _moment, _unwrapProxy, _locationValidation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SCHEDULING_MODE = 'Scheduling Mode';\n  const LOCATION_PATH = 'latlng';\n  const PICK = 'pick';\n\n  var _default = _component.default.extend({\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    editableSections: _config.default.editableSections,\n    store: Ember.inject.service(),\n    maxXYDelta: null,\n    previousPickPlace: null,\n    previousDropPlace: null,\n    classNames: ['new-trip-form-widget'],\n\n    init() {\n      this._super(...arguments);\n\n      const records = this.get('editableRecords') || [];\n      const store = this.get('store');\n      records.forEach(record => {\n        const pickPlaceId = record.get('pick.segmentStop.place.id');\n        const dropPlaceId = record.get('drop.segmentStop.place.id');\n\n        if (!record.get('pick.segmentStop.place.address.id') && pickPlaceId && dropPlaceId) {\n          Promise.all([store.findRecord('place', pickPlaceId), store.findRecord('place', dropPlaceId)]).then(result => {\n            record.get('pick.segmentStop').set('place', result[0]);\n            record.get('drop.segmentStop').set('place', result[1]);\n          });\n        } // if trip has a not a status of schedule we need to disable the scheduling mode option\n\n\n        if (!record.get('isScheduled')) {\n          const filteredSections = this.get('filteredSections');\n          const modeSectionData = filteredSections.find(section => section.title === SCHEDULING_MODE);\n          modeSectionData.fields.forEach(field => {\n            field.editable = false;\n          });\n        }\n\n        this.set('previousPickPlace', record.get('pick.segmentStop.place'));\n        this.set('previousDropPlace', record.get('drop.segmentStop.place'));\n      });\n      const tripMaxXYDelta = this.get('store').peekRecord('cs-config-item', 'config-Scheduling_parms/MODTRIP_MAX_XY_DELTA');\n      const maxXYDelta = tripMaxXYDelta ? parseFloat(tripMaxXYDelta.get('value')) : 0;\n      this.set('maxXYDelta', maxXYDelta);\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const requestedTime = (0, _moment.default)(record.get('requestedTime'));\n\n        if (Ember.isNone(requestedTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Date should be there');\n        }\n\n        if (Ember.isEmpty(record.get('pick.segmentStop.place.location.latlng'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Pickup address should be there');\n        }\n\n        if (Ember.isEmpty(record.get('drop.segmentStop.place.location.latlng'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Drop address should be there');\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onCloseClick() {\n        const records = this.get('editableRecords') || [];\n        records.forEach(record => {\n          const rider = (0, _unwrapProxy.unwrapProxy)(record.get('rider'));\n          const segment = (0, _unwrapProxy.unwrapProxy)(record.get('segment'));\n          const leg = (0, _unwrapProxy.unwrapProxy)(record.get('segment.leg'));\n          const pickAddress = (0, _unwrapProxy.unwrapProxy)(record.get('pick.segmentStop.place.address'));\n          const dropAddress = (0, _unwrapProxy.unwrapProxy)(record.get('drop.segmentStop.place.address'));\n          const pickLocation = (0, _unwrapProxy.unwrapProxy)(record.get('pick.segmentStop.place.location'));\n          const dropLocation = (0, _unwrapProxy.unwrapProxy)(record.get('drop.segmentStop.place.location'));\n          record.rollbackAttributes();\n          segment.rollbackAttributes();\n          rider.rollbackAttributes();\n          leg.rollbackAttributes();\n\n          if (pickAddress) {\n            pickAddress.rollbackAttributes();\n            pickLocation.rollbackAttributes();\n          }\n\n          if (dropAddress) {\n            dropAddress.rollbackAttributes();\n            dropLocation.rollbackAttributes();\n          }\n        });\n        this.get('service').close();\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          const title = this.get('title');\n          Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n          this.get('geocode').activateGeocode(false);\n          this.set('addressRecord', null);\n          this.get('service').apply(title);\n        }\n      },\n\n      // overriding the parent method and validate addresses\n      onCellValueChange(record, valuePath, value, options) {\n        this._super(...arguments);\n\n        if (options && options.valuePath === LOCATION_PATH && options.addressTypeOption) {\n          const pickPlace = this.get('previousPickPlace');\n          const dropPlace = this.get('previousDropPlace');\n          const pickPlacePosition = pickPlace.get('address.position');\n          const dropPlacePosition = dropPlace.get('address.position');\n          const maxXYDelta = this.get('maxXYDelta');\n          const previousLocation = options.addressTypeOption === PICK ? pickPlacePosition : dropPlacePosition;\n          const distance = (0, _locationValidation.getDistanceBetweenFromLatLon)(previousLocation.lat, previousLocation.lng, value.lat, value.lon);\n\n          if (distance > maxXYDelta) {\n            this.get('notifications').warning('New location is too far away from original location');\n          }\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/edit-trip-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'tripId',\n        editable: false\n      }, {\n        id: 'fullName',\n        type: 'text',\n        label: 'Passenger First Name',\n        valuePath: 'segment.leg.rider.fullName',\n        editable: false\n      }, {\n        id: 'riderId',\n        type: 'text',\n        label: 'Passenger ID',\n        valuePath: 'segment.leg.rider.riderId',\n        editable: false\n      }]\n    }, {\n      title: 'Trip Details',\n      fields: [{\n        id: 'requestedTime',\n        type: 'datetimeflatpickr',\n        label: 'Request Time',\n        readonlyCell: true,\n        valuePath: 'segment.leg.requestTime',\n        editable: true,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        defaultWidth: 50\n      }, {\n        id: 'anchor',\n        type: 'enum',\n        label: 'Anchor',\n        valuePath: 'segment.anchor',\n        cellDesc: 'anchor',\n        editable: true,\n        hidden: false,\n        extra: {\n          options: ['pick', 'drop'],\n          allowMultiple: false\n        }\n      }]\n    }, {\n      title: 'Pickup Address',\n      fields: [{\n        id: 'originaddresses',\n        type: 'addresses',\n        label: 'Pickup Address',\n        valuePath: 'pick.segmentStop.place',\n        modelName: 'place',\n        markerType: 'pick',\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetName',\n          localityPath: 'address.content.city',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.county',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          freeformAddressPath: 'address.content.freeformAddress',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          addressesPath: 'address.addresses.content.firstObject.latlng'\n        }\n      }]\n    }, {\n      title: 'Dropoff Address',\n      fields: [{\n        id: 'destinationaddresses',\n        type: 'addresses',\n        label: 'Drop-off Address',\n        valuePath: 'drop.segmentStop.place',\n        modelName: 'place',\n        markerType: 'drop',\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetName',\n          localityPath: 'address.content.city',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.county',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          addressesPath: 'address.addresses.content.firstObject.latlng'\n        }\n      }]\n    }, {\n      title: 'Travel Needs',\n      fields: [{\n        id: 'travelNeeds',\n        type: 'bs-travel-needs',\n        label: '',\n        valuePath: 'segment.leg.legTravelNeeds',\n        modelName: 'leg-travel-need',\n        isMultiType: true,\n        extra: {\n          travelNeedTypeModelName: 'travel-need-type',\n          passengerTypeModelName: 'passenger-type',\n          countPath: 'count',\n          travelNeedTypePath: 'travelNeedType',\n          passengerTypePath: 'passengerType'\n        }\n      }]\n    }, {\n      title: 'Notes',\n      fields: [{\n        id: 'passengerNotes',\n        type: 'text',\n        label: 'Passenger Notes',\n        valuePath: 'segment.leg.rider.notes',\n        editable: true\n      }, {\n        id: 'driverNotes',\n        type: 'text',\n        label: 'Driver Notes',\n        valuePath: 'segment.leg.notes',\n        editable: true\n      }]\n    }, {\n      title: 'Fare',\n      fields: [{\n        id: 'type',\n        type: 'enum',\n        label: 'Type',\n        valuePath: 'segment.fareType',\n        cellDesc: 'fareType',\n        editable: true,\n        hidden: false,\n        extra: {\n          optionModelName: 'fare-type',\n          optionSearchPath: 'name'\n        }\n      }, {\n        id: 'fare',\n        type: 'number',\n        label: 'Fare',\n        valuePath: 'segment.fare',\n        editable: true,\n        extra: {\n          isFloat: true\n        }\n      }]\n    }, {\n      title: 'Scheduling Mode',\n      fields: [{\n        id: 'schedulingMode',\n        type: 'enum',\n        label: 'Scheduling Mode',\n        valuePath: 'schedulingMode',\n        editable: true,\n        hidden: false,\n        extra: {\n          options: ['automatic', 'manual'],\n          allowMultiple: false\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/eligibility-restriction-warning/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    eligibilityConditions: null,\n    showOnlyOk: true,\n    overrideEligibilityConditionsGranted: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('eligibilityConditions', []);\n      this.setEligibilityConditionsForEachRider();\n    },\n\n    // this is required because the conditions need to be updated so cant be a computed property in rider external model\n    setEligibilityConditionsForEachRider() {\n      const ridersWithConditionalEligibility = this.get('ridersWithConditionalEligibility');\n      ridersWithConditionalEligibility.forEach(r => {\n        const conditions = this.getEligibilityConditionsForRider(r);\n        r.set('eligibilityConditions', conditions);\n      });\n    },\n\n    getEligibilityConditionsForRider(rider) {\n      const riderIdConditionsMap = this.get('riderIdConditionsMap');\n      const riderId = rider.get('id');\n      return riderIdConditionsMap[riderId];\n    },\n\n    actions: {\n      onEligibleWarningClose() {\n        this.get('onClose')();\n      },\n\n      onEligibleWarningOK() {\n        this.get('onEligibleWarningOK')();\n      },\n\n      onEligibilityWarningYes() {\n        if (this.get('onEligibilityWarningYes')) {\n          this.get('onEligibilityWarningYes')();\n        }\n      },\n\n      onEligibilityWarningNo() {\n        if (this.get('onEligibilityWarningNo')) {\n          this.get('onEligibilityWarningNo')();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/eligibility-restriction-warning/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"j4DBz2xA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderToBook\\\",\\\"eligibilityCondition\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"ridersWithConditionalEligibility\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mb-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-9 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"my-3\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[22,1,[\\\"firstName\\\"]],false],[0,\\\" \\\"],[1,[22,1,[\\\"lastName\\\"]],false],[0,\\\" has eligibility\\\\n            restrictions\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-10 offset-md-1 mt-3\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"table table-bordered table-striped wigt-tbl\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"align\\\",\\\"center\\\"],[11,\\\"colspan\\\",\\\"3\\\"],[9],[0,\\\"Eligibility Conditions\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tbody\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"Request Date/Time\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,1,[\\\"eligibilityConditions\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[22,2,[\\\"requestTime\\\"]],false],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[22,2,[\\\"from\\\"]],false],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[22,2,[\\\"to\\\"]],false],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[22,2,[\\\"conditionName\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[4,\\\"if\\\",[[23,[\\\"showOnlyOk\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls my-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityWarningYes\\\"],null]],[9],[0,\\\"\\\\n        OK\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls my-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"overrideEligibilityConditionsGranted\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"mr-2\\\"],[9],[0,\\\"continue?\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri mr-2\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityWarningYes\\\"],null]],[9],[0,\\\"\\\\n        Yes\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri mr-2\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityWarningNo\\\"],null]],[9],[0,\\\"\\\\n        No\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityWarningNo\\\"],null]],[9],[0,\\\"\\\\n        OK\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/eligibility-restriction-warning/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/component\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/react-component\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\"], function (_exports, _react, _reactComponent, _playback, _session) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reactComponent.default.extend({\n    classNames: ['dashboard-widget-new dashboard-widget playback-widget map-widget'],\n    session: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    widget: null,\n    width: Ember.computed.alias('widget.width'),\n    height: Ember.computed.alias('widget.height'),\n    state: Ember.computed.alias('widget.state'),\n    providersList: Ember.computed.alias('workspaceContext._selectedProviders'),\n    mapService: Ember.inject.service('map'),\n    onProviderChange: Ember.observer('providersList', function () {\n      this.renderPlayback();\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    renderPlayback() {\n      this.reactRender(_react.default.createElement(_session.SessionContext.Provider, {\n        value: {\n          token: this.get('session.data.authenticated.token'),\n          providers: this.get('providersList'),\n          notifications: this.get('notifications'),\n          widgetState: this.get('state'),\n          setWidgetState: this.get('setWidgetState').bind(this),\n          bemapMainCtx: this.get('mapService.bemapMainCtx'),\n          bemapSite: this.get('mapService.site'),\n          bemapCenter: this.get('mapService.center'),\n          bemapBoundingBox: this.get('mapService.boundingBox'),\n          createLeafletMap: (mapElementId, options) => this.get('mapService').createLeafletMap(mapElementId, options)\n        }\n      }, _react.default.createElement(_playback.default, null)));\n    },\n\n    setWidgetState(widgetState) {\n      this.set('state', widgetState);\n    },\n\n    didInsertElement() {\n      this.renderPlayback();\n    },\n\n    didRender() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/layer-options\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/legend-options\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/label-options\"], function (_exports, _react, _panel, _sideDrawer, _layerOptions, _legendOptions, _labelOptions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const MapFilter = () => {\n    const {\n      mapFilterEnabled,\n      setMapFilterEnabled\n    } = (0, _panel.usePanel)();\n    const visibilityControlEnabled = false;\n    return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"div\", null, _react.default.createElement(\"button\", {\n      className: \"playback-widget-button border-0\",\n      onClick: () => setMapFilterEnabled(true),\n      \"data-test-map-filter-button\": true\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-filter \",\n      \"aria-hidden\": \"true\"\n    }))), mapFilterEnabled && _react.default.createElement(_sideDrawer.default, {\n      title: 'Map Layers',\n      setFilterEnabled: setMapFilterEnabled,\n      className: 'map-filter'\n    }, _react.default.createElement(\"div\", {\n      \"data-test-map-filter\": \"\"\n    }, _react.default.createElement(\"div\", {\n      className: \"map-filter-subheader\"\n    }, _react.default.createElement(\"div\", {\n      className: \"layer-subheader-section\"\n    }, _react.default.createElement(_layerOptions.default, null)), _react.default.createElement(\"div\", {\n      className: \"visibility-subheader-section\"\n    }, visibilityControlEnabled && _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"div\", {\n      className: \"side-drawer-checkbox\"\n    }, _react.default.createElement(\"input\", {\n      type: \"checkbox\"\n    }), _react.default.createElement(\"label\", null, \"Show\")), _react.default.createElement(\"div\", {\n      className: \"map-layer-transparency\"\n    }, _react.default.createElement(\"label\", null, \"Transparency:\"))))), _react.default.createElement(\"div\", {\n      className: \"vehicle-events\"\n    }, _react.default.createElement(_legendOptions.default, null), _react.default.createElement(_labelOptions.default, null)))));\n  };\n\n  var _default = MapFilter;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/label-options\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const LabelOptions = () => {\n    const {\n      eventTableColumns,\n      toggleEventTableLabels,\n      toggleAllEventTableLabels,\n      labelDisplayMode,\n      setLabelDisplayMode\n    } = (0, _panel.usePanel)();\n\n    const [isEyeOpened, setIsEyeOpened] = _react.default.useState(true);\n\n    const toggleEye = () => {\n      toggleAllEventTableLabels(!isEyeOpened);\n      setIsEyeOpened(!isEyeOpened);\n    };\n\n    return _react.default.createElement(\"div\", {\n      className: \"filter-settings ember-view\"\n    }, _react.default.createElement(\"table\", {\n      className: \"filter-settings-table map-filter-settings\"\n    }, _react.default.createElement(\"thead\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"th\", {\n      className: \"header-title\",\n      colSpan: \"3\"\n    }, _react.default.createElement(\"h4\", null, \"Labels \", _react.default.createElement(\"span\", {\n      className: \"visibility-column\",\n      onClick: () => toggleEye()\n    }, isEyeOpened ? _react.default.createElement(\"i\", {\n      className: \"fa fa-eye\",\n      \"aria-hidden\": \"true\"\n    }) : _react.default.createElement(\"i\", {\n      className: \"fa fa-eye-slash\",\n      \"aria-hidden\": \"true\"\n    })))))), _react.default.createElement(\"thead\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"th\", {\n      className: \"reorder-column\"\n    }), _react.default.createElement(\"th\", {\n      className: \"visibility-column\"\n    }))), _react.default.createElement(\"thead\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"th\", {\n      colSpan: \"3\"\n    }, _react.default.createElement(\"div\", {\n      style: {\n        display: 'flex',\n        alignItems: 'center'\n      }\n    }, _react.default.createElement(\"label\", {\n      style: {\n        height: '24px',\n        margin: '0 10px 0 0'\n      }\n    }, \"Display \\xA0\"), _react.default.createElement(\"select\", {\n      id: \"isdisplay\",\n      className: \"filter_dropdown\",\n      onChange: e => setLabelDisplayMode(e.target.value),\n      value: labelDisplayMode\n    }, _react.default.createElement(\"option\", {\n      value: _panel.labelDisplayModes.onLeftClick\n    }, \"On Left Click\"), _react.default.createElement(\"option\", {\n      value: _panel.labelDisplayModes.always\n    }, \"Always\")))))), _react.default.createElement(\"tbody\", {\n      className: \"ember-view\"\n    }, eventTableColumns && eventTableColumns.map(column => {\n      return _react.default.createElement(\"tr\", {\n        key: `label-${column.id}`,\n        className: \"sortable-item ember-view\"\n      }, _react.default.createElement(\"td\", {\n        className: \"reorder-column handle\"\n      }, _react.default.createElement(\"div\", {\n        role: \"button\",\n        \"data-sortable-handle\": \"\",\n        className: \"ember-view\"\n      }, _react.default.createElement(\"img\", {\n        src: \"/handles.png\",\n        className: \"reorder-handles\"\n      }))), _react.default.createElement(\"td\", {\n        className: \"visibility-column\"\n      }, _react.default.createElement(\"input\", {\n        id: column.id,\n        className: \"ember-checkbox ember-view\",\n        type: \"checkbox\",\n        checked: column.isLabeledInMap,\n        onChange: e => toggleEventTableLabels(column.id, e.target.checked)\n      })), _react.default.createElement(\"td\", {\n        className: \"label-column\"\n      }, column.label));\n    }))));\n  };\n\n  var _default = LabelOptions;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/layer-options\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const LayerOptions = () => {\n    // TODO: handel multi layers\n    return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"label\", null, \"Layer \\xA0 \"), _react.default.createElement(\"select\", {\n      className: \"filter_dropdown\"\n    }, _react.default.createElement(\"option\", {\n      value: \"event\"\n    }, \"Vehicle Event\")));\n  };\n\n  var _default = LayerOptions;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter/legend-options\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const LegendOptions = () => {\n    const {\n      mapEventFilters,\n      toggleMapEventFilter\n    } = (0, _panel.usePanel)();\n    return _react.default.createElement(\"div\", {\n      className: \"map-legend-filter ember-view\"\n    }, _react.default.createElement(\"table\", {\n      id: \"map-legend-table\"\n    }, _react.default.createElement(\"thead\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"th\", null, _react.default.createElement(\"h4\", null, \"Legend\")))), _react.default.createElement(\"tbody\", null, mapEventFilters.filter(filter => filter.canFilter).map(filter => {\n      return _react.default.createElement(\"tr\", {\n        key: `legend-${filter.id}`\n      }, _react.default.createElement(\"td\", {\n        className: \"legend-checkbox\"\n      }, _react.default.createElement(\"input\", {\n        id: \"ember2049\",\n        className: \"data-test-type-visibility-checkbox ember-checkbox ember-view\",\n        type: \"checkbox\",\n        checked: filter.isChecked,\n        onChange: e => toggleMapEventFilter(filter.id, e.target.checked)\n      })), _react.default.createElement(\"td\", null, _react.default.createElement(\"div\", {\n        className: \"map-legend-filter-icon\"\n      }, filter.img)), _react.default.createElement(\"td\", null, _react.default.createElement(\"b\", null, filter.displayName)));\n    }))));\n  };\n\n  var _default = LegendOptions;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/circleMarker\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _map, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const CircleMarker = props => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      layer,\n      position,\n      style,\n      color,\n      popup,\n      renderer\n    } = props;\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n\n    const [marker, setMarker] = _react.default.useState();\n\n    _react.default.useEffect(() => {\n      if (!map || !layer) return;\n\n      const _marker = window.L.circleMarker(position, {\n        renderer,\n        radius: 3\n      });\n\n      _marker.setStyle({ ...style,\n        color\n      });\n\n      _marker.bindPopup(popup, {\n        closeButton: true\n      });\n\n      _marker.addTo(layer);\n\n      setMarker(_marker);\n      return () => layer.removeLayer(_marker);\n    }, [layer, eventData]);\n\n    _react.default.useEffect(() => {\n      if (!marker) return;\n      marker.setStyle({ ...style,\n        color\n      });\n      setMarker(marker);\n    }, [color]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = CircleMarker;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/config\", [\"exports\", \"adept-iq/config/icon-paths\"], function (_exports, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VehicleEventOptions = _exports.PlaybackIcons = void 0;\n  const stopIconSize = [23.0, 23.0];\n  const stopIconAnchor = stopIconSize.map(x => x / 2.0);\n  const PlaybackIcons = {\n    vehicle: {\n      iconUrl: _iconPaths.default.vehicles.vehicle,\n      iconSize: [23, 23],\n      iconAnchor: [11.5, 11.5]\n    },\n    pick: {\n      iconUrl: _iconPaths.default.stops.pickPlanned,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    pickWheelchair: {\n      iconUrl: _iconPaths.default.stops.pickPlannedWheelchair,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    pickPerformed: {\n      iconUrl: _iconPaths.default.stops.pickCompleted,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    drop: {\n      iconUrl: _iconPaths.default.stops.dropPlanned,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    dropWheelchair: {\n      iconUrl: _iconPaths.default.stops.dropPlannedWheelchair,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    dropPerformed: {\n      iconUrl: _iconPaths.default.stops.dropCompleted,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    garage: {\n      iconUrl: _iconPaths.default.stops.garagePlanned,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    garagePerformed: {\n      iconUrl: _iconPaths.default.stops.garageCompleted,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    break: {\n      iconUrl: _iconPaths.default.stops.break,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    noshow: {\n      iconUrl: _iconPaths.default.stops.noshow,\n      iconSize: stopIconSize,\n      iconAnchor: stopIconAnchor\n    },\n    pinPoint: {\n      iconUrl: _iconPaths.default.maps.pinPoint,\n      iconSize: [23, 23],\n      iconAnchor: [11.5, 11.5]\n    },\n    direction: {\n      iconUrl: _iconPaths.default.vehicleEvents.arrow,\n      iconSize: [10, 10],\n      iconAnchor: [5, 5]\n    }\n  };\n  _exports.PlaybackIcons = PlaybackIcons;\n  const VehicleEventOptions = [{\n    id: 1,\n    displayName: 'Pullin Garage',\n    actionType: 'pullIn',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/garage/garage-unperformed.svg\"\n    }),\n    iconCfg: PlaybackIcons.garage,\n    pIconCfg: PlaybackIcons.garagePerformed,\n    canFilter: true\n  }, {\n    id: 2,\n    displayName: 'Vehicle',\n    stopType: 'vehicle',\n    img: React.createElement(\"img\", {\n      src: \"/vehicles-icons/icon-vehicle.svg\"\n    }),\n    iconCfg: PlaybackIcons.vehicle\n  }, {\n    id: 3,\n    displayName: 'Pullout Garage',\n    actionType: 'pullOut',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/garage/garage-unperformed.svg\"\n    }),\n    iconCfg: PlaybackIcons.garage,\n    pIconCfg: PlaybackIcons.garagePerformed,\n    canFilter: true\n  }, {\n    id: 4,\n    displayName: 'Off Break',\n    actionType: 'offBreak',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/break.svg\"\n    }),\n    iconCfg: PlaybackIcons.break,\n    canFilter: true\n  }, {\n    id: 5,\n    displayName: 'On Break',\n    actionType: 'onBreak',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/break.svg\"\n    }),\n    iconCfg: PlaybackIcons.break,\n    canFilter: true\n  }, {\n    id: 6,\n    displayName: 'Pickup',\n    stopType: 'Pick',\n    actionType: 'depart',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/pick/pick-unperformed.svg\"\n    }),\n    iconCfg: PlaybackIcons.pick,\n    pIconCfg: PlaybackIcons.pickPerformed,\n    canFilter: true\n  }, {\n    id: 7,\n    displayName: 'Drop Off',\n    stopType: 'Drop',\n    actionType: 'depart',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/drop/drop-unperformed.svg\"\n    }),\n    iconCfg: PlaybackIcons.drop,\n    pIconCfg: PlaybackIcons.dropPerformed,\n    canFilter: true\n  }, {\n    id: 8,\n    displayName: 'Wheelchair Pickup',\n    value: 'wheelchair-pick',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/wc-pick/wc-pick-unperformed.svg\"\n    }),\n    iconCfg: PlaybackIcons.pickWheelchair\n  }, {\n    id: 9,\n    displayName: 'Wheelchair Dropoff',\n    value: 'wheelchair-drop',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/wc-drop/wc-drop-unperformed.svg\"\n    }),\n    iconCfg: PlaybackIcons.dropWheelchair\n  }, {\n    id: 10,\n    displayName: 'Performed Pickup',\n    value: '',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/pick/pick-performed.svg\"\n    }),\n    iconCfg: PlaybackIcons.pickPerformed\n  }, {\n    id: 11,\n    displayName: 'Performed Dropoff',\n    value: '',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/drop/drop-performed.svg\"\n    }),\n    iconCfg: PlaybackIcons.dropPerformed\n  }, {\n    id: 12,\n    displayName: 'No Show Stop',\n    actionType: 'noShow',\n    img: React.createElement(\"img\", {\n      src: \"/stops-icons/noshow.svg\"\n    }),\n    iconCfg: PlaybackIcons.noshow,\n    canFilter: true\n  }];\n  _exports.VehicleEventOptions = VehicleEventOptions;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/current-polyline\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _map, _panel, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const CurrentPolyline = () => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      sliderIndex\n    } = (0, _panel.usePanel)();\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n\n    _react.default.useEffect(() => {\n      if (!map || eventData.length <= sliderIndex) return;\n      const currentSection = eventData[sliderIndex].section;\n      const points = eventData.filter(event => event.displayLat !== 'N/A' && event.displayLng !== 'N/A' && event.section === currentSection).map(event => [Number(event.displayLat), Number(event.displayLng)]);\n      const polyline = window.L.polyline(points, {\n        color: 'blue',\n        opacity: 1,\n        weight: 3\n      });\n      polyline.addTo(map.native);\n      return () => map.native.removeLayer(polyline);\n    }, [eventData, sliderIndex]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = CurrentPolyline;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/gpsPingLayer\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/circleMarker\", \"lodash\"], function (_exports, _react, _map, _api, _panel, _circleMarker, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const GPSPingLayer = () => {\n    const circleMarkerRenderer = window.L.canvas({\n      padding: 0.5\n    });\n\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const [layer, setLayer] = _react.default.useState();\n\n    const [points, setPoints] = _react.default.useState([]);\n\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n    const {\n      sliderIndex\n    } = (0, _panel.usePanel)();\n\n    _react.default.useEffect(() => {\n      if (!map) return;\n\n      const _layer = window.L.layerGroup();\n\n      setLayer(_layer);\n\n      _layer.addTo(map.native);\n\n      const _points = _lodash.default.chain(eventData).map((point, index) => {\n        return { ...point,\n          index\n        };\n      }).filter(event => event.displayLat && event.displayLng && event.eventtype === 'avl').reduce((dict, event) => {\n        dict[[event.displayLat, event.displayLng]] = event;\n        return dict;\n      }, {}).values().map(point => {\n        let popup = 'Gps Ping<br/>';\n        const timeLabel = point.timestamp ? new Date(point.timestamp).toLocaleTimeString() : ' ';\n        popup = popup.bold() + 'Time: ' + timeLabel + '<br/>';\n        popup = popup + 'Latitude: ' + Number(point.locLat).toFixed(6) + '<br/>';\n        popup = popup + 'Longitude: ' + Number(point.locLng).toFixed(6) + '<br/>';\n        const currentSection = eventData[sliderIndex].section;\n        const color = point.section === currentSection ? 'blue' : '#A9B2B5';\n        return { ...point,\n          popup,\n          color\n        };\n      }).value();\n\n      setPoints(_points);\n      return () => map.native.removeLayer(_layer);\n    }, [eventData]);\n\n    _react.default.useEffect(() => {\n      if (eventData.length <= sliderIndex) return;\n      const currentSection = eventData[sliderIndex].section;\n\n      const _points = points.map(point => {\n        let color = point.section === currentSection ? 'blue' : '#A9B2B5';\n\n        if (point.index <= sliderIndex) {\n          color = '#555E63';\n        }\n\n        return { ...point,\n          color\n        };\n      });\n\n      setPoints(_points);\n    }, [sliderIndex]);\n\n    return _react.default.createElement(_react.default.Fragment, null, // Circle marker could be more than 5000, so need to render in canvas and can only render once.\n    points.map(point => {\n      return _react.default.createElement(_circleMarker.default, {\n        key: `avl-${point._id}`,\n        layer: layer,\n        renderer: circleMarkerRenderer,\n        position: [point.locLat, point.locLng],\n        style: {\n          opacity: 0.5,\n          fillOpacity: 0.5\n        },\n        color: point.color,\n        popup: point.popup\n      });\n    }));\n  };\n\n  var _default = GPSPingLayer;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/pre-polyline\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/post-polyline\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/current-polyline\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/gpsPingLayer\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/movingMarker\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/stops-layer\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/pinCursor\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/regionWithRadius\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"adept-iq/config/api-urls\"], function (_exports, _react, _map2, _panel, _prePolyline, _postPolyline, _currentPolyline, _gpsPingLayer, _movingMarker, _stopsLayer, _pinCursor, _regionWithRadius, _session, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    iqMap\n  } = _apiUrls.API;\n  const {\n    bemap\n  } = window;\n  const MAX_ZOOM = 17;\n\n  const mapApiCall = (site, token) => {\n    try {\n      const apiUrl = `${iqMap.host}/site?filter=eq(name,'${site}')`;\n      const controller = new AbortController();\n      const signal = controller.signal;\n      const promise = new Promise(async (resolve, reject) => {\n        try {\n          const response = await fetch(apiUrl, {\n            headers: {\n              Authorization: `Bearer ${token}`\n            },\n            signal\n          });\n          const data = await response.json();\n          resolve(data);\n        } catch (e) {\n          reject(e);\n        }\n      });\n\n      promise.cancel = () => controller.abort();\n\n      return promise;\n    } catch (err) {\n      // Simulate null data.\n      return Promise.resolve({\n        data: []\n      });\n    }\n  };\n\n  const getMinCoord = boundingBox => {\n    let minCoord = boundingBox[0];\n    boundingBox.forEach(point => {\n      if (point[0] <= minCoord[0] && point[1] <= minCoord[1]) {\n        minCoord = point;\n      }\n    });\n    return minCoord;\n  };\n\n  const getMaxCoord = boundingBox => {\n    let maxCoord = boundingBox[0];\n    boundingBox.forEach(point => {\n      if (point[0] >= maxCoord[0] && point[1] >= maxCoord[1]) {\n        maxCoord = point;\n      }\n    });\n    return maxCoord;\n  };\n\n  const Map = () => {\n    const {\n      isPinCursor,\n      selectedRvd\n    } = (0, _panel.usePanel)();\n\n    const mapElement = _react.default.useRef();\n\n    const [mapLongitude, setMapLongitude] = _react.default.useState(40.730610);\n\n    const [mapLatitude, setMapLatitude] = _react.default.useState(-73.935242);\n\n    const [mapZoom, setMapZoom] = _react.default.useState(12);\n\n    const [bbox, setBbox] = _react.default.useState();\n\n    const [map, setMap] = _react.default.useState();\n\n    const [movingMarkerLatLng, setMovingMarkerLatLng] = _react.default.useState({});\n\n    const {\n      createLeafletMap,\n      token,\n      bemapSite\n    } = _react.default.useContext(_session.SessionContext);\n\n    const increaseZoom = () => {\n      if (mapZoom < MAX_ZOOM) {\n        setMapZoom(mapZoom + 1);\n      }\n    };\n\n    const decreaseZoom = () => {\n      if (mapZoom > 1) {\n        setMapZoom(mapZoom - 1);\n      }\n    };\n\n    const updateMap = () => {\n      map.native.setCenter([parseFloat(mapLongitude), parseFloat(mapLatitude)]);\n      map.native.setZoom(mapZoom);\n    };\n\n    _react.default.useEffect(() => {\n      const _map = createLeafletMap('playback-map');\n\n      const initMap = async () => {\n        const result = await mapApiCall(encodeURIComponent(`${bemapSite}`), token);\n        const dataAttributes = result.data[0].attributes; // TODO: see if we need to change to use box instead of zoom\n\n        const boundingBox = dataAttributes.boundingBox.coordinates[0];\n        const minCoord = getMinCoord(boundingBox);\n        const maxCoord = getMaxCoord(boundingBox);\n        const center = dataAttributes.center.coordinates[0][0];\n\n        const _bbox = new bemap.BoundingBox(minCoord[0], minCoord[1], maxCoord[0], maxCoord[1]);\n\n        setMapLongitude(center[0]);\n        setMapLatitude(center[1]);\n        setBbox(_bbox);\n        setMap(_map);\n      };\n\n      initMap();\n      return () => _map.remove();\n    }, []);\n\n    _react.default.useEffect(() => {\n      if (map && bbox) {\n        map.moveToBoundingBox(bbox);\n      }\n    }, [map, bbox]);\n\n    return _react.default.createElement(_map2.MapContext.Provider, {\n      value: {\n        map,\n        movingMarkerLatLng,\n        setMovingMarkerLatLng,\n        setMapLongitude,\n        setMapLatitude,\n        increaseZoom,\n        decreaseZoom,\n        updateMap\n      }\n    }, _react.default.createElement(\"div\", {\n      className: \"flex-body-right\"\n    }, _react.default.createElement(\"div\", {\n      ref: mapElement,\n      id: \"playback-map\",\n      className: \"tomtom-map playback\"\n    }), _react.default.createElement(_prePolyline.default, null), _react.default.createElement(_currentPolyline.default, null), _react.default.createElement(_postPolyline.default, null), _react.default.createElement(_gpsPingLayer.default, null), _react.default.createElement(_stopsLayer.default, null), _react.default.createElement(_movingMarker.default, null), !selectedRvd.vehicleId && _react.default.createElement(_regionWithRadius.default, null), isPinCursor && _react.default.createElement(_pinCursor.default, null)));\n  };\n\n  var _default = Map;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/marker\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/usePrevious\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"moment\", \"lodash\"], function (_exports, _react, _map, _panel, _usePrevious, _api, _session, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Marker = props => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const [stop, setStop] = _react.default.useState();\n\n    const {\n      labelDisplayMode,\n      sliderIndex,\n      setSelectedRvd,\n      setIsLoadingEvent,\n      startTime,\n      endTime\n    } = (0, _panel.usePanel)();\n    const {\n      layer,\n      position,\n      popup,\n      iconCfg,\n      pIconCfg,\n      index,\n      vehicleId\n    } = props;\n\n    const [performed, setPerformed] = _react.default.useState(sliderIndex > index);\n\n    const prevStates = (0, _usePrevious.default)({\n      performed\n    });\n\n    const {\n      token,\n      providers,\n      notifications\n    } = _react.default.useContext(_session.SessionContext);\n\n    const timezone = _moment.default.tz.guess();\n\n    const {\n      vehicleData,\n      doSearch,\n      setEventData\n    } = (0, _api.useAPI)();\n\n    _react.default.useEffect(() => {\n      if (!map || !layer) return;\n      const icon = {\n        icon: window.L.icon(performed && pIconCfg ? pIconCfg : iconCfg)\n      };\n      const marker = window.L.marker(position, icon);\n      marker.addTo(layer);\n\n      if (popup) {\n        if (labelDisplayMode === _panel.labelDisplayModes.always) {\n          marker.bindPopup(popup, {\n            closeButton: false,\n            autoClose: false,\n            closeOnClick: false\n          }).openPopup();\n        } else {\n          marker.bindPopup(popup, {\n            closeButton: true\n          });\n        }\n      }\n\n      if (!_lodash.default.isEmpty(vehicleId)) {\n        marker.vehicleId = vehicleId;\n        marker.on('click', function () {\n          vehicleData.some(vehicle => {\n            if (marker.vehicleId === vehicle._id) {\n              const {\n                vehicleName,\n                driverId,\n                badgenumber,\n                routeId,\n                routeName,\n                provider\n              } = vehicle;\n              const _vehicleId = vehicle.vehicleId;\n              const _selectedRvd = {\n                vehicleId: _vehicleId,\n                vehicleName,\n                driverId,\n                badgenumber,\n                routeId,\n                routeName,\n                provider\n              };\n\n              const callback = () => {\n                setIsLoadingEvent(false);\n              };\n\n              setEventData([]);\n              setSelectedRvd(_selectedRvd);\n              setIsLoadingEvent(true);\n              doSearch(startTime, endTime, timezone, token, providers, notifications, 'byVehicle', _selectedRvd, null, null, null, callback);\n              return true;\n            }\n\n            return false;\n          });\n        });\n      }\n\n      setStop(marker);\n      return () => layer.removeLayer(marker);\n    }, [layer, popup, labelDisplayMode]);\n\n    _react.default.useEffect(() => {\n      if (typeof prevStates === 'undefined' || typeof index === 'undefined') return;\n\n      const _performed = sliderIndex > index;\n\n      if (!prevStates.performed && _performed) {\n        const _iconCfg = pIconCfg || iconCfg;\n\n        const icon = window.L.icon(_iconCfg);\n        stop.setIcon(icon);\n      } else if (prevStates.performed && !_performed) {\n        const icon = window.L.icon(iconCfg);\n        stop.setIcon(icon);\n      }\n\n      setPerformed(_performed);\n    }, [sliderIndex]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = Marker;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/movingMarker\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/config/icon-paths\", \"moment\"], function (_exports, _react, _map, _api, _panel, _iconPaths, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_TIMESCALE = 10;\n  const MININUM_DURATION = 200;\n\n  const MovingMarker = () => {\n    const {\n      map,\n      setMovingMarkerLatLng\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n    const {\n      setMovingVehicle,\n      movingVehicle,\n      sliderIndex,\n      setSliderIndex,\n      setIsEnded,\n      setIsRunning,\n      setIsStarted,\n      setIsPaused\n    } = (0, _panel.usePanel)();\n\n    const markerLabelGenerator = event => {\n      let label = 'Vehicle<br/>';\n      label = label.bold() + 'Vehicle ID: ' + event.vehicleId + '<br/>';\n      label = label + 'Vehicle Speed: ' + event.vehicleSpeed + '<br/>';\n      label = label + 'Time:' + event.localTime + '<br/>';\n      return label;\n    };\n\n    let skippedPointCount = 0;\n    const points = eventData.reduce((pointArray, event) => {\n      if (event.displayLat !== 'N/A' && event.displayLng !== 'N/A') {\n        pointArray.push([Number(event.displayLat), Number(event.displayLng), event.timestamp]); // Fill same gps ping for points without lat/lng\n\n        for (let i = skippedPointCount + 1; i > 1; i--) {\n          const skippedPoint = pointArray.at(0 - i);\n\n          if (skippedPoint[0] === null && skippedPoint[1] === null) {\n            skippedPoint[0] = Number(event.displayLat);\n            skippedPoint[1] = Number(event.displayLng);\n          }\n        }\n\n        skippedPointCount = 0;\n      } else {\n        const lastPoint = pointArray.at(-1);\n        const lastLat = lastPoint ? lastPoint[0] : null;\n        const lastLng = lastPoint ? lastPoint[1] : null;\n        pointArray.push([lastLat, lastLng, event.timestamp]);\n        if (!lastLat && !lastLng) skippedPointCount++;\n      }\n\n      return pointArray;\n    }, []);\n\n    _react.default.useEffect(() => {\n      if (!map || eventData.length < 2) return;\n      if (points.filter(_ref => {\n        let [lat, lng] = _ref;\n        return lat && lng;\n      }).length < 2) return;\n      const vehicleIcon = window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicle,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      });\n      const [startLat, startLng, startTimestamp] = points[0];\n      const [nextLat, nextLng, nextTimestamp] = points[1];\n      let timeDiff = Math.max(((0, _moment.default)(nextTimestamp).valueOf() - (0, _moment.default)(startTimestamp).valueOf()) / DEFAULT_TIMESCALE, MININUM_DURATION);\n      const movingMarker = window.L.Marker.movingMarker([[startLat, startLng], [nextLat, nextLng]], [timeDiff], {\n        autostart: false,\n        loop: false,\n        icon: vehicleIcon,\n        rotationAngle: null,\n        rotationOrigin: '11.5px 11.5px'\n      });\n      let previousPointsTime = (0, _moment.default)(nextTimestamp).valueOf();\n\n      for (let i = 2; i < points.length; i++) {\n        const [lat, lng, timestamp] = points[i];\n        const currentPointsTime = (0, _moment.default)(timestamp).valueOf();\n        timeDiff = Math.max((currentPointsTime - previousPointsTime) / DEFAULT_TIMESCALE, MININUM_DURATION);\n        movingMarker.addLatLng([lat, lng], timeDiff);\n        previousPointsTime = currentPointsTime;\n      }\n\n      movingMarker.on('lineUpdate', lineUpdate => {\n        setSliderIndex(lineUpdate.lineIndex);\n        setMovingMarkerLatLng(movingMarker.getLatLng());\n      });\n      movingMarker.on('end', () => {\n        setIsStarted(movingMarker.isStarted());\n        setIsRunning(movingMarker.isRunning());\n        setIsEnded(movingMarker.isEnded());\n        setIsPaused(movingMarker.isPaused()); // set to the last event when ended\n\n        setSliderIndex(eventData.length - 1);\n      });\n      const popup = markerLabelGenerator(eventData[0]);\n      movingMarker.bindPopup(popup, {\n        closeButton: true\n      });\n      movingMarker.addTo(map.native);\n      setMovingVehicle(movingMarker);\n      return () => {\n        map.native.removeLayer(movingMarker);\n        setMovingVehicle(null);\n        setIsRunning(false);\n        setIsStarted(false);\n        setIsPaused(false);\n        setIsEnded(false);\n      };\n    }, [eventData]);\n\n    _react.default.useEffect(() => {\n      if (sliderIndex >= eventData.length) return;\n      const popup = markerLabelGenerator(eventData[sliderIndex]);\n\n      if (movingVehicle) {\n        movingVehicle.setPopupContent(popup);\n      }\n    }, [sliderIndex]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = MovingMarker;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/pinCursor\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"tomtom\", \"adept-iq/config/environment\", \"adept-iq/utils/map-provider\", \"adept-iq/utils/dds-map\"], function (_exports, _react, _panel, _map, _tomtom, _environment, _mapProvider, _ddsMap) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const PinCursor = () => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      setLocation,\n      setIsPinCursor\n    } = (0, _panel.usePanel)();\n\n    const reverseGeocode = async geocode => {\n      const latlngArray = [geocode.lat, geocode.lng];\n\n      if ((0, _mapProvider.isDdsMapProvider)()) {\n        const ddsResult = await (0, _ddsMap.reverseGeocode)(geocode.lat, geocode.lng);\n        const ddsAddress = ddsResult && ddsResult.address || {};\n        return {\n          address: ddsAddress.freeformAddress || 'Unknown',\n          streetNumber: ddsAddress.streetNumber || '1',\n          streetAddress: ddsAddress.streetName || 'Unknown',\n          region: ddsAddress.state || 'Unknown',\n          locality: ddsAddress.city || 'Unknown',\n          subLocality: ddsAddress.city || 'Unknown',\n          postalCode: ddsAddress.postalCode || 'Unknown',\n          country: ddsAddress.country || 'US',\n          position: {\n            lat: latlngArray[0],\n            lon: latlngArray[1]\n          },\n          lat: latlngArray[0],\n          lng: latlngArray[1]\n        };\n      }\n\n      const result = await _tomtom.default.reverseGeocode().key(_environment.default.tomtom.search.searchKey).position(geocode).go();\n      return {\n        address: result.address.freeformAddress || 'Unknown',\n        streetNumber: result.address.streetNumber || '1',\n        streetAddress: result.address.streetName || 'Unknown',\n        region: result.address.countrySubdivisionName || 'Unknown',\n        locality: result.address.countrySecondarySubdivision || 'Unknown',\n        subLocality: result.address.countryTertiarySubdivision || 'Unknown',\n        postalCode: result.address.postalCode || 'Unknown',\n        country: result.address.country || 'US',\n        position: {\n          lat: latlngArray[0],\n          lon: latlngArray[1]\n        },\n        lat: latlngArray[0],\n        lng: latlngArray[1]\n      };\n    };\n\n    _react.default.useEffect(() => {\n      if (!map) return;\n      Ember.$('html,body,.tomtom-map').addClass('pinpoint-cursor');\n      map.native.on('click', async e => {\n        const coord = e.latlng;\n\n        const _location = await reverseGeocode({ ...coord,\n          lon: coord.lng\n        });\n\n        setLocation(_location);\n        Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n        map.native.off('click');\n        setIsPinCursor(false);\n      });\n      return () => {\n        map.native.off('click');\n        Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n      };\n    }, []);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = PinCursor;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/post-polyline\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _map, _panel, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const PostPolyline = () => {\n    const {\n      map,\n      movingMarkerLatLng\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      sliderIndex\n    } = (0, _panel.usePanel)();\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n    const {\n      lat,\n      lng\n    } = movingMarkerLatLng;\n\n    _react.default.useEffect(() => {\n      if (!map || !lat || !lng) return;\n      const points = eventData.slice(0, sliderIndex + 1).filter(event => event.displayLat !== 'N/A' && event.displayLng !== 'N/A').map(event => [Number(event.displayLat), Number(event.displayLng)]);\n      const polyline = window.L.polyline(points, {\n        color: '#555E63',\n        opacity: 1,\n        weight: 3\n      });\n      polyline.addTo(map.native);\n      return () => map.native.removeLayer(polyline);\n    }, [eventData, movingMarkerLatLng, sliderIndex]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = PostPolyline;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/pre-polyline\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _map, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const PrePolyline = () => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n    const points = eventData.filter(event => event.displayLat !== 'N/A' && event.displayLng !== 'N/A').map(event => [Number(event.displayLat), Number(event.displayLng)]);\n\n    _react.default.useEffect(() => {\n      if (!map) return;\n      const polyline = window.L.polyline(points, {\n        color: '#A9B2B5',\n        opacity: 1,\n        weight: 3\n      });\n      polyline.addTo(map.native);\n      return () => map.native.removeLayer(polyline);\n    }, [eventData]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = PrePolyline;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/regionWithRadius\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _map, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const RegionWithRadius = () => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const {\n      radiusMode,\n      radiusInMiles,\n      radiusInFeet,\n      location\n    } = (0, _panel.usePanel)();\n\n    _react.default.useEffect(() => {\n      if (!map || !location || !location.position) return;\n      const radius = radiusMode === _panel.radiusModes.miles ? radiusInMiles : radiusInFeet;\n      const radiusInMeter = Math.max(1, radius) * (radiusMode === _panel.radiusModes.miles ? 1609.344 : 0.3048);\n      const circle = window.L.circle(location.position, {\n        radius: radiusInMeter\n      }).addTo(map.native);\n      return () => map.native.removeLayer(circle);\n    }, [location, radiusMode, radiusInMiles, radiusInFeet]);\n\n    return _react.default.createElement(_react.default.Fragment, null);\n  };\n\n  var _default = RegionWithRadius;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/stops-layer\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/marker\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _map, _api, _marker, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const StopsLayer = () => {\n    const {\n      map\n    } = _react.default.useContext(_map.MapContext);\n\n    const [layer, setLayer] = _react.default.useState();\n\n    const [stopPoints, setStopPoints] = _react.default.useState([]);\n\n    const [vehicles, setVehicles] = _react.default.useState([]);\n\n    const {\n      eventData,\n      vehicleData\n    } = (0, _api.useAPI)();\n    const {\n      mapEventFilters,\n      eventTableColumns,\n      vehicleTableColumns,\n      selectedRvd\n    } = (0, _panel.usePanel)();\n    const activeEventFilters = mapEventFilters.filter(f => f.isChecked && (f.stopType || f.actionType));\n\n    const labelGenerator = (labeledColumns, stop) => {\n      let label = '';\n      labeledColumns.forEach(column => {\n        label += `${column.label}: ${stop[column.valuePath]}<br/>`;\n      });\n      return label;\n    };\n\n    _react.default.useEffect(() => {\n      if (!map) return;\n\n      const _layer = window.L.layerGroup();\n\n      setLayer(_layer);\n\n      _layer.addTo(map.native);\n\n      return () => map.native.removeLayer(_layer);\n    }, [eventData, vehicleData]);\n\n    _react.default.useEffect(() => {\n      const _vehiclePoints = [];\n\n      const _vehicles = vehicleData.filter(vehicle => vehicle.displayLat !== 'N/A' && vehicle.displayLng !== 'N/A').map(vehicle => {\n        _vehiclePoints.push(window.L.latLng(vehicle.displayLat, vehicle.displayLng));\n\n        return { ...vehicle,\n          label: labelGenerator(vehicleTableColumns, vehicle)\n        };\n      });\n\n      setVehicles(_vehicles);\n\n      if (_vehiclePoints.length > 0) {\n        let bounds = window.L.latLngBounds(_vehiclePoints);\n        bounds = bounds.pad(0.1);\n        map.native.pbounds = bounds;\n        map.native.fitBounds(bounds);\n      }\n    }, [vehicleTableColumns, vehicleData]);\n\n    _react.default.useEffect(() => {\n      const labeledColumns = eventTableColumns.filter(column => column.isLabeledInMap);\n      const _stopLatLngs = [];\n\n      const _stopPoints = eventData.map((event, index) => {\n        return { ...event,\n          index\n        };\n      }).filter(event => event.displayLat !== 'N/A' && event.displayLng !== 'N/A').map(stop => {\n        _stopLatLngs.push(window.L.latLng(stop.displayLat, stop.displayLng));\n\n        return { ...stop,\n          label: labelGenerator(labeledColumns, stop)\n        };\n      });\n\n      setStopPoints(_stopPoints);\n\n      if (_stopLatLngs.length > 0) {\n        let bounds = window.L.latLngBounds(_stopLatLngs);\n        bounds = bounds.pad(0.1);\n        map.native.pbounds = bounds;\n        map.native.fitBounds(bounds);\n      }\n    }, [eventTableColumns, eventData]);\n\n    return _react.default.createElement(_react.default.Fragment, null, stopPoints.map(stop => {\n      const filter = !stop.actionType || stop.actionType === 'depart' ? activeEventFilters.find(f => f.stopType === stop.stopType) : activeEventFilters.find(f => f.actionType === stop.actionType);\n\n      if (filter) {\n        return _react.default.createElement(_marker.default, {\n          key: `stop-${filter.id}-${stop._id}`,\n          layer: layer,\n          position: [stop.displayLat, stop.displayLng],\n          popup: stop.label,\n          iconCfg: filter.iconCfg,\n          pIconCfg: filter.pIconCfg,\n          index: stop.index\n        });\n      }\n    }), vehicles.map(vehicle => {\n      const filter = activeEventFilters.find(f => f.stopType === 'vehicle'); // After vehicle selected, hide vehicle icons\n\n      if (filter && !selectedRvd.vehicleId) {\n        return _react.default.createElement(_marker.default, {\n          key: `vehicle-${vehicle._id}`,\n          layer: layer,\n          position: [vehicle.displayLat, vehicle.displayLng],\n          popup: vehicle.label,\n          iconCfg: filter.iconCfg,\n          vehicleId: vehicle._id\n        });\n      }\n    }));\n  };\n\n  var _default = StopsLayer;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/backward\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _panel, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Backward = () => {\n    const {\n      backwardPlay\n    } = (0, _panel.usePanel)();\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n\n    const [isDisabled, setIsDisabled] = _react.default.useState(true);\n\n    _react.default.useEffect(() => {\n      if (eventData.length > 0) {\n        setIsDisabled(false);\n      } else {\n        setIsDisabled(true);\n      }\n    }, [eventData]);\n\n    return _react.default.createElement(\"button\", {\n      id: \"backward-button\",\n      className: \"btn circle-btn\",\n      disabled: isDisabled,\n      onClick: () => backwardPlay()\n    }, _react.default.createElement(\"span\", null, isDisabled ? _react.default.createElement(\"svg\", {\n      width: \"26\",\n      height: \"25\",\n      viewBox: \"0 0 26 25\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"title\", null, \"back/disabled\"), _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"a\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"g\", {\n      transform: \"matrix(-1 0 0 1 25.105 .11)\",\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"circle\", {\n      stroke: \"#B4B4B4\",\n      fill: \"url(#a)\",\n      cx: \"12.442\",\n      cy: \"12.442\",\n      r: \"11.942\"\n    }), _react.default.createElement(\"path\", {\n      d: \"M11.8 9.371a.547.547 0 01.586.115l2.412 2.331a.679.679 0 01-.002.986l-2.418 2.331a.534.534 0 01-.578.115.508.508 0 01-.32-.485V9.856c0-.212.115-.404.32-.485z\",\n      fill: \"#263238\",\n      fillRule: \"nonzero\",\n      opacity: \".495\"\n    }))) : _react.default.createElement(\"svg\", {\n      width: \"25px\",\n      height: \"25px\",\n      viewBox: \"0 0 25 25\",\n      version: \"1.1\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"title\", null, \"back\"), _react.default.createElement(\"desc\", null, \"Created with Sketch.\"), _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"linearGradient-1\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"g\", {\n      id: \"Playback-2.4-Release\",\n      stroke: \"none\",\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"g\", {\n      id: \"back\",\n      transform: \"translate(0.000000, 0.110400)\"\n    }, _react.default.createElement(\"circle\", {\n      id: \"Oval-Copy\",\n      stroke: \"#B4B4B4\",\n      fill: \"url(#linearGradient-1)\",\n      transform: \"translate(12.441598, 12.441598) scale(-1, 1) translate(-12.441598, -12.441598) \",\n      cx: \"12.4415977\",\n      cy: \"12.4415977\",\n      r: \"11.9415977\"\n    }), _react.default.createElement(\"g\", {\n      id: \"rewind-button\",\n      transform: \"translate(9.573118, 8.881918)\",\n      fill: \"#263238\",\n      fillRule: \"nonzero\"\n    }, _react.default.createElement(\"path\", {\n      d: \"M3.51026848,0.489046647 C3.30562524,0.407943299 3.07977719,0.453180226 2.92360208,0.60391613 L0.511639127,2.93555661 C0.229413207,3.20794754 0.231769297,3.64803822 0.514163509,3.92075227 L2.93201669,6.25223119 C3.08852838,6.40280553 3.30512036,6.44820402 3.51010019,6.36710067 C3.71457514,6.28583576 3.82935038,6.09438662 3.82935038,5.88177306 L3.82935038,0.974374253 C3.82918209,0.761599134 3.71508002,0.570149995 3.51026848,0.489046647 Z\",\n      id: \"Path\"\n    })))))));\n  };\n\n  var _default = Backward;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/forward\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _panel, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Forward = () => {\n    const {\n      forwardPlay\n    } = (0, _panel.usePanel)();\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n\n    const [isDisabled, setIsDisabled] = _react.default.useState(true);\n\n    _react.default.useEffect(() => {\n      if (eventData.length > 0) {\n        setIsDisabled(false);\n      } else {\n        setIsDisabled(true);\n      }\n    }, [eventData]);\n\n    return _react.default.createElement(\"button\", {\n      className: \"btn circle-btn\",\n      disabled: isDisabled,\n      onClick: () => forwardPlay()\n    }, _react.default.createElement(\"span\", null, isDisabled ? _react.default.createElement(\"svg\", {\n      width: \"26\",\n      height: \"25\",\n      viewBox: \"0 0 26 25\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"title\", null, \"foward/disabled\"), _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"a\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"g\", {\n      transform: \"translate(.636 .11)\",\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"circle\", {\n      stroke: \"#B4B4B4\",\n      fill: \"url(#a)\",\n      cx: \"12.442\",\n      cy: \"12.442\",\n      r: \"11.942\"\n    }), _react.default.createElement(\"path\", {\n      d: \"M11.558 9.371a.533.533 0 01.578.115l2.407 2.331a.679.679 0 01-.005.986l-2.419 2.331a.505.505 0 01-.56.115c-.205-.081-.302-.273-.302-.485V9.856c0-.212.096-.404.3-.485z\",\n      fill: \"#263238\",\n      fillRule: \"nonzero\",\n      opacity: \".495\"\n    }))) : _react.default.createElement(\"svg\", {\n      width: \"26px\",\n      height: \"25px\",\n      viewBox: \"0 0 26 25\",\n      version: \"1.1\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"title\", null, \"forward\"), _react.default.createElement(\"desc\", null, \"Created with Sketch.\"), _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"linearGradient-1\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"g\", {\n      id: \"Playback-2.4-Release\",\n      stroke: \"none\",\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"g\", {\n      id: \"forward\",\n      transform: \"translate(0.414389, 0.110400)\"\n    }, _react.default.createElement(\"circle\", {\n      id: \"Oval-Copy\",\n      stroke: \"#B4B4B4\",\n      fill: \"url(#linearGradient-1)\",\n      cx: \"12.4415977\",\n      cy: \"12.4415977\",\n      r: \"11.9415977\"\n    }), _react.default.createElement(\"g\", {\n      id: \"rewind-button\",\n      transform: \"translate(12.791677, 12.381918) scale(-1, 1) translate(-12.791677, -12.381918) translate(10.791677, 8.881918)\",\n      fill: \"#263238\",\n      fillRule: \"nonzero\"\n    }, _react.default.createElement(\"path\", {\n      d: \"M3.23374837,0.489046647 C3.02893683,0.407943299 2.81234485,0.453180226 2.65600145,0.60391613 L0.248750676,2.93539505 C-0.0336435351,3.20778598 -0.0289313552,3.64803822 0.253462856,3.92059071 L2.67249408,6.25239275 C2.82883748,6.40296709 3.02809537,6.44836558 3.23290691,6.36710067 C3.43738186,6.28599732 3.5349913,6.09438662 3.5349913,5.88193463 L3.5349913,0.974212693 C3.53482301,0.761760695 3.4387282,0.569826874 3.23374837,0.489046647 Z\",\n      id: \"Path\"\n    })))))));\n  };\n\n  var _default = Forward;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/backward\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/forward\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/play\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/pause\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/slider\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/speed\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _backward, _forward, _play, _pause, _slider, _speed, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const PlaybackPanel = () => {\n    const {\n      isRunning,\n      isStarted,\n      isEnded\n    } = (0, _panel.usePanel)();\n    return _react.default.createElement(\"fieldset\", null, _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"div\", {\n      className: \"playback-widget-panel\"\n    }, _react.default.createElement(\"table\", {\n      className: \"playback-slider-table\"\n    }, _react.default.createElement(\"caption\", {\n      className: \"playback-slider-label\"\n    }), _react.default.createElement(\"tbody\", {\n      style: {\n        display: 'flex'\n      }\n    }, _react.default.createElement(\"tr\", {\n      className: \"panel-row\"\n    }, _react.default.createElement(\"td\", null, _react.default.createElement(_backward.default, null), isStarted && isRunning && !isEnded ? _react.default.createElement(_pause.default, null) : _react.default.createElement(_play.default, null), _react.default.createElement(_forward.default, null)), _react.default.createElement(\"td\", null, _react.default.createElement(_slider.default, null)), _react.default.createElement(\"td\", {\n      style: {\n        width: '150px'\n      }\n    }, _react.default.createElement(_speed.default, null))))))));\n  };\n\n  var _default = PlaybackPanel;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/pause\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Pause = () => {\n    const {\n      pausePlay\n    } = (0, _panel.usePanel)();\n    return _react.default.createElement(\"button\", {\n      className: \"btn circle-btn\",\n      disabled: false,\n      onClick: () => pausePlay()\n    }, _react.default.createElement(\"span\", null, _react.default.createElement(\"svg\", {\n      width: \"32\",\n      height: \"32\",\n      viewBox: \"0 0 32 32\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"a\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"title\", null, \"pause\"), _react.default.createElement(\"g\", {\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"g\", null, _react.default.createElement(\"circle\", {\n      stroke: \"#B4B4B4\",\n      fill: \"url(#a)\",\n      cx: \"15.552\",\n      cy: \"15.552\",\n      r: \"15.052\"\n    }), _react.default.createElement(\"path\", {\n      d: \"M13.181 9a1 1 0 011 1v11a1 1 0 01-1 1h-1a1 1 0 01-1-1V10a1 1 0 011-1h1zm5 0a1 1 0 011 1v11a1 1 0 01-1 1h-1a1 1 0 01-1-1V10a1 1 0 011-1h1z\",\n      fill: \"#263238\"\n    }))))));\n  };\n\n  var _default = Pause;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/play\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\"], function (_exports, _react, _panel, _api) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Play = () => {\n    const {\n      startPlay\n    } = (0, _panel.usePanel)();\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n\n    const [isDisabled, setIsDisabled] = _react.default.useState(true);\n\n    _react.default.useEffect(() => {\n      if (eventData.length > 0) {\n        setIsDisabled(false);\n      } else {\n        setIsDisabled(true);\n      }\n    }, [eventData]);\n\n    return _react.default.createElement(\"button\", {\n      className: \"btn circle-btn\",\n      disabled: isDisabled,\n      onClick: () => startPlay()\n    }, _react.default.createElement(\"span\", null, isDisabled ? _react.default.createElement(\"svg\", {\n      width: \"32\",\n      height: \"32\",\n      viewBox: \"0 0 32 32\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"title\", null, \"play/disabled\"), _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"a\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"g\", {\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"g\", {\n      transform: \"translate(.819)\"\n    }, _react.default.createElement(\"circle\", {\n      stroke: \"#B4B4B4\",\n      fill: \"url(#a)\",\n      cx: \"15.552\",\n      cy: \"15.552\",\n      r: \"15.052\"\n    }), _react.default.createElement(\"path\", {\n      d: \"M21.98 14.988l-8.493-4.851c-.252-.136-.563-.113-.799-.113-.942 0-.938.659-.938.826v9.915c0 .14-.004.826.938.826.236 0 .548.022.799-.113l8.493-4.85c.697-.377.577-.82.577-.82s.12-.444-.577-.82z\",\n      fill: \"#263238\",\n      fillRule: \"nonzero\",\n      opacity: \".495\"\n    })))) : _react.default.createElement(\"svg\", {\n      width: \"32px\",\n      height: \"32px\",\n      viewBox: \"0 0 32 32\",\n      version: \"1.1\",\n      xmlns: \"http://www.w3.org/2000/svg\"\n    }, _react.default.createElement(\"title\", null, \"play\"), _react.default.createElement(\"desc\", null, \"Created with Sketch.\"), _react.default.createElement(\"defs\", null, _react.default.createElement(\"linearGradient\", {\n      x1: \"50%\",\n      y1: \"0%\",\n      x2: \"50%\",\n      y2: \"100%\",\n      id: \"linearGradient-1\"\n    }, _react.default.createElement(\"stop\", {\n      stopColor: \"#F9F9F9\",\n      offset: \"0%\"\n    }), _react.default.createElement(\"stop\", {\n      stopColor: \"#D1D1D1\",\n      offset: \"100%\"\n    }))), _react.default.createElement(\"g\", {\n      id: \"Playback-2.4-Release\",\n      stroke: \"none\",\n      fill: \"none\",\n      fillRule: \"evenodd\"\n    }, _react.default.createElement(\"g\", {\n      id: \"play\",\n      transform: \"translate(0.596794, 0.000000)\"\n    }, _react.default.createElement(\"circle\", {\n      id: \"Oval\",\n      stroke: \"#B4B4B4\",\n      fill: \"url(#linearGradient-1)\",\n      cx: \"15.5519981\",\n      cy: \"15.5519981\",\n      r: \"15.0519981\"\n    }), _react.default.createElement(\"path\", {\n      d: \"M21.9803704,14.9876334 L13.4865596,10.136741 C13.2354577,10.0012326 12.9236558,10.023809 12.6881687,10.023809 C11.7462202,10.023809 11.7503986,10.6830109 11.7503986,10.8500166 L11.7503986,20.7647076 C11.7503986,20.9058975 11.7462752,21.590965 12.6881687,21.590965 C12.9236558,21.590965 13.2355127,21.6134418 13.4865596,21.4779832 L21.9803154,16.6271407 C22.6774848,16.251116 22.5570197,15.8073621 22.5570197,15.8073621 C22.5570197,15.8073621 22.6775398,15.3636082 21.9803704,14.9876334 Z\",\n      id: \"Path\",\n      fill: \"#263238\",\n      fillRule: \"nonzero\"\n    }))))));\n  };\n\n  var _default = Play;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/slider\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _react, _api, _panel, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Slider = () => {\n    const {\n      eventData\n    } = (0, _api.useAPI)();\n    const {\n      sliderIndex,\n      setToPlay,\n      setSliderIndex,\n      setSliderIndexMax\n    } = (0, _panel.usePanel)();\n\n    const [startTime, setStartTime] = _react.default.useState('Start Time');\n\n    const [endTime, setEndTime] = _react.default.useState('End Time');\n\n    const [percentage, setPercentage] = _react.default.useState(0);\n\n    const [position, setPosition] = _react.default.useState(10);\n\n    const start = eventData.length > 0 ? eventData[0] : null;\n    const end = eventData.length > 0 ? eventData[eventData.length - 1] : null;\n    const total = eventData.length;\n\n    const onSliderValueChange = event => {\n      setToPlay(event.target.value);\n    };\n\n    _react.default.useEffect(() => {\n      if (start && end) {\n        const startDisplay = (0, _moment.default)(start.converteddate).format(_environment.default.dateTimeFormat.timeMoment);\n        const endDisplay = (0, _moment.default)(end.converteddate).format(_environment.default.dateTimeFormat.timeMoment);\n        setStartTime(startDisplay);\n        setEndTime(endDisplay);\n        setSliderIndexMax(total - 1);\n      } else {\n        setStartTime('Start Time');\n        setEndTime('End Time');\n        setSliderIndex(0);\n        setSliderIndexMax(0);\n      }\n    }, [eventData]);\n\n    _react.default.useEffect(() => {\n      const _percentage = Number(sliderIndex * 100 / total);\n\n      const _position = 8 - 0.12 * _percentage;\n\n      setPercentage(_percentage);\n      setPosition(_position);\n    }, [sliderIndex]);\n\n    return _react.default.createElement(\"div\", {\n      className: \"playback-widget-slider\"\n    }, _react.default.createElement(\"div\", null, _react.default.createElement(\"label\", null, startTime)), _react.default.createElement(\"div\", {\n      className: \"range-wrap\"\n    }, total > 0 ? _react.default.createElement(\"div\", {\n      className: \"range-value\",\n      id: \"rangeV\",\n      style: {\n        left: `calc(${percentage}% + (${position}px))`\n      }\n    }, eventData[sliderIndex]?.localTime) : '', _react.default.createElement(\"input\", {\n      id: \"range\",\n      type: \"range\",\n      min: \"0\",\n      max: total - 1,\n      step: \"1\",\n      value: sliderIndex,\n      onChange: value => onSliderValueChange(value)\n    })), _react.default.createElement(\"div\", null, _react.default.createElement(\"label\", null, endTime)));\n  };\n\n  var _default = Slider;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel/speed\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Speed = () => {\n    const {\n      speedMode,\n      speedPlay,\n      isPaused\n    } = (0, _panel.usePanel)();\n\n    const changeSpeedMode = () => {\n      switch (speedMode) {\n        case _panel.speedModes.x1:\n          speedPlay(_panel.speedModes.x2);\n          break;\n\n        case _panel.speedModes.x2:\n          speedPlay(_panel.speedModes.x4);\n          break;\n\n        case _panel.speedModes.x4:\n          speedPlay(_panel.speedModes.x8);\n          break;\n\n        case _panel.speedModes.x8:\n        default:\n          speedPlay(_panel.speedModes.x1);\n      }\n    };\n\n    return _react.default.createElement(\"button\", {\n      className: \"btn circle default\",\n      type: \"button\",\n      disabled: isPaused,\n      onClick: () => changeSpeedMode()\n    }, speedMode);\n  };\n\n  var _default = Speed;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/action-button\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/csv-file\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/useOutsideCanceler\"], function (_exports, _react, _csvFile, _useOutsideCanceler) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const ActionButton = props => {\n    const {\n      table\n    } = props;\n\n    const [actionEnabled, setActionEnabled] = _react.default.useState(false);\n\n    return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"button\", {\n      className: \"playback-widget-button-new \",\n      onClick: () => setActionEnabled(true)\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-plus-circle\",\n      \"aria-hidden\": \"true\"\n    })), actionEnabled && _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_useOutsideCanceler.default, {\n      cancel: () => setActionEnabled(false)\n    }, _react.default.createElement(\"div\", {\n      className: \"download-dropdown\",\n      onClick: () => setActionEnabled(false)\n    }, _react.default.createElement(_csvFile.default, {\n      table: table\n    })))));\n  };\n\n  var _default = ActionButton;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    vehiclesTableColumns: [{\n      label: 'Vehicle ID',\n      valuePath: 'vehicleName',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'vehicleId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Driver ID',\n      valuePath: 'badgenumber',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'driverId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Driver Name',\n      valuePath: 'driverName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'driverName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Provider',\n      valuePath: 'provider',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'provider',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'OTP',\n      valuePath: 'otp',\n      dataType: 'text',\n      resizable: true,\n      searchable: true,\n      minResizeWidth: 50,\n      id: 'otp',\n      component: 'iq-widgets/playback-widget/table-header'\n    }],\n    vehicleEventsTableColumns: [{\n      label: 'Time',\n      valuePath: 'localTimeDisplay',\n      dataType: 'time',\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'time',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Route',\n      valuePath: 'routeName',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'routeId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'vehicleId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Latitude',\n      valuePath: 'displayLat',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'lat',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Longitude',\n      valuePath: 'displayLng',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'lng',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 30,\n      id: 'passengerId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'passengerFName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'passengerLName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Stop Address',\n      valuePath: 'stopAddress',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 70,\n      id: 'stopAddress',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Stop Type',\n      valuePath: 'stopType',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'stopType',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Event Type',\n      valuePath: 'eventType',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'eventType',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Vehicle Speed',\n      valuePath: 'vehicleSpeed',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'speed',\n      component: 'iq-widgets/playback-widget/table-header'\n    }],\n    vehicleEvents: ['pick', 'wheelchair-pick', 'wheelchair-drop', 'onBreak', 'offBreak', 'drop', 'pullOut', 'pullIn'],\n    tableTypes: {\n      events: 'events',\n      vehicles: 'vehicles'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/csv-file\", [\"exports\", \"react\", \"react-playback-components-library\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"moment\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\"], function (_exports, _react, _reactPlaybackComponentsLibrary, _panel, _moment, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CSVLink = _reactPlaybackComponentsLibrary.default.IqCSVLink;\n\n  const CSVFile = props => {\n    const {\n      table\n    } = props;\n    const {\n      eventTableColumns,\n      vehicleTableColumns,\n      eventTableData,\n      vehicleTableData\n    } = (0, _panel.usePanel)();\n\n    const [csvData, setCsvData] = _react.default.useState('');\n\n    const eventFileHeaders = eventTableColumns.filter(column => column.isChecked).map(column => {\n      return {\n        label: column.label,\n        key: column.valuePath\n      };\n    });\n    const vehicleFileHeaders = vehicleTableColumns.filter(column => column.isChecked).map(column => {\n      return {\n        label: column.label,\n        key: column.valuePath\n      };\n    });\n    const csvHeaders = table === _config.default.tableTypes.events ? [eventFileHeaders.map(header => header.label).join(',')] : [vehicleFileHeaders.map(header => header.label).join(',')];\n    const date = (0, _moment.default)().format('YYYY-MM-DD');\n\n    _react.default.useEffect(() => {\n      const _csvData = [];\n\n      if (table === _config.default.tableTypes.events) {\n        eventTableData.forEach(event => {\n          const values = eventFileHeaders.map(header => `\"${event[header.key]}\"`).join(',');\n\n          _csvData.push(values);\n        });\n      } else {\n        vehicleTableData.forEach(vehicle => {\n          const values = vehicleFileHeaders.map(header => `\"${vehicle[header.key]}\"`).join(',');\n\n          _csvData.push(values);\n        });\n      }\n\n      setCsvData(_csvData.join('\\r\\n'));\n    }, [eventTableData, vehicleTableData]);\n\n    return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(CSVLink, {\n      data: csvData,\n      headers: csvHeaders,\n      filename: `${date}_${table}_Playback.csv`\n    }, _react.default.createElement(\"button\", {\n      className: \"ember-basic-dropdown-content table-component-content data-test-dropdown  ember-basic-dropdown-content--right ember-basic-dropdown-content--below ember-basic-dropdown--transitioned-in ember-view\"\n    }, \"Download\")));\n  };\n\n  var _default = CSVFile;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/filter-button\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/table-filter\"], function (_exports, _react, _config, _panel, _tableFilter) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const FilterButton = props => {\n    const {\n      table\n    } = props;\n    const {\n      vehicleTableFilterEnabled,\n      setVehicleTableFilterEnabled,\n      eventTableFilterEnabled,\n      setEventTableFilterEnabled\n    } = (0, _panel.usePanel)();\n    const filterEnabled = table === _config.default.tableTypes.events ? eventTableFilterEnabled : vehicleTableFilterEnabled;\n    const setFilterEnabled = table === _config.default.tableTypes.events ? setEventTableFilterEnabled : setVehicleTableFilterEnabled;\n    return _react.default.createElement(\"div\", null, _react.default.createElement(\"button\", {\n      className: \"playback-widget-button-new \",\n      onClick: () => setFilterEnabled(true),\n      \"data-test-map-filter-button\": true\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-filter \",\n      \"aria-hidden\": \"true\"\n    })), filterEnabled && _react.default.createElement(_tableFilter.default, {\n      table: table,\n      setFilterEnabled: setFilterEnabled\n    }));\n  };\n\n  var _default = FilterButton;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/search-button\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/action-button\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/filter-button\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/playback-table\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\"], function (_exports, _react, _panel, _api, _searchButton, _actionButton, _filterButton, _playbackTable, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const PlaybackTables = () => {\n    const {\n      searchMode,\n      eventSearchText,\n      setEventSearchText,\n      vehicleSearchText,\n      setVehicleSearchText\n    } = (0, _panel.usePanel)();\n    const {\n      eventData,\n      vehicleData\n    } = (0, _api.useAPI)();\n\n    const [eventTotalCount, setEventTotalCount] = _react.default.useState(0);\n\n    const [displayEventCount, setDisplayEventCount] = _react.default.useState(0);\n\n    const [vehicleTotalCount, setVehicleTotalCount] = _react.default.useState(0);\n\n    const [displayVehicleCount, setDisplayVehicleCount] = _react.default.useState(0);\n\n    const [tableWidth, setTableWidth] = _react.default.useState(1700);\n\n    const [tableHeight, setTableHeight] = _react.default.useState(255);\n\n    const [leftTableWidth, setLeftTableWidth] = _react.default.useState(500);\n\n    const [rightTableWidth, setRightTableWidth] = _react.default.useState(1700);\n\n    const [leftTableHeight, setLeftTableHeight] = _react.default.useState(255);\n\n    const [rightTableHeight, setRightTableHeight] = _react.default.useState(255);\n\n    const leftTableRef = _react.default.useRef();\n\n    const rightTableRef = _react.default.useRef();\n\n    const tableRef = _react.default.useRef();\n\n    _react.default.useLayoutEffect(() => {\n      if (tableRef.current) {\n        setTableWidth(tableRef.current.offsetWidth);\n        setTableHeight(tableRef.current.offsetHeight);\n      }\n\n      if (leftTableRef.current) {\n        setLeftTableWidth(leftTableRef.current.offsetWidth);\n        setLeftTableHeight(leftTableRef.current.offsetHeight);\n      }\n\n      if (rightTableRef.current) {\n        setRightTableWidth(rightTableRef.current.offsetWidth);\n        setRightTableHeight(rightTableRef.current.offsetHeight);\n      }\n    });\n\n    _react.default.useEffect(() => {\n      if (eventData.length > 0) {\n        setDisplayEventCount(eventData.length);\n        setEventTotalCount(eventData[0].totalcount);\n      } else {\n        setDisplayEventCount(0);\n        setEventTotalCount(0);\n      }\n    }, [eventData]);\n\n    _react.default.useEffect(() => {\n      if (vehicleData.length > 0) {\n        setVehicleTotalCount(vehicleData[0].totalcount);\n      } else {\n        setDisplayVehicleCount(0);\n        setVehicleTotalCount(0);\n      }\n    }, [vehicleData]);\n\n    return _react.default.createElement(_react.default.Fragment, null, searchMode === _panel.searchModes.byVehicle && _react.default.createElement(\"div\", {\n      className: \"grid-table-all\"\n    }, _react.default.createElement(\"div\", {\n      className: \"playback-widget-table-header\"\n    }, _react.default.createElement(\"h5\", {\n      className: \"playback-widget-table-title\"\n    }, \"Vehicle Events (\", displayEventCount, \"/\", eventTotalCount, \")\"), _react.default.createElement(\"div\", {\n      className: \"playback-widget-controls\"\n    }, _react.default.createElement(_searchButton.default, {\n      searchText: eventSearchText,\n      setSearchText: setEventSearchText\n    }), _react.default.createElement(_actionButton.default, {\n      table: _config.default.tableTypes.events\n    }), _react.default.createElement(_filterButton.default, {\n      table: _config.default.tableTypes.events\n    }))), _react.default.createElement(\"div\", {\n      className: \"table-wrapper playback-widget-table-body\",\n      ref: tableRef\n    }, _react.default.createElement(_playbackTable.default, {\n      table: _config.default.tableTypes.events,\n      height: tableHeight,\n      width: tableWidth,\n      setDisplayCount: setDisplayEventCount\n    }))), searchMode === _panel.searchModes.byLocation && _react.default.createElement(\"div\", {\n      className: \"table-wrapper\"\n    }, _react.default.createElement(\"div\", {\n      className: \"grid-table-left\"\n    }, _react.default.createElement(\"div\", {\n      className: \"playback-widget-table-header\"\n    }, _react.default.createElement(\"h5\", {\n      className: \"playback-widget-table-title\"\n    }, \"Vehicles (\", displayVehicleCount, \"/\", vehicleTotalCount, \")\"), _react.default.createElement(\"div\", {\n      className: \"playback-widget-controls\"\n    }, _react.default.createElement(_searchButton.default, {\n      searchText: vehicleSearchText,\n      setSearchText: setVehicleSearchText\n    }), _react.default.createElement(_actionButton.default, {\n      table: _config.default.tableTypes.vehicles\n    }), _react.default.createElement(_filterButton.default, {\n      table: _config.default.tableTypes.vehicles\n    }))), _react.default.createElement(\"div\", {\n      className: \"table-wrapper playback-widget-table-body\",\n      ref: leftTableRef\n    }, _react.default.createElement(_playbackTable.default, {\n      table: _config.default.tableTypes.vehicles,\n      height: leftTableHeight,\n      width: leftTableWidth,\n      setDisplayCount: setDisplayVehicleCount\n    }))), _react.default.createElement(\"div\", {\n      className: \"grid-table-right\"\n    }, _react.default.createElement(\"div\", {\n      className: \"playback-widget-table-header\"\n    }, _react.default.createElement(\"h5\", {\n      className: \"playback-widget-table-title\"\n    }, \"Vehicle Events (\", displayEventCount, \"/\", eventTotalCount, \")\"), _react.default.createElement(\"div\", {\n      className: \"playback-widget-controls\"\n    }, _react.default.createElement(_searchButton.default, {\n      searchText: eventSearchText,\n      setSearchText: setEventSearchText\n    }), _react.default.createElement(_actionButton.default, {\n      table: _config.default.tableTypes.events\n    }), _react.default.createElement(_filterButton.default, {\n      table: _config.default.tableTypes.events\n    }))), _react.default.createElement(\"div\", {\n      className: \"table-wrapper playback-widget-table-body\",\n      ref: rightTableRef\n    }, _react.default.createElement(_playbackTable.default, {\n      table: _config.default.tableTypes.events,\n      height: rightTableHeight,\n      width: rightTableWidth,\n      setDisplayCount: setDisplayEventCount\n    })))));\n  };\n\n  var _default = PlaybackTables;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/playback-table\", [\"exports\", \"react\", \"react-virtualized\", \"react-draggable\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _react, _reactVirtualized, _reactDraggable, _api, _panel, _session, _config, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const Table = _reactVirtualized.default.Table;\n  const Column = _reactVirtualized.default.Column;\n  const defaultTableRowRenderer = _reactVirtualized.default.defaultTableRowRenderer;\n\n  const PlaybackTable = props => {\n    const tableRef = _react.default.useRef();\n\n    const {\n      token,\n      providers,\n      notifications\n    } = _react.default.useContext(_session.SessionContext);\n\n    const {\n      table,\n      setDisplayCount,\n      width,\n      height\n    } = props;\n    const {\n      eventData,\n      vehicleData,\n      doSearch,\n      setEventData\n    } = (0, _api.useAPI)();\n    const {\n      sliderIndex,\n      setToPlay,\n      isLoadingEvent,\n      isLoadingVehicle,\n      isRunning,\n      vehicleTableColumns,\n      eventTableColumns,\n      setSelectedRvd,\n      selectedRvd,\n      startTime,\n      endTime,\n      setIsLoadingEvent,\n      eventSearchText,\n      vehicleSearchText,\n      setEventTableData,\n      setVehicleTableData,\n      highlightedRowIndex,\n      setHighlightedRowIndex\n    } = (0, _panel.usePanel)();\n\n    const [displayData, setDisplayData] = _react.default.useState(table === _config.default.tableTypes.events ? eventData : vehicleData);\n\n    const configColumns = table === _config.default.tableTypes.events ? eventTableColumns.filter(column => column.isChecked) : vehicleTableColumns.filter(column => column.isChecked);\n    const defaultWidths = configColumns.reduce((w, column) => {\n      const columnLength = configColumns.length > 0 ? configColumns.length : 1;\n      w[column.valuePath] = Math.max(width / columnLength, MIN_COLUMN_WIDTH);\n      return w;\n    }, {}); // Minus 40 for radio button\n\n    const defaultTotalWidth = Object.values(defaultWidths).reduce((sum, w) => sum + w, 0);\n\n    const [widths, setWidths] = _react.default.useState(defaultWidths);\n\n    const [totalWidth, setTotalWidth] = _react.default.useState(defaultTotalWidth);\n\n    const timezone = _moment.default.tz.guess();\n\n    const matchColumnFilter = (rowData, column) => {\n      const {\n        filterOp,\n        filterValue\n      } = column;\n      if (filterOp !== _panel.filterOperations.empty && filterValue === '' || filterOp === '') return true;\n\n      switch (filterOp) {\n        case _panel.filterOperations.eq:\n          return rowData[column.valuePath].toString().toLowerCase() === filterValue.toLowerCase();\n\n        case _panel.filterOperations.neq:\n          return rowData[column.valuePath].toString().toLowerCase() !== filterValue.toLowerCase();\n\n        case _panel.filterOperations.contains:\n          return rowData[column.valuePath].toString().toLowerCase().includes(filterValue.toLowerCase());\n\n        case _panel.filterOperations.empty:\n          return rowData[column.valuePath] === 'N/A';\n\n        default:\n          return true;\n      }\n    };\n\n    const onRowClick = _ref => {\n      let {\n        index\n      } = _ref;\n\n      if (table === _config.default.tableTypes.events) {\n        const _index = displayData[index]?._index;\n\n        if (_index >= 0) {\n          setToPlay(_index);\n        }\n      }\n    };\n\n    const noRowsRenderer = () => {\n      const eventMessage = 'No events found';\n      const vehicleMessage = 'No vehicles found';\n\n      const loadingIcon = _react.default.createElement(\"i\", {\n        className: \"fa fa-circle-o-notch fa-spin fa-lg fa-fw\"\n      });\n\n      return _react.default.createElement(_react.default.Fragment, null, table === _config.default.tableTypes.events && _react.default.createElement(\"div\", {\n        className: \"loadingMessage\"\n      }, isLoadingEvent ? loadingIcon : eventMessage), table === _config.default.tableTypes.vehicles && _react.default.createElement(\"div\", {\n        className: \"loadingMessage\"\n      }, isLoadingVehicle ? loadingIcon : vehicleMessage));\n    };\n\n    const resizeRow = _ref2 => {\n      let {\n        key,\n        deltaX\n      } = _ref2;\n      const prevWidths = widths;\n      const curWidths = { ...prevWidths,\n        [key]: Math.max(prevWidths[key] + deltaX, MIN_COLUMN_WIDTH)\n      };\n      setWidths(curWidths);\n      setTotalWidth(Object.values(curWidths).reduce((sum, w) => sum + w, 0));\n    };\n\n    _react.default.useEffect(() => {\n      if (table === _config.default.tableTypes.events && tableRef.current) {\n        let previousItem = null;\n        let nextItem = null;\n        let currItem = null;\n        const sliderIndexNo = Number(sliderIndex);\n        displayData.map((d, i) => {\n          if (d._index < sliderIndexNo) {\n            previousItem = i;\n          }\n\n          if (d._index === sliderIndexNo) {\n            currItem = i;\n          }\n\n          if (nextItem === null && d._index > sliderIndexNo) {\n            nextItem = i;\n          }\n        });\n\n        if (currItem === null) {\n          currItem = previousItem !== null ? previousItem : nextItem;\n        }\n\n        if (currItem !== null && currItem >= 0) {\n          setHighlightedRowIndex(currItem);\n          tableRef.current.scrollToRow(currItem);\n          tableRef.current.forceUpdate();\n        }\n      }\n    }, [sliderIndex]);\n\n    _react.default.useEffect(() => {\n      if (table === _config.default.tableTypes.events && eventSearchText !== '') {\n        const seachFields = eventTableColumns.map(column => column.valuePath);\n        const searchText = eventSearchText.toLowerCase();\n\n        const _displayData = eventData.filter(event => {\n          // Check filter first\n          for (let i = 0; i < eventTableColumns.length; i++) {\n            if (eventTableColumns[i].isChecked && !matchColumnFilter(event, eventTableColumns[i])) return false;\n          }\n\n          for (let i = 0; i < seachFields.length; i++) {\n            const context = event[seachFields[i]] ? event[seachFields[i]].toString().toLowerCase() : '';\n            if (context.includes(searchText)) return true;\n          }\n\n          return false;\n        });\n\n        setDisplayData(_displayData);\n      } else if (table === _config.default.tableTypes.vehicles && vehicleSearchText !== '') {\n        const seachFields = vehicleTableColumns.map(column => column.valuePath);\n        const searchText = vehicleSearchText.toLowerCase();\n\n        const _displayData = vehicleData.filter(vehicle => {\n          // Check filter first\n          for (let i = 0; i < vehicleTableColumns.length; i++) {\n            if (vehicleTableColumns[i].isChecked && !matchColumnFilter(vehicle, vehicleTableColumns[i])) return false;\n          }\n\n          for (let i = 0; i < seachFields.length; i++) {\n            const context = vehicle[seachFields[i]] ? vehicle[seachFields[i]].toString().toLowerCase() : '';\n            if (context.includes(searchText)) return true;\n          }\n\n          return false;\n        });\n\n        setDisplayData(_displayData);\n      } else {\n        const _data = table === _config.default.tableTypes.events ? eventData : vehicleData;\n\n        const columns = table === _config.default.tableTypes.events ? eventTableColumns : vehicleTableColumns;\n\n        const _displayData = _data.filter(d => {\n          d.localTimeDisplay = (0, _moment.default)(d.converteddate).format(_environment.default.dateTimeFormat.timeMoment);\n\n          for (let i = 0; i < columns.length; i++) {\n            if (columns[i].isChecked && !matchColumnFilter(d, columns[i])) return false;\n          }\n\n          return true;\n        });\n\n        setDisplayData(_displayData);\n      }\n    }, [eventSearchText, vehicleSearchText, eventData, vehicleData, vehicleTableColumns, eventTableColumns]);\n\n    _react.default.useEffect(() => {\n      setDisplayCount(displayData.length);\n\n      if (table === _config.default.tableTypes.events) {\n        setEventTableData(displayData);\n      } else {\n        setVehicleTableData(displayData);\n      }\n    }, [displayData]);\n\n    _react.default.useEffect(() => {\n      setWidths(defaultWidths);\n      setTotalWidth(defaultTotalWidth);\n    }, [width]);\n\n    const headerRenderer = _ref3 => {\n      let {\n        dataKey,\n        label\n      } = _ref3;\n      return _react.default.createElement(_react.default.Fragment, {\n        key: dataKey\n      }, _react.default.createElement(\"div\", {\n        className: \"ReactVirtualized__Table__headerTruncatedText\"\n      }, _react.default.createElement(\"span\", null, label)), _react.default.createElement(_reactDraggable.default, {\n        axis: \"x\",\n        defaultClassName: \"DragHandle\",\n        defaultClassNameDragging: \"DragHandleActive\",\n        onDrag: (event, _ref4) => {\n          let {\n            deltaX\n          } = _ref4;\n          return resizeRow({\n            key: dataKey,\n            deltaX\n          });\n        },\n        position: {\n          x: 0\n        },\n        zIndex: 999\n      }, _react.default.createElement(\"span\", {\n        className: \"PlaybackDragHandleIcon\"\n      })));\n    };\n\n    const rowRenderer = rowProps => {\n      const {\n        index,\n        style\n      } = rowProps;\n\n      if (table === _config.default.tableTypes.events) {\n        const _index = displayData[index]._index;\n\n        if (Number(_index) === Number(sliderIndex) || highlightedRowIndex === index) {\n          style.backgroundColor = '#95d095';\n          style.color = '#fff';\n        }\n      }\n\n      return _react.default.cloneElement(defaultTableRowRenderer(rowProps));\n    };\n\n    const searchEvents = rowData => {\n      const {\n        vehicleId,\n        vehicleName,\n        driverId,\n        badgenumber,\n        routeId,\n        routeName,\n        provider\n      } = rowData;\n      const _selectedRvd = {\n        vehicleId,\n        vehicleName,\n        driverId,\n        badgenumber,\n        routeId,\n        routeName,\n        provider\n      }; // Avoid double clicking\n\n      if (isLoadingEvent || isRunning) return; // If events is loaded and use click on same vehicle then remove the data.\n\n      if (selectedRvd.vehicleId === _selectedRvd.vehicleId) {\n        setSelectedRvd({});\n        setEventData([]);\n        return;\n      } // Clear Events First\n\n\n      setEventData([]);\n      setSelectedRvd(_selectedRvd);\n      setIsLoadingEvent(true);\n\n      const callback = () => {\n        setIsLoadingEvent(false);\n      };\n\n      doSearch(startTime, endTime, timezone, token, providers, notifications, _panel.searchModes.byLocationVehicle, _selectedRvd, null, null, null, callback);\n    };\n\n    return _react.default.createElement(Table, {\n      ref: tableRef,\n      width: totalWidth,\n      height: height,\n      headerHeight: 40,\n      rowHeight: 30,\n      rowCount: displayData.length,\n      rowGetter: _ref5 => {\n        let {\n          index\n        } = _ref5;\n        return displayData[index];\n      },\n      onRowClick: onRowClick,\n      rowRenderer: rowRenderer,\n      noRowsRenderer: noRowsRenderer\n    }, table === _config.default.tableTypes.vehicles && _react.default.createElement(Column, {\n      width: 40,\n      dataKey: \"radio\",\n      label: \"\",\n      cellRenderer: _ref6 => {\n        let {\n          rowData\n        } = _ref6;\n        return _react.default.createElement(\"input\", {\n          checked: selectedRvd && selectedRvd.vehicleId === rowData.vehicleId,\n          onChange: () => {// Do nothing in onChange because we need uncheck radio button.\n          },\n          onClick: () => searchEvents(rowData),\n          type: \"radio\"\n        });\n      }\n    }), configColumns.map(column => _react.default.createElement(Column, {\n      headerRenderer: headerRenderer,\n      key: column.valuePath,\n      dataKey: column.valuePath,\n      label: column.label,\n      width: widths[column.valuePath],\n      style: {\n        border: '0px'\n      }\n    })));\n  };\n\n  var _default = PlaybackTable;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/search-button\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const SearchButton = props => {\n    const {\n      searchText,\n      setSearchText\n    } = props;\n\n    const [searchEnabled, setSearchEnabled] = _react.default.useState(false);\n\n    _react.default.useEffect(() => {}, []);\n\n    return _react.default.createElement(_react.default.Fragment, null, searchEnabled && _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"input\", {\n      className: \"column-widget-search-box data-test-search-box\",\n      name: \"searchInput\",\n      value: searchText,\n      onChange: event => setSearchText(event.target.value),\n      placeholder: \"Search\"\n    }), _react.default.createElement(\"button\", {\n      className: \"column-widget-button\",\n      onClick: () => {\n        setSearchEnabled(false);\n        setSearchText('');\n      }\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-times-circle active-button\",\n      \"aria-hidden\": \"true\"\n    }))), _react.default.createElement(\"button\", {\n      className: \"playback-widget-button-new \",\n      onClick: () => setSearchEnabled(true)\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-search\",\n      \"aria-hidden\": \"true\"\n    })));\n  };\n\n  var _default = SearchButton;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/table-filter\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\"], function (_exports, _react, _panel, _sideDrawer, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const TableFilter = props => {\n    const {\n      table,\n      setFilterEnabled\n    } = props;\n    const {\n      toggleAllVehicleTableColumns,\n      toggleAllEventTableColumns,\n      vehicleTableColumns,\n      eventTableColumns,\n      toggleEventTableColumn,\n      toggleVehicleTableColumn,\n      updateEventColumn,\n      updateVehicleColumn,\n      setVehicleTableColumns,\n      setEventTableColumns\n    } = (0, _panel.usePanel)();\n\n    const [isEyeOpened, setIsEyeOpened] = _react.default.useState(true);\n\n    const toggleAllTableColumns = table === _config.default.tableTypes.events ? toggleAllEventTableColumns : toggleAllVehicleTableColumns;\n    const toggleTableColumn = table === _config.default.tableTypes.events ? toggleEventTableColumn : toggleVehicleTableColumn;\n    const tableColumns = table === _config.default.tableTypes.events ? eventTableColumns : vehicleTableColumns;\n    const setTableColumns = table === _config.default.tableTypes.events ? setEventTableColumns : setVehicleTableColumns;\n    const updateColumn = table === _config.default.tableTypes.events ? updateEventColumn : updateVehicleColumn;\n    const filterConditions = tableColumns.filter(column => column.filterOp !== '');\n\n    const toggleEyeStatus = () => {\n      toggleAllTableColumns(!isEyeOpened);\n      setIsEyeOpened(!isEyeOpened);\n    };\n\n    const resetAllFilters = () => {\n      tableColumns.forEach(column => {\n        column.filterOp = '';\n        column.filterValue = '';\n      });\n      setTableColumns([...tableColumns]);\n    };\n\n    return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_sideDrawer.default, {\n      title: 'Playback Filters',\n      setFilterEnabled: setFilterEnabled,\n      className: 'playback-filter-settings-side-drawer'\n    }, _react.default.createElement(\"div\", {\n      className: \"g-side-drawer-body ember-view\"\n    }, _react.default.createElement(\"div\", {\n      className: \"side-drawer-subheader data-test-filter-side-bar-header\"\n    }, _react.default.createElement(\"span\", {\n      className: \"reorder-column\"\n    }), _react.default.createElement(\"span\", {\n      className: \"visibility-column\",\n      onClick: toggleEyeStatus\n    }, isEyeOpened ? _react.default.createElement(\"i\", {\n      className: \"fa fa-eye\",\n      \"aria-hidden\": \"true\"\n    }) : _react.default.createElement(\"i\", {\n      className: \"fa fa-eye-slash\",\n      \"aria-hidden\": \"true\"\n    })), _react.default.createElement(\"span\", {\n      className: \"header-label-column\"\n    }, \"Column\"), _react.default.createElement(\"span\", {\n      className: \"filter-type-column\"\n    }, \"Filter\"), _react.default.createElement(\"div\", null, _react.default.createElement(\"button\", {\n      className: \"header-button-outline data-test-clear-filter-button\",\n      disabled: filterConditions.length === 0,\n      onClick: () => resetAllFilters(),\n      type: \"button\"\n    }, \"Clear All\", ' ', _react.default.createElement(\"i\", {\n      className: \"fa fa-times-circle\",\n      \"aria-hidden\": \"true\"\n    })))), _react.default.createElement(\"div\", {\n      className: \"side-drawer-table-wrapper data-test-filter-side-bar-table\"\n    }, _react.default.createElement(\"div\", {\n      className: \"filter-settings-table ember-view\"\n    }, tableColumns.map(column => {\n      return _react.default.createElement(\"div\", {\n        key: `${table}_${column.id}`,\n        className: \"sortable-item filter-setting-row ember-view\"\n      }, _react.default.createElement(\"div\", {\n        role: \"button\",\n        tabIndex: \"0\",\n        \"data-sortable-handle\": \"\",\n        className: \"setting-icon ember-view\"\n      }), _react.default.createElement(\"input\", {\n        \"data-filter-checkbox-id\": \"playback-eventType active\",\n        className: \"display-checkbox\",\n        key: column.id,\n        value: column.value,\n        \"data-test-visibility-column\": \"\",\n        type: \"checkbox\",\n        checked: column.isChecked,\n        onChange: e => toggleTableColumn(column.id, e.target.checked)\n      }), _react.default.createElement(\"div\", {\n        className: \"setting-item\"\n      }, column.label), _react.default.createElement(\"div\", {\n        className: \"setting-item-type\"\n      }, _react.default.createElement(\"select\", {\n        disabled: !column.isChecked,\n        className: \"ember-power-select-trigger ember-basic-dropdown-trigger ember-view\",\n        value: column.filterOp,\n        onChange: e => {\n          column.filterOp = e.target.value;\n          updateColumn(column.id, column);\n        }\n      }, _react.default.createElement(\"option\", {\n        value: \"\",\n        disabled: true,\n        hidden: true\n      }), _react.default.createElement(\"option\", {\n        value: _panel.filterOperations.eq\n      }, \"=\"), _react.default.createElement(\"option\", {\n        value: _panel.filterOperations.neq\n      }, \"!=\"), _react.default.createElement(\"option\", {\n        value: _panel.filterOperations.contains\n      }, \"Contains\"), _react.default.createElement(\"option\", {\n        value: _panel.filterOperations.empty\n      }, \"Empty\"))), _react.default.createElement(\"div\", {\n        colSpan: \"2\",\n        className: \"setting-item-value\"\n      }, _react.default.createElement(\"input\", {\n        disabled: !column.filterOp || column.filterOp === _panel.filterOperations.empty,\n        value: column.filterValue,\n        onChange: e => {\n          column.filterValue = e.target.value;\n          updateColumn(column.id, column);\n        },\n        className: \"data-test-filterValue-column\",\n        type: \"text\"\n      })));\n    })), _react.default.createElement(\"span\", {\n      \"aria-live\": \"polite\",\n      className: \"visually-hidden\"\n    })))));\n  };\n\n  var _default = TableFilter;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map-filter\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback/loader\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map\"], function (_exports, _react, _mapFilter, _searchPanel, _playbackPanel, _playbackTables, _loader, _api, _panel, _map) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Playback = () => {\n    return _react.default.createElement(_api.APIContextProvider, null, _react.default.createElement(_panel.PanelContextProvider, null, _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"div\", {\n      className: \"playback-widget-header\"\n    }, _react.default.createElement(\"h5\", {\n      className: \"playback-widget-title\"\n    }, \"Playback\"), _react.default.createElement(\"div\", {\n      className: \"playback-widget-controls\"\n    }, _react.default.createElement(_mapFilter.default, null))), _react.default.createElement(\"div\", {\n      className: \"d-flex flex-column\"\n    }, _react.default.createElement(\"div\", {\n      className: \"playback-widget-body\"\n    }, _react.default.createElement(_loader.default, {\n      message: \"Please wait while the data is loading.\"\n    }), _react.default.createElement(_searchPanel.default, null), _react.default.createElement(_map.default, null))), _react.default.createElement(_playbackPanel.default, null), _react.default.createElement(\"div\", {\n      className: \"playback-widget-table\"\n    }, _react.default.createElement(_playbackTables.default, null)))));\n  };\n\n  var _default = Playback;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback/loader\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Loader = props => {\n    const {\n      message\n    } = props;\n    const {\n      isLoadingRvd\n    } = (0, _panel.usePanel)();\n    return _react.default.createElement(_react.default.Fragment, null, isLoadingRvd && _react.default.createElement(\"div\", {\n      className: \"confirm-dialog_rvd\",\n      style: {\n        padding: '5px'\n      }\n    }, _react.default.createElement(\"center\", null, _react.default.createElement(\"p\", {\n      style: {\n        color: 'white',\n        marginBottom: '8px'\n      }\n    }, message), _react.default.createElement(\"i\", {\n      style: {\n        color: 'white'\n      },\n      className: \"fa fa-circle-o-notch fa-spin fa-lg fa-fw\"\n    }), \" \")));\n  };\n\n  var _default = Loader;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/addressPicker\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/config/environment\", \"tomtom\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/useOutsideCanceler\", \"adept-iq/utils/map-provider\", \"adept-iq/utils/dds-map\"], function (_exports, _react, _session, _panel, _environment, _tomtom, _useOutsideCanceler, _mapProvider, _ddsMap) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const AddressPreview = props => {\n    const {\n      index,\n      location,\n      setSeletedLocation\n    } = props;\n    return _react.default.createElement(\"div\", {\n      onClick: () => setSeletedLocation(location),\n      className: `search-preview ${index === 0 ? 'start' : ''}`\n    }, _react.default.createElement(\"div\", {\n      className: \"first\"\n    }, _react.default.createElement(\"p\", {\n      className: \"name\"\n    }, location.address), _react.default.createElement(\"p\", {\n      className: \"sub-header\"\n    }, `${location.position.lat}, ${location.position.lon}`)));\n  };\n\n  const AddressPicker = () => {\n    const [suggestions, setSuggestions] = _react.default.useState([]);\n\n    const [text, setText] = _react.default.useState('');\n\n    const {\n      location,\n      setLocation\n    } = (0, _panel.usePanel)();\n\n    const {\n      bemapCenter,\n      bemapBoundingBox\n    } = _react.default.useContext(_session.SessionContext);\n\n    const setSeletedLocation = _location => {\n      setLocation(_location);\n      setSuggestions([]);\n    };\n\n    const fuzzySearch = async keyword => {\n      const limit = 10;\n      const idxSet = 'POI,PAD,Str,Xstr,Geo,Addr'; // default to point addresses\n\n      const center = bemapCenter || _environment.default.tomtom.search.center;\n      const radius = _environment.default.tomtom.search.radius;\n\n      if ((0, _mapProvider.isDdsMapProvider)()) {\n        let _ddsAddresses = [];\n\n        try {\n          _ddsAddresses = await (0, _ddsMap.autocompleteAddresses)(keyword, {\n            lat: center.lat,\n            lng: center.lon,\n            radius: (0, _ddsMap.radiusFromBoundingBox)(center, bemapBoundingBox)\n          });\n        } catch (e) {\n          console.warn('dds_map address search failed', e); // eslint-disable-line no-console\n        }\n\n        setSuggestions(_ddsAddresses.map(_address => {\n          const alias = _address.address.alias;\n          const addressLabel = alias ? `${alias}(${_address.address.freeformAddress})` : `${_address.address.freeformAddress}`;\n          return {\n            address: addressLabel,\n            position: _address.position\n          };\n        }));\n        return;\n      }\n\n      const _addresses = await _tomtom.default.fuzzySearch().key(_environment.default.tomtom.search.searchKey).query(keyword).countrySet(_environment.default.tomtom.search.countrySet).typeahead(false).limit(limit).center(center).radius(radius).idxSet(idxSet).go();\n\n      const _suggestions = _addresses.map(_address => {\n        const addressLabel = _address.poi ? `${_address.poi}(${_address.address.freeformAddress})` : `${_address.address.freeformAddress}`;\n        return {\n          address: addressLabel,\n          position: _address.position\n        };\n      });\n\n      setSuggestions(_suggestions);\n    };\n\n    const onChangeHandler = keyword => {\n      setText(keyword);\n\n      if (keyword !== '') {\n        fuzzySearch(keyword);\n      } else {\n        // Clear location\n        setLocation({});\n      }\n    };\n\n    _react.default.useEffect(() => {\n      if (!location || !location.address) {\n        setText('');\n        return;\n      }\n\n      setText(location.address);\n    }, [location]);\n\n    return _react.default.createElement(_useOutsideCanceler.default, {\n      cancel: () => setSuggestions([])\n    }, _react.default.createElement(\"div\", {\n      className: \"auto\"\n    }, _react.default.createElement(\"input\", {\n      className: \"search-bar\",\n      placeholder: \"Enter Address\",\n      value: text,\n      onChange: e => onChangeHandler(e.target.value)\n    }), suggestions.length > 0 && _react.default.createElement(\"div\", {\n      className: \"search-results\"\n    }, suggestions.map((suggestion, index) => {\n      return _react.default.createElement(AddressPreview, {\n        key: `${suggestion.address}-${index}`,\n        index: index,\n        location: suggestion,\n        setSeletedLocation: setSeletedLocation\n      });\n    }))));\n  };\n\n  var _default = AddressPicker;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/confirm-box\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const ConfirmBox = () => {\n    const {\n      confirmStack,\n      setConfirmStack\n    } = (0, _panel.usePanel)();\n\n    const [confirm, setConfirm] = _react.default.useState();\n\n    const [cancel, setCancel] = _react.default.useState();\n\n    const [message, setMessage] = _react.default.useState();\n\n    const _confirm = () => {\n      if (confirm) confirm();\n      confirmStack.shift();\n      setConfirmStack([...confirmStack]);\n    };\n\n    const _cancel = () => {\n      if (cancel) cancel();\n      confirmStack.shift();\n      setConfirmStack([...confirmStack]);\n    };\n\n    _react.default.useEffect(() => {\n      const firstElement = confirmStack.length > 0 ? confirmStack[0] : {};\n      setConfirm(firstElement.confirm);\n      setCancel(firstElement.cancel);\n      setMessage(firstElement.message);\n    }, [confirmStack]);\n\n    return _react.default.createElement(_react.default.Fragment, null, message && _react.default.createElement(\"div\", {\n      className: \"confirm-dialog top_0\"\n    }, _react.default.createElement(\"a\", {\n      href: \"#\",\n      className: \"dialog-close\",\n      onClick: () => _cancel()\n    }, \"X\"), _react.default.createElement(\"p\", null, message), _react.default.createElement(\"div\", {\n      className: \"popup-footer\"\n    }, _react.default.createElement(\"button\", {\n      className: \"confirm-cancel\",\n      onClick: () => _cancel()\n    }, \"Cancel\"), _react.default.createElement(\"button\", {\n      className: \"confirm-submit\",\n      type: \"button\",\n      onClick: () => _confirm()\n    }, \"Confirm\"))));\n  };\n\n  var _default = ConfirmBox;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/datetimePicker\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"react-playback-components-library\", \"adept-iq/config/environment\", \"moment\"], function (_exports, _react, _panel, _session, _api, _reactPlaybackComponentsLibrary, _environment, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const IqFlatPickr = _reactPlaybackComponentsLibrary.default.IqFlatPickr;\n\n  const DatetimePicker = () => {\n    const {\n      date,\n      setDate,\n      startTime,\n      setStartTime,\n      endTime,\n      setEndTime,\n      canSubmit,\n      searchMode,\n      setIsLoadingRvd,\n      setSelectedRvd\n    } = (0, _panel.usePanel)();\n\n    const {\n      token,\n      providers,\n      notifications\n    } = _react.default.useContext(_session.SessionContext);\n\n    const {\n      submitDateTime,\n      setRvdData,\n      setEventData,\n      setVehicleData,\n      query,\n      setQuery\n    } = (0, _api.useAPI)();\n\n    const timezone = _moment.default.tz.guess();\n\n    const maxDate = new Date(); // Allow user to select today\n    // maxDate.setDate(maxDate.getDate() - 1);\n\n    const submit = () => {\n      setRvdData([]);\n      setEventData([]);\n      setVehicleData([]);\n      setSelectedRvd({});\n      setIsLoadingRvd(true);\n\n      if (query) {\n        query.cancel();\n        setQuery(null);\n      }\n\n      const callback = () => setIsLoadingRvd(false);\n\n      const utcStartTime = (0, _moment.default)(startTime).toISOString();\n      const utcEndTime = (0, _moment.default)(endTime).toISOString();\n      submitDateTime(utcStartTime, utcEndTime, timezone, token, providers, notifications, searchMode, callback);\n    };\n\n    _react.default.useEffect(() => {\n      if (startTime && endTime && (0, _moment.default)(endTime).isSameOrBefore((0, _moment.default)(startTime))) {\n        const _endTime = (0, _moment.default)(startTime).add(59, 'seconds').toISOString();\n\n        setEndTime(_endTime);\n      }\n    }, [startTime]);\n\n    return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(\"div\", {\n      className: \"form-panel-header\"\n    }, _react.default.createElement(\"span\", {\n      className: \"form-panel-header-caret\"\n    }, _react.default.createElement(\"svg\", {\n      width: \"16\",\n      height: \"16\",\n      viewBox: \"0 0 16 16\",\n      xmlns: \"http://www.w3.org/2000/svg\",\n      className: \"icon-block\"\n    }, _react.default.createElement(\"title\", null, \"Combined Shape Copy\"), _react.default.createElement(\"path\", {\n      d: \"M7.992 0C12.416 0 16 3.584 16 8s-3.584 8-8.008 8C3.576 16 0 12.416 0 8s3.576-8 7.992-8zM8 1.6A6.398 6.398 0 001.6 8c0 3.536 2.864 6.4 6.4 6.4 3.536 0 6.4-2.864 6.4-6.4 0-3.536-2.864-6.4-6.4-6.4zM8.4 4v4.2l3.6 2.136-.6.984L7.2 8.8V4h1.2z\",\n      fill: \"#303E44\",\n      fillRule: \"evenodd\"\n    }))), _react.default.createElement(\"h2\", {\n      className: \"form-panel-title \"\n    }, \"Select Date and Time range\")), _react.default.createElement(\"div\", {\n      className: \"form-panel-body\"\n    }, _react.default.createElement(\"table\", {\n      className: \"form-panel-form mb-0\"\n    }, _react.default.createElement(\"tbody\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"td\", {\n      className: \"td:first-child left\"\n    }, \"Date\"), _react.default.createElement(\"td\", null, _react.default.createElement(IqFlatPickr, {\n      placeholder: \"MM/DD/YYYY\",\n      className: \"virtualized_select\",\n      onChange: selectedDates => setDate(selectedDates[0]),\n      options: {\n        maxDate,\n        dateFormat: `${_environment.default.dateTimeFormat.dateFlatPickr}`\n      },\n      value: date\n    }))), _react.default.createElement(\"tr\", null, _react.default.createElement(\"td\", {\n      className: \"td:first-child left\"\n    }, \"Start Time\"), _react.default.createElement(\"td\", null, _react.default.createElement(IqFlatPickr, {\n      key: date,\n      onChange: times => setStartTime(times[0]),\n      placeholder: \"HH:MM\",\n      options: {\n        minuteIncrement: 1,\n        allowInput: false,\n        noCalendar: true,\n        // eslint-disable-next-line camelcase\n        time_24hr: true,\n        defaultHour: 0,\n        placeholder: 'HH:MM',\n        enableTime: true,\n        dateFormat: `${_environment.default.dateTimeFormat.timeFlatPickr}`,\n        defaultDate: date\n      },\n      value: startTime\n    }))), _react.default.createElement(\"tr\", null, _react.default.createElement(\"td\", {\n      className: \"td:first-child left\"\n    }, \"End Time\"), _react.default.createElement(\"td\", null, _react.default.createElement(IqFlatPickr, {\n      key: date,\n      onChange: times => {\n        const _endTime = (0, _moment.default)(times[0]).add(59, 'seconds').toISOString();\n\n        setEndTime(_endTime);\n      },\n      placeholder: \"HH:MM\",\n      options: {\n        locale: 'en',\n        minuteIncrement: 1,\n        allowInput: false,\n        noCalendar: true,\n        // eslint-disable-next-line camelcase\n        time_24hr: true,\n        defaultHour: 0,\n        placeholder: 'HH:MM',\n        enableTime: true,\n        dateFormat: `${_environment.default.dateTimeFormat.timeFlatPickr}`,\n        defaultDate: date,\n        minDate: startTime\n      },\n      value: endTime\n    })))))), _react.default.createElement(\"div\", {\n      className: \"form-row mt-4\"\n    }, _react.default.createElement(\"div\", {\n      className: \"btn-group\"\n    }, _react.default.createElement(\"button\", {\n      type: \"button\",\n      className: \"btn default\",\n      disabled: !canSubmit,\n      onClick: () => submit()\n    }, \"Submit Date/Time\"))));\n  };\n\n  var _default = DatetimePicker;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchModeSwitcher\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/datetimePicker\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchByVehicle\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchByLocation\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/confirm-box\", \"moment\"], function (_exports, _react, _panel, _session, _api, _searchModeSwitcher, _datetimePicker, _searchByVehicle, _searchByLocation, _confirmBox, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const SearchPanel = () => {\n    const {\n      token,\n      providers,\n      notifications\n    } = _react.default.useContext(_session.SessionContext);\n\n    const timezone = _moment.default.tz.guess();\n\n    const {\n      setRvdData,\n      doSearch,\n      setEventData,\n      setVehicleData,\n      setIsRvdPreloaded,\n      query,\n      setQuery\n    } = (0, _api.useAPI)();\n    const {\n      searchMode,\n      date,\n      setDate,\n      startTime,\n      setStartTime,\n      endTime,\n      setEndTime,\n      setCanSubmit,\n      selectedRvd,\n      setSelectedRvd,\n      isLoadingEvent,\n      isLoadingVehicle,\n      setIsLoadingEvent,\n      setIsLoadingVehicle,\n      setLocation,\n      location,\n      radiusInFeet,\n      radiusInMiles,\n      radiusMode,\n      setRadiusInMiles,\n      setRadiusInFeet,\n      setIsRunning,\n      setIsStarted,\n      setIsPaused,\n      setIsEnded,\n      setSpeedMode,\n      setIsPinCursor\n    } = (0, _panel.usePanel)();\n\n    const resetAll = () => {\n      setLocation({});\n      setDate();\n      setStartTime();\n      setEndTime();\n      setCanSubmit(false);\n      setRvdData([]);\n      setEventData([]);\n      setVehicleData([]);\n      setSelectedRvd({});\n      setRadiusInMiles(0);\n      setRadiusInFeet(0);\n      setIsRvdPreloaded(false);\n      setIsRunning(false);\n      setIsStarted(false);\n      setIsPaused(false);\n      setIsEnded(false);\n      setSpeedMode(_panel.speedModes.x1);\n      setIsPinCursor(false);\n\n      if (query) {\n        query.cancel();\n        setQuery(null);\n      }\n\n      if (isLoadingEvent || isLoadingVehicle) {\n        setIsLoadingEvent(false);\n        setIsLoadingVehicle(false);\n      }\n    };\n\n    const searchEvents = () => {\n      let callback = () => setIsLoadingEvent(false);\n\n      setEventData([]);\n      setVehicleData([]);\n\n      if (searchMode === _panel.searchModes.byVehicle) {\n        setIsLoadingEvent(true);\n      } else {\n        setSelectedRvd({});\n        setIsLoadingVehicle(true);\n\n        callback = () => {\n          setIsLoadingVehicle(false);\n        };\n      }\n\n      const radius = radiusMode === _panel.radiusModes.miles ? radiusInMiles : radiusInFeet;\n      const feetOrMile = radiusMode === _panel.radiusModes.miles ? 'mi' : 'ft';\n      doSearch(startTime, endTime, timezone, token, providers, notifications, searchMode, selectedRvd, location, radius, feetOrMile, callback);\n    };\n\n    _react.default.useEffect(() => {\n      if (!date) {\n        setCanSubmit(false);\n        return;\n      }\n\n      const d = new Date(date);\n\n      const _startTime = (0, _moment.default)(d).startOf('day').toISOString();\n\n      const _endTime = (0, _moment.default)(d).endOf('day').toISOString();\n\n      setStartTime(_startTime);\n      setEndTime(_endTime);\n      setCanSubmit(true);\n    }, [date]);\n\n    _react.default.useEffect(() => {\n      resetAll();\n    }, [searchMode, providers]);\n\n    return _react.default.createElement(\"div\", {\n      className: \"flex-body-left\"\n    }, _react.default.createElement(_confirmBox.default, null), _react.default.createElement(_searchModeSwitcher.default, null), _react.default.createElement(\"div\", {\n      className: \"playback-widget-form\"\n    }, _react.default.createElement(\"div\", {\n      className: \"form-container\"\n    }, _react.default.createElement(_datetimePicker.default, null), _react.default.createElement(\"div\", null, _react.default.createElement(\"hr\", null)), searchMode === _panel.searchModes.byVehicle ? _react.default.createElement(_searchByVehicle.default, null) : _react.default.createElement(_searchByLocation.default, null), _react.default.createElement(\"div\", {\n      className: \"form-row mt-4\"\n    }, _react.default.createElement(\"div\", {\n      className: \"btn-group\"\n    }, _react.default.createElement(\"button\", {\n      className: \"btn default\",\n      type: \"button\",\n      onClick: () => {\n        resetAll();\n      }\n    }, \"Clear\"), _react.default.createElement(\"button\", {\n      type: \"button\",\n      disabled: !selectedRvd.vehicleId && !location.position || location.position && radiusInMiles <= 0 && radiusInFeet <= 0,\n      onClick: () => {\n        searchEvents();\n      },\n      className: \"btn default\"\n    }, \"Search\"))))));\n  };\n\n  var _default = SearchPanel;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchByLocation\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/addressPicker\"], function (_exports, _react, _api, _panel, _addressPicker) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const SearchByLocation = () => {\n    const {\n      isRvdPreloaded\n    } = (0, _api.useAPI)();\n    const {\n      setIsPinCursor,\n      setLocation,\n      radiusInFeet,\n      setRadiusInFeet,\n      radiusInMiles,\n      setRadiusInMiles,\n      radiusMode,\n      setRadiusMode\n    } = (0, _panel.usePanel)();\n\n    const resetAll = () => {\n      setLocation({});\n      setRadiusInMiles(0);\n      setRadiusInFeet(0);\n    };\n\n    _react.default.useEffect(() => {\n      if (!isRvdPreloaded) {\n        resetAll();\n      }\n    }, [isRvdPreloaded]);\n\n    return _react.default.createElement(\"fieldset\", {\n      disabled: !isRvdPreloaded\n    }, _react.default.createElement(\"div\", {\n      className: \"form-panel-header\"\n    }, _react.default.createElement(\"span\", {\n      className: \"form-panel-header-caret\"\n    }, _react.default.createElement(\"svg\", {\n      width: \"11\",\n      height: \"15\",\n      viewBox: \"0 0 11 15\",\n      xmlns: \"http://www.w3.org/2000/svg\",\n      className: \"icon-block\"\n    }, _react.default.createElement(\"title\", null, \"Combined Shape\"), _react.default.createElement(\"path\", {\n      d: \"M5.5 0C8.538 0 11 2.223 11 5.928 11 9.634 6.009 15 5.5 15 4.991 15 0 10.29 0 5.928l.001-.158C.001 2.223 2.5 0 5.5 0zm0 3.75c-1.105 0-2 .84-2 1.875 0 1.036.895 1.875 2 1.875s2-.84 2-1.875c0-1.036-.895-1.875-2-1.875z\",\n      fill: \"#263238\",\n      fillRule: \"evenodd\"\n    }))), _react.default.createElement(\"h2\", {\n      className: \"form-panel-title\"\n    }, \"Select by Location\")), _react.default.createElement(\"div\", {\n      className: \"form-panel-body\"\n    }, _react.default.createElement(\"table\", {\n      className: \"form-panel-form mb-0\"\n    }, _react.default.createElement(\"tbody\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"td\", {\n      className: \"td:first-child left\"\n    }, \"Address\"), _react.default.createElement(\"td\", {\n      className: \"edit-cell\"\n    }, _react.default.createElement(\"div\", {\n      className: \"d-flex align-items-center\"\n    }, _react.default.createElement(_addressPicker.default, null), _react.default.createElement(\"button\", {\n      onClick: () => setIsPinCursor(true),\n      className: \"btnbtn-outline-secondaryplaces-inline-button\"\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-map-marker\",\n      \"aria-hidden\": \"true\"\n    })))), _react.default.createElement(\"td\", {\n      className: \"button-cell\"\n    })), _react.default.createElement(\"tr\", null, _react.default.createElement(\"td\", {\n      className: \"vertical-align-top\"\n    }, \"Radius\"), _react.default.createElement(\"td\", null, _react.default.createElement(\"div\", {\n      className: \"radius\"\n    }, _react.default.createElement(\"input\", {\n      type: \"radio\",\n      value: \"miles\",\n      checked: radiusMode === _panel.radiusModes.miles,\n      onChange: () => {\n        setRadiusMode(_panel.radiusModes.miles);\n        setRadiusInFeet(0);\n      }\n    }), _react.default.createElement(\"label\", {\n      htmlFor: \"checkbox\"\n    }), _react.default.createElement(\"input\", {\n      placeholder: \"0\",\n      type: \"text\",\n      id: \"miles\",\n      disabled: radiusMode === _panel.radiusModes.feet,\n      onChange: e => {\n        const r = e.target.value.replace(/\\D/g, '');\n        setRadiusInMiles(r);\n      },\n      value: radiusInMiles\n    }), \"miles\"), _react.default.createElement(\"div\", {\n      className: \"radius mt-10\"\n    }, _react.default.createElement(\"input\", {\n      type: \"radio\",\n      value: \"feet\",\n      checked: radiusMode === _panel.radiusModes.feet,\n      onChange: () => {\n        setRadiusMode(_panel.radiusModes.feet);\n        setRadiusInMiles(0);\n      }\n    }), _react.default.createElement(\"label\", {\n      htmlFor: \"checkbox\"\n    }), _react.default.createElement(\"input\", {\n      placeholder: \"0\",\n      type: \"text\",\n      id: \"feet\",\n      disabled: radiusMode === _panel.radiusModes.miles,\n      onChange: e => {\n        const r = e.target.value.replace(/\\D/g, '');\n        setRadiusInFeet(r);\n      },\n      value: radiusInFeet\n    }), \"feet\")))))));\n  };\n\n  var _default = SearchByLocation;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchByVehicle\", [\"exports\", \"react\", \"react-playback-components-library\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/usePrevious\"], function (_exports, _react, _reactPlaybackComponentsLibrary, _api, _panel, _usePrevious) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const IqSelect = _reactPlaybackComponentsLibrary.default.IqSelect;\n\n  const SearchByVehicle = () => {\n    const {\n      rvdData\n    } = (0, _api.useAPI)();\n    const {\n      setSelectedRvd\n    } = (0, _panel.usePanel)();\n\n    const [providerOptions, setProviderOptions] = _react.default.useState([]);\n\n    const [vehicleOptions, setVehicleOptions] = _react.default.useState([]);\n\n    const [selectedProvider, setSelectedProvider] = _react.default.useState(null);\n\n    const [selectedVehicle, setSelectedVehicle] = _react.default.useState(null);\n\n    const prevStates = (0, _usePrevious.default)({\n      selectedProvider\n    });\n    const providers = new Set();\n    rvdData.forEach(rvd => {\n      if (rvd.vehicle && rvd.driver && rvd.route) {\n        if (rvd.vehicle.providername) {\n          providers.add(rvd.vehicle.providername);\n        }\n      }\n    });\n\n    const _providerOptions = [...providers].reduce((options, provider) => {\n      options.push({\n        value: provider,\n        label: provider\n      });\n      return options;\n    }, []);\n\n    const _vehicleOptions = [...rvdData].reduce((options, rvd) => {\n      options.push({\n        value: `${rvd.vehicleid}-${rvd.routeid}`,\n        label: `${rvd.route.trackingid} / ${rvd.vehicle.callsign} / ${rvd.driver.badgenumber}`,\n        vehicleId: rvd.vehicleid,\n        vehicleName: rvd.vehicle.callsign,\n        driverId: rvd.driverid,\n        badgenumber: rvd.driver.badgenumber,\n        routeId: rvd.routeid,\n        routeName: rvd.route.trackingid,\n        provider: rvd.vehicle.providername\n      });\n      return options;\n    }, []);\n\n    const resetAll = () => {\n      setProviderOptions(_providerOptions);\n      setVehicleOptions(_vehicleOptions);\n      setSelectedProvider(null);\n      setSelectedVehicle(null);\n      setSelectedRvd({});\n    };\n\n    _react.default.useEffect(() => {\n      resetAll();\n    }, [rvdData]);\n\n    _react.default.useEffect(() => {\n      if (!selectedProvider) return;\n      setVehicleOptions(_vehicleOptions.filter(o => !selectedProvider || o.provider === selectedProvider.value)); // Avoid circular updates, only clear up selections when prevStates provider is not matching\n\n      if (prevStates && prevStates.selectedProvider && prevStates.selectedProvider.value && prevStates.selectedProvider.value !== selectedProvider.value) {\n        setSelectedVehicle(null);\n      }\n    }, [selectedProvider]);\n\n    _react.default.useEffect(() => {\n      if (!selectedVehicle) {\n        setSelectedRvd({});\n        return;\n      }\n\n      setSelectedRvd(selectedVehicle);\n\n      if (selectedVehicle.value) {\n        const _selectedProvider = _providerOptions.find(o => o.value === selectedVehicle.provider);\n\n        setSelectedProvider(_selectedProvider);\n      }\n    }, [selectedVehicle]);\n\n    return _react.default.createElement(\"fieldset\", {\n      disabled: rvdData.length === 0\n    }, _react.default.createElement(\"div\", {\n      className: \"form-panel-header\"\n    }, _react.default.createElement(\"span\", {\n      className: \"form-panel-header-caret\"\n    }, _react.default.createElement(\"svg\", {\n      width: \"15\",\n      height: \"13\",\n      viewBox: \"0 0 15 13\",\n      xmlns: \"http://www.w3.org/2000/svg\",\n      className: \"icon-block\"\n    }, _react.default.createElement(\"title\", null, \"Shape Copy\"), _react.default.createElement(\"path\", {\n      d: \"M12.736.808A1.195 1.195 0 0011.6 0H2.8c-.528 0-.968.336-1.136.808L0 5.6V12c0 .44.36.8.8.8h.8c.44 0 .8-.36.8-.8v-.8H12v.8c0 .44.36.8.8.8h.8c.44 0 .8-.36.8-.8V5.6L12.736.808zM2.8 8.8c-.664 0-1.2-.536-1.2-1.2 0-.664.536-1.2 1.2-1.2.664 0 1.2.536 1.2 1.2 0 .664-.536 1.2-1.2 1.2zm8.8 0c-.664 0-1.2-.536-1.2-1.2 0-.664.536-1.2 1.2-1.2.664 0 1.2.536 1.2 1.2 0 .664-.536 1.2-1.2 1.2zm-10-4l1.2-3.6h8.8l1.2 3.6H1.6z\",\n      fill: \"#303E44\",\n      fillRule: \"evenodd\"\n    }))), _react.default.createElement(\"h2\", {\n      className: \"form-panel-title\"\n    }, \"Select Vehicle\")), _react.default.createElement(\"div\", {\n      className: \"form-panel-body\"\n    }, _react.default.createElement(\"table\", {\n      className: \"form-panel-form mb-0\"\n    }, _react.default.createElement(\"tbody\", null, _react.default.createElement(\"tr\", null, _react.default.createElement(\"td\", {\n      className: \"td:first-child left\"\n    }, \"Provider\"), _react.default.createElement(\"td\", null, _react.default.createElement(IqSelect, {\n      className: \"virtualized_select\",\n      optionHeight: () => ({\n        option: {\n          height: '20px'\n        }\n      }),\n      theme: theme => ({ ...theme,\n        colors: { ...theme.colors,\n          primary25: '#689f38'\n        }\n      }),\n      onChange: option => {\n        option.style = {\n          background: 'green'\n        };\n        setSelectedProvider(option);\n      },\n      style: {\n        background: 'red'\n      },\n      value: selectedProvider,\n      placeholder: \"Select Provider\",\n      options: providerOptions\n    }))))), _react.default.createElement(\"br\", null), _react.default.createElement(\"span\", null, \"Route / Vehicle / Driver\"), _react.default.createElement(IqSelect, {\n      className: \"virtualized_select_rvd\",\n      onChange: option => {\n        setSelectedVehicle(option);\n      },\n      theme: theme => ({ ...theme,\n        colors: { ...theme.colors,\n          primary25: '#689f38'\n        }\n      }),\n      value: selectedVehicle,\n      placeholder: \"Select Route / Vehicle / Driver\",\n      filterOption: (option, filter) => option.label.includes(filter),\n      options: vehicleOptions\n    }), _react.default.createElement(\"br\", null), _react.default.createElement(\"span\", null, \"Selected Vehicle\"), _react.default.createElement(\"div\", null, _react.default.createElement(\"input\", {\n      disabled: true,\n      value: selectedVehicle?.vehicleName || ''\n    }))));\n  };\n\n  var _default = SearchByVehicle;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/search-panel/searchModeSwitcher\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const SearchModeSwitcher = () => {\n    const {\n      searchMode,\n      setSearchMode,\n      confirmStack,\n      setConfirmStack\n    } = (0, _panel.usePanel)();\n\n    const switchMode = mode => {\n      if (searchMode === mode) return;\n      const confirmBox = {\n        id: 'switchMode',\n        message: mode === _panel.searchModes.byVehicle ? 'Switching to \"Search by Vehicle\" will reset the playback function. Are you sure you want to switch to \"Search by Vehicle\"?' : 'Switching to \"Search by Location\" will reset the playback function. Are you sure you want to switch to \"Search by Location\"?',\n        confirm: () => () => setSearchMode(mode),\n        cancel: () => () => {}\n      };\n\n      if (!confirmStack.find(box => box.id === 'switchMode')) {\n        setConfirmStack([...confirmStack, confirmBox]);\n      }\n    };\n\n    return _react.default.createElement(\"nav\", {\n      className: \"playback-widget-tabs\"\n    }, _react.default.createElement(\"button\", {\n      id: \"searchByVehicle\",\n      className: searchMode === _panel.searchModes.byVehicle ? 'tab active' : 'tab',\n      onClick: () => switchMode(_panel.searchModes.byVehicle),\n      type: \"button\"\n    }, \"Search by Vehicle\"), _react.default.createElement(\"button\", {\n      id: \"searchByLocation\",\n      className: searchMode === _panel.searchModes.byLocation ? 'tab active' : 'tab',\n      onClick: () => switchMode(_panel.searchModes.byLocation),\n      type: \"button\"\n    }, \"Search by Location\"));\n  };\n\n  var _default = SearchModeSwitcher;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer/index\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer/shrink\"], function (_exports, _react, _shrink) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const SideDrawer = props => {\n    const [isShrinked, setIsShrinked] = _react.default.useState(false);\n\n    const {\n      setFilterEnabled,\n      className\n    } = props;\n    return _react.default.createElement(_react.default.Fragment, null, isShrinked && _react.default.createElement(_shrink.default, {\n      setIsShrinked: setIsShrinked\n    }), !isShrinked && _react.default.createElement(\"div\", {\n      className: \"ember-modal-dialog ember-modal-dialog side-drawer-modal ember-modal-dialog-target-attachment-left emd-target-attachment-left ember-view\"\n    }, _react.default.createElement(\"div\", {\n      className: `${className} g-side-drawer ember-view`\n    }, _react.default.createElement(\"div\", {\n      className: \"g-side-drawer-header ember-view\"\n    }, _react.default.createElement(\"h1\", {\n      className: \"g-side-drawer-header-title\"\n    }, props.title), _react.default.createElement(\"div\", {\n      className: \"g-side-drawer-header-buttons\"\n    }, _react.default.createElement(\"button\", {\n      className: \"g-side-drawer-header-button\",\n      title: \"Shrink\",\n      \"data-test-toggle-side-drawer\": \"\",\n      onClick: () => setIsShrinked(true)\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-2x fa-angle-double-left\",\n      \"aria-hidden\": \"true\"\n    })), _react.default.createElement(\"button\", {\n      className: \"g-side-drawer-header-button\",\n      onClick: () => setFilterEnabled(false),\n      \"data-test-close-side-drawer\": \"\",\n      title: \"Close\"\n    }, _react.default.createElement(\"i\", {\n      className: \"fa fa-2x fa-times\",\n      \"aria-hidden\": \"true\"\n    })))), _react.default.createElement(\"div\", {\n      className: \"g-side-drawer-body ember-view\"\n    }, props.children))));\n  };\n\n  var _default = SideDrawer;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/components/side-drawer/shrink\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const Shrink = props => {\n    const {\n      setIsShrinked\n    } = props;\n    return _react.default.createElement(\"div\", {\n      className: \"ember-modal-dialog side-drawer-modal side-drawer-shrunken data-test-shrunken-side-drawer ember-modal-dialog-target-attachment-left emd-target-attachment-left ember-view\"\n    }, _react.default.createElement(\"div\", {\n      className: \"side-drawer-buttons btn-toolbar justify-content-between side-drawer-shrink-btn\"\n    }, _react.default.createElement(\"button\", {\n      className: \"side-drawer-button\",\n      onClick: () => setIsShrinked(false),\n      \"data-test-toggle-side-drawer\": \"\"\n    }, _react.default.createElement(\"span\", null, _react.default.createElement(\"i\", {\n      className: \"fa fa-angle-double-right\",\n      \"aria-hidden\": \"true\"\n    })))));\n  };\n\n  var _default = Shrink;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/context/api\", [\"exports\", \"react\", \"adept-iq/config/api-urls\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\"], function (_exports, _react, _apiUrls, _panel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.useAPI = _exports.APIContextProvider = void 0;\n  const MAX_RETRY = 150;\n  const PAGE_LIMIT = 10000;\n  const DELAY = 2000;\n  const PAGE_DELAY = 2000;\n\n  const pause = async function () {\n    let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n    return new Promise(resolve => setTimeout(resolve, delay));\n  };\n\n  const retrier = async function* (_ref) {\n    let {\n      attempts = Infinity,\n      delay = 100\n    } = _ref;\n\n    for (let i = 0; i < attempts; i++) {\n      yield i;\n      await pause(delay);\n    }\n  };\n\n  const apiCall = (url, token) => {\n    try {\n      const apiHost = _apiUrls.API.playbackNewService.host;\n      const apiUrl = apiHost + url;\n      const controller = new AbortController();\n      const signal = controller.signal;\n      const promise = new Promise(async (resolve, reject) => {\n        try {\n          const response = await fetch(apiUrl, {\n            headers: {\n              Authorization: `Bearer ${token}`\n            },\n            signal\n          });\n          const data = await response.json();\n          resolve(data);\n        } catch (e) {\n          reject(e);\n        }\n      });\n\n      promise.cancel = () => controller.abort();\n\n      return promise;\n    } catch (err) {\n      // Simulate null data.\n      return Promise.resolve({\n        data: []\n      });\n    }\n  };\n\n  const APIContext = _react.default.createContext();\n\n  const APIContextProvider = _ref2 => {\n    let {\n      children\n    } = _ref2;\n\n    const [rvdData, setRvdData] = _react.default.useState([]);\n\n    const [rvdToDisplay, setRvdToDisplay] = _react.default.useState({});\n\n    const [eventData, setEventData] = _react.default.useState([]);\n\n    const [vehicleData, setVehicleData] = _react.default.useState([]);\n\n    const [isRvdPreloaded, setIsRvdPreloaded] = _react.default.useState(false);\n\n    const [query, setQuery] = _react.default.useState(false);\n\n    const eventTypeTranslater = function (actionType, eventType) {\n      let isRouteBreak = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      switch (actionType) {\n        case 'accept':\n          return 'Accept';\n\n        case 'arrive':\n          return 'Arrive';\n\n        case 'depart':\n          return 'Depart';\n\n        case 'pullOut':\n          return 'Start Route';\n\n        case 'pullIn':\n          return 'End Route';\n\n        case 'signOn':\n          return 'Sign On';\n\n        case 'signOff':\n          return 'Sign Off';\n\n        case 'preCheckDone':\n          return 'Pre Check';\n\n        case 'postCheckDone':\n          return 'Post Check';\n\n        case 'powerOn':\n          return 'Power On';\n\n        case 'leaveGarageSignOff':\n          return 'Moved Without Sign On';\n\n        case 'commRestored':\n          return 'Communication Restored';\n\n        case 'commFailure':\n          return 'Communication Failure';\n\n        case 'onBreak':\n          return 'Start Break';\n\n        case 'offBreak':\n          return 'End Break';\n\n        case 'applicationRestart':\n          return 'App Restarted';\n\n        case 'signOnFailure':\n          return 'Sign On Failed';\n\n        case 'noShow':\n          return 'Stop No Showed';\n\n        case 'noShowRequest':\n          return ' No Show Request';\n\n        case 'noShowCancelled':\n          return ' No Show Cancelled';\n\n        case 'noShowDeclined':\n          return ' No Show Declined';\n\n        case 'removed':\n          if (isRouteBreak) return 'Break Removed';\n          return 'Stop Removed';\n\n        case 'added':\n          if (isRouteBreak) return 'Break Added';\n          return 'Stop Added';\n\n        case 'emergencyOn':\n          return 'Emergency Initiated';\n\n        case 'emergencyOff':\n          return 'Emergency Canceled by Driver';\n\n        case 'emergencyClear':\n          return 'Emergency Resolved';\n\n        case 'emergencyAck':\n          return 'Emergency Acknowledged';\n\n        case 'emergencyCancel':\n          return 'Emergency Canceled By Dispatch';\n\n        case 'dispatchToDriverMessage':\n          return 'Message From Dispatch';\n\n        case 'driverToDispatchMessage':\n          return 'Message From Driver';\n\n        case 'undoNoShow':\n          return 'Unperform NoShow';\n\n        default:\n          if (eventType === 'avl') {\n            return 'GPS Ping';\n          }\n\n          return actionType;\n      }\n    };\n\n    const transformEvents = (events, selectedRvd, pageNo, lastSection) => {\n      let section = lastSection;\n      return events.map((event, _index) => {\n        const pick = event.stoptype === 'P' ? 'Pick' : null;\n        const drop = event.stoptype === 'D' ? 'Drop' : null;\n        const breakStop = event.event?.routebreakid ? 'Break' : null;\n        const speedInMeterPerSecond = event.speed || event.event?.speed;\n        const speedInMilesPerHour = speedInMeterPerSecond ? 2.23694 * Number(speedInMeterPerSecond) : null;\n        const eventType = eventTypeTranslater(event.event?.actiontype, event.eventtype, !!event.event?.routebreakid);\n        let stopAddress = 'N/A';\n\n        if (eventType === 'Start Route') {\n          stopAddress = event.route?.startaddress[0].formattedaddress;\n        } else if (eventType === 'End Route') {\n          stopAddress = event.route?.endaddress[0].formattedaddress;\n        } else if (event.routebreak?.address) {\n          stopAddress = event.routebreak?.address[0].formattedaddress;\n        } else if (event.stoppoint?.address) {\n          stopAddress = event.stoppoint?.address[0].formattedaddress;\n        }\n\n        if (event.stoptype === 'P' || event.stoptype === 'D') section = section + 1;\n\n        if (event.locLat === 40.0 && event.locLng === -73.0) {\n          // Special case to handle 'bogus' lat/lng\n          event.locLat = null;\n          event.locLng = null;\n        }\n\n        return { ...event,\n          _index: pageNo * PAGE_LIMIT + _index,\n          section,\n          // Below are transformed values for table display\n          localTime: new Date(event.timestamp).toLocaleTimeString(),\n          displayLat: event.locLat ? Number.parseFloat(event.locLat).toFixed(6) : 'N/A',\n          displayLng: event.locLng ? Number.parseFloat(event.locLng).toFixed(6) : 'N/A',\n          vehicleId: event.vehicle?.callsign || selectedRvd.vehicleName,\n          routeName: event.route?.trackingid || 'N/A',\n          passengerId: event.rider?.bookingclientid || 'N/A',\n          passengerFirstName: event.rider?.firstname || 'N/A',\n          passengerLastName: event.rider?.lastname || 'N/A',\n          eventType: eventType,\n          actionType: event.event?.actiontype,\n          stopType: pick || drop || breakStop || 'N/A',\n          stopAddress,\n          vehicleSpeed: speedInMilesPerHour ? Number.parseFloat(speedInMilesPerHour).toFixed(0) : '0'\n        };\n      });\n    };\n\n    const transformVehicles = vehicles => {\n      return vehicles.map(data => {\n        return { ...data,\n          displayLat: data.locLat ? Number.parseFloat(data.locLat).toFixed(6) : 'N/A',\n          displayLng: data.locLng ? Number.parseFloat(data.locLng).toFixed(6) : 'N/A',\n          vehicleId: data.vehicleid,\n          vehicleName: data.vehicle?.callsign || 'N/A',\n          driverId: data.driver?.id,\n          driverName: data.driver?.firstname || 'N/A',\n          badgenumber: data.driver?.badgenumber || 'N/A',\n          routeId: data.route?.id,\n          routeName: data.route?.trackingid || 'N/A',\n          provider: data.vehicle?.providername || 'N/A',\n          otp: data.route?.otpvalue || 'N/A',\n          isChecked: false\n        };\n      });\n    };\n\n    const filterVehiclesByProviders = (vehicles, providers) => {\n      const providerIds = providers.map(p => p.id);\n      const validVehicles = vehicles.filter(v => providerIds.includes(v.provider));\n      return validVehicles.map(v => {\n        return { ...v,\n          totalcount: validVehicles.length\n        };\n      });\n    };\n\n    const getRvdByVehicle = async (startTime, endTime, timezone, token, providers) => {\n      let apiUrl = `/route-vehicle-driver?startdate=${startTime}&enddate=${endTime}&timezone=${timezone}`;\n      const providerIds = providers.map(p => p.id); // eslint-disable-next-line no-unused-vars\n\n      for await (const _ of retrier({\n        attempts: 4,\n        delay: DELAY\n      })) {\n        const response = await apiCall(apiUrl, token);\n\n        if (response && response.data && response.data.length > 0) {\n          if (!response.data[0].QueryExecutionId) {\n            // TODO: check why it has recordtype === 'avl';\n            const rvds = response.data.filter(rvd => rvd.recordtype === 'rvd').filter(rvd => providerIds.includes(rvd.vehicle?.providername));\n            setRvdData(rvds);\n            break;\n          }\n\n          apiUrl = `/route-vehicle-driver?startdate=${startTime}&enddate=${endTime}&timezone=${timezone}&queryExecutionId=${response.data[0].QueryExecutionId}`;\n        } else if (response && response.data && response.data.length === 0) {\n          break;\n        }\n      }\n    };\n\n    const getVehicleByLocation = async (startTime, endTime, location, radius, feetOrMile, timezone, token, providers) => {\n      let apiUrl = `/vehicle?startdate=${startTime}&enddate=${endTime}&lat=${location.position.lat}&lng=${location.position.lon}&radius=${radius}&unit=${feetOrMile}&timezone=${timezone}&pageno=1&pagelimit=${PAGE_LIMIT}`; // eslint-disable-next-line no-unused-vars\n\n      for await (const _ of retrier({\n        attempts: 4,\n        delay: DELAY\n      })) {\n        let request = apiCall(apiUrl, token);\n        setQuery(request);\n        const response = await request;\n        setQuery(null);\n\n        if (response && response.data && response.data.length > 0) {\n          if (!response.data[0].QueryExecutionId) {\n            let transformedVehicles = transformVehicles(response.data);\n\n            if (response.data[0].totalcount && response.data[0].totalcount > transformedVehicles.length) {\n              const remainPages = Math.ceil(response.data[0].totalcount / PAGE_LIMIT) - 1;\n              await pause(PAGE_DELAY);\n\n              for await (const count of retrier({\n                attempts: remainPages,\n                delay: PAGE_DELAY\n              })) {\n                const pagedApiUrl = `/vehicle?startdate=${startTime}&enddate=${endTime}&lat=${location.position.lat}&lng=${location.position.lon}&radius=${radius}&unit=${feetOrMile}&timezone=${timezone}&pageno=${count + 2}&pagelimit=${PAGE_LIMIT}&queryExecutionId=${response.data[0].QueryExecutionId}`;\n                request = apiCall(pagedApiUrl, token);\n                setQuery(request);\n                const pagedResponse = await request;\n                setQuery(null);\n\n                if (pagedResponse.data && pagedResponse.data.length > 0 && !pagedResponse.data[0].QueryExecutionId) {\n                  transformedVehicles = [...transformedVehicles, ...transformVehicles(pagedResponse.data)];\n                }\n              }\n            }\n\n            setVehicleData(filterVehiclesByProviders(transformedVehicles, providers));\n            break;\n          }\n\n          apiUrl = `/vehicle?startdate=${startTime}&enddate=${endTime}&lat=${location.position.lat}&lng=${location.position.lon}&radius=${radius}&unit=${feetOrMile}&timezone=${timezone}&pageno=1&pagelimit=${PAGE_LIMIT}&queryExecutionId=${response.data[0].QueryExecutionId}`;\n        } else if (response && response.data && response.data.length === 0) {\n          break;\n        }\n      }\n    };\n\n    const preloadRvd = async (startTime, endTime, timezone, token) => {\n      let apiUrl = `/event?startdate=${startTime}&enddate=${endTime}&pageno=1&pagelimit=${1000}&isCallVehicle=true&timezone=${timezone}`;\n      setIsRvdPreloaded(false);\n\n      for await (const _ of retrier({\n        attempts: MAX_RETRY,\n        delay: DELAY\n      })) {\n        const response = await apiCall(apiUrl, token);\n\n        if (response && response.data && response.data.length > 0) {\n          if (!response.data[0].QueryExecutionId) {\n            setIsRvdPreloaded(true);\n            break;\n          } else if (_ === MAX_RETRY - 1) {\n            // Still processing, but we can set preload done.\n            setIsRvdPreloaded(true);\n          }\n\n          apiUrl = `/event?startdate=${startTime}&enddate=${endTime}&pageno=1&pagelimit=${1000}&isCallVehicle=true&timezone=${timezone}&queryExecutionId=${response.data[0].QueryExecutionId}`;\n        } else if (response && response.data && response.data.length === 0) {\n          break;\n        }\n      }\n    };\n\n    const getRelatedRouteEvents = (data, selectedRoute) => {\n      if (!data) return [];\n      if (!selectedRoute) return data;\n      return data.filter(d => {\n        return d.routeName === selectedRoute || d.routeName === 'N/A';\n      });\n    };\n\n    const getEventByVehicle = async (startTime, endTime, timezone, selectedRvd, token, searchMode) => {\n      const vehicleQuery = selectedRvd.vehicleId ? '&vehicleid=' + selectedRvd.vehicleId : ''; // VE events can send routeid/driverid\n\n      const routeQuery = ''; //selectedRvd.routeId ? '&routeid=' + selectedRvd.routeId : '';\n\n      const driverQuery = ''; //selectedRvd.driverId ? '&driverid=' + selectedRvd.driverId : '';\n\n      setRvdToDisplay(selectedRvd);\n      let apiUrl = `/event?startdate=${startTime}&enddate=${endTime}${vehicleQuery}${routeQuery}${driverQuery}&pageno=1&pagelimit=${PAGE_LIMIT}&timezone=${timezone}`; // eslint-disable-next-line no-unused-vars\n\n      for await (const _ of retrier({\n        attempts: MAX_RETRY,\n        delay: DELAY\n      })) {\n        let request = apiCall(apiUrl, token);\n        setQuery(request);\n        const response = await request;\n        setQuery(null);\n\n        if (response && response.data && response.data.length > 0) {\n          if (!response.data[0].QueryExecutionId) {\n            let transFormedEvents = transformEvents(response.data, selectedRvd, 0, 0);\n\n            if (response.data[0].totalcount && response.data[0].totalcount > transFormedEvents.length) {\n              const remainPages = Math.ceil(response.data[0].totalcount / PAGE_LIMIT) - 1;\n              await pause(PAGE_DELAY);\n\n              for await (const count of retrier({\n                attempts: remainPages,\n                delay: PAGE_DELAY\n              })) {\n                const pagedApiUrl = `/event?startdate=${startTime}&enddate=${endTime}${vehicleQuery}${routeQuery}${driverQuery}&pageno=${count + 2}&pagelimit=${PAGE_LIMIT}&timezone=${timezone}&queryExecutionId=${response.data[0].QueryExecutionId}`;\n                request = apiCall(pagedApiUrl, token);\n                setQuery(request);\n                const pagedResponse = await request;\n                setQuery(null);\n\n                if (pagedResponse.data && pagedResponse.data.length > 0 && !pagedResponse.data[0].QueryExecutionId) {\n                  const lastSection = transFormedEvents.length > 0 ? transFormedEvents[transFormedEvents.length - 1].section : 0;\n                  transFormedEvents = [...transFormedEvents, ...transformEvents(pagedResponse.data, selectedRvd, count + 1, lastSection)];\n                }\n              }\n            } // When search byVehicle, we would filter events base on rvd's route. However, when search byLocationVehicle, we would return all events of the vehicle regardless of route.\n\n\n            const relatedRouteEvents = searchMode === _panel.searchModes.byLocationVehicle ? transFormedEvents : getRelatedRouteEvents(transFormedEvents, selectedRvd.routeName);\n            setEventData(relatedRouteEvents);\n            break;\n          }\n\n          apiUrl = `/event?startdate=${startTime}&enddate=${endTime}${vehicleQuery}${routeQuery}${driverQuery}&pageno=1&pagelimit=${PAGE_LIMIT}&timezone=${timezone}&queryExecutionId=${response.data[0].QueryExecutionId}`;\n        } else if (response && response.data && response.data.length === 0) {\n          break;\n        }\n      }\n    };\n\n    const submitDateTime = async (startTime, endTime, timezone, token, providers, notifications, searchMode, callback) => {\n      try {\n        if (searchMode === _panel.searchModes.byVehicle) {\n          await getRvdByVehicle(startTime, endTime, timezone, token, providers);\n        } else {\n          await preloadRvd(startTime, endTime, timezone, token);\n        }\n      } catch (e) {\n        if (!(e instanceof DOMException)) {\n          notifications.warning(e);\n        }\n      }\n\n      if (callback) callback();\n    };\n\n    const doSearch = async (startTime, endTime, timezone, token, providers, notifications, searchMode, selectedRvd, location, radius, feetOrMile, callback) => {\n      try {\n        if (searchMode === _panel.searchModes.byVehicle || searchMode === _panel.searchModes.byLocationVehicle) {\n          await getEventByVehicle(startTime, endTime, timezone, selectedRvd, token, searchMode);\n        } else {\n          await getVehicleByLocation(startTime, endTime, location, radius, feetOrMile, timezone, token, providers);\n        }\n      } catch (e) {\n        if (!(e instanceof DOMException)) {\n          notifications.warning(e);\n        }\n      }\n\n      if (callback) callback();\n    };\n\n    return _react.default.createElement(APIContext.Provider, {\n      value: {\n        rvdData,\n        setRvdData,\n        eventData,\n        setEventData,\n        vehicleData,\n        setVehicleData,\n        rvdToDisplay,\n        setRvdToDisplay,\n        isRvdPreloaded,\n        setIsRvdPreloaded,\n        submitDateTime,\n        query,\n        setQuery,\n        doSearch\n      }\n    }, children);\n  };\n\n  _exports.APIContextProvider = APIContextProvider;\n\n  const useAPI = () => {\n    const context = _react.default.useContext(APIContext);\n\n    return context;\n  };\n\n  _exports.useAPI = useAPI;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/context/map\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.MapContext = void 0;\n\n  const MapContext = _react.default.createContext();\n\n  _exports.MapContext = MapContext;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/context/panel\", [\"exports\", \"react\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/map/config\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/components/playback-tables/config\", \"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", \"lodash\"], function (_exports, _react, _config, _config2, _session, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.usePanel = _exports.speedModes = _exports.searchModes = _exports.radiusModes = _exports.labelDisplayModes = _exports.filterOperations = _exports.PanelContextProvider = _exports.PanelContext = void 0;\n  const searchModes = {\n    byVehicle: 'byVehicle',\n    byLocation: 'byLocation',\n    byLocationVehicle: 'byLocationVehicle'\n  };\n  _exports.searchModes = searchModes;\n  const speedModes = {\n    x1: '1x',\n    x2: '2x',\n    x4: '4x',\n    x8: '8x'\n  };\n  _exports.speedModes = speedModes;\n  const labelDisplayModes = {\n    always: 'always',\n    onLeftClick: 'onLeftClick'\n  };\n  _exports.labelDisplayModes = labelDisplayModes;\n  const radiusModes = {\n    miles: 'miles',\n    feet: 'feet'\n  };\n  _exports.radiusModes = radiusModes;\n  const filterOperations = {\n    eq: 'eq',\n    neq: 'neq',\n    contains: 'contains',\n    empty: 'empty'\n  };\n  _exports.filterOperations = filterOperations;\n\n  const PanelContext = _react.default.createContext({\n    isLoadingRvd: false\n  });\n\n  _exports.PanelContext = PanelContext;\n\n  const PanelContextProvider = _ref => {\n    let {\n      children\n    } = _ref;\n\n    const [searchMode, setSearchMode] = _react.default.useState(searchModes.byVehicle);\n\n    const [date, setDate] = _react.default.useState();\n\n    const [startTime, setStartTime] = _react.default.useState();\n\n    const [endTime, setEndTime] = _react.default.useState();\n\n    const [canSubmit, setCanSubmit] = _react.default.useState(false);\n\n    const [selectedRvd, setSelectedRvd] = _react.default.useState({});\n\n    const [sliderIndex, setSliderIndex] = _react.default.useState(0);\n\n    const [sliderIndexMax, setSliderIndexMax] = _react.default.useState(0);\n\n    const [speedMode, setSpeedMode] = _react.default.useState(speedModes.x1);\n\n    const [isRunning, setIsRunning] = _react.default.useState(false);\n\n    const [isPaused, setIsPaused] = _react.default.useState(false);\n\n    const [isEnded, setIsEnded] = _react.default.useState(false);\n\n    const [isStarted, setIsStarted] = _react.default.useState(false);\n\n    const [movingVehicle, setMovingVehicle] = _react.default.useState();\n\n    const [isLoadingRvd, setIsLoadingRvd] = _react.default.useState(false);\n\n    const [isLoadingEvent, setIsLoadingEvent] = _react.default.useState(false);\n\n    const [isLoadingVehicle, setIsLoadingVehicle] = _react.default.useState(false);\n\n    const [mapFilterEnabled, setMapFilterEnabled] = _react.default.useState(false);\n\n    const [vehicleTableFilterEnabled, setVehicleTableFilterEnabled] = _react.default.useState(false);\n\n    const [eventTableFilterEnabled, setEventTableFilterEnabled] = _react.default.useState(false);\n\n    const [labelDisplayMode, setLabelDisplayMode] = _react.default.useState(labelDisplayModes.onLeftClick);\n\n    const [confirmStack, setConfirmStack] = _react.default.useState([]);\n\n    const [isPinCursor, setIsPinCursor] = _react.default.useState(false);\n\n    const [location, setLocation] = _react.default.useState({});\n\n    const [radiusMode, setRadiusMode] = _react.default.useState(radiusModes.miles);\n\n    const [radiusInMiles, setRadiusInMiles] = _react.default.useState(0);\n\n    const [radiusInFeet, setRadiusInFeet] = _react.default.useState(0);\n\n    const [eventSearchText, setEventSearchText] = _react.default.useState('');\n\n    const [vehicleSearchText, setVehicleSearchText] = _react.default.useState('');\n\n    const [vehicleTableData, setVehicleTableData] = _react.default.useState([]);\n\n    const [eventTableData, setEventTableData] = _react.default.useState([]);\n\n    const {\n      widgetState,\n      setWidgetState\n    } = _react.default.useContext(_session.SessionContext);\n\n    const [highlightedRowIndex, setHighlightedRowIndex] = _react.default.useState(-1);\n\n    const togglePinCursor = () => {\n      setIsPinCursor(!isPinCursor);\n    };\n\n    const defaultMapEventFilters = _config.VehicleEventOptions.map(option => {\n      const savedMapEventFilters = widgetState.mapEventFilters || [];\n\n      const savedOption = _lodash.default.find(savedMapEventFilters, o => o.id === option.id);\n\n      return { ...option,\n        isChecked: savedOption ? savedOption.isChecked : true\n      };\n    });\n\n    const [mapEventFilters, setMapEventFilters] = _react.default.useState(defaultMapEventFilters);\n\n    const saveWidgetMapEventFilters = filters => {\n      setWidgetState({ ...widgetState,\n        mapEventFilters: filters.map(o => {\n          return {\n            id: o.id,\n            isChecked: o.isChecked\n          };\n        })\n      });\n    };\n\n    const saveEventTableColumns = columns => {\n      setWidgetState({ ...widgetState,\n        eventTableColumns: columns.map(o => {\n          return {\n            id: o.id,\n            isChecked: o.isChecked,\n            isLabeledInMap: o.isLabeledInMap,\n            filterOp: o.filterOp,\n            filterValue: o.filterValue\n          };\n        })\n      });\n    };\n\n    const saveVehicleTableColumns = columns => {\n      setWidgetState({ ...widgetState,\n        vehiclesTableColumns: columns.map(o => {\n          return {\n            id: o.id,\n            isChecked: o.isChecked,\n            filterOp: o.filterOp,\n            filterValue: o.filterValue\n          };\n        })\n      });\n    };\n\n    const toggleMapEventFilter = (id, value) => {\n      const newFilters = [...mapEventFilters];\n      const updateFilter = newFilters.find(filter => filter.id === id);\n\n      if (updateFilter) {\n        updateFilter.isChecked = value;\n      }\n\n      setMapEventFilters(newFilters);\n      saveWidgetMapEventFilters(newFilters);\n    };\n\n    const defaultEventTableColumns = _config2.default.vehicleEventsTableColumns.map(option => {\n      const savedEventTableColumns = widgetState.eventTableColumns || [];\n\n      const savedOption = _lodash.default.find(savedEventTableColumns, o => o.id === option.id);\n\n      return { ...option,\n        isChecked: savedOption ? savedOption.isChecked : true,\n        isLabeledInMap: savedOption ? savedOption.isLabeledInMap : true,\n        filterOp: savedOption ? savedOption.filterOp : '',\n        filterValue: savedOption ? savedOption.filterValue : ''\n      };\n    });\n\n    const [eventTableColumns, setEventTableColumns] = _react.default.useState(defaultEventTableColumns);\n\n    const toggleEventTableColumn = (id, value) => {\n      const newColumns = [...eventTableColumns];\n      const columnToUpdate = newColumns.find(column => column.id === id);\n\n      if (columnToUpdate) {\n        columnToUpdate.isChecked = value;\n      }\n\n      setEventTableColumns(newColumns);\n      saveEventTableColumns(newColumns);\n    };\n\n    const toggleEventTableLabels = (id, value) => {\n      const newColumns = [...eventTableColumns];\n      const columnToUpdate = newColumns.find(column => column.id === id);\n\n      if (columnToUpdate) {\n        columnToUpdate.isLabeledInMap = value;\n      }\n\n      setEventTableColumns(newColumns);\n      saveEventTableColumns(newColumns);\n    };\n\n    const toggleAllEventTableColumns = value => {\n      const newColumns = [...eventTableColumns];\n      newColumns.forEach(column => {\n        column.isChecked = value;\n      });\n      setEventTableColumns(newColumns);\n      saveEventTableColumns(newColumns);\n    };\n\n    const toggleAllEventTableLabels = value => {\n      const newColumns = [...eventTableColumns];\n      newColumns.forEach(column => {\n        column.isLabeledInMap = value;\n      });\n      setEventTableColumns(newColumns);\n      saveEventTableColumns(newColumns);\n    };\n\n    const defaultVehicleTableColumns = _config2.default.vehiclesTableColumns.map(option => {\n      const savedEventTableColumns = widgetState.vehiclesTableColumns || [];\n\n      const savedOption = _lodash.default.find(savedEventTableColumns, o => o.id === option.id);\n\n      return { ...option,\n        isChecked: savedOption ? savedOption.isChecked : true,\n        filterOp: savedOption ? savedOption.filterOp : '',\n        filterValue: savedOption ? savedOption.filterValue : ''\n      };\n    });\n\n    const [vehicleTableColumns, setVehicleTableColumns] = _react.default.useState(defaultVehicleTableColumns);\n\n    const toggleVehicleTableColumn = (id, value) => {\n      const newColumns = [...vehicleTableColumns];\n      const columnToUpdate = newColumns.find(column => column.id === id);\n\n      if (columnToUpdate) {\n        columnToUpdate.isChecked = value;\n      }\n\n      setVehicleTableColumns(newColumns);\n      saveVehicleTableColumns(newColumns);\n    };\n\n    const toggleAllVehicleTableColumns = value => {\n      const newColumns = [...vehicleTableColumns];\n      newColumns.forEach(column => {\n        column.isChecked = value;\n      });\n      setVehicleTableColumns(newColumns);\n      saveVehicleTableColumns(newColumns);\n    };\n\n    const updateEventColumn = (id, update) => {\n      const newColumns = [...eventTableColumns];\n      const columnIndexToUpdate = newColumns.findIndex(column => column.id === id);\n      newColumns[columnIndexToUpdate] = update;\n      setEventTableColumns(newColumns);\n      saveVehicleTableColumns(newColumns);\n    };\n\n    const updateVehicleColumn = (id, update) => {\n      const newColumns = [...vehicleTableColumns];\n      const columnIndexToUpdate = newColumns.findIndex(column => column.id === id);\n      newColumns[columnIndexToUpdate] = update;\n      setVehicleTableColumns(newColumns);\n      saveVehicleTableColumns(newColumns);\n    };\n\n    const syncStatus = () => {\n      if (!movingVehicle) return;\n      setIsStarted(movingVehicle.isStarted());\n      setIsRunning(movingVehicle.isRunning());\n      setIsEnded(movingVehicle.isEnded());\n      setIsPaused(movingVehicle.isPaused());\n    };\n\n    const startPlay = () => {\n      if (!movingVehicle) return;\n\n      if (!movingVehicle.isStarted() || movingVehicle.isEnded()) {\n        movingVehicle.start();\n      } else if (!movingVehicle.isRunning()) {\n        movingVehicle.resume();\n      }\n\n      syncStatus();\n    };\n\n    const pausePlay = () => {\n      if (!movingVehicle) return;\n      movingVehicle.pause();\n      syncStatus();\n    };\n\n    const setToPlay = targetIndex => {\n      if (!movingVehicle || targetIndex !== 0 && !targetIndex) return;\n      setSliderIndex(targetIndex);\n\n      if (!movingVehicle.isStarted() || movingVehicle.isEnded()) {\n        movingVehicle.start();\n        movingVehicle.setTo(targetIndex);\n        movingVehicle.pause();\n      } else {\n        movingVehicle.setTo(targetIndex);\n      }\n\n      syncStatus();\n    };\n\n    const forwardPlay = () => {\n      if (!movingVehicle) return;\n      setToPlay(Math.min(sliderIndex + 10, sliderIndexMax));\n    };\n\n    const backwardPlay = () => {\n      if (!movingVehicle) return; // AIQ-2102 if less than 10 rows played, don't set it back\n\n      if (sliderIndex - 10 >= 0) {\n        setToPlay(Math.max(sliderIndex - 10, 0));\n      }\n    };\n\n    const speedPlay = mode => {\n      if (!movingVehicle) return;\n      setSpeedMode(mode);\n\n      switch (mode) {\n        case speedModes.x1:\n          movingVehicle.setSpeed(1);\n          break;\n\n        case speedModes.x2:\n          movingVehicle.setSpeed(2);\n          break;\n\n        case speedModes.x4:\n          movingVehicle.setSpeed(4);\n          break;\n\n        case speedModes.x8:\n          movingVehicle.setSpeed(8);\n          break;\n\n        default:\n          movingVehicle.setSpeed(1);\n      }\n\n      syncStatus();\n    };\n\n    return _react.default.createElement(PanelContext.Provider, {\n      value: {\n        searchMode,\n        setSearchMode,\n        date,\n        setDate,\n        startTime,\n        setStartTime,\n        endTime,\n        setEndTime,\n        canSubmit,\n        setCanSubmit,\n        selectedRvd,\n        setSelectedRvd,\n        sliderIndex,\n        setSliderIndex,\n        sliderIndexMax,\n        setSliderIndexMax,\n        speedMode,\n        setSpeedMode,\n        isRunning,\n        setIsRunning,\n        isPaused,\n        setIsPaused,\n        isEnded,\n        setIsEnded,\n        isStarted,\n        setIsStarted,\n        movingVehicle,\n        setMovingVehicle,\n        startPlay,\n        pausePlay,\n        setToPlay,\n        forwardPlay,\n        backwardPlay,\n        speedPlay,\n        isLoadingRvd,\n        setIsLoadingRvd,\n        isLoadingEvent,\n        setIsLoadingEvent,\n        isLoadingVehicle,\n        setIsLoadingVehicle,\n        mapFilterEnabled,\n        setMapFilterEnabled,\n        vehicleTableFilterEnabled,\n        setVehicleTableFilterEnabled,\n        eventTableFilterEnabled,\n        setEventTableFilterEnabled,\n        setEventTableColumns,\n        mapEventFilters,\n        toggleMapEventFilter,\n        eventTableColumns,\n        toggleEventTableColumn,\n        toggleVehicleTableColumn,\n        toggleAllEventTableColumns,\n        toggleAllVehicleTableColumns,\n        toggleEventTableLabels,\n        toggleAllEventTableLabels,\n        updateEventColumn,\n        updateVehicleColumn,\n        vehicleTableColumns,\n        setVehicleTableColumns,\n        labelDisplayMode,\n        setLabelDisplayMode,\n        confirmStack,\n        setConfirmStack,\n        isPinCursor,\n        setIsPinCursor,\n        togglePinCursor,\n        location,\n        setLocation,\n        radiusInFeet,\n        setRadiusInFeet,\n        radiusInMiles,\n        setRadiusInMiles,\n        radiusMode,\n        setRadiusMode,\n        eventSearchText,\n        setEventSearchText,\n        vehicleSearchText,\n        setVehicleSearchText,\n        vehicleTableData,\n        eventTableData,\n        setVehicleTableData,\n        setEventTableData,\n        highlightedRowIndex,\n        setHighlightedRowIndex\n      }\n    }, children);\n  };\n\n  _exports.PanelContextProvider = PanelContextProvider;\n\n  const usePanel = () => {\n    const context = _react.default.useContext(PanelContext);\n\n    return context;\n  };\n\n  _exports.usePanel = usePanel;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/context/session\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.SessionContext = void 0;\n\n  const SessionContext = _react.default.createContext();\n\n  _exports.SessionContext = SessionContext;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/useOutsideCanceler\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const useOutsideCanceler = (ref, cancel) => {\n    _react.default.useEffect(() => {\n      const handleClickOutside = event => {\n        if (ref.current && !ref.current.contains(event.target)) {\n          cancel();\n        }\n      }; // Bind the event listener\n\n\n      document.addEventListener('mousedown', handleClickOutside);\n      return () => {\n        // Unbind the event listener on clean up\n        document.removeEventListener('mousedown', handleClickOutside);\n      };\n    }, [ref]);\n  };\n\n  const OutSideCanceler = props => {\n    const wrapperRef = _react.default.useRef(null);\n\n    useOutsideCanceler(wrapperRef, props.cancel);\n    return _react.default.createElement(\"div\", {\n      ref: wrapperRef\n    }, props.children);\n  };\n\n  var _default = OutSideCanceler;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/hooks/usePrevious\", [\"exports\", \"react\"], function (_exports, _react) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const usePrevious = values => {\n    const ref = _react.default.useRef();\n\n    _react.default.useEffect(() => {\n      ref.current = values;\n    });\n\n    return ref.current;\n  };\n\n  var _default = usePrevious;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-playback/react-component\", [\"exports\", \"react-dom\"], function (_exports, _reactDom) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    /**\n     * Renders a react component as the current ember element\n     * @param {React.Component} reactComponent. e.g., <HelloWorld />\n     */\n    reactRender(reactComponent) {\n      _reactDom.default.render(reactComponent, this.element);\n    },\n\n    /**\n     * Removes a mounted React component from the DOM and\n     * cleans up its event handlers and state.\n     */\n    unmountReactElement() {\n      _reactDom.default.unmountComponentAtNode(this.element);\n    },\n\n    /**\n     * Cleans up the rendered react component as the ember\n     * component gets destroyed\n     */\n    willDestroyElement() {\n      this._super();\n\n      this.unmountReactElement();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/ember-react-widget/component\", \"adept-iq/config/column-types\", \"adept-iq/utils/rql\", \"lodash\", \"adept-iq/utils/filters\", \"adept-iq/utils/datetime-filters\"], function (_exports, _component, _columnTypes, _rql, _lodash, _filters, _datetimeFilters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const otpStatusMapper = {\n    'O': 'On Time',\n    'D': 'In Danger',\n    'L': 'Late',\n    'E': 'Early'\n  };\n  const BUILD_FILTER_FUNC_MAP = {\n    'date': _datetimeFilters.buildDateFilter,\n    'datetime': _datetimeFilters.buildDateFilter,\n    'time': _datetimeFilters.buildTimeFilter\n  };\n  const logger = {\n    log: () => null,\n    warn: console.warn // eslint-disable-line no-console\n\n  };\n\n  var _default = _component.default.extend({\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    classNames: ['iqux-column-widget'],\n    layoutName: 'components/generic-widgets/ember-react-widget',\n    defaultIncludes: null,\n    filterParamNode: null,\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    // resetDataQuery() {\n    //   const params = {\n    //     sorts: []\n    //   };\n    //   try {\n    //   // this only applies for server-side pagination\n    //     if (this.get('paginationEnabled')) {\n    //       params.page = {\n    //         offset: this.get('records.length'),\n    //         limit: this.get('limit')\n    //       };\n    //     }\n    //     const sort = this.buildSortParam();\n    //     if (sort) {\n    //       params.sorts.push(sort);\n    //     }\n    //     const includes = this.get('defaultIncludes');\n    //     if (!isEmpty(includes)) {\n    //       params.includes = includes;\n    //     }\n    //     params.filter = null;\n    //     const modelNames = makeArray(this.get('config.modelName'));\n    //     return this.get('activeContext.topActiveContext').query(modelNames, params);\n    //   } catch (error) {\n    //     // eslint-disable-next-line no-console\n    //     console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n    //   }\n    // },\n    fetchDataQuery() {\n      try {\n        const params = this.buildQuery();\n        const modelName = this.get('config.modelName');\n        const isServerDataDependency = this.get('isServerDataDependency');\n        return this.get('activeContext.topActiveContext').query([modelName], params, isServerDataDependency);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    buildQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = [this.buildColumnFilter()];\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters); // this.set('dataOffset', -1);\n\n        const extendedParams = _lodash.default.merge({}, params, {\n          filter: params.filter\n        });\n\n        let queryParams = (0, _rql.buildQueryParams)(extendedParams);\n        queryParams = _lodash.default.merge({}, queryParams);\n        this.set('filterQueryString', queryParams.filter);\n        this.set('filterParamNode', params.filter);\n        return queryParams;\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    buildSortParam() {\n      const config = this.get('config');\n      const state = this.get('state');\n      let columnConfig; // user-specified sort order always takes precedence\n\n      if (Ember.isPresent(state.sortId)) {\n        columnConfig = this.getSortColumn(state.sortId); // config.columns.findBy('id', state.sortId);\n\n        if (!columnConfig) {\n          // this can occur naturally if the user sorts by a column, saves, and\n          // that column is later removed from the widget's configuration\n          logger.warn(`workspace configuration specifies that ${config.title} widget should be sorted by column with id '${state.sortId}', but no such column exists`);\n        }\n      } // fall back to default sort order; this is optional in widget config\n\n\n      if (!columnConfig && Ember.isPresent(config.defaultSortId)) {\n        columnConfig = this.getSortColumn(config.defaultSortId); //config.columns.findBy('id', config.defaultSortId);\n\n        if (!columnConfig) {\n          logger.warn(`${config.title} widget is configured with default sort ID '${config.defaultSortId}', but has no column with matching ID`);\n        }\n      } // collection will be unsorted; this is expected when there is no specified\n      // workspace sort or widget default sort\n\n\n      if (!columnConfig) {\n        return null;\n      }\n\n      const columnType = _columnTypes.default.findBy('id', columnConfig.type);\n\n      if (!columnType) {\n        logger.warn(`tried to sort by column with ID '${columnConfig.id}', but its type '${columnConfig.type}' is not a valid column type`);\n        return null;\n      }\n\n      if (!columnType.compare) {\n        logger.warn(`column type '${columnType.id}' does not have a compare function configured`);\n        return null;\n      }\n\n      let sortAsc = true;\n\n      if (Ember.isPresent(state.sortAsc)) {\n        sortAsc = state.sortAsc;\n      } else if (Ember.isPresent(config.defaultSortAsc)) {\n        sortAsc = config.defaultSortAsc;\n      }\n\n      let sortValuePath = 'id';\n\n      if (columnConfig) {\n        sortValuePath = columnConfig.customSortPath ? columnConfig.customSortPath : columnConfig.valuePath;\n      }\n\n      const result = {\n        path: sortValuePath,\n        asc: sortAsc,\n        compare: columnType.compare\n      };\n\n      if (columnConfig.arraySortPath) {\n        result.arraySortPath = columnConfig.arraySortPath;\n      }\n\n      return result;\n    },\n\n    getSortColumn(sortId) {\n      const config = this.get('config');\n      let columnConfig = config.columns.findBy('id', sortId);\n\n      if (!columnConfig) {\n        columnConfig = config.columns.findBy('valuePath', sortId);\n      }\n\n      return columnConfig;\n    },\n\n    buildSearchFilterByParameter() {\n      const searchText = this.get('searchText');\n      const res = searchText.split('=');\n      const attr = res[0].toLowerCase().trim();\n      const value = res[1].trim();\n      const columns = this.get('table.columns') || [];\n\n      function configFilter(config) {\n        return config.label.toLowerCase().trim() === attr;\n      }\n\n      if (Ember.isEmpty(searchText)) {\n        return null;\n      }\n\n      const searchableConfigs = columns.rejectBy('hidden').mapBy('config').compact().filter(configFilter);\n      const args = searchableConfigs.map(config => {\n        const columnType = _columnTypes.default.findBy('id', config.type) || {};\n        const filterType = columnType.searchFilterType;\n        const valuePath = config.alternateValuePath ? config.alternateValuePath : config.valuePath;\n        return (0, _filters.buildValueFilterNode)(filterType, valuePath, [value], config.format);\n      });\n      return (0, _filters.buildCompoundFilterNode)('or', args);\n    },\n\n    buildSearchFilter() {\n      const searchText = this.get('searchText');\n      const columns = this.get('table.columns') || [];\n\n      if (Ember.isEmpty(searchText)) {\n        return null;\n      }\n\n      const searchableConfigs = columns.rejectBy('hidden').mapBy('config').compact(); // .filterBy('searchable'); // We allow search on all columns - Ashraf , Ankur discussed\n\n      const args = searchableConfigs.map(config => {\n        const columnType = _columnTypes.default.findBy('id', config.type) || {};\n        const filterType = columnType.searchFilterType;\n        const valuePath = config.alternateValuePath ? config.alternateValuePath : config.valuePath;\n        return (0, _filters.buildValueFilterNode)(filterType, valuePath, [searchText], config.format);\n      });\n      return (0, _filters.buildCompoundFilterNode)('or', args);\n    },\n\n    buildColumnFilter() {\n      const quickFilters = this.get('quickFilters');\n      const columns = this.get('table.columns') || [];\n      let args = columns.map(column => {\n        const columnType = column.config ? column.config.type : null;\n        const filternode = column.filterNode;\n        const buildFilterFunc = columnType ? BUILD_FILTER_FUNC_MAP[columnType] : null;\n\n        if (filternode && buildFilterFunc) {\n          buildFilterFunc(filternode);\n        }\n\n        return column.get('filterNode');\n      });\n\n      if (Ember.isPresent(quickFilters)) {\n        quickFilters.forEach(filter => {\n          if (filter.active) {\n            args = args.concat(filter.filters);\n          }\n        });\n      }\n\n      this.applyFilterQueryConversion(args);\n      return (0, _filters.buildCompoundFilterNode)('and', args);\n    },\n\n    calculateTimeQuery() {\n      const dateRangeFilterQuery = '';\n      return dateRangeFilterQuery;\n    },\n\n    calculateProviderQuery() {\n      const selectedProviders = this.get('workspaceContext._selectedProviders') || [];\n\n      if (_lodash.default.isEmpty(selectedProviders)) {\n        return '';\n      }\n\n      const providerNames = selectedProviders.mapBy('name');\n      const providerFilterQuery = this.get('widgetService').generateRQL('provider', providerNames);\n      return providerFilterQuery;\n    },\n\n    canFurtherSelectionAllowed() {\n      const isTraversalEnabled = this.get('isTraversalEnabled');\n      const gridConfig = this.get('config');\n      const selectedRowLimit = gridConfig.selectedRowLimit; // Only 3 widgets (stop, trip and routes) are having selectedRowLimit in their config,\n      // so rest of the widgets shouldn't restrict the selections\n\n      if (!selectedRowLimit) {\n        return true;\n      }\n\n      const checkedItems = this.get('checkedRowIds');\n\n      if (!isTraversalEnabled || checkedItems.length < selectedRowLimit) {\n        return true;\n      }\n\n      return false;\n    },\n\n    isSelectionMoreThanLimit() {\n      const selectedRowLimit = this.get('config.selectedRowLimit');\n\n      if (!selectedRowLimit) {\n        return false;\n      }\n\n      const checkedItems = this.get('checkedRowIds');\n\n      if (checkedItems.length > selectedRowLimit) {\n        return true;\n      }\n\n      return false;\n    },\n\n    /** Used to style table rows, each component can override and return the approriate\n     *  css classes based on the provided data, rowIndex and columnIndex **/\n    // eslint-disable-next-line no-unused-vars\n    rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currentData) {\n      return '';\n    },\n\n    applyOtpStatusTransformation(widgetRecord) {\n      if (widgetRecord.otpStatus) {\n        widgetRecord.otpCode = widgetRecord.otpStatus;\n        widgetRecord.otpStatus = otpStatusMapper[widgetRecord.otpStatus];\n      }\n\n      if (widgetRecord.otp) {\n        widgetRecord.otpWithSign = (widgetRecord.otp < 0 ? '' : '+') + widgetRecord.otp;\n      } // show zero value with no sign\n\n\n      if (widgetRecord.otp === 0) widgetRecord.otpWithSign = 0;\n    },\n\n    applyFilterQueryConversion(filters) {\n      filters.forEach(filter => {\n        this.applyOtpStatusFilterConversion(filter);\n        this.applyTravelNeedsServiceNeedsFilterConversion(filter);\n      });\n    },\n\n    applyOtpStatusFilterConversion(filter) {\n      if (!filter || filter.local.path !== 'otpStatus') {\n        return;\n      }\n\n      const optStatusValue = filter.local.values && filter.local.values[0] ? filter.local.values[0].trim() : null;\n\n      if (optStatusValue) {\n        const optStatusKey = _lodash.default.findKey(otpStatusMapper, value => value.toLowerCase() === optStatusValue.toLowerCase());\n\n        filter.local.values[0] = Ember.isPresent(optStatusKey) ? optStatusKey : optStatusValue;\n      } else {\n        filter.local.values[0] = null;\n      }\n    },\n\n    applyTravelNeedsServiceNeedsFilterConversion(filter) {\n      if (!filter || filter.local.path !== 'travelNeeds' && filter.local.path !== 'serviceNeeds') {\n        return;\n      }\n\n      const modelName = _component.pathToModel[filter.local.path];\n      const modelTypeMapper = this.get('store').peekAll(modelName).map(record => {\n        return {\n          id: record.id,\n          displayName: record.displayName.trim().toLowerCase()\n        };\n      });\n      const newValues = (0, _filters.applyFilterConversion)(filter.local.values, filter.type, modelTypeMapper);\n      filter.local.values = newValues;\n      filter.rql.values = newValues;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/form-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/form-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editModal: Ember.inject.service(),\n    isShrunken: false,\n    service: Ember.computed.alias('editModal'),\n    actions: {\n      onShrinkClick() {\n        this.toggleProperty('isShrunken');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/gauge-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/chartjs-widget/component\", \"adept-iq/utils/filters\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _component, _filters, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    classNames: ['gauge-widget'],\n    widget: null,\n    options: Ember.computed.alias('widget.state.dataType'),\n\n    /* Applies the choice of data source. */\n    chartRecords: Ember.computed('options.modelName', 'workspaceContext.workspaceData.[]', function () {\n      const modelName = this.get('options.modelName');\n      if (Ember.isBlank(modelName)) return [];\n      const wrappedRecords = this.get('workspaceContext.workspaceData').filterBy('modelName', modelName);\n      return wrappedRecords.map(a => a.record);\n    }),\n\n    /* Builds the chosen filters. */\n    filterFunction: Ember.computed('options.columns', function () {\n      const filterColumns = Object.values(this.get('options.columns')).map(col => new _filterColumn.default(col));\n      const args = filterColumns.map(column => {\n        return column.get('filterNode');\n      });\n      return (0, _filters.buildFilterFunction)((0, _filters.buildCompoundFilterNode)('and', args));\n    }),\n\n    /* Applies the choice of filters. */\n    filteredRecords: Ember.computed('chartRecords', 'filterFunction', function () {\n      const chartRecords = this.get('chartRecords') || [];\n      return chartRecords.filter(this.get('filterFunction'));\n    }),\n\n    /* Applies the choice of data to display. */\n    displaySlice: Ember.computed('options.displayOptions.selected', 'filteredRecords', function () {\n      const displaySelection = this.get('options.displayOptions.selected');\n\n      if (Ember.isBlank(displaySelection) || Ember.isBlank(displaySelection.valueKey) || Ember.isBlank(displaySelection.valueCategory)) {\n        return this.get('filteredRecords');\n      }\n\n      return this.get('filteredRecords').filterBy(displaySelection.valueKey, displaySelection.valueCategory.value);\n    }),\n\n    /* Applies the choice of operation (metric option) to apply to the selected records. */\n    dialValue: Ember.computed('displaySlice', 'options.displayOptions.selected.metricOption', function () {\n      const selectedMetric = this.get('options.displayOptions.selected.metricOption');\n      if (Ember.isBlank(selectedMetric)) return this.get('displaySlice.length');\n\n      switch (selectedMetric.id) {\n        case 'count':\n          return this.get('displaySlice.length');\n\n        default:\n          return 0;\n      }\n    }),\n    minGaugeValue: Ember.computed('options.displayOptions.selected.metricOption', function () {\n      const selectedMetric = this.get('options.displayOptions.selected.metricOption');\n      if (Ember.isBlank(selectedMetric)) return 0;\n\n      switch (selectedMetric.id) {\n        case 'count':\n          return 0;\n\n        default:\n          return 0;\n      }\n    }),\n\n    /* Applies the box color visual options. */\n    boxValues: Ember.computed('options.boxColor.{orange,red}', 'minGaugeValue', 'dialValue', function () {\n      const min = this.get('minGaugeValue');\n      const dialValue = this.get('dialValue');\n      const boxColors = this.get('options.boxColor');\n      const boxValues = [];\n      boxValues.push(boxColors.orange - min);\n      boxValues.push(boxColors.red - boxColors.orange);\n      const maxValue = boxColors.orange - min + 2 * (boxColors.red - boxColors.orange);\n\n      if (maxValue > dialValue) {\n        boxValues.push(boxColors.red - boxColors.orange);\n      } else {\n        boxValues.push(boxColors.red - boxColors.orange + (dialValue - maxValue));\n      }\n\n      return boxValues;\n    }),\n    dialRange: Ember.computed('boxValues', 'minGaugeValue', function () {\n      const boxValues = this.get('boxValues') || [];\n      const min = this.get('minGaugeValue');\n      const max = boxValues.reduce((a, b) => a + b, min);\n      return {\n        min: min,\n        max: max\n      };\n    }),\n    chartData: Ember.computed('boxValues', function () {\n      const cData = {\n        'datasets': [{\n          'data': this.get('boxValues'),\n          'backgroundColor': [// this.get('colors')[0],\n          this.get('colors')[2], this.get('warningColor'), this.get('urgentColor')],\n          'borderWidth': 0,\n          'hoverBackgroundColor': [// this.get('colors')[0],\n          this.get('colors')[2], this.get('warningColor'), this.get('urgentColor')],\n          'hoverBorderWidth': 0\n        }],\n        labels: []\n      };\n      return cData;\n    }),\n\n    /* Applies the chart title input. */\n    chartTitle: Ember.computed('options.name', function () {\n      if (Ember.isBlank(this.get('options'))) {\n        return 'Gauge Chart';\n      } else if (Ember.isBlank(this.get('options.title'))) {\n        return this.get('options.name') + ' Gauge Chart';\n      }\n\n      return this.get('options.title');\n    }),\n\n    /* Applies the visual options, value and/or percentage display. */\n    dialDisplay: Ember.computed('dialValue', 'options.visualOptions', function () {\n      let text;\n      const visualOptions = this.get('options.visualOptions');\n      const dialValue = this.get('dialValue');\n\n      if (visualOptions.value.isChecked) {\n        text = dialValue.toString();\n      }\n\n      if (visualOptions.percentage.isChecked && this.get('filteredRecords.length') !== 0) {\n        text = text ? text + ', ' : '';\n        text += Math.floor(100 * dialValue / this.get('filteredRecords.length')).toString() + '%';\n      }\n\n      return text || '';\n    }),\n    chartOptions: Ember.computed('dialRange', 'dialValue', 'dialDisplay', function () {\n      const options = {\n        gauge: true,\n        labels: {\n          dial: this.get('dialValue'),\n          min: this.get('dialRange').min,\n          max: this.get('dialRange').max\n        },\n        rotation: -1.0 * Math.PI,\n        // start angle in radians\n        circumference: Math.PI,\n        // sweep angle in radians\n        title: {\n          'display': true,\n          'text': this.get('dialDisplay'),\n          'position': 'bottom'\n        },\n        tooltips: {\n          'enabled': false\n        },\n        onResize: function\n          /* chart, size */\n        () {}\n      };\n      return options;\n    }),\n    actions: {\n      onFilterButtonClick() {\n        const workspace = this.get('workspace');\n        let topState = workspace.get('topState');\n\n        while (topState === 'gaugeWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        const displayName = 'Gauge Chart';\n        const widget = this.get('widget');\n        workspace.pushState('gaugeWidget', {\n          displayName,\n          widget\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/gauge-widget/gauge-chart/component\", [\"exports\", \"adept-iq/pods/components/ember-chart-fix/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* global Chart */\n  const NEEDLE_RADIUS = 80;\n\n  var _default = _component.default.extend({\n    chart: null,\n    needleAngle: Ember.computed('options.labels.{dial,min,max}', function () {\n      const options = this.get('options') || {};\n      const needleAngle = (options.labels.dial - options.labels.min) / (options.labels.max - options.labels.min);\n      return options.rotation + needleAngle * Math.PI;\n    }),\n\n    drawGaugeComponents() {\n      const chart = this.get('chart');\n\n      if (chart && chart.options && chart.chart.ctx && chart.width && chart.height) {\n        const options = chart.options;\n        const ctx = chart.chart.ctx;\n        const cw = chart.width;\n        const ch = chart.height; // Get positions for dial\n\n        const cx = cw / 2;\n        const cy = ch - ch / 4;\n        const radianAngle = this.get('needleAngle');\n        const radius = NEEDLE_RADIUS;\n        ctx.translate(cx, cy);\n        ctx.rotate(radianAngle);\n        ctx.beginPath();\n        ctx.moveTo(0, -5);\n        ctx.lineTo(radius, 0);\n        ctx.lineTo(0, 5);\n        ctx.fillStyle = '#007bff';\n        ctx.fill();\n        ctx.rotate(-radianAngle);\n        ctx.translate(-cx, -cy);\n        ctx.beginPath();\n        ctx.arc(cx, cy, 7, 0, Math.PI * 2);\n        ctx.fill(); // configure label text\n\n        const fontStyle = 'Avenir Next';\n        const txt1 = options.labels.min;\n        const txt2 = options.labels.max; // let txt3 = options.labels.dial;\n\n        const color = '#666666';\n        ctx.font = '12px ' + fontStyle;\n        ctx.fillStyle = color;\n        ctx.textAlign = 'center';\n        ctx.testBaseline = 'bottom';\n        const centerX = (chart.chartArea.left + chart.chartArea.right) / 2;\n        const yPadding = 7;\n        const yPosition = chart.chartArea.top + chart.chartArea.bottom + yPadding;\n        ctx.fillText(txt1, centerX - NEEDLE_RADIUS, yPosition);\n        ctx.fillText(txt2, centerX + NEEDLE_RADIUS, yPosition); // ctx.fillText(txt3, centerX, yPosition);\n      }\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n      /*eslint-disable */\n\n\n      const _this = this;\n      /*eslint-enable */\n\n\n      Chart.plugins.register({\n        afterDraw: function (chart) {\n          if (chart.config.options.gauge) {\n            _this.drawGaugeComponents();\n          }\n        }\n      });\n      Chart.plugins.register({\n        resize: function () {}\n      });\n    },\n\n    didInsertElement() {\n      const context = this.get('element');\n      const data = this.get('data');\n      const type = this.get('type');\n      const options = this.get('options');\n      const chart = new Chart(context, {\n        type: type,\n        data: data,\n        options: options\n      });\n      this.set('chart', chart);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/gauge-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ryZC25U9\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"analytics-widget-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"chartTitle\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"analytics-widget-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-filter\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-body gauge-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"gauge-chart-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"options\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"iq-widgets/gauge-widget/gauge-chart\\\",null,[[\\\"type\\\",\\\"data\\\",\\\"options\\\",\\\"width\\\"],[\\\"doughnut\\\",[23,[\\\"chartData\\\"]],[23,[\\\"chartOptions\\\"]],260]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/gauge-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/base-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-cell', 'data-test-table-base-cell'],\n    classNameBindings: ['subscriptionTrip', 'data-test-alertCategory'],\n    subscriptionTrip: Ember.computed('row.type', function () {\n      const pickupTypesArray = ['pickup', 'pick', 'p'];\n      const dropoffTypesArray = ['dropoff', 'drop', 'd'];\n      const type = Ember.get(this, 'row.type');\n\n      if (type && (pickupTypesArray.includes(type.toLowerCase()) || dropoffTypesArray.includes(type.toLowerCase()))) {\n        return 'highlightable';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"egCT5+qM\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/editable/component\", [\"exports\", \"adept-iq/config/environment\", \"moment\", \"lodash\"], function (_exports, _environment, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['editable-cell', 'no-spinner'],\n    notifications: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    isEditing: false,\n    buffer: null,\n    isNumberType: false,\n    isDateType: false,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    isEditClick: Ember.computed.and('row.isEditing', 'column.isEditing'),\n    onIsEditingChange: Ember.observer('isEditClick', function () {\n      if (this.get('isEditClick')) {\n        this.startEditing();\n      } else {\n        this.discardChanges();\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.resetProperties();\n      const reconcileTripDate = new Date((0, _moment.default)(this.get('reconcile.reconcileDate')).format('YYYY-MM-DD'));\n      Ember.set(this, 'timeRange', {\n        startofday: (0, _moment.default)(reconcileTripDate).add(+1, 'day').endOf('day').toISOString(),\n        endofday: (0, _moment.default)(reconcileTripDate).startOf('day').toISOString()\n      });\n    },\n\n    startEditing() {\n      if (this.get('isEditing')) return;\n      this.set('isEditing', true);\n      const row = this.get('row');\n      const column = this.get('column');\n      const valuePath = column.get('valuePath');\n      const columnId = column.get('id');\n      this.setValuesTypeFlags(columnId);\n      const value = row.get(valuePath);\n      const buffer = value ? value.toString() : '';\n      this.set('buffer', buffer);\n      column.set('newValue', buffer);\n\n      if (columnId === 'actualArrivalTime' || columnId === 'actualDepartTime') {\n        const startTimeFormat = (0, _moment.default)(buffer).subtract(-2, 'days').toISOString();\n        this.set('timeRange.startTime', buffer);\n        this.set('timeRange.startOfDay', startTimeFormat);\n      }\n    },\n\n    resetProperties() {\n      this.setProperties({\n        isNumberType: false,\n        isDateType: false\n      });\n    },\n\n    setColumnValue(value) {\n      const column = this.get('column');\n\n      if (column) {\n        column.set('newValue', value);\n      }\n\n      this.enableDisableSaveBtn(column);\n    },\n\n    enableDisableSaveBtn(column) {\n      const oldValue = this.getFormattedValue(column, 'oldValue');\n      const newValue = this.getFormattedValue(column, 'newValue');\n\n      if (oldValue !== newValue) {\n        column.set('editingStart', true);\n      } else {\n        column.set('editingStart', false);\n      }\n    },\n\n    getFormattedValue(column, valueType) {\n      let formattedValue = '';\n      const value = column.get(valueType);\n      const format = column.get('format');\n      const formatValue = _lodash.default.isFunction(format) ? format(value) : format;\n      const dataType = column.get('dataType');\n\n      if (dataType === 'time') {\n        formattedValue = (0, _moment.default)(value).format(formatValue);\n      }\n\n      if (dataType === 'number') {\n        formattedValue = value ? value.toString() : '';\n      }\n\n      return formattedValue;\n    },\n\n    setValuesTypeFlags(columnId) {\n      switch (columnId) {\n        case 'actualArrivalTime':\n        case 'actualDepartTime':\n          Ember.set(this, 'isDateType', true);\n          break;\n\n        case 'odometerOnArrival':\n          Ember.set(this, 'isNumberType', true);\n          break;\n\n        default:\n          break;\n      }\n    },\n\n    discardChanges() {\n      if (!this.get('isEditing')) return;\n      this.set('isEditing', false);\n      this.set('row.isEditing', false);\n      this.set('column.isEditing', false);\n      this.set('column.newValue', null);\n      this.set('column.editingStart', null);\n    },\n\n    actions: {\n      onInput(text) {\n        this.set('buffer', text);\n        this.setColumnValue(text);\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n        this.setColumnValue((0, _moment.default)(this.timeRange.startTime));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/editable/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"c4Cl3Pni\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isEditClick\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isNumberType\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"value\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"buffer\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isDateType\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"placeholder\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"HH:MM\\\",\\\"en\\\",1,false,false,true,0,true,[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[23,[\\\"timeRange\\\",\\\"startTime\\\"]],[23,[\\\"timeRange\\\",\\\"endofday\\\"]],[23,[\\\"timeRange\\\",\\\"startofday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"timeRange.startTime\\\"],null]]]],false],[0,\\\"\\\\n  \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/editable/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-text-extension-cell'],\n    textContent: Ember.computed('value', function () {\n      const value = this.get('value');\n      return value;\n    }),\n    actions: {\n      showDropdown(dropdown, event) {\n        dropdown.actions.open(event);\n      },\n\n      hideDropdown(dropdown, event) {\n        dropdown.actions.close(event);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"RS0Ofox8\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"text\\\",\\\"item\\\"],\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"verticalPosition\\\"],[\\\"auto\\\",\\\"auto\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/template.hbs' @ L5:C5) \\\"],null]],[[\\\"class\\\",\\\"onMouseEnter\\\",\\\"onMouseLeave\\\",\\\"eventType\\\"],[\\\"can-focus\\\",[27,\\\"action\\\",[[22,0,[]],\\\"showDropdown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hideDropdown\\\"],null],\\\"onMouseEnter\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"textContent\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[\\\"travelNeedDesc\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/template.hbs' @ L14:C5) \\\"],null]],[[\\\"class\\\"],[\\\"cell-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell-text-content-extension\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"textContent\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[22,2,[\\\"className\\\"]]],[9],[1,[22,2,[\\\"value\\\"]],false],[10],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/hover-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/radio-button/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-radio-button-cell', 'data-test-table-radio-button-cell'],\n    disabled: Ember.computed.readOnly('row.disabled'),\n    actions: {\n      onRadioButtonClick() {\n        // prevents `click` event from bubbling to row component\n        // event.stopPropagation();\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const selectedRow = rows.findBy('selected', true);\n        const buttonClickAction = this.get('tableActions.radioButtonClick');\n        if (row === selectedRow) return;\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n        }\n\n        if (buttonClickAction) {\n          buttonClickAction(row);\n        }\n\n        row.set('selected', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/radio-button/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vGB8ZIHJ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"disabled\\\",[21,\\\"disabled\\\"]],[12,\\\"checked\\\",[23,[\\\"row\\\",\\\"selected\\\"]]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/history-routes-widget/cells/radio-button/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/pods/components/iq-widgets/history-routes-widget/config\", \"ember-light-table\", \"adept-iq/config/mapped-permIds\", \"moment\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/format-text-extension\"], function (_exports, _component, _config, _emberLightTable, _mappedPermIds, _moment, _emberConcurrency, _lodash, _formatTextExtension) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const toPixels = x => `${x}px`;\n\n  var _default = _component.default.extend({\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    session: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    activeContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    classNames: ['reconcile-widget'],\n    config: _config.default,\n    contextMenuContainer: null,\n    contextMenuContainerPosition: null,\n    contextMenuOptions: null,\n    lastRowClicked: null,\n    isEditClicked: false,\n    fetchRouteDataTask: null,\n    fetchTaxiDataTask: null,\n    resetAndFetchRouteIdsTask: null,\n    reconcileRouteDetails: null,\n    isColumnEditorSettings: false,\n    isCloseSearchPassenger: false,\n    isUnscheduledTrips: false,\n    editableColumnList: null,\n    noresultFound: false,\n    scrollToOffset: 0,\n    contextMenuHeight: 350,\n    serviceModeTaxiType: 'Taxi',\n    tableConfigColumns: null,\n    ascendingFlag: false,\n    isLoading: Ember.computed.oneWay('dwhServcie.fetchRecords.isRunning'),\n    currentSortId: Ember.computed.alias('config.defaultSortId'),\n    currentSortAsc: Ember.computed.alias('config.defaultSortAsc'),\n    map: Ember.computed.readOnly('workspace.activeContext.topActiveContext.map'),\n    isCompletedRoute: Ember.computed.alias('reconcile.isCompletedRoute'),\n    routeId: Ember.computed.readOnly('reconcile.reconcileSelectedRoute'),\n    reconcileTripDate: Ember.computed.readOnly('reconcile.reconcileDate'),\n    reconcileHistoryRowData: Ember.computed.alias('reconcile.reconcileHistoryRouteDetails'),\n    isFilterAllowed: Ember.computed.bool('workspace.configPermissions.map.filterAllowed'),\n    reconcileTripsWithTravelNeedsCount: Ember.computed('reconcile.reconcileTripDetails', function () {\n      const reconTripDetails = this.get('reconcile.reconcileTripDetails') || [];\n      return reconTripDetails.map(trip => {\n        const travelNeeds = this.getTravelNeeds(trip);\n\n        if (travelNeeds) {\n          return { ...trip,\n            travelNeedsCount: travelNeeds\n          };\n        }\n\n        return { ...trip\n        };\n      });\n    }),\n    canEdit: Ember.computed('lastRowClicked', 'editableColumnList', function () {\n      const columnList = Ember.get(this, 'editableColumnList');\n      let editableColumns = [];\n\n      if (!Ember.isEmpty(columnList)) {\n        editableColumns = columnList.filterBy('isEditable', true);\n      }\n\n      return this.lastRowClicked && !this.isCompletedRoute && editableColumns.length;\n    }),\n    canSave: Ember.computed('reconTripsTable.columns.@each.editingStart', function () {\n      const columns = Ember.get(this, 'reconTripsTable.columns');\n      let editedColumns = [];\n\n      if (!Ember.isEmpty(columns)) {\n        editedColumns = columns.filterBy('editingStart', true);\n      }\n\n      return editedColumns.length;\n    }),\n    isFiltered: Ember.computed('reconTripsTable.columns.@each.{isFiltered}', function () {\n      return this.get('reconTripsTable.columns').isAny('isFiltered');\n    }),\n    title: Ember.computed('reconcileRouteDetails', function () {\n      const routeDetails = Ember.get(this, 'reconcileRouteDetails');\n\n      if (routeDetails && routeDetails.routeid && this.reconcileTripDate) {\n        return `Route ${routeDetails.routeid} on ${(0, _moment.default)(this.reconcileTripDate).format('MM/DD/YYYY')}`;\n      }\n\n      return 'Route';\n    }),\n    onWidgetStateChange: Ember.observer('widget.state', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateConfigColumns');\n    }),\n    onSelectedRouteUpdate: Ember.observer('dwhService.reconTripsWithBreaks', 'dwhService.reconTripsWithBreaks.[]', function () {\n      const reconTripsWithBreaks = this.get('dwhService.reconTripsWithBreaks');\n      this.get('reconTripsTable').setRows(reconTripsWithBreaks);\n    }),\n\n    // updateReconcileHistoryRouteDetails: observer('reconcile.reconcileTripDetails', 'currentSortAsc', 'currentSortId', function() {\n    //   this.resetProperties();\n    //   const historyRouteDetails = this.get('reconcileTripsWithTravelNeedsCount') || [];\n    //   this.set('reconcile.reconcileTripsWithTravelNeedsCount', historyRouteDetails);\n    //   const routeDetails = get(this, 'reconcile.reconcileRouteInfo');\n    //   const sortKey = get(this, 'currentSortId');\n    //   const currentSortAsc = get(this, 'currentSortAsc');\n    //   const configreconTripsTableColumns = this.config.reconTripColumns;\n    //   const foundCol = configreconTripsTableColumns.find(col => col.valuePath === sortKey);\n    //   this.set('reconcileRouteDetails', routeDetails);\n    //   const sortedList = currentSortAsc ? this.sortList(historyRouteDetails, sortKey, foundCol.dataType) : this.sortList(historyRouteDetails, sortKey).reverse();\n    //   this.get('reconTripsTable').setRows(sortedList);\n    //   this.refreshData();\n    //   this.maintainTripSelection();\n    // }),\n    init() {\n      this._super(...arguments); //assign table and populate data in it\n\n\n      this.configurePermissions();\n      this.createTripTable();\n      this.updateColumnsForFilter(); // if (this.get('reconcile.reconcileHistoryRouteDetails')) {\n      //   run.scheduleOnce('afterRender', this, 'updateReconcileHistoryRouteDetails');\n      // }\n      // run.scheduleOnce('afterRender', this, 'updateReconcileHistoryRouteDetails');\n\n      this.onSelectedRouteUpdate();\n      this.get('geocode').deactivateGeocode();\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.get('geocode').deactivateGeocode();\n    },\n\n    configurePermissions() {\n      this.set('isTransferTripToRouteAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferTripRecon, null));\n      this.set('isEditTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editTripInfoRecon, null));\n      this.set('isCancelTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.cancelTripRecon, null));\n      this.set('isNoshowTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.noShowTripRecon, null));\n      this.set('isUnperformNoshowTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.unperformNoShowRecon, null));\n      this.set('isBreakAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.insertBreakRecon, null));\n      this.set('isTransferTripToTaxiAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferTripToTaxiRecon, null));\n      this.set('isScheduledTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.scheduleTripsRecon, null));\n      this.set('isEditColumnAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editColumnRecon, null));\n      this.set('isViewUnscheduledTripsAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.viewUnscheduledTripsRecon, null));\n      this.set('isAddNewTripsAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.addNewTripRecon, null));\n      this.set('isRouteActivityLogAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.activityLogRoute, null));\n      this.set('isTripActivityLogAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.activityLog, null));\n      this.set('isSortingAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.sortRouteGridRecon, null));\n    },\n\n    deriveTravelNeedsCount(travelNeeds) {\n      if (travelNeeds && travelNeeds.length === 1) {\n        return `${travelNeeds.length} Travel Need`;\n      }\n\n      if (travelNeeds && travelNeeds.length > 1) {\n        return `${travelNeeds.length} Travel Needs`;\n      }\n\n      return '';\n    },\n\n    getTravelNeeds(trip) {\n      const travelNeeds = [];\n      let tripTravelNeeds = trip.eventAttribute ? trip.eventAttribute.attribute : '';\n\n      if (!_lodash.default.isEmpty(tripTravelNeeds)) {\n        if (!_lodash.default.isArray(tripTravelNeeds)) {\n          // Only one item\n          tripTravelNeeds = [tripTravelNeeds];\n        }\n\n        const travelNeedCount = this.deriveTravelNeedsCount(tripTravelNeeds);\n        tripTravelNeeds.forEach(function (item) {\n          const count = parseInt(item.cnt, 10) || 1;\n          const name = item.type;\n          let text = {};\n          text = (0, _formatTextExtension.formatTextExtension)('valueItem', `${count} ${name}`);\n          text.travelNeedDesc = travelNeedCount;\n          travelNeeds.push(text);\n        });\n      }\n\n      return travelNeeds;\n    },\n\n    sortList(tripList, key, type) {\n      const paths = key.split('.');\n      return tripList.sort(function (a, b) {\n        const valueA = a[paths[0]] ? a[paths[0]][paths[1]] : '';\n        const valueB = b[paths[0]] ? b[paths[0]][paths[1]] : '';\n\n        if (paths.length > 1 && type === 'time') {\n          // eslint-disable-next-line no-nested-ternary\n          return (0, _moment.default)(valueA) > (0, _moment.default)(valueB) ? 1 : (0, _moment.default)(valueB) > (0, _moment.default)(valueA) ? -1 : 0;\n        }\n\n        if (paths.length > 1 && type !== 'time') {\n          // eslint-disable-next-line no-nested-ternary\n          return valueA > valueB ? 1 : valueB > valueA ? -1 : 0;\n        }\n\n        if (paths.length <= 1 && type === 'time') {\n          // eslint-disable-next-line no-nested-ternary\n          return (0, _moment.default)(a[key]) > (0, _moment.default)(b[key]) ? 1 : (0, _moment.default)(b[key]) > (0, _moment.default)(a[key]) ? -1 : 0;\n        } // eslint-disable-next-line no-nested-ternary\n\n\n        return a[key] > b[key] ? 1 : b[key] > a[key] ? -1 : 0;\n      });\n    },\n\n    resetProperties() {\n      this.setProperties({\n        reconcileRouteDetails: null,\n        lastRowClicked: null,\n        isEditClicked: null,\n        noresultFound: false\n      });\n    },\n\n    resetTable(isSearchMessageVisible) {\n      this.set('reconcileRouteDetails', null);\n      this.get('reconTripsTable').setRows([]);\n\n      if (isSearchMessageVisible) {\n        if (Ember.get(this, 'reconTripsTable').isEmpty) {\n          this.set('noresultFound', true);\n        }\n      }\n    },\n\n    maintainTripSelection() {\n      const selectedSearchedTrip = Ember.get(this, 'reconcile.selectedSearchedTrip');\n      const rows = this.get('reconTripsTable.rows.content');\n\n      if (selectedSearchedTrip) {\n        rows.forEach(_row => {\n          if (_row.get('tripId') === selectedSearchedTrip.get('tripId') && _row.get('type') === 'pickup') {\n            this.send('onRowClick', _row);\n          }\n        });\n      }\n    },\n\n    selectRow(stopId) {\n      if (!stopId) {\n        return;\n      }\n\n      const rows = this.get('reconTripsTable.rows');\n      const previousSelectedRow = rows.filter(row => row.content.stopId === stopId)[0];\n\n      if (previousSelectedRow) {\n        this.send('onRowClick', previousSelectedRow);\n      }\n    },\n\n    createTripTable() {\n      const configreconTripsTableColumns = this.config.reconTripColumns;\n      configreconTripsTableColumns.forEach(column => {\n        if (['date', 'datetime', 'time', 'datetimeflatpickr'].includes(column.dataType) && column.format && typeof column.format === 'string') {\n          const formatDate = column.format;\n\n          column.format = value => {\n            return Ember.isEmpty(value) ? value : (0, _moment.default)(value).format(formatDate);\n          };\n        }\n      });\n      const reconTripsTable = new _emberLightTable.default(configreconTripsTableColumns);\n      this.set('reconTripsTable', reconTripsTable);\n      this.setSortingPropsToRouteTable();\n      this.setEditablePropsToRouteTable();\n    },\n\n    setSortingPropsToRouteTable() {\n      const routeTableColumns = this.get('reconTripsTable.columns');\n      routeTableColumns.forEach(column => {\n        if (column.valuePath === Ember.get(this, 'currentSortId')) {\n          column.set('sorted', true);\n          column.set('ascending', this.config.defaultSortAsc);\n        }\n      });\n    },\n\n    setEditablePropsToRouteTable() {\n      if (Ember.isEmpty(this.editableColumnList)) {\n        this.set('editableColumnList', []);\n      }\n\n      const editRouteTableColumns = this.get('reconTripsTable.columns');\n      editRouteTableColumns.map(column => {\n        column.set('isEditable', true);\n        this.editableColumnList.push({\n          label: column.label,\n          isEditable: column.isEditable\n        });\n      });\n    },\n\n    updateColumnsForFilter() {\n      const columns = [];\n      const tableColumns = this.config.reconTripColumns;\n\n      if (!Ember.isEmpty(tableColumns)) {\n        tableColumns.forEach(column => {\n          if (!column.unAvailable) {\n            const col = Ember.Object.create(column);\n            col.set('filterTypes', this.config.filters[column.dataType] || []);\n            columns.push(col);\n          }\n        });\n      }\n\n      Ember.set(this, 'tableConfigColumns', columns);\n    },\n\n    getEditTableColumn(configColumn) {\n      let column = null;\n      const editConfigColumns = this.config.reconTripColumns;\n      const editConfigColumn = editConfigColumns.filter(configCol => configCol.valuePath === configColumn.id)[0];\n\n      if (editConfigColumn) {\n        const editColumns = Ember.get(this, 'reconTripsTable.columns');\n        column = editColumns.filter(col => col.valuePath === configColumn.id)[0];\n      }\n\n      return column;\n    },\n\n    getNonEditTableColumn(configColumn) {\n      let column = null;\n      const nonEditConfigColumns = this.config.reconTripColumns;\n      const nonEditConfigColumn = nonEditConfigColumns.filter(configCol => configCol.valuePath === configColumn.id)[0];\n\n      if (nonEditConfigColumn) {\n        const nonEditColumns = Ember.get(this, 'reconTripsTable.columns');\n        column = nonEditColumns.filter(col => col.valuePath === configColumn.id)[0];\n      }\n\n      return column;\n    },\n\n    setPropToActualColumn(configColumn, options) {\n      let column = this.getEditTableColumn(configColumn);\n\n      if (!column) {\n        column = this.getNonEditTableColumn(configColumn);\n      }\n\n      if (column) {\n        if (options.isHiddenProp) {\n          column.set('hidden', configColumn.hidden);\n        } else if (options.isWidthProp) {\n          column.set('width', configColumn.width);\n        }\n      }\n\n      return column;\n    },\n\n    updateConfigColumns() {\n      const state = this.get('widget.state') || {};\n      const columns = this.get('tableConfigColumns') || [];\n      let shouldResize = false;\n      const scrollLeft = this.getScrollLeft();\n      const columnsHash = state.columns || {};\n      Object.entries(columnsHash).forEach(_ref => {\n        let [id, columnState] = _ref;\n        const column = columns.findBy('id', id);\n\n        if (!column) {\n          return;\n        }\n\n        if (Ember.isPresent(columnState.hidden)) {\n          column.set('hidden', columnState.hidden);\n          this.setPropToActualColumn(column, {\n            isHiddenProp: true\n          });\n          shouldResize = true;\n        }\n\n        const wasFiltered = column.get('isFiltered');\n        ['filterTypeId', 'filterValues', 'filterType'].forEach(prop => {\n          // allow null value to overwrite\n          if (!columnState.hasOwnProperty(prop)) {\n            return;\n          }\n\n          column.set(prop, columnState[prop]);\n        });\n\n        if (wasFiltered || column.get('isFiltered')) {\n          Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n        }\n\n        if (Ember.isPresent(columnState.width)) {\n          column.set('width', toPixels(columnState.width));\n          this.setPropToActualColumn(column, {\n            isWidthProp: true\n          });\n          shouldResize = true;\n        }\n      });\n\n      if (shouldResize) {\n        // resize at end of _next_ loop so that all changes are applied\n        Ember.run.next(() => {\n          if (Ember.isPresent(scrollLeft)) {\n            // wait an additional loop before restoring scroll position\n            Ember.run.next(() => {\n              Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n            });\n          }\n        });\n      }\n\n      Ember.run.debounce(this, 'refreshData', 250);\n    },\n\n    setScrollLeft(scrollLeft) {\n      if (!this.$('.reconcile-widget-table-body')) {\n        return;\n      }\n\n      this.$('.reconcile-widget-table-body').scrollLeft(scrollLeft);\n    },\n\n    getScrollLeft() {\n      const body = this.$('.reconcile-widget-table-body');\n\n      if (body) {\n        return body.scrollLeft();\n      }\n\n      return 0;\n    },\n\n    getFilteredColumns(columns) {\n      return columns.filter(column => {\n        if (!Ember.isEmpty(column.filterType)) {\n          if (column.filterType.id === 'empty') {\n            return true;\n          } else if (!Ember.isEmpty(column.filterValues) && column.filterValues.filter(item => !Ember.isEmpty(item)).length) {\n            return true;\n          }\n        }\n\n        return false;\n      });\n    },\n\n    refreshData() {\n      const columns = this.get('tableConfigColumns') || [];\n      const tableData = this.get('reconcileHistoryRowData') || [];\n      const resultModel = [];\n\n      if (!Ember.isEmpty(tableData)) {\n        const searchColumns = this.getFilteredColumns(columns);\n        tableData.map(item => {\n          if (Ember.isEmpty(searchColumns)) resultModel.push(item);else {\n            let bool = true;\n            searchColumns.forEach(column => {\n              if (column.filterType && column.filterType.exp && column.filterType.exp(item[column.valuePath], column.filterValues)) return;\n              bool = false;\n            });\n            if (bool) resultModel.push(item);\n          }\n        });\n\n        if (resultModel) {\n          const editTable = Ember.get(this, 'reconTripsTable');\n          const nonEditTable = Ember.get(this, 'reconTripsTable');\n          const rows = [...new Set(resultModel)];\n          editTable.setRowsSynced(rows.toArray());\n          nonEditTable.setRowsSynced(rows.toArray());\n        }\n\n        this.set('noresultFound', false);\n\n        if (Ember.get(this, 'reconTripsTable').isEmpty) {\n          this.set('noresultFound', true);\n        }\n      }\n    },\n\n    isValidOption(optionId) {\n      switch (optionId) {\n        case 'reconcileTripTransferToRoute':\n          return this.isTransferTripToRouteAllowed;\n\n        case 'reconcileTripTransferToTaxi':\n          return this.isTransferTripToTaxiAllowed;\n\n        case 'reconcileCancelTrip':\n          return this.isCancelTripAllowed;\n\n        case 'reconcileNoShowTrip':\n          return this.isNoshowTripAllowed;\n\n        case 'reconcileUnPerformNoShow':\n          return this.isUnperformNoshowTripAllowed;\n\n        case 'reconcileEditAdditionalTripInfo':\n          return this.isEditTripAllowed;\n\n        case 'reconcileTripLog':\n          return this.isTripActivityLogAllowed;\n\n        case 'reconcileAddNewTrip':\n          return this.isAddNewTripsAllowed;\n\n        case 'reconcileAddBreak':\n          return this.isBreakAllowed;\n\n        case 'reconcileUnscheduledTrips':\n          return this.isViewUnscheduledTripsAllowed;\n\n        case 'reconcileShowRouteLog':\n          return this.isRouteActivityLogAllowed;\n\n        case 'reconcileColumnEditor':\n          return this.isEditColumnAllowed;\n\n        default:\n          break;\n      }\n\n      return false;\n    },\n\n    getEnableDisableOptionFlag(optionId, rowData) {\n      if (!rowData) {\n        return true;\n      }\n\n      let isEnabled = false;\n\n      if (this.get('reconcile.reconcileMode') === this.serviceModeTaxiType) {\n        return this.isValidOption(optionId) && (optionId === 'reconcileCancelTrip' || optionId === 'reconcileEditAdditionalTripInfo' || optionId === 'reconcileTripLog');\n      } // For normal trips\n\n\n      switch (rowData.type.toLowerCase()) {\n        case 'startgarage':\n        case 'endgarage':\n        case 'break':\n          isEnabled = this.isValidOption(optionId) && (this.isCompletedRoute && optionId === 'reconcileShowRouteLog' || !this.isCompletedRoute && (optionId === 'reconcileShowRouteLog' || optionId === 'reconcileAddNewTrip' || optionId === 'reconcileAddBreak' || optionId === 'reconcileUnscheduledTrips' || optionId === 'reconcileShowRouteLog' || optionId === 'reconcileColumnEditor'));\n          break;\n\n        case 'pick':\n        case 'drop':\n          isEnabled = this.isValidOption(optionId) && (this.isCompletedRoute && (optionId === 'reconcileTripLog' || optionId === 'reconcileShowRouteLog') || !this.isCompletedRoute && (optionId === 'reconcileTripTransferToRoute' || optionId === 'reconcileTripTransferToTaxi' || rowData.status && rowData.status.toLowerCase() !== 'noshow' && optionId === 'reconcileCancelTrip' || rowData.status && rowData.status.toLowerCase() !== 'noshow' && optionId === 'reconcileNoShowTrip' || rowData.status && rowData.status.toLowerCase() === 'noshow' && optionId === 'reconcileUnPerformNoShow' || optionId === 'reconcileWaitlistTrip' || optionId === 'reconcileEditAdditionalTripInfo' || optionId === 'reconcileTripLog' || optionId === 'reconcileAddNewTrip' || optionId === 'reconcileAddBreak' || optionId === 'reconcileUnscheduledTrips' || optionId === 'reconcileShowRouteLog' || optionId === 'reconcileColumnEditor'));\n          break;\n\n        default:\n          break;\n      }\n\n      return isEnabled;\n    },\n\n    createContextMenu(rowData) {\n      if (!rowData) {\n        return;\n      }\n\n      this.set('contextMenuOptions', []);\n      this.get('config').contextMenuOptionsList.map(option => {\n        this.get('contextMenuOptions').push(this.createContextMenuOptions(option.id, option.caption, option.dialogId, option.dialogTitle, rowData));\n      });\n    },\n\n    createContextMenuOptions(optionId, optionCaption, dialogId, dialogTitle, rowData) {\n      const disable = !this.getEnableDisableOptionFlag(optionId, rowData);\n      let action = null;\n\n      if (!disable) {\n        action = trip => {\n          Ember.set(this, 'contextMenuHandler', this.contextMenuCallback.bind(this, optionId));\n\n          if (optionId === 'reconcileTripTransferToTaxi') {\n            this.handleTranserTripToTaxi();\n          } else if (optionId === 'reconcileAddNewTrip') {\n            this.unselectRow();\n            this.toggleProperty('isCloseSearchPassenger');\n          } else if (optionId === 'reconcileColumnEditor') {\n            this.toggleProperty('isColumnEditorSettings');\n          } else if (optionId === 'reconcileUnscheduledTrips') {\n            this.toggleProperty('isUnscheduledTrips');\n          } else {\n            const recon = Ember.get(this, 'reconcile');\n            recon.set('reconcileSelectedTripId', trip.tripId);\n            this.get('workspace').pushState(optionId, {\n              trip,\n              title: dialogTitle,\n              route: Ember.get(this, 'reconcileRouteDetails'),\n              action: this.contextMenuHandler\n            });\n          }\n        };\n      }\n\n      return {\n        id: optionId,\n        name: optionCaption,\n        permId: dialogId,\n        disable,\n        action\n      };\n    },\n\n    async updateHistoryRouteWidget(stopId, isValid) {\n      Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', {\n        'reconcile-trip': [],\n        'reconcile-trip-stops': []\n      });\n\n      if (this.get('reconcile.reconcileMode') === this.serviceModeTaxiType) {\n        this.fetchTaxiDataTask.perform().then(() => {\n          if (stopId) {\n            this.toggleProperty('reconcile.isLoading');\n\n            if (isValid) {\n              this.get('notifications').success('SUCCESSFULLY CHANGED VALUES');\n            }\n\n            this.selectRow(stopId);\n          }\n        });\n        return;\n      }\n\n      try {\n        await this.reconcile.fetchReconcileTrips(this.routeId);\n      } catch (error) {\n        let message;\n\n        switch (error.status) {\n          case 400:\n            message = 'There was a problem with one of the fields. Please check over the form and try again.';\n            break;\n\n          default:\n            message = 'There was a problem is getting updated route, please try again.';\n            break;\n        }\n\n        this.get('notifications').warning(message);\n\n        if (this.get('reconcile.isLoading')) {\n          this.toggleProperty('reconcile.isLoading');\n        }\n      }\n    },\n\n    contextMenuCallback(optionId, isSaved) {\n      Ember.set(this, 'reconcile.reconcileSelectedTripId', null);\n\n      if (optionId === 'reconcileAddNewTrip') {\n        Ember.set(this, 'workspace.activeContext.topActiveContext.resetLocation', true);\n      }\n\n      if (optionId === 'reconcileEditAdditionalTripInfo' || optionId === 'reconcileAddBreak') {\n        Ember.set(this, 'workspace.activeContext.topActiveContext.resetMapFlag', true);\n      }\n\n      if (!isSaved || optionId === 'reconcileTripLog' || optionId === 'reconcileShowRouteLog') {\n        return;\n      }\n\n      this.updateHistoryRouteWidget();\n    },\n\n    isValidColumnForEditing(row, column) {\n      if (!row) {\n        return false;\n      }\n\n      let isValid = true;\n      const rowData = row.content;\n      const columnType = column.get('valuePath');\n\n      switch (rowData.type.toLowerCase()) {\n        case 'pickup':\n        case 'dropoff':\n          if (columnType === 'ambSeats' || columnType === 'fare' || columnType === 'pca' && !rowData.pca) {\n            isValid = false;\n          }\n\n          break;\n\n        case 'startgarage':\n        case 'endgarage':\n          if (columnType === 'stopTime' || columnType === 'otpStatus' || columnType === 'ambSeats' || columnType === 'wcSeats' || columnType === 'cmp' || columnType === 'pca' || columnType === 'fare') {\n            isValid = false;\n          }\n\n          break;\n\n        case 'break':\n          if (columnType === 'ambSeats' || columnType === 'wcSeats' || columnType === 'cmp' || columnType === 'pca' || columnType === 'fare') {\n            isValid = false;\n          }\n\n          break;\n\n        default:\n          break;\n      }\n\n      return isValid;\n    },\n\n    enableDisableTableRows(isEnable) {\n      const rows = this.get('reconTripsTable.rows');\n      rows.map(row => {\n        row.set('disabled', !isEnable);\n      });\n    },\n\n    manageRowEditing() {\n      const rows = this.get('reconTripsTable.rows');\n      const row = rows.findBy('selected');\n\n      if (row) {\n        const columns = this.get('reconTripsTable.columns');\n        columns.map(column => {\n          const valuePath = column.get('valuePath');\n          const value = row.get(valuePath);\n          column.set('oldValue', value);\n\n          if (column.get('isEditable') && this.isValidColumnForEditing(row, column)) {\n            row.set('isEditing', true);\n            row.set('columns', columns);\n            column.set('isEditing', true);\n            this.set('isEditClicked', true);\n          }\n        });\n      }\n\n      if (this.isEditClicked) {\n        this.enableDisableTableRows(false);\n      }\n    },\n\n    enableDisableEditing(row, isEnable) {\n      const columns = row.get('columns');\n      columns.map(column => {\n        column.set('isEditing', isEnable);\n\n        if (!isEnable) {\n          column.set('editingStart', isEnable);\n        }\n      });\n      row.set('isEditing', isEnable);\n    },\n\n    handleSaveTrip() {\n      const rows = this.get('reconTripsTable.rows');\n      const row = rows.findBy('selected');\n      let isValueChanged = false;\n\n      if (row) {\n        const rowData = row.get('content');\n        const columns = row.get('columns');\n        columns.map(column => {\n          const newValue = column.get('newValue');\n          const oldValue = column.get('oldValue');\n          const valuePath = column.get('valuePath');\n\n          if (newValue && oldValue !== newValue && column.get('isEditable')) {\n            row.set(valuePath, newValue);\n            isValueChanged = true;\n\n            if (valuePath === 'actualTime') {\n              row.set('eta', newValue);\n              row.set('arriveTime', newValue);\n            }\n          }\n        });\n        this.enableDisableEditing(row, false);\n        this.enableDisableTableRows(true);\n        this.set('lastRowClicked', rowData);\n      }\n\n      if (isValueChanged) {\n        this.toggleProperty('reconcile.isLoading');\n        this.get('saveTripDetailsTask').perform(row);\n      }\n\n      this.set('isEditClicked', false);\n    },\n\n    // Create playload for map polyline and marker!!!\n    // Later to be updated with relation model\n    mapTrip(selectedTrip) {\n      const tripDetail = {\n        eventPoints: [],\n        addresses: {\n          pick: null,\n          drop: null\n        }\n      };\n      const reconcileStopPointMap = this.get('reconcile.reconcileStopPointMap');\n      Ember.set(this, 'workspace.activeContext.topActiveContext.implicitMarkers', []);\n      Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', []);\n      if (Ember.isEmpty(selectedTrip)) return Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', {\n        'reconcile-trip': [],\n        'reconcile-trip-stops': []\n      }); // To display polyline in the map, we should give the data as ember model object. But we get a normal object from the lambda as response.\n      // So built ReconcileTrip & ReconcileStops from the models [reconcile-trip & reconcile-stops] respectively.\n\n      const reconcileTrip = this.buildReconcileTrip(selectedTrip);\n      const reconcileStops = this.buildReconcileStops(reconcileStopPointMap[selectedTrip.tripId]);\n      const eventBounds = [];\n\n      if (!Ember.isEmpty(reconcileStops)) {\n        reconcileStops.forEach(stop => {\n          tripDetail.addresses[stop.get('type')] = stop.get('address');\n\n          if (stop.get('lat') && stop.get('lng')) {\n            tripDetail.eventPoints.push([stop.get('lat').toString(), stop.get('lng').toString()]);\n            eventBounds.push({\n              lat: stop.get('lat').toString(),\n              lng: stop.get('lng').toString()\n            });\n          }\n        });\n\n        if (tripDetail.eventPoints.length && tripDetail.addresses.pick && tripDetail.addresses.drop) {\n          const map = this.get('map');\n          const bounds = window.L.latLngBounds(tripDetail.eventPoints);\n\n          if (bounds) {\n            map.native.fitBounds(bounds);\n          }\n\n          Ember.set(this, 'workspace.activeContext.topActiveContext.implicitMarkers', eventBounds);\n          reconcileTrip.set('addresses', tripDetail.addresses);\n          reconcileTrip.set('providerName', Ember.get(this, 'reconcileRouteDetails.providerName'));\n          const pickAddress = tripDetail.addresses.pick;\n          const dropAddress = tripDetail.addresses.drop;\n          reconcileTrip.set('polyline', [[dropAddress.lat, dropAddress.lng], [pickAddress.lat, pickAddress.lng]]);\n          return Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', {\n            'reconcile-trip': [reconcileTrip],\n            'reconcile-trip-stops': reconcileStops\n          });\n        }\n      }\n\n      return Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', {\n        'reconcile-trip': [],\n        'reconcile-trip-stops': []\n      });\n    },\n\n    /**\n     * Create reconcileTrip from the selectedTrip\n     * @param selectedTrip\n     * @returns {reconcileTrip}\n     */\n    buildReconcileTrip(selectedTrip) {\n      const {\n        status,\n        type,\n        externalTripId,\n        promisedTime,\n        routeId,\n        tripId\n      } = selectedTrip;\n      const reconcileTrip = this.store.createRecord('reconcile-trip', {\n        tripId,\n        status,\n        externalTripId,\n        routeId,\n        'type': type.toLowerCase(),\n        'promiseTime': promisedTime\n      });\n      return reconcileTrip;\n    },\n\n    /**\n     * Create reconcileStops from the stops\n     * @param stops\n     * @returns {reconcileStops}\n     */\n    buildReconcileStops(stops) {\n      return stops.map(stop => {\n        const {\n          eta,\n          status,\n          type,\n          lat,\n          lng,\n          odometerOnArrival,\n          promisedTime,\n          routeId,\n          stopPointId,\n          tripId,\n          stopAddress\n        } = stop;\n        const reconcileAddress = this.store.createRecord('reconcile-address', {\n          'formattedAddress': stopAddress,\n          lat,\n          lng\n        });\n        const reconcileStop = this.store.createRecord('reconcile-stop', {\n          tripId,\n          'stopId': stopPointId,\n          eta,\n          status,\n          'type': type.toLowerCase(),\n          'stopType': type.toLowerCase(),\n          'odometerArrival': odometerOnArrival,\n          'promiseTime': promisedTime,\n          routeId,\n          lat,\n          lng,\n          'address': reconcileAddress\n        });\n        return reconcileStop;\n      });\n    },\n\n    calculateActualDepartTime(data) {\n      let actualDepartDateTime = data.actualArriveDateTime;\n\n      if (data.actualTime) {\n        if (!actualDepartDateTime) {\n          const tripDate = (0, _moment.default)(this.reconcileTripDate).format('MM-DD-YYYY');\n          actualDepartDateTime = (0, _moment.default)(tripDate + ' ' + data.actualTime);\n        } else {\n          const actualDate = (0, _moment.default)(actualDepartDateTime).format('MM-DD-YYYY');\n          actualDepartDateTime = (0, _moment.default)(actualDate + ' ' + data.actualTime);\n        }\n\n        const actualDepartDate = (0, _moment.default)(actualDepartDateTime).format('MM-DD-YYYY');\n        const startTime = (0, _moment.default)(actualDepartDateTime).format('hh:mm A');\n        const stopMins = data.stopTime;\n        const endTime = (0, _moment.default)(startTime, 'h:mm A').add(stopMins, 'minutes').format('hh:mm A');\n        return (0, _moment.default)(actualDepartDate + ' ' + endTime).toISOString();\n      }\n\n      return null;\n    },\n\n    saveTripDetailsTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const reconcile = this.get('reconcile');\n        const tripPayload = this.buildReconcileTripPayload();\n        yield reconcile.updateReconcileTripsInfo(tripPayload);\n        this.get('notifications').success('SUCCESSFULLY CHANGED VALUES');\n      } catch (error) {\n        let message;\n\n        switch (error.status) {\n          case 400:\n            message = 'There was a problem with one of the fields. Please check over the form and try again.';\n            break;\n\n          default:\n            message = 'There was a problem updating the route, please try again.';\n            break;\n        }\n\n        this.get('notifications').warning(message);\n        return false;\n      } finally {\n        this.toggleProperty('reconcile.isLoading');\n      }\n    }),\n\n    getValidationError() {\n      const rows = this.get('reconTripsTable.rows');\n      const row = rows.findBy('selected');\n\n      if (row) {\n        let actualTime, stopTime, odometer, ambSeats, wcSeats, cmp, pca, fare, otpStatus;\n        const columns = row.get('columns');\n        columns.map(column => {\n          const oldValue = column.get('oldValue');\n          const newValue = column.get('newValue');\n          const valuePath = column.get('valuePath');\n          const finalValue = !oldValue && newValue ? newValue : oldValue;\n\n          switch (valuePath) {\n            case 'actualTime':\n              actualTime = finalValue;\n              break;\n\n            case 'stopTime':\n              stopTime = finalValue;\n              break;\n\n            case 'mileage':\n              odometer = finalValue;\n              break;\n\n            case 'ambSeats':\n              ambSeats = finalValue;\n              break;\n\n            case 'wcSeats':\n              wcSeats = finalValue;\n              break;\n\n            case 'cmp':\n              cmp = finalValue;\n              break;\n\n            case 'pca':\n              pca = finalValue;\n              break;\n\n            case 'fare':\n              fare = finalValue;\n              break;\n\n            case 'otpStatus':\n              otpStatus = finalValue;\n              break;\n\n            default:\n              break;\n          }\n        });\n        const rowData = Ember.get(row, 'content');\n\n        if (stopTime && !Number(stopTime) && Number(stopTime) !== 0) {\n          return 'Stop time is not valid';\n        }\n\n        if (stopTime && !actualTime) {\n          return 'You can not edit Stop Time if Actual Time is empty';\n        }\n\n        if (odometer && !Number(odometer) && Number(odometer) !== 0) {\n          return 'Mileage is not valid';\n        }\n\n        if (!(rowData.type && (rowData.type.toLowerCase() === 'startgarage' || rowData.type.toLowerCase() === 'endgarage' || rowData.type.toLowerCase() === 'break'))) {\n          if (ambSeats && !Number(ambSeats) && Number(ambSeats) !== 0) {\n            return 'AmbSeats is not valid';\n          }\n\n          if (wcSeats && !Number(wcSeats) && Number(wcSeats) !== 0) {\n            return 'WcSeats is not valid';\n          }\n\n          if (cmp && !Number(cmp) && Number(cmp) !== 0) {\n            return 'CMP is not valid';\n          }\n\n          if (pca && !Number(pca) && Number(pca) !== 0) {\n            return 'PCA is not valid';\n          }\n\n          if (fare && !Number(fare) && Number(fare) !== 0) {\n            return 'Fare is not valid';\n          }\n\n          if (otpStatus && !Number(otpStatus) && Number(otpStatus) !== 0) {\n            return 'Otp status is not valid';\n          }\n        }\n      }\n\n      return null;\n    },\n\n    showErrorToolTip(title, tip) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: title,\n        tip: tip,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    removeTaxiTrip() {\n      const tripDetails = Ember.get(this, 'lastRowClicked');\n      const record = this.store.peekRecord('reconcile-trip', tripDetails.tripId);\n      this.store.unloadRecord(record);\n      this.contextMenuCallback('reconcileTripTransferToTaxi', true);\n    },\n\n    unselectRow() {\n      const tableRows = this.get('reconTripsTable.rows');\n      const selectedRow = tableRows.findBy('selected');\n\n      if (selectedRow) {\n        selectedRow.set('selected', null);\n        this.set('workspace.activeContext.topActiveContext.structuredMapData', {\n          'reconcile-trip': [],\n          'reconcile-trip-stops': []\n        });\n        Ember.set(this, 'lastRowClicked', null);\n      }\n    },\n\n    //Building Trip Payload Response\n    //Building Trip Payload Response\n    buildArriveAndDepartEventResForPayload(tripResponse, reconcileDate) {\n      return [{\n        'id': tripResponse.arriveEvent.id || '',\n        'routeId': tripResponse.arriveEvent.routeid || '',\n        'driverId': tripResponse.arriveEvent.driverid || '',\n        'vehicleId': tripResponse.arriveEvent.vehicleid || '',\n        'scheduleId': tripResponse.arriveEvent.scheduleid || '',\n        'stopPointId': tripResponse.arriveEvent.stoppointid,\n        'odo': tripResponse.arriveEvent.odo,\n        'tripId': tripResponse.arriveEvent.tripid,\n        'eventType': tripResponse.arriveEvent.eventtype,\n        'actionType': tripResponse.arriveEvent.actiontype,\n        'speed': tripResponse.arriveEvent.speed,\n        'heading': tripResponse.arriveEvent.heading,\n        'createdAt': tripResponse.arriveEvent.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.arriveEvent.updatedat || tripResponse.updatedAt,\n        'receivedAt': tripResponse.arriveEvent.receivedat || '',\n        'dbVersion': null,\n        'op$1': tripResponse.arriveEvent.__op || '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': tripResponse.arriveEvent.reconciliationnotes\n      }, {\n        'id': tripResponse.departEvent.id || '',\n        'routeId': tripResponse.departEvent.routeid || '',\n        'driverId': tripResponse.departEvent.driverid || '',\n        'vehicleId': tripResponse.departEvent.vehicleid || '',\n        'scheduleId': tripResponse.departEvent.scheduleid || '',\n        'stopPointId': tripResponse.departEvent.stoppointid,\n        'odo': tripResponse.departEvent.odo,\n        'tripId': tripResponse.departEvent.tripid,\n        'eventType': tripResponse.departEvent.eventtype,\n        'actionType': tripResponse.departEvent.actiontype,\n        'speed': tripResponse.departEvent.speed,\n        'heading': tripResponse.departEvent.heading,\n        'createdAt': tripResponse.departEvent.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.departEvent.updatedat || tripResponse.updatedAt,\n        'receivedAt': tripResponse.departEvent.receivedat || '',\n        'dbVersion': null,\n        'op$1': tripResponse.departEvent.__op || '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': tripResponse.departEvent.reconciliationnotes\n      }];\n    },\n\n    buildAddressResForPayload(tripResponse, reconcileDate) {\n      return [{\n        'id': tripResponse.address.id,\n        'streetName': tripResponse.address.streetname,\n        'streetNumber': tripResponse.address.streetnumber,\n        'postalCode': tripResponse.address.postalcode,\n        'locality': tripResponse.address.locality,\n        'region': tripResponse.address.region,\n        'latitude': tripResponse.address.latitude,\n        'longitude': tripResponse.address.longitude,\n        'formattedAddress': tripResponse.address.formattedaddress,\n        'zoneId': tripResponse.address.zoneid,\n        'createdAt': tripResponse.address.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.address.updatedat || tripResponse.updatedAt,\n        'op$1': tripResponse.address.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': tripResponse.address.reconciliationnotes\n      }];\n    },\n\n    buildRiderEventResForPayload(tripResponse, reconcileDate) {\n      return [{\n        'id': tripResponse.riderEvent.id,\n        'stopPointId': tripResponse.riderEvent.stoppointid,\n        'scheduledTime': tripResponse.riderEvent.scheduledtime,\n        'type': tripResponse.riderEvent.type,\n        'riderId': tripResponse.riderEvent.riderid,\n        'anchor': tripResponse.riderEvent.anchor,\n        'promisedTime': tripResponse.riderEvent.promisedtime,\n        'serviceStartTime': tripResponse.riderEvent.servicestarttime,\n        'serviceEndTime': tripResponse.riderEvent.serviceendtime,\n        'deleted': tripResponse.riderEvent.deleted,\n        'scheduleId': tripResponse.scheduleId,\n        'createdAt': tripResponse.riderEvent.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.riderEvent.updatedat || tripResponse.updatedAt,\n        'dbVersion': null,\n        'op$1': tripResponse.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': tripResponse.riderEvent.reconciliationnotes\n      }];\n    },\n\n    buildAttributeResForPayload(tripResponse, reconcileDate) {\n      const eventAttributes = tripResponse.eventAttribute || '';\n\n      if (eventAttributes) {\n        if (eventAttributes.attribute) {\n          return eventAttributes.attribute.map(atr => {\n            return {\n              'id': atr.id,\n              'type': atr.type,\n              'createdAt': atr.createdat || tripResponse.createdAt,\n              'updatedAt': atr.updatedat || tripResponse.updatedAt,\n              'dbVersion': null,\n              'op$1': atr.__op || '',\n              'deleted$1': false,\n              'reconcileDate': reconcileDate,\n              'isReconciled': true,\n              'reconciliationNotes': atr.reconciliationnotes\n            };\n          });\n        }\n\n        return [{\n          'id': tripResponse.eventAttribute.eventid || '',\n          'type': '',\n          'createdAt': tripResponse.eventAttribute.createdat || tripResponse.createdAt,\n          'updatedAt': tripResponse.eventAttribute.updatedat || tripResponse.updatedAt,\n          'dbVersion': null,\n          'op$1': tripResponse.eventAttribute.__op || '',\n          'deleted$1': false,\n          'reconcileDate': reconcileDate,\n          'isReconciled': true,\n          'reconciliationNotes': tripResponse.eventAttribute.reconciliationnotes || ''\n        }];\n      }\n\n      return [{\n        'id': '',\n        'type': '',\n        'createdAt': tripResponse.createdAt,\n        'updatedAt': tripResponse.updatedAt,\n        'dbVersion': null,\n        'op$1': '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': ''\n      }];\n    },\n\n    buildStopPointResForPayload(tripResponse, reconcileDate) {\n      return [{\n        'id': tripResponse.stopPointId,\n        'tripId': tripResponse.tripId,\n        'routeIndex': null,\n        'addressId': tripResponse.address.id,\n        'clusterId': null,\n        'eta': tripResponse.eta,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': tripResponse.scheduleId,\n        'status': tripResponse.status,\n        'createdAt': tripResponse.createdAt || tripResponse.createdAt,\n        'updatedAt': tripResponse.updatedAt || tripResponse.updatedAt,\n        'dbVersion': null,\n        'op$1': tripResponse.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRouteResFromRVDForPayload(rvdResponse, tripResponse, reconcileDate) {\n      return {\n        'deleted$1': false,\n        'endAddressId': rvdResponse.route.endaddressid,\n        'startAddressId': rvdResponse.route.startaddressid,\n        'version': null,\n        'op$1': rvdResponse.route.__op,\n        'createdAt': rvdResponse.route.createdat || tripResponse.createdAt,\n        'plannedStartTime': rvdResponse.route.plannedstarttime,\n        'plannedEndTime': rvdResponse.route.plannedendtime,\n        'id': rvdResponse.route.id,\n        'providerName': rvdResponse.route.providername,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'status': rvdResponse.route.status,\n        'trackingId': rvdResponse.route.trackingid,\n        'updatedAt': rvdResponse.route.updatedat || tripResponse.updatedAt,\n        'actualStartTime': rvdResponse.route.actualstarttime,\n        'actualEndTime': rvdResponse.route.actualendtime,\n        'alertId': rvdResponse.route.alertid,\n        'otpValue': rvdResponse.route.otpvalue,\n        'otpStatus': rvdResponse.route.otpstatus,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': rvdResponse.route.reconciliationnotes\n      };\n    },\n\n    buildRiderResForPayload(tripResponse, reconcileDate) {\n      return {\n        'id': tripResponse.riderDetails.id,\n        'name': tripResponse.riderDetails.name,\n        'firstName': tripResponse.riderDetails.firstname,\n        'lastName': tripResponse.riderDetails.lastname,\n        'middleName': tripResponse.riderDetails.middlename,\n        'passengerTypeName': tripResponse.riderDetails.passengertypename,\n        'bookingClientId': tripResponse.riderDetails.bookingclientid,\n        'tripId': tripResponse.riderDetails.tripId,\n        'providerName': tripResponse.riderDetails.providername,\n        'op$1': tripResponse.riderDetails.__op,\n        'createdAt': tripResponse.riderDetails.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.riderDetails.updatedat || tripResponse.updatedAt,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildTripResForPayload(tripResponse, reconcileDate) {\n      return {\n        'id': tripResponse.tripId,\n        'routeId': tripResponse.routeId,\n        'status': tripResponse.status,\n        'externalId': tripResponse.externalTripId,\n        'scheduleId': tripResponse.scheduleId,\n        'createdAt': tripResponse.createdAt || tripResponse.createdAt,\n        'updatedAt': tripResponse.updatedAt || tripResponse.updatedAt,\n        'op$1': tripResponse.tripPayment.__op || '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildEventAttributesForPayload(tripResponse, reconcileDate) {\n      const eventAttributes = tripResponse.eventAttribute || '';\n\n      if (eventAttributes) {\n        return [{\n          'id': tripResponse.eventAttribute.eventid,\n          'eventId': tripResponse.eventAttribute.eventid,\n          'attributeId': tripResponse.eventAttribute.attributeid || '',\n          'attributeCount': tripResponse.eventAttribute.attributecount || '',\n          'scheduleId': tripResponse.eventAttribute.scheduleid || tripResponse.arriveEvent.scheduleid,\n          'createdAt': tripResponse.eventAttribute.createdat || tripResponse.createdAt,\n          'updatedAt': tripResponse.eventAttribute.updatedat || tripResponse.updatedAt,\n          'deletedAt': null,\n          'deleted$1': false,\n          'dbVersion': null,\n          'op$1': tripResponse.eventAttribute.__op || '',\n          'reconcileDate': reconcileDate,\n          'isReconciled': true\n        }];\n      }\n\n      return [{\n        'id': '',\n        'eventId': '',\n        'attributeId': '',\n        'attributeCount': '',\n        'scheduleId': tripResponse.arriveEvent.scheduleid,\n        'createdAt': tripResponse.createdAt,\n        'updatedAt': tripResponse.updatedAt,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': ''\n      }];\n    },\n\n    buildReconcileTripPayload() {\n      const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n      const reconcileRVDResponse = this.get('reconcile.reconcileRVDResponse').find(route => route.routeid === parseInt(reconcileRouteInfo.routeid, 10));\n      const selectedTripRow = this.get('reconcile.lastRowClickedInTripTable');\n      const reconcileDate = new Date().toISOString();\n      return {\n        'events': this.buildArriveAndDepartEventResForPayload(selectedTripRow, reconcileDate),\n        'address': this.buildAddressResForPayload(selectedTripRow, reconcileDate),\n        'riderEvents': this.buildRiderEventResForPayload(selectedTripRow, reconcileDate),\n        'attributes': this.buildAttributeResForPayload(selectedTripRow, reconcileDate),\n        'stopPoint': this.buildStopPointResForPayload(selectedTripRow, reconcileDate),\n        'rider': this.buildRiderResForPayload(selectedTripRow, reconcileDate),\n        'route': this.buildRouteResFromRVDForPayload(reconcileRVDResponse, selectedTripRow, reconcileDate),\n        'trip': this.buildTripResForPayload(selectedTripRow, reconcileDate),\n        'eventAttributes': this.buildEventAttributesForPayload(selectedTripRow, reconcileDate)\n      };\n    },\n\n    actions: {\n      onColumnEditorSaveClick(columnEditorList) {\n        const columns = this.get('reconTripsTable.columns');\n        columns.map(column => {\n          columnEditorList.map(item => {\n            if (item.label === column.label) {\n              column.set('isEditable', item.isEditable);\n            }\n          });\n        });\n        this.set('editableColumnList', columnEditorList);\n        this.send('onColumnEditorCloseClick');\n      },\n\n      onColumnEditorCloseClick() {\n        this.toggleProperty('isColumnEditorSettings');\n      },\n\n      onSearchPassengerCloseClick() {\n        this.toggleProperty('isCloseSearchPassenger');\n      },\n\n      onUnscheduledTripsCloseClick() {\n        this.toggleProperty('isUnscheduledTrips');\n      },\n\n      setContextMenuContainer(dropdown) {\n        this.set('contextMenuContainer', dropdown);\n      },\n\n      onContextMenuRowClick(action) {\n        const model = this.get('lastRowClicked');\n        this.get('contextMenuContainer').actions.close();\n\n        if (action.action) {\n          action.action(model);\n        }\n      },\n\n      onRowClick(row) {\n        if (this.get('isEditClicked')) {\n          return;\n        }\n\n        const rows = this.get('reconTripsTable.rows');\n        const verifyRoute = this.get('reconcile.verifyRouteIsChecked');\n        const selectedRow = rows.findBy('selected');\n        if (row === selectedRow) return;\n        this.mapTrip(row.content);\n        row.set('selected', true);\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n        }\n\n        if (verifyRoute) {\n          this.set('lastRowClicked', null);\n        } else {\n          this.set('lastRowClicked', row.get('content'));\n        }\n\n        this.set('reconcile.lastRowClickedInTripTable', row.get('content'));\n        Ember.set(this, 'reconcile.selectedTripRow', row.get('content'));\n      },\n\n      onEditRowRightClick(row, event) {\n        event.preventDefault();\n      },\n\n      onRowRightClick(row, event) {\n        if (this.get('isEditClicked')) {\n          return;\n        }\n\n        let rows = this.get('reconTripsTable.rows');\n        let selectedRow = rows.findBy('selected');\n\n        if (selectedRow !== row) {\n          rows = this.get('reconTripsTable.rows');\n          selectedRow = rows.findBy('selected');\n\n          if (selectedRow !== row) {\n            return;\n          }\n        }\n\n        this.createContextMenu(row.content);\n        let top = event.clientY;\n\n        if (top + this.contextMenuHeight > Ember.$(window).height()) {\n          top -= top + this.contextMenuHeight - Ember.$(window).height();\n        }\n\n        this.set('contextMenuContainerPosition', () => {\n          return {\n            style: {\n              top: top,\n              left: event.clientX\n            }\n          };\n        });\n        this.set('lastRowClicked', row.get('content'));\n        this.get('contextMenuContainer').actions.open();\n      },\n\n      onEditClick() {\n        if (this.get('isEditClicked') || this.isCompletedRoute) {\n          return;\n        }\n\n        this.manageRowEditing();\n      },\n\n      onUndoClick() {\n        if (!this.get('isEditClicked') || this.isCompletedRoute) {\n          return;\n        }\n\n        const rows = this.get('reconTripsTable.rows');\n        const row = rows.findBy('selected');\n\n        if (row) {\n          const columns = row.get('columns');\n          columns.forEach(column => {\n            // if (column.get('isEditable')) {\n            const oldValue = column.get('oldValue');\n            const valuePath = column.get('valuePath');\n\n            if (oldValue) {\n              row.set(valuePath, oldValue);\n            } // }\n\n          });\n          this.enableDisableEditing(row, false);\n          this.enableDisableTableRows(true);\n          this.set('isEditClicked', false); //this.manageRowEditing();\n        }\n      },\n\n      onSaveClick() {\n        if (this.isCompletedRoute) {\n          return;\n        } //save all the edit cells into the models\n\n\n        const error = this.getValidationError();\n\n        if (error) {\n          this.showErrorToolTip('Error message', error);\n        } else {\n          this.handleSaveTrip();\n        }\n      },\n\n      onColumnClick(column) {\n        if (!this.isSortingAllowed) {\n          return false;\n        }\n\n        const previousSortKey = Ember.get(this, 'currentSortId');\n        const sortColumn = column.get('valuePath');\n        const ascendingFlag = this.get('ascendingFlag');\n\n        if (sortColumn === previousSortKey) {\n          column.set('ascending', ascendingFlag);\n          this.set('ascendingFlag', !ascendingFlag);\n          this.toggleProperty('currentSortAsc');\n          return;\n        }\n\n        const routesColumns = this.get('reconTripsTable.columns');\n        routesColumns.forEach(col => {\n          if (col.valuePath === sortColumn) {\n            col.set('sorted', true);\n            column.set('ascending', true);\n          } else if (col.valuePath === previousSortKey) {\n            col.set('sorted', false);\n          }\n        });\n        Ember.set(this, 'currentSortId', sortColumn);\n        Ember.set(this, 'currentSortAsc', true);\n      },\n\n      onScroll(offset) {\n        Ember.set(this, 'scrollToOffset', offset);\n        event.preventDefault();\n      },\n\n      onFilterButtonClick() {\n        if (this.get('isEditClicked')) {\n          return;\n        }\n\n        this.unselectRow();\n        const columns = this.get('tableConfigColumns') || [];\n        const workspace = this.get('workspace');\n        const widget = this.get('widget');\n        const displayName = `${this.config.title} Filters`; // close sidebar if _this_ widget's filter is currently open\n        // @TODO: define and use unique keys rather than `displayName` for this\n\n        if (displayName === workspace.get('topStateDisplayName')) {\n          workspace.popState();\n          return;\n        }\n\n        let topState = workspace.get('topState');\n\n        while (topState === 'reconcileFilterColumnWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        workspace.pushState('reconcileFilterColumnWidget', {\n          columns,\n          widget,\n          displayName\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/config\", [\"exports\", \"adept-iq/config/mapped-permIds\", \"adept-iq/pods/components/reconcile-column-editor/stubs\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _mappedPermIds, _stubs, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const headerComponent = 'iq-widgets/history-routes-widget/table-header';\n  const editableCellComponent = 'iq-widgets/history-routes-widget/cells/editable';\n  const cellComponent = 'iq-widgets/history-routes-widget/cells/radio-button';\n  const coloredCellComponent = 'iq-widgets/history-routes-widget/cells/base-cell'; // const hoverCellComponent = 'iq-widgets/history-routes-widget/cells/hover-cell';\n\n  const editColumnLabels = _stubs.default.editColumnTableDate.map(column => {\n    return column.fieldId;\n  });\n\n  var _default = {\n    component: 'iq-widgets/history-routes-widget',\n    rowComponent: 'table/rows/action-row',\n    title: 'Reconcile',\n    editColumnLabels,\n    defaultSortId: 'eta',\n    defaultSortAsc: true,\n    contextMenuOptionsList: [{\n      id: 'reconcileTripTransferToRoute',\n      caption: 'Transfer Trip to Another Route',\n      dialogId: _mappedPermIds.default.transferTrip,\n      dialogTitle: 'Transfer Trip to Another Route'\n    }, {\n      id: 'reconcileTripTransferToTaxi',\n      caption: 'Transfer Trip to Taxi',\n      dialogId: _mappedPermIds.default.transferTrip,\n      dialogTitle: 'Transfer Trip to Taxi'\n    }, {\n      id: 'reconcileCancelTrip',\n      caption: 'Cancel Trip',\n      dialogId: _mappedPermIds.default.cancelTrip,\n      dialogTitle: 'Cancel Trip'\n    }, {\n      id: 'reconcileNoShowTrip',\n      caption: 'No show Trip',\n      dialogId: _mappedPermIds.default.noShowTrip,\n      dialogTitle: 'No show Trip'\n    }, {\n      id: 'reconcileUnPerformNoShow',\n      caption: 'Unperform No Show Trip',\n      dialogId: _mappedPermIds.default.unperformStop,\n      dialogTitle: 'Unperform No Show'\n    }, {\n      id: 'reconcileEditAdditionalTripInfo',\n      caption: 'Edit Additional Trip Information',\n      dialogId: _mappedPermIds.default.additionalTrip,\n      dialogTitle: 'Edit Additional Trip Information'\n    }, {\n      id: 'reconcileTripLog',\n      caption: 'Show Trip Log',\n      dialogId: _mappedPermIds.default.activityLogTrip,\n      dialogTitle: 'Show Trip Log'\n    }, {\n      id: 'line',\n      caption: '',\n      dialogId: null,\n      dialogTitle: ''\n    }, {\n      id: 'reconcileAddNewTrip',\n      caption: 'Add New Trip to Route',\n      dialogId: 'Add New Trip to Route',\n      dialogTitle: _mappedPermIds.default.newTrip\n    }, {\n      id: 'reconcileAddBreak',\n      caption: 'Insert Driver Break',\n      dialogId: _mappedPermIds.default.addBreak,\n      dialogTitle: 'Insert Driver Break'\n    }, {\n      id: 'reconcileUnscheduledTrips',\n      caption: 'View Unscheduled Trips',\n      dialogId: _mappedPermIds.default.unscheduledTrips,\n      dialogTitle: 'View Unscheduled Trips'\n    }, {\n      id: 'reconcileShowRouteLog',\n      caption: 'Show Route Log',\n      dialogId: _mappedPermIds.default.activityLog,\n      dialogTitle: 'Show Route Log'\n    }, {\n      id: 'reconcileColumnEditor',\n      caption: 'Column Editor Settings',\n      dialogId: _mappedPermIds.default.activityLog,\n      dialogTitle: 'Column Editor Settings'\n    }],\n    reconTripColumns: [{\n      id: 'id',\n      width: '30px',\n      valuePath: 'id',\n      resizable: false,\n      cellComponent: cellComponent,\n      unAvailable: true\n    }, {\n      id: 'iqId',\n      label: 'ID',\n      valuePath: 'iqId',\n      dataType: 'number',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false,\n      cellComponent: coloredCellComponent\n    }, {\n      id: 'groupId',\n      label: 'Group ID',\n      valuePath: 'groupId',\n      dataType: 'number',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'lastName',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerFirstName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'firstName',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'status',\n      label: 'Status',\n      valuePath: 'status',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'type',\n      label: 'Type',\n      valuePath: 'type',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'eta',\n      label: 'ETA',\n      valuePath: 'eta',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'promisedTime',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'appointmentTime',\n      label: 'AppointmentTime',\n      valuePath: 'requestTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'address',\n      label: 'Address',\n      valuePath: 'pickAddress',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'city',\n      label: 'City',\n      valuePath: 'pickCity',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }, {\n      id: 'actualArrivalTime',\n      label: editColumnLabels[0],\n      valuePath: 'actualPickTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false,\n      cellComponent: editableCellComponent\n    }, {\n      id: 'actualDepartTime',\n      label: editColumnLabels[1],\n      valuePath: 'actualDropTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false,\n      cellComponent: editableCellComponent\n    }, {\n      id: 'odometerOnArrival',\n      label: editColumnLabels[3],\n      valuePath: 'dropOdometerReading',\n      dataType: 'number',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false,\n      cellComponent: editableCellComponent\n    }, {\n      id: 'travelNeeds',\n      label: 'Travel Needs',\n      valuePath: 'travelNeeds',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false,\n      cellComponent: editableCellComponent\n    }, {\n      id: 'fare',\n      label: 'Fare',\n      valuePath: 'fare',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      component: headerComponent,\n      hidden: false\n    }],\n    mapConfig: {\n      modelName: 'reconcile-trip',\n      trips: {\n        columns: [{\n          id: 'name',\n          index: 3,\n          type: 'uuid',\n          label: 'ID',\n          valuePath: 'tripId',\n          valuePreview: '1',\n          hidden: false,\n          isMapLabelVisible: true,\n          searchable: true,\n          defaultWidth: 60\n        }, {\n          id: 'riderFirstName',\n          index: 0,\n          type: 'text',\n          label: 'Passenger First Name',\n          valuePath: 'passenger.firstName',\n          hidden: false,\n          searchable: true,\n          defaultWidth: 75\n        }, {\n          id: 'riderLastName',\n          index: 1,\n          type: 'text',\n          label: 'Passenger Last Name',\n          valuePath: 'passenger.lastName',\n          hidden: false,\n          searchable: true,\n          defaultWidth: 75\n        }, {\n          id: 'riderPhone',\n          type: 'text',\n          index: 2,\n          label: 'Passenger Phone Number',\n          valuePath: 'passenger.phoneNumber',\n          hidden: true,\n          defaultWidth: 70\n        }, {\n          id: 'externalId',\n          index: 11,\n          type: 'uuid',\n          label: 'Passenger ID',\n          valuePath: 'passenger.id',\n          editable: true,\n          hidden: true,\n          defaultWidth: 60\n        }, {\n          id: 'tripType',\n          index: 9,\n          type: 'text',\n          label: 'Type',\n          valuePath: 'type',\n          editable: true,\n          hidden: true,\n          defaultWidth: 60\n        }, {\n          id: 'routeName',\n          index: 4,\n          type: 'text',\n          label: 'Route Name',\n          valuePath: 'routeId',\n          hidden: false,\n          searchable: true,\n          defaultWidth: 70\n        }, {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          hidden: false,\n          searchable: true,\n          isMapLabelVisible: true,\n          defaultWidth: 75\n        }, {\n          id: 'statusReason',\n          index: 6,\n          type: 'text',\n          label: 'Status Reason',\n          valuePath: 'statusReason',\n          hidden: false,\n          defaultWidth: 75\n        }, {\n          id: 'statusNotes',\n          index: 27,\n          type: 'text',\n          label: 'Status Notes',\n          valuePath: 'statusNotes',\n          hidden: true,\n          defaultWidth: 75\n        }, {\n          id: 'otpStatus',\n          index: 7,\n          type: 'text',\n          label: 'OTP Status',\n          valuePath: 'otpStatus',\n          valuePreview: 'On Time',\n          hidden: false,\n          searchable: true,\n          highlightable: true\n        }, {\n          id: 'otp',\n          index: 28,\n          type: 'number',\n          label: 'OTP',\n          valuePath: 'otpValue',\n          hidden: true,\n          highlightable: true\n        }, {\n          id: 'promisedTime',\n          index: 8,\n          type: 'datetime',\n          label: 'Promise Time',\n          valuePath: 'formattedPromiseTime',\n          valuePreview: '09:00',\n          editable: true,\n          format: 'HH:mm',\n          defaultWidth: 50\n        }, {\n          id: 'requestedTime',\n          index: 10,\n          type: 'time',\n          label: 'Request Time',\n          valuePath: 'formattedRequestTime',\n          valuePreview: '08:00',\n          editable: true,\n          hidden: false,\n          format: 'HH:mm',\n          defaultWidth: 50\n        }, {\n          id: 'anchorETA',\n          index: 12,\n          type: 'time',\n          label: 'Anchor ETA',\n          valuePath: 'anchorStop.stopPoint.etaNavStopPoint.eta',\n          valuePreview: '16',\n          hidden: true,\n          format: 'HH:mm',\n          defaultWidth: 50\n        }, {\n          id: 'serviceStartTime',\n          index: 13,\n          type: 'date',\n          label: 'Service Start Time',\n          valuePath: 'formattedServiceStartTime',\n          valuePreview: '?',\n          editable: true,\n          hidden: true,\n          format: 'HH:mm',\n          defaultWidth: 50\n        }, {\n          id: 'serviceEndTime',\n          index: 14,\n          type: 'date',\n          label: 'Service End Time',\n          valuePath: 'formattedServiceEndTime',\n          valuePreview: '?',\n          editable: true,\n          hidden: true,\n          format: 'HH:mm',\n          defaultWidth: 50\n        }, {\n          id: 'noShowTime',\n          index: 40,\n          type: 'time',\n          label: 'No Show Time',\n          valuePath: 'noshowTime',\n          valuePreview: '08:00',\n          editable: true,\n          hidden: false,\n          format: 'HH:mm',\n          defaultWidth: 50\n        }, {\n          id: 'anchor',\n          index: 15,\n          type: 'text',\n          label: 'Anchor',\n          valuePath: 'anchor',\n          valuePreview: 'Pick',\n          searchable: true,\n          editable: true,\n          hidden: false,\n          defaultWidth: 60\n        }, {\n          id: 'pickupaddress',\n          index: 16,\n          type: 'text',\n          label: 'Pickup Address',\n          valuePath: 'stopDetails.pick.address.formattedAddress',\n          editable: true,\n          hidden: true,\n          searchable: true,\n          defaultWidth: 80\n        }, {\n          id: 'pickupCity',\n          index: 17,\n          type: 'text',\n          label: 'Pickup City',\n          valuePath: 'pickStopFormattedCity',\n          editable: true,\n          hidden: true,\n          searchable: true,\n          defaultWidth: 80\n        }, {\n          id: 'dropaddress',\n          index: 18,\n          type: 'text',\n          label: 'Drop off Address',\n          valuePath: 'stopDetails.drop.address.formattedAddress',\n          editable: true,\n          hidden: true,\n          searchable: true,\n          defaultWidth: 80\n        }, {\n          id: 'dropCity',\n          index: 19,\n          type: 'text',\n          label: 'Drop off City',\n          valuePath: 'dropStopFormattedCity',\n          editable: true,\n          hidden: true,\n          searchable: true,\n          defaultWidth: 80\n        }, {\n          id: 'passengerNotes',\n          index: 21,\n          type: 'text',\n          label: 'Passenger Notes',\n          valuePath: 'passengerNotes',\n          editable: true,\n          hidden: true,\n          searchable: true,\n          defaultWidth: 80\n        }, {\n          id: 'notes',\n          index: 20,\n          type: 'text',\n          label: 'Driver Notes',\n          valuePath: 'driverNotes',\n          editable: true,\n          hidden: true,\n          searchable: true,\n          defaultWidth: 50\n        }, {\n          id: 'travelNeeds',\n          index: 22,\n          type: 'enum',\n          label: 'Travel Needs',\n          valuePath: 'formattedTravelNeeds',\n          cellDesc: 'Travel Needs',\n          editable: false,\n          hidden: true\n        }, // STUB FOR AVA DEMO\n        {\n          id: 'plannedMiles',\n          index: 23,\n          type: 'number',\n          label: 'Planned Trip Miles',\n          valuePath: 'plannedTripMiles',\n          editable: true,\n          hidden: true,\n          defaultWidth: 50\n        }, // STUB FOR AVA DEMO\n        {\n          id: 'actualMiles',\n          index: 24,\n          type: 'number',\n          label: 'Actual Trip Miles',\n          valuePath: 'actualTripMiles',\n          editable: true,\n          hidden: true,\n          defaultWidth: 50\n        }, {\n          id: 'fare',\n          index: 25,\n          type: 'number',\n          label: 'Fare',\n          valuePath: 'price.fare',\n          editable: true,\n          hidden: true,\n          defaultWidth: 50\n        }, {\n          id: 'paymentType',\n          index: 26,\n          type: 'text',\n          label: 'Payment Type',\n          valuePath: 'price.type',\n          valuePreview: 'Single',\n          editable: true,\n          hidden: true,\n          defaultWidth: 50\n        }, {\n          id: 'provider',\n          index: 29,\n          type: 'text',\n          label: 'Provider',\n          valuePath: 'providerName',\n          valuePreview: 'MAG',\n          hidden: true,\n          searchable: true,\n          highlightable: true\n        }, {\n          id: 'serviceMode',\n          index: 30,\n          type: 'string',\n          label: 'Service Mode',\n          valuePath: 'serviceMode',\n          hidden: true,\n          highlightable: true\n        }, {\n          id: 'previousRouteName',\n          index: 41,\n          type: 'text',\n          label: 'Previous Route Name',\n          valuePath: 'previousRouteName',\n          hidden: true,\n          highlightable: false,\n          searchable: true,\n          defaultWidth: 70\n        }, {\n          id: 'mode',\n          type: 'text',\n          label: 'Scheduling Mode',\n          valuePath: 'schedulingMode',\n          hidden: true,\n          searchable: false,\n          highlightable: false\n        }, {\n          id: 'brokerEligible',\n          type: 'boolean',\n          label: 'Broker Eligible',\n          valuePath: 'booking.legs.firstObject.brokerEligible',\n          searchable: true,\n          hidden: true,\n          defaultWidth: 60\n        }]\n      },\n      stops: {\n        columns: [{\n          id: 'type',\n          index: 0,\n          type: 'text',\n          label: 'Type',\n          valuePath: 'stopType',\n          valuePreview: 'Pick',\n          searchable: true,\n          isMapLabelVisible: true,\n          defaultWidth: 50\n        }, {\n          id: 'tripId',\n          index: 1,\n          type: 'text',\n          label: 'Trip ID',\n          valuePath: 'tripId',\n          searchable: true,\n          defaultWidth: 60,\n          isMapLabelVisible: true\n        }, {\n          id: 'riderLastName',\n          index: 2,\n          type: 'text',\n          label: 'Passenger Last Name',\n          valuePath: 'passenger.lastName',\n          searchable: true,\n          defaultWidth: 75\n        }, {\n          id: 'riderFirstName',\n          index: 3,\n          type: 'text',\n          label: 'Passenger First Name',\n          valuePath: 'passenger.firstName',\n          searchable: true,\n          defaultWidth: 60\n        }, {\n          id: 'riderId',\n          index: 17,\n          type: 'text',\n          label: 'Passenger ID',\n          valuePath: 'passenger.passengerId',\n          searchable: true,\n          defaultWidth: 60,\n          hidden: true\n        }, {\n          id: 'status',\n          index: 7,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          valuePreview: 'Planned',\n          editable: false,\n          defaultWidth: 60\n        }, {\n          id: 'OTPstatus',\n          index: 4,\n          type: 'text',\n          label: 'OTP Status',\n          valuePath: 'otpStatus',\n          defaultWidth: 40,\n          highlightable: true\n        }, {\n          id: 'city',\n          type: 'text',\n          label: 'City',\n          valuePath: 'address.formattedCity',\n          editable: true,\n          hidden: true,\n          defaultWidth: 80\n        }, {\n          id: 'serviceWindow',\n          index: 15,\n          type: 'text',\n          label: 'Service Window',\n          valuePath: 'trip.serviceStartTime',\n          editable: true,\n          hidden: true,\n          defaultWidth: 80\n        }, {\n          id: 'stopBreakOrd',\n          type: 'number',\n          label: 'Stop Break Ord',\n          valuePath: 'ordinal',\n          searchable: false,\n          editable: false,\n          defaultWidth: 50,\n          hidden: true\n        }, {\n          id: 'riderPhone',\n          index: 16,\n          type: 'text',\n          label: 'Passenger Phone Number',\n          valuePath: 'passenger.phoneNumber',\n          searchable: true,\n          defaultWidth: 60,\n          hidden: true\n        }, {\n          id: 'routeName',\n          index: 10,\n          type: 'text',\n          label: 'Route Name',\n          valuePath: 'routeId',\n          valuePreview: '40',\n          defaultWidth: 70,\n          hidden: true\n        }, {\n          id: 'ETA',\n          index: 5,\n          type: 'date',\n          label: 'ETA',\n          valuePath: 'formattedActualArriveTime',\n          editable: true,\n          defaultWidth: 40,\n          highlightable: true,\n          searchable: true\n        }, {\n          id: 'promisedTime',\n          index: 13,\n          type: 'datetime',\n          label: 'Promise Time',\n          valuePath: 'formattedPromiseTime',\n          editable: true,\n          format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n          defaultWidth: 50,\n          hidden: true\n        }, {\n          id: 'requestedTime',\n          index: 6,\n          type: 'time',\n          label: 'Request Time',\n          valuePath: 'formattedPromiseTime',\n          editable: true,\n          format: 'hh:mm A',\n          defaultWidth: 70\n        }, {\n          id: 'actualArrivalTime',\n          index: 8,\n          type: 'time',\n          label: 'Actual Arrive Time',\n          valuePath: 'formattedActualArriveTime',\n          editable: true,\n          format: 'hh:mm A',\n          defaultWidth: 50\n        }, {\n          id: 'actualDepartTime',\n          index: 9,\n          type: 'time',\n          label: 'Actual Depart Time',\n          valuePath: 'formattedActualDepartTime',\n          editable: true,\n          format: 'hh:mm A',\n          defaultWidth: 50\n        }, {\n          id: 'plannedDepartTime',\n          index: 14,\n          type: 'datetime',\n          label: 'Planned Depart Time',\n          valuePath: 'formattedEta',\n          editable: true,\n          format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n          defaultWidth: 50,\n          hidden: true\n        }, {\n          id: 'notes',\n          index: 25,\n          type: 'text',\n          label: 'Notes',\n          valuePath: 'address.notes',\n          editable: true,\n          searchable: true,\n          defaultWidth: 100,\n          hidden: true\n        }, {\n          id: 'address',\n          index: 11,\n          type: 'text',\n          label: 'Address ',\n          valuePath: 'address.formattedAddress',\n          searchable: true,\n          editable: true,\n          hidden: true,\n          defaultWidth: 80\n        }, {\n          id: 'date',\n          index: 12,\n          type: 'date',\n          label: 'Date',\n          valuePath: 'formattedDate',\n          format: `${_environment.default.dateTimeFormat.dateMoment}`,\n          defaultWidth: 70,\n          hidden: true\n        }, {\n          id: 'odometer',\n          index: 26,\n          type: 'number',\n          label: 'Odometer on Arrival',\n          valuePath: 'odometerArrival',\n          editable: true,\n          searchable: true,\n          hidden: true\n        }, {\n          id: 'BreakStartTime',\n          index: 19,\n          type: 'time',\n          label: 'Break Start Time',\n          valuePath: 'routeBreak.plannedStartTime',\n          editable: true,\n          format: 'hh:mm A',\n          defaultWidth: 50,\n          hidden: true,\n          unAvailable: true\n        }, {\n          id: 'BreakEndTime',\n          index: 20,\n          type: 'time',\n          label: 'Break End Time',\n          valuePath: 'routeBreak.plannedEndTime',\n          editable: true,\n          format: 'hh:mm A',\n          defaultWidth: 50,\n          hidden: true,\n          unAvailable: true\n        }, {\n          id: 'BreakType',\n          index: 21,\n          type: 'text',\n          label: 'Break Type',\n          valuePath: 'routeBreak.breakType.name',\n          valuePreview: 'Floating',\n          defaultWidth: 70,\n          hidden: true,\n          unAvailable: true\n        }, {\n          id: 'otp',\n          index: 27,\n          type: 'number',\n          label: 'OTP',\n          valuePath: 'otpValue',\n          hidden: true,\n          highlightable: true\n        }, {\n          id: 'arriveLat',\n          index: 28,\n          type: 'string',\n          label: 'Actual Arrive Lat',\n          valuePath: 'address.lat',\n          hidden: true,\n          highlightable: false\n        }, {\n          id: 'arriveLng',\n          index: 29,\n          type: 'string',\n          label: 'Actual Arrive Lng',\n          valuePath: 'address.lng',\n          hidden: true,\n          highlightable: false\n        }, {\n          id: 'departLat',\n          index: 30,\n          type: 'string',\n          label: 'Actual Depart Lat',\n          valuePath: 'address.lat',\n          hidden: true,\n          highlightable: false\n        }, {\n          id: 'departLng',\n          index: 31,\n          type: 'string',\n          label: 'Actual Depart Lng',\n          valuePath: 'address.lng',\n          hidden: true,\n          highlightable: false\n        }]\n      }\n    },\n    filters: {\n      text: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && item.toString().trim().toLowerCase() === values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && Ember.isEmpty(values[0]) || Ember.isEmpty(item) && !Ember.isEmpty(values[0]) || item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (!Ember.isEmpty(item)) return false;\n          return true;\n        }\n      }],\n      uuid: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && item.toString().trim().toLowerCase() === values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && Ember.isEmpty(values[0]) || Ember.isEmpty(item) && !Ember.isEmpty(values[0]) || item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (!Ember.isEmpty(item)) return false;\n          return true;\n        }\n      }],\n      number: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && parseFloat(item) === parseFloat(values[0]);\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && Ember.isEmpty(values[0]) || Ember.isEmpty(item) && !Ember.isEmpty(values[0]) || item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'greaterThan',\n        label: '>',\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && parseFloat(item) > parseFloat(values[0]);\n        }\n      }, {\n        id: 'lessThan',\n        label: '<',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && parseFloat(item) < parseFloat(values[0]);\n        }\n      }, {\n        id: 'between',\n        label: 'Between',\n        arity: 2,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && !Ember.isEmpty(values[1]) && values[1] > values[0] && item <= values[1] && item >= values[0];\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return !Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (!Ember.isEmpty(item)) return false;\n          return true;\n        }\n      }],\n      date: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid()) return item === values[0];\n          return false;\n        }\n      }, {\n        id: 'after',\n        label: 'After',\n        arity: 1,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid()) return item > values[0];\n          return false;\n        }\n      }, {\n        id: 'before',\n        label: 'Before',\n        arity: 1,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid()) return item < values[0];\n          return false;\n        }\n      }, {\n        id: 'atOrBefore',\n        label: 'At or Before',\n        arity: 1,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid()) return item <= values[0];\n          return false;\n        }\n      }, {\n        id: 'atOrAfter',\n        label: 'At or After',\n        arity: 1,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid()) return item >= values[0];\n          return false;\n        }\n      }, {\n        id: 'between',\n        label: 'Between',\n        arity: 2,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && values[1] && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[1], 'hh:mm A', true).isValid()) return values[1] > values[0] && item <= values[1] && item >= values[0];\n          return false;\n        }\n      }, {\n        id: 'strictlyBetween',\n        label: 'Strictly Between',\n        arity: 2,\n        exp: function (item, values) {\n          if (!Ember.isEmpty(item) && !Ember.isEmpty(values[0]) && values[1] && (0, _moment.default)(item, `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[0], `${_environment.default.dateTimeFormat.dateMoment}`, true).isValid() && (0, _moment.default)(values[1], 'hh:mm A', true).isValid()) return values[1] > values[0] && item < values[1] && item > values[0];\n          return false;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (!Ember.isEmpty(item)) return false;\n          return true;\n        }\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    historyRouteMockData: [{\n      tripId: '15001510',\n      groupId: '5',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001511',\n      groupId: '6',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001512',\n      groupId: '7',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001513',\n      groupId: '8',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001514',\n      groupId: '9',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001515',\n      groupId: '10',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001516',\n      groupId: '11',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001517',\n      groupId: '12',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001518',\n      groupId: '13',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001519',\n      groupId: '14',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001520',\n      groupId: '15',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001521',\n      groupId: '16',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001522',\n      groupId: '17',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001510',\n      groupId: '5',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001511',\n      groupId: '6',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001512',\n      groupId: '7',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001513',\n      groupId: '8',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001514',\n      groupId: '9',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001515',\n      groupId: '10',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001516',\n      groupId: '11',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001517',\n      groupId: '12',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001518',\n      groupId: '13',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001519',\n      groupId: '14',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001520',\n      groupId: '15',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001521',\n      groupId: '16',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }, {\n      tripId: '15001522',\n      groupId: '17',\n      clientName: 'David',\n      status: 'scheduled',\n      type: 'pickup',\n      eta: '8:20',\n      target: 'achievable',\n      number: '123',\n      address: 'NYCT',\n      city: 'NYCT',\n      arriveTime: '10:40',\n      arriveType: 'pickup',\n      performed: 'yes',\n      actualTime: '10:00',\n      stopTime: '8:00',\n      mileage: '25',\n      ambSeats: '1',\n      wcSeats: '2',\n      clients: '2',\n      pca: '5',\n      lateStatus: 'L'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/table-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['reconcile-table-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/table-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Pitco0kx\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/history-routes-widget/table-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/history-routes-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ElMeKwQU\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"index\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-table-container\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-table-box \\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"reconcile-widget-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"reconcile-widget-button minimize-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEditClick\\\"],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[27,\\\"and\\\",[[23,[\\\"canEdit\\\"]],[23,[\\\"isEditTripAllowed\\\"]]],null]],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"reconcile-widget-button minimize-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isEditClicked\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-undo\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"reconcile-widget-button minimize-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSave\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n     \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"reconcile-widget-button\\\"],[12,\\\"disabled\\\",[27,\\\"and\\\",[[23,[\\\"isEditClicked\\\"]],[27,\\\"not\\\",[[23,[\\\"isFilterAllowed\\\"]]],null]],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-table  \\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"grid-table-left \\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-table-body table-striped\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"reconTripsTable\\\"]]],[[\\\"height\\\",\\\"extra\\\"],[\\\"100%\\\",[27,\\\"hash\\\",null,[[\\\"options\\\"],[[23,[\\\"config\\\"]]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs' @ L45:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"if\\\",[[23,[\\\"isSortingAllowed\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],null],null],[27,\\\"if\\\",[[23,[\\\"isSortingAllowed\\\"]],\\\"fa fa-sort\\\",\\\"\\\"],null],[27,\\\"if\\\",[[23,[\\\"isSortingAllowed\\\"]],\\\"fa fa-sort-asc\\\",\\\"\\\"],null],[27,\\\"if\\\",[[23,[\\\"isSortingAllowed\\\"]],\\\"fa fa-sort-desc\\\",\\\"\\\"],null],true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs' @ L53:C9) \\\"],null]],[[\\\"canSelect\\\",\\\"scrollTo\\\",\\\"onScroll\\\",\\\"onRowClick\\\",\\\"rowComponent\\\",\\\"tableActions\\\",\\\"extra\\\"],[false,[23,[\\\"scrollToOffset\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]]],[27,\\\"hash\\\",null,[[\\\"onRightClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowRightClick\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"noresultFound\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs' @ L66:C9) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        No records found.\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"foot\\\"]],\\\"expected `t.foot` to be a contextual component but found a string. Did you mean `(component t.foot)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs' @ L73:C9) \\\"],null]],[[\\\"fixed\\\"],[true]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"contextMenuContainerPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setContextMenuContainer\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs' @ L89:C5) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs' @ L91:C5) \\\"],null]],[[\\\"isTouchDevice\\\",\\\"class\\\"],[false,\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"contextMenuOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"contextMenuOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,3,[]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"hr\\\"],[11,\\\"class\\\",\\\"context-menu-separator\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[12,\\\"disabled\\\",[22,2,[\\\"disable\\\"]]],[12,\\\"class\\\",[27,\\\"if\\\",[[22,2,[\\\"disable\\\"]],\\\"disabled-option\\\",\\\"data-test-widget-actions\\\"],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onContextMenuRowClick\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCloseSearchPassenger\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"reconcile-search-passenger\\\",null,[[\\\"onCloseClick\\\",\\\"contextMenuCallback\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSearchPassengerCloseClick\\\"],null],[23,[\\\"contextMenuHandler\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isColumnEditorSettings\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"reconcile-column-editor\\\",null,[[\\\"onSaveClick\\\",\\\"onCloseClick\\\",\\\"editableColumnList\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnEditorSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnEditorCloseClick\\\"],null],[23,[\\\"editableColumnList\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isUnscheduledTrips\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"reconcile-unscheduled-trips\\\",null,[[\\\"onCloseClick\\\",\\\"contextMenuCallback\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onUnscheduledTripsCloseClick\\\"],null],[23,[\\\"contextMenuHandler\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/history-routes-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/map-widget/component\", \"adept-iq/classes/data-joins/map/marker\", \"adept-iq/classes/data-joins/map/polyline\", \"adept-iq/classes/data-joins/map/shape\", \"adept-iq/utils/geolib\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\"], function (_exports, _component, _marker, _polyline, _shape, _geolib, _polyline2) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.RecenterControl = void 0;\n  // eslint-disable-line\n  const {\n    bemap\n  } = window;\n  const config = {\n    title: 'Map'\n  };\n  const recenterControlOptions = {\n    position: 'topleft',\n    recenterAction: null\n  };\n  const VEHICLE_ID_PLACEHOLDER = 'vehicle id';\n  var RecenterControl = window.L.Control.extend({\n    options: recenterControlOptions,\n    onAdd: function\n      /* map */\n    () {\n      const name = 'leaflet-control-recenter';\n      const container = window.L.DomUtil.create('div', 'leaflet-control-recenter leaflet-bar');\n      this._recenterButton = this._createButton('<i class=\"fa fa-crosshairs fa-lg crosshairs-big\" aria-hidden=\"true\"></i>', 'Recenter', name, container, this._recenterMap);\n      return container;\n    },\n    _recenterMap: function () {\n      this.options.mapWidget.onRecenterClick();\n    },\n    _createButton: function (html, title, className, container, fn) {\n      var link = window.L.DomUtil.create('a', className, container);\n      link.innerHTML = html;\n      link.href = '#';\n      link.title = title;\n      /*\n      * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\n      */\n\n      link.setAttribute('role', 'button');\n      link.setAttribute('aria-label', title);\n      window.L.DomEvent.disableClickPropagation(link);\n      window.L.DomEvent.on(link, 'click', window.L.DomEvent.stop);\n      window.L.DomEvent.on(link, 'click', fn, this);\n      window.L.DomEvent.on(link, 'click', this._refocusOnMap, this);\n      return link;\n    }\n  });\n  _exports.RecenterControl = RecenterControl;\n  const ZOOM_LEVEL = 16;\n\n  var _default = _component.default.extend(Ember.Evented, {\n    mapZoomMethodHandler: null,\n    activeContext: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    // not to be confused with window `map`!\n    maximizer: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    address: Ember.inject.service(),\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    work: Ember.inject.service(),\n    config,\n    locationControl: null,\n    markerDataJoin: null,\n    polylineDataJoin: null,\n    isAddressSearchAllowed: false,\n    searchMode: null,\n    // `null`, 'filter', or 'address'\n    addressSearchText: '',\n    selectedAddress: null,\n    componentName: null,\n    isAddressSearchEnabled: Ember.computed.equal('searchMode', 'address'),\n    isNavigateToEnabled: Ember.computed.bool('selectedAddress'),\n    lat: Ember.computed.alias('mapContext.lat'),\n    lng: Ember.computed.alias('mapContext.lng'),\n    isVisible: Ember.computed.alias('mapContext.isVisible'),\n    agencyMarkers: Ember.computed.alias('mapContext.agencyMarkers'),\n    shapeDataJoin: null,\n    contextMenuPosition: null,\n    contextMenuRecord: null,\n    contextMenu: null,\n    _mapContext: null,\n    distanceAllowed: true,\n    isComputedDistance: false,\n    isComputingDistance: false,\n    distancePt1: null,\n    distancePt2: null,\n    distancePolyline: null,\n    computedDistance: null,\n    vehicleCluster: null,\n    searchPinPointMarker: null,\n    oldPickMarker: null,\n    // all map widgets are bound to the top context in stack\n    mapContext: Ember.computed.readOnly('mapService.topMapContext'),\n    layers: Ember.computed.readOnly('mapContext.layers'),\n    markers: Ember.computed.readOnly('mapContext.markers'),\n    bounds: Ember.computed.readOnly('mapContext.bounds'),\n    boundsID: Ember.computed.readOnly('mapContext.boundsID'),\n    polylines: Ember.computed.readOnly('mapContext.polylines'),\n    shapes: Ember.computed.alias('mapContext.shapes'),\n    centerLat: Ember.computed.oneWay('mapContext.centerLat'),\n    centerLng: Ember.computed.oneWay('mapContext.centerLng'),\n    isSearchAllowed: Ember.computed.readOnly('mapContext.isSearchAllowed'),\n    isSearchEnabled: Ember.computed.readOnly('mapContext.isSearchEnabled'),\n    searchText: Ember.computed.readOnly('mapContext.searchText'),\n    isFilterAllowed: Ember.computed.readOnly('mapContext.isFilterAllowed'),\n    isFiltered: Ember.computed.readOnly('mapContext.isFiltered'),\n    contextMenuOptions: Ember.computed.readOnly('mapContext.contextMenuOptions'),\n    clearButtonEnabled: Ember.computed.gt('activeContext.checkedItems.length', 0),\n\n    init() {\n      this._super(...arguments);\n\n      const typeId = this.get('widget.typeId');\n      this.set('componentName', `${typeId}Widget`); // callback wrappers\n\n      this._onMapContextRefresh = () => this.onMapContextRefresh();\n\n      this._onContextMenu = (e, marker) => this.onContextMenu(e, marker);\n\n      this._mapZoomMethodHandler = e => this.mapZoomMethod(e);\n\n      this.onVehicleSearch = this.onVehicleSearch.bind(this); // initialize observer\n\n      this.mapContextChanged();\n      const vehicleCluster = new bemap.ClusterLayer({\n        'distance': 1,\n        'name': 'vehicle-cluster'\n      });\n      this.set('vehicleCluster', vehicleCluster);\n    },\n\n    destroy() {\n      this._onMapContextRefresh = null;\n      this._onContextMenu = null;\n      this._mapZoomMethodHandler = null;\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments); //TODO FIXME - hack for today\n\n\n      this.set('isNavigateToAllowed', false);\n      this.set('isSearchAddressEnabled', true);\n\n      if (this.user.isRoadSupEnable()) {\n        this.set('isAddressSearchAllowed', true);\n      } // set up location control; map was initialized in `_super`\n\n\n      const map = this.get('map');\n      const vehicleCluster = this.get('vehicleCluster');\n      const isWidgetMaximized = this.get('isWidgetMaximized');\n      const options = {\n        isMaximized: isWidgetMaximized\n      };\n      const locationControl = new RecenterControl({\n        mapWidget: this\n      });\n      locationControl.addTo(map.native);\n      this.set('locationControl', locationControl);\n      map.native.on('zoom', this._mapZoomMethodHandler);\n      window.L.control.scale({\n        position: 'bottomright'\n      }).addTo(map.native);\n      window.L.DomEvent.on(map.native, 'wheel', this._didWheelZoom); // build data joins\n\n      const work = this.get('work');\n      const workspace = this.get('workspace');\n      const mapService = this.get('mapService'); // add cluster group to map\n\n      if (map) {\n        map.addLayer(vehicleCluster);\n      }\n\n      const markerDataJoin = _marker.default.create({\n        map,\n        mapService,\n        work,\n        workspace,\n        vehicleCluster,\n        options,\n        onContextMenu: this._onContextMenu\n      });\n\n      const polylineDataJoin = _polyline.default.create({\n        map,\n        mapService,\n        work,\n        workspace,\n        options,\n        onContextMenu: this._onContextMenu\n      }); // this one doesn't use context menu (yet)\n\n\n      const shapeDataJoin = _shape.default.create({\n        map,\n        mapService,\n        work,\n        options,\n        workspace\n      });\n\n      this.set('markerDataJoin', markerDataJoin);\n      this.set('polylineDataJoin', polylineDataJoin);\n      this.set('shapeDataJoin', shapeDataJoin); // schedule initial map render\n\n      Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n      Ember.run.scheduleOnce('afterRender', this, 'reCenterMapView');\n      Ember.run.scheduleOnce('afterRender', this, 'activeGeocode');\n      Ember.run.scheduleOnce('afterRender', this, 'updateMapView');\n      this.updateDashboardMap(map);\n      this.$('a').removeAttr('title');\n    },\n\n    willDestroyElement() {\n      const map = this.get('map');\n      this.get('locationControl').remove(); // clear join memory\n\n      this.get('markerDataJoin').destroy();\n      this.get('polylineDataJoin').destroy();\n      this.get('shapeDataJoin').destroy(); // remove map context refresh listener, but don't destroy context\n\n      const mapContext = this.get('_mapContext');\n\n      if (mapContext) {\n        mapContext.off('refresh', this._onMapContextRefresh);\n      }\n\n      window.L.DomEvent.off(map.native._container, 'wheel', this._didWheelZoom); // template caches this on the component\n\n      this.set('contextMenu', null);\n\n      this._super(...arguments);\n    },\n\n    mapContextChanged: Ember.observer('mapContext', function () {\n      const oldMapContext = this.get('_mapContext');\n      const newMapContext = this.get('mapContext'); // need to swap out refresh listener!\n\n      if (oldMapContext) {\n        oldMapContext.off('refresh', this._onMapContextRefresh);\n      }\n\n      if (newMapContext) {\n        newMapContext.on('refresh', this._onMapContextRefresh);\n      }\n\n      this.set('_mapContext', newMapContext); // force a refresh immediately\n\n      this.onMapContextRefresh();\n      this.activeGeocode();\n    }),\n\n    onMapContextRefresh() {\n      Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n    },\n\n    mapZoomMethod(event) {\n      const map = event.target;\n      if (!map) return;\n      const zoom = map.getZoom();\n      const geocodeService = this.get('geocode');\n      geocodeService.set('zoom', zoom);\n    },\n\n    // TODO: refactor; all of these `geocode`-related observers modify the map\n    // directly, which will bleed state. The features that depend on these should\n    // be refactored to use a custom map context instead.\n    activeGeocode: Ember.observer('geocode.activeGeo', function () {\n      const map = this.get('map.native');\n      const geocodeService = this.get('geocode');\n      const activeGeocode = geocodeService.get('activeGeo');\n      if (!map) return;\n\n      if (activeGeocode) {\n        map.on('click', function (event) {\n          geocodeService.saveNewGeocode(event.latlng);\n        });\n      } else {\n        map.off('click');\n      }\n    }),\n\n    markerPinPoint(coord) {\n      const map = this.get('map');\n      if (!coord) return;\n      const bemapCoords = new bemap.Coordinate(coord.lng, coord.lat);\n      const pintPointIcon = {\n        icon: {\n          src: '/map-icons/icon-pinpoint.svg',\n          anchorX: 0.50,\n          anchorY: 1,\n          height: 23,\n          width: 23,\n          anchorXUnits: 'fraction',\n          anchorYUnits: 'fraction',\n          scale: 1\n        }\n      };\n      const bemapIcon = new bemap.Icon(pintPointIcon.icon);\n      const marker = new bemap.Marker(bemapCoords, {\n        icon: bemapIcon\n      });\n      map.addMarker(marker);\n      return marker;\n    },\n\n    activeMarker: Ember.observer('geocode.activeMarker', function () {\n      const map = this.get('map');\n      const geocodeService = this.get('geocode');\n\n      if (geocodeService.get('oldMarker')) {\n        map.removeMarker(geocodeService.get('oldMarker'));\n      }\n\n      if (geocodeService.get('activeMarker')) {\n        const marker = geocodeService.get('activeMarker');\n        map.addMarker(marker); // don't setView after pick, this could make user choose wrong location\n        // map.setView(marker._latlng, geocodeService.get('zoom'));\n      }\n    }),\n    activePickMarker: Ember.observer('geocode.activePickMarker', function () {\n      const map = this.get('map');\n      const geocodeService = this.get('geocode');\n\n      if (geocodeService.get('oldPickMarker')) {\n        map.removeMarker(geocodeService.get('oldPickMarker'));\n      }\n\n      if (geocodeService.get('activePickMarker')) {\n        const marker = geocodeService.get('activePickMarker');\n        map.addMarker(marker); // don't setView after pick, this could make user choose wrong location\n        // map.setView(marker._latlng, geocodeService.get('zoom'));\n      }\n    }),\n    activeDropMarker: Ember.observer('geocode.activeDropMarker', function () {\n      const map = this.get('map');\n      const geocodeService = this.get('geocode');\n\n      if (geocodeService.get('oldDropMarker')) {\n        map.removeMarker(geocodeService.get('oldDropMarker'));\n      }\n\n      if (geocodeService.get('activeDropMarker')) {\n        const marker = geocodeService.get('activeDropMarker');\n        map.addMarker(marker); // don't setView after pick, this could make user choose wrong location\n        // map.setView(marker._latlng, geocodeService.get('zoom'));\n      }\n    }),\n    activeTripPolyline: Ember.observer('geocode.activeTripPolyline', function () {\n      const map = this.get('map.native');\n      const geocodeService = this.get('geocode');\n\n      if (geocodeService.get('oldTripPolyline')) {\n        geocodeService.get('oldTripPolyline').remove();\n      }\n\n      if (geocodeService.get('oldTripArrow')) {\n        geocodeService.get('oldTripArrow').remove();\n      }\n\n      if (geocodeService.get('activeTripPolyline')) {\n        const tripPolyline = geocodeService.get('activeTripPolyline');\n        tripPolyline.addTo(map);\n        map.setView({\n          lat: tripPolyline._latlngs.firstObject.lat,\n          lng: tripPolyline._latlngs.lastObject.lng\n        }, geocodeService.get('zoom'));\n      }\n    }),\n\n    updateMap() {\n      // don't try to update until map is initialized\n      if (!this.get('map')) return;\n      const markerDataJoin = this.get('markerDataJoin');\n      const polylineDataJoin = this.get('polylineDataJoin');\n      const shapeDataJoin = this.get('shapeDataJoin');\n      const markers = this.get('markers') || [];\n      const polylines = this.get('polylines') || [];\n      const shapes = this.get('shapes') || [];\n      markerDataJoin.join(markers);\n      polylineDataJoin.join(polylines);\n      shapeDataJoin.join(shapes);\n      const map = this.get('map');\n      map.on('zoom', this._mapZoomMethodHandler);\n    },\n\n    onRecenterClick() {\n      this.set('autoZoom', false);\n      return this.reCenterMapView(true);\n    },\n\n    onContextMenu(e, markerOrPolyline) {\n      // available options are determined in the map context; this method is only\n      // responsible for positioning and opening the context menu\n      this.set('contextMenuPosition', function () {\n        return {\n          style: {\n            top: e.originalEvent.clientY,\n            left: e.originalEvent.clientX\n          }\n        };\n      });\n      const record = markerOrPolyline.get('record');\n      this.set('contextMenuRecord', record);\n      this.get('contextMenu').actions.open();\n    },\n\n    setDistances(coord) {\n      if (this.get('distancePt1') === null) {\n        this.set('distancePt1', this.markerPinPoint(coord));\n      } else if (this.get('distancePt2') === null) {\n        this.set('distancePt2', this.markerPinPoint(coord));\n        const map = this.get('map');\n        const distance = geolib.getDistance(this.get('distancePt1.native._latlng'), coord); // eslint-disable-line\n        //convert from metre -> feet -> mile\n\n        const feet = distance * 3.281;\n        const miles = feet / 5280;\n        this.set('computedDistance', `${miles.toFixed(3)} mi (${Math.round(feet).toLocaleString()} feet)`);\n        const polyLineOptions = _polyline2.default['dottedDistance']; // eslint-disable-line\n\n        const distancePoints = [{\n          lat: this.get('distancePt1.native._latlng.lat'),\n          lon: this.get('distancePt1.native._latlng.lng')\n        }, {\n          lat: this.get('distancePt2.native._latlng.lat'),\n          lon: this.get('distancePt2.native._latlng.lng')\n        }];\n        const distancePolyline = new bemap.Polyline(distancePoints, {\n          style: polyLineOptions\n        });\n        map.addPolyline(distancePolyline);\n        this.set('distancePolyline', distancePolyline);\n      } else {\n        this.distanceReset();\n      }\n    },\n\n    distanceReset() {\n      const map = this.get('map');\n      const distancePt1 = this.get('distancePt1');\n      const distancePt2 = this.get('distancePt2');\n      const distancePolyline = this.get('distancePolyline');\n\n      if (distancePt1) {\n        map.removeMarker(distancePt1);\n      }\n\n      if (distancePt2) {\n        map.removeMarker(distancePt2);\n      }\n\n      if (distancePolyline) {\n        map.removePolyline(distancePolyline);\n      }\n\n      this.setProperties({\n        distancePt1: null,\n        distancePt2: null,\n        computedDistance: null,\n        distancePolyline: null\n      });\n    },\n\n    onSearchAddressSelect(address) {\n      const latlng = {\n        lat: address.get('lat'),\n        lng: address.get('lng')\n      };\n      const map = this.get('map');\n      this.set('searchPinPointMarker', this.markerPinPoint(latlng));\n      map.native.setView(latlng, ZOOM_LEVEL);\n    },\n\n    updateDashboardMap(map) {\n      if (map) {\n        const fetchLayerIds = [];\n        map.native.eachLayer(layer => {\n          fetchLayerIds.push(layer._leaflet_id);\n        });\n        Ember.set(this, 'workspace.activeContext.topActiveContext.map', map);\n        Ember.set(this, 'workspace.activeContext.topActiveContext.mapResetLayers', fetchLayerIds);\n      }\n    },\n\n    /**\n     * example: searchText - vehicle ID = 1234 or vehicle ID=1234\n     * @param searchText\n     * @returns {string}\n     */\n    getVehicleIdBySearchText(searchText) {\n      const splits = searchText.toLowerCase().split('=');\n      let vehicleId = '';\n\n      if (splits.length === 2 && splits.firstObject.trim() === VEHICLE_ID_PLACEHOLDER) {\n        vehicleId = splits.lastObject.trim();\n      }\n\n      return vehicleId;\n    },\n\n    onVehicleSearch(searchText) {\n      const previousSearchText = this.get('searchText');\n      if (previousSearchText === searchText) return;\n      const vehicleId = this.getVehicleIdBySearchText(searchText);\n      this.set('mapContext.searchText', vehicleId);\n      Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n    },\n\n    actions: {\n      onSearchButtonClick() {\n        this.toggleProperty('mapContext.isSearchEnabled');\n        this.set('mapContext.searchText', '');\n        Ember.run.scheduleOnce('afterRender', () => {\n          if (this.get('isSearchEnabled')) {\n            this.$('.map-widget-search-box').focus();\n          }\n        });\n      },\n\n      onAddressSearchButtonClick() {\n        if (this.get('searchMode') === 'address') {\n          this.set('searchMode', null);\n        } else {\n          this.set('searchMode', 'address'); // start fresh each time\n\n          this.set('addressSearchText', '');\n          this.set('selectedAddress', null);\n        }\n\n        Ember.run.scheduleOnce('afterRender', () => {\n          if (this.get('isAddressSearchEnabled')) {\n            this.$('.map-widget-location-search-box').focus();\n          }\n        });\n      },\n\n      onRemoveSearchClick() {\n        this.toggleProperty('mapContext.isSearchEnabled');\n        this.set('mapContext.searchText', '');\n        this.set('addressSearchText', '');\n        this.set('selectedAddress', null);\n\n        if (this.get('searchPinPointMarker')) {\n          this.get('searchPinPointMarker').remove();\n          this.set('searchPinPointMarker', null);\n        }\n\n        Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n      },\n\n      onNavigateToClick() {\n        const address = this.get('selectedAddress');\n        this.get('roadSupervisor').navigateToAddressFromMap(address);\n      },\n\n      onSearchTextChange(searchText) {\n        const previousSearchText = this.get('searchText');\n        if (previousSearchText === searchText) return;\n        this.set('mapContext.searchText', searchText);\n        Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n      },\n\n      onAddressSelect(address, close) {\n        this.set('selectedAddress', address);\n\n        if (address) {\n          // clear the previous marker\n          if (this.get('searchPinPointMarker')) {\n            this.get('searchPinPointMarker').remove();\n          }\n\n          this.onSearchAddressSelect(address);\n        }\n\n        if (close) close();\n      },\n\n      onFilterButtonClick() {\n        this.get('workspace').pushState('filterMapWidget', {\n          displayName: 'Map Layers'\n        }, {\n          replaceSelf: true\n        });\n      },\n\n      setContextMenu(dropdown) {\n        this.set('contextMenu', dropdown);\n      },\n\n      onContextMenuOptionClick(option) {\n        const record = this.get('contextMenuRecord');\n        this.get('contextMenu').actions.close();\n\n        if (option.action) {\n          option.action(record);\n        }\n      },\n\n      onHeaderDoubleClick(event) {\n        const button = event.target.closest('button');\n        const input = event.target.closest('input'); // don't maximize if user double-clicked a control\n\n        if (button || input) return;\n        const maximizer = this.get('maximizer');\n\n        if (maximizer.maximizedWidget === this.get('widget')) {\n          maximizer.minimize();\n          return;\n        }\n\n        maximizer.maximize(this.get('widget'));\n      },\n\n      onExitMaximizedClick() {\n        const maximizer = this.get('maximizer');\n        maximizer.minimize();\n      },\n\n      onDistanceButtonClick() {\n        this._bodyClickFunction = event => {\n          this.actions.onBodyClickFunction(event, this);\n        };\n\n        document.body.addEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', true);\n        this.get('map').native.on('click', e => {\n          this.setDistances(e.latlng);\n        });\n      },\n\n      onBodyClickFunction(e, thisObject) {\n        const node = e.target;\n        let isInPage = true;\n\n        if (document.getElementsByClassName('map-widget')[0]) {\n          isInPage = document.getElementsByClassName('map-widget')[0].contains(node);\n        }\n\n        if (isInPage === false) {\n          thisObject.distanceReset();\n        }\n      },\n\n      onDistanceClose() {\n        document.body.removeEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', false);\n        this.distanceReset();\n        this.get('map.native').off('click');\n      },\n\n      onDistanceReset() {\n        this.distanceReset();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/arrow\", [\"exports\", \"adept-iq/config/icon-paths\"], function (_exports, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // this is only used by the Geocode service now; it should be removed\n  var _default = {\n    tripArrowPlanned: {\n      icon: {\n        src: _iconPaths.default.tripArrow.ontime,\n        anchorX: 20,\n        anchorY: 10,\n        height: 20,\n        width: 20,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      },\n      rotationAngle: null,\n      rotationOrigin: 'center right',\n      color: '#555e63'\n    },\n    tripArrowPlannedDanger: {\n      icon: {\n        src: _iconPaths.default.tripArrow.danger,\n        anchorX: 20,\n        anchorY: 10,\n        height: 20,\n        width: 20,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      },\n      rotationAngle: null,\n      rotationOrigin: 'center right',\n      color: '#E3621B'\n    },\n    tripArrowPlannedLate: {\n      icon: {\n        src: _iconPaths.default.tripArrow.late,\n        anchorX: 20,\n        anchorY: 10,\n        height: 20,\n        width: 20,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      },\n      rotationAngle: null,\n      rotationOrigin: 'center right',\n      color: '#d13730'\n    },\n    tripArrowPlannedOffset: {\n      icon: {\n        src: _iconPaths.default.tripArrow.ontime,\n        anchorX: 35,\n        anchorY: 10,\n        height: 35,\n        width: 20,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      },\n      rotationAngle: null,\n      rotationOrigin: 'center right',\n      color: '#555e63'\n    },\n    tripArrowPlannedOffsetLate: {\n      icon: {\n        src: _iconPaths.default.tripArrowOffset.late,\n        anchorX: 35,\n        anchorY: 10,\n        height: 35,\n        width: 20,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      },\n      rotationAngle: null,\n      rotationOrigin: 'center right',\n      color: '#d13730'\n    },\n    tripArrowPlannedOffsetDanger: {\n      icon: {\n        src: _iconPaths.default.tripArrowOffset.danger,\n        anchorX: 35,\n        anchorY: 10,\n        height: 35,\n        width: 20,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      },\n      rotationAngle: null,\n      rotationOrigin: 'center right',\n      color: '#E3621B'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/circle\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    solid: {\n      dashArray: null,\n      color: '#97a3a9',\n      opacity: 0.5,\n      fillOpacity: 0.2\n    },\n    solidLate: {\n      dashArray: null,\n      // matches 'text-danger' in CSS\n      color: 'orange',\n      opacity: 0.5,\n      fillOpacity: 0.2\n    },\n    solidDanger: {\n      dashArray: null,\n      color: 'red',\n      opacity: 0.5,\n      fillOpacity: 0.2\n    },\n    normal: {\n      dashArray: 'null',\n      color: '#efe4b0',\n      opacity: 1.0,\n      fillOpacity: 0.6\n    },\n    medium: {\n      dashArray: 'null',\n      color: 'orange',\n      opacity: 1.0,\n      fillOpacity: 0.6\n    },\n    high: {\n      dashArray: 'null',\n      color: 'red',\n      opacity: 1.0,\n      fillOpacity: 0.6\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/colors\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.TRIP_COMPLETED_COLOR = _exports.SCHEDULE_COLOR = _exports.PLANNED_DARK_COLOR = _exports.PLANNED_COLOR = _exports.PERFORMED_COLOR = _exports.PENDING_COLOR = _exports.OTP_LATE_COLOR = _exports.OTP_DANGER_COLOR = _exports.FLOATING_BREAK_COLOR = _exports.DISTANCE_COLOR = _exports.BENOMAD_WAITLISTED_COLOR = _exports.BENOMAD_TRIP_COMPLETED_COLOR = _exports.BENOMAD_SCHEDULE_COLOR = _exports.BENOMAD_PLANNED_UNSCHEDULE_COLOR = _exports.BENOMAD_PLANNED_SCHEDULE_COLOR = _exports.BENOMAD_PLANNED_DARK_COLOR = _exports.BENOMAD_PLANNED_COLOR = _exports.BENOMAD_PERFORMED_COLOR = _exports.BENOMAD_PENDING_COLOR = _exports.BENOMAD_OTP_LATE_COLOR = _exports.BENOMAD_OTP_DANGER_COLOR = _exports.BENOMAD_NOSHOWREQUESTED_COLOR = _exports.BENOMAD_NOSHOWED_COLOR = _exports.BENOMAD_LATE_CANCELED_COLOR = _exports.BENOMAD_ILLEGAL_COLOR = _exports.BENOMAD_FLOATING_BREAK_COLOR = _exports.BENOMAD_ENROUTE_COLOR = _exports.BENOMAD_DISTANCE_COLOR = _exports.BENOMAD_DISPATCHED_COLOR = _exports.BENOMAD_CANCELED_COLOR = _exports.BENOMAD_CALLBACK_COLOR = _exports.BENOMAD_ACTIVE_COLOR = void 0;\n  const bemap = window.bemap;\n  const PLANNED_COLOR = '#A9B2B5';\n  _exports.PLANNED_COLOR = PLANNED_COLOR;\n  const DISTANCE_COLOR = '#303E44'; // used for trips to improve contrast against stop polylines\n\n  _exports.DISTANCE_COLOR = DISTANCE_COLOR;\n  const PLANNED_DARK_COLOR = '#A9B2B5';\n  _exports.PLANNED_DARK_COLOR = PLANNED_DARK_COLOR;\n  const PENDING_COLOR = '#0067FC';\n  _exports.PENDING_COLOR = PENDING_COLOR;\n  const PERFORMED_COLOR = '#1C1C1D';\n  _exports.PERFORMED_COLOR = PERFORMED_COLOR;\n  const FLOATING_BREAK_COLOR = '#000000';\n  _exports.FLOATING_BREAK_COLOR = FLOATING_BREAK_COLOR;\n  const TRIP_COMPLETED_COLOR = '#5a6368';\n  _exports.TRIP_COMPLETED_COLOR = TRIP_COMPLETED_COLOR;\n  const OTP_DANGER_COLOR = '#E3621B';\n  _exports.OTP_DANGER_COLOR = OTP_DANGER_COLOR;\n  const OTP_LATE_COLOR = '#d13730';\n  _exports.OTP_LATE_COLOR = OTP_LATE_COLOR;\n  const SCHEDULE_COLOR = '#C638EA';\n  _exports.SCHEDULE_COLOR = SCHEDULE_COLOR;\n  const BENOMAD_PLANNED_COLOR = new bemap.Color(169, 178, 181, 1); // grey color\n\n  _exports.BENOMAD_PLANNED_COLOR = BENOMAD_PLANNED_COLOR;\n  const BENOMAD_DISTANCE_COLOR = new bemap.Color(48, 62, 68, 1); // dark-grey color\n\n  _exports.BENOMAD_DISTANCE_COLOR = BENOMAD_DISTANCE_COLOR;\n  const BENOMAD_PLANNED_DARK_COLOR = new bemap.Color(85, 94, 99, 1); // dark-grey color\n\n  _exports.BENOMAD_PLANNED_DARK_COLOR = BENOMAD_PLANNED_DARK_COLOR;\n  const BENOMAD_PENDING_COLOR = new bemap.Color(0, 103, 252, 1); // blue color\n\n  _exports.BENOMAD_PENDING_COLOR = BENOMAD_PENDING_COLOR;\n  const BENOMAD_PERFORMED_COLOR = new bemap.Color(97, 95, 96, 1); // dark-grey color\n\n  _exports.BENOMAD_PERFORMED_COLOR = BENOMAD_PERFORMED_COLOR;\n  const BENOMAD_OTP_DANGER_COLOR = new bemap.Color(227, 98, 27, 1); // orange color\n\n  _exports.BENOMAD_OTP_DANGER_COLOR = BENOMAD_OTP_DANGER_COLOR;\n  const BENOMAD_OTP_LATE_COLOR = new bemap.Color(209, 55, 48, 1); // red color\n\n  _exports.BENOMAD_OTP_LATE_COLOR = BENOMAD_OTP_LATE_COLOR;\n  const BENOMAD_SCHEDULE_COLOR = new bemap.Color(198, 56, 234, 1); // pink color for route schedule polyline\n\n  _exports.BENOMAD_SCHEDULE_COLOR = BENOMAD_SCHEDULE_COLOR;\n  const BENOMAD_FLOATING_BREAK_COLOR = new bemap.Color(0, 0, 0, 1); // black color\n\n  _exports.BENOMAD_FLOATING_BREAK_COLOR = BENOMAD_FLOATING_BREAK_COLOR;\n  const BENOMAD_PLANNED_SCHEDULE_COLOR = new bemap.Color(176, 176, 176, 1); //light-grey-color\n\n  _exports.BENOMAD_PLANNED_SCHEDULE_COLOR = BENOMAD_PLANNED_SCHEDULE_COLOR;\n  const BENOMAD_PLANNED_UNSCHEDULE_COLOR = new bemap.Color(64, 64, 64, 1); //light-black-color\n\n  _exports.BENOMAD_PLANNED_UNSCHEDULE_COLOR = BENOMAD_PLANNED_UNSCHEDULE_COLOR;\n  const BENOMAD_TRIP_COMPLETED_COLOR = new bemap.Color(0, 0, 0, 1); //black color\n\n  _exports.BENOMAD_TRIP_COMPLETED_COLOR = BENOMAD_TRIP_COMPLETED_COLOR;\n  const BENOMAD_WAITLISTED_COLOR = new bemap.Color(192, 192, 192, 1); //;ight-grey-color\n\n  _exports.BENOMAD_WAITLISTED_COLOR = BENOMAD_WAITLISTED_COLOR;\n  const BENOMAD_ILLEGAL_COLOR = new bemap.Color(112, 112, 112, 1);\n  _exports.BENOMAD_ILLEGAL_COLOR = BENOMAD_ILLEGAL_COLOR;\n  const BENOMAD_DISPATCHED_COLOR = new bemap.Color(0, 16, 16, 1);\n  _exports.BENOMAD_DISPATCHED_COLOR = BENOMAD_DISPATCHED_COLOR;\n  const BENOMAD_CALLBACK_COLOR = new bemap.Color(152, 152, 152, 1);\n  _exports.BENOMAD_CALLBACK_COLOR = BENOMAD_CALLBACK_COLOR;\n  const BENOMAD_ACTIVE_COLOR = new bemap.Color(88, 88, 88, 1);\n  _exports.BENOMAD_ACTIVE_COLOR = BENOMAD_ACTIVE_COLOR;\n  const BENOMAD_ENROUTE_COLOR = new bemap.Color(72, 72, 72, 1);\n  _exports.BENOMAD_ENROUTE_COLOR = BENOMAD_ENROUTE_COLOR;\n  const BENOMAD_NOSHOWED_COLOR = new bemap.Color(96, 96, 96, 1);\n  _exports.BENOMAD_NOSHOWED_COLOR = BENOMAD_NOSHOWED_COLOR;\n  const BENOMAD_NOSHOWREQUESTED_COLOR = new bemap.Color(192, 192, 192, 1);\n  _exports.BENOMAD_NOSHOWREQUESTED_COLOR = BENOMAD_NOSHOWREQUESTED_COLOR;\n  const BENOMAD_CANCELED_COLOR = new bemap.Color(192, 192, 192, 1); //;ight-grey-color\n\n  _exports.BENOMAD_CANCELED_COLOR = BENOMAD_CANCELED_COLOR;\n  const BENOMAD_LATE_CANCELED_COLOR = new bemap.Color(96, 96, 96, 1); //;dark-grey-color\n\n  _exports.BENOMAD_LATE_CANCELED_COLOR = BENOMAD_LATE_CANCELED_COLOR;\n  var _default = {\n    PLANNED_COLOR,\n    PLANNED_DARK_COLOR,\n    PENDING_COLOR,\n    PERFORMED_COLOR,\n    OTP_DANGER_COLOR,\n    OTP_LATE_COLOR,\n    BENOMAD_PLANNED_COLOR,\n    BENOMAD_PLANNED_DARK_COLOR,\n    BENOMAD_PENDING_COLOR,\n    BENOMAD_PERFORMED_COLOR,\n    BENOMAD_OTP_DANGER_COLOR,\n    BENOMAD_OTP_LATE_COLOR,\n    BENOMAD_DISTANCE_COLOR,\n    BENOMAD_SCHEDULE_COLOR,\n    BENOMAD_FLOATING_BREAK_COLOR,\n    TRIP_COMPLETED_COLOR,\n    BENOMAD_PLANNED_SCHEDULE_COLOR,\n    BENOMAD_PLANNED_UNSCHEDULE_COLOR,\n    BENOMAD_TRIP_COMPLETED_COLOR,\n    BENOMAD_WAITLISTED_COLOR,\n    BENOMAD_ILLEGAL_COLOR,\n    BENOMAD_DISPATCHED_COLOR,\n    BENOMAD_CALLBACK_COLOR,\n    BENOMAD_ACTIVE_COLOR,\n    BENOMAD_ENROUTE_COLOR,\n    BENOMAD_NOSHOWED_COLOR,\n    BENOMAD_NOSHOWREQUESTED_COLOR,\n    FLOATING_BREAK_COLOR,\n    DISTANCE_COLOR\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/marker-highlight\", [\"exports\", \"adept-iq/config/icon-paths\"], function (_exports, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const stopIconSize = [23.0, 23.0];\n  const shadowVehicleAnchor = [15, 15];\n  const shadowStopAnchor = [16.5, 12.5];\n  const shadowAnchor = [14, 15];\n  const stopIconAnchor = stopIconSize.map(x => x / 2.0);\n  var _default = {\n    location: {\n      icon: window.L.icon({\n        icon: {\n          icon: 'fa fa-building',\n          iconSize: [32, 37],\n          iconAnchor: [16, 2],\n          style: {\n            color: '#fff'\n          },\n          noPlainSVG: true\n        }\n      })\n    },\n    pick: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlanned,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    deployStop: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.planned,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNext,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickDangerWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickDangerNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickDangerNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickLateWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickLateNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickLateNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowAnchor\n      })\n    },\n    pickPerformed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickCompleted,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    pickPerformedWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickCompletedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    drop: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlanned,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNext,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowAnchor\n      })\n    },\n    dropNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropDangerWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropDangerNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropDangerNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropLateWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropLateNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropLateNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropPerformed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropCompleted,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    dropPerformedWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropCompletedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garage: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garagePlanned,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garageNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageNext,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garageDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garagePlannedInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garageDangerNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageNextInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garageLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garagePlannedLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garageLateNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageNextLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    garagePerformed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageCompleted,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowStopAnchor\n      })\n    },\n    break: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.break,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowAnchor\n      })\n    },\n    floatingBreak: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.break,\n        iconSize: stopIconSize,\n        iconAnchor: [30, 6],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: [33, 9]\n      })\n    },\n    noshow: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.noshow,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor,\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor\n      })\n    },\n    vehicle: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicle,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleAVLM,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleRoadSupervisor: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.roadSupervisor,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingRoadSupervisor: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.roadSupervisor,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleLoggedRoadSupervisor: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.loggedRoadSupervisor,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleEmergency: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleEmergencyDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleEmergencyLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleEmergencyAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDriving: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWork,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkAVLM,\n        iconSize: [32, 32],\n        iconAnchor: [16, 16],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingEmergency: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingEmergencyAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleDrivingEmergencyDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor\n      })\n    },\n    vehicleDrivingEmergencyLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    pinPoint: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.maps.pinPoint,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor\n      })\n    },\n    vehicleBreakdown: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleBreakdown,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleOnBreak: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.onBreak,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleCommunicationFailed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleCommunicationFailed,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleGPSFailed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleGPSFailed,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    },\n    vehicleNotSigned: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleNotSigned,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5],\n        shadowUrl: _iconPaths.default.maps.highlight,\n        shadowSize: [30, 30],\n        shadowAnchor: shadowVehicleAnchor,\n        forceZIndex: 1000\n      })\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/marker-leaflet\", [\"exports\", \"adept-iq/config/icon-paths\"], function (_exports, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const stopIconSize = [23.0, 23.0];\n  const stopIconAnchor = stopIconSize.map(x => x / 2.0);\n  var _default = {\n    location: {\n      icon: window.L.icon({\n        icon: {\n          icon: 'fa fa-building',\n          iconSize: [32, 37],\n          iconAnchor: [16, 2],\n          style: {\n            color: '#fff'\n          },\n          noPlainSVG: true\n        }\n      })\n    },\n    pick: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlanned,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    deployStop: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.planned,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    pickWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNext,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickDangerWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickDangerNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickDangerNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickLateWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickPlannedLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickLateNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickLateNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickNextLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickPerformed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickCompleted,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    pickPerformedWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.pickCompletedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    drop: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlanned,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNext,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropDangerWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropDangerNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropDangerNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextInDangerWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropLateWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropPlannedLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropLateNextWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextLateWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropLateNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropNextLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropPerformed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropCompleted,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    dropPerformedWheelchair: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.dropCompletedWheelchair,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garage: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garagePlanned,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garageNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageNext,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garageDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garagePlannedInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garageDangerNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageNextInDanger,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garageLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garagePlannedLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garageLateNext: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageNextLate,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    garagePerformed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.garageCompleted,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    break: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.break,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    floatingBreak: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.break,\n        iconSize: stopIconSize,\n        iconAnchor: [30, 6]\n      })\n    },\n    noshow: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.stops.noshow,\n        iconSize: stopIconSize,\n        iconAnchor: stopIconAnchor\n      })\n    },\n    vehicle: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicle,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleAVLM,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleRoadSupervisor: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.roadSupervisor,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingRoadSupervisor: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.roadSupervisor,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleLoggedRoadSupervisor: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.loggedRoadSupervisor,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleEmergency: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleEmergencyDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleEmergencyLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleEmergencyAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDriving: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWork,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkAVLM,\n        iconSize: [32, 32],\n        iconAnchor: [16, 16]\n      })\n    },\n    vehicleDrivingLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingEmergency: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingEmergencyAVLM: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergency,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingEmergencyDanger: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyDanger,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleDrivingEmergencyLate: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.atWorkEmergencyLate,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleBreakdown: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleBreakdown,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleOnBreak: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.onBreak,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleCommunicationFailed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleCommunicationFailed,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleGPSFailed: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleGPSFailed,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    vehicleNotSigned: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicleNotSigned,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    },\n    pinPoint: {\n      icon: window.L.icon({\n        iconUrl: _iconPaths.default.maps.pinPoint,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      })\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/marker\", [\"exports\", \"adept-iq/config/icon-paths\"], function (_exports, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const stopIconSize = [23.0, 23.0];\n  var _default = {\n    location: {\n      icon: {\n        src: 'fa fa-building',\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 32,\n        width: 37,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pick: {\n      icon: {\n        src: _iconPaths.default.stops.pickPlanned,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    deployStop: {\n      icon: {\n        src: _iconPaths.default.stops.planned,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickPlannedWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickNext: {\n      icon: {\n        src: _iconPaths.default.stops.pickNext,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickNextWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickNextWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickDanger: {\n      icon: {\n        src: _iconPaths.default.stops.pickPlannedInDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickDangerWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickPlannedInDangerWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickDangerNext: {\n      icon: {\n        src: _iconPaths.default.stops.pickNextInDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickDangerNextWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickNextInDangerWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickLate: {\n      icon: {\n        src: _iconPaths.default.stops.pickPlannedLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickLateWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickPlannedLateWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickLateNextWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickNextLateWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickLateNext: {\n      icon: {\n        src: _iconPaths.default.stops.pickNextLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickPerformed: {\n      icon: {\n        src: _iconPaths.default.stops.pickCompleted,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pickPerformedWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.pickCompletedWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    drop: {\n      icon: {\n        src: _iconPaths.default.stops.dropPlanned,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropPlannedWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropNext: {\n      icon: {\n        src: _iconPaths.default.stops.dropNext,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropNextWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropNextWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropDanger: {\n      icon: {\n        src: _iconPaths.default.stops.dropPlannedInDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropDangerWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropPlannedInDangerWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropDangerNext: {\n      icon: {\n        src: _iconPaths.default.stops.dropNextInDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropDangerNextWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropNextInDangerWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropLate: {\n      icon: {\n        src: _iconPaths.default.stops.dropPlannedLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropLateWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropPlannedLateWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropLateNextWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropNextLateWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropLateNext: {\n      icon: {\n        src: _iconPaths.default.stops.dropNextLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropPerformed: {\n      icon: {\n        src: _iconPaths.default.stops.dropCompleted,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    dropPerformedWheelchair: {\n      icon: {\n        src: _iconPaths.default.stops.dropCompletedWheelchair,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garage: {\n      icon: {\n        src: _iconPaths.default.stops.garagePlanned,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garageNext: {\n      icon: {\n        src: _iconPaths.default.stops.garageNext,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garageDanger: {\n      icon: {\n        src: _iconPaths.default.stops.garagePlannedInDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garageDangerNext: {\n      icon: {\n        src: _iconPaths.default.stops.garageNextInDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garageLate: {\n      icon: {\n        src: _iconPaths.default.stops.garagePlannedLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garageLateNext: {\n      icon: {\n        src: _iconPaths.default.stops.garageNextLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    garagePerformed: {\n      icon: {\n        src: _iconPaths.default.stops.garageCompleted,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    break: {\n      icon: {\n        src: _iconPaths.default.stops.break,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    floatingBreak: {\n      icon: {\n        src: _iconPaths.default.stops.break,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    noshow: {\n      icon: {\n        src: _iconPaths.default.stops.noshow,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicle: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicle,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleAVLM: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleAVLM,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleRoadSupervisor: {\n      icon: {\n        src: _iconPaths.default.vehicles.roadSupervisor,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingRoadSupervisor: {\n      icon: {\n        src: _iconPaths.default.vehicles.roadSupervisor,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleLoggedRoadSupervisor: {\n      icon: {\n        src: _iconPaths.default.vehicles.loggedRoadSupervisor,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDanger: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleLate: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleEmergency: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergency,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleEmergencyDanger: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergencyDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleEmergencyLate: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergencyLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleEmergencyAVLM: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergency,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDriving: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWork,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingAVLM: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkAVLM,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 32,\n        width: 32,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingLate: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingDanger: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingEmergency: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergency,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingEmergencyAVLM: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergency,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingEmergencyDanger: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergencyDanger,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleDrivingEmergencyLate: {\n      icon: {\n        src: _iconPaths.default.vehicles.atWorkEmergencyLate,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleBreakdown: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleBreakdown,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleOnBreak: {\n      icon: {\n        src: _iconPaths.default.vehicles.onBreak,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleCommunicationFailed: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleCommunicationFailed,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleGPSFailed: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleGPSFailed,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    vehicleNotSigned: {\n      icon: {\n        src: _iconPaths.default.vehicles.vehicleNotSigned,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    pinPoint: {\n      icon: {\n        src: _iconPaths.default.maps.pinPoint,\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: 23,\n        width: 23,\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/patterns\", [\"exports\", \"adept-iq/pods/components/iq-widgets/map-widget/config/colors\"], function (_exports, _colors) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PATTERN_REPEAT = 200;\n  const TRIP_OFFSET = 10; // makes room for stop icons\n\n  const ROUTE_PLANNED_ARROW_WEIGHT = 6;\n  const ROUTE_NAVIGATION_ARROW_WEIGHT = 1;\n  const ROUTE_PERFORMED_ARROW_WEIGHT = 1; // different offset so they won't overlap\n\n  const ROUTE_PLANNED_OFFSET = 200;\n  const ROUTE_NAVIGATION_OFFSET = 180;\n  const ROUTE_PERFORMED_OFFSET = 160; // solid arrows spaced along body of polyline\n\n  const directionalPattern = function (color) {\n    let weight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : PATTERN_REPEAT / 2;\n    let repeat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : PATTERN_REPEAT;\n    return [{\n      offset,\n      endOffset: offset,\n      repeat,\n      symbol: window.L.Symbol.arrowHead({\n        pathOptions: {\n          weight,\n          stroke: true,\n          color,\n          fill: true,\n          fillColor: color,\n          fillOpacity: 1,\n          opacity: 1\n        }\n      })\n    }];\n  }; // single arrowhead at end of polyline\n\n\n  const arrowHeadPattern = function (color) {\n    let endOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    let pixelSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;\n    let weight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;\n    // we actually reverse points and draw the head of the arrow at the tail;\n    // this allows the offset to be set correctly in pixels\n    return [{\n      offset: endOffset,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize,\n        polygon: false,\n        pathOptions: {\n          weight,\n          stroke: true,\n          color,\n          opacity: 1\n        }\n      })\n    }];\n  };\n\n  var _default = {\n    // trip endpoint arrows\n    trip: [...arrowHeadPattern(_colors.PLANNED_DARK_COLOR)],\n    tripDanger: [...arrowHeadPattern(_colors.OTP_DANGER_COLOR)],\n    tripLate: [...arrowHeadPattern(_colors.OTP_LATE_COLOR)],\n    tripSolid: [...arrowHeadPattern(_colors.PLANNED_DARK_COLOR)],\n    tripSolidDanger: [...arrowHeadPattern(_colors.OTP_DANGER_COLOR)],\n    tripSolidLate: [...arrowHeadPattern(_colors.OTP_LATE_COLOR)],\n    tripPerformed: [...arrowHeadPattern(_colors.PERFORMED_COLOR)],\n    // these ones leave a bit of room for the stop icons\n    tripOffset: [...arrowHeadPattern(_colors.PLANNED_DARK_COLOR, TRIP_OFFSET)],\n    tripDangerOffset: [...arrowHeadPattern(_colors.OTP_DANGER_COLOR, TRIP_OFFSET)],\n    tripLateOffset: [...arrowHeadPattern(_colors.OTP_LATE_COLOR, TRIP_OFFSET)],\n    tripSolidOffset: [...arrowHeadPattern(_colors.PLANNED_DARK_COLOR, TRIP_OFFSET)],\n    tripSolidDangerOffset: [...arrowHeadPattern(_colors.OTP_DANGER_COLOR, TRIP_OFFSET)],\n    tripSolidLateOffset: [...arrowHeadPattern(_colors.OTP_LATE_COLOR, TRIP_OFFSET)],\n    tripPerformedOffset: [...arrowHeadPattern(_colors.PERFORMED_COLOR, TRIP_OFFSET)],\n    // stop polyline directional arrows\n    stopPlanned: [...directionalPattern(_colors.PLANNED_COLOR)],\n    stopPlannedDanger: [...directionalPattern(_colors.OTP_DANGER_COLOR)],\n    stopPlannedLate: [...directionalPattern(_colors.OTP_LATE_COLOR)],\n    stopPending: [...directionalPattern(_colors.PENDING_COLOR)],\n    stopPendingDanger: [...directionalPattern(_colors.PENDING_COLOR)],\n    stopPendingLate: [...directionalPattern(_colors.PENDING_COLOR)],\n    stopPerformed: [...directionalPattern(_colors.PERFORMED_COLOR)],\n    // route polyline directional arrows\n    routePlanned: [...directionalPattern(_colors.PLANNED_COLOR, ROUTE_PLANNED_ARROW_WEIGHT, ROUTE_PLANNED_OFFSET)],\n    routeNavigation: [...directionalPattern(_colors.PENDING_COLOR, ROUTE_NAVIGATION_ARROW_WEIGHT, ROUTE_NAVIGATION_OFFSET)],\n    routePerformed: [...directionalPattern(_colors.PERFORMED_COLOR)],\n    routeScheduled: [...directionalPattern(_colors.SCHEDULE_COLOR, ROUTE_PERFORMED_ARROW_WEIGHT, ROUTE_PERFORMED_OFFSET)],\n    routeFloatingBreak: [...directionalPattern(_colors.BENOMAD_FLOATING_BREAK_COLOR, ROUTE_NAVIGATION_ARROW_WEIGHT, ROUTE_NAVIGATION_OFFSET)]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/polygon\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    solid: {\n      dashArray: null,\n      color: '#97a3a9',\n      opacity: 0.5,\n      fillOpacity: 0.2\n    },\n    solidLate: {\n      dashArray: null,\n      // matches 'text-danger' in CSS\n      color: 'orange',\n      opacity: 0.5,\n      fillOpacity: 0.2\n    },\n    solidDanger: {\n      dashArray: null,\n      color: 'red',\n      opacity: 0.5,\n      fillOpacity: 0.2\n    },\n    normal: {\n      dashArray: 'null',\n      color: '#97a3a9',\n      opacity: 0.1,\n      fillOpacity: 0\n    },\n    medium: {\n      dashArray: 'null',\n      color: 'orange',\n      opacity: 0.1,\n      fillOpacity: 0.05\n    },\n    high: {\n      dashArray: 'null',\n      color: 'red',\n      opacity: 0.1,\n      fillOpacity: 0.05\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\", [\"exports\", \"adept-iq/pods/components/iq-widgets/map-widget/config/colors\"], function (_exports, _colors) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // don't use opacity in these presets; it may cause polyline opacity to be\n  // reset if the active style changes\n  const {\n    bemap\n  } = window; //example of bemap linestyle for polylines\n  // new bemap.LineStyle({\n  //   width: 3,\n  //   color: new bemap.Color(2, 208, 255, 0.8)\n  // })\n\n  var _default = {\n    // these generic styles should go away\n    solidPlanned: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    solidNavigation: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PENDING_COLOR\n    }),\n    solidPerformed: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PERFORMED_COLOR\n    }),\n    solid: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    solidLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    solidDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_DANGER_COLOR\n    }),\n    dotted: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_DARK_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    dottedLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    dottedDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_DANGER_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    dottedDistance: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_DISTANCE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    // better to use descriptive styles like these below:\n    trip: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_DARK_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripCompleted: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_TRIP_COMPLETED_COLOR\n    }),\n    tripScheduled: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_PLANNED_SCHEDULE_COLOR\n    }),\n    tripUnscheduled: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_PLANNED_UNSCHEDULE_COLOR\n    }),\n    tripWaitlisted: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_WAITLISTED_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripCanceled: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_CANCELED_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripCanceledLate: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripLatecanceled: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_LATE_CANCELED_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripLatecanceledLate: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripCallback: new bemap.LineStyle({\n      width: 1,\n      color: _colors.BENOMAD_CALLBACK_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripDispatched: new bemap.LineStyle({\n      width: 0.5,\n      color: _colors.BENOMAD_DISPATCHED_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripDispatchedLate: new bemap.LineStyle({\n      width: 0.7,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripScheduledLate: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    tripCompletedLate: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    tripWaitlistedLate: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripDispatchedDanger: new bemap.LineStyle({\n      width: 0.7,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripScheduledDanger: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    tripCompletedDanger: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    tripIllegal: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_ILLEGAL_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripActive: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_ACTIVE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripActiveLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripEnroute: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_ENROUTE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripEnrouteLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripNoshowed: new bemap.LineStyle({\n      width: 1,\n      color: _colors.BENOMAD_NOSHOWED_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripNoshowrequested: new bemap.LineStyle({\n      width: 2,\n      color: _colors.BENOMAD_NOSHOWREQUESTED_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_DANGER_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    tripSolid: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_DARK_COLOR\n    }),\n    tripSolidDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_DANGER_COLOR\n    }),\n    tripSolidLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    tripPerformed: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PERFORMED_COLOR\n    }),\n    // otp doesn't affect stop polylines\n    stopPlanned: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    stopPlannedDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    stopPlannedLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    stopPending: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    stopPendingDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    stopPendingLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    stopPerformed: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    // otp does not affect route polylines\n    route: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    routePlanned: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    routeNavigation: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PENDING_COLOR\n    }),\n    routePerformed: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PERFORMED_COLOR\n    }),\n    routeScheduled: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_SCHEDULE_COLOR\n    }),\n    routeFloatingBreak: new bemap.LineStyle({\n      color: _colors.BENOMAD_FLOATING_BREAK_COLOR,\n      width: 3,\n      type: bemap.LineStyle.TYPE.DASH\n    })\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/decorations/arrow\", [\"exports\", \"adept-iq/utils/get-bearing\"], function (_exports, _getBearing) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n\n  function _default(points, arrowOptions) {\n    const arrow = window.L.marker(points[1], arrowOptions); // need to find who is using this\n    // relies on `vendor/leaflet/leaflet.rotatedMarker.js`\n\n    arrow.setRotationAngle((0, _getBearing.default)(points) - 90);\n    return arrow;\n  }\n});","define(\"adept-iq/pods/components/iq-widgets/map-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"RtY55OiY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-header\\\"],[12,\\\"ondblclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHeaderDoubleClick\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isComputingDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-box\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"computedDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"        Distance is \\\"],[1,[21,\\\"computedDistance\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          Please click to drop pin 1\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          Please click to drop pin 2\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not-eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control reset-button\\\"],[9],[0,\\\" Reset \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceReset\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\" \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceClose\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"form-components/address-vehicle-place-search\\\",null,[[\\\"inputClass\\\",\\\"inputPlaceholder\\\",\\\"text\\\",\\\"autoFocus\\\",\\\"selectedAddress\\\",\\\"onTextChange\\\",\\\"isVehicleSearchEnabled\\\",\\\"isPlaceSearchEnabled\\\",\\\"onVehicleSearch\\\",\\\"onAddressSelect\\\"],[\\\"map-widget-location-search-box\\\",\\\"Search by Address...\\\",[27,\\\"readonly\\\",[[23,[\\\"addressSearchText\\\"]]],null],false,[27,\\\"readonly\\\",[[23,[\\\"selectedAddress\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"addressSearchText\\\"]]],null]],null],true,true,[23,[\\\"onVehicleSearch\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"isNavigateToAllowed\\\"]],[23,[\\\"isAddressSearchEnabled\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"map-widget-button \\\",[27,\\\"unless\\\",[[23,[\\\"isNavigateToEnabled\\\"]],\\\"disabled\\\"],null]]]],[11,\\\"title\\\",\\\"Navigate To\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNavigateToEnabled\\\"]]],null]],[9],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-arrow-circle-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onNavigateToClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isSearchEnabled\\\"]],[23,[\\\"isAddressSearchEnabled\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button\\\"],[11,\\\"title\\\",\\\"Cancel Search\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\"]],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-controls-divider\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isAddressSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isAddressSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search-plus active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"              \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAddressSearchButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"]],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[23,[\\\"distanceAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control distance-icon\\\"],[9],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button\\\"],[11,\\\"data-test-map-filter-button\\\",\\\"\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"maximizer\\\",\\\"maximizedWidget\\\"]],[23,[\\\"widget\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitMaximizedClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[12,\\\"id\\\",[21,\\\"mapElementId\\\"]],[12,\\\"class\\\",[28,[\\\"tomtom-map \\\",[27,\\\"if\\\",[[23,[\\\"isComputingDistance\\\"]],\\\"pinpoint-cursor\\\"],null]]]],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"contextMenuPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setContextMenu\\\"],null]]],{\\\"statements\\\":[[0,\\\"  \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/map-widget/template.hbs' @ L105:C5) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[[0,\\\" \\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/map-widget/template.hbs' @ L106:C5) \\\"],null]],[[\\\"class\\\"],[\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"contextMenuOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onContextMenuOptionClick\\\",[22,2,[]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/map-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/message-widget/avlmConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/message-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'avlm-canned-message',\n    title: 'Messages',\n    defaultSortId: 'sentTime',\n    defaultSortAsc: false,\n    widgetName: 'messageWidget',\n    selectedRowLimit: 5,\n    columns: [{\n      id: 'read',\n      index: 9,\n      type: 'text',\n      label: 'Read',\n      valuePath: 'isRead',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'status',\n      index: 2,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      searchable: true\n    }, {\n      id: 'deliveredTime',\n      index: 1,\n      type: 'date',\n      label: 'Delivered Time',\n      valuePath: 'deliveredTime',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      searchable: true,\n      defaultWidth: 200,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'time',\n      index: 0,\n      type: 'date',\n      label: 'Sent Time',\n      valuePath: 'sentTime',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      searchable: true,\n      defaultWidth: 200,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'message',\n      index: 3,\n      type: 'text',\n      label: 'Message',\n      valuePath: 'message',\n      searchable: true,\n      defaultWidth: 100,\n      defaultTabletWidth: 220\n    }, {\n      id: 'driverId',\n      index: 6,\n      type: 'uuid',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      searchable: true,\n      defaultWidth: 40,\n      defaultTabletWidth: 120\n    }, {\n      id: 'lastName',\n      index: 5,\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driverLastName',\n      searchable: true,\n      defaultWidth: 75,\n      defaultTabletWidth: 170\n    }, {\n      id: 'firstName',\n      index: 8,\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driverFirstName',\n      searchable: true,\n      defaultWidth: 60,\n      defaultTabletWidth: 170\n    }, {\n      id: 'vehicleId',\n      index: 4,\n      type: 'text',\n      label: 'Vehicle Id',\n      valuePath: 'vehicleName',\n      searchable: true,\n      defaultWidth: 40,\n      defaultTabletWidth: 120\n    }, {\n      id: 'routeName',\n      index: 7,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      searchable: true,\n      defaultWidth: 40,\n      defaultTabletWidth: 220\n    }, {\n      id: 'responseType',\n      index: 10,\n      type: 'text',\n      label: 'Response Type',\n      valuePath: 'responseTypeLabel',\n      searchable: true,\n      defaultWidth: 175\n    }, {\n      id: 'responseMessage',\n      index: 11,\n      type: 'text',\n      label: 'Response Received',\n      valuePath: 'responseReceived',\n      searchable: true,\n      defaultWidth: 175\n    }, {\n      id: 'ackTime',\n      index: 12,\n      type: 'date',\n      label: 'Response Received Time',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'responseReceivedTime',\n      searchable: true,\n      defaultWidth: 200,\n      cellItem: 'DateLocalCellItem'\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripId',\n          valuePath: 'id'\n        }]\n      },\n      driverWidget: {\n        links: [{\n          type: 'eq',\n          field: 'driverPk',\n          valuePath: 'id'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'id'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'name'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/message-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/message-widget/config\", \"adept-iq/pods/components/iq-widgets/message-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\"], function (_exports, _component, _config, _avlmConfig, _environment, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['message-widget', 'data-test-message-widget'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    config: _config.default,\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n\n      this._super(...arguments);\n\n      if (this.user.isRoadSupEnable()) {\n        this.set('tableActions', [{\n          id: 'sendMessage',\n          permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver, _mappedPermIds.default.messageToDispatch],\n          name: 'Send Message',\n          action: () => {\n            this.sendMessage();\n          }\n        }, {\n          id: 'showAll',\n          permId: _mappedPermIds.default.showAllMessage,\n          name: 'Show All',\n          action: () => {\n            this.set('hiddenRowIds', []);\n            this.set('workspace.currentState.hiddenRowIds', []);\n          }\n        }]);\n      } else {\n        this.set('tableActions', [{\n          id: 'showAll',\n          permId: _mappedPermIds.default.showAllMessage,\n          name: 'Show All',\n          action: () => {\n            this.set('hiddenRowIds', []);\n            this.set('workspace.currentState.hiddenRowIds', []);\n          }\n        }]);\n      }\n\n      this.set('bulkActions', [{\n        id: 'readAll',\n        permId: _mappedPermIds.default.readMessages,\n        name: 'Read All',\n        action: () => {\n          const records = this.get('widgetService').getSelectedWidgetRecordsByModel(this.get('config.modelName'));\n          const models = records.map(record => this.get('store').peekRecord('avlm-canned-message', record.id));\n          const promises = models.map(model => {\n            model.set('readTime', new Date());\n            return model.save();\n          });\n          return Promise.all(promises);\n        }\n      }]);\n      this.set('readAction', {\n        id: 'read',\n        permId: _mappedPermIds.default.readMessages,\n        name: 'Read',\n        action: model => {\n          model.set('readTime', new Date());\n          return model.save();\n        }\n      });\n      this.set('hideAction', {\n        id: 'hide',\n        permId: _mappedPermIds.default.hideMessages,\n        name: 'Hide',\n        action: model => {\n          const hiddenRowIds = this.get('hiddenRowIds').concat(model.get('id'));\n          this.set('hiddenRowIds', hiddenRowIds);\n          model.set('readTime', new Date());\n          let currentState = this.get('workspace.currentState'); // save current manual settings\n\n          currentState = {\n            hiddenRowIds\n          };\n          this.set('workspace.currentState', currentState);\n          return model.save();\n        }\n      });\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('workspace.currentState');\n\n      if (currentState) {\n        this.set('hiddenRowIds', currentState.hiddenRowIds);\n      }\n    },\n\n    async sendMessage() {\n      if (localStorage.getItem('dashboard-info')) {\n        const dashboardInfo = localStorage.getItem('dashboard-info');\n        const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n        if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n          const accessDataObj = parsedDashboardInfo.accessData;\n          this.loggedRoadSupervisorVehicle = accessDataObj.vehicleId;\n          this.loggedRoadSupervisorDriver = accessDataObj.driverId;\n        }\n      }\n\n      const draftMessages = [this.get('store').createRecord('avlm-canned-message', {\n        vehicleId: this.loggedRoadSupervisorVehicle,\n        driverId: this.loggedRoadSupervisorDriver\n      })];\n      this.get('workspace').pushState('addNewMessage', {\n        draftMessages\n      });\n    },\n\n    dynamicSingleActions: Ember.computed('table.rows.@each.{selected,status}', 'selectedWidgetRecord', function () {\n      const hideAction = this.get('hideAction');\n      const readAction = this.get('readAction');\n      const row = this.getSelectedCoreModel();\n\n      if (!row) {\n        return [];\n      } // @TODO: extract statuses to constants\n\n\n      switch (row.get('status')) {\n        case 'Received':\n          if (row.get('readString') === 'Yes') {\n            return [hideAction];\n          }\n\n          return [readAction, hideAction];\n\n        case 'Sending':\n        case 'Sent':\n        case 'Deleted':\n          return [hideAction];\n\n        default:\n          return [];\n      }\n    }),\n\n    /**\n     * Push all messages to Store\n     */\n    postHandleReceiveDataEventHandler() {\n      const widgetService = this.get('widgetService');\n      const records = this.get('widgetRecords');\n      const widgetName = this.get('config.widgetName');\n      widgetService.updateAllCoreEntityStoreAction(widgetName, records);\n    },\n\n    applyTransformationData(widgetRecords) {\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          widgetRecord._transformed = true;\n        }\n      });\n      return widgetRecords;\n    },\n\n    getLocalSortColumns() {\n      return ['status'];\n    },\n\n    actions: {}\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/message-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/message-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'avlm-canned-message',\n    title: 'Messages',\n    defaultSortId: 'time',\n    defaultSortAsc: false,\n    // ember-react-widget properties\n    widgetName: 'messageWidget',\n    selectedRowLimit: 5,\n    columns: [{\n      id: 'read',\n      index: 10,\n      type: 'text',\n      label: 'Read',\n      valuePath: 'isRead',\n      defaultWidth: 70\n    }, {\n      id: 'status',\n      index: 3,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      searchable: true\n    }, {\n      id: 'deliveredTime',\n      index: 1,\n      type: 'date',\n      label: 'Delivered Time',\n      valuePath: 'deliveredTime',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      searchable: true,\n      defaultWidth: 200,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'time',\n      index: 2,\n      type: 'date',\n      label: 'Sent Time',\n      valuePath: 'sentTime',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      searchable: true,\n      defaultWidth: 200,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'message',\n      index: 4,\n      type: 'text',\n      label: 'Message',\n      valuePath: 'message',\n      searchable: true,\n      defaultWidth: 100\n    }, {\n      id: 'driverId',\n      index: 8,\n      type: 'uuid',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      searchable: true,\n      defaultWidth: 40\n    }, {\n      id: 'lastName',\n      index: 6,\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driverLastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'firstName',\n      index: 7,\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driverFirstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'vehicleId',\n      index: 5,\n      type: 'text',\n      label: 'Vehicle Id',\n      valuePath: 'vehicleName',\n      searchable: true,\n      defaultWidth: 40\n    }, {\n      id: 'routeName',\n      index: 9,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      searchable: true,\n      defaultWidth: 40\n    }, {\n      id: 'responseType',\n      index: 11,\n      type: 'text',\n      label: 'Response Type',\n      valuePath: 'responseTypeLabel',\n      searchable: true,\n      defaultWidth: 175\n    }, {\n      id: 'responseMessage',\n      index: 12,\n      type: 'text',\n      label: 'Response Received',\n      valuePath: 'responseReceived',\n      searchable: true,\n      defaultWidth: 175\n    }, {\n      id: 'ackTime',\n      index: 13,\n      type: 'date',\n      label: 'Response Received Time',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'responseReceivedTime',\n      searchable: true,\n      defaultWidth: 200,\n      cellItem: 'DateLocalCellItem'\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripId',\n          valuePath: 'id'\n        }]\n      },\n      driverWidget: {\n        links: [{\n          type: 'eq',\n          field: 'driverPk',\n          valuePath: 'id'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'id'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routeId',\n          valuePath: 'routeId'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routeId',\n          valuePath: 'routeId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/metrics-column-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"ember-light-table\"], function (_exports, _component, _emberLightTable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const fromPixels = x => parseInt(x.split('px')[0], 10);\n\n  var _default = _component.default.extend({\n    classNames: ['analytics-widget', 'metrics-column-widget'],\n    table: null,\n    dataType: null,\n    dataTypes: Ember.computed('', function () {\n      return ['Schedules', 'Routes', 'Trips', 'Stops', 'Passengers', 'Vehicles', 'Users', 'Drivers'];\n    }),\n    model: Ember.computed(function () {\n      return [{\n        'sample': 'Captain',\n        'firstName': 'Banana',\n        'lastName': 'Sundae'\n      }, {\n        'sample': 'Mr.',\n        'firstName': 'Icecream',\n        'lastName': 'Sandwich'\n      }];\n    }),\n    columns: Ember.computed(function () {\n      return [{\n        label: 'Label name',\n        valuePath: 'sample',\n        width: '100px',\n        sortable: false,\n        cellComponent: 'table/cells/base-cell',\n        resizable: true\n      }, {\n        label: 'First Name',\n        valuePath: 'firstName',\n        width: '150px',\n        cellComponent: 'table/cells/base-cell',\n        resizable: true\n      }, {\n        label: 'Last Name',\n        valuePath: 'lastName',\n        width: '150px',\n        cellComponent: 'table/cells/base-cell',\n        resizable: true\n      }, {\n        id: 'spacer',\n        width: '100%',\n        sortable: false,\n        resizable: false\n      }];\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const table = new _emberLightTable.default(this.get('columns'), this.get('model'), {\n        enableSync: false\n      });\n      this.set('table', table);\n    },\n\n    actions: {\n      chooseDataType(chosenType) {\n        this.set('dataType', chosenType);\n      },\n\n      onColumnResize(column, pixels) {\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          width: fromPixels(pixels)\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onFilterButtonClick() {\n        const workspace = this.get('workspace');\n        let topState = workspace.get('topState');\n\n        while (topState === 'metricsColumnWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        const displayName = 'Metrics Column Analytics';\n        workspace.pushState('metricsColumnWidget', {\n          displayName\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/metrics-column-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"pwYwJd2u\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\",\\\"dataTypeOption\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-header metrics-column-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"analytics-widget-title\\\"],[9],[0,\\\"Metrics for:\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"dataTypes\\\"]],[23,[\\\"dataType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"chooseDataType\\\"],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"metrics-column-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metrics-metadata\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Schedule Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"End\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Status\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"2018-02-09\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"February 8, 2018 9:00 PM\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"February 9, 2018 8:59 PM\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"SCHEDULED\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-body metric-column-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/metrics-column-widget/template.hbs' @ L34:C6) \\\"],null]],[[\\\"onColumnResized\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/metrics-column-widget/template.hbs' @ L40:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/iq-widgets/metrics-column-widget/template.hbs' @ L42:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          Loading...\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/metrics-column-widget/template.hbs' @ L48:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          No users found.\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/metrics-column-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/navigation-widget/component\", [\"exports\", \"resize-observer-polyfill\", \"adept-iq/pods/components/iq-widgets/navigation-widget/config/polyline\", \"adept-iq/pods/components/iq-widgets/navigation-widget/config/markers\"], function (_exports, _resizeObserverPolyfill, _polyline, _markers) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEBUG_MODE = false;\n  const FPS = 30; // eslint-disable-line no-unused-vars\n\n  const {\n    bemap\n  } = window;\n\n  var _default = Ember.Component.extend({\n    classNames: ['navigation-widget'],\n    location: null,\n    initialZoom: 17,\n    bearing: 0,\n    rotate: false,\n    destination: null,\n    navigationPolyline: null,\n    navigationPolylineLocation: null,\n    // TODO: get rid of this after debug done\n    guidance: null,\n    // tomtom objects\n    map: null,\n    markers: null,\n    gpsPolylineLayer: null,\n    navigationPolylineLayer: null,\n    // tomtom will only accept an element ID, so create a unique one\n    mapElementId: Ember.computed('elementId', function () {\n      return `${this.get('elementId')}-map`;\n    }),\n    viewChange: Ember.observer('map', 'location', 'zoom', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateLocation');\n    }),\n    destinationChange: Ember.observer('destination', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateDestination');\n    }),\n    bearingChange: Ember.observer('rotate', 'bearing', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateBearing');\n    }),\n    navigationPolylineChange: Ember.observer('navigationPolyline', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateNavigationPolyline');\n    }),\n    navigationPolylineLocationChange: Ember.observer('navigationPolylineLocation', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateNavigationPolylineLocation');\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.initializeMap();\n      this._nowInterval = setInterval(() => {\n        this.set('now', new Date());\n      }, 1000);\n      this._resizeObserver = new _resizeObserverPolyfill.default(() => {\n        Ember.run.debounce(this, 'onWidgetResize', 250);\n      });\n\n      this._resizeObserver.observe(this.$()[0]); // have to manually init this one\n\n\n      this.navigationPolylineChange();\n      this.navigationPolylineLocationChange();\n    },\n\n    willDestroyElement() {\n      clearInterval(this._nowInterval);\n      this.destroyMap();\n\n      if (this._resizeObserver) {\n        this._resizeObserver.disconnect();\n\n        this._resizeObserver = null;\n      }\n\n      this._super(...arguments);\n    },\n\n    initializeMap() {\n      const mapElementId = this.get('mapElementId');\n      const navigationStyle = _polyline.default.solidNavigation;\n      const greenStyle = _polyline.default.solidGreen;\n      const destinationMarkerStyle = _markers.default.destinationStop;\n      const projectedMarkerStyle = _markers.default.projectedStop; // set `scrollWheelZoom` and `touchZoom` to 'center' to re-enable zoom\n\n      const map = this.get('mapService').createLeafletMap(mapElementId);\n      this.set('map', map);\n      const navigationPolylineLayer = new bemap.Polyline([], {\n        style: navigationStyle\n      });\n      const gpsPolylineLayer = new bemap.Polyline([], {\n        style: greenStyle\n      });\n      map.addPolyline(navigationPolylineLayer);\n      map.addPolyline(gpsPolylineLayer);\n      this.set('navigationPolylineLayer', navigationPolylineLayer);\n      this.set('gpsPolylineLayer', gpsPolylineLayer);\n      const destinationIcon = new bemap.Icon(destinationMarkerStyle.icon);\n      const destCoord = new bemap.Coordinate(0, 0);\n      const destinationMarker = new bemap.Marker(destCoord, {\n        icon: destinationIcon\n      });\n      map.addMarker(destinationMarker);\n      this.set('destinationMarker', destinationMarker);\n      const projectedIcon = new bemap.Icon(projectedMarkerStyle.icon);\n      const projCoord = new bemap.Coordinate(0, 0);\n      const navigationPolylineLocationMarker = new bemap.Marker(projCoord, {\n        icon: projectedIcon\n      });\n\n      if (DEBUG_MODE) {\n        map.addMarker(navigationPolylineLocationMarker);\n      }\n\n      this.set('navigationPolylineLocationMarker', navigationPolylineLocationMarker);\n      this.set('rotatableMarkers', []);\n    },\n\n    destroyMap() {\n      this.get('map.native').remove();\n      this.set('map', null);\n    },\n\n    // onGuidanceChange: observer('guidance', function() {\n    //   this.onWidgetResize();\n    // }),\n    onWidgetResize() {\n      const map = this.get('map');\n      if (!map) return;\n      Ember.run.scheduleOnce('afterRender', () => {\n        map.native.invalidateSize();\n      });\n    },\n\n    updateLocation() {\n      const map = this.get('map');\n      const location = this.get('location');\n      if (!map || !location) return;\n      const options = {\n        noMoveStart: true,\n        easeLinearity: 1.0\n      };\n      const t = new Date();\n\n      if (this._tLocation) {\n        options.duration = (t - this._tLocation) / 1000.0;\n        this._tLocation = t;\n      } else {\n        options.duration = 0;\n        this._tLocation = t;\n      }\n\n      if (this._location) {\n        // cancel existing animation\n        map.native.panTo(map.native.getCenter(), {\n          animate: false,\n          noMoveStart: true\n        });\n      }\n\n      map.native.panTo(location, options);\n      this._location = location;\n    },\n\n    updateDestination() {\n      const destination = this.get('destination');\n      const destinationMarker = this.get('destinationMarker');\n      if (!destination || !destinationMarker) return;\n      destinationMarker.native.setLatLng(destination);\n    },\n\n    updateBearing() {\n      const mapElementId = this.get('mapElementId');\n      const element = document.getElementById(mapElementId);\n      const rotate = this.get('rotate');\n      const bearing = this.get('bearing');\n      const rotationMarkers = this.get('rotatableMarkers') || [];\n      element.style.transform = `rotate(${rotate ? -bearing : 0}deg)`;\n      let markerAngle = bearing; // translate angle to within [-180, 180)\n\n      while (markerAngle < -180) markerAngle += 360;\n\n      while (markerAngle >= 180) markerAngle -= 360;\n\n      rotationMarkers.forEach(marker => {\n        marker.native.setRotationAngle(rotate ? markerAngle / 2 : 0);\n      });\n\n      if (!this.$('.driver-icon').hasClass('driving')) {\n        this.$('.driver-icon').addClass('driving');\n      }\n\n      this.$('.driver-icon').css({\n        transform: `rotate(${rotate ? 0 : bearing}deg)`\n      });\n    },\n\n    updateNavigationPolyline() {\n      const navigationPolyline = this.get('navigationPolyline') || [];\n      const navigationPolylineLayer = this.get('navigationPolylineLayer');\n\n      if (Ember.isEmpty(navigationPolyline)) {\n        navigationPolylineLayer.native.setLatLngs([]);\n        return;\n      }\n\n      navigationPolylineLayer.native.setLatLngs(navigationPolyline);\n    },\n\n    updateNavigationPolylineLocation() {\n      const navigationPolylineLocation = this.get('navigationPolylineLocation');\n      const navigationPolylineLocationMarker = this.get('navigationPolylineLocationMarker');\n      if (!navigationPolylineLocation || !navigationPolylineLocationMarker) return;\n      navigationPolylineLocationMarker.native.setLatLng(navigationPolylineLocation);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/navigation-widget/config/colors\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.BENOMAD_SCHEDULE_COLOR = _exports.BENOMAD_PRIMARY_COLOR = _exports.BENOMAD_PLANNED_DARK_COLOR = _exports.BENOMAD_PLANNED_COLOR = _exports.BENOMAD_PERFORMED_COLOR = _exports.BENOMAD_PENDING_COLOR = _exports.BENOMAD_OTP_LATE_COLOR = _exports.BENOMAD_OTP_DANGER_COLOR = _exports.BENOMAD_DISTANCE_COLOR = void 0;\n  const bemap = window.bemap;\n  const BENOMAD_PLANNED_COLOR = new bemap.Color(169, 178, 181, 1); // grey color\n\n  _exports.BENOMAD_PLANNED_COLOR = BENOMAD_PLANNED_COLOR;\n  const BENOMAD_DISTANCE_COLOR = new bemap.Color(48, 62, 68, 1); // dark-grey color\n\n  _exports.BENOMAD_DISTANCE_COLOR = BENOMAD_DISTANCE_COLOR;\n  const BENOMAD_PLANNED_DARK_COLOR = new bemap.Color(85, 94, 99, 1); // dark-grey color\n\n  _exports.BENOMAD_PLANNED_DARK_COLOR = BENOMAD_PLANNED_DARK_COLOR;\n  const BENOMAD_PENDING_COLOR = new bemap.Color(0, 103, 252, 1); // blue color\n\n  _exports.BENOMAD_PENDING_COLOR = BENOMAD_PENDING_COLOR;\n  const BENOMAD_PERFORMED_COLOR = new bemap.Color(97, 95, 96, 1); // dark-grey color\n\n  _exports.BENOMAD_PERFORMED_COLOR = BENOMAD_PERFORMED_COLOR;\n  const BENOMAD_OTP_DANGER_COLOR = new bemap.Color(227, 98, 27, 1); // orange color\n\n  _exports.BENOMAD_OTP_DANGER_COLOR = BENOMAD_OTP_DANGER_COLOR;\n  const BENOMAD_OTP_LATE_COLOR = new bemap.Color(209, 55, 48, 1); // red color\n\n  _exports.BENOMAD_OTP_LATE_COLOR = BENOMAD_OTP_LATE_COLOR;\n  const BENOMAD_SCHEDULE_COLOR = new bemap.Color(255, 167, 1, 1); // orange-yellowish color\n\n  _exports.BENOMAD_SCHEDULE_COLOR = BENOMAD_SCHEDULE_COLOR;\n  const BENOMAD_PRIMARY_COLOR = new bemap.Color(124, 179, 66, 1); // app primary color\n\n  _exports.BENOMAD_PRIMARY_COLOR = BENOMAD_PRIMARY_COLOR;\n  var _default = {\n    BENOMAD_PLANNED_COLOR,\n    BENOMAD_PLANNED_DARK_COLOR,\n    BENOMAD_PENDING_COLOR,\n    BENOMAD_PERFORMED_COLOR,\n    BENOMAD_PRIMARY_COLOR,\n    BENOMAD_OTP_DANGER_COLOR,\n    BENOMAD_OTP_LATE_COLOR,\n    BENOMAD_DISTANCE_COLOR,\n    BENOMAD_SCHEDULE_COLOR\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/navigation-widget/config/markers\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const stopIconSize = [23.0, 23.0];\n  var _default = {\n    destinationStop: {\n      icon: {\n        src: '/stops-icons/stop_next@2x.png',\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    },\n    projectedStop: {\n      icon: {\n        src: '/location-26.png',\n        anchorX: 0.50,\n        anchorY: 0.50,\n        height: stopIconSize[0],\n        width: stopIconSize[1],\n        anchorXUnits: 'fraction',\n        anchorYUnits: 'fraction',\n        scale: 1\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/navigation-widget/config/polyline\", [\"exports\", \"adept-iq/pods/components/iq-widgets/navigation-widget/config/colors\"], function (_exports, _colors) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // don't use opacity in these presets; it may cause polyline opacity to be\n  // reset if the active style changes\n  const {\n    bemap\n  } = window;\n  var _default = {\n    // these generic styles should go away\n    solidPlanned: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    solidNavigation: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PENDING_COLOR\n    }),\n    solidGreen: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PRIMARY_COLOR\n    }),\n    solidPerformed: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PERFORMED_COLOR\n    }),\n    solid: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_COLOR\n    }),\n    solidLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR\n    }),\n    solidDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_DANGER_COLOR\n    }),\n    dotted: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_PLANNED_DARK_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    dottedLate: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_LATE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    dottedDanger: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_OTP_DANGER_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    }),\n    dottedDistance: new bemap.LineStyle({\n      width: 3,\n      color: _colors.BENOMAD_DISTANCE_COLOR,\n      type: bemap.LineStyle.TYPE.DASH\n    })\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/navigation-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YhVE01Jq\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"guidance-overlay\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"guidance-overlay-content\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isAtDestination\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"px-3 py-3 text-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h3\\\"],[9],[0,\\\"\\\\n          You have reached your destination\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-primary\\\"],[9],[0,\\\"\\\\n          Exit Navigation\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],[22,0,[\\\"onExitButtonClick\\\"]]]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"guidance\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"py-5 px-4\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex pb-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"img\\\"],[11,\\\"class\\\",\\\"\\\"],[12,\\\"src\\\",[28,[[23,[\\\"guidance\\\",\\\"instructIcon\\\"]]]]],[11,\\\"width\\\",\\\"64\\\"],[11,\\\"height\\\",\\\"64\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pl-3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"distance p-0\\\"],[9],[1,[23,[\\\"guidance\\\",\\\"travelDistanceToNextGuide\\\"]],false],[10],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"direction p-0\\\"],[9],[1,[23,[\\\"guidance\\\",\\\"message\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[9],[1,[23,[\\\"guidance\\\",\\\"previousGuidance\\\",\\\"street\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"information mx-3 px-3 pt-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-flag\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"guidance\\\",\\\"travelTime\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"guidance\\\",\\\"travelTime\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"measurement\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[23,[\\\"guidance\\\",\\\"travelDistance\\\"]],false],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"seperator\\\"],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"now\\\"]],[23,[\\\"guidance\\\",\\\"travelTime\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"moment-add\\\",[[23,[\\\"now\\\"]],[23,[\\\"guidance\\\",\\\"travelTime\\\"]]],null],\\\"h:mm a\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"guidance\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pl-3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"direction p-0\\\"],[9],[1,\\\"Calculating New Route. Please wait...\\\",false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[12,\\\"id\\\",[21,\\\"mapElementId\\\"]],[11,\\\"class\\\",\\\"tomtom-map\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driver-icon\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/navigation-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/ada-eligibility/component\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\"], function (_exports, _environment, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ADA_BOUNDARY_TYPE = 'ada-boundary-polygons';\n  const STOP_MARKER_TYPE = 'stop-marker';\n  const arrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 19,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillColor: 'black',\n          fillOpacity: 1,\n          color: 'black',\n          opacity: 1\n        }\n      })\n    }]\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['ada-eligibility-popup'],\n    store: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    permissionLayer: Ember.inject.service(),\n    zoom: 12,\n    arrayADABoundaries: null,\n    riderADAEligibility: null,\n    overrideADABoundariesGranted: false,\n    noteLabel: Ember.computed('noADAEligibility', function () {\n      return this.get('noADAEligibility') ? 'The request time for at least one leg in the booking is outside of the ADA boundary service times.' : 'Not all stops fall within an ADA boundary.';\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('overrideADABoundariesGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideADABoundaries, null));\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setupMapDrawControl();\n      const arrayADABoundaries = this.get('arrayADABoundaries');\n\n      if (Ember.isPresent(arrayADABoundaries)) {\n        this.updateADABoundaries(arrayADABoundaries.geoms);\n        this.updateLegMarkers(arrayADABoundaries.legs);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    updateADABoundaries(geoms) {\n      const drawnItems = this.get('drawnItems');\n\n      if (Ember.isPresent(geoms)) {\n        geoms.forEach(geom => {\n          // a geom can be MultiPolygon coordinates; drawn as one leaflet polygon,\n          // its polygons become rings of a single path and overlaps render as\n          // holes (even-odd fill), so draw each polygon as its own layer\n          const polygons = Array.isArray(geom?.[0]?.[0]?.[0]) ? geom : [geom];\n          polygons.forEach(polygonCoords => {\n            const lpolygon = this.createPolygon(polygonCoords, 'green', ADA_BOUNDARY_TYPE);\n            lpolygon.addTo(drawnItems);\n          });\n        });\n      }\n    },\n\n    updateLegMarkers(legs) {\n      const map = this.get('map');\n      const stops = [];\n      const latlngs = [];\n\n      if (Ember.isPresent(legs)) {\n        legs.forEach(leg => {\n          stops.push({\n            requestTime: leg.requestTime,\n            type: 'pick',\n            lat: leg.pick.lat,\n            lng: leg.pick.lng,\n            adaEligible: leg.pick.adaEligible,\n            address: leg.pick.address\n          });\n          stops.push({\n            requestTime: leg.requestTime,\n            type: 'drop',\n            lat: leg.drop.lat,\n            lng: leg.drop.lng,\n            adaEligible: leg.drop.adaEligible,\n            address: leg.drop.address\n          });\n        });\n        stops.forEach(stop => {\n          const lmarker = this.createMarker(stop, STOP_MARKER_TYPE);\n          lmarker.addTo(map);\n        });\n\n        for (let i = 0; i < stops.length; i++) {\n          const prevStop = stops[i - 1];\n          const currStop = stops[i]; // generate the direction arrow\n\n          if (i > 0) {\n            latlngs.push([[currStop.lat, currStop.lng], [prevStop.lat, prevStop.lng]]);\n          }\n        }\n\n        const lpolylines = this.createPolylines(latlngs);\n        const polylineDecorator = window.L.polylineDecorator(lpolylines, arrowHeadLineConfig);\n        lpolylines.addTo(map);\n        polylineDecorator.addTo(map);\n        const bounds = window.L.latLngBounds(stops.map(stop => [stop.lat, stop.lng]));\n        map.fitBounds(bounds, {\n          padding: [40, 40]\n        });\n      }\n    },\n\n    setupMapDrawControl() {\n      const mapElementId = 'boundary-map';\n      const zoomLevel = this.get('zoom');\n      const bnomadmap = this.get('mapService').createLeafletMap(mapElementId, {\n        zoom: zoomLevel\n      });\n      const map = bnomadmap.native;\n      const drawnItems = new window.L.FeatureGroup();\n      map.setView({\n        lat: _environment.default.tomtom.search.center.lat,\n        lng: _environment.default.tomtom.search.center.lon\n      }, zoomLevel);\n      map.addLayer(drawnItems);\n      this.set('drawnItems', drawnItems);\n      this.set('map', map);\n    },\n\n    clearDrawnItems(type) {\n      if (type === ADA_BOUNDARY_TYPE) {\n        const drawnItems = this.get('drawnItems');\n        const polygonLayers = drawnItems.getLayers();\n        polygonLayers.forEach(polygonLayer => {\n          const currentType = polygonLayer?.options?.properties?.type;\n\n          if (currentType === type) {\n            drawnItems.removeLayer(polygonLayer);\n          }\n        });\n      }\n    },\n\n    createPolygon(latlngs, color, type) {\n      const polygon = window.L.polygon(latlngs, {\n        color: color,\n        properties: {\n          type: type\n        }\n      });\n      return polygon;\n    },\n\n    createMarker(stop, type) {\n      let addressMarker = null;\n      const color = stop.adaEligible ? 'black' : 'red';\n      addressMarker = window.L.AwesomeMarkers.icon({\n        icon: 'circle',\n        prefix: 'fa',\n        markerColor: color\n      });\n      const marker = window.L.marker([stop.lat, stop.lng], {\n        pmIgnore: true,\n        properties: {\n          stop: stop,\n          type: type\n        },\n        icon: addressMarker\n      });\n\n      if (!Ember.isEmpty(stop.address)) {\n        marker.bindTooltip(stop.address, {\n          permanent: false,\n          direction: 'auto',\n          className: `ada-${color}-marker-labels`\n        });\n      }\n\n      return marker;\n    },\n\n    createPolylines(latlngs) {\n      const lpolyline = window.L.polyline(latlngs, {\n        color: 'black'\n      });\n      return lpolyline;\n    },\n\n    actions: {\n      async closeDialog() {\n        this.get('onClickX')();\n      },\n\n      async onRefuseClick() {\n        this.get('onDeny')();\n      },\n\n      async onAcceptClick() {\n        this.get('onOverride')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/ada-eligibility/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3lUewaOe\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"ada-eligibility-overlay\\\",\\\"ada-eligibility-container\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ada-eligibility-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-heading mb-2 font-weight-bold\\\"],[9],[0,\\\"\\\\n        Passenger Eligibility\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"x-button mr-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"close\\\"],[11,\\\"aria-label\\\",\\\"Close\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeDialog\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\"×\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"note-label\\\"],[9],[1,[21,\\\"noteLabel\\\"],false],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ada-type-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-row heading\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title-table row-item\\\"],[9],[0,\\\"Passenger Eligibility\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-row heading\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-table row-item col-type\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-table row-item col-desc\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-table row-item col-date\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-table row-item col-date\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row-item col-type\\\"],[9],[1,[23,[\\\"riderADAEligibility\\\",\\\"eligibilityCategory\\\",\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row-item col-desc\\\"],[9],[1,[23,[\\\"riderADAEligibility\\\",\\\"eligibilityCategory\\\",\\\"description\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row-item col-date\\\"],[9],[1,[23,[\\\"riderADAEligibility\\\",\\\"formattedFrom\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row-item col-date\\\"],[9],[1,[23,[\\\"riderADAEligibility\\\",\\\"formattedTo\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"id\\\",\\\"boundary-map\\\"],[11,\\\"class\\\",\\\"boundary-map\\\"],[9],[0,\\\"\\\\n          \\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ada-response pl-5 mb-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-light elm v-btn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRefuseClick\\\"],null]],[9],[0,\\\"Deny\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"overrideADABoundariesGranted\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-light elm v-btn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAcceptClick\\\"],null]],[9],[0,\\\"Override\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/ada-eligibility/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/component\", [\"exports\", \"moment\", \"lodash\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/mapped-status\", \"adept-iq/models/trip\", \"adept-iq/config/environment\"], function (_exports, _moment, _lodash, _emberConcurrency, _unwrapProxy, _mappedStatus, _trip, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const REFUSED_STATUS = 'refused';\n  const PRIMARY_SCHEDULE_TYPE = 'primary';\n\n  var _default = Ember.Component.extend({\n    classNames: ['booking-details'],\n    editModal: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tripDetails: null,\n    returnTripDetails: null,\n    returnTripDetailsVisible: false,\n    returnTripIndex: null,\n    isEveryLegHasPromiseTime: true,\n    locationAddressMapper: null,\n    isNotSameDayBooking: Ember.computed('booking.activeBooking.isSameDayBooking', function () {\n      return !this.get('booking.activeBooking.isSameDayBooking');\n    }),\n    isNotPromiseTime: Ember.computed('booking.isNotPromiseTime', function () {\n      const isNotPromiseTime = this.get('booking.isNotPromiseTime');\n      return isNotPromiseTime;\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('locationAddressMapper', {});\n      this.onSelectedTravelModeChange = this.onSelectedTravelModeChange.bind(this);\n      this.closeBookingAcceptScreen = this.closeBookingAcceptScreen.bind(this);\n      await this.buildTripAndReturnTripDetails.perform();\n\n      if (!Ember.isEmpty(this.get('returnTripBooking'))) {\n        this.set('returnTripDetailsVisible', true);\n      }\n\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    willDestroyElement() {\n      this.set('booking.tempBookingInfo', {});\n      this.set('booking.tripDetails', []);\n\n      this._super(...arguments);\n    },\n\n    async saveBooking(status) {\n      const isEditMode = this.get('isEditMode');\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const tempBookingId = this.get('booking.tempBookingInfo.tempBookingId');\n        const riderId = this.get('riderRecord.id');\n\n        if (status === REFUSED_STATUS) {\n          const tripCancelJobs = await this.get('booking').deleteBooking(tempBookingId, 'refuse', isEditMode, riderId);\n          const asynOperationInfoArray = tripCancelJobs ? tripCancelJobs.tripCancelJobs : [];\n\n          for (const tripCancelInfo of asynOperationInfoArray) {\n            if (tripCancelInfo) {\n              await this.get('booking').callScheduleAsyncOperation(tripCancelInfo);\n            }\n          }\n        } // if edit booking delete original booking trips\n\n\n        if (isEditMode) {\n          const bookingID = this.get('booking.activeBooking.id');\n          const tripCancelJobs = await this.get('booking').deleteBooking(bookingID, 'refuse', isEditMode, riderId);\n          const asynOperationInfoArray = tripCancelJobs ? tripCancelJobs.tripCancelJobs : [];\n\n          for (const tripCancelInfo of asynOperationInfoArray) {\n            if (tripCancelInfo) {\n              await this.get('booking').callScheduleAsyncOperation(tripCancelInfo);\n            }\n          }\n\n          await this.get('booking').deleteTrips(bookingID);\n          await this.get('booking').saveBooking(isEditMode);\n        } else {\n          let createRefusedBooking = false;\n\n          if (status === REFUSED_STATUS) {\n            createRefusedBooking = true;\n          }\n\n          await this.get('booking').saveBookingStatus(tempBookingId, createRefusedBooking);\n        }\n\n        await this.get('booking').setSelectedRiders(isEditMode);\n        await this.loadBookingsForSelectedExternalRiders();\n        this.get('onClose')();\n        this.editModal.close();\n        let message = isEditMode ? 'Booking updated Successfully' : 'New Booking successfully saved!';\n\n        if (status === REFUSED_STATUS) {\n          message = 'Booking was saved but it will not be scheduled.';\n          this.get('notifications').warning(message);\n        } else {\n          this.get('notifications').success(message);\n          this.set('booking.activeBooking.status', 'unscheduled');\n        }\n      } catch (err) {\n        const bookingFailedMessage = isEditMode ? 'Failed to update Booking' : 'Failed to create Booking';\n        const errorMsg = err.isLoadTripError ? err.message : bookingFailedMessage;\n        this.get('notifications').warning(errorMsg);\n        this.get('onClose')();\n        this.editModal.close();\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    /**\n     * update temp booking with  status 'scheduled' and  update  legs and segments..\n     * then call schedule service to create trips\n     * @returns {Promise<void>}\n     */\n    async acceptBooking() {\n      const isEditMode = this.get('isEditMode');\n\n      try {\n        const {\n          promiseTimeAsyncOperationInfoArray,\n          booking\n        } = await this.get('booking').acceptBooking(isEditMode);\n        const isItpBooking = this.get('itpRequestResults').length;\n        const bookingId = booking.data.id;\n\n        if (isItpBooking) {\n          const bookingByID = `eq(id,(${bookingId}))&include=group,legs,legs.segments,legs.legTravelNeeds,legs.segments.pick,legs.segments.drop,subscription`;\n          const bookingRecord = await this.get('store').query('booking', {\n            filter: bookingByID\n          });\n          await this.get('booking').saveSegmentStopPhoneNumber(bookingRecord);\n          await this.get('booking').adjustItpBookingLegOrdinals();\n        } // There is a little delay in creating trips in scheduling service.. So we need to call schedule service to wait until trips are created..\n        // After this call, we should  call loadBookingsForSelectedExternalRiders api to get trips for newly created scheduled  booking\n\n\n        if (promiseTimeAsyncOperationInfoArray) {\n          for (const promiseTimeAsyncOperationInfo of promiseTimeAsyncOperationInfoArray) {\n            try {\n              // Primary-booking patch doesn't use the async operation and Primary-booking is created the trip in Primary-booking patch\n              if (isEditMode && !Ember.isEmpty(promiseTimeAsyncOperationInfo.body)) {\n                const {\n                  isJobSuccess,\n                  state,\n                  results\n                } = await this.get('booking').callScheduleAsyncOperation(promiseTimeAsyncOperationInfo.body);\n\n                if (!isJobSuccess) {\n                  // Regarding NYAAR-17874 - If SES or SS fails with any other error, the booking status should be set to Failed.\n                  await this.get('booking').asyncOperationStateSuccess(booking, state, results);\n                }\n              }\n            } catch (err) {\n              // eslint-disable-next-line no-console\n              console.error(err);\n              await this.get('booking').updateBookingStatus(booking.data.id, _mappedStatus.convertBookingStatus.failed);\n            }\n          }\n        }\n\n        await this.get('booking').setSelectedRiders(isEditMode);\n        await this.loadBookingsForSelectedExternalRiders();\n      } catch (err) {\n        const bookingFailedMessage = isEditMode ? `Failed to update Booking ${err.message}` : `Failed to create Booking  ${err.message}`;\n        const errorMsg = err.isLoadTripError ? err.message : bookingFailedMessage;\n        this.get('notifications').warning(errorMsg);\n        this.get('onClose')();\n        this.editModal.close();\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    checkAndSetStatus(bookingStatus) {\n      if (bookingStatus) {\n        this.set('booking.activeBooking.status', bookingStatus);\n      } else {\n        this.set('booking.activeBooking.status', 'unscheduled');\n      }\n    },\n\n    buildTripAndReturnTripDetails: (0, _emberConcurrency.task)(function* () {\n      const TIME_FORMAT = _environment.default.dateTimeFormat.timeMoment;\n      const DATE_TIME_FORMAT = _environment.default.dateTimeFormat.dateTimeMoment;\n      const DATE_FORMAT = _environment.default.dateTimeFormat.dateMoment;\n      const itpRequestResults = this.get('itpRequestResults') || [];\n      const tripRequestDetails = this.get('tripLegs').map(tb => {\n        const reqTime = (0, _moment.default)(tb.get('requestTime'));\n        return {\n          tripDate: reqTime.format(DATE_FORMAT),\n          requestTime: tb.get('requestTime'),\n          formattedRequestTime: reqTime.format(TIME_FORMAT),\n          promiseTime: '',\n          segments: tb.get('segments').map(segment => {\n            return {\n              pickAddress: segment.get('pick.place.address.placeNameAddress'),\n              dropAddress: segment.get('drop.place.address.placeNameAddress'),\n              tripRequestPickAddress: segment.get('pick.place.address.simpleAddress'),\n              tripRequestDropAddress: segment.get('drop.place.address.simpleAddress'),\n              promiseTime: (0, _moment.default)(segment.get('formattedPromiseTime')).format(DATE_TIME_FORMAT),\n              startTime: (0, _moment.default)(segment.get('tripStartTime')).format(TIME_FORMAT),\n              arriveTime: (0, _moment.default)(segment.get('tripEndTime')).format(TIME_FORMAT)\n            };\n          })\n        };\n      });\n      const returnTripDetails = this.get('returnTripBooking').map(rtb => {\n        const reqTime = (0, _moment.default)(rtb.get('requestTime'));\n        return {\n          tripDate: reqTime.format(DATE_FORMAT),\n          requestTime: this.get('booking').getPromiseTime(this.get('returnTripIndex'), rtb),\n          formattedRequestTime: reqTime.format(TIME_FORMAT),\n          promiseTime: '',\n          segments: rtb.get('segments').map(segment => {\n            return {\n              pickAddress: segment.get('pick.place.address.placeNameAddress'),\n              dropAddress: segment.get('drop.place.address.placeNameAddress'),\n              tripRequestPickAddress: segment.get('pick.place.address.simpleAddress'),\n              tripRequestDropAddress: segment.get('drop.place.address.simpleAddress'),\n              promiseTime: (0, _moment.default)(segment.get('formattedPromiseTime')).format(DATE_TIME_FORMAT),\n              startTime: (0, _moment.default)(segment.get('tripStartTime')).format(TIME_FORMAT),\n              arriveTime: (0, _moment.default)(segment.get('tripEndTime')).format(TIME_FORMAT)\n            };\n          })\n        };\n      });\n      yield this.buildAddressMapper.perform(itpRequestResults);\n      this.setItp([...tripRequestDetails, ...returnTripDetails], itpRequestResults);\n      this.set('tripDetails', tripRequestDetails);\n      this.set('returnTripDetails', returnTripDetails);\n      this.set('returnTripIndex', tripRequestDetails.length);\n      this.get('booking').createOverlapActivityLogs(this.get('booking.tempBookingInfo.tempBookingRecord.trips'));\n    }),\n    buildAddressMapper: (0, _emberConcurrency.task)(function* (itpRequestResults) {\n      const addressMapper = {};\n      const mappedLocationsPromises = itpRequestResults.map(async itpResult => {\n        const locationPromises = itpResult.result.segments.map(async segment => {\n          const locationQuery = `or(and(eq(lat,'${segment.start.coordinates.lat}'),eq(lng,'${segment.start.coordinates.lng}')),and(eq(lat,'${segment.end.coordinates.lat}'),eq(lng,'${segment.end.coordinates.lng}')))`;\n          return await this.store.query('location', {\n            filter: locationQuery\n          });\n        });\n        return await Promise.all(locationPromises);\n      });\n      const mappedLocations = yield Promise.all(mappedLocationsPromises);\n      const allLocations = (0, _lodash.flattenDeep)(mappedLocations).map(loc => loc.toArray());\n      const flattenLocations = (0, _lodash.uniq)((0, _lodash.flattenDeep)(allLocations));\n      const mappedPlacesPromises = flattenLocations.map(async loc => {\n        const placeQuery = `in(locationId,('${loc.get('id')}'))&include=address,location`;\n        return await this.store.query('place', {\n          filter: placeQuery\n        });\n      });\n      const allPlaces = yield Promise.all(mappedPlacesPromises);\n      const flattenPlaces = (0, _lodash.uniq)((0, _lodash.flattenDeep)(allPlaces.map(place => place.toArray())));\n      flattenPlaces.forEach(place => {\n        const location = place.get('location');\n        const locationKey = [location.get('lat'), location.get('lng')].join(',');\n        addressMapper[locationKey] = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      });\n      this.set('locationAddressMapper', addressMapper);\n    }),\n\n    /**\n     * trips also contain return trip details\n     * @param trips\n     * @param itpRequestResults\n     */\n    setItp(trips, itpRequestResults) {\n      const itpInfoMap = {};\n      itpRequestResults.forEach(itpInfo => {\n        itpInfoMap[itpInfo.legIndex] = itpInfo;\n      });\n      trips.forEach((trip, index) => {\n        const {\n          result: itpRequestResult\n        } = itpInfoMap[index] || {};\n        const itinerarySegments = itpRequestResult && itpRequestResult.segments || [];\n        this.setAddressForSegments(itinerarySegments);\n        trip.itinerarySegments = itinerarySegments;\n      });\n    },\n\n    setAddressForSegments(itinerarySegments) {\n      const locationAddressMapper = this.get('locationAddressMapper');\n\n      if (!Ember.isEmpty(locationAddressMapper)) {\n        itinerarySegments.forEach(segment => {\n          const startLocationCoOrdinateKey = [segment.start.coordinates.lat, segment.start.coordinates.lng].join(',');\n          const endLocationCoOrdinateKey = [segment.end.coordinates.lat, segment.end.coordinates.lng].join(',');\n          segment.start.address = locationAddressMapper[startLocationCoOrdinateKey] ? locationAddressMapper[startLocationCoOrdinateKey].simpleAddress : '';\n          segment.end.address = locationAddressMapper[endLocationCoOrdinateKey] ? locationAddressMapper[endLocationCoOrdinateKey].simpleAddress : '';\n        });\n      }\n    },\n\n    onSelectedTravelModeChange(legIndex, travelModeConfig) {\n      const travelModeName = travelModeConfig.get('name').toLowerCase();\n      this.get('booking').setSelectedTravelMode(legIndex, travelModeName);\n      this.get('booking').setSelectedTravelModeInBooking(legIndex, travelModeName);\n    },\n\n    async loadBookingsForSelectedExternalRiders() {\n      try {\n        const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n        this.set('booking.currentBookings', bookings);\n        this.set('booking.currentTrips', trips);\n      } catch (e) {\n        const message = 'Booking is saved. But failed to load bookings and trips'; // eslint-disable-next-line no-throw-literal\n\n        throw {\n          message: message,\n          isLoadTripError: true\n        };\n      }\n    },\n\n    /**\n     * phone Number is class\n     * segment is Segment class\n     * numberType is pick and drop \"String\"\n     * @param phoneNumber\n     * @param segment\n     * @param numberType\n     */\n    createPhoneRecordAfterResetPhoneNumber(phoneNumber, segment, numberType) {\n      const phoneNumberAttr = phoneNumber.toJSON();\n      const activeLegPhoneNumber = [];\n      const segmentStopPhoneAttrRecord = this.get('store').createRecord('segment-stop-phone-number', phoneNumberAttr);\n      const segmentStopPhoneNumberId = segment.get(`${numberType}.phoneNumbers.firstObject.id`);\n      const segmentStopPhoneRecord = this.get('store').peekRecord('segment-stop-phone-number', segmentStopPhoneNumberId);\n      const filterSegmentStopPickPhoneId = this.get('booking.segmentStopPhoneNumberIds').filter(phone => {\n        return phone.get('id') !== segmentStopPhoneRecord.get('id');\n      });\n      this.get('store').unloadRecord(segmentStopPhoneRecord);\n      this.set('booking.segmentStopPhoneNumberIds', filterSegmentStopPickPhoneId);\n      activeLegPhoneNumber.pushObject(segmentStopPhoneAttrRecord);\n      segment.set(`${numberType}.phoneNumbers`, activeLegPhoneNumber);\n    },\n\n    resetModelAttribute() {\n      this.get('booking.activeBooking.legs').forEach(leg => {\n        if (!leg) {\n          return;\n        }\n\n        const pickAddressId = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.pick.place.address.id'));\n        const dropAddressId = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.drop.place.address.id'));\n\n        if (pickAddressId) {\n          const pickAddressRecord = this.get('store').peekRecord('address', pickAddressId);\n          pickAddressRecord.rollbackAttributes();\n        }\n\n        if (dropAddressId) {\n          const dropAddressRecord = this.get('store').peekRecord('address', dropAddressId);\n          dropAddressRecord.rollbackAttributes();\n        }\n      });\n    },\n\n    //NYAAR-19188 this method used for fixing the segmentStop pick and drop Phone No field empty from sidePanel after while when we close the Booking details and then click on Tick icon.\n    resetSegmentStopPhoneNumber() {\n      this.get('booking.activeBooking.legs').forEach(leg => {\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          const segmentPickPhoneNumber = segment.get('pick.phoneNumbers.firstObject');\n          const segmentDropPhoneNumber = segment.get('drop.phoneNumbers.firstObject');\n\n          if (segmentPickPhoneNumber) {\n            this.createPhoneRecordAfterResetPhoneNumber(segmentPickPhoneNumber, segment, 'pick');\n          }\n\n          if (segmentDropPhoneNumber) {\n            this.createPhoneRecordAfterResetPhoneNumber(segmentDropPhoneNumber, segment, 'drop');\n          }\n        });\n      });\n    },\n\n    /**\n     * for checking every trip has scheduled status and schedule type is primary and every trip is assigned with same route\n     * @param {*} bookingId\n     * @returns boolean\n     */\n    async checkEveryTripAreAssignedWithSameRoute(bookingId) {\n      const tripQuery = `in(booking,('${bookingId}'))&include=schedule,route`;\n      const trips = await this.get('store').query('trip', {\n        filter: tripQuery\n      });\n      const filteredTrips = trips.length ? trips.toArray().sortBy('id').reverse().uniqBy('segment.id') : [];\n\n      if (filteredTrips.length) {\n        const isEveryTripIsInPrimarySchedule = filteredTrips.every(trip => trip.get('schedule.type') === PRIMARY_SCHEDULE_TYPE);\n        const isEveryTripsHasRoute = filteredTrips.every(trip => trip.get('route.id'));\n        const isEveryTripIsScheduled = filteredTrips.every(trip => trip.get('status') === _trip.TRIP_SCHEDULED_STATUS.toLowerCase());\n\n        if (isEveryTripIsInPrimarySchedule && isEveryTripsHasRoute && isEveryTripIsScheduled) {\n          const routeId = filteredTrips.get('firstObject.route.id');\n          const isEveryTripHasSameRoute = filteredTrips.every(trip => trip.get('route.id') === routeId);\n          return isEveryTripHasSameRoute;\n        }\n      }\n\n      return true;\n    },\n\n    showTripsAreAssingnedWithDiffRoutesWarning() {\n      this.get('tooltip').pushConfirmation({\n        title: 'Create Booking',\n        tip: 'Not all trips in the group booking could be scheduled to the same route.',\n        primaryActionText: 'OK',\n        primaryAction: this.closeBookingAcceptScreen,\n        hasOverlay: true,\n        closeAction: this.closeBookingAcceptScreen\n      });\n    },\n\n    //closing the booking accept screen\n    closeBookingAcceptScreen() {\n      const isEditMode = this.get('isEditMode');\n      this.editModal.close();\n      this.get('onClose')();\n\n      if (isEditMode) {\n        this.get('notifications').success('Booking updated Successfully');\n      } else {\n        const currentBookings = this.get('booking.currentBookings').toArray().sortBy('id');\n        const currentBooking = currentBookings.get('lastObject');\n        const currentBookingStatus = Ember.isPresent(currentBooking) ? currentBooking.get('status') : '';\n\n        if (currentBookingStatus === 'failed') {\n          this.get('notifications').warning('Booking saved, but some or all trips could not be scheduled. Please review and re-submit the booking');\n        } else {\n          this.get('notifications').success('New Booking successfully saved!');\n        }\n      }\n    },\n\n    actions: {\n      onClickOverlay() {//this.get('onClose')();\n      },\n\n      async closeDialog() {\n        const isEditMode = this.get('isEditMode');\n        this.resetSegmentStopPhoneNumber();\n        const bookingService = this.get('booking');\n        const bookingId = bookingService.get('tempBookingInfo.tempBookingId');\n\n        if (bookingService.get('tempBookingInfo.tempBookingId')) {\n          try {\n            const asynOperationInfoArray = await bookingService.deleteTemporaryBooking('x', isEditMode);\n            this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n            for (const tripCancelInfo of asynOperationInfoArray) {\n              if (tripCancelInfo) {\n                await this.get('booking').callScheduleAsyncOperation(tripCancelInfo);\n              }\n            }\n\n            await bookingService.deleteTrips(bookingId); // Reg - NYAAR-18800\n\n            this.get('booking').createAndSetServiceNeedInLeg();\n          } catch (err) {\n            const errorMsg = err.isLoadTripError ? err.message : 'Failed to Delete Booking/Trips';\n            this.get('notifications').warning(errorMsg);\n          } finally {\n            this.get('onClose')(true);\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n          }\n        }\n      },\n\n      async onRefuseClick() {\n        this.checkAndSetStatus(REFUSED_STATUS);\n        this.saveBooking(REFUSED_STATUS); //roll back address record(NYAAR-18629)\n\n        this.resetModelAttribute();\n      },\n\n      async onAcceptClick() {\n        // AIQ-4421 booking creation activity log now moved to here instead of booking service.\n        const activityLogAdapter = this.store.adapterFor('activity-log');\n        const bookingId = this.get('booking.tempBookingInfo.tempBookingId');\n        const bookingStatus = this.get('booking.tempBookingInfo.tempBookingRecord.status');\n        const eventLog = {\n          type: 'event',\n          attributes: {\n            bookingId: bookingId,\n            source: 'webApp',\n            eventType: 'BE',\n            actionType: 'genericLogging',\n            receivedAt: (0, _moment.default)().toDate(),\n            userId: this.session.data.authenticated.userId,\n            eventLog: {\n              genericLogging: [{\n                activity: 'Booking Added',\n                loggingType: 'user',\n                details: `Created booking ${bookingId}.`\n              }, {\n                activity: 'Created',\n                loggingType: 'booking',\n                details: `Booking created with status of ${bookingStatus}.`\n              }]\n            }\n          }\n        };\n        await activityLogAdapter.createEventActivity(eventLog); // *** keeping this for reference since the AIQ-3956 re-factor\n        //roll back address record(NYAAR-18629)\n        // this.resetModelAttribute();\n        // this.get('workspace').set('isGlobalSpinnerVisible', true);\n        // const bookingService = this.get('booking');\n        // const isEditMode = this.get('isEditMode');\n        // const bookingId = bookingService.get('tempBookingInfo.tempBookingId');\n        // const booking = this.get('store').peekRecord('booking', bookingId);\n        // const isGroupBooking = booking.get('isGroupBooking');\n        // if taxi mode is selected, cancel trip in 'booking' schedule\n        // if (bookingService.isTaxiModeSelected()) {\n        //   try {\n        //     const tripCancelJobs = await bookingService.deleteBooking(bookingId, 'taxi');\n        //     const asynOperationInfoArray =  tripCancelJobs ? tripCancelJobs.tripCancelJobs : [];\n        //     if (asynOperationInfoArray) {\n        //       for (const tripCancelInfo of asynOperationInfoArray) {\n        //         if (tripCancelInfo) {\n        //           await this.get('booking').callScheduleAsyncOperation(tripCancelInfo);\n        //         }\n        //       }\n        //     }\n        //   } catch (err) {\n        //     const errorMsg = err.isLoadTripError ? err.message : 'Failed to Cancel Trips';\n        //     this.get('workspace').set('isGlobalSpinnerVisible', false);\n        //     this.get('notifications').warning(errorMsg);\n        //   }\n        // }\n        // call booking with promise time api if booking has promise time and hasParaTransitOrItpFeederModeSelected\n        // In case of  Service Mode - Paratransit and  ITP  iternary type - 2 means This is a Feeder  itinerary, we should  call bookingWithPromiseTime .\n        // if (bookingService.get('enableNewPromiseTimeApi')) {\n        //   this.checkAndSetStatus('scheduled');\n        //   if (!this.get('isEveryLegHasPromiseTime') && !bookingService.isTaxiModeSelected()) {\n        //     this.checkAndSetStatus();\n        //   }\n        //   await this.acceptBooking();\n        // }\n        // if (isGroupBooking) {\n        //   const currentBookingId = isEditMode ? this.get('booking.activeBooking.id') : bookingId;\n        //   const isEveryTripAreAssignedWithSameRoute = await this.checkEveryTripAreAssignedWithSameRoute(currentBookingId);\n        //   //when all trips are not assigned with same route it will show a popup\n        //   if (!isEveryTripAreAssignedWithSameRoute) {\n        //     this.showTripsAreAssingnedWithDiffRoutesWarning();\n        //     return;\n        //   }\n        // }\n\n        this.closeBookingAcceptScreen();\n      },\n\n      setIsEveryLegHasPromiseTimeProp(value) {\n        this.set('isEveryLegHasPromiseTime', value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3RhP0Owm\",\n    \"block\": \"{\\\"symbols\\\":[\\\"returnTrip\\\",\\\"trip\\\",\\\"index\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"booking-detail-overlay\\\",\\\"booking-detail-container\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-details-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-heading mb-2 font-weight-bold\\\"],[9],[0,\\\"\\\\n      Booking details\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"x-button mr-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNotSameDayBooking\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"close\\\"],[11,\\\"aria-label\\\",\\\"Close\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeDialog\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\"×\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"question-image\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"tripDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"bd-body container-fluid \\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 col-sm-12 g-side-drawer-panel\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[]],0],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tr-header mb-2 mt-2\\\"],[9],[0,\\\"Trip Details\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tr-header mb-2 mt-2\\\"],[9],[0,\\\"Leg \\\"],[1,[22,3,[]],false],[0,\\\" Trip Details\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/booking-details/trip-request-details\\\",null,[[\\\"tripBooking\\\",\\\"legIndex\\\",\\\"riderRecord\\\",\\\"travelModeMapper\\\",\\\"allowedServiceModes\\\",\\\"onSelectedTravelModeChange\\\",\\\"legTravelModeMap\\\",\\\"setIsEveryLegHasPromiseTimeProp\\\"],[[22,2,[]],[22,3,[]],[23,[\\\"riderRecord\\\"]],[23,[\\\"travelModeMapper\\\"]],[23,[\\\"allowedServiceModes\\\"]],[23,[\\\"onSelectedTravelModeChange\\\"]],[23,[\\\"legTravelModeMap\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setIsEveryLegHasPromiseTimeProp\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"returnTripDetailsVisible\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"returnTripDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"bd-body container-fluid \\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 col-sm-12 g-side-drawer-panel\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tr-header mb-2 mt-2\\\"],[9],[0,\\\"Return Trip Details\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/booking-details/trip-request-details\\\",null,[[\\\"tripBooking\\\",\\\"legIndex\\\",\\\"riderRecord\\\",\\\"travelModeMapper\\\",\\\"allowedServiceModes\\\",\\\"onSelectedTravelModeChange\\\",\\\"legTravelModeMap\\\",\\\"setIsEveryLegHasPromiseTimeProp\\\"],[[22,1,[]],[23,[\\\"returnTripIndex\\\"]],[23,[\\\"riderRecord\\\"]],[23,[\\\"travelModeMapper\\\"]],[23,[\\\"allowedServiceModes\\\"]],[23,[\\\"onSelectedTravelModeChange\\\"]],[23,[\\\"legTravelModeMap\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setIsEveryLegHasPromiseTimeProp\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"book-trip pl-5\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"isEveryLegHasPromiseTime\\\"]],[23,[\\\"isNotSameDayBooking\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-light elm v-btn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRefuseClick\\\"],null]],[9],[0,\\\"Refuse\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-light elm v-btn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAcceptClick\\\"],null]],[9],[1,[27,\\\"if\\\",[[23,[\\\"isNotSameDayBooking\\\"]],\\\"Accept\\\",\\\"OK\\\"],null],false],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/columnConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    columns: [{\n      valuePath: 'icon',\n      width: '55px',\n      sortable: false,\n      cellComponent: 'table/cells/icon-cell',\n      resizable: true\n    }, {\n      label: 'Action',\n      valuePath: 'action',\n      width: '100px',\n      sortable: false,\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'From',\n      valuePath: 'from',\n      width: '150px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'Start Time',\n      valuePath: 'startTime',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'To',\n      valuePath: 'to',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'Arrive Time',\n      valuePath: 'arriveTime',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/component\", [\"exports\", \"ember-light-table\", \"adept-iq/config/itinerary-action\", \"adept-iq/config/icon-paths\", \"moment\", \"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/columnConfig\", \"adept-iq/models/segment\"], function (_exports, _emberLightTable, _itineraryAction, _iconPaths, _moment, _columnConfig, _segment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ActionIconMap = {\n    'taxi': _iconPaths.default.requestdetails.taxiicon,\n    'paratransit': _iconPaths.default.requestdetails.paratransiticon\n  };\n  const BUS_TYPE = 'bus';\n\n  var _default = Ember.Component.extend({\n    classNames: ['trip-alternative'],\n    booking: Ember.inject.service(),\n    canShowHeader: true,\n    isSearchEnabled: false,\n    isSearchAllowed: true,\n    // set for demo\n    isFilterAllowed: true,\n    // set for demo\n    isCellEditAllowed: false,\n    model: Ember.computed('selectedTravelMode', function () {\n      const selectedTravelMode = this.get('selectedTravelMode');\n\n      if (selectedTravelMode === 'itp') {\n        return this.getItpSegments();\n      } // taxi or paratransist\n\n\n      const actionIcon = ActionIconMap[selectedTravelMode];\n      const firstSegment = this.get('tripSegments.firstObject');\n      const lastSegment = this.get('tripSegments.lastObject');\n      const arrivalTime = this.get('booking').getArrivalTime(this.get('legIndex'));\n      const formattedArrivalTime = arrivalTime ? (0, _moment.default)(arrivalTime).format('hh:mm A') : '';\n      const promiseTime = this.getPromiseTime();\n      const segment = {\n        'icon': actionIcon,\n        'action': selectedTravelMode,\n        'from': firstSegment.tripRequestPickAddress,\n        'startTime': promiseTime,\n        'to': lastSegment.tripRequestDropAddress,\n        'arriveTime': formattedArrivalTime,\n        'promiseTime': promiseTime\n      };\n      return [segment];\n    }),\n    table: Ember.computed('model', function () {\n      return new _emberLightTable.default(_columnConfig.default.columns, this.get('model'), {\n        enableSync: false\n      });\n    }),\n    onTravelModeChange: Ember.observer('selectedTravelMode', function () {\n      if (!this.get('selectedTravelMode')) {\n        return;\n      }\n\n      const segments = this.get('model');\n      this.get('table').setRows(segments);\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      Ember.$('.table-base-cell').each(function () {\n        const cellContent = Ember.$(this).text();\n\n        if (cellContent.indexOf('Unable to generate Promise Time') > -1) {\n          Ember.$(this).css({\n            'color': 'red'\n          });\n        }\n      });\n    },\n\n    getItpSegments() {\n      const itineraryLastIndex = this.get('itinerarySegments').length - 1;\n      const firstSegment = this.get('tripSegments.firstObject');\n      const lastSegment = this.get('tripSegments.lastObject');\n      const promiseTime = this.getPromiseTime();\n      return this.get('itinerarySegments').map((itinerarySegment, index) => {\n        const startAddress = index === 0 ? firstSegment.tripRequestPickAddress : itinerarySegment.start.address || itinerarySegment.start.description;\n        const endAddress = index === itineraryLastIndex ? lastSegment.tripRequestDropAddress : itinerarySegment.end.address || itinerarySegment.end.description;\n        const {\n          action,\n          icon\n        } = _itineraryAction.ITINERARY_ACTION_MAP[itinerarySegment.action];\n        const description = itinerarySegment.description;\n        return {\n          'icon': icon,\n          'action': action === BUS_TYPE ? `${action} ${description}` : action,\n          'from': startAddress,\n          'startTime': (0, _moment.default)(itinerarySegment.start.time).format('hh:mm A'),\n          'to': endAddress,\n          'arriveTime': action === _segment.PARA_TRANSIT_TYPE ? '' : (0, _moment.default)(itinerarySegment.end.time).format('hh:mm A'),\n          'promiseTime': action === _segment.PARA_TRANSIT_TYPE ? promiseTime : ''\n        };\n      });\n    },\n\n    getPromiseTime() {\n      const requestTime = this.get('tripBooking.requestTime');\n\n      if (!this.get('booking.enableNewPromiseTimeApi')) {\n        return requestTime && (0, _moment.default)(requestTime).format('hh:mm A');\n      }\n\n      const legIndex = this.get('legIndex');\n\n      if (!this.get('booking').hasPromiseTime(legIndex) && this.get('booking').hasParaTransitOrItpFeederModeSelected(legIndex)) {\n        return '';\n      }\n\n      if (!this.get('booking').hasParaTransitOrItpFeederModeSelected(legIndex)) {\n        return '';\n      }\n\n      if (!this.get('booking').canGetPromiseTime(legIndex)) {\n        return '';\n      }\n\n      const resolvedPromiseTime = this.get('booking').getPromiseTime(legIndex, this.get('tripBooking'));\n\n      if (!resolvedPromiseTime) {\n        return '';\n      }\n\n      return (0, _moment.default)(resolvedPromiseTime).format('hh:mm A');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Jwh185YP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"column-widget-title bd-table-title data-test-column-title\\\"],[9],[0,\\\"\\\\n        Trip Alternative\\\\n      \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls bd-table-controls\\\"],[9],[0,\\\"\\\\n\\\\t\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-alternative-body table\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"270px\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template.hbs' @ L15:C6) \\\"],null]],[[\\\"resizeOnDrag\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template.hbs' @ L19:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template.hbs' @ L21:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          Loading...\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template.hbs' @ L27:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          No details found.\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-alternative/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\", \"ember-light-table\", \"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/riders-trips-table/config\", \"lodash\", \"adept-iq/models/segment\"], function (_exports, _moment, _environment, _emberLightTable, _config, _lodash, _segment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PARA_TRANSIT_MODE = 'paratransit';\n  const ITP_TRANSIT_MODE = 'itp';\n  const BROKER_TRANSIT_MODE = 'broker';\n  const NO_PROMISE_TIME_GENERATED = 'Unable to generate Promise Time';\n\n  var _default = Ember.Component.extend({\n    classNames: ['trip-details'],\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    tripDate: null,\n    requestTime: null,\n    pickAddress: null,\n    dropAddress: null,\n    isCallBackBookingModeType: false,\n    isGroupBooking: false,\n    showPromiseTime: Ember.computed('isCallBackBookingModeType', 'currentTrip.booking.isSameDayBooking', function () {\n      return !this.get('isCallBackBookingModeType');\n    }),\n    promiseTime: Ember.computed('tripBooking.requestTime', 'selectedtravelMode', 'currentTrip.promiseTime', function () {\n      const requestTime = this.get('tripBooking.requestTime');\n      const travelMode = this.get('selectedtravelMode.displayName');\n      const promiseTime = this.get('currentTrip.promiseTime'); //NYAAR-20351-If the service mode is 'taxi', then the trip has no assigned route and no promise time for the trip\n\n      if (travelMode === _segment.TAXI_TYPE) {\n        return '';\n      }\n\n      if (this.get('currentTrip.booking.isSameDayBooking')) {\n        if (!this.get('currentTrip.promiseTime')) {\n          return '';\n        }\n\n        return (0, _moment.default)(promiseTime).format(_environment.default.dateTimeFormat.timeMoment);\n      }\n\n      if (!this.get('booking.enableNewPromiseTimeApi')) {\n        return requestTime && (0, _moment.default)(requestTime).format(_environment.default.dateTimeFormat.timeMoment);\n      }\n\n      const legIndex = this.get('legIndex');\n\n      if (!this.get('booking').hasPromiseTime(legIndex) && this.get('booking').hasParaTransitOrItpFeederModeSelected(legIndex)) {\n        return NO_PROMISE_TIME_GENERATED;\n      }\n\n      if (!this.get('booking').hasParaTransitOrItpFeederModeSelected(legIndex)) {\n        return '';\n      }\n\n      if (!this.get('booking').canGetPromiseTime(legIndex)) {\n        return NO_PROMISE_TIME_GENERATED;\n      }\n\n      const resolvedPromiseTime = this.get('booking').getPromiseTime(legIndex, this.get('tripBooking'));\n\n      if (!resolvedPromiseTime) {\n        return NO_PROMISE_TIME_GENERATED;\n      }\n\n      return (0, _moment.default)(resolvedPromiseTime).format(_environment.default.dateTimeFormat.timeMoment);\n    }),\n    promisePickupWindow: Ember.computed('promiseTime', function () {\n      const promiseTime = (0, _moment.default)(this.get('promiseTime'), _environment.default.dateTimeFormat.timeMoment);\n\n      if (!promiseTime.isValid()) {\n        return {\n          pickupWindowStart: '',\n          pickupWindowEnd: ''\n        };\n      }\n\n      const tempBookingRecord = this.get('booking.tempBookingInfo.tempBookingRecord');\n      const legIndex = this.get('legIndex');\n      const leg = tempBookingRecord.get('legs').toArray()[legIndex];\n      const serviceWindow = leg.get('serviceWindow');\n      const pickupWindowStart = promiseTime.clone().subtract(serviceWindow.get('promiseWindowStart'), 'minutes');\n      const pickupWindowEnd = promiseTime.clone().add(serviceWindow.get('promiseWindowEnd'), 'minutes');\n      return {\n        pickupWindowStart: pickupWindowStart.format(_environment.default.dateTimeFormat.timeMoment),\n        pickupWindowEnd: pickupWindowEnd.format(_environment.default.dateTimeFormat.timeMoment)\n      };\n    }),\n    promiseTimeFailureReason: Ember.computed('legIndex', function () {\n      const legIndex = this.get('legIndex');\n      const allFailureReason = this.get('booking').promiseTimeFailureReason('ALL');\n      const failureReason = this.get('booking').promiseTimeFailureReason(legIndex);\n      const isSameDayBooking = this.get('currentTrip.booking.isSameDayBooking');\n\n      if (isSameDayBooking) {\n        return;\n      }\n\n      return allFailureReason ? allFailureReason : failureReason;\n    }),\n    // NYAAR-13400 added red-text paratransit = \"Unable to generate Promise Time\"\n    // Incase promise time is generated  => For 'taxi' is empty  and   promise time will be displayed for paratransit;\n    // Incase promise time is  not generated => For 'taxi' is empty and   promise time  'Unable to generate promise time' red-color-text will be displayed;\n    isNotPromiseTime: Ember.computed('promiseTime', 'selectedtravelMode', function () {\n      const legIndex = this.get('legIndex');\n      const isSameDayBooking = this.get('currentTrip.booking.isSameDayBooking');\n\n      if (this.get('promiseTime') === NO_PROMISE_TIME_GENERATED) {\n        return true;\n      }\n\n      if (!isSameDayBooking && !this.get('booking').hasPromiseTime(legIndex) && this.get('booking').hasParaTransitOrItpFeederModeSelected(legIndex)) {\n        return true;\n      }\n\n      return false;\n    }),\n    currentTrip: Ember.computed('legIndex', 'booking.tempBookingInfo.tempBookingRecord.trips', function () {\n      const legIndex = this.get('legIndex');\n      const trips = this.get('booking.tempBookingInfo.tempBookingRecord.trips');\n      const currentTrip = Ember.isPresent(trips) ? trips.objectAt(legIndex) : null;\n\n      if (Ember.isPresent(currentTrip)) {\n        return currentTrip;\n      }\n\n      return null;\n    }),\n    disableServiceModeDropDown: Ember.computed('booking.itpInfo.hasOverrideITP', 'selectedtravelMode', function () {\n      const hasOverrideITP = this.get('booking.itpInfo.hasOverrideITP');\n      const selectedtravelMode = this.get('selectedtravelMode.displayName'); // if selected travel mode is itp and user doesn't have permission to override itp , disable service mode  dropdown\n\n      if (selectedtravelMode.toLowerCase() === 'itp' && hasOverrideITP === false) {\n        return true;\n      } // always disabled since AIQ-3956\n\n\n      return true;\n    }),\n    travelModes: null,\n    selectedtravelMode: null,\n    riderRecord: null,\n    allowedServiceModes: null,\n\n    init() {\n      this._super(...arguments); // initializing recipient table\n\n\n      const isGroupBooking = this.get('booking.noOfSelectedRiders') > 1;\n\n      if (isGroupBooking) {\n        const loadRidersTripsRecord = this.loadRidersTrips();\n        const ridersTripsTable = new _emberLightTable.default(_config.ridersTripsColumns, loadRidersTripsRecord);\n        this.set('ridersTripsTable', ridersTripsTable);\n      }\n\n      this.set('isGroupBooking', isGroupBooking);\n      this.setTravelModeOptions();\n      this.setDefaultravelMode();\n      this.set('isCallBackBookingModeType', this.get('booking').isCallBackBookingModeType());\n    },\n\n    didRender() {\n      this._super(...arguments);\n\n      const isNotPromiseTime = this.get('isNotPromiseTime');\n      this.set('booking.isNotPromiseTime', isNotPromiseTime);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.checkPromiseTime();\n    },\n\n    /**\n     * NYAAR-19074: Checking if any leg has no promise time generated\n     */\n    checkPromiseTime() {\n      const promiseTime = this.get('promiseTime');\n      this.set('tripBooking.promiseTime', promiseTime);\n      this.setTripDetails();\n      const filteredTripsBasedOnPromiseTime = this.filterTripDetails();\n      this.get('setIsEveryLegHasPromiseTimeProp')(false); //NYAAR-19074: Setting isEveryLegHasPromiseTime true only if all legs have promise time generated\n\n      if (!filteredTripsBasedOnPromiseTime) {\n        this.get('setIsEveryLegHasPromiseTimeProp')(true);\n      }\n    },\n\n    /**\n    * Setting trip details for every leg in trip-request-details\n    */\n    setTripDetails() {\n      const tripDetails = this.get('booking.tripDetails');\n      const tripBooking = this.get('tripBooking');\n      tripDetails.forEach(tripDetail => {\n        if ((0, _moment.default)(tripDetail.requestTime).isSame(tripBooking.requestTime)) {\n          tripDetails.removeObject(tripDetail);\n        }\n      });\n      tripDetails.pushObject(tripBooking);\n    },\n\n    /**\n     * Filtering trip details based on no promise generated\n     * @returns number(filteredTripDetails length)\n     */\n    filterTripDetails() {\n      const tripDetails = this.get('booking.tripDetails');\n      const filteredTripsBasedOnPromiseTime = tripDetails.filter(trip => {\n        return trip.promiseTime === NO_PROMISE_TIME_GENERATED;\n      });\n      return filteredTripsBasedOnPromiseTime.length;\n    },\n\n    setTravelModeOptions() {\n      const allowedServiceModes = this.getAllowedServiceModesForDropDown();\n      const configTravelModes = this.store.peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-System_Configuration-travel_modes';\n      });\n      this.setAllTravelModeDisplayNameToLower(configTravelModes);\n      const travelModeOptions = configTravelModes.filter(tm => {\n        return allowedServiceModes.includes(tm.get('name').toLowerCase());\n      });\n      this.set('travelModes', travelModeOptions);\n    },\n\n    setAllTravelModeDisplayNameToLower(travelModes) {\n      travelModes.forEach(tm => {\n        const displayName = tm.get('displayName').toLowerCase();\n        tm.set('displayName', displayName);\n      });\n    },\n\n    /**\n     * checking if the ITP is available on the tripdate\n     */\n    isItpAvailable() {\n      const itpBlockoutDates = this.get('systemConfig.findItpBlockoutDates')();\n      const tripDate = this.get('tripBooking.tripDate');\n      const tripBookingDate = (0, _moment.default)(tripDate).format(_environment.default.dateTimeFormat.dateMoment);\n      let isItpBlockList = false;\n      itpBlockoutDates.forEach(blockoutDate => {\n        const fromDate = blockoutDate.firstObject;\n        const toDate = blockoutDate.lastObject; //Setting isItpBlockList true if ITP is booked on ITP blockout dates\n\n        if ((0, _moment.default)(tripBookingDate).isBetween(fromDate, toDate, 'days', '[]')) {\n          isItpBlockList = true;\n        }\n      });\n      return isItpBlockList;\n    },\n\n    /**\n     * this will return list of service mode string example : ['itp', 'paratransit', 'broker', 'taxi']\n     * @returns {*}\n     */\n    getAllowedServiceModesForDropDown() {\n      const travelModes = this.get('travelModeMapper')[this.get('legIndex')]; //NYAAR-18686: removing ITP service mode if selected date comes within ITP Blockoutdate range\n\n      if (travelModes && this.isItpAvailable()) {\n        const filteredTravelmodes = travelModes.filter(serviceMode => serviceMode !== ITP_TRANSIT_MODE);\n        this.get('travelModeMapper')[this.get('legIndex')] = filteredTravelmodes;\n      }\n\n      const riderTravelModes = travelModes || []; // if only itp model is evaluated in eligibility workflow, travel mode list should display only itp\n\n      const isITPModeOnly = riderTravelModes.length === 1 && riderTravelModes.includes(ITP_TRANSIT_MODE);\n\n      if (isITPModeOnly) {\n        return [ITP_TRANSIT_MODE];\n      }\n\n      let allowedServiceModes = this.get('allowedServiceModes') || []; // ride allowedServiceModes doesnt contain para transit, add the para transit in travel mode  drop down\n      // by default, paratransit is allowed\n\n      if (!allowedServiceModes.includes(PARA_TRANSIT_MODE)) {\n        allowedServiceModes.push(PARA_TRANSIT_MODE);\n      } // if itp  travel mode is not eavluated by  eiligibity workflow, remove the itp service mode\n\n\n      if (!riderTravelModes.includes(ITP_TRANSIT_MODE)) {\n        allowedServiceModes = allowedServiceModes.filter(serviceMode => serviceMode !== ITP_TRANSIT_MODE);\n      } // remove broker from  dropdown based on the comment in the story NYAAR-7795\n\n\n      allowedServiceModes = allowedServiceModes.filter(serviceMode => serviceMode !== BROKER_TRANSIT_MODE);\n      const normalizedServiceModes = allowedServiceModes.map(s => s.toLowerCase());\n      return normalizedServiceModes;\n    },\n\n    setDefaultravelMode() {\n      const travelModes = this.get('travelModeMapper')[this.get('legIndex')];\n      const riderTravelModes = travelModes || [];\n      const defaultTravelMode = riderTravelModes[0] || PARA_TRANSIT_MODE; // get previous travel-mode-map for edit-booking\n\n      const previousTravelModeMap = this.get('legTravelModeMap');\n      const previousTravelMode = previousTravelModeMap[this.get('legIndex')];\n      const prevTravelModeConfig = this.get('travelModes').find(travelModelConfig => {\n        return travelModelConfig.name.toLowerCase() === previousTravelMode;\n      });\n      const selectedTravelModeConfig = prevTravelModeConfig || this.get('travelModes').find(travelModelConfig => {\n        return travelModelConfig.name.toLowerCase() === defaultTravelMode;\n      });\n      this.set('selectedtravelMode', selectedTravelModeConfig);\n      const onSelectedTravelModeChange = this.get('onSelectedTravelModeChange');\n\n      if (onSelectedTravelModeChange) {\n        onSelectedTravelModeChange(this.get('legIndex'), selectedTravelModeConfig);\n      }\n    },\n\n    loadRidersTrips() {\n      const legIndex = parseInt(this.get('legIndex'), 10);\n      const legs = this.get('booking.tempBookingInfo.tempBookingRecord.legs').toArray();\n      const trips = this.get('booking.tempBookingInfo.tempBookingRecord.trips').toArray();\n      const segmentToTripMap = new Map(trips.map(trip => [trip.segment.get('id'), trip])); // Step 1: group all legs by requestTime\n\n      const groupedByTime = _lodash.default.groupBy(legs, leg => leg.get('requestTime')); // Step 2: sort requestTime values\n\n\n      const sortedRequestTimes = _lodash.default.sortBy(Object.keys(groupedByTime), time => new Date(time)); // Step 3: get requestTime for current legIndex\n\n\n      const targetRequestTime = sortedRequestTimes[legIndex];\n      if (!targetRequestTime) return []; // Step 4: extract that group\n\n      const group = groupedByTime[targetRequestTime]; // Step 5: return the merged info for just this legIndex\n\n      return group.map(leg => {\n        const segmentId = leg.segment.get('id');\n        const trip = segmentToTripMap.get(segmentId);\n        const serviceWindow = leg.get('serviceWindow');\n        const promiseTime = trip?.get('promiseTime') ? (0, _moment.default)(trip.get('promiseTime'), _environment.default.dateTimeFormat.timeMoment) : null;\n        let pickupWindowStart, pickupWindowEnd;\n\n        if (promiseTime) {\n          pickupWindowStart = promiseTime.clone().subtract(serviceWindow.get('promiseWindowStart'), 'minutes').local().format('HH:mm');\n          pickupWindowEnd = promiseTime.clone().add(serviceWindow.get('promiseWindowEnd'), 'minutes').local().format('HH:mm');\n        }\n\n        return {\n          riderId: leg.rider.get('id'),\n          fullName: leg.rider.get('fullName'),\n          tripId: trip?.get('id') ?? null,\n          tripStatus: trip?.get('status') ?? 'Failed',\n          tripPromiseTime: promiseTime ? promiseTime.local().format('HH:mm') : null,\n          routeName: trip?.get('route.name') || null,\n          pickupWindow: promiseTime ? `${pickupWindowStart} - ${pickupWindowEnd}` : null\n        };\n      });\n    },\n\n    actions: {\n      onTravelModeChange(travelMode) {\n        this.set('selectedtravelMode', travelMode);\n        const onSelectedTravelModeChange = this.get('onSelectedTravelModeChange');\n\n        if (onSelectedTravelModeChange) {\n          onSelectedTravelModeChange(this.get('legIndex'), travelMode);\n        }\n\n        this.checkPromiseTime();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/riders-trips-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.ridersTripsColumns = void 0;\n  const ridersTripsColumns = [{\n    label: 'Passenger Name',\n    sortType: 'text',\n    valuePath: 'fullName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    width: '150px'\n  }, {\n    label: 'Trip Status',\n    sortType: 'text',\n    valuePath: 'tripStatus',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    width: '90px'\n  }, {\n    label: 'PromiseTime',\n    sortType: 'time',\n    valuePath: 'tripPromiseTime',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    width: '150px'\n  }, {\n    label: 'Trip ID',\n    sortType: 'text',\n    valuePath: 'tripId',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    width: '90px'\n  }, {\n    label: 'Route',\n    sortType: 'text',\n    valuePath: 'routeName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    width: '90px'\n  }, {\n    label: 'Pickup Window',\n    sortType: 'text',\n    valuePath: 'pickupWindow',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    width: '150px'\n  }];\n  _exports.ridersTripsColumns = ridersTripsColumns;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"K5jVorEd\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form left-section compact\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Trip Date\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"tripDate\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Request Time\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"formattedRequestTime\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Pick Address\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pickAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pickAddress\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\",\\\"@tooltipClass\\\"],[\\\"bottom\\\",\\\"booking-address-tooltip\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[1,[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pickAddress\\\"]],false],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Drop Address\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"dropAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"dropAddress\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\",\\\"@tooltipClass\\\"],[\\\"bottom\\\",\\\"booking-address-tooltip\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[1,[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"dropAddress\\\"]],false],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Provider\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"currentTrip\\\",\\\"currentProviderName\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"isGroupBooking\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form right-section compact\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Promise Time\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[23,[\\\"isNotPromiseTime\\\"]],\\\"red-text\\\"],null]]]],[12,\\\"value\\\",[27,\\\"if\\\",[[23,[\\\"showPromiseTime\\\"]],[23,[\\\"promiseTime\\\"]],\\\"\\\"],null]],[9],[10],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"promiseTimeFailureReason\\\"]],[27,\\\"eq\\\",[[23,[\\\"isCallBackBookingModeType\\\"]],false],null]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\"],[\\\"bottom\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[1,[21,\\\"promiseTimeFailureReason\\\"],false],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Pickup Window\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 booking-details-pickup-window\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pickup-window-from-field\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"if\\\",[[23,[\\\"showPromiseTime\\\"]],[23,[\\\"promisePickupWindow\\\",\\\"pickupWindowStart\\\"]],\\\"\\\"],null]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"pickup-window-to-text\\\"],[9],[0,\\\"to\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pickup-window-to-field\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"if\\\",[[23,[\\\"showPromiseTime\\\"]],[23,[\\\"promisePickupWindow\\\",\\\"pickupWindowEnd\\\"]],\\\"\\\"],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Trip ID\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"currentTrip\\\",\\\"id\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Trip Status\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"currentTrip\\\",\\\"computedStatus\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Route Name\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"currentTrip\\\",\\\"computedRouteName\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isGroupBooking\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"riders-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"ridersTripsTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/template.hbs' @ L96:C6) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/template.hbs' @ L100:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"ridersTripsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/template.hbs' @ L102:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"No trips created.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/booking-details/trip-request-details/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/booking-map/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/map-widget/component\", \"adept-iq/mixins/ada-boundary-layer\", \"adept-iq/utils/geolib\"], function (_exports, _component, _adaBoundaryLayer, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-unused-vars */\n  const pintPointIcon = {\n    icon: window.L.icon({\n      iconUrl: '/map-icons/icon-pinpoint.svg',\n      iconSize: [48, 48],\n      iconAnchor: [24, 48]\n    }),\n    keyboard: false,\n    interactive: false\n  };\n  const arrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 16,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillColor: 'black',\n          fillOpacity: 1,\n          color: 'black',\n          opacity: 1\n        }\n      })\n    }]\n  };\n  const thickArrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 16,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillOpacity: 0,\n          opacity: 0\n        }\n      })\n    }]\n  };\n  const polyAndDecKeyCoordinates = [{\n    path: '_parts',\n    x1: 'x',\n    y1: 'y'\n  }, {\n    path: '_paths',\n    x1: 'lat',\n    y1: 'lng'\n  }, {\n    path: '_parts',\n    x1: 'x',\n    y1: 'y'\n  }, {\n    path: '_paths',\n    x1: 'lat',\n    y1: 'lng'\n  }];\n\n  var _default = _component.default.extend(Ember.Evented, _adaBoundaryLayer.default, {\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    defaultPickMarker: null,\n    zoom: 12,\n    layerGroup: null,\n    activeBookingSegments: null,\n    allActivePlaces: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        layerGroup: new window.L.LayerGroup()\n      });\n    },\n\n    didInsertElement() {\n      const map = this.get('map');\n      const center = map.get('center');\n\n      this._super(...arguments);\n\n      this.get('map.native').setView({\n        lat: center.lat,\n        lng: center.lon\n      }, 12);\n      this.activeGeocode();\n      this.onChangeActiveAddress();\n      this.onChangeActiveLegsInBooking();\n      const editmodelwidth = Ember.$('.edit-widget-modal').width();\n      Ember.$('.edit-widget-modal').width('25%');\n      Ember.$('.booking-map-container').css({\n        'width': 'calc(97% - ' + editmodelwidth + 'px)'\n      }).css({\n        'height': 'calc(100% - 14%)',\n        'left': editmodelwidth + 'px)'\n      });\n      this.set('booking.bookingMap', this.get('map'));\n    },\n\n    activeGeocode: Ember.observer('booking.activeDragPlace', function () {\n      const activeDragPlace = this.get('booking.activeDragPlace');\n      const map = this.get('map');\n      const addressSelectType = this.get('booking.addressSelectType');\n\n      if (!activeDragPlace) {\n        map.native.off('click');\n        return;\n      }\n\n      const bookingService = this.get('booking');\n      Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').addClass('custom-cursor');\n      map.native.on('click', async event => {\n        try {\n          const activeLeg = this.get('booking.activeLeg');\n          const bookingAddress = await bookingService.fetchAddressForLatLng(event.latlng);\n          const isReturnTrip = this.get('booking.isReturnTrip');\n          const legType = isReturnTrip ? 'Return' : 'Leg';\n\n          if (!bookingAddress) {\n            this.booking.showErrorMessage('Location must be within the agency service boundary.');\n            this.drawMarkersAndPolylines();\n            return;\n          }\n\n          const beNomadAddress = bookingAddress.address.beNomadAddress;\n          const latlng = event.latlng;\n          const geoNode = await this.booking.getAddressGeoNode(latlng.lat, latlng.lng, beNomadAddress, addressSelectType);\n\n          if (!geoNode || Ember.isEmpty(geoNode.zone.zoneName) || geoNode && geoNode.zone.zoneName <= '0') {\n            this.booking.showErrorMessage('Unable to use address because it falls outside the service area.');\n            return;\n          } // NYAAR-18212: Emptying the address and location for activeDragPlace as it reflects in other legs (which has same placeId)\n\n\n          this.get('booking').setEmptyAddressLocation(activeDragPlace);\n          const activeDragAddress = activeDragPlace.get('address');\n          const zoneName = this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n          activeDragAddress.set('zName', zoneName.get('displayName'));\n          activeDragAddress.set('zoneName', zoneName);\n\n          if (!activeDragAddress.get('zoneName.name')) {\n            this.booking.showErrorMessage('Unable to use address because it falls outside the service area.');\n            return;\n          }\n\n          const locationRecord = this.store.createRecord('location', {\n            lat: parseFloat(latlng.lat.toFixed(5)),\n            lng: parseFloat(latlng.lng.toFixed(5))\n          });\n          locationRecord.set('geoNode', geoNode.geonode);\n          bookingService.updateAddress(activeDragAddress, bookingAddress, geoNode.zone);\n          activeDragPlace.set('location', locationRecord);\n\n          if (Ember.isPresent(activeLeg)) {\n            this.validateBlockoutAddress(locationRecord, activeLeg, activeDragPlace);\n          }\n        } catch (error) {\n          // eslint-disable-next-line no-console\n          console.log(error);\n        } finally {\n          Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').removeClass('custom-cursor');\n          bookingService.setActiveDragPlace(null);\n          map.native.off('click');\n        }\n      });\n    }),\n\n    doDrawMarkersAndPolylines() {\n      const booking = this.get('booking');\n      const skipSetView = booking.get('skipSetView');\n      this.drawMarkersAndPolylines(skipSetView);\n      booking.set('skipSetView', false);\n    },\n\n    onChangeActiveLegsInBooking: Ember.observer('booking.activeLegsInBooking', 'booking.activeDragPlace', function () {\n      Ember.run.debounce(this, this.doDrawMarkersAndPolylines, 300);\n    }),\n    onChangeActiveAddress: Ember.observer('booking.activeAddress', function () {\n      this.drawMarkersAndPolylines();\n    }),\n    onMarkerPinRemove: Ember.observer('booking.setMarkerPinOff', function () {\n      Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').removeClass('custom-cursor');\n    }),\n\n    drawMarkersAndPolylines() {\n      let skipSetView = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!Ember.isPresent(this.get('map'))) {\n        return;\n      }\n\n      this.get('layerGroup').clearLayers();\n      const legsInBooking = this.booking.get('activeLegsInBooking') ? this.booking.get('activeLegsInBooking').toArray() : [];\n      const allSegments = [];\n      const latLngs = [];\n      legsInBooking.forEach(leg => {\n        const segments = leg.get('segments').toArray();\n        const validSegments = segments.filter(segment => {\n          return segment.get('pick.place.location.lat') && segment.get('drop.place.location.lat');\n        });\n        allSegments.push(...validSegments); //NYAAR-18714: while editing the itp booking, more than one segments are present and so map adds pin-points to all segments\n\n        if (segments.length > 1 && this.get('isEditMode')) {\n          const picksegment = segments.get('firstObject.pick.place.location');\n          const dropsegment = segments.get('lastObject.drop.place.location');\n          const legMarkers = [picksegment, dropsegment];\n          const validMarkers = legMarkers.filter(marker => {\n            return marker.get('lat') && marker.get('lng');\n          });\n          validMarkers.forEach(marker => {\n            latLngs.push([marker.get('lat'), marker.get('lng')]);\n            this.drawMarker(marker, skipSetView);\n          });\n          this.drawPolyline(segments.get('firstObject.pick'), segments.get('lastObject.drop'));\n        } else {\n          segments.forEach(segment => {\n            const legMarkers = [segment.get('pick.place.location'), segment.get('drop.place.location')];\n            const validMarkers = legMarkers.filter(marker => {\n              return marker.get('lat') && marker.get('lng');\n            });\n            validMarkers.forEach(marker => {\n              latLngs.push([marker.get('lat'), marker.get('lng')]);\n              this.drawMarker(marker, skipSetView);\n            });\n          });\n          this.drawPloylinePath(allSegments);\n\n          if (!skipSetView) {\n            Ember.run.later(this, () => {\n              this.boundLatLng(latLngs);\n            }, 500);\n          }\n        }\n      });\n    },\n\n    boundLatLng(latLngs) {\n      const map = this.get('map.native');\n\n      if (map && latLngs.length > 1) {\n        const bound = window.L.latLngBounds(latLngs);\n        map.fitBounds(bound);\n      }\n    },\n\n    drawMarker(latLngObj) {\n      let skipSetView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const map = this.get('map');\n      const marker = window.L.marker([latLngObj.get('lat'), latLngObj.get('lng')], pintPointIcon);\n      this.get('layerGroup').addLayer(marker).addTo(this.get('map.native'));\n\n      if (!skipSetView) {\n        this.get('map.native').setView(marker._latlng, map.getZoom());\n      }\n    },\n\n    drawPolyline(pick, drop) {\n      const tooltipOptions = {\n        opacity: 0.7,\n        direction: 'top',\n        sticky: true\n      }; // Drawing reversly to make arrow head correct\n\n      const from = pick.get('place.location');\n      const to = drop.get('place.location');\n      const toLatLng = {\n        lat: to.get('lat'),\n        lng: to.get('lng')\n      };\n      const fromLatLng = {\n        lat: from.get('lat'),\n        lng: from.get('lng')\n      };\n      const distance = (0, _geolib.getDistance)(toLatLng, fromLatLng) * 3.281 / 5280; // convert to miles\n\n      const polyline = window.L.polyline([[to.get('lat'), to.get('lng')], [from.get('lat'), from.get('lng')]], {\n        color: 'black',\n        endOffset: '300'\n      });\n      const thickInvisiblePolyline = window.L.polyline([[to.get('lat'), to.get('lng')], [from.get('lat'), from.get('lng')]], {\n        opacity: 0,\n        weight: 25,\n        endOffset: '300'\n      });\n      const polylineDecorator = window.L.polylineDecorator(polyline, arrowHeadLineConfig);\n      const thickPolylineDecorator = window.L.polylineDecorator(thickInvisiblePolyline, thickArrowHeadLineConfig); // create a thicker invisible line so hovering around the polyline will be friendlier. We don't want to remove popup\n      // as we move the mouse a tiny bit.\n\n      thickInvisiblePolyline.bindTooltip(`<span>Distance: <br>${distance.toFixed(3)} mi</span>`, tooltipOptions);\n      this.get('layerGroup').addLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n      const polyAndDecorators = [polyline, polylineDecorator, thickInvisiblePolyline, thickPolylineDecorator]; //set arrow head - NYAAR-14549\n\n      this.get('layerGroup').removeLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n      this.shortenPolylineAndDecorator(polyAndDecorators);\n      this.get('layerGroup').addLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n    },\n\n    shortenPolylineAndDecorator(polyAndDecorators) {\n      let factor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.2;\n      const isParts = !polyAndDecorators[0]._parts || polyAndDecorators[0]._parts.length === 0;\n      const isPaths = !polyAndDecorators[1]._paths || polyAndDecorators[1]._paths.length === 0;\n      const isThickParts = !polyAndDecorators[2]._parts || polyAndDecorators[2]._parts.length === 0;\n      const isThickPaths = !polyAndDecorators[3]._paths || polyAndDecorators[3]._paths.length === 0;\n\n      if (isParts || isPaths || isThickParts || isThickPaths) {\n        return;\n      }\n\n      polyAndDecKeyCoordinates.forEach((pdk, index) => {\n        const firstCoordinate = polyAndDecorators[index][pdk.path][0][0];\n        const secondCoordinate = polyAndDecorators[index][pdk.path][0][1];\n        const x1 = firstCoordinate[pdk.x1];\n        const y1 = firstCoordinate[pdk.y1];\n        const x2 = secondCoordinate[pdk.x1];\n        const y2 = secondCoordinate[pdk.y1];\n        const newStartX = x1 + factor * (x2 - x1);\n        const newStartY = y1 + factor * (y2 - y1);\n        const endFactor = 1 - factor;\n        const newEndX = x1 + endFactor * (x2 - x1);\n        const newEndY = y1 + endFactor * (y2 - y1);\n        polyAndDecorators[index][pdk.path][0][0][pdk.x1] = newStartX;\n        polyAndDecorators[index][pdk.path][0][0][pdk.y1] = newStartY;\n        polyAndDecorators[index][pdk.path][0][1][pdk.x1] = newEndX;\n        polyAndDecorators[index][pdk.path][0][1][pdk.y1] = newEndY;\n      });\n    },\n\n    drawPloylinePath(segments) {\n      if (segments.length === 0) {\n        return;\n      }\n\n      for (let i = 0; i < segments.length; i++) {\n        this.drawPolyline(segments[i].get('pick'), segments[i].get('drop'));\n      }\n    },\n\n    destroy() {\n      this._super(...arguments);\n\n      Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').removeClass('custom-cursor');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/component\", [\"exports\", \"moment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/classes/rules/eligibility-rules/eligibility-rule-builder\", \"adept-iq/classes/rules/eligibility-rules/eligibility-rule-context\", \"adept-iq/classes/rules/itinerary-type\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\", \"adept-iq/config/api-urls\", \"adept-iq/config/environment\", \"booleanPointInPolygon\", \"turfHelpers\", \"adept-iq/utils/geolib\"], function (_exports, _moment, _mappedPermIds, _component, _lodash, _unwrapProxy, _eligibilityRuleBuilder, _eligibilityRuleContext, _itineraryType, _polyline, _apiUrls, _environment, _booleanPointInPolygon, _turfHelpers, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // eslint-disable-line\n  const {\n    bemap\n  } = window;\n  const PICK = 'pick';\n  const PHONE_NUMBER_LENGTH = 10;\n  const SCHEDULE_TYPE = 'primary';\n  const IQ_BOOKING_MESSAGE = 'IQ Booking';\n  const BLOCKOUT_REGION_GROUP_TYPE = 'blockout-region-group';\n  const BLOCKOUT_ALTERNATIVE_ADDRESS_TYPE = 'alternative-address';\n  let CUT_OFF_TIME_FOR_SAMEDAY = 0;\n  let FUTURE_BOOKING_TIMELINE = 0;\n\n  var _default = _component.default.extend({\n    classNames: ['new-booking-form-side-drawer-parent'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    session: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    fareCalc: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    isProgressShown: false,\n    riderToBook: null,\n    serviceNeeds: null,\n    scheduleErrorMessage: 'Request time falls at a time where two schedules overlap. Please select which schedule the trip should be placed onto.',\n    isLoadAndUnLoadTimeValid: true,\n    isLoadAndUnLoadTimeNumber: false,\n    // Checking the leg date eligibility\n    selectedLegDate: null,\n    isEligiblitiyCheck: false,\n    showBookingSummary: false,\n    onConditionCancelClick: null,\n    onConditionConfirmClick: null,\n    returnTripCollapseState: 'collapsed',\n    preventReturnTripExpansion: false,\n    travelNeedCollapseState: 'expanded',\n    passengerCollapseState: 'collapsed',\n    serviceNeedCollapseState: 'collapsed',\n    // conditional Eligibility\n    showEligibilityRestrictions: false,\n    showOnlyEligibilityOkButton: true,\n    riderIdConditionsMap: null,\n    isOpenErrorModal: Ember.computed.alias('booking.isOpenErrorModal'),\n    errorMessage: Ember.computed.alias('booking.errorMessage'),\n    canSave: Ember.computed.alias('booking.canSave'),\n    isEditMode: false,\n    isViewOnlyMode: false,\n    passengerInfo: null,\n    legTravelNeeds: null,\n    legServiceNeeds: null,\n    dateFormat: 'MM/DD/YYYY',\n    legsInBooking: Ember.computed.alias('activeLegsInBooking'),\n    purpose: null,\n    temporaryBookingResults: null,\n    pickAddressText: null,\n    dropAddressText: null,\n    selectedRiders: null,\n    disablePhoneNumber: null,\n    overrideEligibilityConditionsGranted: false,\n    isOverrideEligible: false,\n    riderFareCategories: null,\n    isMaxRiderTimePopUp: false,\n    blockoutRegionSetMessage: null,\n    showADAEligibility: false,\n    noADAEligibility: false,\n    arrayADABoundaries: null,\n    riderADAEligibility: null,\n    passedADACheck: false,\n    isStopOutisdeADABoundary: false,\n    adaOverride: false,\n    isComputingDistance: false,\n    distancePt1: null,\n    distancePt2: null,\n    activeADABoundary: false,\n    adaBoundary: null,\n    saveInProgress: false,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // eslint-disable-next-line ember/use-brace-expansion\n    riderFullNames: Ember.computed('booking.selectedRiders.[]', function () {\n      return this.get('booking.selectedRiders').map(rider => rider.get('fullName')).join(',');\n    }),\n    noOfActiveRiders: Ember.computed('booking.selectedRiders.[]', function () {\n      return this.get('booking.selectedRiders').length;\n    }),\n    allRiderAllowedServiceModes: Ember.computed('booking.selectedRiders.[]', function () {\n      if (this.get('booking.selectedRiders').length === 0) {\n        return [];\n      }\n\n      if (this.get('booking.selectedRiders').length === 1) {\n        const riderRecord = this.get('booking.selectedRiders')[0];\n        return riderRecord.get('eligibility.allowedServiceModes');\n      }\n\n      const commonServiceModes = this.get('booking.selectedRiders').reduce((result, rider) => {\n        if (!result.length) {\n          return rider.get('eligibility.allowedServiceModes');\n        }\n\n        return (0, _lodash.intersection)(result, rider.get('eligibility.allowedServiceModes'));\n      }, []);\n      return commonServiceModes;\n    }),\n    passengerListTitle: Ember.computed('noOfActiveRiders', function () {\n      return `Passenger List (${this.get('noOfActiveRiders')})`;\n    }),\n    bookingPanelTitle: Ember.computed('isEditMode', 'isViewOnlyMode', function () {\n      const bookingId = this.get('booking.activeBooking.id');\n\n      if (this.get('isViewOnlyMode')) {\n        return `View Booking ${bookingId}`;\n      } else if (this.get('isEditMode')) {\n        return `Edit Booking ${bookingId}`;\n      }\n\n      return 'Create Booking';\n    }),\n    warningModelTitle: Ember.computed('isEditMode', 'isMaxRiderTimePopUp', function () {\n      if (this.get('isMaxRiderTimePopUp')) return IQ_BOOKING_MESSAGE;\n      return this.get('isEditMode') ? 'Edit Booking' : 'Create Booking';\n    }),\n    activeLegsInBooking: Ember.computed('booking.activeBooking.legs.[]', function () {\n      return this.get('booking.activeBooking.legs');\n    }),\n    activeRiderLegsTravelNeeds: null,\n    activeLegsInBookingForMapObserver: Ember.observer('booking.activeBooking.legs.[]', function () {\n      this.refreshBlockoutRegionsPolygons();\n      this.booking.setActiveLegsInBooking(this.get('activeLegsInBooking'));\n    }),\n    // eslint-disable-next-line ember/use-brace-expansion\n    tripLegsInBooking: Ember.computed('booking.activeBooking.legs.[]', 'booking.activeBooking.legs', function () {\n      const tripLegs = this.get('booking.activeBooking.legs').filterBy('purpose', 'trip');\n      return tripLegs.sortBy('legOrdinal');\n    }),\n    // eslint-disable-next-line ember/use-brace-expansion\n    returnTripLegsInBooking: Ember.computed('booking.activeBooking.legs.[]', 'booking.activeBooking.legs', function () {\n      const returnTripLegs = this.get('booking.activeBooking.legs').filterBy('purpose', 'return');\n      return returnTripLegs.sortBy('legOrdinal');\n    }),\n    addressesOfRiderToBook: Ember.computed('riderToBook', function () {\n      return this.get('riderToBook.places').map(place => {\n        if (Ember.typeOf(place) === 'object') {\n          return this.store.createRecord('address', {\n            freeformAddress: '',\n            // we give this empty because nyct does give this field,full address in address model checks for this\n            streetNumber: place.address.streetNumber,\n            streetAddress: place.address.streetAddress,\n            notes: place.address.notes,\n            premise: place.address.premise,\n            region: place.address.region,\n            locality: place.address.locality,\n            subLocality: place.address.locality,\n            postalCode: place.address.postalCode,\n            lat: place.address.lat,\n            lng: place.address.lng,\n            zName: place.address.zName\n          });\n        }\n\n        return this.store.createRecord('address', {\n          freeformAddress: place.get('address.freeformAddress') || '',\n          streetNumber: place.get('address.streetNumber'),\n          streetAddress: place.get('address.streetAddress'),\n          notes: place.get('address.notes'),\n          premise: place.get('address.premise'),\n          region: place.get('address.region'),\n          locality: place.get('address.locality'),\n          subLocality: place.get('address.subLocality'),\n          postalCode: place.get('address.postalCode'),\n          lat: place.get('location.lat'),\n          lng: place.get('location.lng'),\n          zName: place.get('address.zName')\n        });\n      });\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.configureAddTripPermission();\n      const records = this.get('editableRecords');\n      this.set('isEditMode', records[0]);\n      this.set('isViewOnlyMode', records[3]);\n      this.activeLegsInBookingForMapObserver();\n      this.set('booking.isEditingUnscheduledBooking', false);\n\n      if (this.get('isEditMode') || this.get('isViewOnlyMode')) {\n        this.initEditMode();\n      } else {\n        this.initAddMode();\n      }\n\n      this.onAddNewTripLegClick = this.onAddNewTripLegClick.bind(this);\n      this.onAddNewReturnLegClick = this.onAddNewReturnLegClick.bind(this);\n      this.onLegReturnRemoveClick = this.onLegReturnRemoveClick.bind(this);\n      this.onLegTripRemoveClick = this.onLegTripRemoveClick.bind(this);\n      this.onReturnTripPanelHeaderClick = this.onReturnTripPanelHeaderClick.bind(this);\n      this.syncPickAndDrop = this.syncPickAndDrop.bind(this);\n      this.syncRiderLegsTravelNeeds = this.syncRiderLegsTravelNeeds.bind(this);\n      this.onFirstLegDateChange = this.onFirstLegDateChange.bind(this);\n      this.updateFare = this.updateFare.bind(this);\n      this.updateFareForRider = this.updateFareForRider.bind(this);\n      this.syncAllLegsTravelNeeds = this.syncAllLegsTravelNeeds.bind(this);\n      this.clearPickAndDropAddressText = this.clearPickAndDropAddressText.bind(this);\n      this.showSameDayNotificationByPermission = this.showSameDayNotificationByPermission.bind(this);\n      this.validateBlockoutAddress = this.validateBlockoutAddress.bind(this);\n      this.showAltAddressMarker = this.showAltAddressMarker.bind(this);\n      this.cancelAlternativeAddressOption = this.cancelAlternativeAddressOption.bind(this);\n      this.updateAlternativeAddressSelection = this.updateAlternativeAddressSelection.bind(this);\n      this.updateADABoundary = this.updateADABoundary.bind(this);\n      const cutOffTime4SameDay = this.store.peekRecord('cs-config-item', 'config-Book_Trips/cutOffTime4SameDay');\n      const futureBookingTimeline = this.store.peekRecord('cs-config-item', 'config-Book_Trips/Future_Booking_Timeline');\n      const maximumCompanionConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/maximum_companions');\n      const maximumCompanionValue = maximumCompanionConfig ? parseInt(maximumCompanionConfig.get('value'), 10) : 1;\n      this.set('maxCompanionCount', maximumCompanionValue); // converting minutes to hour\n      // eslint-disable-next-line radix\n\n      CUT_OFF_TIME_FOR_SAMEDAY = parseInt(cutOffTime4SameDay.get('value')) / 60; // eslint-disable-next-line radix\n\n      FUTURE_BOOKING_TIMELINE = parseInt(futureBookingTimeline.get('value'));\n      this.set('maxDate', FUTURE_BOOKING_TIMELINE ? (0, _moment.default)().endOf('day').add(FUTURE_BOOKING_TIMELINE, 'days').toDate() : (0, _moment.default)().endOf('day').toDate());\n      this.combineServiceNeedsForGroupBooking();\n      this.set('riderFareCategories', []);\n      this.setRiderFareCategories();\n      this.set('selectedRiders', this.get('booking.selectedRiders'));\n      const selectedRiders = this.get('selectedRiders');\n      const store = this.get('store');\n      selectedRiders.forEach(selectedRider => {\n        const rider = store.peekRecord('rider', selectedRider.id);\n        selectedRider.set('rider', rider);\n      });\n      this.setGlobalRiderFareCategory();\n      this.set('legTravelModeMap', this.get('booking').getActiveBookingTravelModeMap());\n      this.set('overrideEligibilityConditionsGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideEligibilityConditions));\n      this.set('passedADACheck', false);\n      this.set('isStopOutisdeADABoundary', false);\n      this.set('adaOverride', false);\n      this.setupADABoundary();\n      this.set('booking.tripOverlap');\n      const ridersFullNamesOrNull = this.get('booking.selectedRiders').map(externalRider => {\n        const rider = this.get('store').peekRecord('rider', externalRider.id);\n\n        if (rider.get('expiringNotRenewedEligibilityTypes.length') > 0) {\n          return rider.fullName;\n        }\n\n        return null;\n      });\n\n      const ridersFullNames = _lodash.default.compact(ridersFullNamesOrNull);\n\n      if (ridersFullNames.length > 0) {\n        this.get('notifications').warning(`${ridersFullNames.join(', ')} ELIGIBILITY IS SET TO EXPIRE SOON.`);\n      }\n\n      const isGroupBooking = this.get('booking.noOfSelectedRiders') > 1;\n\n      if (isGroupBooking) {\n        this.set('passengerCollapseState', 'expanded');\n      }\n    },\n\n    async setupADABoundary() {\n      const requestTime = this.get('activeLegsInBooking.firstObject.requestTime');\n      this.updateADABoundary(requestTime);\n    },\n\n    async updateADABoundary(requestTime) {\n      if (Ember.isEmpty(requestTime)) return;\n      const requestTimeMoment = (0, _moment.default)(requestTime);\n      const adaBoundary = await this.getADAEligibility(requestTimeMoment);\n      const activeADABoundary = await this.checkADABoundaries();\n      this.set('activeADABoundary', activeADABoundary);\n      this.set('adaBoundary', adaBoundary.geoms.length > 0 ? adaBoundary : null);\n    },\n\n    setDefaultBookingData() {\n      const isEditMode = this.get('isEditMode');\n      const store = this.get('store');\n      const records = this.get('editableRecords');\n      const companionMapper = {};\n      const loadUnloadMapper = {};\n      const travelNeedMapper = {};\n      let formattedPhoneNumber;\n\n      if (records[1].notificationPhoneNumbers.length > 1) {\n        const areaCode = records[1].notificationPhoneNumbers[0].areaCode;\n        const phoneNumber = records[1].notificationPhoneNumbers[0].phoneNumber;\n        formattedPhoneNumber = `${areaCode}-${phoneNumber}`;\n      }\n\n      const riders = this.get('selectedRiders');\n      const riderPhoneNumbers = riders.map(riderData => riderData.formattedMainPhoneNumber);\n      const riderNotes = riders.map(riderData => riderData.notes);\n      const riderLegsTravelNeeds = !isEditMode ? this.get('booking').reGroupLegtravelneedsForGroupBooking() : [{\n        rider: this.get('selectedRiders.firstObject'),\n        travelNeeds: this.get('booking.activeBooking.legs.firstObject.legTravelNeeds').map(travelNeed => {\n          return {\n            type: travelNeed.get('travelNeedTypeName'),\n            cnt: travelNeed.get('count')\n          };\n        })\n      }];\n      const bookingRecord = (0, _lodash.clone)(records[2]);\n      const legArray = (0, _lodash.clone)(bookingRecord.get('legs')).toArray();\n      const riderLegsTravelNeedStructures = riderLegsTravelNeeds.map(_ref => {\n        let {\n          rider,\n          travelNeeds\n        } = _ref;\n        const originalTravelNeeds = this.get('booking').createLegTravelNeeds([{\n          rider,\n          travelNeeds\n        }]);\n        const riderData = store.peekRecord('rider', rider.id);\n        const riderOverrideTravelNeeds = riderData.travelNeeds.toArray();\n        const {\n          maxLoadTime,\n          maxUnloadTime\n        } = riderOverrideTravelNeeds.reduce((acc, curr) => {\n          let curLoadTime = curr.loadTime;\n          let curUnloadTime = curr.unloadTime;\n\n          if (!curLoadTime) {\n            curLoadTime = originalTravelNeeds.find(v => v.get('travelNeedType.name') === curr.name).get('travelNeedType.loadTime');\n          }\n\n          if (!curUnloadTime) {\n            curUnloadTime = originalTravelNeeds.find(v => v.get('travelNeedType.name') === curr.name).get('travelNeedType.unloadTime');\n          }\n\n          return {\n            maxLoadTime: Math.max(acc.maxLoadTime, curLoadTime || 0),\n            maxUnloadTime: Math.max(acc.maxUnloadTime, curUnloadTime || 0)\n          };\n        }, {\n          maxLoadTime: -Infinity,\n          maxUnloadTime: -Infinity\n        });\n        const legData = legArray.map((leg, index) => {\n          const clonedTravelNeeds = originalTravelNeeds.filter(tn => tn.get('rider.id') === rider.get('id')).map(tn => store.createRecord('leg-travel-need', {\n            count: tn.get('count'),\n            travelNeedType: tn.get('travelNeedType'),\n            passengerType: tn.get('passengerType'),\n            rider: rider,\n            legIndex: index\n          }));\n          return {\n            legIndex: index,\n            purpose: leg.get('tripPurpose.id'),\n            loadTime: maxLoadTime,\n            unloadTime: maxUnloadTime,\n            nonClonedTravelNeeds: clonedTravelNeeds\n          };\n        });\n        return {\n          rider,\n          riderTravelNeeds: riderData.travelNeeds.toArray(),\n          isAllLegs: this.get('booking.isAllLegs'),\n          travelNeedLegs: legData,\n          __cachedPerLegTravelNeedLegs: legData.map(leg => ({ ...leg,\n            nonClonedTravelNeeds: [...leg.nonClonedTravelNeeds]\n          }))\n        };\n      });\n      this.set('booking.activeBooking.riderLegsTravelNeeds', riderLegsTravelNeedStructures);\n      this.set('activeRiderLegsTravelNeeds', riderLegsTravelNeedStructures);\n      const legTravelNeedsClass = this.get('booking').createLegTravelNeeds(riderLegsTravelNeeds);\n      const legTravelNeeds = isEditMode ? this.get('legTravelNeeds') : legTravelNeedsClass.toArray();\n      const loadTime = records[1].loadTime;\n      const unLoadTime = records[1].unloadTime;\n      legArray.forEach((leg, index) => {\n        const companion = this.get('booking').getTravelNeedsCompanion(legTravelNeeds).map(legTravelNeed => {\n          return {\n            count: legTravelNeed.get('count'),\n            travelNeedTypeNameUppercase: legTravelNeed.get('travelNeedTypeNameUppercase')\n          };\n        });\n        const loadUnload = {\n          loadTime: leg.get('loadTime'),\n          unloadTime: leg.get('unloadTime')\n        };\n        const legTravelNeed = leg.get('legTravelNeeds').toArray();\n        companionMapper[index] = companion;\n        loadUnloadMapper[index] = loadUnload;\n        travelNeedMapper[index] = legTravelNeed;\n      });\n      const record = Ember.Object.create({\n        legs: [].concat(bookingRecord.get('legs').toArray()),\n        booking: bookingRecord,\n        legTravelNeeds: legTravelNeeds.toArray(),\n        loadTime: loadTime,\n        unLoadTime: unLoadTime,\n        formattedPhoneNumber: formattedPhoneNumber,\n        riderPhoneNumbers: riderPhoneNumbers,\n        rider: riders,\n        riderNotes: riderNotes\n      });\n      record.set('legSegments', this.createClonedLegSegments(record.get('legs')));\n      record.set('travelNeeds', this.createClonedTravelNeeds(record.get('legTravelNeeds')));\n      record.set('companionCountMapper', companionMapper);\n      record.set('loadUnloadMapper', loadUnloadMapper);\n      record.set('travelNeedMapper', travelNeedMapper);\n      record.set('selectedAllLeg', this.get('booking.isAllLegs'));\n      this.set('defaultBookingData', record);\n      this.updateFare();\n    },\n\n    refreshBlockoutRegionsPolygons() {\n      if (Ember.isNone(this.get('booking.bookingMap.native'))) return;\n      const legsInBooking = this.get('legsInBooking');\n      const startRequestTime = (0, _moment.default)(legsInBooking.get('firstObject.requestTime'));\n      const endRequestTime = (0, _moment.default)(legsInBooking.get('lastObject.requestTime'));\n      const blockoutRegionGroups = this.getBlockoutRegionGroups();\n      this.clearDrawnItems(BLOCKOUT_REGION_GROUP_TYPE);\n      blockoutRegionGroups.forEach(blockoutRegion => {\n        const startTime = blockoutRegion.get('value.start') && (0, _moment.default)(blockoutRegion.get('value.start'));\n        const endTime = blockoutRegion.get('value.end') && (0, _moment.default)(blockoutRegion.get('value.end'));\n        const isStartRequestTimeInsideBlockoutTime = startRequestTime.isBetween(startTime, endTime, 'days', []);\n        const isEndRequestTimeInsideBlockoutTime = endRequestTime.isBetween(startTime, endTime, 'days', []);\n\n        if (isStartRequestTimeInsideBlockoutTime || isEndRequestTimeInsideBlockoutTime) {\n          const regions = blockoutRegion.get('value.regions') || [];\n          this.updateBlockoutRegionGroupPolygons(regions);\n        }\n      });\n    },\n\n    updateBlockoutAlternativeAddress(address) {\n      const map = this.get('booking.bookingMap.native');\n      const lat = address.lat;\n      const lng = address.lng;\n      const fullAddress = address.fullAddress;\n      this.clearDrawnItems(BLOCKOUT_ALTERNATIVE_ADDRESS_TYPE);\n      const marker = this.createMarker(lat, lng, fullAddress);\n      marker.addTo(map);\n    },\n\n    updateBlockoutRegionGroupPolygons(regions) {\n      const map = this.get('booking.bookingMap.native');\n      regions.forEach(region => {\n        const polygon = region.polygon;\n\n        if (!Ember.isEmpty(polygon)) {\n          const polygons = this.createPolygon([polygon], 'blue', region.name, BLOCKOUT_REGION_GROUP_TYPE);\n          polygons.addTo(map);\n        }\n      });\n    },\n\n    clearDrawnItems(type) {\n      const map = this.get('booking.bookingMap.native');\n\n      if (type === BLOCKOUT_REGION_GROUP_TYPE) {\n        map.eachLayer(layer => {\n          const currLayerType = layer?.options?.properties?.type;\n\n          if (currLayerType === BLOCKOUT_REGION_GROUP_TYPE) {\n            map.removeLayer(layer);\n          }\n        });\n      } else if (BLOCKOUT_ALTERNATIVE_ADDRESS_TYPE) {\n        map.eachLayer(layer => {\n          const currentType = layer?.options?.properties?.type;\n\n          if (currentType === type) {\n            map.removeLayer(layer);\n          }\n        });\n      }\n    },\n\n    clonePlaceRecord(place) {\n      const store = this.get('store');\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const addressAttr = address.toJSON();\n      addressAttr.zoneName = (0, _unwrapProxy.unwrapProxy)(place.get('address.zoneName'));\n      const placeAttr = place.toJSON();\n      const clonedAddress = store.createRecord('address', addressAttr);\n      const clonePlace = store.createRecord('place', placeAttr);\n      clonePlace.set('address', clonedAddress); // if clone the location it will update the location in map\n\n      clonePlace.set('location', place.get('location'));\n      return clonePlace;\n    },\n\n    createClonedLegSegments(legs) {\n      const legSegments = legs.map(leg => {\n        let pickPhoneNumberAttr = '';\n        let dropPhoneNumberAttr = '';\n        const pickPlace = this.clonePlaceRecord((0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.pick.place')));\n        const dropPlace = this.clonePlaceRecord((0, _unwrapProxy.unwrapProxy)(leg.get('segments.lastObject.drop.place')));\n        const fare = leg.get('segments.firstObject.fare');\n        const pickNotes = leg.get('segments.firstObject.pick.notes');\n        const dropNotes = leg.get('segments.lastObject.drop.notes');\n        const pickPhoneNumbers = [...leg.get('segments.firstObject.pick.phoneNumbers').toArray()];\n        const dropPhoneNumbers = [...leg.get('segments.firstObject.drop.phoneNumbers').toArray()]; //set the previous segment stop pick phone number attributes for future use(undo,etc)\n\n        if (pickPhoneNumbers.length) {\n          const previousPickPhoneNumberRecord = pickPhoneNumbers.get('firstObject');\n          pickPhoneNumberAttr = previousPickPhoneNumberRecord.toJSON();\n        } //set the previous segment stop drop phone number attributes for future use(undo,etc)\n\n\n        if (dropPhoneNumbers.length) {\n          const previousDropPhoneNumberRecord = dropPhoneNumbers.get('firstObject');\n          dropPhoneNumberAttr = previousDropPhoneNumberRecord.toJSON();\n        }\n\n        const pickPlaceAddress = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('address')).toJSON();\n        const dropPlaceAddress = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('address')).toJSON();\n        const pickPlaceLocation = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('location')).toJSON();\n        const dropPlaceLocation = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('location')).toJSON();\n        const pickZoneName = leg.get('segments.firstObject.pick.place.address.zoneName.name');\n        const dropZoneName = leg.get('segments.lastObject.drop.place.address.zoneName.name');\n        return Ember.Object.create({\n          pickPlace: pickPlace,\n          dropPlace: dropPlace,\n          pickPlaceAddress: pickPlaceAddress,\n          dropPlaceAddress: dropPlaceAddress,\n          pickPlaceLocation: pickPlaceLocation,\n          dropPlaceLocation: dropPlaceLocation,\n          fare: fare,\n          pickNotes: pickNotes,\n          dropNotes: dropNotes,\n          pickPhoneNumbers: pickPhoneNumbers,\n          dropPhoneNumbers: dropPhoneNumbers,\n          serviceWindow: leg.get('serviceWindow'),\n          fundingAgency: leg.get('fundingAgency'),\n          noSharing: leg.get('segment.noSharing'),\n          noSharingText: leg.get('segment.noSharingText'),\n          loadTime: leg.get('loadTime'),\n          unloadTime: leg.get('unloadTime'),\n          anchor: leg.get('anchor'),\n          requestTime: leg.get('requestTime'),\n          pickPhoneNumberAttr: pickPhoneNumberAttr,\n          dropPhoneNumberAttr: dropPhoneNumberAttr,\n          pickZoneName: pickZoneName,\n          dropZoneName: dropZoneName\n        });\n      });\n      return legSegments;\n    },\n\n    createClonedTravelNeeds(legTravelNeed) {\n      const legTravelNeeds = legTravelNeed.map(travelNeed => {\n        return Ember.Object.create({\n          count: travelNeed.get('count'),\n          travelNeedType: travelNeed.get('travelNeedType'),\n          passengerType: travelNeed.get('passengerType')\n        });\n      });\n      return legTravelNeeds;\n    },\n\n    willDestroyElement() {\n      this.set('booking.selectedCompanionCount', 0);\n      this.set('booking.isOpenErrorModal', false);\n      this.set('booking.travelNeedsOverride', false);\n      this.set('booking.overrideEligibility', false);\n      this.set('booking.overrideTravelNeedsDetails', []);\n      this.set('booking.isRiderPhoneNumberEdited', false);\n      this.set('booking.bookingMap', null);\n\n      this._super(...arguments);\n    },\n\n    async willDestroy() {\n      //set the copiedBookingRecord as null, if we close the copy booking screen\n      if (this.booking.copiedBookingRecord) {\n        this.booking.copiedBookingRecord = null;\n      }\n\n      this._super(...arguments);\n    },\n\n    initEditMode() {\n      const record = this.get('editableRecords');\n      const legTravelNeeds = this.duplicateWideSeats(record[2].legs.firstObject.legTravelNeeds);\n      const hasReturnLeg = record[2].legs.toArray().find(ltn => ltn.get('purpose') === 'return');\n      const legServiceNeeds = this.createAndGetLegServiceNeeds(record[2]);\n      const status = this.get('booking.activeBooking.status') || '';\n      const isEditingUnscheduledBooking = status.toLowerCase() === 'unscheduled';\n\n      if (isEditingUnscheduledBooking) {\n        this.set('booking.isEditingUnscheduledBooking', true);\n        this.set('preventReturnTripExpansion', true);\n      }\n\n      if (hasReturnLeg) {\n        this.set('returnTripCollapseState', 'expanded');\n      }\n\n      this.set('riderToBook', record[1]);\n      this.set('legTravelNeeds', legTravelNeeds);\n      this.set('legServiceNeeds', legServiceNeeds);\n      const rider = this.store.peekRecord('rider', record[1].id);\n      this.set('riderToBook.suspensions', rider.riderSuspensions.toArray());\n      this.set('riderToBook.eligibilities', rider.riderEligibilities.toArray());\n      this.setLegServiceNeedsInLeg(record[2]);\n    },\n\n    initAddMode() {\n      const record = this.get('editableRecords');\n      this.set('riderToBook', record[1]);\n      this.set('legTravelNeeds', record[2].legs.firstObject.legTravelNeeds);\n      this.set('legServiceNeeds', record[2].legs.firstObject.legServiceNeeds.toArray());\n      const rider = this.store.peekRecord('rider', record[1].id); // these are manually added to riderToBook because of the differences between external rider payload and IQ rider payload\n\n      this.set('riderToBook.suspensions', rider.riderSuspensions.toArray());\n      this.set('riderToBook.eligibilities', rider.riderEligibilities.toArray());\n      const legFareCategory = this.get('booking.activeBooking.firstLeg.segment.fareCategory');\n      const fareCategoryToSet = _lodash.default.isNil(legFareCategory.get('id')) ? rider.get('fareCategory') : legFareCategory; // if fare category of the first leg is alredy set to valid value (ie.copy booking), use that value\n\n      this.set('booking.activeBooking.firstLeg.segment.fareCategory', fareCategoryToSet);\n      const providerOverride = Ember.isNone(rider.provider) ? null : rider.provider;\n      this.set('riderToBook.provider', providerOverride);\n\n      if (!Ember.isNone(rider.provider)) {\n        const preferredProvider = this.store.peekRecord('provider', rider.provider);\n        this.set('booking.activeBooking.provider', preferredProvider);\n      } else {\n        this.set('booking.activeBooking.provider', null);\n      }\n    },\n\n    setCopiedBookingRecords() {\n      const copiedBookingRecord = this.get('booking.copiedBookingRecord');\n      const legs = copiedBookingRecord ? copiedBookingRecord.get('legs').toArray() : '';\n      const totalLegsLength = legs.length - 1;\n\n      if (copiedBookingRecord) {\n        legs.forEach(async (leg, index) => {\n          const legOrdinal = leg.get('legOrdinal');\n\n          if (legOrdinal > 1) {\n            const purpose = leg.get('purpose');\n            const isReturn = purpose !== 'trip';\n            const newLeg = await this.createLegSegmentRecord(isReturn);\n            const copiedLeg = this.get('booking').setCopiedBookingLegs(leg, newLeg);\n            const fare = leg.get('segments.firstObject.fare');\n\n            if (totalLegsLength === index) {\n              copiedLeg.set('segments.firstObject.fare', fare);\n            }\n\n            this.get('booking.activeBooking.legs').pushObject(copiedLeg);\n\n            if (isReturn) {\n              this.set('returnTripCollapseState', 'expanded'); //setting last return trip drop\n\n              this.syncReturnDropWithTripPick();\n            }\n\n            this.syncPickAndDrop();\n          }\n        });\n      }\n    },\n\n    duplicateWideSeats(legTravelNeeds) {\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      const bigSeatTravelneeds = legTravelNeeds.filter(travelNeed => {\n        return bigSeatTRs.includes(travelNeed.get('travelNeedTypeNameUppercase'));\n      });\n      bigSeatTravelneeds.forEach(tr => {\n        const wideTravelNeed = bigSeatsTN.find(travelNeed => {\n          return travelNeed.get('travelNeedTypeNameUppercase') === tr.get('name');\n        });\n        const configCount = parseInt(wideTravelNeed.get('vehicleCapacityCount'), 10);\n\n        if (tr.count > configCount) {\n          const count = tr.count / configCount;\n\n          for (let i = 1; i < count; i++) {\n            const newLegTravelNeed = this.store.createRecord('leg-travel-need', {\n              count: configCount,\n              travelNeedType: tr.get('travelNeedType'),\n              passengerType: tr.get('passengerType')\n            });\n            legTravelNeeds.pushObject(newLegTravelNeed);\n          }\n        }\n      });\n      return legTravelNeeds;\n    },\n\n    onNoteChange(value) {\n      this.set('riderToBook.notes', value);\n    },\n\n    checkIfFullAddressPresent(address) {\n      return !Ember.isEmpty(address.get('fullAddress'));\n    },\n\n    /**\n     * Method to set return trip dropoff address as first leg pic address\n     */\n    syncReturnDropWithTripPick() {\n      const firstTripLeg = this.get('tripLegsInBooking.firstObject');\n      const firstTripPickPlace = firstTripLeg.get('segments.firstObject.pick.place');\n      const lastReturnLeg = this.get('returnTripLegsInBooking.lastObject');\n      const lastLegDrop = lastReturnLeg.get('segments.lastObject.drop');\n      const zoneType = this.store.createRecord('zone-type');\n      const dropAddress = this.store.createRecord('address', {\n        freeformAddress: firstTripPickPlace.get('address.freeformAddress') || '',\n        streetNumber: firstTripPickPlace.get('address.streetNumber'),\n        streetAddress: firstTripPickPlace.get('address.streetAddress'),\n        notes: firstTripPickPlace.get('address.notes'),\n        premise: firstTripPickPlace.get('address.premise'),\n        region: firstTripPickPlace.get('address.region'),\n        locality: firstTripPickPlace.get('address.locality'),\n        subLocality: firstTripPickPlace.get('address.subLocality'),\n        postalCode: firstTripPickPlace.get('address.postalCode'),\n        zName: firstTripPickPlace.get('address.zName'),\n        zoneName: zoneType\n      });\n      dropAddress.set('zoneName.name', firstTripPickPlace.get('address.zoneName.name'));\n      dropAddress.set('zoneName.displayName', firstTripPickPlace.get('address.zoneName.displayName'));\n      const dropLocation = this.store.createRecord('location', {\n        lat: firstTripPickPlace.get('location.lat'),\n        lng: firstTripPickPlace.get('location.lng'),\n        geoNode: firstTripPickPlace.get('location.geoNode')\n      });\n      const dropPlace = this.store.createRecord('place', {\n        address: dropAddress,\n        location: dropLocation\n      });\n      lastLegDrop.set('place', dropPlace);\n      const activelegsInBooking = this.get('activeLegsInBooking');\n      this.booking.setActiveLegsInBooking(activelegsInBooking);\n    },\n\n    syncPickAndDrop() {\n      const legsInBooking = this.get('tripLegsInBooking').toArray(); // last trip leg's drop should first return trip leg's pick\n\n      if (this.get('returnTripLegsInBooking.length')) {\n        const firstTripLeg = this.get('tripLegsInBooking.firstObject');\n        const lastTripLeg = this.get('tripLegsInBooking.lastObject');\n        const firstReturnLeg = this.get('returnTripLegsInBooking.firstObject');\n        const prevDrop = lastTripLeg.get('segments.firstObject.drop.place');\n        const currPick = firstReturnLeg.get('segments.firstObject.pick');\n        const currDrop = firstReturnLeg.get('segments.firstObject.drop');\n        const previousDrop = this.addressRecordCreation(prevDrop);\n        currPick.set('notes', lastTripLeg.get('segments.firstObject.drop.notes'));\n        currDrop.set('notes', firstTripLeg.get('segments.firstObject.pick.notes'));\n        currPick.set('place', previousDrop);\n      } else {\n        this.syncLegsInBooking(legsInBooking);\n      }\n\n      const activelegsInBooking = this.get('activeLegsInBooking');\n      this.booking.setActiveLegsInBooking(activelegsInBooking);\n    },\n\n    syncLegsInBooking(legsInBooking) {\n      if (legsInBooking.length <= 1) {\n        return;\n      }\n\n      for (let i = 1; i < legsInBooking.length; i++) {\n        const previousLeg = legsInBooking[i - 1];\n        const currentLeg = legsInBooking[i];\n        const prevDrop = previousLeg.get('segments.firstObject.drop.place');\n        const currPick = currentLeg.get('segments.firstObject.pick');\n        const pickPlace = this.addressRecordCreation(prevDrop);\n        currPick.set('notes', previousLeg.get('segments.firstObject.drop.notes'));\n        currPick.set('place', pickPlace);\n      }\n    },\n\n    async syncRiderLegsTravelNeeds() {\n      const oldRiderLegsTravelNeeds = this.get('activeRiderLegsTravelNeeds');\n      const updateRiderLegsTravelNeedStructures = await this.get('booking').rebuildRiderLegsTravelNeeds();\n\n      if (oldRiderLegsTravelNeeds) {\n        updateRiderLegsTravelNeedStructures.forEach(newStructure => {\n          const oldStructure = oldRiderLegsTravelNeeds.find(old => old.rider.id === newStructure.rider.id);\n\n          if (oldStructure && oldStructure.__cachedPerLegTravelNeedLegs) {\n            newStructure.__cachedPerLegTravelNeedLegs = oldStructure.__cachedPerLegTravelNeedLegs;\n          }\n        });\n      }\n\n      this.set('booking.activeBooking.riderLegsTravelNeeds', updateRiderLegsTravelNeedStructures);\n      this.set('activeRiderLegsTravelNeeds', updateRiderLegsTravelNeedStructures);\n    },\n\n    /**\n     * address record creation\n     */\n    addressRecordCreation(prevDrop) {\n      const zoneType = this.store.createRecord('zone-type');\n      const pickAddress = this.store.createRecord('address', {\n        freeformAddress: prevDrop.get('address.freeformAddress') || '',\n        streetNumber: prevDrop.get('address.streetNumber'),\n        streetAddress: prevDrop.get('address.streetAddress'),\n        notes: prevDrop.get('address.notes'),\n        premise: prevDrop.get('address.premise'),\n        region: prevDrop.get('address.region'),\n        locality: prevDrop.get('address.locality'),\n        subLocality: prevDrop.get('address.subLocality'),\n        postalCode: prevDrop.get('address.postalCode'),\n        zName: prevDrop.get('address.zName'),\n        zoneName: zoneType\n      });\n      pickAddress.set('zoneName.name', prevDrop.get('address.zoneName.name'));\n      pickAddress.set('zoneName.displayName', prevDrop.get('address.zoneName.displayName'));\n      const pickLocation = this.store.createRecord('location', {\n        lat: prevDrop.get('location.lat'),\n        lng: prevDrop.get('location.lng'),\n        geoNode: prevDrop.get('location.geoNode')\n      });\n      const pickPlace = this.store.createRecord('place', {\n        address: pickAddress,\n        location: pickLocation\n      });\n      return pickPlace;\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      Ember.$('.edit-widget-modal').width('465');\n      Ember.$('.booking-map-container').css({\n        'width': 'calc(97% - ' + Ember.$('.edit-widget-modal').width() + 'px)'\n      }).css({\n        'height': 'calc(100% - 16%)',\n        'left': Ember.$('.edit-widget-modal').width() + 'px)'\n      });\n      this.set('travelNeedCollapseState', 'collapsed');\n      this.setCopiedBookingRecords();\n      this.setDefaultBookingData();\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n      this.refreshBlockoutRegionsPolygons();\n    },\n\n    getNewLegDate(prevLeg) {\n      const bufferMinutes = 10;\n      const rTime = prevLeg.get('requestTime');\n      const currentDateAndTime = (0, _moment.default)(rTime);\n      const newMomentDate = (0, _moment.default)();\n      const currentYear = currentDateAndTime.year();\n      const currentMonth = currentDateAndTime.month();\n      const currentDay = currentDateAndTime.date();\n      const currentHour = currentDateAndTime.hour();\n      const currentMinutes = currentDateAndTime.minutes();\n      const currentSeconds = currentDateAndTime.seconds();\n      newMomentDate.year(currentYear);\n      newMomentDate.month(currentMonth);\n      newMomentDate.date(currentDay);\n      newMomentDate.hour(currentHour);\n      newMomentDate.minutes(currentMinutes + bufferMinutes);\n      newMomentDate.seconds(currentSeconds);\n      const selectedDateObjectWithTime = newMomentDate.toDate();\n      return selectedDateObjectWithTime;\n    },\n\n    configureAddTripPermission() {\n      const record = this.get('editableRecords')[1];\n      const sameDayTripPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createSameDayBookings, null);\n      const FutureDayTripPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createFutureBookings, null);\n      let maxDate = null;\n      let minDate = null;\n\n      if (sameDayTripPermGranted && !FutureDayTripPermGranted) {\n        maxDate = (0, _moment.default)().endOf('day');\n      }\n\n      if (FutureDayTripPermGranted && !sameDayTripPermGranted) {\n        minDate = (0, _moment.default)().startOf('day').add(1, 'day').toDate();\n      }\n\n      record.set('tripMaxDate', maxDate);\n      record.set('tripMinDate', minDate);\n    },\n\n    async createLegSegmentRecord(isReturn) {\n      const record = this.get('editableRecords');\n      const store = this.get('store');\n      const isGroupBooking = this.get('booking.noOfSelectedRiders') > 1;\n      const serviceNeedType = this.get('tripLegsInBooking.firstObject.legServiceNeeds.firstObject.serviceNeedType');\n      const rider = store.peekRecord('rider', record[1].id);\n      let date;\n\n      if (!isReturn || !this.get('returnTripLegsInBooking.lastObject.requestTime')) {\n        const legToUse = this.get('tripLegsInBooking.lastObject');\n        date = this.getNewLegDate(legToUse);\n      } else {\n        const legToUse = this.get('returnTripLegsInBooking.lastObject');\n        date = this.getNewLegDate(legToUse);\n      }\n\n      const legs = isGroupBooking ? await this.get('booking').createLegSegmentRecordForGroupBooking(isReturn) : await this.get('booking').createLegSegmentRecordForSingleBooking(isReturn);\n      const leg = legs.firstObject;\n      const legFareCategory = this.get('booking.activeBooking.firstLeg.segment.fareCategory');\n      const fareCategoryToSet = _lodash.default.isNil(legFareCategory.get('id')) ? rider.get('fareCategory') : legFareCategory; // if fare category of the first leg is alredy set to valid value (ie.copy booking), use that value\n\n      leg.set('segment.fareCategory', fareCategoryToSet);\n      leg.set('requestTime', date);\n      const legServiceNeed = store.createRecord('leg-service-need', {\n        leg: leg,\n        serviceNeedType\n      });\n      leg.set('legServiceNeeds', [legServiceNeed]);\n      return leg;\n    },\n\n    async onReturnTripPanelHeaderClick() {\n      const bookingFieldType = this.getLegTypeField(true);\n\n      if (this.get(`${bookingFieldType}.length`) === 0) {\n        const newLeg = await this.createLegSegmentRecord(true);\n        this.get('booking.activeBooking.legs').pushObject(newLeg);\n        this.syncRiderLegsTravelNeeds();\n        this.syncPickAndDrop(); //setting last return trip drop\n\n        this.syncReturnDropWithTripPick();\n      }\n    },\n\n    getLegTypeField(isReturn) {\n      return isReturn ? 'returnTripLegsInBooking' : 'tripLegsInBooking';\n    },\n\n    async onAddNewTripLegClick() {\n      await this._onAddNewLegClick(false);\n    },\n\n    async onAddNewReturnLegClick() {\n      await this._onAddNewLegClick(true); //setting last return trip drop\n\n      if (this.get('returnTripLegsInBooking.length')) {\n        this.syncReturnDropWithTripPick();\n      }\n    },\n\n    async _onAddNewLegClick(isReturn) {\n      const newLeg = await this.createLegSegmentRecord(isReturn);\n      this.get('booking.activeBooking.legs').pushObject(newLeg);\n      this.syncRiderLegsTravelNeeds();\n      await this.updateFare();\n      this.notifyPropertyChange('booking.activeBooking.legs.[]');\n      this.syncPickAndDrop();\n    },\n\n    async _onRemoveLeg(leg) {\n      this.get('booking.activeBooking.legs').removeObject(leg);\n      this.syncRiderLegsTravelNeeds();\n      await this.updateFare();\n      this.notifyPropertyChange('booking.activeBooking.legs.[]');\n      this.set('returnTripCollapseState', 'collapsed');\n    },\n\n    onLegReturnRemoveClick(leg) {\n      this._onRemoveLeg(leg);\n    },\n\n    onLegTripRemoveClick(leg) {\n      this._onRemoveLeg(leg);\n\n      this.syncPickAndDrop();\n    },\n\n    // we are just checking using postalCode because both nyct and tomtom returns that consistently\n    validateIfPickAndDropArePresentInAllLegs() {\n      let allLegsHavePickAndDrop = true;\n      this.get('legsInBooking').forEach(leg => {\n        if (!leg.get('segments.firstObject.pick.place.address.postalCode') && !leg.get('segments.lastObject.drop.place.address.postalCode')) {\n          allLegsHavePickAndDrop = false;\n        }\n      });\n      return allLegsHavePickAndDrop;\n    },\n\n    validateIfPickPresentInAllLegs() {\n      let allLegsHavePick = true;\n\n      if (this.get('legsInBooking').length === 1) {\n        return true;\n      }\n\n      this.get('legsInBooking').forEach((leg, index) => {\n        if (!leg.get('segments.firstObject.pick.place.address.postalCode') && index > 0) {\n          this.set('purpose', leg.get('purpose'));\n          allLegsHavePick = false;\n        }\n      });\n      return allLegsHavePick;\n    },\n\n    validateIfDropPresentInAllLegs() {\n      let allLegsHaveDrop = true;\n\n      if (this.get('legsInBooking').length === 1) {\n        return true;\n      }\n\n      this.get('legsInBooking').forEach((leg, index) => {\n        if (!leg.get('segments.lastObject.drop.place.address.postalCode') && index > 0) {\n          this.set('purpose', leg.get('purpose'));\n          allLegsHaveDrop = false;\n        }\n      });\n      return allLegsHaveDrop;\n    },\n\n    validateCutOffInAllSubsequentLegs() {\n      const legsInBooking = this.get('activeLegsInBooking');\n\n      for (let i = 0; i < legsInBooking.length; i++) {\n        const leg = this.get('legsInBooking').objectAt(i);\n\n        if (!this.validateCutOff(leg)) {\n          return true;\n        }\n      }\n    },\n\n    validateSeatAndPassengerCount() {\n      const legIndexes = [];\n      const isAllLegs = this.get('booking.isAllLegs');\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      let activeLegsInBooking = this.get('activeLegsInBooking'); // Reg-NYAAR-18969 - if All Legs in Travel Need Section is checked , Validate Travel Need for first Object\n\n      if (isAllLegs) {\n        activeLegsInBooking = [activeLegsInBooking?.firstObject];\n      }\n\n      activeLegsInBooking.forEach((leg, index) => {\n        const noOfRiders = this.get('booking').noOfSelectedRiders;\n        const noOfPassengers = noOfRiders;\n        const bigSeatTravelNeeds = leg.get('legTravelNeeds').filter(travelNeed => {\n          return bigSeatTRs.includes(travelNeed.get('travelNeedTypeNameUppercase')) && !travelNeed.get('isCloned');\n        });\n        const wheelchairTravelNeed = leg.get('legTravelNeeds').find(travelNeed => {\n          return travelNeed.get('travelNeedTypeNameUppercase') === 'WHEELCHAIR';\n        });\n        const wheelChairCount = wheelchairTravelNeed ? parseInt(wheelchairTravelNeed.count, 10) : 0;\n        const ambulatoryCount = leg.get('ambulatorySeatCount') ? leg.get('ambulatorySeatCount') : 0;\n        const noOfSeats = ambulatoryCount + wheelChairCount + bigSeatTravelNeeds.length;\n\n        if (noOfPassengers < noOfSeats) {\n          legIndexes.push(index);\n        }\n      });\n      return legIndexes;\n    },\n\n    validateEmptyTravelNeeds() {\n      const emptyTravelNeedsLegIndexes = [];\n      this.get('activeLegsInBooking').forEach((leg, index) => {\n        const isEmptyTravelNeedPresent = leg.get('legTravelNeeds').toArray().some(tr => !tr.get('travelNeedTypeNameUppercase'));\n\n        if (isEmptyTravelNeedPresent) {\n          emptyTravelNeedsLegIndexes.push(index);\n        }\n      });\n      return emptyTravelNeedsLegIndexes;\n    },\n\n    checkEveryLegHasAnchor() {\n      const legs = this.get('legsInBooking._objects');\n      const filteredLegs = legs.filter(leg => {\n        return leg.get('anchor');\n      });\n\n      if (filteredLegs.length === legs.length) {\n        return true;\n      }\n\n      return false;\n    },\n\n    checkEveryLegHasRequestTime() {\n      const legs = this.get('legsInBooking') ? this.get('legsInBooking').toArray() : [];\n      const filteredLegs = legs.filter(leg => {\n        return leg.get('requestTime') && !isNaN(leg.get('requestTime'));\n      });\n\n      if (filteredLegs.length === legs.length) {\n        return true;\n      }\n\n      return false;\n    },\n\n    /**\n     *  NYAAR-18964 The validation should be applied on the save tick icon and it shows the warning pop up less then 10 Digit phone number.\n     *  it's for single booking and group booking\n     * @returns {boolean}\n     */\n    validatePhoneNumber() {\n      const validatePhoneNumber = this.get('booking.selectedRiders').every(rider => {\n        return rider.get('formattedPhoneNumber').split('-').join('').length === PHONE_NUMBER_LENGTH;\n      });\n      return validatePhoneNumber;\n    },\n\n    /**\n       * NYAAR-16659: Checking rider maximum time for the additional trip's request time must allow enough time for the additional trip to be completed before the end of the booking timeline.\n       * @param {*Date} rTime\n       * @param {*Object} currentLeg\n       */\n    async maxRiderTimeCheck(rTime, currentLeg) {\n      const maxFutureBookingDate = this.get('maxDate');\n      const formattedrTime = (0, _moment.default)(rTime).format('DD/MM/yyyy');\n      const formattedMaxFutureBookingDate = (0, _moment.default)(maxFutureBookingDate).format('DD/MM/yyyy');\n      const rider = this.get('booking.selectedRiders.firstObject');\n      const riderModel = this.store.peekRecord('rider', rider.id);\n      const session = this.get('session');\n      const request = await this.get('booking').preparePayloadForDemandTrip(currentLeg, rider, riderModel);\n      const byDistance = _environment.default.APP.byDistance || false;\n      let maxRiderTimeResponse = [];\n      let maxRideTime = null;\n      let totalMinutes = null;\n      let retMaxRideTime = null;\n\n      if (formattedrTime === formattedMaxFutureBookingDate) {\n        maxRiderTimeResponse = await this.get('ajax').post(_apiUrls.API.fixedRouteEngineService.host + `/scheduler/maximum-ride-time?method=formula&byDistance=${byDistance}`, {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: [request]\n        });\n        maxRideTime = maxRiderTimeResponse[0].maximumRideTime;\n        const max = maxRideTime.split(':');\n        totalMinutes = Number(max[0] * 60) + Number(max[1]) + Number(max[2] / 60);\n        retMaxRideTime = (0, _moment.default)(rTime).add(totalMinutes + 1, 'minutes');\n      }\n\n      return retMaxRideTime;\n    },\n\n    async validateRecords() {\n      let checkOverlap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      let valid = true;\n      this.set('editModal.errors', []);\n      const legsInBooking = this.get('legsInBooking');\n      const firstLeg = this.get('legsInBooking.firstObject');\n      const pickAddress = firstLeg.get('segments.firstObject.pick.place.address.postalCode');\n      const dropAddress = firstLeg.get('segments.lastObject.drop.place.address.postalCode');\n      const requestTimeAvailableLegs = legsInBooking.filter(leg => (0, _moment.default)(leg.get('requestTime')).isValid());\n      const isValid = this.validatePhoneNumber();\n      const selectedRider = this.get('selectedRiders.firstObject');\n      const requestTimes = legsInBooking.map(leg => leg.get('requestTime'));\n      const tripOverlap = checkOverlap ? await this.get('booking').overlapCheck(selectedRider.get('id'), requestTimes, []) : null;\n\n      if (!this.get('isLoadAndUnLoadTimeValid')) {\n        this.get('booking').showErrorMessage('Load/Unload time value must be 15 min or less.');\n        valid = false;\n      }\n\n      if (!this.get('isLoadAndUnLoadTimeNumber')) {\n        this.get('booking').showErrorMessage('Please enter valid numbers for load/unload time.');\n        valid = false;\n      }\n\n      if (requestTimeAvailableLegs.length !== legsInBooking.length) {\n        this.get('booking').showErrorMessage('Request time is missing. Please enter a valid time.');\n        valid = false;\n      }\n\n      if (Ember.isEmpty(pickAddress) || Ember.isNone(pickAddress)) {\n        this.get('booking').showErrorMessage('Unknown Address. Please enter a valid Pickup Leg address.');\n        valid = false;\n      }\n\n      if (Ember.isEmpty(dropAddress) || Ember.isNone(dropAddress)) {\n        this.get('booking').showErrorMessage('Unknown Address. Please enter a valid DropOff Leg address.');\n        valid = false;\n      }\n\n      if (!this.validateIfPickPresentInAllLegs()) {\n        const message = this.get('purpose') === 'trip' ? 'leg' : 'return';\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid Pickup ${message} address.`);\n        valid = false;\n      }\n\n      if (!this.validateIfDropPresentInAllLegs()) {\n        const message = this.get('purpose') === 'trip' ? 'leg' : 'return';\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid DropOff ${message} address.`);\n        valid = false;\n      }\n\n      if (!this.validateLegRequestTimeAfterPrevLegRequestTime()) {\n        this.get('booking').showErrorMessage(\"The additional trip's request time must come after the previous trip's request time.\");\n        valid = false;\n      }\n\n      if (this.validateCutOffInAllSubsequentLegs()) {\n        this.get('booking').showErrorMessage(`Same day booking must be at least ${CUT_OFF_TIME_FOR_SAMEDAY * 60} mins in advance. Please select a different request time.`);\n        valid = false;\n      }\n\n      if (!this.validateEligibility(firstLeg)) {\n        this.set('selectedLegDate', (0, _moment.default)(firstLeg.get('requestTime')).format('M/D/Y'));\n        this.get('booking').showErrorMessage(`${this.get('riderToBook.firstName')} ${this.get('riderToBook.lastName')}\n      has no client eligibility records for the date \\n  ${this.get('selectedLegDate')} . Please select another date.`);\n        valid = false;\n      }\n\n      if (!this.checkEveryLegHasAnchor()) {\n        this.get('booking').showErrorMessage('Please enter request type.');\n        valid = false;\n      }\n\n      if (!this.checkEveryLegHasRequestTime()) {\n        this.get('booking').showErrorMessage('Please enter date and time.');\n        valid = false;\n      }\n\n      const emptyTravelNeedsLegIndexes = this.validateEmptyTravelNeeds();\n\n      if (emptyTravelNeedsLegIndexes.length) {\n        emptyTravelNeedsLegIndexes.forEach(index => {\n          this.get('booking').showErrorMessage(`Please remove empty Travel needs in Leg Trip ${index + 1} to proceed.`);\n        });\n        valid = false;\n      }\n\n      if (!this.validateFutureBookingTimeline()) {\n        this.get('booking').showErrorMessage('Trip date must be within the allowed booking timeframe.');\n        valid = false;\n      }\n\n      if (!isValid) {\n        this.get('booking').showErrorMessage('Please enter 10 digit in the Phone number field.');\n        valid = false;\n      }\n\n      if (this.validatePickAndDropPhoneNumber()) {\n        this.get('booking').showErrorMessage('Please enter 10 digit in the Phone number field.');\n        valid = false;\n      }\n\n      if (Ember.isPresent(tripOverlap) && tripOverlap.overlaps.find(overlap => overlap.isOverlapping)) {\n        valid = await this.get('booking').showOverlapWarningMessage(tripOverlap);\n      }\n\n      return valid;\n    },\n\n    // when the date of the first leg changes . all the date should change\n    onFirstLegDateChange() {\n      const rTime = this.get('legsInBooking.firstObject.requestTime');\n      const firstLegScheduleName = this.get('legsInBooking.firstObject.scheduleName');\n      const firstLegDateAndTime = (0, _moment.default)(rTime);\n      const firstLegYear = firstLegDateAndTime.year();\n      const firstLegMonth = firstLegDateAndTime.month();\n      const firstLegDay = firstLegDateAndTime.date();\n\n      for (let i = 1; i < this.get('legsInBooking').length; i++) {\n        const leg = this.get('legsInBooking').objectAt(i);\n        const legDateAndTime = (0, _moment.default)(leg.get('requestTime'));\n        legDateAndTime.year(firstLegYear);\n        legDateAndTime.month(firstLegMonth);\n        legDateAndTime.date(firstLegDay);\n        const legDateObjectWithTime = legDateAndTime.toDate();\n        leg.set('requestTime', legDateObjectWithTime);\n\n        if (Ember.isPresent(firstLegScheduleName)) {\n          leg.set('scheduleName', firstLegScheduleName);\n        }\n      }\n    },\n\n    validateFutureBookingTimeline() {\n      const legsInBooking = this.get('activeLegsInBooking');\n      const currentDate = new Date();\n      const maxDate = new Date();\n      maxDate.setHours(24, 0, 0);\n      const newDate = (0, _moment.default)(currentDate);\n      const futureMaxDate = (0, _moment.default)(maxDate);\n\n      for (let i = 0; i < legsInBooking.length; i++) {\n        const previousLeg = legsInBooking.objectAt(i);\n        const previousLegRequestTime = (0, _moment.default)(previousLeg.get('requestTime'));\n        const futureBookingTimeline = futureMaxDate.clone().add(FUTURE_BOOKING_TIMELINE, 'days');\n        const nextLeg = legsInBooking.objectAt(i + 1); //if the date field is empty it returns invalid date when we take moment value\n\n        if (previousLegRequestTime.isValid() && !previousLegRequestTime.isBetween(newDate, futureBookingTimeline)) {\n          return false;\n        }\n\n        if (nextLeg) {\n          const nextLegRequestTime = (0, _moment.default)(nextLeg.get('requestTime')); //if the date field is empty it returns invalid date when we take moment value\n\n          if (nextLegRequestTime.isValid() && !nextLegRequestTime.isBetween(newDate, futureBookingTimeline)) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    },\n\n    validateEligibility(leg) {\n      const requestTimeOfLeg = leg.get('requestTime');\n      const momentedRequestTime = (0, _moment.default)(requestTimeOfLeg);\n      const suspensions = this.get('riderToBook.suspensions');\n      const eligibilities = this.get('riderToBook.eligibilities');\n      let isSuspended = false;\n\n      for (const suspension of suspensions) {\n        isSuspended = momentedRequestTime.isBetween(suspension.startDate, suspension.endDate, 'day', '[]');\n\n        if (isSuspended) {\n          return false;\n        }\n      } // Checking the rider eligibility\n\n\n      let hasValidEligibility = false;\n\n      for (const eligibility of eligibilities) {\n        const eligible = momentedRequestTime.isBetween(eligibility.from, eligibility.to, 'day', '[]');\n\n        if (eligible) {\n          hasValidEligibility = true;\n        }\n      }\n\n      return hasValidEligibility;\n    },\n\n    validateCutOff(leg) {\n      const requestTimeOfLeg = leg.get('requestTime');\n      const momentedRequestTime = (0, _moment.default)(requestTimeOfLeg);\n      const anchor = leg.get('anchor') ? leg.get('anchor').toLowerCase() : '';\n\n      if (momentedRequestTime.isSame((0, _moment.default)(), 'day') && anchor === PICK) {\n        const today = new Date();\n        const todayWithOneHourExtended = new Date(today);\n        todayWithOneHourExtended.setHours(todayWithOneHourExtended.getHours() + CUT_OFF_TIME_FOR_SAMEDAY);\n\n        if (momentedRequestTime.isBefore(todayWithOneHourExtended) && CUT_OFF_TIME_FOR_SAMEDAY !== 0) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    validateLegRequestTimeAfterPrevLegRequestTime() {\n      const legsInBooking = [...this.get('tripLegsInBooking').toArray(), ...this.get('returnTripLegsInBooking').toArray()];\n\n      if (legsInBooking.length <= 1) {\n        return true;\n      }\n\n      for (let i = 1; i < legsInBooking.length; i++) {\n        const prevLeg = legsInBooking[i - 1];\n        const prevlegRequestime = (0, _moment.default)(prevLeg.get('requestTime')).seconds(0).milliseconds(0);\n        const curLeg = legsInBooking[i];\n        const curLegRequestTime = (0, _moment.default)(curLeg.get('requestTime')).seconds(0).milliseconds(0); //Compares each leg requestTime with previous leg requestTime\n\n        if (curLegRequestTime.isSameOrBefore(prevlegRequestime)) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    //segment stop phone number validation\n    validatePickAndDropPhoneNumber() {\n      const legsInBooking = [...this.get('tripLegsInBooking').toArray(), ...this.get('returnTripLegsInBooking').toArray()];\n      const filteredLegs = legsInBooking.filter(leg => {\n        const pickPhoneNumber = leg.get('segments.firstObject.pick.phoneNumbers.firstObject.fullPhoneNumber');\n        const dropPhoneNumber = leg.get('segments.firstObject.drop.phoneNumbers.firstObject.fullPhoneNumber');\n        const isValid = this.phoneNumberValidation(pickPhoneNumber) || this.phoneNumberValidation(dropPhoneNumber);\n        return isValid;\n      });\n      return filteredLegs.length;\n    },\n\n    //check if the phone numbers have required length\n    phoneNumberValidation(phoneNumber) {\n      return phoneNumber && phoneNumber.length > 0 && phoneNumber.length < PHONE_NUMBER_LENGTH;\n    },\n\n    checkIfLegIsFirstLeg(leg) {\n      const legsInBooking = this.get('activeLegsInBooking');\n      const indexOfLeg = legsInBooking.indexOf(leg);\n\n      if (indexOfLeg > 0) {\n        return false;\n      }\n\n      return true;\n    },\n\n    combineServiceNeedsForGroupBooking() {\n      const serviceNeeds = this.get('booking.selectedRiders').map(rider => rider.serviceNeeds);\n      const uniqServiceNeeds = (0, _lodash.uniq)((0, _lodash.flattenDeep)(serviceNeeds));\n      this.set('serviceNeeds', uniqServiceNeeds);\n    },\n\n    /**\n     * when there is  no trip, this method will be called and close the spinner\n     * @param ruleContext\n     */\n    noTripActionHandler(ruleContext) {\n      console.log('noTripActionHandler : rule outcome map: ', ruleContext.outComeMap);\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    /**\n     * when itp server api is failed, this method will be called and showed the warning message\n     * @param ruleContext\n     */\n    itpRequestFailureHandler(ruleContext) {\n      console.log('itpRequestFailureHandler : rule outcome map: ', ruleContext.outComeMap);\n      this.get('notifications').warning('Failed to request ITP server');\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    eligibilityErrorHandler(ruleContext) {\n      console.log('eligibilityErrorHandler : rule outcome map: ', ruleContext.outComeMap);\n      const {\n        errorInfo\n      } = ruleContext;\n      this.get('notifications').warning(errorInfo.message);\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    overridePermissionHandler(ruleContext) {\n      console.log('overridePermissionHandler : rule outcome map: ', ruleContext.outComeMap);\n      this.set('showOnlyEligibilityOkButton', true);\n      this.set('riderIdConditionsMap', this.get('booking').getRiderIdToConditionsMap(ruleContext.riderConditionsResultMap, false));\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n      this.set('overrideEligibilityConditionsGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideEligibilityConditions));\n    },\n\n    /**\n     * if user have  permission to override the service mode, show eligibility modal with 'yes' and 'no' button\n     * @param ruleContext\n     * @returns {Promise}\n     */\n    overrideConditionPreActionHandler(ruleContext) {\n      return new Promise(resolve => {\n        ruleContext.overrideCondition = true;\n        this.set('booking.overrideEligibility', true);\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        resolve();\n      });\n    },\n\n    /**\n     * if taxi not allowed ,  the method will be called\n     * @param ruleContext\n     */\n    taxiRequestHandler(ruleContext) {\n      this.setItpInfo(ruleContext);\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n      const {\n        itpRequestResults\n      } = ruleContext;\n      const travelModeMapper = {};\n      (0, _lodash.forEach)(itpRequestResults, (value, key) => {\n        const travelModes = ['taxi']; // if the workflow resolves  itp  itinerary segments, show itp as default in service mode drop down\n\n        if (this.hasValidItpResult(ruleContext, key)) {\n          travelModes.unshift('itp');\n        }\n\n        travelModeMapper[key] = travelModes;\n      });\n      console.log('taxiRequestHandler : rule outcome map: ', ruleContext.outComeMap);\n      this.set('travelModeMapper', travelModeMapper);\n      this.fetchPromiseTime();\n    },\n\n    /**\n     * if taxi not allowed ,  the method will be called\n     * @param ruleContext\n     */\n    paraTransitHandler(ruleContext) {\n      this.setItpInfo(ruleContext);\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n      const {\n        itpRequestResults\n      } = ruleContext;\n      const travelModeMapper = {};\n      (0, _lodash.forEach)(itpRequestResults, (value, key) => {\n        const travelModes = ['paratransit', 'broker']; // if the workflow resolves  itp  itinerary segments, show itp as default in service mode drop down\n\n        if (this.hasValidItpResult(ruleContext, key)) {\n          travelModes.unshift('itp');\n        }\n\n        travelModeMapper[key] = travelModes;\n      });\n      this.set('travelModeMapper', travelModeMapper);\n      this.fetchPromiseTime();\n    },\n\n    async itpRequestHandler(ruleContext) {\n      this.setItpInfo(ruleContext);\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n      const {\n        itpRequestResults\n      } = ruleContext;\n      const travelModeMapper = {};\n      (0, _lodash.forEach)(itpRequestResults, (value, key) => {\n        travelModeMapper[key] = ['itp'];\n      });\n      this.set('travelModeMapper', travelModeMapper);\n      this.fetchPromiseTime();\n    },\n\n    hasValidItpResult(ruleContext, legIndex) {\n      const {\n        itpRequestResults,\n        itpResultType\n      } = ruleContext;\n      return itpRequestResults.length && itpResultType[legIndex] !== _itineraryType.NO_SOLUTION;\n    },\n\n    setGlobalRiderFareCategory() {\n      const selectedRiders = this.get('selectedRiders');\n      const ridersLegs = this.get('booking.activeLegsInBooking');\n      const localFareCategorySelections = {};\n      selectedRiders.forEach((selectedRider, index) => {\n        let fareCategory = null;\n\n        for (let i = 0; i < ridersLegs.length; i++) {\n          const leg = ridersLegs[i];\n          const riderId = leg.get('rider.id');\n\n          if (riderId === selectedRider.get('id')) {\n            // fareCategory is an async belongsTo, so this resolves to a promise proxy:\n            // reading `.id` straight off it trips Ember's proxy assertion, and an empty\n            // proxy also isn't isNone(), so unwrap before either check. Only a rider with\n            // two or more legs in the booking reaches the comparison, which is why this\n            // only shows up when editing a multi-leg booking.\n            const legFareCategory = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.fareCategory'));\n\n            if (Ember.isNone(fareCategory) || !Ember.isNone(legFareCategory) && legFareCategory.id < fareCategory.id) {\n              fareCategory = legFareCategory;\n            }\n          }\n        }\n\n        localFareCategorySelections[index] = _lodash.default.defaultTo(fareCategory, _lodash.default.get(selectedRider, 'rider.fareCategory', null));\n      });\n      this.set('booking.activeBooking.localFareCategorySelections', localFareCategorySelections);\n    },\n\n    getFareCategory(riderIndex, selectedFareCategory) {\n      if (Ember.isNone(selectedFareCategory)) {\n        const localFareCategorySelections = this.get('booking.activeBooking.localFareCategorySelections');\n        return localFareCategorySelections[riderIndex];\n      }\n\n      return selectedFareCategory;\n    },\n\n    async updateFare() {\n      const riderLegsTravelNeeds = this.get('booking.activeBooking.riderLegsTravelNeeds');\n\n      if (!Ember.isNone(riderLegsTravelNeeds)) {\n        const selectedRiders = this.get('booking.selectedRiders');\n\n        for (let i = 0; i < selectedRiders.length; i++) {\n          await this.updateFareForRider(i);\n        }\n      }\n    },\n\n    async updateFareForRider(riderIndex, selectedFareCategory) {\n      const riderLegsTravelNeeds = this.get('booking.activeBooking.riderLegsTravelNeeds');\n\n      if (Ember.isNone(riderLegsTravelNeeds)) {\n        return;\n      }\n\n      const riderFareCategory = this.getFareCategory(riderIndex, selectedFareCategory);\n      const updateTargets = [riderLegsTravelNeeds[riderIndex]];\n\n      for (const riderLegsData of updateTargets) {\n        const {\n          rider,\n          travelNeedLegs,\n          isAllLegs\n        } = riderLegsData;\n        const fareCategoryId = riderFareCategory.get('id');\n        let sameFare = null;\n\n        if (isAllLegs && travelNeedLegs.length > 0) {\n          const sampleTravelNeeds = travelNeedLegs[0].nonClonedTravelNeeds;\n          sameFare = await this.get('fareCalc').calcFareByRiderIdAndTravelNeeds(rider, sampleTravelNeeds, true, fareCategoryId);\n        }\n\n        for (const legData of travelNeedLegs) {\n          const nonClonedTravelNeeds = legData.nonClonedTravelNeeds;\n          const fareForLeg = isAllLegs ? sameFare : await this.get('fareCalc').calcFareByRiderIdAndTravelNeeds(rider, nonClonedTravelNeeds, true, fareCategoryId);\n\n          if (legData.segments) {\n            for (const segment of legData.segments) {\n              Ember.set(segment, 'fareCategory', riderFareCategory);\n              Ember.set(segment, 'fare', fareForLeg);\n            }\n          }\n\n          if (!legData.segment) {\n            Ember.set(legData, 'segment', {});\n          }\n\n          Ember.set(legData.segment, 'fareCategory', riderFareCategory);\n          Ember.set(legData.segment, 'fare', fareForLeg);\n        }\n      }\n    },\n\n    syncAllLegsTravelNeeds() {\n      const store = this.get('store');\n      const isAllLegs = this.get('booking.isAllLegs');\n      if (!isAllLegs) return;\n      const allLegs = this.get('booking.activeBooking.legs').toArray();\n      const srcLeg = allLegs[0];\n\n      for (let i = 1; i < allLegs.length; i++) {\n        const dstLeg = allLegs[i];\n        const srcTravelNeeds = srcLeg.get('legTravelNeeds');\n        const dstTravelNeeds = dstLeg.get('legTravelNeeds');\n\n        for (let j = 0; j < srcTravelNeeds.length; j++) {\n          const srcTravelNeed = srcTravelNeeds.objectAt(j);\n          const dstTravelNeed = dstTravelNeeds.objectAt(j);\n\n          if (dstTravelNeed) {\n            dstTravelNeed.setProperties({\n              count: srcTravelNeed.get('count'),\n              isCountDisabled: srcTravelNeed.get('isCountDisabled'),\n              travelNeedType: srcTravelNeed.get('travelNeedType')\n            });\n          } else {\n            const newTravelNeed = store.createRecord('leg-travel-need', {\n              count: srcTravelNeed.get('count'),\n              isCountDisabled: srcTravelNeed.get('isCountDisabled'),\n              travelNeedType: srcTravelNeed.get('travelNeedType'),\n              passengerType: store.peekRecord('passenger-type', 'client')\n            });\n            dstTravelNeeds.pushObject(newTravelNeed);\n          }\n        }\n\n        if (srcTravelNeeds.get('length') > 0 && dstTravelNeeds.get('length') > srcTravelNeeds.get('length')) {\n          dstTravelNeeds.removeAt(srcTravelNeeds.get('length'), dstTravelNeeds.get('length') - srcTravelNeeds.get('length'));\n        }\n      }\n    },\n\n    executeEligibilityRules() {\n      // clear itp info and selected travel mode in booking service, before executing rule\n      this.get('booking').setItpInfo();\n      this.get('booking').setSelectedTravelMode(); // create new   rule context\n\n      const eligibilityRuleContext = new _eligibilityRuleContext.default(this.get('store'), this.get('booking'), this.get('tooltip'), this.get('systemConfig'), this.get('permissionLayer')); // build rule graph\n\n      const eligibilityRuleBuilder = new _eligibilityRuleBuilder.default();\n      const rootRule = eligibilityRuleBuilder.buildRuleGraph(this.noTripActionHandler.bind(this), this.itpRequestFailureHandler.bind(this), this.taxiRequestHandler.bind(this), this.paraTransitHandler.bind(this), this.overrideConditionPreActionHandler.bind(this), this.overridePermissionHandler.bind(this), this.itpRequestHandler.bind(this), this.eligibilityErrorHandler.bind(this)); // execute the rule, after execute the rule  one of the action handlers will be called by one of the rule\n\n      this.get('workspace').set('isGlobalSpinnerVisible', true); // rules with async call  are executed\n\n      eligibilityRuleBuilder.execute(rootRule, eligibilityRuleContext);\n    },\n\n    /**\n     * create temp booking and fetch promise time after that, show booking details  screen\n     * @returns {Promise<void>}\n     */\n    async fetchPromiseTime() {\n      const isEditMode = this.get('isEditMode');\n      const isCallBackBookingModeType = this.get('booking').isCallBackBookingModeType();\n\n      try {\n        if (this.get('booking.enableNewPromiseTimeApi')) {\n          // TODO  to remove later after fixing backend api\n          this.get('workspace').set('isGlobalSpinnerVisible', true); // regarding issue - NYAAR-17345\n\n          if (!isEditMode) {\n            this.set('booking.activeBooking.status', 'Unscheduled');\n          } // update the active booking before fetching promise time\n\n\n          if (isEditMode) {\n            const curBookingStatus = this.get('booking.activeBooking.status');\n            const defaultBookingData = this.get('defaultBookingData');\n            await this.get('booking').saveBooking(isEditMode, defaultBookingData);\n\n            if (curBookingStatus === 'failed' || isCallBackBookingModeType && curBookingStatus === 'Unscheduled' && this.get('booking.activeBooking.firstTrip.status') === 'callback') {\n              const activeBookingID = this.get('booking.activeBooking.id');\n              const tripCancelJobs = await this.get('booking').deleteBooking(activeBookingID, 'edit');\n              const asynOperationInfoArray = tripCancelJobs ? tripCancelJobs.tripCancelJobs : [];\n\n              for (const tripCancelInfo of asynOperationInfoArray) {\n                if (tripCancelInfo) {\n                  await this.get('booking').callScheduleAsyncOperation(tripCancelInfo);\n                }\n              }\n\n              await this.get('booking').deleteTrips(activeBookingID);\n            }\n          } // clear temp booking info\n\n\n          this.get('booking').setTemporaryBookingInfo();\n          const bookingMode = this.get('booking').getBookingMode(); // create temp booking and call postAddBookingTripOperation  api to  get promise time for each legs\n\n          const temporaryBookingResult = await this.get('booking').saveBookingWithPromiseTime(bookingMode);\n          let bookingId = null; // checking the result because temporaryBookingResult gets different format depending on same day or not\n\n          if (temporaryBookingResult.constructor === Array) {\n            bookingId = temporaryBookingResult.firstObject.relationships ? temporaryBookingResult.firstObject.relationships.booking.data.id : temporaryBookingResult.firstObject.booking;\n          } else {\n            bookingId = temporaryBookingResult.booking || temporaryBookingResult.bookingId;\n          }\n\n          const bookingByID = `eq(id,(${bookingId}))&include=group,legs,legs.segments,legs.legTravelNeeds,legs.segments.pick,legs.segments.drop,subscription`;\n          const booking = await this.get('store').query('booking', {\n            filter: bookingByID\n          });\n\n          if (this.get('passedADACheck')) {\n            if (this.get('isStopOutisdeADABoundary')) {\n              await this.createADAEligibilityActivity(bookingId, true);\n            } else {\n              await this.createADAEligibilityActivity(bookingId, false);\n            }\n          } //NYAAR-19192-for updating the certification location places\n\n\n          await this.get('booking').updateCertificationLocationPlace(booking); //save segment stop phone number\n\n          await this.get('booking').saveSegmentStopPhoneNumber(booking); // NYAAR-18800 If the Rider Does not have a service-need , we dont need to save the service-need\n\n          const serviceNeedAvailableRider = this.get('booking.selectedRiders').filter(rider => !Ember.isEmpty(rider.serviceNeeds));\n\n          if (serviceNeedAvailableRider.length) {\n            await this.get('booking').saveLegServiceNeed(booking);\n          }\n\n          await this.get('booking').processPromiseTimeAsyncOperation(temporaryBookingResult, booking);\n          await this.updateBookingTripGrid();\n          this.toggleProperty('showBookingSummary');\n        }\n      } catch (err) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        const message = isEditMode ? 'Failed to update Booking' : 'Failed to create Booking';\n        this.get('notifications').warning(message);\n      }\n    },\n\n    async createADAEligibilityActivity(bookingId, failCheck) {\n      const adaOverride = this.get('adaOverride');\n      const store = this.get('store');\n      const eligibility = this.get('riderADAEligibility');\n      if (Ember.isNone(eligibility)) return;\n      const adaEligibilityCat = store.peekRecord('eligibility-category', eligibility.get('eligibilityCategory.id'));\n      const booking = store.peekRecord('booking', bookingId);\n      const activityLogAdapter = store.adapterFor('activity-log');\n      const context = {\n        booking\n      };\n      let activity = failCheck ? 'Failed ADA Eligibility Check' : 'Passed ADA Eligibility Check';\n      let details = failCheck ? 'Booking checked for ADA Eligibility and determined to be ineligible.' : 'Booking checked for ADA Eligibility and determined to be eligible.';\n      let content = {\n        userId: this.session.data.authenticated.userId,\n        actualTime: (0, _moment.default)().toDate(),\n        activity: activity,\n        details: details\n      };\n      activityLogAdapter.createUserbookingActivity({\n        content\n      }, context, false);\n\n      if (adaOverride) {\n        activity = 'Override Eligibility';\n        details = `Eligibility condition ${adaEligibilityCat.get('displayName')} override.`;\n        content = {\n          userId: this.session.data.authenticated.userId,\n          actualTime: (0, _moment.default)().toDate(),\n          activity: activity,\n          details: details\n        };\n        activityLogAdapter.createUserbookingActivity({\n          content\n        }, context, false);\n      }\n    },\n\n    setItpInfo(ruleContext) {\n      const {\n        itpRequestResults,\n        itpResultType,\n        hasOverrideITP\n      } = ruleContext;\n      this.get('booking').setItpInfo(itpRequestResults, itpResultType, hasOverrideITP);\n    },\n\n    resetFieldValues() {\n      const defaultBookingData = this.get('defaultBookingData');\n      const loadUnloadMapper = defaultBookingData.get('loadUnloadMapper');\n      const selectedAllLeg = defaultBookingData.get('selectedAllLeg');\n      const legTravelNeeds = defaultBookingData.get('legTravelNeeds').toArray();\n      this.set('legTravelNeeds', legTravelNeeds);\n      const legs = defaultBookingData.get('legs').toArray();\n      const legSegments = defaultBookingData.get('legSegments').toArray();\n      this.setIsAllLegState(selectedAllLeg);\n      legs.forEach((leg, index) => {\n        const legSegment = legSegments[index];\n        const loadUnloadLeg = loadUnloadMapper[index];\n        const clonedPickPlace = this.clonePlaceRecord((0, _unwrapProxy.unwrapProxy)(legSegment.get('pickPlace')));\n        const clonedDropPlace = this.clonePlaceRecord((0, _unwrapProxy.unwrapProxy)(legSegment.get('dropPlace')));\n        const pickPhoneNumbers = legSegment.get('pickPhoneNumbers');\n        const dropPhoneNumbers = legSegment.get('dropPhoneNumbers'); //create pick segment-stop-phone-number model when undo the pick phone number\n\n        if (pickPhoneNumbers.length) {\n          const pickPhoneNumber = pickPhoneNumbers.firstObject; // Reg - NYAAR-20245\n\n          pickPhoneNumber.rollbackAttributes();\n        } //create drop segment-stop-phone-number model when undo the drop phone number\n\n\n        if (dropPhoneNumbers.length) {\n          const dropPhoneNumber = dropPhoneNumbers.firstObject; // Reg - NYAAR-20245\n\n          dropPhoneNumber.rollbackAttributes();\n        }\n\n        leg.set('segments.firstObject.pick.place', clonedPickPlace);\n        leg.set('segments.lastObject.drop.place', clonedDropPlace);\n        leg.set('segments.firstObject.pick.phoneNumbers', pickPhoneNumbers);\n        leg.set('segments.firstObject.drop.phoneNumbers', dropPhoneNumbers);\n        leg.set('segments.lastObject.drop.notes', legSegment.get('dropNotes'));\n        leg.set('segments.firstObject.pick.notes', legSegment.get('pickNotes'));\n        leg.set('segments.firstObject.fare', legSegment.get('fare'));\n        leg.set('serviceWindow', legSegment.get('serviceWindow'));\n        leg.set('fundingAgency', legSegment.get('fundingAgency'));\n        leg.set('segment.noSharing', legSegment.get('noSharing'));\n        leg.set('anchor', legSegment.get('anchor'));\n        leg.set('requestTime', legSegment.get('requestTime'));\n        leg.set('loadTime', loadUnloadLeg.loadTime);\n        leg.set('unloadTime', loadUnloadLeg.unloadTime);\n        leg.set('legTravelNeeds', legTravelNeeds);\n      });\n      this.set('booking.activeBooking.legs', legs); // NYAAR-19387: Passenger List phoneNumber and notes are should not save when closing the create and edit booking screen\n\n      const riderNotes = defaultBookingData.get('riderNotes');\n      const rider = defaultBookingData.get('rider');\n      const riderPhoneNumbers = defaultBookingData.get('riderPhoneNumbers');\n      rider.forEach((riderData, index) => {\n        const formattedPhoneNumber = riderPhoneNumbers[index];\n        riderData.set('notes', riderNotes[index]);\n        riderData.set('formattedPhoneNumber', formattedPhoneNumber);\n      });\n    },\n\n    /**\n    *Resetting field states(collapse) while clicking undo button\n    */\n    resetFieldStates() {\n      const defaultBookingData = this.get('defaultBookingData');\n      const legs = defaultBookingData.get('legs').toArray();\n      const hasReturnLeg = legs.toArray().find(ltn => ltn.get('purpose') === 'return');\n      this.set('pickAddressText', '');\n      this.set('dropAddressText', '');\n\n      if (!hasReturnLeg) {\n        this.set('returnTripCollapseState', 'collapsed');\n      } else {\n        this.set('returnTripCollapseState', 'expanded');\n      }\n\n      if (this.get('travelNeedCollapseState') === 'expanded') this.set('travelNeedCollapseState', 'collapsed');\n      if (this.get('passengerCollapseState') === 'expanded') this.set('passengerCollapseState', 'collapsed');\n      if (this.get('serviceNeedCollapseState') === 'expanded') this.set('serviceNeedCollapseState', 'collapsed');\n    },\n\n    clearPickAndDropAddressText() {\n      this.set('pickAddressText', '');\n      this.set('dropAddressText', '');\n    },\n\n    /**\n     * Reg - NYAAR-18838 show same day notification if user has booking permission\n     * ( isSameDayBookingPermGranted , isFutureDayBookingPermGranted )\n     * @param {Date} requestTime\n     * @returns {boolean}\n     */\n    showSameDayNotificationByPermission(requestTime) {\n      const userBookingPermissionDetails = this.get('booking').getUserBookingPermissionDetail();\n      const isSameDayBookingPermGranted = userBookingPermissionDetails.isSameDayBookingPermGranted;\n      const isFutureDayBookingPermGranted = userBookingPermissionDetails.isFutureDayBookingPermGranted;\n      const currentDay = (0, _moment.default)().format('L');\n      const futureDayBookingErrorMessage = \"TODAY'S DATE IS SELECTED. PLEASE ENSURE THIS IS CORRECT.\"; // if user has both sameDayBooking and futureDayBooking Permission and choose a current date\n\n      if (isSameDayBookingPermGranted && isFutureDayBookingPermGranted && (0, _moment.default)(requestTime.format('L')).isSame(currentDay)) {\n        this.get('notifications').warning(futureDayBookingErrorMessage);\n      }\n    },\n\n    /**\n     *NYAAR-19105-UNDO button does not reset the Phone Field in the Trip details of Create booking and edit booking\n     * @param {*} phoneNumberAttr(phone number model data)\n     * @returns segment stop phone number model\n     */\n    createSegmentStopPhoneNumRecord(phoneNumberAttr) {\n      const phoneNumberRecord = this.get('store').createRecord('segment-stop-phone-number', phoneNumberAttr);\n      return [phoneNumberRecord];\n    },\n\n    /**\n     * NYAAR-18789 :converts scheduleDate for overLaping schedule with curretLegDate\n     * @param {*DateTimeFormat} selectedDate\n     * @param {*DateTimeFormat} currentLegTime\n     * @returns {*DateTimeFormat}\n     */\n    getOverLapDate(selectedDate, currentLegTime) {\n      const currentDateAndTime = (0, _moment.default)(currentLegTime);\n      selectedDate.hour(currentDateAndTime.hour());\n      selectedDate.minutes(currentDateAndTime.minutes());\n      selectedDate.seconds(currentDateAndTime.seconds());\n      const selectedDateObjectWithTime = selectedDate.toDate();\n      return selectedDateObjectWithTime;\n    },\n\n    /**\n     * NYAAR-18789 : setting overlap scheduleDate to each trip-legs\n     * @param {*} scheduleStart\n     */\n    overlapRequestTimeSet(scheduleStart) {\n      const tripsInBooking = this.get('tripLegsInBooking');\n      const ReturnTripsInBooking = this.get('returnTripLegsInBooking');\n      const allTripsInBooking = [...tripsInBooking, ...ReturnTripsInBooking];\n      allTripsInBooking.forEach(trip => {\n        const currentLegRequestTime = trip.get('requestTime');\n        const currentRequestDate = this.get('getOverLapDate')((0, _moment.default)(scheduleStart), currentLegRequestTime);\n        trip.set('requestTime', currentRequestDate);\n      });\n    },\n\n    /**\n     * NYAAR-18789 : cleanning errorMessage for overLap warning-pop\n     */\n    overlapErrorMessageClean() {\n      this.set('booking.isScheduleOverLap', false);\n    },\n\n    /**\n     * NYAAR-18789 : reset overlap scheduleDate to each trip-legs(for cancle-button)\n     */\n    overlapScheduleLegReset() {\n      const availableSchedules = this.get('booking.availableSchedules');\n\n      if (availableSchedules.length > 1) {\n        const previousLegTime = this.get('booking.firstLegRequestTime');\n        this.overlapRequestTimeSet(previousLegTime);\n      }\n    },\n\n    //all selected riders fare category as backup for future use\n    setRiderFareCategories() {\n      const riderFareCategories = this.get('riderFareCategories');\n      const selectedRiders = this.get('booking.selectedRiders');\n      selectedRiders.forEach(rider => {\n        if (rider.fareCategory) {\n          riderFareCategories.pushObject(rider.fareCategory);\n        }\n      });\n    },\n\n    isLocationInsidePolygons(location, blockoutRegionModel) {\n      if (Ember.isEmpty(location.get('lng')) || Ember.isEmpty(location.get('lat'))) return false;\n\n      const point = _turfHelpers.default.point([location.get('lng'), location.get('lat')]);\n\n      const regions = blockoutRegionModel.get('value.regions') || [];\n      let isInsidePolygons = false;\n      regions.forEach(region => {\n        if (region.polygon.length <= 0) return;\n        const lnglat = region.polygon.map(latlng => {\n          return [latlng[1], latlng[0]];\n        });\n\n        const polygon = _turfHelpers.default.polygon([lnglat]);\n\n        if ((0, _booleanPointInPolygon.default)(point, polygon)) {\n          isInsidePolygons = true;\n        }\n      });\n      return isInsidePolygons;\n    },\n\n    drawMarkersAndPolylines() {\n      if (!Ember.isPresent(this.get('map'))) {\n        return;\n      }\n\n      this.get('layerGroup').clearLayers();\n      const legsInBooking = this.booking.get('activeLegsInBooking') ? this.booking.get('activeLegsInBooking').toArray() : [];\n      const allSegments = [];\n      legsInBooking.forEach(leg => {\n        const segments = leg.get('segments').toArray();\n        const validSegments = segments.filter(segment => {\n          return segment.get('pick.place.location.lat') && segment.get('drop.place.location.lat');\n        });\n        allSegments.push(...validSegments); //NYAAR-18714: while editing the itp booking, more than one segments are present and so map adds pin-points to all segments\n\n        if (segments.length > 1 && this.get('isEditMode')) {\n          const picksegment = segments.get('firstObject.pick.place.location');\n          const dropsegment = segments.get('lastObject.drop.place.location');\n          const legMarkers = [picksegment, dropsegment];\n          const validMarkers = legMarkers.filter(marker => {\n            return marker.get('lat') && marker.get('lng');\n          });\n          validMarkers.forEach(marker => {\n            this.drawMarker(marker);\n          });\n          this.drawPolyline(segments.get('firstObject.pick'), segments.get('lastObject.drop'));\n        } else {\n          segments.forEach(segment => {\n            const legMarkers = [segment.get('pick.place.location'), segment.get('drop.place.location')];\n            const validMarkers = legMarkers.filter(marker => {\n              return marker.get('lat') && marker.get('lng');\n            });\n            validMarkers.forEach(marker => {\n              this.drawMarker(marker);\n            });\n          });\n          this.drawPloylinePath(allSegments);\n        }\n      });\n    },\n\n    convertToTomTomAddress(address) {\n      return {\n        position: {\n          lat: address.lat,\n          lng: address.lng\n        },\n        address: {\n          streetNumber: address.streetNumber,\n          streetName: address.streetAddress,\n          city: address.locality,\n          state: address.region,\n          postalCode: address.postalCode,\n          freeformAddress: address.fullAddress\n        }\n      };\n    },\n\n    async updateAlternativeAddressSelection(address, placeModel) {\n      const bookingService = this.get('booking');\n      const addressSelectType = bookingService.get('addressSelectType');\n      const tomtomAddress = this.convertToTomTomAddress(address);\n      const beNomadAddress = placeModel.get('address.beNomadAddress');\n      bookingService.setActiveDragPlace(placeModel);\n      bookingService.setEmptyAddressLocation(placeModel);\n      const addressModel = placeModel.get('address');\n      const latlng = {\n        lat: address.lat,\n        lng: address.lng\n      };\n      const geoNode = await bookingService.getAddressGeoNode(latlng.lat, latlng.lng, beNomadAddress, addressSelectType);\n      const zoneName = this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n      addressModel.set('zName', zoneName.get('displayName'));\n      addressModel.set('zoneName', zoneName);\n      const locationRecord = await this.store.createRecord('location', {\n        lat: parseFloat(latlng.lat.toFixed(5)),\n        lng: parseFloat(latlng.lng.toFixed(5))\n      });\n      locationRecord.set('geoNode', geoNode.geonode);\n      await bookingService.updateAddress(addressModel, tomtomAddress, geoNode.zone);\n      placeModel.set('location', locationRecord);\n      bookingService.setActiveDragPlace(null);\n      this.disableBookingSidePanel(false);\n    },\n\n    cancelAlternativeAddressOption(place) {\n      if (Ember.isEmpty(place)) return;\n      const address = place.get('address');\n      const location = place.get('location');\n      address.set('freeformAddress', '');\n      address.set('streetNumber', '');\n      address.set('streetAddress', '');\n      address.set('locality', '');\n      address.set('subLocality', '');\n      address.set('zipCode', '');\n      address.set('region', '');\n      address.set('subRegion', '');\n      address.set('postalCode', '');\n      address.set('country', '');\n      address.set('zName', '');\n      address.set('zoneName', '');\n      location.set('lat', 0);\n      location.set('lng', 0);\n      location.set('geoNode', '');\n      this.booking.setActiveAddress(address);\n      this.clearDrawnItems(BLOCKOUT_ALTERNATIVE_ADDRESS_TYPE);\n      this.disableBookingSidePanel(false);\n    },\n\n    showAltAddressMarker(address) {\n      this.updateBlockoutAlternativeAddress(address);\n    },\n\n    disableBookingSidePanel(disable) {\n      const bookingSidePanel = Ember.$('.new-booking-form-side-drawer');\n\n      if (disable) {\n        bookingSidePanel.addClass('blockout-disabled');\n      } else {\n        bookingSidePanel.removeClass('blockout-disabled');\n      }\n    },\n\n    validateBlockoutAddress(location, leg, place) {\n      if (Ember.isEmpty(leg)) return;\n      const blockoutRegionGroups = this.getBlockoutRegionGroups();\n      const requestTime = leg.get('requestTime');\n      const insideBlockoutRegion = this.checkAddressIsInsideBlockoutRegion(location, blockoutRegionGroups, requestTime);\n\n      if (Ember.isPresent(insideBlockoutRegion)) {\n        this.showAlternativeAddressesOptions(leg, place, insideBlockoutRegion);\n        this.disableBookingSidePanel(true);\n      }\n    },\n\n    checkEmptyLegTravelNeeds() {\n      const legs = this.get('legsInBooking').toArray();\n      const hasConsumableLegTravelNeeds = legs.every(leg => leg.get('legTravelNeeds').toArray().some(travelNeed => travelNeed.get('travelNeedType.isConsumable') && travelNeed.get('count') > 0));\n\n      if (hasConsumableLegTravelNeeds) {\n        return false;\n      }\n\n      return true;\n    },\n\n    checkPickOrDropAddressIsFallInsideBlockOutRegion() {\n      const legs = this.get('legsInBooking').toArray();\n      const blockoutRegionGroups = this.getBlockoutRegionGroups();\n      let isPickOrDropAddressIsFallInsideBlockOutRegion = false;\n      legs.forEach(leg => {\n        const pickLocation = leg.get('segments.firstObject.pick.place.location');\n        const dropLocation = leg.get('segments.lastObject.drop.place.location');\n        const requestTime = leg.get('requestTime');\n        const isPickAddressIsInsideBlockoutRegion = this.checkAddressIsInsideBlockoutRegion(pickLocation, blockoutRegionGroups, requestTime);\n        const isdropAddressIsInsideBlockoutRegion = this.checkAddressIsInsideBlockoutRegion(dropLocation, blockoutRegionGroups, requestTime);\n\n        if (Ember.isPresent(isPickAddressIsInsideBlockoutRegion) || Ember.isPresent(isdropAddressIsInsideBlockoutRegion)) {\n          isPickOrDropAddressIsFallInsideBlockOutRegion = true;\n          this.showBlockoutRegionFallsOutsideWarningMessage();\n        }\n      });\n      return isPickOrDropAddressIsFallInsideBlockOutRegion;\n    },\n\n    checkADABoundaries() {\n      const selectedRider = this.get('selectedRiders.firstObject');\n      const eligibilities = selectedRider.get('eligibilities');\n      const activeLegs = this.get('booking.activeBooking.legs');\n      const legsWithADAEligibility = []; // legs that have a requestTime in ADA eligibility category\n\n      activeLegs.forEach(leg => {\n        const requestTime = (0, _moment.default)(leg.get('requestTime'));\n        const eligibility = eligibilities.find(elig => {\n          const from = (0, _moment.default)(elig.from).startOf('day');\n          const to = (0, _moment.default)(elig.to).endOf('day');\n          return requestTime.isBetween(from, to) && elig.get('checkADABoundary');\n        });\n        const isADAEligibility = Ember.isPresent(eligibility) ? eligibility.get('checkADABoundary') : false;\n\n        if (isADAEligibility) {\n          this.set('riderADAEligibility', eligibility);\n          legsWithADAEligibility.push(leg);\n        }\n      });\n      if (legsWithADAEligibility.length <= 0) return false;\n      this.set('passedADACheck', true);\n      return true;\n    },\n\n    showAlternativeAddressesOptions(leg, place, blockoutRegion) {\n      const blockoutRegionSetMessage = this.get('blockoutRegionSetMessage');\n      const showAltAddressMarker = this.get('showAltAddressMarker');\n      const cancelAlternativeAddressOption = this.get('cancelAlternativeAddressOption');\n      const updateAlternativeAddressSelection = this.get('updateAlternativeAddressSelection');\n      const message = `Trip can not be saved. The pickup and/or dropoff address is located in an area that is blocked out during the requested time. \\n\\n${blockoutRegionSetMessage} \\n\\nPlease select a different address.`;\n      this.get('workspace').pushState('blockoutAlternativeAddresses', {\n        message,\n        blockoutRegion,\n        showAltAddressMarker,\n        cancelAlternativeAddressOption,\n        leg,\n        place,\n        updateAlternativeAddressSelection\n      });\n    },\n\n    showBlockoutRegionFallsOutsideWarningMessage() {\n      const tooltip = this.get('tooltip');\n      const blockoutRegionSetMessage = this.get('blockoutRegionSetMessage');\n      const message = `Trip can not be saved. The pickup and/or dropoff address is located in an area that is blocked out during the requested time. ${blockoutRegionSetMessage}. Please select a different address.`;\n      tooltip.pushConfirmation({\n        title: 'Warning',\n        hasOverlay: true,\n        tip: message,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    showEmptyConsumableTravelNeedsWarningMessage() {\n      const tooltip = this.get('tooltip');\n      const message = ' Trip must have at least one consumable travel need, for example Ambulatory or Wheelchair.';\n      tooltip.pushConfirmation({\n        title: 'Booking',\n        hasOverlay: true,\n        tip: message,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    getBlockoutRegionGroups() {\n      const blockoutRegionGroups = this.store.peekAll('cs-config-item').filter(config => {\n        return config.category === 'config-System_Configuration-speed_region_groups';\n      }).filter(blockoutRegion => {\n        return blockoutRegion.get('value.blockout');\n      });\n      return blockoutRegionGroups;\n    },\n\n    checkAddressIsInsideBlockoutRegion(location, blockoutRegionGroups, requestTime) {\n      const insideBlockoutRegion = blockoutRegionGroups.find(blockoutRegion => {\n        const startTime = blockoutRegion.get('value.start') && (0, _moment.default)(blockoutRegion.get('value.start'));\n        const endTime = blockoutRegion.get('value.end') && (0, _moment.default)(blockoutRegion.get('value.end'));\n        const isRequestTimeIsInsideBlockoutRequestTime = (0, _moment.default)(requestTime).isBetween(startTime, endTime, 'days', []);\n        const message = blockoutRegion.get('value.message') || '';\n\n        if (isRequestTimeIsInsideBlockoutRequestTime) {\n          const fallsInsideRegion = this.isLocationInsidePolygons(location, blockoutRegion);\n\n          if (fallsInsideRegion) {\n            this.set('blockoutRegionSetMessage', message);\n            return true;\n          }\n        }\n\n        return false;\n      });\n      return insideBlockoutRegion;\n    },\n\n    createPolygon(latlngs, color, blockoutRegionName, type) {\n      const polygon = window.L.polygon([latlngs], {\n        color: color,\n        properties: {\n          blockoutRegionName: blockoutRegionName,\n          type: type\n        }\n      });\n\n      if (type === BLOCKOUT_REGION_GROUP_TYPE) {\n        polygon.pm.setOptions({\n          allowEditing: false,\n          allowRemoval: false,\n          allowCutting: false,\n          allowRotation: false,\n          draggable: false\n        });\n        polygon.bindTooltip(blockoutRegionName, {\n          permanent: true,\n          direction: 'center',\n          className: 'polygon-labels'\n        });\n      }\n\n      return polygon;\n    },\n\n    createMarker(lat, lng, fullAddress) {\n      let addressMarker = null;\n      addressMarker = window.L.AwesomeMarkers.icon({\n        icon: 'plus',\n        prefix: 'fa',\n        markerColor: 'green'\n      });\n      const marker = window.L.marker([lat, lng], {\n        pmIgnore: true,\n        properties: {\n          type: BLOCKOUT_ALTERNATIVE_ADDRESS_TYPE\n        },\n        icon: addressMarker\n      });\n      marker.bindTooltip(fullAddress, {\n        permanent: false,\n        direction: 'auto',\n        className: 'marker-labels'\n      });\n      return marker;\n    },\n\n    getPrimarySchedulesBySorting(sortQuery) {\n      const schedules = this.get('store').peekAll('schedule').sortBy(sortQuery);\n      const primarySchedules = schedules.filter(availabelSchedule => availabelSchedule.get('type') === SCHEDULE_TYPE);\n      return primarySchedules;\n    },\n\n    setIsAllLegState(isChecked) {\n      this.set('booking.isAllLegs', isChecked);\n    },\n\n    /**\n     * Some of the booking leg will not have legServiceNeeds so create LegServiceNeed Model only in Edit Mode\n     * @param record - Booking\n     * @returns {{length}|*|[]}\n     */\n    createAndGetLegServiceNeeds(record) {\n      const createdLegs = record.legs.toArray();\n      const createdLegServiceNeeds = createdLegs.firstObject.legServiceNeeds.toArray();\n\n      if (!createdLegServiceNeeds.length) {\n        console.log('createdLegServiceNeeds'.toUpperCase());\n        const booking = this.get('booking');\n        const allServiceNeeds = booking.reGroupLegServiceNeedsForBooking();\n        return booking.createLegServiceNeeds(allServiceNeeds);\n      }\n\n      return createdLegServiceNeeds;\n    },\n\n    /**\n     * Set Created LegServiceNeed in leg only in Edit Mode\n     * @param record - Booking\n     */\n    setLegServiceNeedsInLeg(record) {\n      const createdLegs = record.legs.toArray();\n      createdLegs.forEach(leg => {\n        if (Ember.isEmpty(leg.get('legServiceNeeds'))) {\n          const legServiceNeeds = this.get('legServiceNeeds');\n          leg.set('legServiceNeeds', legServiceNeeds);\n        }\n      });\n    },\n\n    async prepareADAEligibilityPayload(legs) {\n      const adaEligiblePayload = {\n        'legs': legs.map(leg => {\n          const segment = leg.get('segment');\n          const pick = Ember.isPresent(segment) ? segment.get('pick') : null;\n          const drop = Ember.isPresent(segment) ? segment.get('drop') : null;\n          return {\n            requestTime: (0, _moment.default)(leg.get('requestTime')).format(),\n            pick: {\n              lat: Ember.isPresent(pick) ? pick.get('lat') : null,\n              lng: Ember.isPresent(pick) ? pick.get('lng') : null\n            },\n            drop: {\n              lat: Ember.isPresent(drop) ? drop.get('lat') : null,\n              lng: Ember.isPresent(drop) ? drop.get('lng') : null\n            }\n          };\n        })\n      };\n      return adaEligiblePayload;\n    },\n\n    switchLatLonPositions(geoms) {\n      const flattenGeoms = _lodash.default.flatten(_lodash.default.flatten(_lodash.default.flatten(geoms)));\n\n      flattenGeoms.map(point => {\n        const lon = point[0];\n        const lat = point[1];\n        point[0] = lat;\n        point[1] = lon;\n      });\n    },\n\n    async postADAEligibility(legs) {\n      const adaEligibilityPayload = await this.prepareADAEligibilityPayload(legs);\n      return this.get('ajax').request(_apiUrls.API.iqMap.host + '/ada-eligibility-query', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n        },\n        data: JSON.stringify(adaEligibilityPayload)\n      }).then(result => {\n        if (result.adaEligible) {\n          return {\n            adaEligible: true,\n            legs: []\n          };\n        }\n\n        this.switchLatLonPositions(result.geoms);\n        return result;\n      }).catch(() => {\n        return {\n          adaEligible: false,\n          legs: []\n        };\n      });\n    },\n\n    async getADAEligibility(requestTime) {\n      const requestTimeFormat = requestTime.format();\n      return this.get('ajax').request(_apiUrls.API.iqMap.host + `/ada-boundary?requestTime=${requestTimeFormat}`, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n        }\n      }).then(result => {\n        const geoms = [];\n        result.data.forEach(dataObject => {\n          geoms.push(dataObject.attributes.geom.coordinates);\n        });\n        this.switchLatLonPositions(geoms);\n        return {\n          geoms\n        };\n      }).catch(() => {\n        return {\n          geoms: []\n        };\n      });\n    },\n\n    setDistances(coord) {\n      if (this.get('distancePt1') === null) {\n        this.set('distancePt1', this.markerPinPoint(coord));\n      } else if (this.get('distancePt2') === null) {\n        this.set('distancePt2', this.markerPinPoint(coord));\n        const map = this.get('booking.bookingMap');\n        const distance = (0, _geolib.getDistance)(this.get('distancePt1.native._latlng'), coord); // eslint-disable-line\n        //convert from metre -> feet -> mile\n\n        const feet = distance * 3.281;\n        const miles = feet / 5280;\n        this.set('computedDistance', `${miles.toFixed(3)} mi (${Math.round(feet).toLocaleString()} feet)`);\n        const polyLineOptions = _polyline.default['dottedDistance']; // eslint-disable-line\n\n        const distancePoints = [{\n          lat: this.get('distancePt1.native._latlng.lat'),\n          lon: this.get('distancePt1.native._latlng.lng')\n        }, {\n          lat: this.get('distancePt2.native._latlng.lat'),\n          lon: this.get('distancePt2.native._latlng.lng')\n        }];\n        const distancePolyline = new bemap.Polyline(distancePoints, {\n          style: polyLineOptions\n        });\n        map.addPolyline(distancePolyline);\n        this.set('distancePolyline', distancePolyline);\n      } else {\n        this.distanceReset();\n      }\n    },\n\n    distanceReset() {\n      const map = this.get('booking.bookingMap');\n      const distancePt1 = this.get('distancePt1');\n      const distancePt2 = this.get('distancePt2');\n      const distancePolyline = this.get('distancePolyline');\n\n      if (distancePt1) {\n        map.removeMarker(distancePt1);\n      }\n\n      if (distancePt2) {\n        map.removeMarker(distancePt2);\n      }\n\n      if (distancePolyline) {\n        map.removePolyline(distancePolyline);\n      }\n\n      this.setProperties({\n        distancePt1: null,\n        distancePt2: null,\n        computedDistance: null,\n        distancePolyline: null\n      });\n    },\n\n    markerPinPoint(coord) {\n      const map = this.get('booking.bookingMap');\n      if (!coord) return;\n      const bemapCoords = new bemap.Coordinate(coord.lng, coord.lat);\n      const pintPointIcon = {\n        icon: {\n          src: '/map-icons/icon-pinpoint.svg',\n          anchorX: 0.50,\n          anchorY: 1,\n          height: 23,\n          width: 23,\n          anchorXUnits: 'fraction',\n          anchorYUnits: 'fraction',\n          scale: 1\n        }\n      };\n      const bemapIcon = new bemap.Icon(pintPointIcon.icon);\n      const marker = new bemap.Marker(bemapCoords, {\n        icon: bemapIcon\n      });\n      map.addMarker(marker);\n      return marker;\n    },\n\n    async updateBookingTripGrid() {\n      const bookingService = this.get('booking');\n      const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n      bookingService.set('currentBookings', bookings || []);\n      bookingService.set('currentTrips', trips || []);\n    },\n\n    schedulesExist(scheduleNames) {\n      const schedules = this.get('store').peekAll('schedule').toArray();\n\n      const scheduleMap = _lodash.default.keyBy(schedules, 'name');\n\n      return scheduleNames.every(scheduleName => scheduleMap[scheduleName]);\n    },\n\n    actions: {\n      onUndoClick() {\n        this.resetFieldValues();\n        this.resetFieldStates();\n        this.setDefaultBookingData();\n      },\n\n      async onSaveClick() {\n        const isEditingUnscheduledBooking = this.get('booking.isEditingUnscheduledBooking');\n        const legs = this.get('booking.activeBooking.legs').toArray();\n\n        const scheduleNames = _lodash.default.map(legs, leg => (0, _moment.default)(leg.requestTime).format('YYYY-MM-DD'));\n\n        const allSchedulesExist = this.schedulesExist(scheduleNames);\n        this.set('noADAEligibility', false); // add tooltip popup if a schedule doesn't exist\n\n        if (!allSchedulesExist) {\n          const tooltip = this.get('tooltip');\n          const message = 'Unable to submit booking. No schedule exists for the selected trip date.';\n          tooltip.pushConfirmation({\n            title: 'Create Booking',\n            hasOverlay: true,\n            tip: message,\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              tooltip.reset();\n            }\n          });\n          return;\n        } // disble check mark to prevent multiple clicks.\n\n\n        this.set('saveInProgress', true);\n\n        if (isEditingUnscheduledBooking) {\n          this.send('onYesButtonClick');\n        } else {\n          this.set('canSave', true);\n          this.set('booking.setMarkerPinOff', !this.get('booking.setMarkerPinOff'));\n\n          if (await this.validateRecords(true)) {\n            if (this.checkPickOrDropAddressIsFallInsideBlockOutRegion()) {\n              this.showBlockoutRegionFallsOutsideWarningMessage();\n              return;\n            }\n\n            if (this.checkEmptyLegTravelNeeds()) {\n              this.showEmptyConsumableTravelNeedsWarningMessage();\n              return;\n            }\n\n            this.set('passedADACheck', false);\n            this.set('isStopOutisdeADABoundary', false);\n\n            if (this.checkADABoundaries()) {\n              const activeLegs = this.get('booking.activeBooking.legs');\n              const adaEligibilityResponse = await this.postADAEligibility(activeLegs);\n              const tempLegs = [];\n              let adaEligible = true;\n\n              if (!adaEligibilityResponse.adaEligible && adaEligibilityResponse.legs.length === 0) {\n                this.set('noADAEligibility', true);\n                activeLegs.forEach(leg => {\n                  tempLegs.push({\n                    requestTime: leg.get('requestTime'),\n                    pick: {\n                      lat: leg.get('segment.pick.lat'),\n                      lng: leg.get('segment.pick.lng'),\n                      adaEligible: false\n                    },\n                    drop: {\n                      lat: leg.get('segment.drop.lat'),\n                      lng: leg.get('segment.drop.lng'),\n                      adaEligible: false\n                    }\n                  });\n                });\n                adaEligibilityResponse.legs = tempLegs;\n              }\n\n              adaEligibilityResponse.legs.map((leg, index) => {\n                const activeLeg = activeLegs.objectAt(index);\n\n                if (Ember.isPresent(activeLeg)) {\n                  leg.pick.address = activeLeg.get('segment.pick.place.address.fullAddress');\n                  leg.drop.address = activeLeg.get('segment.drop.place.address.fullAddress');\n                }\n\n                if (!leg.pick.adaEligible) {\n                  adaEligible = false;\n                }\n\n                if (!leg.drop.adaEligible) {\n                  adaEligible = false;\n                }\n              });\n\n              if (!adaEligible) {\n                this.set('arrayADABoundaries', adaEligibilityResponse);\n                this.set('showADAEligibility', true);\n                this.set('adaOverride', false);\n                this.set('isStopOutisdeADABoundary', true);\n                return;\n              }\n\n              this.set('isStopOutisdeADABoundary', false);\n            }\n\n            this.executeEligibilityRules();\n          }\n        }\n\n        this.set('saveInProgress', false);\n      },\n\n      onXButtonClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onProgressNoClick() {\n        this.toggleProperty('isProgressShown'); // NYAAR-19387 Reset should be work for both create and edit booking\n\n        this.resetFieldValues();\n        this.updateBookingTripGrid();\n        this.get('editModal').close();\n      },\n\n      onCloseClick() {\n        const isViewOnlyMode = this.get('isViewOnlyMode');\n\n        if (isViewOnlyMode) {\n          this.get('editModal').close();\n        } else {\n          this.toggleProperty('isProgressShown');\n        }\n      },\n\n      async onApplyClick() {\n        if (await this.validateRecords(false)) {\n          Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n          this.get('geocode').activateGeocode(false);\n          this.set('addressRecord', null);\n          this.get('service').apply();\n        }\n      },\n\n      validateRequestDateTime(leg) {\n        this.set('canSave', true);\n        this.set('errorMessage', '');\n\n        if (isNaN(leg.get('requestTime'))) {\n          return;\n        }\n\n        if (!this.validateEligibility(leg)) {\n          this.set('selectedLegDate', (0, _moment.default)(leg.get('requestTime')).format('M/D/Y'));\n          this.get('booking').showErrorMessage(`${this.get('riderToBook.firstName')} ${this.get('riderToBook.lastName')}\n        has no client eligibility records for the date \\n  ${this.get('selectedLegDate')} . Please select another date.`);\n          return;\n        }\n\n        if (!this.validateLegRequestTimeAfterPrevLegRequestTime()) {\n          this.get('booking').showErrorMessage(\"The additional trip's request time must come after the previous trip's request time.\");\n          return;\n        }\n\n        if (!this.validateCutOff(leg)) {\n          this.get('booking').showErrorMessage(`Same day booking must be at least ${CUT_OFF_TIME_FOR_SAMEDAY * 60} mins in advance. Please select a different request time.`);\n          return;\n        }\n\n        if (!this.validateFutureBookingTimeline()) {\n          this.get('booking').showErrorMessage('Trip date must be within the allowed booking timeframe.');\n          return;\n        }\n\n        this.set('booking.isOpenErrorModal', false);\n        this.refreshBlockoutRegionsPolygons();\n      },\n\n      async onYesButtonClick(event) {\n        let fromADADeny = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        const isEditMode = this.get('isEditMode');\n        const defaultBookingData = this.get('defaultBookingData');\n        const isEditingUnscheduledBooking = this.get('booking.isEditingUnscheduledBooking');\n\n        if (await this.validateRecords(false)) {\n          if (this.checkPickOrDropAddressIsFallInsideBlockOutRegion()) {\n            this.showBlockoutRegionFallsOutsideWarningMessage();\n            return;\n          }\n\n          this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n          if (!isEditingUnscheduledBooking) {\n            this.set('booking.activeBooking.status', 'willCall');\n          }\n\n          if (fromADADeny) {\n            this.set('booking.activeBooking.status', 'failed');\n          }\n\n          this.set('booking.activeBooking.legs', this.get('legsInBooking'));\n\n          try {\n            if (isEditMode) {\n              const bookingID = this.get('booking.activeBooking.id');\n              const action = isEditingUnscheduledBooking ? 'editUnscheduled' : 'refuse';\n              const tripCancelJobs = await this.get('booking').deleteBooking(bookingID, action, isEditMode);\n              const asynOperationInfoArray = tripCancelJobs ? tripCancelJobs.tripCancelJobs : [];\n\n              for (const tripCancelInfo of asynOperationInfoArray) {\n                if (tripCancelInfo) {\n                  await this.get('booking').callScheduleAsyncOperation(tripCancelInfo);\n                }\n              } // user cannot modify data linked to scheduling domain when editing unscheduled booking, so do not delete trips when edit/save unscheduled booking\n\n\n              if (!isEditingUnscheduledBooking) {\n                // deletion of trips is primarily for keeping data in sync when SS related data is modified during edit booking. ie. addresses, travelneeds, etc.\n                await this.get('booking').deleteTrips(bookingID);\n              }\n            }\n\n            const bookingResult = await this.get('booking').saveBooking(isEditMode, defaultBookingData);\n            const currBookingId = Ember.isPresent(bookingResult) ? bookingResult.data.id : this.get('booking.activeBooking.id');\n            await this.get('booking').setSelectedRiders(isEditMode);\n            await this.updateBookingTripGrid();\n            this.setIsAllLegState(false);\n            const bookingByID = `eq(id,(${currBookingId}))&include=group,legs,legs.segments,legs.legTravelNeeds,legs.segments.pick,legs.segments.drop,subscription`;\n            await this.get('store').query('booking', {\n              filter: bookingByID\n            });\n\n            if (this.get('passedADACheck')) {\n              const bookingId = currBookingId;\n\n              if (this.get('isStopOutisdeADABoundary')) {\n                await this.createADAEligibilityActivity(bookingId, true);\n              } else {\n                await this.createADAEligibilityActivity(bookingId, false);\n              }\n            } //To check whether the user has permission to override trip eligibility conditions\n\n\n            if (!isEditMode) {\n              const activityLogAdapter = this.store.adapterFor('activity-log');\n              const bookingId = currBookingId;\n              const bookingStatus = this.get('booking.activeBooking.computedStatus');\n              const eventLog = {\n                type: 'event',\n                attributes: {\n                  bookingId: bookingId,\n                  source: 'webApp',\n                  eventType: 'BE',\n                  actionType: 'genericLogging',\n                  receivedAt: (0, _moment.default)().toDate(),\n                  userId: this.session.data.authenticated.userId,\n                  eventLog: {\n                    genericLogging: [{\n                      activity: 'Booking Added',\n                      loggingType: 'user',\n                      details: `Created booking ${bookingId}.`\n                    }, {\n                      activity: 'Created',\n                      loggingType: 'booking',\n                      details: `Booking created with status of ${bookingStatus}.`\n                    }]\n                  }\n                }\n              };\n              await activityLogAdapter.createEventActivity(eventLog);\n            }\n\n            this.get('notifications').warning('Booking was saved but it will not be scheduled');\n          } catch (err) {\n            const message = isEditMode ? 'Failed to update Booking' : 'Failed to create Booking';\n            this.get('notifications').warning(message);\n          } finally {\n            this.toggleProperty('isProgressShown');\n            this.get('editModal').close();\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n          }\n        }\n      },\n\n      async onClickClose(isModalDialogClose) {\n        this.overlapScheduleLegReset();\n        this.toggleProperty('showBookingSummary');\n        this.set('saveInProgress', false); // onClickClose is used everywhere so When we click X on Booking Accept Screen don't set the isAllLeg as false\n\n        if (!isModalDialogClose) {\n          this.setIsAllLegState(false);\n        }\n      },\n\n      async onClickXADA() {\n        this.toggleProperty('showADAEligibility');\n        this.set('noADAEligibility', false);\n        this.set('saveInProgress', false);\n      },\n\n      async onClickDenyADA() {\n        this.toggleProperty('showADAEligibility');\n        this.set('noADAEligibility', false);\n        await this.send('onYesButtonClick', null, true);\n        this.set('saveInProgress', false);\n      },\n\n      async onClickOverrideADA() {\n        this.toggleProperty('showADAEligibility');\n        this.set('noADAEligibility', false);\n        this.set('adaOverride', true);\n        this.executeEligibilityRules();\n      },\n\n      onWarningModalClose() {\n        this.set('isMaxRiderTimePopUp', false);\n        this.set('isOpenErrorModal', false);\n        this.set('disablePhoneNumber', false);\n        this.set('disablePhoneNumber', false);\n      },\n\n      setLoadAndUnLoadTimeFlag(isLoadAndUnLoadTimeValid) {\n        this.set('isLoadAndUnLoadTimeValid', isLoadAndUnLoadTimeValid);\n      },\n\n      setIsLoadAndUnLoadTimeNumberFlag(isLoadAndUnLoadTimeNumber) {\n        this.set('isLoadAndUnLoadTimeNumber', isLoadAndUnLoadTimeNumber);\n      },\n\n      onEligibleWarningClose() {\n        this.overlapScheduleLegReset();\n        this.set('showEligibilityRestrictions', false);\n      },\n\n      onEligibleWarningOK() {\n        this.set('showEligibilityRestrictions', false);\n        this.get('editModal').close();\n      },\n\n      onSelectScheduleOption(option) {\n        this.set('booking.selectedSchedule', option);\n        this.set('booking.legSchedule.scheduleName', option.name);\n      },\n\n      onConfirmClick() {\n        const firstLegRequestTime = this.get('tripLegsInBooking.firstObject.requestTime');\n        this.set('booking.firstLegRequestTime', firstLegRequestTime);\n        this.overlapErrorMessageClean();\n      },\n\n      onCancelClick() {\n        this.overlapErrorMessageClean();\n      },\n\n      onCloseButtonClick() {\n        this.overlapErrorMessageClean();\n      },\n\n      onDistanceButtonClick() {\n        this._bodyClickFunction = event => {\n          this.actions.onBodyClickFunction(event, this);\n        };\n\n        document.body.addEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', true);\n        this.get('booking.bookingMap').native.on('click', e => {\n          this.setDistances(e.latlng);\n        });\n        Ember.$('.tomtom-map').addClass('pinpoint-cursor');\n      },\n\n      onBodyClickFunction(e, thisObject) {\n        const node = e.target;\n        let isInPage = true;\n\n        if (document.getElementsByClassName('map-widget')[0]) {\n          isInPage = document.getElementsByClassName('map-widget')[0].contains(node);\n        }\n\n        if (isInPage === false) {\n          thisObject.distanceReset();\n        }\n      },\n\n      onDistanceClose() {\n        document.body.removeEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', false);\n        this.distanceReset();\n        this.get('booking.bookingMap.native').off('click');\n        Ember.$('.tomtom-map').removeClass('pinpoint-cursor');\n      },\n\n      onDistanceReset() {\n        this.distanceReset();\n      },\n\n      onBoundaryToggle() {\n        this.toggleProperty('activeADABoundary');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/leg-form/component\", [\"exports\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/utils/workspace-availability\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/rider-phone-number\"], function (_exports, _moment, _unwrapProxy, _lodash, _workspaceAvailability, _mappedPermIds, _riderPhoneNumber) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CERTIFICATION_LOCATION_PLACE_CATEGORY = 'certification_location';\n  const CERT_FARE_CATEGORY = 'CERT';\n  const GUEST_FARE_CATEGORY = 'Guest';\n  const DISPLAY_NAME = 'Display Name';\n  const PHONE_NUMBER_PLACEHOLDER = 'Phone Number';\n  const SCHEDULE_TYPE = 'primary';\n\n  var _default = Ember.Component.extend({\n    classNames: ['leg-form'],\n    anchorTypeOptions: null,\n    serviceTypeOptions: null,\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    fareCalc: Ember.inject.service(),\n    maxDate: null,\n    minDate: null,\n    isFirstLeg: false,\n    markerType: null,\n    disablePick: false,\n    assesmentCenterList: null,\n    rideshareTypeOptions: null,\n    editRideshareBookingGranted: false,\n    allowFundingAgency: false,\n    legFareCategory: null,\n    certFareCategory: null,\n    phoneNumberPlaceHolder: PHONE_NUMBER_PLACEHOLDER,\n    disableFareField: false,\n    fareCategoryOptions: null,\n    isViewOnlyMode: Ember.computed.alias('booking.isViewOnlyMode'),\n    isFieldDisabled: Ember.computed('disableRequestDate', 'isEditingUnscheduledBooking', 'isViewOnlyMode', function () {\n      return this.get('disableRequestDate') || this.get('booking.isEditingUnscheduledBooking') || this.get('booking.isViewOnlyMode');\n    }),\n    isNotFirstLeg: Ember.computed('isFirstLeg', function () {\n      return !this.get('isFirstLeg');\n    }),\n    canShowRemoveButton: Ember.computed('isFirstLeg', 'leg.purpose', 'isReturnTrip', function () {\n      return this.get('isReturnTrip') || this.get('isNotFirstLeg');\n    }),\n    legFare: Ember.computed('booking.{isAllLegs,activeBooking.legs.firstObject.segments.firstObject.fare}', 'leg.segments.firstObject.fare', function () {\n      const isAllLegs = this.get('booking.isAllLegs');\n      if (isAllLegs) return this.get('booking.activeBooking.legs.firstObject.segments.firstObject.fare');\n      return this.get('leg.segments.firstObject.fare');\n    }),\n\n    // we should only show upto day  after tomorrow for booking\n    setMinMaxDate() {\n      const userBookingPermissionDetails = this.get('booking').getUserBookingPermissionDetail();\n      const isSameDayBookingPermGranted = userBookingPermissionDetails.isSameDayBookingPermGranted;\n      const isFutureDayBookingPermGranted = userBookingPermissionDetails.isFutureDayBookingPermGranted;\n      const futureBookingTimeline = this.store.peekRecord('cs-config-item', 'config-Book_Trips/Future_Booking_Timeline');\n      const futureBookingTimelineInt = parseInt(futureBookingTimeline.get('value'), 10);\n      const allowSameDayBooking = this.store.peekRecord('cs-config-item', 'config-Book_Trips/Allow_Same_Day_booking');\n      const isViewOnlyMode = this.get('booking.isViewOnlyMode'); // minimum date is current day or next day\n      // maximum is current day plus Future_Booking_Timeline\n\n      this.set('minDate', allowSameDayBooking.get('value') ? (0, _moment.default)().startOf('day').toDate() : (0, _moment.default)().startOf('day').add(1, 'days').toDate());\n      this.set('maxDate', futureBookingTimelineInt ? (0, _moment.default)().endOf('day').add(futureBookingTimelineInt, 'days').toDate() : (0, _moment.default)().endOf('day').toDate()); // if user has same day booking permission then maxDate should be end with current day\n\n      if (isSameDayBookingPermGranted && !isFutureDayBookingPermGranted) {\n        this.set('maxDate', (0, _moment.default)().endOf('day').toDate());\n      } // if user not has same day booking permission then minDate should be start with next day\n\n\n      if (!isSameDayBookingPermGranted && isFutureDayBookingPermGranted) {\n        this.set('minDate', (0, _moment.default)().startOf('day').add(1, 'days').toDate());\n      } // if user viewing the past booking, allow past date\n\n\n      if (isViewOnlyMode) {\n        this.set('minDate', null);\n      }\n\n      this.set('booking.maxBookingDate', this.get('maxDate'));\n    },\n\n    anchorObserver: Ember.observer('leg.anchor', 'legIndex', function () {\n      if (this.get('leg.anchor') === 'Appt' || this.get('legIndex') === 0) {\n        this.set('isFirstLeg', true);\n      } else {\n        this.set('isFirstLeg', false);\n      }\n    }),\n    fundingAgencyOptions: Ember.computed('leg.requestTime', async function () {\n      const fundingAgencyOptions = [];\n      const riderId = this.get('riderRecord.id');\n      const requestLegTime = (0, _moment.default)(this.get('leg.requestTime'));\n      const localRiderRecord = await this.store.findRecord('rider', riderId);\n      const riderFundings = localRiderRecord.get('riderFundings');\n      riderFundings.forEach(riderFunding => {\n        const startDate = (0, _moment.default)(riderFunding.get('startDate')).startOf('day');\n        const endDate = (0, _moment.default)(riderFunding.get('endDate')).endOf('day');\n\n        if (requestLegTime.isBetween(startDate, endDate)) {\n          fundingAgencyOptions.push(riderFunding.fundingAgency);\n        }\n      });\n      return fundingAgencyOptions;\n    }),\n\n    async init() {\n      this.set('disableFareField', !this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editFareBooking, null));\n\n      this._super(...arguments);\n\n      const serviceTypeOptions = this.booking.getServiceTypeOptions();\n      const fareCategoryOptions = this.booking.getFareCategoryOptions();\n      const tripPurposeOptions = this.booking.getTripPurposeOptions();\n      this.setProperties({\n        anchorTypeOptions: [{\n          id: 'pick',\n          name: 'Pick'\n        }, {\n          id: 'drop',\n          name: 'Appt'\n        }],\n        serviceTypeOptions,\n        rideshareTypeOptions: [{\n          id: 0,\n          name: 'Allowed'\n        }, {\n          id: 2,\n          name: 'Not Allowed'\n        }],\n        fareCategoryOptions,\n        tripPurposeOptions\n      });\n      const configFareCategories = this.get('booking').getSystemConfigFareCategories();\n      const certFareCategory = configFareCategories.find(configFareCategory => configFareCategory.get('displayName') === CERT_FARE_CATEGORY);\n      const guestFareCategory = configFareCategories.find(configFareCategory => configFareCategory.get('displayName') === GUEST_FARE_CATEGORY);\n      const fareCategoryDisplayName = this.get('booking.selectedRiders.firstObject.fareCategory');\n      const fareCategory = configFareCategories.find(configFareCategory => configFareCategory.get('displayName') === fareCategoryDisplayName);\n      this.set('certFareCategory', certFareCategory);\n      this.set('guestFareCategory', guestFareCategory);\n      this.set('previousFareCategory', Ember.isPresent(fareCategory) ? fareCategory.get('value')[DISPLAY_NAME] : null);\n      this.set('allowFundingAgency', this.get('booking').getAllowFundingAgency());\n      this.setAssesmentCenterList();\n      this.setMinMaxDate();\n      this.isFirstLegValidation();\n      this.set('editRideshareBookingGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editRideshareBooking, null));\n      this.updateLocationForAddressSelect = this.updateLocationForAddressSelect.bind(this);\n      this.validateScheduleOverlap = this.validateScheduleOverlap.bind(this);\n      this.scheduleOverLapped = this.scheduleOverLapped.bind(this);\n    },\n\n    setAssesmentCenterList() {\n      const places = this.store.peekAll('place'); //filter by certification_location\n\n      const placeCategories = places.filter(place => {\n        return place.get('placeCategoryType.id') === 'certification_location';\n      }); // mutate lat, lng freeformAddress\n\n      const assesmentCenterList = placeCategories.map(element => {\n        const address = (0, _unwrapProxy.unwrapProxy)(element.get('address'));\n        address.set('lat', address.get('position.lat'));\n        address.set('lng', address.get('position.lng'));\n        address.set('freeformAddress', address.get('address.address.freeformAddress'));\n        return address;\n      });\n      this.set('assesmentCenterList', assesmentCenterList);\n    },\n\n    selectedTime: Ember.computed('leg.requestTime', function () {\n      return this.get('leg.requestTime');\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      Ember.run.next('afterRender', () => {\n        const leg = this.get('leg');\n        const place = this.get('booking.activeBooking.firstLeg.segment.pick.place');\n        const location = this.get('booking.activeBooking.firstLeg.segment.pick.place.location');\n\n        if (Ember.isPresent(leg) && Ember.isPresent(location)) {\n          this.validateBlockoutAddress(location, leg, place);\n        }\n\n        if (!this.get('booking.isEditingUnscheduledBooking')) {\n          this.get('validateScheduleOverlap')(leg.get('requestTime'), leg);\n        }\n      });\n    },\n\n    isFirstLegValidation() {\n      if (this.get('legIndex') === 0 && this.get('leg.purpose') !== 'return') {\n        this.set('isFirstLeg', true);\n        this.set('disablePick', true);\n      } else {\n        this.set('isFirstLeg', false);\n        this.set('disablePick', false);\n      }\n    },\n\n    validateAddress(addressSearchResult, addressType) {\n      const streetAddress = addressSearchResult.get('streetAddress');\n      const postalCode = addressSearchResult.get('postalCode');\n      const lat = addressSearchResult.get('lat');\n      const lng = addressSearchResult.get('lng');\n\n      if (lat === 0 || lng === 0) {\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid ${addressType} address.`);\n        return false;\n      }\n\n      if (Ember.isNone(streetAddress) || Ember.isNone(postalCode)) {\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid ${addressType} address.`);\n        return false;\n      }\n\n      if (Ember.isEmpty(streetAddress) || Ember.isEmpty(postalCode)) {\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid ${addressType} address.`);\n        return false;\n      }\n\n      return true;\n    },\n\n    async updateLocationForAddressSelect(addressRecord, close, selectType) {\n      this.set('booking.canSave', true);\n      const leg = this.get('leg');\n      const segment = selectType === 'pick' ? leg.get('segments.firstObject') : leg.get('segments.lastObject');\n      const addressType = selectType === 'pick' ? `${selectType}up` : `${selectType}off`;\n      let address = addressRecord;\n      const segmentStop = segment.get(`${selectType}`);\n      const place = segment.get(`${selectType}.place`);\n\n      if (!address) {\n        address = segment.get(`${selectType}.place.address`);\n        place.set('address', addressRecord);\n        place.set('location', null);\n        this.booking.setActiveAddress(address);\n        return;\n      }\n\n      if (!this.validateAddress(address, addressType)) {\n        return;\n      }\n\n      const lat = address.get('lat');\n      const lng = address.get('lng');\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      this.get('clearPickAndDropAddressText')();\n      const beNomadAddress = address.get('beNomadAddress');\n      const geoNode = await this.booking.getAddressGeoNode(lat, lng, beNomadAddress, addressType);\n\n      if (!geoNode || Ember.isEmpty(geoNode.zone.zoneName) || geoNode && geoNode.zone.zoneName <= '0') {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.booking.showErrorMessage('Location must be within the agency service boundary.');\n        return;\n      }\n\n      const zoneName = this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n      address.set('zName', zoneName.get('displayName'));\n      address.set('zoneName', zoneName);\n\n      if (!address.get('zoneName.name')) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false); //As per Tracy Comment on 19-May on NYAAR-7806:The message should always say *Location must be within the agency service boundary\n\n        this.booking.showErrorMessage('Location must be within the agency service boundary.');\n        return;\n      }\n\n      const locationRecord = this.store.createRecord('location', {\n        lat,\n        lng\n      });\n      place.set('location', locationRecord);\n      place.set('address', address);\n      segmentStop.set('notes', address.get('notes') || '');\n      if (selectType === 'drop') this.get('syncPickAndDrop')();\n      this.booking.setActiveAddress(address);\n      if (close) close();\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n\n      if (Ember.isPresent(leg)) {\n        this.validateBlockoutAddress(locationRecord, leg, place);\n      }\n    },\n\n    getCurrentLeg() {\n      const legIndex = this.get('legIndex');\n      const currentLeg = this.get('booking.activeBooking.legs').objectAt(legIndex);\n      return currentLeg;\n    },\n\n    async checkAssesmentAddressSelected() {\n      const leg = this.getCurrentLeg();\n      const pickLocation = leg.get('segments.firstObject.pick.place.location');\n      const dropLocation = leg.get('segments.firstObject.drop.place.location');\n      const pickAddressLat = pickLocation.get('lat');\n      const pickAddressLng = pickLocation.get('lng');\n      const dropAddressLat = dropLocation.get('lat');\n      const dropAddressLng = dropLocation.get('lng');\n      const pickAddressLatLng = `${pickAddressLat}/${pickAddressLng}`;\n      const dropAddressLatLng = `${dropAddressLat}/${dropAddressLng}`;\n      const placeQueryParams = {\n        filter: `eq(placeCategoryTypeName,${CERTIFICATION_LOCATION_PLACE_CATEGORY})`\n      };\n      if (Ember.isNone(pickAddressLat) || Ember.isNone(pickAddressLng)) return 0;\n      const places = await this.get('store').query('place', placeQueryParams);\n      const filteredPlaces = places.filter(place => {\n        const assesmentCenterAddressLatLng = place.get('location.latlng');\n        return pickAddressLatLng === assesmentCenterAddressLatLng || dropAddressLatLng === assesmentCenterAddressLatLng;\n      });\n      return filteredPlaces.length;\n    },\n\n    checkTripDateIsCertApptDate() {\n      const leg = this.getCurrentLeg();\n      const certApptDate = this.get('booking.selectedRiders.firstObject.eligibility.certAppt');\n      const oneDayAfterCertApptDate = (0, _moment.default)(certApptDate).add(1, 'days');\n      const oneDayBeforeCertApptDate = (0, _moment.default)(certApptDate).subtract(1, 'days');\n      const bookingDate = (0, _moment.default)(leg.get('requestTime'));\n      return (0, _moment.default)(bookingDate).isBetween(oneDayBeforeCertApptDate, oneDayAfterCertApptDate, 'days', '[]');\n    },\n\n    async validateAssesmentCenterAddressAndCertApptDate() {\n      return (await this.checkAssesmentAddressSelected()) && this.checkTripDateIsCertApptDate();\n    },\n\n    /**\n     *  NYAAR-19049: On Creating Booking with Leg and Return trip with All Leg checked, Fare must be same for all Legs\n     * @param {*Object} leg\n     * @returns {*Array}\n     */\n    allLegsCheckedFare(leg) {\n      const currentLegOrdinal = leg.get('legOrdinal');\n      const allLegs = this.get('booking.allLegs');\n      return allLegs ? allLegs.filter(ele => ele.get('legOrdinal') === currentLegOrdinal) : [];\n    },\n\n    //if the fare category is cert we have to set each rider fare category as cert else we have to set the previous fare category for each rider\n    setRiderFareCategories(legFareCategory) {\n      const selectedRiders = this.get('booking.selectedRiders');\n      const riderFareCategories = this.get('riderFareCategories');\n\n      if (legFareCategory === CERT_FARE_CATEGORY) {\n        selectedRiders.forEach(rider => {\n          rider.set('fareCategory', CERT_FARE_CATEGORY);\n        });\n        return;\n      }\n\n      selectedRiders.forEach((rider, index) => {\n        const fareCategory = riderFareCategories[index];\n        rider.set('fareCategory', fareCategory);\n      });\n    },\n\n    getPrimarySchedulesBySorting(sortQuery) {\n      const schedules = this.get('store').peekAll('schedule').sortBy(sortQuery);\n      const primarySchedules = schedules.filter(availabelSchedule => availabelSchedule.get('type') === SCHEDULE_TYPE);\n      return primarySchedules;\n    },\n\n    scheduleOverLapped(requestTime) {\n      const formattedRequestTime = (0, _moment.default)(requestTime).format();\n      const schedules = this.getPrimarySchedulesBySorting('start') || [];\n      this.set('booking.availableSchedules', []);\n      const sortedSchedules = schedules.filter(availabelSchedule => {\n        const startSchedule = (0, _moment.default)(availabelSchedule.get('start'));\n        const endSchedule = (0, _moment.default)(availabelSchedule.get('end'));\n        return !(startSchedule.isAfter(formattedRequestTime) || endSchedule.isBefore(formattedRequestTime));\n      }).sortBy('name');\n\n      if (sortedSchedules.length) {\n        this.set('booking.availableSchedules', sortedSchedules);\n      }\n    },\n\n    validateScheduleOverlap(requestTime, leg) {\n      this.scheduleOverLapped(requestTime);\n      const availableSchedules = this.get('booking.availableSchedules');\n      const referenceStartDate = (0, _moment.default)(requestTime).startOf('day').toDate();\n      const referenceEndDate = (0, _moment.default)(requestTime).endOf('day').toDate();\n      const schedules = this.getPrimarySchedulesBySorting('id');\n      const schedule = (0, _lodash.findLast)(schedules, s => (0, _workspaceAvailability.processTimeConstraints)(referenceStartDate, referenceEndDate, s.get('start'), s.get('end')));\n      this.set('booking.selectedSchedule', schedule);\n\n      if (!Ember.isEmpty(schedule)) {\n        leg.set('scheduleName', schedule.name);\n      }\n\n      if (availableSchedules.length > 1 && !Ember.isEmpty(requestTime)) {\n        this.set('booking.legSchedule', leg);\n        this.set('booking.selectedSchedule', availableSchedules.lastObject);\n\n        if (!Ember.isEmpty(schedule)) {\n          leg.set('scheduleName', schedule.name);\n        }\n\n        this.set('booking.isScheduleOverLap', true);\n        return;\n      }\n    },\n\n    actions: {\n      async onDateChange(value) {\n        const rTime = this.get('leg.requestTime');\n        const currentDateAndTime = (0, _moment.default)(rTime);\n        const selectedDate = (0, _moment.default)(value[0]);\n        this.get('showSameDayNotificationByPermission')(selectedDate);\n        selectedDate.hour(currentDateAndTime.hour());\n        selectedDate.minutes(currentDateAndTime.minutes());\n        selectedDate.seconds(currentDateAndTime.seconds());\n        const selectedDateObjectWithTime = selectedDate.toDate();\n        this.set('leg.requestTime', selectedDateObjectWithTime);\n        const legIndexWithinTotalLegs = this.get('booking.activeBooking.legs').indexOf(this.get('leg'));\n        this.get('updateADABoundary')(selectedDateObjectWithTime);\n        this.get('validateRequestDateTime')(this.get('leg'));\n        this.get('validateScheduleOverlap')(selectedDateObjectWithTime, this.leg);\n\n        if (legIndexWithinTotalLegs === 0) {\n          this.get('onFirstLegDateChange')();\n        } // refresh funding agency selection\n\n\n        const curFundingAgencyOptions = await this.get('fundingAgencyOptions');\n        const curSelectedFunding = (0, _unwrapProxy.unwrapProxy)(this.get('leg.fundingAgency'));\n        const validFundAgency = curSelectedFunding && curFundingAgencyOptions.find(faOption => (0, _unwrapProxy.unwrapProxy)(faOption.get('name')) === curSelectedFunding.get('name'));\n\n        if (!validFundAgency) {\n          this.set('leg.fundingAgency', null);\n        }\n      },\n\n      onTimeChange(value) {\n        const rTime = this.get('leg.requestTime');\n        const currentDateAndTime = (0, _moment.default)(rTime);\n        const selectedDate = (0, _moment.default)(value);\n        const currentYear = currentDateAndTime.year();\n        const currentMonth = currentDateAndTime.month();\n        const currentDay = currentDateAndTime.date();\n        selectedDate.year(currentYear);\n        selectedDate.month(currentMonth);\n        selectedDate.date(currentDay);\n        const selectedDateObjectWithTime = selectedDate.toDate();\n        this.set('leg.requestTime', selectedDateObjectWithTime);\n        this.get('validateRequestDateTime')(this.get('leg'));\n        this.get('validateScheduleOverlap')(selectedDateObjectWithTime, this.leg);\n        this.get('updateADABoundary')(selectedDateObjectWithTime);\n      },\n\n      onChangeServiceType(selectedType) {\n        this.set('leg.serviceWindow', selectedType);\n      },\n\n      onPickAddressSelect(address, close) {\n        this.updateLocationForAddressSelect(address, close, 'pick');\n      },\n\n      onDropAddressSelect(address, close) {\n        this.updateLocationForAddressSelect(address, close, 'drop');\n      },\n\n      onPickOnMap(place, selectType) {\n        const activeDragPlace = this.booking.get('activeDragPlace');\n        const tripType = this.get('isReturnTrip');\n        const leg = this.get('leg');\n        this.set('booking.skipSetView', true);\n\n        if (!(0, _unwrapProxy.unwrapProxy)(place.get('address'))) {\n          this.get('booking').setEmptyAddressLocation(place);\n        }\n\n        if (!activeDragPlace) {\n          this.booking.set('activeDragPlace', place);\n        }\n\n        this.booking.set('activeLeg', leg);\n        this.booking.set('addressSelectType', selectType);\n        this.booking.set('isReturnTrip', tripType);\n      },\n\n      toggleCalendar() {\n        this.calflatpickrRef.toggle();\n      },\n\n      toggleTime() {\n        this.timeflatpickrRef.toggle();\n      },\n\n      onLegRemoveClick(leg) {\n        this.get('onLegRemoveClick')(leg);\n      },\n\n      onNumberChange(segmentStop, maskObj) {\n        const areaCode = maskObj.unmasked.substring(0, 3).trim();\n        const phoneNumber = maskObj.unmasked.substring(3).trim(); // for copy Booking we already create the segment stop phone number record in booking service\n\n        if (segmentStop.get('firstObject') && !segmentStop.get('firstObject.id')) {\n          segmentStop.set('firstObject.areaCode', areaCode);\n          segmentStop.set('firstObject.phoneNumber', phoneNumber);\n        } //for edit booking we already have the segment stop phone number id if the previous booking segment stop have phone number\n\n\n        if (segmentStop.get('firstObject.id')) {\n          const segmentStopPhoneNumberId = segmentStop.get('firstObject.id');\n          const segmentStopPhoneNumber = this.get('store').peekRecord('segment-stop-phone-number', segmentStopPhoneNumberId);\n          segmentStopPhoneNumber.set('areaCode', areaCode);\n          segmentStopPhoneNumber.set('phoneNumber', phoneNumber);\n          return;\n        } // for new booking or if the segment stop does'nt have a phone number\n\n\n        if (!segmentStop.get('firstObject')) {\n          const phoneNumberObj = {\n            type: _riderPhoneNumber.HOME_PHONE_TYPE,\n            areaCode: areaCode,\n            phoneNumber: phoneNumber,\n            extension: '',\n            description: 'HOME CONTACT #',\n            mobileCarrier: 'yes',\n            useForSmsNotifications: false,\n            useForVoiceNotifications: true\n          };\n          const segmentStopPhoneNumber = this.get('store').createRecord('segment-stop-phone-number', phoneNumberObj);\n          segmentStop.pushObject(segmentStopPhoneNumber);\n          return;\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/leg-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"RWxP7hkW\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowRemoveButton\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row col-12 ml-3 remove-col-padding\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 ml-1 remove-col-padding\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9 \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Leg Trip \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6 ml-0 remove-col-padding\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton float-right mr-1 btn-font-size\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLegRemoveClick\\\",[23,[\\\"leg\\\"]]],null]],[9],[0,\\\"\\\\n          Remove\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Request\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td-display\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters justify-content-between\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3 pr-1\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"disabled\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"leg\\\",\\\"anchor\\\"]],[23,[\\\"anchorTypeOptions\\\"]]],null],[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"anchorTypeOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"anchor\\\"]]],null]],[[\\\"value\\\"],[\\\"id\\\"]]]]],{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 pr-1\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"icon-parent-div\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"maxDate\\\",\\\"minDate\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"time_24hr\\\",\\\"disabled\\\",\\\"date\\\",\\\"getFlatpickrRef\\\"],[\\\"en\\\",[23,[\\\"leg\\\",\\\"requestTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\"],null],[23,[\\\"maxDate\\\"]],[23,[\\\"minDate\\\"]],\\\"D, M j\\\",true,true,[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"selectedTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"calflatpickrRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\"],null]],[9],[0,\\\"\\\\n                            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar\\\"],[9],[10],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"icon-parent-div\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/timeflatpickr\\\",null,[[\\\"isFieldDisabled\\\",\\\"onChange\\\",\\\"value\\\",\\\"getFlatpickrRef\\\"],[[23,[\\\"isFieldDisabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\"],null],[23,[\\\"selectedTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"timeflatpickrRef\\\"]]],null]],null]]]],false],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleTime\\\"],null]],[9],[0,\\\"\\\\n                            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o\\\"],[9],[10],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Pickup\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td-display mr-1\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 remove-search-map-gaps col-10 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"isFieldDisabled\\\",\\\"assesmentCenterList\\\",\\\"initialAddresses\\\",\\\"autoFocus\\\",\\\"inputClass\\\",\\\"inputPlaceholder\\\",\\\"text\\\",\\\"selectedAddress\\\",\\\"onTextChange\\\",\\\"onAddressSelect\\\"],[[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"assesmentCenterList\\\"]],[23,[\\\"addressesOfRiderToBook\\\"]],false,\\\"map-widget-location-search-box\\\",\\\"Search by Address\\\",[27,\\\"readonly\\\",[[23,[\\\"pickAddressText\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"pickAddressText\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPickAddressSelect\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\"],[\\\"bottom\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\",\\\"placeNameAddress\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[0,\\\"lat : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[0,\\\"lng : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"location\\\",\\\"lng\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[0,\\\"zone : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n                    \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-1 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/address-place-search\\\",null,[[\\\"isFieldDisabled\\\",\\\"updateLocationForAddressSelect\\\",\\\"addressType\\\",\\\"riderRecord\\\"],[[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"updateLocationForAddressSelect\\\"]],\\\"pick\\\",[23,[\\\"riderRecord\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-2 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\"]],\\\"pickup\\\"],null]],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Pickup Zone\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Note\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"Write a note\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"500\\\"]]],[23,[\\\"isViewOnlyMode\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"notes\\\"]]],null]],null],[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"notes\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Phone\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"phoneNumberPlaceHolder\\\"]],\\\"999-999-9999\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"phoneNumbers\\\",\\\"firstObject\\\",\\\"fullPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"phoneNumbers\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Dropoff\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td-display mr-1\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"isFieldDisabled\\\",\\\"assesmentCenterList\\\",\\\"inputClass\\\",\\\"inputPlaceholder\\\",\\\"text\\\",\\\"initialAddresses\\\",\\\"autoFocus\\\",\\\"onTextChange\\\",\\\"selectedAddress\\\",\\\"onAddressSelect\\\"],[[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"assesmentCenterList\\\"]],\\\"map-widget-location-search-box\\\",\\\"Search by Address\\\",[27,\\\"readonly\\\",[[23,[\\\"dropAddressText\\\"]]],null],[23,[\\\"addressesOfRiderToBook\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"dropAddressText\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDropAddressSelect\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]]],null,{\\\"statements\\\":[[0,\\\"                      \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\"],[\\\"bottom\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\",\\\"placeNameAddress\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[0,\\\"lat : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[0,\\\"lng : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"location\\\",\\\"lng\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[0,\\\"zone : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n                      \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-1 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/address-place-search\\\",null,[[\\\"isFieldDisabled\\\",\\\"updateLocationForAddressSelect\\\",\\\"addressType\\\",\\\"riderRecord\\\"],[[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"updateLocationForAddressSelect\\\"]],\\\"drop\\\",[23,[\\\"riderRecord\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-2 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\"]],\\\"dropoff\\\"],null]],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin serviceTypeLabel\\\"],[9],[0,\\\"Drop off Zone\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Note\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[[23,[\\\"isViewOnlyMode\\\"]],\\\"Write a note\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"500\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"notes\\\"]]],null]],null],[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"notes\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Phone\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"phoneNumberPlaceHolder\\\"]],\\\"999-999-9999\\\",[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"drop\\\",\\\"phoneNumbers\\\",\\\"firstObject\\\",\\\"fullPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"drop\\\",\\\"phoneNumbers\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin serviceTypeLabel\\\"],[9],[0,\\\"Service Type\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"leg\\\",\\\"serviceWindow\\\"]],[23,[\\\"serviceTypeOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"serviceWindow\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,4,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"allowFundingAgency\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Funding Agency\\\"],[10],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"leg\\\",\\\"fundingAgency\\\"]],[23,[\\\"fundingAgencyOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"fundingAgency\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,3,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Purpose\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"onchange\\\"],[[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"leg\\\",\\\"tripPurpose\\\"]],[23,[\\\"tripPurposeOptions\\\"]],true,\\\"displayName\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"tripPurpose\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[22,2,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editRideshareBookingGranted\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Rideshare\\\"],[10],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"disabled\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"leg\\\",\\\"segment\\\",\\\"noSharing\\\"]],[23,[\\\"rideshareTypeOptions\\\"]]],null],[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"rideshareTypeOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"segment\\\",\\\"noSharing\\\"]]],null]],[[\\\"value\\\"],[\\\"id\\\"]]]]],{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/leg-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/passenger-list/component\", [\"exports\", \"adept-iq/config/placeholders\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/rider-phone-number\"], function (_exports, _placeholders, _mappedPermIds, _riderPhoneNumber) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    fareCalc: Ember.inject.service(),\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    disablePhoneNumber: false,\n    passengerNotesBookingGranted: false,\n    isViewOnlyMode: false,\n    fareCategoryOptions: null,\n    localFareCategorySelections: null,\n    selectedRiders: Ember.computed('booking.selectedRiders.[]', 'booking.selectedRiders.@each.{fareCategory}', function () {\n      const selectedRiders = this.get('booking.selectedRiders');\n      return selectedRiders;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('passengerNotesBookingGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editPassengerNotesBooking));\n      const fareCategoryOptions = this.get('booking').getFareCategoryOptions();\n      this.set('fareCategoryOptions', fareCategoryOptions);\n    },\n\n    actions: {\n      async onFareCategoryChange(riderIndex, selectedFareCategory) {\n        this.set(`booking.activeBooking.localFareCategorySelections.${riderIndex}`, selectedFareCategory);\n        await this.get('updateFareForRider')(riderIndex, selectedFareCategory);\n      },\n\n      onNumberChange: function (rider, maskObj) {\n        rider.set('formattedPhoneNumber', maskObj.unmasked);\n        const areaCode = maskObj.unmasked.substring(0, 3).trim();\n        const phoneNumber = maskObj.unmasked.substring(3).trim();\n        const notificationPhoneNumbers = rider.get('notificationPhoneNumbers'); // the rider does have a main phone number from nyct\n\n        if (notificationPhoneNumbers.length == 0) {\n          const phoneNumberObj = {\n            type: _riderPhoneNumber.MAIN_PHONE_TYPE,\n            areaCode: areaCode,\n            phoneNumber: phoneNumber,\n            extension: '',\n            description: 'MAIN CONTACT #',\n            useForSmsNotifications: false,\n            useForVoiceNotifications: true\n          };\n          notificationPhoneNumbers.pushObject(phoneNumberObj);\n        } else {\n          const updatedNotificationPhoneNumbers = notificationPhoneNumbers.map(phoneNumberObj => {\n            if (phoneNumberObj.type.toLowerCase() == _riderPhoneNumber.MAIN_PHONE_TYPE) {\n              return { ...phoneNumberObj,\n                areaCode,\n                phoneNumber\n              };\n            }\n\n            return phoneNumberObj;\n          });\n          rider.set('notificationPhoneNumbers', updatedNotificationPhoneNumbers);\n          this.set('booking.isRiderPhoneNumberEdited', true);\n        }\n      }\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/passenger-list/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"lUcdGXyr\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderRecord\\\",\\\"index\\\",\\\"eligibility\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"selectedRiders\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"First Name\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"firstName\\\"]]],[9],[10],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Last Name\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"lastName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"ID\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"riderId\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Date of Birth\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"dobFormatted\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Current Age\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"age\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Passcode\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border border-success\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"text-success\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"passcode\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Fare Category\\\"],[10],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"isViewOnlyMode\\\"]],[27,\\\"get\\\",[[23,[\\\"booking\\\",\\\"activeBooking\\\",\\\"localFareCategorySelections\\\"]],[22,2,[]]],null],[23,[\\\"fareCategoryOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onFareCategoryChange\\\",[22,2,[]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                      \\\"],[1,[22,4,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\",\\\"disabled\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[22,1,[\\\"formattedPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[22,1,[]]],null],[27,\\\"or\\\",[[23,[\\\"disablePhoneNumber\\\"]],[23,[\\\"isViewOnlyMode\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right align-top\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Notes\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"cols\\\",\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"focus-out\\\"],[\\\"3\\\",\\\"14\\\",\\\"form-control\\\",\\\"Write a Note\\\",[22,1,[\\\"notes\\\"]],[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"passengerNotesBookingGranted\\\"]]],null],[23,[\\\"isViewOnlyMode\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[22,1,[\\\"notes\\\"]]],null]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"eligibility-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Eligibility\\\"],[10],[0,\\\" \\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"eligibility-rows\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,1,[\\\"rider\\\",\\\"futureEligibilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"eligibility-row\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"eligibility-category\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,3,[\\\"categoryDisplayName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"eligibility-condition\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,3,[\\\"conditionDisplayName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"eligibility-dates\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,3,[\\\"formattedEligibilityStartEnd\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"lt\\\",[[27,\\\"inc\\\",[[22,2,[]]],null],[23,[\\\"selectedRiders\\\",\\\"length\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"hr\\\"],[11,\\\"class\\\",\\\"separate-line\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/passenger-list/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/selected-item-schedule/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YB6JNDcl\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"span\\\"],[9],[0,\\\"Schedule \\\"],[1,[23,[\\\"option\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/selected-item-schedule/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/service-needs-form/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['service-needs-form', 'travel-needs-form'],\n    actions: {\n      onAddServicelNeed() {\n        this.get('serviceNeeds').pushObject('');\n      },\n\n      onRemoveServicelNeed(serviceNeed) {\n        this.get('serviceNeeds').removeObject(serviceNeed);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/service-needs-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VyVZXBSL\",\n    \"block\": \"{\\\"symbols\\\":[\\\"serviceNeed\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"legServiceNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters mt-1\\\"],[9],[0,\\\"\\\\n       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 pl-0  ml-3\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[22,1,[\\\"serviceNeedType\\\",\\\"displayName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 p-0 ml-1\\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[10],[0,\\\"\\\\n     \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/service-needs-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EGZp4Jzn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"schedule\\\",\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"new-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"bookingPanelTitle\\\"]],[27,\\\"and\\\",[true,[27,\\\"not\\\",[[23,[\\\"isViewOnlyMode\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"and\\\",[[23,[\\\"canSave\\\"]],[27,\\\"not\\\",[[23,[\\\"saveInProgress\\\"]]],null],[27,\\\"not\\\",[[23,[\\\"isViewOnlyMode\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passenger-name-list\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"riderFullNames\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"new-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L18:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L19:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[[23,[\\\"passengerListTitle\\\"]],[23,[\\\"passengerCollapseState\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/passenger-list\\\",null,[[\\\"canSave\\\",\\\"disablePhoneNumber\\\",\\\"isViewOnlyMode\\\",\\\"updateFareForRider\\\"],[[23,[\\\"canSave\\\"]],[23,[\\\"disablePhoneNumber\\\"]],[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"updateFareForRider\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L27:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Details\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/trip-details-form\\\",null,[[\\\"riderRecord\\\",\\\"addressesOfRiderToBook\\\",\\\"onAddNewLegClick\\\",\\\"onLegRemoveClick\\\",\\\"isReturnTrip\\\",\\\"legsInBooking\\\",\\\"onFirstLegDateChange\\\",\\\"validateRequestDateTime\\\",\\\"syncPickAndDrop\\\",\\\"pickAddressText\\\",\\\"dropAddressText\\\",\\\"clearPickAndDropAddressText\\\",\\\"defaultFare\\\",\\\"companionFare\\\",\\\"showSameDayNotificationByPermission\\\",\\\"riderFareCategories\\\",\\\"validateBlockoutAddress\\\",\\\"updateADABoundary\\\",\\\"isViewOnlyMode\\\"],[[23,[\\\"riderToBook\\\"]],[23,[\\\"addressesOfRiderToBook\\\"]],[23,[\\\"onAddNewTripLegClick\\\"]],[23,[\\\"onLegTripRemoveClick\\\"]],false,[23,[\\\"tripLegsInBooking\\\"]],[23,[\\\"onFirstLegDateChange\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"validateRequestDateTime\\\"],null],[23,[\\\"syncPickAndDrop\\\"]],[23,[\\\"pickAddressText\\\"]],[23,[\\\"dropAddressText\\\"]],[23,[\\\"clearPickAndDropAddressText\\\"]],[23,[\\\"defaultFare\\\"]],[23,[\\\"companionFare\\\"]],[23,[\\\"showSameDayNotificationByPermission\\\"]],[23,[\\\"riderFareCategories\\\"]],[23,[\\\"validateBlockoutAddress\\\"]],[23,[\\\"updateADABoundary\\\"]],[23,[\\\"isViewOnlyMode\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L50:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\",\\\"onPanelHeaderClick\\\"],[\\\"Return Trip\\\",[23,[\\\"returnTripCollapseState\\\"]],true,[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"preventReturnTripExpansion\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onReturnTripPanelHeaderClick\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/trip-details-form\\\",null,[[\\\"riderRecord\\\",\\\"isReturnTrip\\\",\\\"onAddNewLegClick\\\",\\\"addressesOfRiderToBook\\\",\\\"onLegRemoveClick\\\",\\\"onFirstLegDateChange\\\",\\\"validateRequestDateTime\\\",\\\"legsInBooking\\\",\\\"syncPickAndDrop\\\",\\\"pickAddressText\\\",\\\"dropAddressText\\\",\\\"clearPickAndDropAddressText\\\",\\\"defaultFare\\\",\\\"companionFare\\\",\\\"showSameDayNotificationByPermission\\\",\\\"riderFareCategories\\\",\\\"validateBlockoutAddress\\\",\\\"updateADABoundary\\\",\\\"isViewOnlyMode\\\"],[[23,[\\\"riderToBook\\\"]],true,[23,[\\\"onAddNewReturnLegClick\\\"]],[23,[\\\"addressesOfRiderToBook\\\"]],[23,[\\\"onLegReturnRemoveClick\\\"]],[23,[\\\"onFirstLegDateChange\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"validateRequestDateTime\\\"],null],[23,[\\\"returnTripLegsInBooking\\\"]],[23,[\\\"syncPickAndDrop\\\"]],[23,[\\\"pickAddressText\\\"]],[23,[\\\"dropAddressText\\\"]],[23,[\\\"clearPickAndDropAddressText\\\"]],[23,[\\\"defaultFare\\\"]],[23,[\\\"companionFare\\\"]],[23,[\\\"showSameDayNotificationByPermission\\\"]],[23,[\\\"riderFareCategories\\\"]],[23,[\\\"validateBlockoutAddress\\\"]],[23,[\\\"updateADABoundary\\\"]],[23,[\\\"isViewOnlyMode\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L76:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[\\\"Travel Needs\\\",[23,[\\\"travelNeedCollapseState\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/travel-needs\\\",null,[[\\\"legTravelNeeds\\\",\\\"riderToBook\\\",\\\"riderLegsTravelNeeds\\\",\\\"setLoadAndUnLoadTimeFlag\\\",\\\"setIsLoadAndUnLoadTimeNumberFlag\\\",\\\"legs\\\",\\\"defaultFare\\\",\\\"companionFare\\\",\\\"updateFare\\\",\\\"updateFareForRider\\\",\\\"syncAllLegsTravelNeeds\\\",\\\"isEditMode\\\",\\\"isViewOnlyMode\\\",\\\"maxCompanionCount\\\"],[[23,[\\\"legTravelNeeds\\\"]],[23,[\\\"riderToBook\\\"]],[23,[\\\"activeRiderLegsTravelNeeds\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setLoadAndUnLoadTimeFlag\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"setIsLoadAndUnLoadTimeNumberFlag\\\"],null],[23,[\\\"activeLegsInBooking\\\"]],[23,[\\\"defaultFare\\\"]],[23,[\\\"companionFare\\\"]],[23,[\\\"updateFare\\\"]],[23,[\\\"updateFareForRider\\\"]],[23,[\\\"syncAllLegsTravelNeeds\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"maxCompanionCount\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs' @ L96:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[\\\"Service Needs\\\",[23,[\\\"serviceNeedCollapseState\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/service-needs-form\\\",null,[[\\\"serviceNeeds\\\",\\\"legServiceNeeds\\\",\\\"isViewOnlyMode\\\"],[[23,[\\\"serviceNeeds\\\"]],[23,[\\\"legServiceNeeds\\\"]],[23,[\\\"isViewOnlyMode\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"translucentOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-map-container\\\",\\\"middle left\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isComputingDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map map-widget-controls\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-box\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"computedDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"          Distance is \\\"],[1,[21,\\\"computedDistance\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            Please click to drop pin 1\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            Please click to drop pin 2\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-control right-control\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not-eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control reset-button\\\"],[9],[0,\\\" Reset \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceReset\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\" \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceClose\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map map-widget-controls\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-box\\\"],[9],[0,\\\"Map\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"right-control\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control distance-icon\\\"],[9],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not-eq\\\",[null,[23,[\\\"adaBoundary\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"map-widget-button initial-focus-control ada-boundary-icon \\\",[27,\\\"if\\\",[[23,[\\\"activeADABoundary\\\"]],\\\"active\\\",\\\"\\\"],null]]]],[9],[0,\\\" \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onBoundaryToggle\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/new-booking-form/booking-map\\\",null,[[\\\"elementId\\\",\\\"widget\\\",\\\"latLongPairs\\\",\\\"isEditMode\\\",\\\"isViewOnlyMode\\\",\\\"validateBlockoutAddress\\\",\\\"activeADABoundary\\\",\\\"adaBoundary\\\"],[\\\"booking\\\",[23,[\\\"widget\\\"]],[23,[\\\"latLongPairs\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"validateBlockoutAddress\\\"]],[23,[\\\"activeADABoundary\\\"]],[23,[\\\"adaBoundary\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sec-w-m\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[[23,[\\\"warningModelTitle\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\"Do you want to save your progress?\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onProgressNoClick\\\"],null]],[9],[0,\\\"\\\\n          No\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onYesButtonClick\\\"],null]],[9],[0,\\\"\\\\n          Yes\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"my-cust-sec-window\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showEligibilityRestrictions\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[\\\"Eligibility Restrictions\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEligibleWarningClose\\\"],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/eligibility-restriction-warning\\\",null,[[\\\"riderIdConditionsMap\\\",\\\"ridersWithConditionalEligibility\\\",\\\"onEligibleWarningOK\\\",\\\"onEligibilityWarningYes\\\",\\\"onEligibilityWarningNo\\\",\\\"overrideEligibilityConditionsGranted\\\",\\\"showOnlyOk\\\",\\\"showInitialWarningMessage\\\",\\\"onClose\\\"],[[23,[\\\"riderIdConditionsMap\\\"]],[23,[\\\"ridersWithConditionalEligibility\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onEligibleWarningOK\\\"],null],[23,[\\\"onEligibilityWarningYes\\\"]],[23,[\\\"onEligibilityWarningNo\\\"]],[23,[\\\"overrideEligibilityConditionsGranted\\\"]],[23,[\\\"showOnlyEligibilityOkButton\\\"]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onEligibleWarningClose\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sec-w-m\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isOpenErrorModal\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[[23,[\\\"warningModelTitle\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onWarningModalClose\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\" \\\"],[1,[21,\\\"errorMessage\\\"],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onWarningModalClose\\\"],null]],[9],[0,\\\"\\\\n          OK\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sec-w-m sec-w-schedule-overlap\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"booking\\\",\\\"isScheduleOverLap\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Overlapping Schedules\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\" \\\"],[1,[21,\\\"scheduleErrorMessage\\\"],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"overlap-schedules\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"selectedItemComponent\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"booking\\\",\\\"availableSchedules\\\"]],[23,[\\\"booking\\\",\\\"selectedSchedule\\\"]],\\\"iq-widgets/new-booking-form/selected-item-schedule\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onSelectScheduleOption\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"schedule-detail-info\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"schedule-title\\\"],[9],[0,\\\"Schedule \\\"],[1,[22,1,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"span\\\"],[9],[0,\\\"Planned Start: \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,1,[\\\"start\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null],false],[0,\\\" | \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,1,[\\\"start\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"timeMoment\\\"]]],null],false],[0,\\\"   \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"span\\\"],[9],[0,\\\"Planned End: \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,1,[\\\"end\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null],false],[0,\\\" | \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,1,[\\\"end\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"timeMoment\\\"]]],null],false],[0,\\\"  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn m-2 float-right\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"],null]],[9],[0,\\\"\\\\n          Confirm\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn m-2 float-right\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCancelClick\\\"],null]],[9],[0,\\\"\\\\n          Cancel\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showBookingSummary\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/new-booking-form/booking-details\\\",null,[[\\\"elementId\\\",\\\"onClose\\\",\\\"widget\\\",\\\"tripLegs\\\",\\\"riderRecord\\\",\\\"isEditMode\\\",\\\"isViewOnlyMode\\\",\\\"travelModeMapper\\\",\\\"allowedServiceModes\\\",\\\"itpRequestResults\\\",\\\"returnTripBooking\\\",\\\"legTravelModeMap\\\"],[\\\"booking-details\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickClose\\\"],null],[23,[\\\"widget\\\"]],[23,[\\\"tripLegsInBooking\\\"]],[23,[\\\"riderToBook\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"travelModeMapper\\\"]],[23,[\\\"allRiderAllowedServiceModes\\\"]],[23,[\\\"booking\\\",\\\"itpInfo\\\",\\\"itpRequestResults\\\"]],[23,[\\\"returnTripLegsInBooking\\\"]],[23,[\\\"legTravelModeMap\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showADAEligibility\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/new-booking-form/ada-eligibility\\\",null,[[\\\"onClickX\\\",\\\"onDeny\\\",\\\"onOverride\\\",\\\"arrayADABoundaries\\\",\\\"riderADAEligibility\\\",\\\"isViewOnlyMode\\\",\\\"noADAEligibility\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onClickXADA\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickDenyADA\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickOverrideADA\\\"],null],[23,[\\\"arrayADABoundaries\\\"]],[23,[\\\"riderADAEligibility\\\"]],[23,[\\\"isViewOnlyMode\\\"]],[23,[\\\"noADAEligibility\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/travel-needs/component\", [\"exports\", \"lodash\", \"ember-concurrency\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/travel-need-type\", \"adept-iq/utils/vehicleCapacity\"], function (_exports, _lodash, _emberConcurrency, _mappedPermIds, _travelNeedType, _vehicleCapacity) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-mixed-spaces-and-tabs */\n  const travelNeedsToFilter = [];\n  const MAX_LOAD_TIME = 15;\n  const ELIGIBLE_TRAVEL_NEEDS_FOR_OVERRIDE = ['wheelchair', 'liftRequired'];\n\n  var _default = Ember.Component.extend({\n    classNames: ['travel-needs-form'],\n    booking: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    fareCalc: Ember.inject.service(),\n    travelNeedTypes: null,\n    passengerTypes: null,\n    ambulatoryCount: 1,\n    countPath: 'count',\n    pcaTravelNeed: null,\n    travelNeedTypePath: 'travelNeedType',\n    previousSelectedCompanionCount: 0,\n    travelNeedTypeOptions: null,\n    // need to populate this,\n    totalRidersCount: 0,\n    bigSeats: null,\n    editLoadUnloadBookingGranted: false,\n    disableFieldEditing: Ember.computed('booking.isOpenErrorModal', 'isFieldDisabled', function () {\n      return this.get('booking.isOpenErrorModal') || this.get('isFieldDisabled');\n    }),\n    isAllLegs: Ember.computed.alias('booking.isAllLegs'),\n    maximumCompanionCount: Ember.computed.alias('maxCompanionCount'),\n    isShowSpecialPermission: false,\n    haveSpecialPermission: false,\n    specialPermissionTitle: 'Booking - Wheelchair Override',\n    bodyMessage: 'Override privileges are required to assign a lift and/or wheelchair to a trip for a client that is not approved for this equipment.',\n    overrideWheelchairRequest: _mappedPermIds.default.overrideWheelchairRequest,\n    overrideTravelNeed: null,\n    isViewOnlyMode: Ember.computed.alias('booking.isViewOnlyMode'),\n    collapsedRiderSections: null,\n    isFieldDisabled: Ember.computed('disableRequestDate', 'isEditingUnscheduledBooking', 'isViewOnlyMode', function () {\n      return this.get('disableRequestDate') || this.get('booking.isEditingUnscheduledBooking') || this.get('booking.isViewOnlyMode');\n    }),\n    // Reg-NYAAR-18969 - Based on the AllLegs checked\n    travelNeedLegs: Ember.computed('isAllLegs', function () {\n      const isAllLegs = this.get('isAllLegs');\n      const legs = this.get('legs');\n\n      if (isAllLegs) {\n        return [legs.firstObject];\n      }\n\n      return legs;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const passengerTypes = this.store.peekAll('passenger-type');\n      const maximumCompanionConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/maximum_companions');\n      const maximumCompanionValue = maximumCompanionConfig ? parseInt(maximumCompanionConfig.get('value'), 10) : 1;\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const companionArray = [...Array(maximumCompanionValue + 1).keys()];\n      this.set('booking.travelNeedItems', travelNeedTypes);\n      this.setProperties({\n        companionOptions: companionArray,\n        bigSeats: bigSeatsTN.map(tr => tr.get('name').toUpperCase()),\n        passengerTypes,\n        travelNeedTypes,\n        travelNeedTypeOptions: travelNeedTypes,\n        totalRidersCount: this.get('booking.selectedRiders').length\n      });\n      this.getAndSetCompanionTravelNeed();\n      this.countDisabledObserver();\n      this.validateLoadAndUnLoadTimeToBeNumber();\n      this.validateLoadAndUnLoadTime();\n      this.loadTimeValue();\n      this.unloadTimeValue();\n      this.set('collapsedRiderSections', {});\n      this.set('editLoadUnloadBookingGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editLoadUnloadBooking, null));\n      this.get('updateFare')();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    countDisabledObserver: Ember.observer('legs.@each.legTravelNeeds', 'legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      this.get('legs').forEach(leg => {\n        leg.get('legTravelNeeds').forEach(legTravelNeed => {\n          this.setTravelNeedTypeCount(legTravelNeed);\n        });\n      });\n    }),\n\n    // get wheelchair count for single and multiple riders NYAAR-11938\n    getAndSetWheelChairSeatCount() {\n      let wheelChairCount = 0;\n      this.get('booking.selectedRiders').forEach(rider => {\n        const riderTravelNeeds = rider.get('travelNeeds');\n        riderTravelNeeds.forEach(riderTravelNeed => {\n          if (riderTravelNeed.type === 'wheelchair') {\n            wheelChairCount += riderTravelNeed.cnt;\n          }\n        });\n      });\n      this.get('legs').forEach(leg => {\n        const wheelChairTravelNeed = leg.get('legTravelNeeds').find(travelNeed => {\n          return travelNeed.get('travelNeedTypeNameUppercase') === 'WHEELCHAIR';\n        });\n\n        if (wheelChairTravelNeed) {\n          wheelChairTravelNeed.set('count', wheelChairCount);\n        }\n      });\n    },\n\n    getAndSetCompanionTravelNeed() {\n      this.get('legs').forEach(leg => {\n        const companionTravelNeed = this.getCompanionTravelNeed(leg);\n\n        if (companionTravelNeed) {\n          const companionCount = companionTravelNeed.get('count');\n          this.get('booking').setCompanionCount(companionCount);\n        }\n      });\n    },\n\n    loadTimeValue: Ember.observer('legs.@each.loadTime', function () {\n      this.get('legs').forEach(leg => {\n        //converting the loadTime to seconds\n        const loadTime = leg.get('loadTime') * 60;\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          segment.set('pick.dwell', loadTime);\n        });\n      });\n    }),\n    unloadTimeValue: Ember.observer('legs.@each.unloadTime', function () {\n      this.get('legs').forEach(leg => {\n        //converting the unloadTime to seconds\n        const unloadTime = leg.get('unloadTime') * 60;\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          segment.set('drop.dwell', unloadTime);\n        });\n      });\n    }),\n    pcaNotEligible: Ember.computed('booking.selectedRiders.@each.{travelNeeds}', function () {\n      const totalPcaEligibleRiders = this.getNoOfPcaEligibleRiders();\n      const notEligible = totalPcaEligibleRiders === 0;\n      return notEligible;\n    }),\n    pcaStateChecked: Ember.computed('booking.selectedRiders.@each.{travelNeeds}', function () {\n      const totalPcaRider = this.getNoOfPcaEligibleRiders();\n      const checked = totalPcaRider > 0;\n      return checked;\n    }),\n    availableTravelNeedTypes: Ember.computed('riderLegsTravelNeeds', 'legs.@each.legTravelNeeds.[]', 'riderLegsTravelNeeds.@each.travelNeedLegs.[]', function () {\n      const allTravelTypes = this.store.peekAll('travel-need-type');\n      const riderLegsTravelNeeds = this.get('riderLegsTravelNeeds');\n      return this.get('legs').map((leg, legIndex) => {\n        if (!riderLegsTravelNeeds) {\n          return [];\n        }\n\n        return riderLegsTravelNeeds.map(rider => {\n          const existingTravelNeedsTypes = [];\n\n          if (rider.travelNeedLegs && rider.travelNeedLegs[legIndex]) {\n            const travelNeeds = rider.travelNeedLegs[legIndex].nonClonedTravelNeeds || [];\n            travelNeeds.forEach(travelNeed => {\n              const name = travelNeed.get('travelNeedType.name') || travelNeed.get('travelNeedTypeNameUppercase');\n\n              if (name) {\n                existingTravelNeedsTypes.push(name.toUpperCase());\n              }\n            });\n          }\n\n          const travelNeedTypesOptionsThatShouldNotBeInOptions = existingTravelNeedsTypes.filter(tr => tr).concat(travelNeedsToFilter);\n          const filteredArray = allTravelTypes.filter(travelType => {\n            return travelType.name && !travelNeedTypesOptionsThatShouldNotBeInOptions.includes(travelType.name.toUpperCase()) || travelType.name && this.get('bigSeats').includes(travelType.name.toUpperCase());\n          });\n          return filteredArray;\n        });\n      });\n    }),\n    validateLoadAndUnLoadTime: Ember.observer('legs.@each.loadTime', 'legs.@each.unloadTime', function () {\n      this.get('legs').forEach((leg, index) => {\n        const loadTime = leg.get('loadTime');\n        const unLoadTime = leg.get('unloadTime');\n\n        if (loadTime > MAX_LOAD_TIME || unLoadTime > MAX_LOAD_TIME) {\n          this.get('setLoadAndUnLoadTimeFlag')(false);\n          this.get('booking').showErrorMessage(`Load/Unload time value must be 15 min or less in Leg Trip ${index + 1}.`);\n        } else {\n          this.get('setLoadAndUnLoadTimeFlag')(true);\n        }\n      });\n    }),\n    validateLoadAndUnLoadTimeToBeNumber: Ember.observer('legs.@each.loadTime', 'legs.@each.unloadTime', function () {\n      this.get('legs').forEach((leg, index) => {\n        const loadTime = leg.get('loadTime');\n        const unLoadTime = leg.get('unloadTime');\n        const isLoadUnloadTimesNumber = this.get('booking').isNumber(loadTime) && this.get('booking').isNumber(unLoadTime);\n\n        if (isLoadUnloadTimesNumber) {\n          this.get('setIsLoadAndUnLoadTimeNumberFlag')(true);\n        } else {\n          this.get('setIsLoadAndUnLoadTimeNumberFlag')(false);\n          this.get('booking').showErrorMessage(`Please enter valid numbers for load/unload time in Leg Trip ${index + 1}.`);\n        }\n      });\n    }),\n\n    /**\n     * NYAAR-18694 Travel needs count are not getting updated on adding new travel needs after doing undo on Create Booking\n     * @param travelNeed\n     */\n    setTravelNeedTypeCount(travelNeed) {\n      const isEditMode = this.get('isEditMode');\n      const isViewOnlyMode = this.get('isViewOnlyMode');\n      const isConsumable = travelNeed.get('travelNeedType.isConsumable');\n      let isCountDisabled = true;\n\n      if (!isEditMode && isConsumable && !isViewOnlyMode) {\n        isCountDisabled = false;\n      }\n\n      travelNeed.set('isCountDisabled', isCountDisabled);\n    },\n\n    getNoOfPcaEligibleRiders() {\n      const pcaEligibleRiders = [];\n      this.get('booking.selectedRiders').forEach(rider => {\n        const riderTravelNeeds = rider.get('travelNeeds');\n        riderTravelNeeds.forEach(riderTravelNeed => {\n          if (riderTravelNeed.type === 'pca') {\n            pcaEligibleRiders.push(rider);\n          }\n        });\n      });\n      return pcaEligibleRiders.length;\n    },\n\n    getCompanionTravelNeed(leg) {\n      return leg.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'COMPANION';\n      });\n    },\n\n    getPermission: (0, _emberConcurrency.task)(function* () {\n      this.set('isShowSpecialPermission', true);\n      yield (0, _emberConcurrency.waitForProperty)(this, 'isShowSpecialPermission', p => p === false);\n    }),\n\n    // check for vehicle capacity type of wheelchair and lift required travel needs only\n    async isTravelNeedTypeAllowed(travelNeedType) {\n      const overrideWheelchairRequestGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideWheelchairRequest, null);\n      const riderTravelNeeds = this.get('riderTravelNeeds');\n      const travelNeedTypeId = travelNeedType.get('vehicleCapacityType.id');\n      const needsValidation = [_travelNeedType.LIFTREQUIRED_TRAVELNEED_TYPE, _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE].includes(travelNeedTypeId); // we don't require validation for other travel need types except for liftRequired and wheelchair\n\n      if (!needsValidation) {\n        return true;\n      }\n\n      const existInRiderTravelNeeds = riderTravelNeeds.filter(riderTravelNeed => riderTravelNeed.get('vehicleCapacityType.id') === travelNeedTypeId); // exist in the rider's travel needs\n\n      if (existInRiderTravelNeeds.length > 0) {\n        return true;\n      } // does not exist in rider's travel needs but user have overrideWheelchairRequest permission\n\n\n      if (overrideWheelchairRequestGranted) {\n        return true;\n      } // get permission from another user\n\n\n      await this.get('getPermission').perform();\n      return this.get('haveSpecialPermission');\n    },\n\n    async changeTravelNeedType(travelNeed, travelNeedType) {\n      const travelNeedTypePath = this.get('travelNeedTypePath');\n      const isTravelNeedTypeAllowed = await this.isTravelNeedTypeAllowed(travelNeedType);\n      const isConsumable = travelNeedType.get('isConsumable');\n      const isPrevConsumable = travelNeed.get('travelNeedType.isConsumable');\n\n      if (isTravelNeedTypeAllowed) {\n        travelNeed.set(travelNeedTypePath, travelNeedType);\n      } // The \"seat\" changes from 0 to 1 as the travel need changes from non-consumable to consumable.\n      // and vice versa\n\n\n      if (!isConsumable && isPrevConsumable) {\n        travelNeed.set('count', 0);\n      }\n\n      if (isConsumable && !isPrevConsumable) {\n        travelNeed.set('count', 1);\n      }\n    },\n\n    //set the overrided travel need name\n    setTravelNeedNameForOverride(travelNeedType) {\n      if (ELIGIBLE_TRAVEL_NEEDS_FOR_OVERRIDE.includes(travelNeedType.name)) {\n        this.set('overrideTravelNeed', travelNeedType.name);\n      }\n    },\n\n    reComputeMaxLoadUnloadTime(riderLegsTravelNeeds, riderManagedTravelNeeds) {\n      return riderLegsTravelNeeds.reduce((acc, ctn) => {\n        const travelNeedTypeName = ctn.get('travelNeedType.name');\n        let load = parseInt(ctn.get('travelNeedType.loadTime'), 10);\n        let unload = parseInt(ctn.get('travelNeedType.unloadTime'), 10);\n        const matchedOverride = riderManagedTravelNeeds.find(override => override.name === travelNeedTypeName);\n\n        if (matchedOverride) {\n          load = _lodash.default.isFinite(matchedOverride.loadTime) ? matchedOverride.loadTime : load;\n          unload = _lodash.default.isFinite(matchedOverride.unloadTime) ? matchedOverride.unloadTime : unload;\n        }\n\n        return {\n          maxTnConfigLoadValue: Math.max(acc.maxTnConfigLoadValue, load),\n          maxTnConfigUnloadValue: Math.max(acc.maxTnConfigUnloadValue, unload)\n        };\n      }, {\n        maxTnConfigLoadValue: -Infinity,\n        maxTnConfigUnloadValue: -Infinity\n      });\n    },\n\n    safeNumber(value) {\n      let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      return _lodash.default.isNumber(value) && _lodash.default.isFinite(value) ? value : defaultValue;\n    },\n\n    actions: {\n      toggleRiderSection(riderId) {\n        const collapsed = this.get(`collapsedRiderSections.${riderId}`);\n        this.set(`collapsedRiderSections.${riderId}`, !collapsed);\n      },\n\n      onTravelNeedCountChange(travelNeed, riderIndex, value) {\n        travelNeed.set('count', value);\n        this.get('syncAllLegsTravelNeeds')();\n        this.get('updateFareForRider')(riderIndex);\n      },\n\n      async onTravelNeedChange(travelNeed, riderIndex, legIndex, selectedTravelNeed) {\n        this.setTravelNeedNameForOverride(selectedTravelNeed);\n        await this.changeTravelNeedType(travelNeed, selectedTravelNeed);\n        const riderLegsTravelNeeds = this.get('riderLegsTravelNeeds');\n        const rider = riderLegsTravelNeeds[riderIndex];\n        const leg = rider.travelNeedLegs[legIndex];\n        const {\n          maxTnConfigLoadValue,\n          maxTnConfigUnloadValue\n        } = this.reComputeMaxLoadUnloadTime(leg.nonClonedTravelNeeds, rider.riderTravelNeeds);\n        this.set(`riderLegsTravelNeeds.${riderIndex}.travelNeedLegs.${legIndex}.loadTime`, Math.max(this.safeNumber(leg.loadTime), this.safeNumber(maxTnConfigLoadValue)));\n        this.set(`riderLegsTravelNeeds.${riderIndex}.travelNeedLegs.${legIndex}.unloadTime`, Math.max(this.safeNumber(leg.unloadTime), this.safeNumber(maxTnConfigUnloadValue)));\n        this.setTravelNeedTypeCount(travelNeed);\n        this.notifyPropertyChange('riderLegsTravelNeeds');\n        this.get('syncAllLegsTravelNeeds')();\n        this.get('updateFareForRider')(riderIndex);\n      },\n\n      onLoadTimeChange(leg, loadTime) {\n        const loadTimeInSeconds = loadTime * 60;\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          segment.set('pick.dwell', loadTimeInSeconds);\n        });\n      },\n\n      onUnLoadTimeChange(leg, unloadTime) {\n        const unloadTimeInSeconds = unloadTime * 60;\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          segment.set('drop.dwell', unloadTimeInSeconds);\n        });\n      },\n\n      onAddTravelNeed(riderIndex, legIndex) {\n        const store = this.get('store');\n        const riderLegsTravelNeeds = this.get('riderLegsTravelNeeds');\n        const riderData = riderLegsTravelNeeds[riderIndex];\n        if (!riderData) return;\n        const newLegTravelNeed = store.createRecord('leg-travel-need', {\n          count: 0,\n          travelNeedType: null,\n          passengerType: store.peekRecord('passenger-type', 'client'),\n          rider: riderData.rider,\n          legIndex\n        }); // If \"All Legs\" is checked, add the travelNeed to all legs\n\n        if (riderData.isAllLegs) {\n          riderData.travelNeedLegs.forEach(legData => {\n            legData.nonClonedTravelNeeds.pushObject(store.createRecord('leg-travel-need', { ...newLegTravelNeed.toJSON(),\n              // shallow copy\n              passengerType: newLegTravelNeed.get('passengerType'),\n              travelNeedType: null,\n              // ensure new selection\n              legIndex: legData.legIndex\n            }));\n          });\n        } else {\n          riderData.travelNeedLegs[legIndex].nonClonedTravelNeeds.pushObject(newLegTravelNeed);\n        }\n\n        this.notifyPropertyChange('riderLegsTravelNeeds');\n        this.get('updateFare')();\n      },\n\n      async onRemoveTravelNeed(travelNeedToRemove, riderIndex, legIndex) {\n        const riderLegsTravelNeeds = this.get('riderLegsTravelNeeds');\n        const rider = riderLegsTravelNeeds[riderIndex];\n        const leg = rider.travelNeedLegs[legIndex];\n        const newRiderLegsTravelNeeds = leg.nonClonedTravelNeeds.filter(tn => tn !== travelNeedToRemove);\n        const enoughVehCapacity = (0, _vehicleCapacity.haveEnoughVehCapacity)(newRiderLegsTravelNeeds);\n\n        if (!enoughVehCapacity) {\n          this.get('notifications').warning('Must have at least one travel need with ambulatory or wheelchair vehicle capacity.');\n          return;\n        }\n\n        const {\n          maxTnConfigLoadValue,\n          maxTnConfigUnloadValue\n        } = this.reComputeMaxLoadUnloadTime(newRiderLegsTravelNeeds, rider.riderTravelNeeds);\n        this.set(`riderLegsTravelNeeds.${riderIndex}.travelNeedLegs.${legIndex}.nonClonedTravelNeeds`, newRiderLegsTravelNeeds);\n        this.set(`riderLegsTravelNeeds.${riderIndex}.travelNeedLegs.${legIndex}.loadTime`, maxTnConfigLoadValue);\n        this.set(`riderLegsTravelNeeds.${riderIndex}.travelNeedLegs.${legIndex}.unloadTime`, maxTnConfigUnloadValue); // Force reactivity if needed\n\n        this.notifyPropertyChange('riderLegsTravelNeeds');\n        this.get('syncAllLegsTravelNeeds')();\n        await this.get('updateFare')();\n      },\n\n      onAllLegsChange(riderIndex) {\n        const riderTravelNeeds = this.get(`riderLegsTravelNeeds.${riderIndex}`);\n        const isNowAllLegs = !riderTravelNeeds.isAllLegs;\n        this.set(`riderLegsTravelNeeds.${riderIndex}.isAllLegs`, isNowAllLegs);\n\n        if (!isNowAllLegs) {\n          // restore from cache\n          const restored = riderTravelNeeds.__cachedPerLegTravelNeedLegs;\n\n          if (restored) {\n            riderTravelNeeds.travelNeedLegs.forEach((leg, index) => {\n              if (index !== 0) {\n                const filteredRestoredNeeds = restored[0].nonClonedTravelNeeds.filter(tn => tn.get('travelNeedType'));\n                Ember.set(leg, 'nonClonedTravelNeeds', filteredRestoredNeeds);\n              }\n            });\n          }\n        }\n\n        this.notifyPropertyChange('riderLegsTravelNeeds');\n        this.get('updateFareForRider')(riderIndex);\n      },\n\n      onFareChange(riderIndex, legIndex, maskObj) {\n        this.set(`riderLegsTravelNeeds.${riderIndex}.travelNeedLegs.${legIndex}.segment.fare`, parseFloat(maskObj.unmasked).toFixed(2));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/travel-needs/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tyqMLy2I\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderTravelNeed\\\",\\\"riderIndex\\\",\\\"leg\\\",\\\"index\\\",\\\"travelNeed\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"riderLegsTravelNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-travel-need-section mb-3 border p-2 rounded\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex justify-content-between align-items-center\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 p-0 ml-1 mr-3 font-weight-bold\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[22,1,[\\\"rider\\\",\\\"fullName\\\"]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-chevron-\\\",[27,\\\"if\\\",[[27,\\\"get\\\",[[23,[\\\"collapsedRiderSections\\\"]],[22,1,[\\\"rider\\\",\\\"id\\\"]]],null],\\\"down\\\",\\\"up\\\"],null]]]],[11,\\\"style\\\",\\\"cursor: pointer;\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleRiderSection\\\",[22,1,[\\\"rider\\\",\\\"id\\\"]]],null]],[9],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[27,\\\"get\\\",[[23,[\\\"collapsedRiderSections\\\"]],[22,1,[\\\"rider\\\",\\\"id\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,1,[\\\"travelNeedLegs\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[27,\\\"and\\\",[[22,1,[\\\"isAllLegs\\\"]],[27,\\\"not-eq\\\",[[22,4,[]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector mb-4\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex bd-highlight\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 p-0 ml-1 mr-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,4,[]],0],null]],null,{\\\"statements\\\":[[0,\\\"                All Legs\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"checked\\\",[22,1,[\\\"isAllLegs\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAllLegsChange\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"purpose\\\"]],\\\"return\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                Return Trip\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                Leg Trip \\\"],[1,[27,\\\"plus-one\\\",[[22,4,[]]],null],false],[0,\\\"\\\\n              \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 mr-1 ml-2 flex-seat-label\\\"],[9],[0,\\\"Seats\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 p-0 ml-1\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-add-travel-need\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddTravelNeed\\\",[22,2,[]],[22,4,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,3,[\\\"nonClonedTravelNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-margin\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 p-0 ml-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",[23,[\\\"isFieldDisabled\\\"]],[27,\\\"get\\\",[[27,\\\"get\\\",[[23,[\\\"availableTravelNeedTypes\\\"]],[22,4,[]]],null],[22,2,[]]],null],false,[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,5,[]],[23,[\\\"travelNeedTypePath\\\"]]],null]],null],\\\"Travel Needs\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedChange\\\",[22,5,[]],[22,2,[]],[22,4,[]]],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,6,[\\\"upperCaseName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 ml-1\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[12,\\\"max\\\",[27,\\\"if\\\",[[22,5,[\\\"travelNeedType\\\",\\\"isCompanion\\\"]],[23,[\\\"maximumCompanionCount\\\"]],10],null]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,5,[]],\\\"count\\\"],null]],null]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isViewOnlyMode\\\"]],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,5,[]],\\\"isCountDisabled\\\"],null]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedCountChange\\\",[22,5,[]],[22,2,[]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 p-0\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trashButton\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveTravelNeed\\\",[22,5,[]],[22,2,[]],[22,4,[]]],null]],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editLoadUnloadBookingGranted\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"load-unload-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"load-time-group\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"load-time-label\\\"],[9],[0,\\\"Load Time\\\"],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"text\\\",[23,[\\\"disableFieldEditing\\\"]],[22,3,[\\\"loadTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onLoadTimeChange\\\",[22,3,[]]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unload-time-group\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"unload-time-label\\\"],[9],[0,\\\"Unload Time\\\"],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"text\\\",[23,[\\\"disableFieldEditing\\\"]],[22,3,[\\\"unloadTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUnLoadTimeChange\\\",[22,3,[]]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"load-unload-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"fare-group\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"fare-label\\\"],[9],[0,\\\"Fare\\\"],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/number-mask\\\",null,[[\\\"inputClass\\\",\\\"placeholder\\\",\\\"decimal\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"fare-field\\\",\\\"Amount\\\",true,[23,[\\\"disableFareField\\\"]],[22,3,[\\\"segment\\\",\\\"fare\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onFareChange\\\",[22,2,[]],[22,4,[]]],null]]]],false],[0,\\\"\\\\n\\\"],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isShowSpecialPermission\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"get-special-permission\\\",null,[[\\\"haveSpecialPermission\\\",\\\"isShowSpecialPermission\\\",\\\"requiredPermission\\\",\\\"headerTitle\\\",\\\"bodyMessage\\\",\\\"overrideTravelNeed\\\"],[[23,[\\\"haveSpecialPermission\\\"]],[23,[\\\"isShowSpecialPermission\\\"]],[23,[\\\"overrideWheelchairRequest\\\"]],[23,[\\\"specialPermissionTitle\\\"]],[23,[\\\"bodyMessage\\\"]],[23,[\\\"overrideTravelNeed\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/travel-needs/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/trip-details-form/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['trip-details-form'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    isFieldDisabled: Ember.computed('disableRequestDate', 'isEditingUnscheduledBooking', 'isViewOnlyMode', function () {\n      return this.get('disableRequestDate') || this.get('booking.isEditingUnscheduledBooking') || this.get('booking.isViewOnlyMode');\n    }),\n    hasMoreThanOneLeg: Ember.computed('legsInBooking.[]', function () {\n      return this.get('legsInBooking.length') > 1;\n    }),\n    noOfLegs: Ember.computed('legsInBooking.[]', function () {\n      return this.get('legsInBooking.length');\n    }),\n\n    canShowRemove(legIndex) {\n      return this.get('hasMoreThanOneLeg') && legIndex !== 0;\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    // we are just checking using postalCode because both nyct and tomtom returns that consistently\n    validateIfPickAndDropArePresent() {\n      let allLegsHavePickAndDrop = true;\n      this.get('legsInBooking').forEach(leg => {\n        if (leg.get('segments.firstObject.pick.place.address.postalCode') && leg.get('segments.lastObject.drop.place.address.postalCode')) {\n          allLegsHavePickAndDrop = true;\n        } else {\n          allLegsHavePickAndDrop = false;\n        }\n      });\n      return allLegsHavePickAndDrop;\n    },\n\n    actions: {\n      onAddNewLegClick() {\n        if (this.validateIfPickAndDropArePresent()) {\n          this.get('onAddNewLegClick')();\n        } else {\n          this.get('booking').showErrorMessage('Please enter valid leg addresses.');\n        }\n      },\n\n      onLegRemoveClick(leg) {\n        this.get('onLegRemoveClick')(leg);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-booking-form/trip-details-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eEyLusd3\",\n    \"block\": \"{\\\"symbols\\\":[\\\"leg\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"noOfLegs\\\"]],0],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"legsInBooking\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/new-booking-form/leg-form\\\",null,[[\\\"legIndex\\\",\\\"addressesOfRiderToBook\\\",\\\"syncPickAndDrop\\\",\\\"leg\\\",\\\"disableRequestDate\\\",\\\"isReturnTrip\\\",\\\"onFirstLegDateChange\\\",\\\"onLegRemoveClick\\\",\\\"validateRequestDateTime\\\",\\\"showErrorMessage\\\",\\\"pickAddressText\\\",\\\"dropAddressText\\\",\\\"clearPickAndDropAddressText\\\",\\\"riderRecord\\\",\\\"defaultFare\\\",\\\"companionFare\\\",\\\"showSameDayNotificationByPermission\\\",\\\"riderFareCategories\\\",\\\"validateBlockoutAddress\\\",\\\"updateADABoundary\\\",\\\"isViewOnlyMode\\\"],[[22,2,[]],[23,[\\\"addressesOfRiderToBook\\\"]],[23,[\\\"syncPickAndDrop\\\"]],[22,1,[]],[23,[\\\"disableRequestDate\\\"]],[23,[\\\"isReturnTrip\\\"]],[23,[\\\"onFirstLegDateChange\\\"]],[23,[\\\"onLegRemoveClick\\\"]],[23,[\\\"validateRequestDateTime\\\"]],[23,[\\\"showErrorMessage\\\"]],[23,[\\\"pickAddressText\\\"]],[23,[\\\"dropAddressText\\\"]],[23,[\\\"clearPickAndDropAddressText\\\"]],[23,[\\\"riderRecord\\\"]],[23,[\\\"defaultFare\\\"]],[23,[\\\"companionFare\\\"]],[23,[\\\"showSameDayNotificationByPermission\\\"]],[23,[\\\"riderFareCategories\\\"]],[23,[\\\"validateBlockoutAddress\\\"]],[23,[\\\"updateADABoundary\\\"]],[23,[\\\"isViewOnlyMode\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"isReturnTrip\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-10 offset-md-2 mr-1 remove-col-padding\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton float-right mr-1 btn-font-size\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddNewLegClick\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n              Add New Legs\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/new-booking-form/trip-details-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-trip-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/new-trip-form-widget/config\", \"moment\", \"adept-iq/config/mapped-permIds\"], function (_exports, _component, _config, _moment, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    editableSections: _config.default.editableSections,\n    classNames: ['new-trip-form-widget', 'data-test-new-trip-form-widget'],\n\n    init() {\n      this._super(...arguments);\n\n      this.configureAddTripPermission();\n    },\n\n    configureAddTripPermission() {\n      const record = this.get('editableRecords')[0];\n      const sameDayTripPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createSameDayBookings, null);\n      const FutureDayTripPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createFutureBookings, null);\n      let maxDate = null;\n      let minDate = null;\n\n      if (sameDayTripPermGranted && !FutureDayTripPermGranted) {\n        maxDate = (0, _moment.default)().endOf('day');\n      }\n\n      if (FutureDayTripPermGranted && !sameDayTripPermGranted) {\n        minDate = (0, _moment.default)().startOf('day').add(1, 'day').toDate();\n      }\n\n      record.set('tripMaxDate', maxDate);\n      record.set('tripMinDate', minDate);\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const isEligible = record.get('rider.riderEligibilities') || [];\n        const requestedTime = record.get('leg.content.requestTime');\n\n        if (Ember.isNone(requestedTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Date should be there');\n        }\n\n        const eligibleRecord = isEligible.find(value => {\n          const from = (0, _moment.default)(Ember.get(value, 'from'), 'DD/MM/YYYY');\n          const to = (0, _moment.default)(Ember.get(value, 'to'), 'DD/MM/YYYY');\n          const tripDate = (0, _moment.default)(requestedTime, 'DD/MM/YYYY');\n          return tripDate.isAfter(from) && tripDate.isBefore(to);\n        });\n\n        if (Ember.isNone(eligibleRecord)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('This passenger is not eligible on the selected date.');\n        }\n\n        if (Ember.isEmpty(record.get('pick.place.location.latlng'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Pickup address should be there');\n        }\n\n        if (Ember.isEmpty(record.get('drop.place.location.latlng'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Drop address should be there');\n        }\n\n        if (Ember.isEmpty(record.get('fare'))) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Fare should be entered');\n        } //TODO: activate once we have subscription working\n        //validate subscriptions\n        // record.subscriptions.forEach(subscription => {\n        //   subscription.recurrencePatterns.forEach(recurrencePattern => {\n        //     if (recurrencePattern.recurring) {\n        //       if (recurrencePattern.type === 'monthly') {\n        //         if (isNone(recurrencePattern.weekOfMonth) &&\n        //           isNone(recurrencePattern.dayOfMonth)) {\n        //           valid = false;\n        //           this.get('editModal.errors').pushObject('Day of month and week of month cannot be both blank.');\n        //         } else if (!isNone(recurrencePattern.weekOfMonth) &&\n        //           (recurrencePattern.selectedDOWs.length < 1)) {\n        //           valid = false;\n        //           this.get('editModal.errors').pushObject('Select day of the week.');\n        //         }\n        //       } else if (recurrencePattern.selectedDOWs.length < 1) {\n        //         valid = false;\n        //         this.get('editModal.errors').pushObject('Select the recurring day for subscription.');\n        //       }\n        //       if (isNone(recurrencePattern.subscriptionStartDate)) {\n        //         valid = false;\n        //         this.get('editModal.errors').pushObject('Must select a start date for subscription.');\n        //       }\n        //     }\n        //   });\n        // });\n\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n          this.get('geocode').activateGeocode(false);\n          this.set('addressRecord', null);\n          this.get('service').apply();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/new-trip-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'leg.booking.id',\n        editable: false\n      }, {\n        id: 'fullName',\n        type: 'text',\n        label: 'Passenger First Name',\n        valuePath: 'leg.rider.fullName',\n        editable: false\n      }, {\n        id: 'riderId',\n        type: 'text',\n        label: 'Passenger ID',\n        valuePath: 'leg.rider.riderId',\n        editable: false\n      }]\n    }, {\n      title: 'Trip Details',\n      fields: [{\n        id: 'requestedTime',\n        type: 'datetimeflatpickr',\n        label: 'Request Time',\n        valuePath: 'leg.requestTime',\n        editable: true,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        defaultWidth: 50,\n        extra: {\n          maxTimePath: 'tripMaxDate',\n          minTimePath: 'tripMinDate'\n        }\n      }, {\n        id: 'anchor',\n        type: 'enum',\n        label: 'Anchor',\n        valuePath: 'anchor',\n        cellDesc: 'anchor',\n        editable: true,\n        hidden: false,\n        extra: {\n          options: ['pick', 'drop'],\n          allowMultiple: false\n        }\n      }]\n    }, {\n      title: 'Pickup Address',\n      fields: [{\n        id: 'originaddresses',\n        type: 'addresses',\n        label: '',\n        valuePath: 'pick.place',\n        modelName: 'place',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetAddress',\n          localityPath: 'address.content.locality',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.subRegion',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          freeformAddressPath: 'address.content.freeformAddress',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          addressesPath: 'address.addresses.content.firstObject.latlng'\n        }\n      }]\n    }, {\n      title: 'Dropoff Address',\n      fields: [{\n        id: 'destinationaddresses',\n        type: 'addresses',\n        label: 'Drop-off Address',\n        valuePath: 'drop.place',\n        modelName: 'place',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetAddress',\n          localityPath: 'address.content.locality',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.subRegion',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          freeformAddressPath: 'address.content.freeformAddress',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          addressesPath: 'address.addresses.content.firstObject.latlng'\n        }\n      }]\n    }, {\n      title: 'Travel Needs',\n      fields: [{\n        id: 'travelNeeds',\n        type: 'bs-travel-needs',\n        label: '',\n        valuePath: 'leg.legTravelNeeds',\n        modelName: 'leg-travel-need',\n        isMultiType: true,\n        extra: {\n          travelNeedTypeModelName: 'travel-need-type',\n          passengerTypeModelName: 'passenger-type',\n          countPath: 'count',\n          travelNeedTypePath: 'travelNeedType',\n          passengerTypePath: 'passengerType'\n        }\n      }]\n    }, {\n      title: 'Notes',\n      fields: [{\n        id: 'passengerNotes',\n        type: 'text',\n        label: 'Passenger Notes',\n        valuePath: 'leg.rider.notes',\n        editable: false\n      }, {\n        id: 'driverNotes',\n        type: 'text',\n        label: 'Driver Notes',\n        valuePath: 'leg.notes',\n        editable: true\n      }]\n    }, {\n      title: 'Fare',\n      fields: [{\n        id: 'type',\n        type: 'enum',\n        label: 'Payment Type',\n        valuePath: 'fareType',\n        cellDesc: 'fareType',\n        editable: true,\n        hidden: false,\n        extra: {\n          optionModelName: 'fare-type',\n          optionSearchPath: 'name'\n        }\n      }, {\n        id: 'fare',\n        type: 'number',\n        label: 'Amount',\n        valuePath: 'fare',\n        editable: true\n      }]\n    } // , {\n    //   title: 'Subscription',\n    //   fields: [{\n    //     id: 'subscriptions',\n    //     type: 'bs-subscriptions',\n    //     label: '',\n    //     valuePath: 'leg.booking.subscriptions.firstObject.recurrencePatterns',\n    //     modelName: 'subscription-recurence-pattern',\n    //     isMultiType: true,\n    //     hidden: true,\n    //     extra: {\n    //       recurringPath: 'recurring',\n    //       dailyConfigPath: 'type',\n    //       selectedWOMPath: 'selectedWOM',\n    //       startDateTimePath: 'subscriptionStartDate',\n    //       endDateTimePath: 'subscriptionEndDate',\n    //       sundayPath: 'sunday',\n    //       mondayPath: 'monday',\n    //       tuesdayPath: 'tuesday',\n    //       wednesdayPath: 'wednesday',\n    //       thursdayPath: 'thursday',\n    //       fridayPath: 'friday',\n    //       saturdayPath: 'saturday',\n    //       excludeStartDateTimePath: 'exclusionStartDate',\n    //       excludeEndDateTimePath: 'exclusionEndDate',\n    //       maxOccurencesPath: 'subscriptionMaxOccurences',\n    //       separationCountPath: 'separationCount',\n    //       dayOfMonthPath: 'dayOfMonth',\n    //       useOptionRecord: true\n    //     }\n    //   }\n    // ]\n    // }\n    ]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/no-show-reason-code/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/no-show-reason-code/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSections\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/no-show-reason-code/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'vehicle',\n        type: 'text',\n        label: 'Vehicle',\n        valuePath: 'assignedVehicle.id',\n        editable: false\n      }]\n    }, {\n      title: 'Editable',\n      fields: [{\n        id: 'timestamp',\n        type: 'datetime',\n        label: 'Timestamp',\n        valuePath: 'timestamp'\n      }, {\n        id: 'odometer',\n        type: 'text',\n        label: 'Odometer',\n        valuePath: 'odometer'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/noshow-event-stop-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/noshow-event-stop-form-widget/config\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/mixins/version-check\"], function (_exports, _component, _config, _unwrapProxy, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_versionCheck.default, {\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    stopPoint: Ember.computed.readOnly('editModal.editableRecords.firstObject'),\n\n    validateRecords() {\n      const valid = true;\n      this.set('editModal.errors', []);\n      return valid;\n    },\n\n    // needed to bubble up errors or edit modal would close prematurely\n    editModalCommitFailed: Ember.observer('editModal.errors.[]', function () {\n      const errors = this.get('editModal.errors');\n\n      if (errors.length > 0) {\n        this.set('editModal.errors', []);\n      }\n    }),\n\n    undoForNoShow() {\n      const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n      if (lastUndoState === null) {\n        const records = this.get('editModal.editableRecords') || [];\n        records.forEach(record => {\n          record.set('isForceDirty', false);\n        });\n      } else {\n        lastUndoState.forEach(_ref => {\n          let {\n            record,\n            properties\n          } = _ref;\n          const propertiesToset = {\n            'noShow.notes': ''\n          };\n\n          if (Ember.isPresent(properties.timestamp)) {\n            propertiesToset['noShow.timestamp'] = properties.timestamp;\n          }\n\n          if (Ember.isPresent(properties.noShowReasonCode)) {\n            propertiesToset['noShow.noShowReasonCode'] = properties.noShowReasonCode;\n            delete properties.noShowReasonCode;\n          }\n\n          record.setProperties(propertiesToset);\n        });\n      }\n\n      this.set('isLastUndoStateCommitted', true);\n    },\n\n    undoAllNoShow() {\n      const undoHistory = this.get('editModal.undoHistory');\n      if (Ember.isPresent(undoHistory)) while (undoHistory.length > 0) this.undoForNoShow();\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        this.undoAllNoShow();\n      },\n\n      onCloseClick() {\n        const records = this.get('editModal.editableRecords') || [];\n        records.forEach(record => {\n          const dsStop = (0, _unwrapProxy.unwrapProxy)(record);\n          const noShowReasonCode = (0, _unwrapProxy.unwrapProxy)(dsStop.get('noShow.noShowReasonCode'));\n          const noShow = (0, _unwrapProxy.unwrapProxy)(dsStop.get('noShow'));\n          if (noShowReasonCode) noShowReasonCode.rollbackAttributes();\n          if (noShow) noShow.rollbackAttributes();\n          if (dsStop) dsStop.rollbackAttributes();\n          record.rollbackAttributes();\n        });\n\n        this._super(...arguments);\n      },\n\n      async onApplyClick() {\n        const dispatchRoute = this.get('stopPoint.dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        const closeCallback = () => {\n          this.send('onCloseClick');\n        };\n\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n        if (this.validateRecords()) {\n          try {\n            await lockRouteAction();\n            const title = this.get('title');\n            this.get('service').applyWithCallback(title, unlockRouteAction);\n          } catch (err) {\n            await unlockRouteAction();\n            return;\n          }\n        }\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        this.get('service').setRecordValue(record, valuePath, value, options);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/noshow-event-stop-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }, {\n        id: 'tripId',\n        label: 'Trip ID',\n        valuePath: 'trip.tripId',\n        editable: false\n      }]\n    }, {\n      title: 'Pick Stop',\n      fields: [{\n        id: 'riderFirstName',\n        label: 'Route ID',\n        valuePath: 'trip.route.name',\n        editable: false\n      }, {\n        id: 'riderLastName',\n        label: 'Driver ID',\n        valuePath: 'trip.driver.driverId',\n        editable: false\n      }, {\n        id: 'tripId',\n        label: 'Passenger',\n        valuePath: 'trip.rider.fullName',\n        editable: false\n      }, {\n        id: 'fullPhoneNumber',\n        index: 3,\n        type: 'enum',\n        label: 'Phone Number',\n        valuePath: 'trip.segment.leg.rider.riderPhoneNumber.formattedPhoneNumber',\n        cellDesc: 'Phone Numbers',\n        editable: false,\n        hidden: true\n      }, {\n        id: 'pickupaddress',\n        label: 'Pickup Location ',\n        valuePath: 'trip.pickStopPoint.place.address.simpleAddress',\n        editable: false\n      }, {\n        id: 'requestedTime',\n        type: 'date',\n        label: 'Promise Time',\n        valuePath: 'trip.promiseTime',\n        editable: false,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n        defaultWidth: 50\n      }, {\n        id: 'actualarrivetime',\n        type: 'datetimeflatpickr',\n        label: 'Actual Arrive Time',\n        valuePath: 'trip.actualArriveTime',\n        editable: false,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n        defaultWidth: 50\n      }]\n    }, {\n      title: 'No Show',\n      fields: [{\n        id: 'timestamp',\n        type: 'datetimeflatpickr',\n        label: 'Date(Time)',\n        valuePath: 'noShow.timestamp',\n        editable: true,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        defaultWidth: 50,\n        extra: {\n          minTimePath: 'noShowAvailableTime',\n          maxTimePath: 'noShow.timestamp'\n        }\n      }, {\n        id: 'noShowReason',\n        type: 'enum',\n        label: 'No-show Reason',\n        valuePath: 'noShow.noShowReasonCode',\n        cellDesc: 'noShowReason',\n        editable: true,\n        hidden: false,\n        extra: {\n          optionModelName: 'no-show-reason-category',\n          optionSearchPath: 'name',\n          optionDisplayName: 'displayName',\n          optionReadonlyCellPath: 'noShowDropDownReadonly'\n        }\n      }, {\n        id: 'notes',\n        type: 'text',\n        value: 'Write a note here',\n        editable: true,\n        label: 'Note',\n        valuePath: 'noShow.notes'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'id',\n      editable: false,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'formattedPhoneNumbers',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'email',\n      index: 4,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      editable: true,\n      searchable: true,\n      hidden: false\n    }, {\n      id: 'middleName',\n      index: 5,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/config\", \"adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/avlmConfig\", \"adept-iq/config/environment\"], function (_exports, _component, _config, _avlmConfig, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['passengers-widget', 'data-test-passengers-widget'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    session: Ember.inject.service(),\n    editComponent: 'iq-widgets/passengers-form-widget',\n    newTripComponent: 'iq-widgets/new-trip-form-widget',\n    canShowHeader: false,\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n\n      this.get('tableColumns').firstObject.component = null;\n      this.get('tableColumns').popObject();\n      this.get('tableColumns').lastObject.resizable = false;\n    },\n\n    actions: {\n      onRowClick(row) {\n        this.get('onPassengerSelectionWidgetRowClick')(this.get('records').findBy('id', row.get('id')));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-selection-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-booking-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'rider',\n    defaultSortId: 'referenceCode',\n    defaultSortAsc: false,\n    hideWidgetControls: true,\n    hideHeader: true,\n    checkBoxColumn: false,\n    isFormControls: true,\n    title: 'Passengers',\n    columns: [{\n      id: 'id',\n      index: 0,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'id',\n      editable: false,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 1,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 77,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 2,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 76,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'phoneNumber',\n      index: 4,\n      type: 'text',\n      label: 'Phone Number',\n      valuePath: 'notificationPhoneNumbers.0.phoneNumber',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 121,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'dateOfBirth',\n      index: 5,\n      type: 'date',\n      label: 'DOB',\n      valuePath: 'dateOfBirth',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 80,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-widget/active-passenger-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    init() {\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-widget/active-passenger-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"SGGffCPr\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"value\\\"]],\\\"ACTIVE\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"active-dot\\\"],[9],[10],[0,\\\" Active\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"value\\\"]],\\\"PENDING\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"active-dot\\\"],[9],[10],[0,\\\" Active\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"inactive-dot\\\"],[9],[10],[0,\\\" Inactive\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/passengers-booking-widget/active-passenger-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'id',\n      editable: false,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'formattedPhoneNumbers',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'email',\n      index: 4,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      editable: true,\n      searchable: true,\n      hidden: false\n    }, {\n      id: 'middleName',\n      index: 5,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/passengers-booking-widget/config\", \"adept-iq/pods/components/iq-widgets/passengers-booking-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/notifications\", \"adept-iq/models/cs-config-category\"], function (_exports, _component, _config, _avlmConfig, _environment, _mappedPermIds, _notifications, _csConfigCategory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n  const ROWS_LIMIT = 300;\n\n  var _default = _component.default.extend({\n    classNames: ['passengers-booking-widget'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    report: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    canShowHeader: false,\n    editComponent: 'iq-widgets/passengers-form-widget',\n    newTripComponent: 'iq-widgets/new-trip-form-widget',\n    newBookingComponent: 'iq-widgets/new-booking-form',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n\n      this.get('tableColumns').firstObject.component = null;\n      this.get('tableColumns').popObject();\n      this.get('tableColumns').lastObject.resizable = false;\n      this.set('limit', ROWS_LIMIT);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      if (this.get('setPassengerBookingTable')) {\n        this.get('setPassengerBookingTable')(this.get('table'));\n      }\n\n      this.set('activityLog', {\n        id: 'activityLog',\n        name: 'Open rider activity log in new tab',\n        permId: _mappedPermIds.default.accessBookingWorkspace,\n        action: async model => {\n          const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.accessRiderManagementWorkspace, null);\n          const riderId = model.get('id');\n          const viewPage = 'Activity Log';\n          const url = `/dashboard/Rider%20Management/workspaces-riderManagement%2FriderManagement?riderId=${riderId}&viewPage=${viewPage}`;\n\n          if (!permGranted) {\n            this.get('tooltip').pushConfirmation({\n              title: 'Activity Log',\n              tip: \"You do not have permission to access the rider's activity log. Please contact your system administrator.\",\n              hasOverlay: true,\n              primaryActionText: 'OK',\n              primaryAction: () => {\n                this.get('tooltip').reset();\n              }\n            });\n          } else {\n            window.open(url, '_blank');\n          }\n        }\n      });\n      this.set('tripHistoryReport', {\n        id: 'tripHistoryReport',\n        name: 'Open rider trip history report in popup',\n        permId: _mappedPermIds.default.accessBookingWorkspace,\n        action: async model => {\n          const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.accessReportsWorkspace, null);\n\n          if (permGranted) {\n            const riderId = model.get('riderId');\n            const reportService = this.get('report');\n            return reportService.openRiderTripHistoryReportPopup(riderId);\n          }\n\n          this.get('tooltip').pushConfirmation({\n            title: 'Trip History Report',\n            tip: \"You do not have permission to access the rider's trip history report. Please contact your system administrator.\",\n            hasOverlay: true,\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              this.get('tooltip').reset();\n            }\n          });\n          return false;\n        }\n      });\n    },\n\n    unSelectAllRows() {\n      const tableRows = this.get('table.rows');\n      tableRows.setEach('selected', false);\n      tableRows.setEach('isChecked', false);\n    },\n\n    updateSelectedRiderList(riderRecord, add) {\n      if (add) {\n        this.get('booking').addSelectedRider(riderRecord);\n      } else {\n        this.get('booking').removeSelectedRider(riderRecord);\n      }\n\n      this.get('onPassengerWidgetRowClick')(riderRecord);\n    },\n\n    checkIfRiderIsInActive(riderRecord) {\n      const status = riderRecord.get('status');\n\n      if (status === 'ACTIVE' || status === 'PENDING') {\n        return false;\n      }\n\n      return true;\n    },\n\n    checkRiderHasEligibilityInSysConfig(riderRecord) {\n      const riderEligibilityCategories = riderRecord.get('eligibility.categories') || [];\n\n      if (riderEligibilityCategories.length === 0) {\n        return true;\n      }\n\n      const containsRiderCategory = riderEligibilityCategories.every(riderCategory => {\n        const riderEligibilityCategoryList = this.get('systemConfig').findEligibilityCategories(riderCategory.type.toLowerCase());\n        const CATEGORY_NAMES = riderEligibilityCategoryList.map(category => {\n          const valueObj = category.value;\n          const categoryName = valueObj.name || valueObj.Name;\n          return categoryName.trim().toLowerCase();\n        });\n        return CATEGORY_NAMES.includes(riderCategory.type.toLowerCase());\n      }); // check rider has an eligibility that match an eligibility in System Configuration\n\n      if (!containsRiderCategory) return true;\n      return false;\n    },\n\n    checkRiderHasInValidEligibility(riderRecord) {\n      const riderEligibilityCategories = riderRecord.get('eligibility.categories') || [];\n\n      if (riderEligibilityCategories.length === 0) {\n        return true;\n      }\n\n      const denyEligibilityCategories = this.get('systemConfig').findEligibilityCategories(_csConfigCategory.ELIGIBILITY_CATEGORY_TYPES.DENY);\n      const DENY_CATEGORY_NAMES = denyEligibilityCategories.map(category => {\n        const valueObj = category.value;\n        const categoryName = valueObj.name || valueObj.Name;\n        return categoryName.trim().toLowerCase();\n      });\n      const containsDenyCategory = riderEligibilityCategories.every(riderCategory => {\n        return DENY_CATEGORY_NAMES.includes(riderCategory.type.toLowerCase());\n      });\n      const containsRiderCategory = riderEligibilityCategories.every(riderCategory => {\n        const riderEligibilityCategoryList = this.get('systemConfig').findEligibilityCategories(riderCategory.type.toLowerCase());\n        const CATEGORY_NAMES = riderEligibilityCategoryList.map(category => {\n          const valueObj = category.value;\n          const categoryName = valueObj.name || valueObj.Name;\n          return categoryName.trim().toLowerCase();\n        });\n        return CATEGORY_NAMES.includes(riderCategory.type.toLowerCase());\n      }); // if eligibility category has full name and type then we can allow user to create booking\n      // so, checking the rider eligibility category in the config-item\n\n      if (!containsRiderCategory) {\n        this.get('notifications').warning('Passenger has an eligibility that does not match an eligibility in System Configuration.');\n        return true;\n      }\n\n      if (containsDenyCategory) {\n        this.get('notifications').info(_notifications.default.INVALID_ELIGIBILITY);\n        return true;\n      }\n\n      return false;\n    },\n\n    async createBookingOnDoubleClick() {\n      const isBookingEditMode = false;\n      const newBookingComponent = this.get('newBookingComponent');\n      const doubleClickedRider = this.get('booking.selectedRiders.firstObject');\n      const booking = await this.get('booking').createBookingRecord(false);\n      this.set('booking.activeBooking', booking);\n      this.get('editModal').open(newBookingComponent, [isBookingEditMode, doubleClickedRider, booking]);\n    },\n\n    /**\n     * set the checked riders for future use(NYAAR-18858)\n     * @param {*} row(row which is clicked)\n     * @param {*} riderRecord(data about the rider)\n     */\n    setCheckedRiders(row, riderRecord) {\n      const isChecked = row.get('isChecked');\n\n      if (isChecked) {\n        this.get('booking.checkedRiders').pushObject(riderRecord);\n        return;\n      }\n\n      this.get('booking.checkedRiders').removeObject(riderRecord);\n    },\n\n    // commeneted out for AIQ-741\n    // forceSingleSelection(row, selectedRows, filteredRows) {\n    //   const selectedRiderId = row.get('id');\n    //   selectedRows.forEach(selectedRow => {\n    //     if (selectedRow.get('id') !== selectedRiderId) {\n    //       const riderRecord = this.get('records').findBy('id', selectedRow.get('id'));\n    //       this.updateSelectedRiderList(riderRecord, false);\n    //       filteredRows.push(selectedRow);\n    //     }\n    //   });\n    // },\n    actions: {\n      async onRowClick(row, event) {\n        const rows = this.get('table.rows');\n        const filteredRows = rows.filter(rowArr => !rowArr.isChecked); // this is a hack because light-table has a bug with shift select. It bypass single selection\n        // even when parameter is set to not have multi-select\n        // const selectedRows = rows.filter(rowArr => rowArr.isChecked);\n        // this.forceSingleSelection(row, selectedRows, filteredRows);\n\n        filteredRows.setEach('isChecked', false);\n        filteredRows.setEach('selected', false);\n\n        try {\n          const riderRecord = this.get('records').findBy('id', row.get('id'));\n          this.set('booking.isPassengerRowChecked', true);\n          this.set('booking.passengerRowSelected', true);\n\n          if (this.checkIfRiderIsInActive(riderRecord)) {\n            this.get('notifications').info(_notifications.default.BOOKING.IN_ACTIVE);\n            return;\n          }\n\n          this.get('workspace').set('isGlobalSpinnerVisible', true);\n          await this.get('booking').fetchEligibilityForRider(riderRecord);\n\n          if (Ember.$(event.target).is('[type=\"checkbox\"]')) {\n            const isChecked = event.target.checked;\n\n            if (isChecked) {\n              if (this.checkRiderHasInValidEligibility(riderRecord)) {\n                this.get('workspace').set('isGlobalSpinnerVisible', false);\n                return;\n              }\n            }\n\n            this.updateSelectedRiderList(riderRecord, isChecked);\n            row.set('isChecked', isChecked);\n            row.set('selected', isChecked);\n            this.setCheckedRiders(row, riderRecord);\n            return;\n          }\n\n          if (this.checkRiderHasInValidEligibility(riderRecord)) {\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n            return;\n          }\n\n          const riderExists = this.get('booking.selectedRiders').find(record => {\n            return record.get('id') === riderRecord.get('id');\n          });\n          row.set('isChecked', !riderExists);\n          row.set('selected', !riderExists);\n          this.updateSelectedRiderList(riderRecord, !riderExists);\n          this.setCheckedRiders(row, riderRecord);\n        } catch (err) {\n          let message = 'Failed to create booking. Passenger information cannot be retrieved.';\n\n          if (err.status === 401) {\n            message = 'Session expired , Please login again';\n            window.location.assign('/login');\n          }\n\n          this.get('notifications').warning(message);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          row.set('isChecked', false);\n          row.set('selected', false);\n          return;\n        }\n      },\n\n      onRowDoubleClick(row) {\n        const riderRecord = this.get('records').findBy('id', row.get('id'));\n\n        if (this.checkIfRiderIsInActive(riderRecord)) {\n          this.get('notifications').info(_notifications.default.BOOKING.IN_ACTIVE);\n          return;\n        }\n\n        this.get('booking').clearSelectedRiders();\n        this.unSelectAllRows();\n        this.updateSelectedRiderList(riderRecord, true);\n        row.set('isChecked', true);\n        row.set('selected', true);\n        this.createBookingOnDoubleClick();\n      },\n\n      onRowRightClick() {\n        this.set('dynamicSingleActions', [this.get('activityLog'), this.get('tripHistoryReport')]);\n\n        this._super(...arguments);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-booking-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-booking-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'rider-external',\n    defaultSortId: 'passengerId',\n    defaultSortAsc: false,\n    hideWidgetControls: true,\n    hideHeader: true,\n    checkBoxColumn: true,\n    isFormControls: true,\n    title: 'Passengers',\n    columns: [{\n      id: 'passengerStatus',\n      index: 0,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'computedStatus',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 50,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      },\n      cellComponent: 'iq-widgets/passengers-booking-widget/active-passenger-cell'\n    }, {\n      id: 'passengerId',\n      index: 1,\n      type: 'uuid',\n      isKey: true,\n      label: 'Passenger ID',\n      valuePath: 'riderId',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'passengerFirstName',\n      index: 2,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'passengerLastName',\n      index: 3,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'passengerMiddleName',\n      index: 4,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'passengerPhoneNumber',\n      index: 5,\n      type: 'text',\n      label: 'Phone Number',\n      valuePath: 'formattedMainPhoneNumber',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'passcode',\n      index: 6,\n      type: 'text',\n      label: 'Passcode',\n      valuePath: 'passcode',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'passengerDateOfBirth',\n      index: 7,\n      type: 'date',\n      label: 'DOB',\n      valuePath: 'dateOfBirth',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 50,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'passengerEligibilityStart',\n      index: 8,\n      type: 'date',\n      label: 'Eligibility Start',\n      valuePath: 'eligibilityStart',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 80,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'passengerEligibilityEnd',\n      index: 9,\n      type: 'date',\n      label: 'Eligibility End',\n      valuePath: 'eligibilityEnd',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 80,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/passengers-form-widget/config\", \"moment\"], function (_exports, _component, _config, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editModal: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    editableSections: _config.default.editableSections,\n    classNames: ['passenger-form-widget', 'data-test-passenger-form-widget'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const eligibilities = record.riderEligibilities || [];\n        const riderTravelNeeds = record.riderTravelNeeds;\n        const newTravelNeeds = record.newTravelNeeds || {};\n        const riderPhoneNumbers = record.riderPhoneNumbers || [];\n\n        if (Ember.isEmpty(record.firstName) || Ember.isEmpty(record.lastName) || record.firstName.length === 0 || record.lastName.length === 0) {\n          valid = false;\n          this.get('editModal.errors').pushObject('First name and last name cannot be blank.');\n        }\n\n        riderPhoneNumbers.forEach(phoneNumber => {\n          if (Ember.isBlank(phoneNumber.get('areaCode')) || Ember.isBlank(phoneNumber.get('phoneNumber'))) {\n            valid = false;\n            this.get('editModal.errors').pushObject('Phone number cannot be blank.');\n          }\n        });\n\n        if (riderTravelNeeds.length <= 0) {\n          const found = newTravelNeeds.find(travelNeed => {\n            if (!Ember.isNone(travelNeed.get('count')) && travelNeed.get('count') > 0) {\n              return true;\n            }\n\n            return false;\n          });\n\n          if (!found) {\n            valid = false;\n            this.get('editModal.errors').pushObject('Must have at least 1 travel need.');\n          }\n        } else {\n          const found = riderTravelNeeds.find(travelNeed => {\n            if (!Ember.isNone(travelNeed.get('count')) && travelNeed.get('count') > 0) {\n              return true;\n            }\n\n            return false;\n          });\n\n          if (!found) {\n            valid = false;\n            this.get('editModal.errors').pushObject('Must have at least 1 travel need.');\n          }\n        }\n\n        eligibilities.forEach(eligibility => {\n          const from = (0, _moment.default)(eligibility.from);\n          const to = (0, _moment.default)(eligibility.to);\n\n          if (to.isBefore(from)) {\n            valid = false;\n            this.get('editModal.errors').pushObject('Eligibility to date cannot be before from date');\n          }\n        });\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          this.get('service').apply();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    title: 'Add Passenger',\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'riderId',\n        editable: false\n      }, {\n        id: 'fullName',\n        type: 'text',\n        label: 'Full Name',\n        valuePath: 'fullName'\n      }]\n    }, {\n      title: 'Personal Information',\n      fields: [{\n        id: 'firstName',\n        type: 'text',\n        label: 'First Name',\n        valuePath: 'firstName'\n      }, {\n        id: 'middleName',\n        type: 'text',\n        label: 'Middle Name',\n        valuePath: 'middleName'\n      }, {\n        id: 'lastName',\n        type: 'text',\n        label: 'Last Name',\n        valuePath: 'lastName'\n      }, {\n        id: 'dateOfBirth',\n        type: 'date',\n        format: `${_environment.default.dateTimeFormat.dateMoment}`,\n        label: 'Date Of Birth',\n        valuePath: 'dateOfBirth'\n      }, {\n        id: 'areaCode',\n        type: 'text',\n        label: 'Area Code',\n        valuePath: 'riderPhoneNumber.areaCode'\n      }, {\n        id: 'phoneNumber',\n        type: 'text',\n        label: 'Phone Number',\n        valuePath: 'riderPhoneNumber.phoneNumber'\n      }, {\n        id: 'notes',\n        type: 'text',\n        label: 'Passenger Notes',\n        valuePath: 'notes'\n      }]\n    }, {\n      title: 'Primary Address',\n      fields: [{\n        id: 'primaryAddresses',\n        type: 'addresses',\n        label: '',\n        displayPath: 'primaryAddresses',\n        valuePath: 'primaryAddresses',\n        modelName: 'rider-place',\n        isMultiType: true,\n        addressType: 'primary',\n        extra: {\n          aliasPath: 'place.address.alias',\n          notesPath: 'place.address.notes',\n          premisePath: 'place.address.premise',\n          streetNumberPath: 'place.address.streetNumber',\n          streetAddressPath: 'place.address.streetAddress',\n          localityPath: 'place.address.locality',\n          subLocalityPath: 'place.address.subLocality',\n          regionPath: 'place.address.region',\n          subRegionPath: 'place.address.subRegion',\n          postalCodePath: 'place.address.postalCode',\n          countryPath: 'place.address.country',\n          locationsPath: 'place.address.locations.firstObject.latlng',\n          tomtomFormattedAddressPath: 'place.address.tomtomFormattedAddress',\n          useOptionRecord: true\n        }\n      }]\n    }, {\n      title: 'Other Addresses',\n      fields: [{\n        id: 'favoriteAddresses',\n        type: 'addresses',\n        label: '',\n        displayPath: 'favoriteAddresses',\n        valuePath: 'favoriteAddresses',\n        modelName: 'rider-place',\n        addressType: 'favorite',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'place.address.alias',\n          notesPath: 'place.address.notes',\n          premisePath: 'place.address.premise',\n          streetNumberPath: 'place.address.streetNumber',\n          streetAddressPath: 'place.address.streetAddress',\n          localityPath: 'place.address.locality',\n          subLocalityPath: 'place.address.subLocality',\n          regionPath: 'place.address.region',\n          subRegionPath: 'place.address.subRegion',\n          postalCodePath: 'place.address.postalCode',\n          countryPath: 'place.address.country',\n          locationsPath: 'place.address.locations.firstObject.latlng',\n          tomtomFormattedAddressPath: 'place.address.tomtomFormattedAddress',\n          useOptionRecord: true\n        }\n      }]\n    }, {\n      title: 'Travel Needs',\n      fields: [{\n        id: 'travelNeeds',\n        type: 'travel-needs',\n        label: '',\n        valuePath: 'riderTravelNeeds',\n        modelName: 'rider-travel-need',\n        isMultiType: true,\n        extra: {\n          travelNeedTypeModelName: 'travel-need-type',\n          passengerTypeModelName: 'passenger-type',\n          countPath: 'count',\n          travelNeedTypePath: 'travelNeedType',\n          passengerTypePath: 'passengerType'\n        }\n      }]\n    }, {\n      title: 'Eligibilities',\n      fields: [{\n        id: 'eligibilities',\n        type: 'eligibilities',\n        label: '',\n        valuePath: 'riderEligibilities',\n        modelName: 'rider-eligibility',\n        isMultiType: true,\n        extra: {\n          eligibilityTypeModelName: 'eligibility-type',\n          fromPath: 'from',\n          toPath: 'to',\n          eligibilityTypePath: 'eligibilityType'\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'id',\n      editable: false,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'formattedPhoneNumbers',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'email',\n      index: 4,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      editable: true,\n      searchable: true,\n      hidden: false\n    }, {\n      id: 'middleName',\n      index: 5,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/passengers-widget/config\", \"adept-iq/pods/components/iq-widgets/passengers-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/passengers-widget/scheduleConfig\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/dashboard\"], function (_exports, _component, _config, _avlmConfig, _scheduleConfig, _environment, _apiUrls, _lodash, _mappedPermIds, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['passengers-widget', 'data-test-passengers-widget'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    session: Ember.inject.service(),\n    editComponent: 'iq-widgets/passengers-form-widget',\n    newTripComponent: 'iq-widgets/new-trip-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    init() {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      } else {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this.set('config', _scheduleConfig.default);\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this.set('config', _config.default);\n            break;\n        }\n      }\n\n      this._super(...arguments);\n    },\n\n    // TODO: saveRecordFunction shall be moved to a service later on\n    // This save is specific to saving passengers and all related models.\n    saveRecordFunction(records) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const placeSerializer = store.serializerFor('place');\n      const placeModelClass = store.modelFor('place');\n\n      function saveDeleteAllEligibilities(objects) {\n        const deleteObjects = _lodash.default.difference(objects.content.initialState, objects.content.currentState);\n\n        if (objects) {\n          objects.forEach(object => {\n            if (object.isDeleted) {\n              deleteObjects.push(object);\n            }\n          });\n        } // delete objects that have been removed from the array\n\n\n        return Ember.RSVP.Promise.all(deleteObjects.map(deleteObject => {\n          deleteObject.deleteRecord();\n          return deleteObject.save();\n        })).then(() => {\n          return Ember.RSVP.Promise.all(objects.map(object => object.save()));\n        });\n      }\n\n      function saveDeleteAllTravelNeeds(objects) {\n        const deleteObjects = _lodash.default.difference(objects.content.initialState, objects.content.currentState);\n\n        if (objects) {\n          objects.forEach(object => {\n            if (object.get('count') <= 0) {\n              deleteObjects.push(object);\n            }\n          });\n        } // delete objects that have been removed from the array\n\n\n        return Ember.RSVP.Promise.all(deleteObjects.map(deleteObject => {\n          deleteObject.deleteRecord();\n          return deleteObject.save();\n        })).then(() => {\n          return Ember.RSVP.Promise.all(objects.map(object => {\n            object.save();\n          }));\n        });\n      }\n\n      function saveDeleteAllPhoneNumbers(objects) {\n        const deleteObjects = _lodash.default.difference(objects.content.initialState, objects.content.currentState);\n\n        if (objects) {\n          objects.forEach(object => {\n            if (object.get('count') <= 0) {\n              deleteObjects.push(object);\n            }\n          });\n        } // delete objects that have been removed from the array\n\n\n        return Ember.RSVP.Promise.all(deleteObjects.map(deleteObject => {\n          deleteObject.deleteRecord();\n          return deleteObject.save();\n        })).then(() => {\n          return Ember.RSVP.Promise.all(objects.map(object => {\n            object.save();\n          }));\n        });\n      }\n\n      function saveNewTravelNeedObjects(rider, newObjects) {\n        return Ember.RSVP.Promise.all(newObjects.map(newObject => {\n          if (newObject.get('count') !== null && newObject.get('count') > 0) {\n            newObject.set('rider', rider);\n            newObject.save();\n            return newObject;\n          }\n        }));\n      }\n\n      async function savePlaceObject(object) {\n        if (!Ember.isNone(object)) {\n          const address = object.get('address.content');\n          const location = object.get('location.content');\n\n          if (object.isNew) {\n            const locationResponse1 = await locationAdapter.postLocation(location); // TODO: We need to deal with how zone name is populated\n\n            if (Ember.isNone(address.get('zoneName.id'))) {\n              address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n            }\n\n            const address1 = await addressAdapter.postAddress(address);\n            await addressAdapter.postAddressLocation(locationResponse1, address1);\n            const placeResponse = await placeAdapter.postPlace(object, address1.data.id, locationResponse1.data.id, 'passenger');\n            const placeNorm = placeSerializer.normalizeResponse(store, placeModelClass, placeResponse, placeResponse.data.id, 'createRecord');\n            store.push(placeNorm);\n            return Ember.RSVP.Promise.resolve(placeNorm);\n          } // TODO: We need to deal with how zone name is populated\n\n\n          if (Ember.isNone(address.get('zoneName.id'))) {\n            address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n          }\n\n          await address.save();\n          await location.save();\n          return object.save();\n        }\n\n        return Ember.RSVP.Promise.resolve();\n      }\n\n      function saveNewAddressObjects(objects) {\n        let deleteObjects = [];\n\n        if (!Ember.isNone(objects.get('content.initialState'))) {\n          deleteObjects = _lodash.default.difference(objects.content.initialState, objects.content.currentState);\n        }\n\n        if (objects) {\n          objects.forEach(object => {\n            if (object.isDeleted) {\n              deleteObjects.push(object);\n            }\n          });\n        } // delete objects that have been removed from the array\n\n\n        return Ember.RSVP.Promise.all(deleteObjects.map(deleteObject => {\n          deleteObject.deleteRecord();\n          return deleteObject.save();\n        })).then(() => {\n          return Ember.RSVP.Promise.all(objects.map(object => {\n            return savePlaceObject(object.place.content).then(response => {\n              if (object.isNew) {\n                const place = store.peekRecord('place', response.data.id);\n                object.set('place', place);\n                return object.save();\n              }\n\n              return object.save();\n            });\n          }));\n        });\n      }\n\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        if (records) {\n          records.forEach(async record => {\n            try {\n              await record.save();\n              await saveDeleteAllPhoneNumbers(record.get('riderPhoneNumbers'));\n              await saveNewAddressObjects(record.get('riderPlaces'));\n              await saveDeleteAllTravelNeeds(record.get('riderTravelNeeds'));\n              const travelNeeds = (await saveNewTravelNeedObjects(record, record.get('newTravelNeeds'))) || [];\n              travelNeeds.forEach(object => {\n                if (!_lodash.default.isUndefined(object)) {\n                  record.get('newTravelNeeds').removeObject(object);\n                  record.get('riderTravelNeeds').addObject(object);\n                }\n              });\n              return saveDeleteAllEligibilities(record.get('riderEligibilities')).then(() => {\n                record.set('isForceDirty', false);\n                this.get('activeContext.topActiveContext').get('refreshTableContent').perform([this.get('config.modelName')]);\n                this.get('notifications').success(`PASSENGER ${record.id} EDIT CONFIRMED`);\n                resolve();\n              });\n            } catch (error) {\n              this.get('notifications').warning(`PASSENGER ${record.id} EDIT CONFIRMATION FAILED`);\n              reject(error);\n            }\n          });\n        }\n      });\n    },\n\n    saveSubscriptionRecord(records) {\n      this.set('editModal.errors', []);\n      const notifications = this.get('notifications');\n\n      function saveNewTravelNeedObjects(newObjects) {\n        return Ember.RSVP.Promise.all(newObjects.map(newObject => {\n          return newObject.save();\n        }));\n      }\n\n      function saveRecurrencePatterns(objects) {\n        return Ember.RSVP.Promise.all(objects.map(object => {\n          object.save();\n        }));\n      }\n\n      function saveExlusions(objects) {\n        return Ember.RSVP.Promise.all(objects.map(object => {\n          if (!Ember.isNone(object.get('startDate')) && !Ember.isNone(object.get('endDate'))) {\n            object.save();\n          }\n        }));\n      }\n\n      async function savePlaceObject(object) {\n        await object.address.save();\n        await object.location.save();\n        return object.save();\n      }\n\n      function saveRiderObject(object) {\n        return object.save().then(() => {\n          return Ember.RSVP.Promise.all(object.travelNeeds.map(travelNeed => {\n            return travelNeed.save();\n          }));\n        });\n      }\n\n      return records.reduce(async (acu, record) => {\n        await saveRiderObject(record.rider.content).catch(e => notifications.warning(e.detail));\n        await savePlaceObject(record.origin.content).catch(e => notifications.warning(e.detail));\n        await savePlaceObject(record.destination.content).catch(e => notifications.warning(e.detail));\n        await saveRecurrencePatterns(record.get('recurrencePatterns')).catch(e => notifications.warning(e.detail));\n        await saveExlusions(record.get('exclusions')).catch(e => notifications.warning(e.detail));\n        await saveNewTravelNeedObjects(record.get('subscriptionTravelNeeds')).catch(e => notifications.warning(e.detail));\n        return record.save().then(() => record.set('isForceDirty', false));\n      }, Ember.RSVP.Promise.resolve()).then(() => {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform([this.get('config.modelName')]);\n      }).catch(e => notifications.push(e.detail));\n    },\n\n    saveTripRecordFunction(records) {\n      const store = this.get('store');\n      const session = this.get('session');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const placeSerializer = store.serializerFor('place');\n      const placeModelClass = store.modelFor('place');\n\n      function saveDeleteAllTravelNeeds(objects) {\n        const deleteObjects = _lodash.default.difference(objects.content.initialState, objects.content.currentState) || []; // delete objects that have been removed from the array\n\n        return Ember.RSVP.Promise.all(deleteObjects.map(deleteObject => {\n          deleteObject._record.deleteRecord();\n\n          return deleteObject.save();\n        })).then(() => {\n          return Ember.RSVP.Promise.all(objects.map(object => {\n            object.save();\n          }));\n        });\n      }\n      /*eslint-disable */\n\n\n      function saveNewTravelNeedObjects(segment, oldObjects, newObjects) {\n        return Ember.RSVP.Promise.all(newObjects.map(newObject => {\n          if (newObject.get('count') !== null && newObject.get('count') > 0) {\n            newObject.set('leg', segment.get('leg'));\n            newObject.save();\n            return newObject;\n          }\n        }));\n      }\n\n      async function saveTripPlaceObject(object) {\n        if (!Ember.isNone(object)) {\n          const address = object.get('address.content');\n          const location = object.get('location.content');\n\n          if (object.isNew) {\n            const locationResponse1 = await locationAdapter.postLocation(location); // TODO: We need to deal with how zone name is populated\n\n            if (Ember.isNone(address.get('zoneName.id'))) {\n              address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n            }\n\n            const address1 = await addressAdapter.postAddress(address);\n            await addressAdapter.postAddressLocation(locationResponse1, address1);\n            const placeResponse = await placeAdapter.postPlace(object, address1.data.id, locationResponse1.data.id, 'passenger');\n            const placeNorm = placeSerializer.normalizeResponse(store, placeModelClass, placeResponse, placeResponse.data.id, 'createRecord');\n            store.push(placeNorm);\n            return Ember.RSVP.Promise.resolve(placeNorm);\n          } // TODO: We need to deal with how zone name is populated\n\n\n          if (Ember.isNone(address.get('zoneName.id'))) {\n            address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n          }\n\n          await address.save();\n          await location.save();\n          return object.save();\n        }\n\n        return Ember.RSVP.Promise.resolve();\n      }\n\n      function saveNewTripAddressObjects(object) {\n        const place = object.get('place.content');\n        return saveTripPlaceObject(place).then(response => {\n          if (place.isNew) {\n            const newPlace = store.peekRecord('place', response.data.id);\n            object.set('place', newPlace);\n            return object.save();\n          }\n\n          return object.save();\n        });\n      }\n\n      function getSchedule() {\n        const schedules = store.peekAll('schedule');\n        const schedule = schedules.find(s => {\n          return s.get('start') <= new Date() <= s.get('end');\n        });\n        if (!schedule) return;\n        return schedule;\n      }\n\n      function getSameDayBookingPayload(bookingId) {\n        const schedule = getSchedule();\n\n        if (schedule) {\n          return {\n            'data': {\n              'attributes': {},\n              'relationships': {\n                'schedule': {\n                  'data': {\n                    'id': schedule.get('id'),\n                    'type': 'schedule'\n                  }\n                }\n              },\n              'id': bookingId,\n              'type': 'booking'\n            }\n          };\n        }\n\n        return;\n      }\n\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        if (records) {\n          records.forEach(async record => {\n            try {\n              await record.get('leg.booking.content').save();\n              await saveNewTripAddressObjects(record.get('leg.segment.pick.content'));\n              await saveNewTripAddressObjects(record.get('leg.segment.drop.content'));\n              await record.get('leg.content').save();\n              await record.get('leg.segment').save();\n              await saveDeleteAllTravelNeeds(record.get('leg.legTravelNeeds'));\n              await saveNewTravelNeedObjects(record, record.get('leg.legTravelNeeds'), record.get('leg.newTravelNeeds'));\n\n              if (record.get('subscriptions.firstObject.recurrencePatterns.firstObject.recurring')) {\n                await this.saveSubscriptionRecord(record.get('subscription'));\n              }\n\n              const json = getSameDayBookingPayload(record.get('id'));\n              const bookingId = record.get('leg.booking.id');\n\n              if (!json || record.get('leg.booking.isSameDayBooking')) {\n                this.get('ajax').request(`${_apiUrls.API.bookingService.host}/booking/${bookingId}/export`, {\n                  method: 'PATCH',\n                  contentType: 'application/json',\n                  headers: {\n                    'Authorization': `Bearer ${session.data.authenticated.token}`\n                  },\n                  data: json\n                }).then(response => {\n                  this.get('notifications').success(`NEW TRIP ${bookingId} CREATED`);\n                  resolve();\n                }).catch(error => {\n                  if (error.message === 'Unexpected end of JSON input') {\n                    this.get('notifications').success(`NEW TRIP ${bookingId} CREATED`);\n                    resolve();\n                  } else {\n                    this.get('notifications').warning(`NEW TRIP ${bookingId} CREATED BUT NOT EXPORTED`);\n                    reject(error);\n                  }\n                });\n              } else {\n                this.get('notifications').warning(`NEW TRIP ${bookingId} CREATED BUT NOT EXPORTED`);\n                resolve();\n              }\n            } catch (error) {\n              this.get('notifications').warning(`ADD TRIP FAILED`);\n              reject(error);\n            }\n          });\n        }\n      });\n    },\n\n    createSubscriptionRecord() {\n      const currentDate = new Date();\n      const subscriptions = [];\n      const exclusion = this.get('store').createRecord('subscription-exclusion');\n      const recurrencePattern = this.get('store').createRecord('subscription-recurrence-pattern', {\n        type: 'daily',\n        recurring: false\n      });\n      const subscription = this.get('store').createRecord('subscription', {\n        requestTime: currentDate,\n        exclusions: [exclusion],\n        recurrencePatterns: [recurrencePattern]\n      });\n      subscriptions.push(subscription);\n      return subscriptions;\n    },\n\n    createLegSegmentRecord(rider) {\n      const riderTravelNeeds = rider.get('riderTravelNeeds') || [];\n      const store = this.get('store');\n      const legTravelNeeds = riderTravelNeeds.map(riderTravelNeed => store.createRecord('leg-travel-need', {\n        count: riderTravelNeed.get('count'),\n        travelNeedType: riderTravelNeed.get('travelNeedType'),\n        passengerType: riderTravelNeed.get('passengerType')\n      }));\n      const serviceWindow = store.peekRecord('service-window', 'GENERAL');\n      const fareType = store.peekAll('fare-type').firstObject;\n      const date = new Date();\n      const pickAddress = store.createRecord('address');\n      const pickLocation = store.createRecord('location');\n      const pickPlace = store.createRecord('place', {\n        address: pickAddress,\n        location: pickLocation\n      });\n      const dropAddress = store.createRecord('address');\n      const dropLocation = store.createRecord('location');\n      const dropPlace = store.createRecord('place', {\n        address: dropAddress,\n        location: dropLocation\n      });\n      const leg = store.createRecord('leg', {\n        requestTime: date,\n        anchor: 'pick',\n        purpose: '',\n        notes: '',\n        rider,\n        serviceWindow: serviceWindow,\n        legTravelNeeds\n      });\n      const segment = store.createRecord('segment', {\n        promiseTime: date,\n        anchor: 'pick',\n        fare: '',\n        travelMode: 'bus',\n        segmentType: 2,\n        noSharing: 0,\n        legOrdinal: 1,\n        pick: store.createRecord('segment-stop', {\n          type: 'pick',\n          plannedTime: date,\n          onboardCount: 1,\n          place: pickPlace\n        }),\n        drop: store.createRecord('segment-stop', {\n          type: 'drop',\n          plannedTime: date,\n          onboardCount: 1,\n          place: dropPlace\n        }),\n        fareType: fareType,\n        leg: leg\n      });\n      legTravelNeeds.forEach(legTravelneed => {\n        legTravelneed.set('leg', leg);\n      });\n      return [leg];\n    },\n\n    applyTravelNeedsTransformation(widgetRecord) {\n      const store = this.get('store');\n      const travelNeedTypes = store.peekAll('travel-need-type');\n      const travelNeeds = widgetRecord.travelNeeds || [];\n      travelNeeds.forEach(travelNeed => {\n        const travelNeedTypeName = travelNeed.travelNeedTypeName;\n        const travelNeedType = travelNeedTypes.findBy('id', travelNeedTypeName);\n        travelNeed.displayName = travelNeedType ? travelNeedType.get('displayName') : '';\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // disable add/edit passenger for 4.2. This will be added back\n      // later in 5.0\n\n\n      this.set('tableActions', [{\n        id: 'newPassenger',\n        permId: _mappedPermIds.default.newPassenger,\n        name: 'New Passenger',\n        action: function () {\n          const store = this.get('store');\n          const newModel = store.createRecord(this.get('config.modelName'));\n          const riderPhoneNumber = store.createRecord('rider-phone-number', {\n            rider: newModel\n          });\n          newModel.set('dateOfBirth', new Date());\n          newModel.set('riderPhoneNumbers', [riderPhoneNumber]);\n          this.get('records').pushObject(newModel);\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [newModel], this.get('saveRecordFunction').bind(this));\n        }.bind(this)\n      }, {\n        id: 'print',\n        permIds: [_mappedPermIds.default.downloadPassengers],\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      }]);\n      this.set('singleActions', [{\n        id: 'edit',\n        permId: _mappedPermIds.default.editPassenger,\n        name: 'Edit',\n        action: model => {\n          const store = this.get('store');\n          const editComponent = this.get('editComponent');\n\n          if (Ember.isNone(model.get('riderPhoneNumber'))) {\n            store.createRecord('rider-phone-number', {\n              rider: model\n            });\n          }\n\n          this.get('editModal').open(editComponent, [model], this.get('saveRecordFunction').bind(this));\n        }\n      }, {\n        id: 'addTrip',\n        permIds: [_mappedPermIds.default.createFutureBookings, _mappedPermIds.default.createSameDayBookings],\n        name: 'Add Trip',\n        action: model => {\n          const provider = this.store.peekAll('provider').firstObject; // @TODO booking requires a provider\n\n          const subscriptions = this.createSubscriptionRecord();\n          const legs = this.createLegSegmentRecord(model) || [];\n          const booking = this.store.createRecord('booking', {\n            subscriptions,\n            legs,\n            provider\n          });\n          legs.forEach(leg => {\n            leg.set('booking', booking);\n          });\n          this.get('records').pushObject(booking);\n          const newTripComponent = this.get('newTripComponent');\n          const segment = booking.get('legs.firstObject.segments.firstObject');\n          this.get('editModal').open(newTripComponent, [segment], this.get('saveTripRecordFunction').bind(this));\n        }\n      }]); // this.set('bulkActions', [{\n      //   id: 'bulkEdit',\n      //   name: 'Bulk Edit',\n      //   action: (models) => {\n      //     const editComponent = this.get('editComponent');\n      //     Promise.all(models.map((model) => {\n      //       const queryFilter = {\n      //         filter: `eq(riderId,'${model.get('rmsRider.content.riderId')}')`\n      //       };\n      //       return this.store.query('rms-rider', queryFilter).then((rider) => rider.firstObject);\n      //     }))\n      //       .then((rmsRiders) => {\n      //         this.get('editModal').open(editComponent, rmsRiders, this.get('saveRecordFunction').bind(this));\n      //       });\n      //   }\n      // }]);\n    },\n\n    applyTransformationData(widgetRecords) {\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          this.applyRiderPhoneNumberTransformation(widgetRecord);\n          this.applyTravelNeedsTransformation(widgetRecord);\n          widgetRecord._transformed = true;\n        }\n      });\n      return widgetRecords;\n    },\n\n    applyRiderPhoneNumberTransformation(widgetRecord) {\n      const riderPhoneNumber = widgetRecord.riderPhoneNumber;\n      let riderPhoneNumbers = riderPhoneNumber && riderPhoneNumber.split(',');\n\n      if (riderPhoneNumbers && riderPhoneNumbers.length > 1) {\n        riderPhoneNumbers = riderPhoneNumbers.filter(Boolean);\n        widgetRecord.riderPhoneNumber = (0, _lodash.uniqBy)(riderPhoneNumbers).join();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    // ember-react-widget properties\n    widgetName: 'riderWidget',\n    initialLimit: 5000,\n    paginationLimit: 20,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    selectedRowLimit: 20,\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'riderId',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'riderPhoneNumber',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'dateOfBirth',\n      index: 4,\n      type: 'date',\n      label: 'Date Of Birth',\n      valuePath: 'dateOfBirth',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'primaryAddress',\n      index: 5,\n      type: 'enum',\n      label: 'Primary Address',\n      valuePath: 'formattedPrimaryAddresses',\n      cellDesc: 'Addresses',\n      searchable: true,\n      editable: false,\n      hidden: true,\n      defaultWidth: 120\n    }, {\n      id: 'travelNeeds',\n      index: 6,\n      type: 'enum',\n      label: 'Travel Needs',\n      valuePath: 'travelNeeds',\n      cellDesc: 'Travel Needs',\n      editable: false,\n      hidden: true,\n      cellItem: 'TravelNeedsCell'\n    }, {\n      id: 'eligibilities',\n      index: 8,\n      type: 'enum-date',\n      label: 'Eligibility',\n      valuePath: 'formattedRiderEligibilities',\n      alternateValuePath: 'riderEligibilityDates',\n      cellDesc: 'Eligibilities',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      editable: false,\n      hidden: true\n    }, {\n      id: 'notes',\n      index: 9,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      editable: true,\n      hidden: true,\n      searchable: true\n    }, {\n      id: 'middleName',\n      index: 10,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'exist',\n          field: 'trips',\n          valuePath: 'id'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'exist',\n          field: 'routes',\n          valuePath: 'routeId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'exist',\n          field: 'trips',\n          valuePath: 'tripPk'\n        }]\n      }\n    },\n    excluded: {\n      routeWidget: {\n        conflicts: [{\n          widget: 'tripWidget',\n          srcField: 'routeId',\n          targetField: 'routeId'\n        }, {\n          widget: 'stopWidget',\n          srcField: 'routeId',\n          targetField: 'routeId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/passengers-widget/scheduleConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    // ember-react-widget properties\n    widgetName: 'riderWidget',\n    initialLimit: 5000,\n    paginationLimit: 20,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    selectedRowLimit: 20,\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'riderId',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'riderPhoneNumber',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'dateOfBirth',\n      index: 4,\n      type: 'date',\n      label: 'Date Of Birth',\n      valuePath: 'dateOfBirth',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'primaryAddress',\n      index: 5,\n      type: 'enum',\n      label: 'Primary Address',\n      valuePath: 'formattedPrimaryAddresses',\n      cellDesc: 'Addresses',\n      searchable: true,\n      editable: false,\n      hidden: true,\n      defaultWidth: 120\n    }, {\n      id: 'travelNeeds',\n      index: 6,\n      type: 'enum',\n      label: 'Travel Needs',\n      valuePath: 'travelNeeds',\n      cellDesc: 'Travel Needs',\n      editable: false,\n      hidden: true,\n      cellItem: 'TravelNeedsCell'\n    }, {\n      id: 'eligibilities',\n      index: 8,\n      type: 'enum-date',\n      label: 'Eligibility',\n      valuePath: 'formattedRiderEligibilities',\n      alternateValuePath: 'riderEligibilityDates',\n      cellDesc: 'Eligibilities',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      editable: false,\n      hidden: true\n    }, {\n      id: 'notes',\n      index: 9,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      editable: true,\n      hidden: true,\n      searchable: true\n    }, {\n      id: 'middleName',\n      index: 10,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'exist',\n          field: 'trips',\n          valuePath: 'id'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'exist',\n          field: 'scheduleRoutes',\n          valuePath: 'routeId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'exist',\n          field: 'trips',\n          valuePath: 'tripPk'\n        }]\n      }\n    },\n    excluded: {\n      routeWidget: {\n        conflicts: [{\n          widget: 'tripWidget',\n          srcField: 'routeId',\n          targetField: 'routeId'\n        }, {\n          widget: 'stopWidget',\n          srcField: 'routeId',\n          targetField: 'routeId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-roles-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/permissions-roles-widget/config\", \"adept-iq/config/mapped-permIds\", \"ember-concurrency\", \"adept-iq/config/api-urls\", \"lodash\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _mappedPermIds, _emberConcurrency, _apiUrls, _lodash, _filters, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['roles-widget', 'data-test-roles-widget'],\n    config: _config.default,\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.initContextMenu();\n    },\n\n    deleteTask: (0, _emberConcurrency.task)(function* () {\n      // using custom api call because sso api is non standard\n      // and in-consistent.\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      const role = this.get('lastRowClicked') || [];\n      return yield ajax.request(`${_apiUrls.API.ssoService.host}/role/${role.roleName}`, {\n        contentType: 'application/json',\n        method: 'DELETE',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    }),\n\n    initContextMenu() {\n      this.initTableActions();\n      this.initSingleActions();\n    },\n\n    contextMenuHandler(optionId, isSaved) {\n      if (isSaved) {\n        this.refresh();\n      }\n\n      if (!optionId) {\n        return;\n      }\n    },\n\n    initTableActions() {\n      this.get('tableActions').unshiftObject({\n        id: 'newRole',\n        permId: _mappedPermIds.default.newRole,\n        name: 'Add Role',\n        action: function () {\n          this.get('workspace').pushState('permAddRole', {\n            displayName: 'Add Role',\n            roles: [],\n            roleData: this.get('records'),\n            action: this.contextMenuHandler.bind(this, 'permAddRole')\n          }, {\n            replaceSelf: true\n          });\n        }.bind(this)\n      });\n    },\n\n    initSingleActions() {\n      this.set('singleActions', [{\n        id: 'edit',\n        permId: _mappedPermIds.default.editRole,\n        name: 'Edit Role',\n        action: async function (model) {\n          const session = this.get('session');\n          let permissionList = [];\n          const roleName = model.get('roleName');\n\n          if (roleName) {\n            permissionList = await this.get('ajax').request(`${_apiUrls.API.ssoService.host}/role/${roleName}/role-permission/`, {\n              method: 'GET',\n              contentType: 'application/json',\n              headers: {\n                'Authorization': `Bearer ${session.data.authenticated.token}`\n              }\n            }).catch(() => []);\n          }\n\n          permissionList = permissionList.map(perm => perm.permissionId);\n          model.set('permissionList', permissionList);\n          this.get('workspace').pushState('permAddRole', {\n            displayName: 'Edit Role',\n            roles: [model],\n            roleData: this.get('records'),\n            action: this.contextMenuHandler.bind(this, 'permAddRole')\n          }, {\n            replaceSelf: true\n          });\n        }.bind(this)\n      }, {\n        id: 'delete',\n        permId: _mappedPermIds.default.deleteRole,\n        name: 'Delete Role',\n        action: async function (model) {\n          const tooltip = this.get('tooltip');\n          const roleName = model.get('roleName');\n          const permUsers = await this.get('store').query('perm-sso-user', {});\n          const users = permUsers.toArray().filter(u => u.get('roles').some(r => r.roleName === roleName));\n          tooltip.pushConfirmation({\n            tip: 'There are ' + users.length + ' users assigned to \"' + model.displayName + '\" role. Are you sure you want to delete?',\n            title: 'Deleting Role',\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              this.get('deleteTask').perform().then(() => {\n                this.refresh();\n                this.get('notifications').success('DELETED ROLE SUCCESSFULLY');\n                return tooltip.reset();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: () => {\n              tooltip.reset();\n            }\n          });\n        }.bind(this)\n      }]);\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = (await store.query(modelName, params)) || [];\n      const storeData = store.peekAll(modelName);\n\n      _lodash.default.differenceBy(storeData.toArray(), activeData.toArray(), i => {\n        return i.get('id');\n      }).forEach(record => {\n        store.unloadRecord(record);\n      });\n\n      const rolePermissions = await store.query('role-permission', {});\n      const storeRolePermissions = store.peekAll('role-permission');\n\n      _lodash.default.differenceBy(storeRolePermissions.toArray(), rolePermissions.toArray(), i => {\n        return i.get('id');\n      }).forEach(record => {\n        store.unloadRecord(record);\n      });\n\n      const nonSuperuserRoles = activeData.filter(d => d.id !== 'superuser');\n      this.get('activeContext.topActiveContext').set('permSsoRoles', nonSuperuserRoles);\n      const dataTraversal = this.get('activeContext.topActiveContext.permissionActiveData');\n      const filteredData = dataTraversal['perm-sso-role'].filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    refresh() {\n      this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['perm-sso-user', 'perm-sso-role']);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-roles-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/permissions-roles-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'perm-sso-role',\n    title: 'Roles',\n    defaultSortId: 'name',\n    defaultSortAsc: false,\n    hideCheckBox: true,\n    columns: [{\n      id: 'name',\n      type: 'text',\n      label: 'Role Name',\n      valuePath: 'displayName',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 70,\n      hidden: false\n    }, {\n      id: 'workspacePermissions',\n      type: 'text',\n      label: 'Workspace Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.WORKSPACE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 70,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'dispatchPermissions',\n      type: 'text',\n      label: 'Dispatch Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.DISPATCH',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'schedulingPermissions',\n      type: 'text',\n      label: 'Scheduling Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.SCHEDULING',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'subscriptionPermissions',\n      type: 'text',\n      label: 'Subscription Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.SUBSCRIPTION',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 70,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'routePermissions',\n      type: 'text',\n      label: 'Route Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.ROUTE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 70,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'widgetPermissions',\n      type: 'text',\n      label: 'Widget Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.WIDGET',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 70,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'systemManagementPermissions',\n      type: 'text',\n      label: 'System Management Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.SYSTEM_MANAGEMENT',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 70,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'rolePermissions',\n      type: 'text',\n      label: 'Role Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.ROLE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'userPermissions',\n      type: 'text',\n      label: 'User Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.USER',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'timelinePermissions',\n      type: 'text',\n      label: 'Timeline Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.TIMELINE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'tripPermissions',\n      type: 'text',\n      label: 'Trip Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.TRIP',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'stopPermissions',\n      type: 'text',\n      label: 'Stop Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.STOP',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'breakPermissions',\n      type: 'text',\n      label: 'Break Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.BREAK',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'passengerPermissions',\n      type: 'text',\n      label: 'Passenger Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.PASSENGER',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'vehiclePermissions',\n      type: 'text',\n      label: 'Vehicle Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.VEHICLE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'messagesPermissions',\n      type: 'text',\n      label: 'Messages Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.MESSAGES',\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'schedulePermissions',\n      type: 'text',\n      label: 'Schedule Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.SCHEDULE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'activityLogPermissions',\n      type: 'text',\n      label: 'Activity Log Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.ACTIVITY_LOG',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'bookingPermissions',\n      type: 'text',\n      label: 'Booking Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.BOOKING',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'archivePermissions',\n      type: 'text',\n      label: 'Archive Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.ARCHIVE',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'reconiliationPermissions',\n      type: 'text',\n      label: 'Reconciliation Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.RECONCILIATION',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'mapPermissions',\n      type: 'text',\n      label: 'Map Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.MAP',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'incidentReportPermissions',\n      type: 'text',\n      label: 'Incident Report Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.INCIDENT_REPORT',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }, {\n      id: 'reportsPermissions',\n      type: 'text',\n      label: 'Reports Permissions',\n      valuePath: 'rolePermissionsGroupByCatgories.REPORTS',\n      searchable: true,\n      resizable: true,\n      minResizeWidth: 50,\n      hidden: false,\n      csvReplaceRegex: {\n        pattern: '\\\\/',\n        flag: 'g',\n        replaceWith: '|'\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/permissions-users-widget/config\", \"adept-iq/config/mapped-permIds\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _mappedPermIds, _emberConcurrency, _lodash, _filters, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['users-widget', 'data-test-users-widget'],\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.initContextMenu();\n    },\n\n    initContextMenu() {\n      this.initTableActions();\n      this.initSingleActions();\n      this.initBulkActions();\n    },\n\n    // isLoggedInUserSelected() {\n    //   let isExists = false;\n    //   this.selectedUsers.map((user) => {\n    //     if (user.content.id === this.session.data.authenticated.userId) {\n    //       isExists = true;\n    //     }\n    //   });\n    //   return isExists;\n    // },\n    // handleUserLogout() {\n    //   if (this.isLoggedInUserSelected()) {\n    //     this.get('session').invalidate();\n    //   }\n    // },\n    contextMenuHandler(optionId, isSaved) {\n      if (isSaved) {\n        this.refresh();\n      }\n    },\n\n    initTableActions() {\n      this.get('tableActions').unshiftObject({\n        id: 'newUser',\n        permId: _mappedPermIds.default.newUser,\n        name: 'Add User',\n        action: () => {\n          this.get('workspace').pushState('permissionsAddNewUser', {\n            action: this.contextMenuHandler.bind(this, 'permissionsAddNewUser'),\n            userRecords: this.get('records')\n          });\n        }\n      });\n    },\n\n    initSingleActions() {\n      this.set('singleActions', [{\n        id: 'edit',\n        permId: _mappedPermIds.default.editUser,\n        name: 'Edit User',\n        action: user => {\n          this.get('workspace').pushState('permissionsEditUser', {\n            user,\n            action: this.contextMenuHandler.bind(this, 'permissionsEditUser'),\n            userRecords: this.get('records')\n          });\n        }\n      }, {\n        id: 'delete',\n        permId: _mappedPermIds.default.editUser,\n        // temporary for test, we don't have delteUser define\n        name: 'Delete User',\n        action: model => {\n          this.deleteUser([model]);\n        }\n      }, {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLogUser,\n        name: 'View Activity Log',\n        action: model => {\n          const name = model.get('fullName');\n          this.get('workspace').pushState('userActivityLog', {\n            displayName: `User #${name} Activity Log`,\n            user: model\n          });\n        }\n      }]);\n    },\n\n    initBulkActions() {\n      this.set('dynamicBulkActions', [{\n        id: 'bulkDelete',\n        permId: _mappedPermIds.default.editUser,\n        // temporary for test, we don't have delteUser define\n        name: 'Bulk Delete Users',\n        action: models => {\n          this.deleteUser(models);\n        }\n      }]);\n    },\n\n    deleteUser(users) {\n      const tooltip = this.get('tooltip');\n      const title = users.length < 2 ? 'Delete User' : 'Bulk Delete Users';\n      const tip = users.length < 2 ? 'Do you want to delete this user?' : 'Do you want to bulk delete users?';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return this.get('deleteUserTask').perform(users).then(isDeleted => {\n            if (isDeleted) {\n              this.get('activeContext.topActiveContext').setRecordsChecked(users, false);\n              this.refresh();\n              this.get('notifications').success(users.length < 2 ? 'DELETED USER SUCCESSFULLY' : 'BULK DELETED USERS SUCCESSFULLY');\n            }\n\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in delete user, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    deleteUserTask: (0, _emberConcurrency.task)(function* (users) {\n      try {\n        const store = this.get('store');\n        const userAdapter = store.adapterFor('perm-sso-user');\n\n        if (!Ember.isEmpty(users)) {\n          for (let i = 0; i < users.length; i++) {\n            yield userAdapter.deleteUser(users[i].id);\n          }\n\n          return true;\n        }\n\n        return false;\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = (await store.query(modelName, params)) || [];\n      const storeData = store.peekAll(modelName);\n\n      _lodash.default.differenceBy(storeData.toArray(), activeData.toArray(), i => {\n        return i.get('id');\n      }).forEach(record => {\n        store.unloadRecord(record);\n      });\n\n      this.get('activeContext.topActiveContext').set('permSsoUsers', activeData);\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    refresh() {\n      this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['perm-sso-user', 'perm-sso-role']);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const cellComponent = 'generic-components/table/cells/check-box';\n  const columnComponent = 'generic-components/table/columns/check-box';\n  const rowComponent = 'table/rows/action-row';\n  var _default = {\n    component: 'iq-widgets/users-widget',\n    cellComponent,\n    rowComponent,\n    columnComponent,\n    modelName: 'perm-sso-user',\n    title: 'Users',\n    columns: [{\n      id: 'firstName',\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 105,\n      width: '105px'\n    }, {\n      id: 'lastName',\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 105,\n      width: '105px'\n    }, {\n      id: 'calculatedStatus',\n      type: 'text',\n      label: 'Status',\n      valuePath: 'calculatedStatus',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 85,\n      width: '85px',\n      format: function (valuePath) {\n        return valuePath.charAt(0).toUpperCase() + valuePath.substr(1);\n      }\n    }, {\n      id: 'roleNamesStr',\n      type: 'text',\n      label: 'Role',\n      valuePath: 'roleNamesStr',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 170,\n      width: '170px'\n    }, {\n      id: 'passwordChangedDate',\n      type: 'date',\n      label: 'Password Last Changed',\n      valuePath: 'passwordChangedDate',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 120,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      width: '120px'\n    }, {\n      id: 'userName',\n      type: 'text',\n      label: 'Username',\n      valuePath: 'userName',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 150,\n      width: '150px'\n    }, {\n      id: 'providerNamesStr',\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'providerNamesStr',\n      searchable: true,\n      resizable: true,\n      hidden: false,\n      minResizeWidth: 90,\n      width: '90px'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/base-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-cell', 'data-test-table-base-cell'],\n    classNameBindings: ['alertCategory', 'data-test-alertCategory']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"AQ2ZPpCr\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/check-box/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    activeContext: Ember.inject.service(),\n    isChecked: Ember.computed.alias('row.isChecked'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n        row.set('isCheckboxChecked', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vKasDAod\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/cells/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/base-column/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-column'],\n    attributeBindings: ['tabindex'],\n    tabindex: 0,\n    isEditing: false,\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/check-box/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-check-box-column'],\n    isChecked: Ember.computed('table.rows.@each.isChecked', function () {\n      const rows = this.get('table.rows'); // it's weird to see checkbox when no records are shown\n\n      if (!rows || rows.length === 0) return false;\n      return rows.isEvery('isChecked');\n    }),\n    actions: {\n      onCheckboxToggle(event) {\n        // these are passed by the generic column widget's template\n        const {\n          checkAll,\n          uncheckAll\n        } = this.get('extra');\n\n        if (event.target.checked && checkAll) {\n          Ember.run.next(checkAll);\n        } else if (uncheckAll) {\n          Ember.run.next(uncheckAll);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1ip5sy7e\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" \\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/permissions-users-widget/table/columns/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/avlmConfig\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-undefined */\n  var _default = {\n    component: 'iq-widgets/playback-widget',\n    rowComponent: 'table/rows/action-row',\n    title: 'Playback',\n    filters: {\n      text: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        // eslint-disable-next-line no-undefined\n        exp: function (item, values) {\n          return item !== undefined && item !== null ? item.toString().trim().toLowerCase() === values[0].toString().trim().toLowerCase() : false;\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        // eslint-disable-next-line no-undefined\n        exp: function (item, values) {\n          return item !== undefined && item !== null ? item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase() : true;\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        // eslint-disable-next-line no-undefined\n        exp: function (item, values) {\n          return item !== undefined && item !== null ? item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1 : false;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }],\n      uuid: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return item !== undefined && item !== null ? item.toString().trim().toLowerCase() === values[0].toString().trim().toLowerCase() : false;\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return item !== undefined && item !== null ? item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase() : false;\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return item !== undefined && item !== null ? item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1 : false;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }],\n      number: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return parseFloat(item) === parseFloat(values[0]);\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return parseFloat(item) !== parseFloat(values[0]);\n        }\n      }, {\n        id: 'greaterThan',\n        label: '>',\n        exp: function (item, values) {\n          return parseFloat(item) > parseFloat(values[0]);\n        }\n      }, {\n        id: 'lessThan',\n        label: '<',\n        arity: 1,\n        exp: function (item, values) {\n          return parseFloat(item) < parseFloat(values[0]);\n        }\n      }, {\n        id: 'between',\n        label: 'Between',\n        arity: 2,\n        exp: function (item, values) {\n          return values[1] > values[0] && item <= values[1] && item >= values[0];\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }],\n      time: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid()) return item === values[0];\n          return false;\n        }\n      }, {\n        id: 'after',\n        label: 'After',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid()) return item > values[0];\n          return false;\n        }\n      }, {\n        id: 'before',\n        label: 'Before',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid()) return item < values[0];\n          return false;\n        }\n      }, {\n        id: 'atOrBefore',\n        label: 'At or Before',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid()) return item <= values[0];\n          return false;\n        }\n      }, {\n        id: 'atOrAfter',\n        label: 'At or After',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid()) return item >= values[0];\n          return false;\n        }\n      }, {\n        id: 'between',\n        label: 'Between',\n        arity: 2,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[1], 'h:mm:ss A', true).isValid()) return values[1] > values[0] && item <= values[1] && item >= values[0];\n          return false;\n        }\n      }, {\n        id: 'strictlyBetween',\n        label: 'Strictly Between',\n        arity: 2,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[0], 'h:mm:ss A', true).isValid() && (0, _moment.default)(values[1], 'h:mm:ss A', true).isValid()) return values[1] > values[0] && item < values[1] && item > values[0];\n          return false;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }]\n    },\n    vehiclesTableColumns: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      name: 'Vehicle ID',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'vehicleGridVehicleId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      name: 'Driver ID',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'vehicleGridDriverId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      name: 'Driver Name',\n      label: 'Driver Name',\n      valuePath: 'driverName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'vehicleGridDriverName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      name: 'OTP',\n      label: 'OTP',\n      valuePath: 'otp',\n      dataType: 'text',\n      resizable: true,\n      searchable: true,\n      minResizeWidth: 50,\n      id: 'otp',\n      component: 'iq-widgets/playback-widget/table-header'\n    }],\n    vehicleEventsTableColumns: [{\n      label: 'Time',\n      name: 'Time',\n      valuePath: 'time',\n      dataType: 'time',\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'time',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Route',\n      name: 'Route',\n      valuePath: 'routeName',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'routeId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Vehicle ID',\n      name: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'vehicleId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Latitude',\n      name: 'Latitude',\n      valuePath: 'lat',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'lat',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Longitude',\n      name: 'Longitude',\n      valuePath: 'lng',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'lng',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger ID',\n      name: 'Passenger ID',\n      valuePath: 'passengerId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 30,\n      id: 'passengerId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger First Name',\n      name: 'Passenger First Name',\n      valuePath: 'passengerFName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'passengerFName',\n      searchable: true,\n      width: 150,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger Last Name',\n      name: 'Passenger Last Name',\n      valuePath: 'passengerLName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'passengerLName',\n      searchable: true,\n      width: 150,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Stop Address',\n      name: 'Stop Address',\n      valuePath: 'formattedStopAddress',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 90,\n      id: 'stopAddress',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Stop Type',\n      name: 'Stop Type',\n      valuePath: 'stopType',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'stopType',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Event Type',\n      name: 'Event Type',\n      valuePath: 'eventType',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'eventType',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Vehicle Speed',\n      name: 'Vehicle Speed',\n      valuePath: 'speed',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'speed',\n      component: 'iq-widgets/playback-widget/table-header'\n    }],\n    route: {\n      model: 'playback-route',\n      indexPath: 'routeId'\n    },\n    routeName: {\n      model: 'playback-route',\n      indexPath: 'routeName'\n    },\n    vehicle: {\n      model: 'playback-vehicle',\n      indexPath: 'vehicleId'\n    },\n    driver: {\n      model: 'playback-driver',\n      indexPath: 'driverId'\n    },\n    activitylog: {\n      adaptor: 'playback-activity-log'\n    },\n    vehicleEvents: ['pick', 'wheelchair-pick', 'wheelchair-drop', 'onBreak', 'offBreak', 'drop', 'pullOut', 'pullIn']\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/check-box/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/utils/mobile\"], function (_exports, _component, _mobile) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n    classNameBindings: ['isTouchDevice'],\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'isTouchDevice', _mobile.isTouchDevice);\n    },\n\n    isChecked: Ember.computed.alias('row.isChecked'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n        const onToggleAction = this.get('tableActions.onToggleCheckbox');\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', false); // Do not selected by click checkbox\n\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', false); // Do not selected by click checkbox\n\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n\n        if (onToggleAction) {\n          onToggleAction(row);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"S8utTFiO\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-cog \\\",[27,\\\"if\\\",[[23,[\\\"isChecked\\\"]],\\\"is-checked\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"extra\\\",\\\"onRightClick\\\"]],[23,[\\\"row\\\"]]],null]],[9],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/playback-widget/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/component\", [\"exports\", \"lodash\", \"adept-iq/pods/components/iq-widgets/map-widget/component\", \"adept-iq/config/environment\", \"adept-iq/pods/components/iq-widgets/playback-widget/config\", \"adept-iq/pods/components/iq-widgets/playback-widget/avlmConfig\", \"ember-light-table\", \"adept-iq/mixins/fetch-vehicle-events\", \"adept-iq/config/icon-paths\", \"moment\", \"adept-iq/config/mapped-permIds\", \"papaparse\", \"ember-concurrency\"], function (_exports, _lodash, _component, _environment, _config, _avlmConfig, _emberLightTable, _fetchVehicleEvents, _iconPaths, _moment, _mappedPermIds, _papaparse, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const toPixels = x => `${x}px`;\n\n  var _default = _component.default.extend(_fetchVehicleEvents.default, {\n    workspace: Ember.inject.service(),\n    interaction: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    classNames: ['playback-widget'],\n    layoutName: 'components/iq-widgets/playback-widget',\n    classNameBindings: ['testPlaybackWidget'],\n    testPlaybackWidget: false,\n    config: _config.default,\n    animSpeed: null,\n    isSlideMoving: false,\n    totolTimeInSeconds: null,\n    durationInSeconds: null,\n    isVehicleEventSearchEnabled: false,\n    isVehicleSearchEnabled: false,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // custom playback map\n    isSearchingLocation: false,\n    searchCenter: null,\n    // tables\n    vehiclesTable: null,\n    vehiclesSearchableColumns: null,\n    vehicleEventsTable: null,\n    vehicleEventsSearchableColumns: null,\n    rightClickActionArray: null,\n    inlineRowMenu: null,\n    inlineRowMenuPosition: null,\n    dummyVehicleOptions: null,\n    dummyRouteOptions: null,\n    dummyDriverOptions: null,\n    filteredEvents: null,\n    // map values\n    allEvents: null,\n    // table search parameters\n    isSearchEnabled: false,\n    activeSearchTable: null,\n    // default property for anime x button\n    animDisable: false,\n    // mixin\n    bufferSize: 200,\n    eventTableFilterDone: false,\n    vehicleTableFilterDone: false,\n    previousFilterSetting: null,\n    previousFilterSettingVehicleTable: null,\n    playbackFilterSettingClosed: Ember.computed.readOnly('workspace.playbackFilterSettingClosed'),\n    vehicleTableFilterSettingClosed: Ember.computed.readOnly('workspace.playbackFilterSettingClosedofVehicleGrid'),\n    widgetState: Ember.computed.readOnly('workspace.topOptions.widget._state'),\n    vehicleRowSelection: Ember.computed('vehicleRowsSelection', function () {\n      let row = null;\n\n      if (this.vehicleRowsSelection) {\n        row = this.vehicleRowsSelection[0];\n      }\n\n      return row;\n    }),\n    vehicleRowSelectionObserver: Ember.observer('vehicleRowSelection', function () {\n      if (this.get('vehicleRowSelection')) {\n        this.actions.onVehicleRowClick(this.get('vehicleRowSelection'), this);\n      }\n    }),\n    currentSelection: Ember.computed('rowSelection', function () {\n      let row = null;\n\n      if (this.rowSelection) {\n        row = this.rowSelection[0];\n      }\n\n      return row;\n    }),\n    currentSelectionObserver: Ember.observer('currentSelection', function () {\n      if (this.get('currentSelection')) {\n        this.actions.onEventRowClick(this.get('currentSelection'), this);\n      }\n    }),\n    columns: Ember.computed('widgetState', 'playbackFilterSettingClosed', function () {\n      if (this.get('playbackFilterSettingClosed')) {\n        return this.get('previousFilterSetting');\n      }\n\n      let columns = this.get('config.vehicleEventsTableColumns');\n      const widgetState = this.get('widgetState');\n\n      if (widgetState && widgetState.hasOwnProperty('columns')) {\n        _lodash.default.pickBy(widgetState.columns, (value, key) => {\n          if (value.hidden) {\n            columns = columns.filter(function (column) {\n              return column.id !== key;\n            });\n          }\n        }); // eslint-disable-next-line ember/no-side-effects\n\n\n        this.set('previousFilterSetting', columns);\n        return columns;\n      } // eslint-disable-next-line ember/no-side-effects\n\n\n      this.set('previousFilterSetting', columns);\n      return columns;\n    }),\n    rows: Ember.computed('vehicleEvents', 'eventTableFilterDone', function () {\n      let rows = [];\n\n      if (this.get('vehicleEvents')) {\n        rows = this.get('vehicleEvents');\n      }\n\n      if (this.get('eventTableFilterDone')) {\n        rows = this.get('eventTableFilterDone');\n      }\n\n      return rows;\n    }),\n    vehicleColumns: Ember.computed('widgetState', 'vehicleTableFilterSettingClosed', function () {\n      if (this.get('vehicleTableFilterSettingClosed')) {\n        return this.get('previousFilterSettingVehicleTable');\n      }\n\n      let columns = this.get('config.vehiclesTableColumns');\n      const widgetState = this.get('widgetState');\n\n      if (widgetState && widgetState.hasOwnProperty('columns')) {\n        _lodash.default.pickBy(widgetState.columns, (value, key) => {\n          if (value.hidden) {\n            columns = columns.filter(function (column) {\n              return column.id !== key;\n            });\n          }\n        }); // eslint-disable-next-line ember/no-side-effects\n\n\n        this.set('previousFilterSettingVehicleTable', columns);\n        return columns;\n      } // eslint-disable-next-line ember/no-side-effects\n\n\n      this.set('previousFilterSettingVehicleTable', columns);\n      return columns;\n    }),\n    vehicleRows: Ember.computed('radiusVehicles', 'vehicleTableFilterDone', function () {\n      let rows = [];\n\n      if (this.get('radiusVehicles')) {\n        rows = this.get('radiusVehicles');\n      }\n\n      if (this.get('vehicleTableFilterDone')) {\n        rows = this.get('vehicleTableFilterDone');\n      }\n\n      return rows;\n    }),\n    activeEvents: Ember.computed('vehicleEvents', 'filteredEvents', function () {\n      const events = this.get('vehicleEvents');\n      const filteredEvents = this.get('filteredEvents');\n      if (Ember.isNone(events)) return [];else if (!Ember.isNone(filteredEvents)) return filteredEvents;\n      return events.filter(event => event.isChecked);\n    }),\n    mapResetOnVehicleEvents: Ember.computed.readOnly('vehicleEvents', function () {\n      if (Ember.get(this, 'initialMapLayers') !== null) Ember.get(this, 'map').eachLayer(layer => {\n        if (!Ember.get(this, 'initialMapLayers').includes(layer._leaflet_id)) {\n          layer.remove();\n        }\n      });\n      return;\n    }),\n    sliderIndexMax: Ember.computed('activeEvents', function () {\n      const events = this.get('activeEvents');\n      return events.length > 0 ? events.length - 1 : 0;\n    }),\n    elapsedTimeObserver: Ember.observer('sliderIndex', 'elapsedTime', function () {\n      const activeEvents = this.get('activeEvents');\n      const sliderIndex = this.get('sliderIndex');\n      if (Ember.isEmpty(activeEvents) || Ember.isNone(sliderIndex) || sliderIndex >= activeEvents.length) return;\n      const currentEvent = activeEvents[this.get('sliderIndex')];\n      const elapsedTime = this.get('elapsedTime');\n      const milisec = (0, _moment.default)(currentEvent.get('timestamp')).valueOf() - (0, _moment.default)(this.get('activeEvents.firstObject.timestamp')).valueOf() + elapsedTime;\n      this.set('durationInSeconds', milisec / 1000);\n    }),\n    activeStartTime: Ember.computed('activeEvents.firstObject.time', function () {\n      return this.get('activeEvents.firstObject.time') || 'Start Time';\n    }),\n    activeEndTime: Ember.computed('activeEvents.lastObject.time', function () {\n      return this.get('activeEvents.lastObject.time') || 'End Time';\n    }),\n    currentTimeSilder: Ember.computed('durationInSeconds', function () {\n      const timeStamp = Ember.get(this, 'activeEvents.firstObject.timestamp');\n      const durationInSeconds = Ember.get(this, 'durationInSeconds');\n      if (Ember.isEmpty(timeStamp) || durationInSeconds === null || durationInSeconds === 0) return;\n      return (0, _moment.default)(timeStamp).add(durationInSeconds, 'seconds').format(_environment.default.dateTimeFormat.timeMoment);\n    }),\n    // Caption over slider to move along with slider\n    currentWidght: Ember.computed('durationInSeconds', 'totolTimeInSeconds', function () {\n      // Margin-left is set to 512px\n      const margin = 512; // max Margin-left to make it equal to slider motion 877px\n\n      const maxMargin = 365;\n      const totolTimeInSeconds = Ember.get(this, 'totolTimeInSeconds');\n      const durationInSeconds = Ember.get(this, 'durationInSeconds');\n      let finalMargin = null;\n      if (totolTimeInSeconds === null || totolTimeInSeconds === 0 || durationInSeconds === null || durationInSeconds === 0) finalMargin = margin.toString() + 'px';else finalMargin = (margin + maxMargin * durationInSeconds / totolTimeInSeconds).toString() + 'px';\n      return finalMargin;\n    }),\n    isReconciled: Ember.computed.alias('activeEvents.firstObject.isReconciled'),\n    polylinePoints: Ember.computed('activeEvents', function () {\n      const events = this.get('activeEvents');\n      const points = events.reduce((arr, event) => {\n        arr.push(event.latlng);\n        return arr;\n      }, []);\n      return points;\n    }),\n    movingMarker: Ember.computed('activeEvents.@each.{latlng}', function () {\n      const events = this.get('activeEvents');\n      const vehicleIcon = window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicle,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      });\n      let movingMarker, previousPointsTime;\n\n      if (!Ember.isEmpty(events)) {\n        events.forEach(event => {\n          if (!movingMarker) {\n            movingMarker = window.L.Marker.movingMarker([event.latlng], 0, {\n              autostart: false,\n              loop: false,\n              icon: vehicleIcon,\n              rotationAngle: null,\n              rotationOrigin: '11.5px 11.5px'\n            });\n            movingMarker.on('click', function () {\n              if (this.get('targetRow')) {\n                const currentRow = this.get('targetRow.content');\n                const formattedEventType = 'Vehicle <br/>';\n                let label = formattedEventType.bold(); // NOTE: DON'T DELETE SPPED CODE\n                // speed will be implemented later therefore commented the code, not removed the code.\n                // let speed = 'N/A';\n                // if (currentRow.speed) {\n                //   speed = currentRow.speed;\n                // }\n                // if (currentRow.speed === 0) {\n                //   speed = 0;\n                // }\n\n                let routeName = 'N/A';\n\n                if (currentRow.routeName) {\n                  routeName = currentRow.routeName;\n                }\n\n                label = label + 'Vehicle ID: ' + currentRow.vehicleId + '<br/>'; // speed will be implemented later therefore commented the code, not removed the code.\n                // label = label + 'Vehicle Speed: ' + speed + '<br/>';\n\n                label = label + 'Route: ' + routeName + '<br/>';\n                movingMarker.unbindPopup();\n                movingMarker.bindPopup(label, {\n                  closeButton: true\n                }).openPopup();\n              }\n            }.bind(this));\n            previousPointsTime = (0, _moment.default)(event.timestamp).valueOf();\n          } else {\n            const currentPointsTime = (0, _moment.default)(event.timestamp).valueOf();\n            movingMarker.addLatLng(event.latlng, currentPointsTime - previousPointsTime);\n            previousPointsTime = currentPointsTime;\n          }\n        });\n      }\n\n      return movingMarker;\n    }),\n    radiusMarkersGroup: Ember.computed('radiusVehicles.@each.{latlng,heading}', function () {\n      const radiusVehicles = this.get('radiusVehicles');\n      const vehicleIcon = window.L.icon({\n        iconUrl: _iconPaths.default.vehicles.vehicle,\n        iconSize: [23, 23],\n        iconAnchor: [11.5, 11.5]\n      });\n      const markers = window.L.markerClusterGroup();\n\n      if (!Ember.isEmpty(radiusVehicles)) {\n        radiusVehicles.forEach(vehicle => {\n          const marker = window.L.marker(vehicle.latlng, {\n            icon: vehicleIcon,\n            rotationAngle: vehicle.heading / 2,\n            rotationOrigin: '11.5px 11.5px'\n          });\n          markers.addLayer(marker);\n          vehicle.set('marker', marker);\n        });\n        return markers;\n      }\n\n      return null;\n    }),\n    isRunning: Ember.computed('_movingMarker', function () {\n      const movingMarker = this.get('_movingMarker');\n\n      if (movingMarker) {\n        return movingMarker.isRunning();\n      }\n\n      return false;\n    }),\n    layers: Ember.computed.readOnly('mapService.topMapContext.layers'),\n    updateLayers: Ember.observer('layers', function () {\n      if (this.get('mapService.topMapContext.refreshMap')) {\n        this.set('mapService.topMapContext.refreshMap', false);\n        this.updateLabels();\n      }\n    }),\n    // Tabs\n    activeTabModeId: Ember.computed.alias('activeContext.topActiveContext.activeTabModeId'),\n    // data\n    vehicles: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (Ember.isNone(workspaceData)) return [];\n      const vehicleConfig = this.get('config.vehicle');\n      const vehicles = workspaceData[vehicleConfig.model];\n      return vehicles;\n    }),\n    routes: Ember.computed('workspaceData', function () {\n      const workspaceData = this.get('workspaceData');\n      if (Ember.isNone(workspaceData)) return [];\n      const routeConfig = this.get('config.route');\n      const routes = workspaceData[routeConfig.model];\n      return routes;\n    }),\n    events: null,\n    markerLocation: null,\n    tooLargeData: Ember.computed.alias('activeContext.topActiveContext.tooLargeData'),\n    radiusVehicles: Ember.computed.alias('activeContext.topActiveContext.radiusVehicles'),\n    vehicleEvents: Ember.computed.alias('activeContext.topActiveContext.vehicleEvents'),\n    selectedAddress: Ember.computed.alias('activeContext.topActiveContext.selectedAddress'),\n    selectedRadius: Ember.computed.alias('activeContext.topActiveContext.selectedRadius'),\n    selectedDateTimeRage: Ember.computed.alias('activeContext.topActiveContext.selectedDateTimeRage'),\n    selectedProvider: Ember.computed.alias('activeContext.topActiveContext.selectedProvider'),\n    selectedRoute: Ember.computed.alias('activeContext.topActiveContext.selectedRoute'),\n    selectedVehicle: Ember.computed.alias('activeContext.topActiveContext.selectedVehicle'),\n    selectedRadiusVehicle: Ember.computed.alias('activeContext.topActiveContext.selectedRadiusVehicle'),\n    selectedDriver: Ember.computed('selectedRoute', 'selectedVehicle', function () {\n      const routeConfig = this.get('config.route');\n      const vehicleConfig = this.get('config.vehicle');\n      const driverConfig = this.get('config.driver');\n      const route = this.get('selectedRoute.model');\n      let driver;\n\n      if (Ember.isPresent(route)) {\n        driver = route.get(routeConfig.driverPath);\n\n        if (Ember.isPresent(driver)) {\n          return {\n            id: driver.get(driverConfig.indexPath),\n            model: driver\n          };\n        }\n      }\n\n      const vehicle = this.get('selectedVehicle.model');\n\n      if (Ember.isPresent(vehicle)) {\n        driver = vehicle.get(vehicleConfig.driverPath);\n\n        if (Ember.isPresent(driver)) {\n          return {\n            id: driver.get(driverConfig.indexPath),\n            model: driver\n          };\n        }\n      }\n\n      return null;\n    }),\n\n    clearAll() {\n      Ember.set(this, 'selectedProvider', null);\n      Ember.set(this, 'selectedRoute', null);\n      Ember.set(this, 'selectedVehicle', null);\n      Ember.set(this, 'selectedDriver', null);\n      Ember.set(this, 'selectedAddress', null);\n      Ember.set(this, 'selectedRadius', null);\n      Ember.set(this, 'nextEvent', null);\n      Ember.set(this, 'animDisable', false);\n      Ember.set(this, 'filteredEvents', null);\n      this.set('tooLargeData', '');\n      this.notifyPropertyChange('filteredEvents');\n      this.get('fetchVehiclesTask').perform();\n      this.get('fetchRoutesTask').perform();\n      this.get('fetchDriversTask').perform();\n      this.get('fetchVehiclesTask').perform();\n      this.get('fetchRoutesTask').perform();\n      this.get('fetchDriversTask').perform();\n      this.set('selectedRadiusVehicle', null);\n      this.set('totolTimeInSeconds', null);\n      this.set('durationInSeconds', null);\n      this.set('animSpeed', 1);\n      this.searchCenterReset();\n      this.set('pbounds', null);\n      if (Ember.get(this, 'initialMapLayers') !== null) Ember.get(this, 'map').eachLayer(layer => {\n        if (!Ember.get(this, 'initialMapLayers').includes(layer._leaflet_id)) {\n          layer.remove();\n        }\n      }); // TODO: see if we need to clear events when hit clear button.\n\n      if (!Ember.isEmpty(Ember.get(this, 'vehicleEvents'))) Ember.set(this, 'vehicleEvents', []);\n      if (!Ember.isEmpty(Ember.get(this, 'radiusVehicles'))) Ember.set(this, 'radiusVehicles', []);\n      this.notifyPropertyChange('radiusVehicles');\n      this.notifyPropertyChange('vehicleEvents');\n      Ember.set(this, 'selectedDateTimeRage', {\n        today: (0, _moment.default)().hours(0).minutes(0).format('YYYY-MM-DD'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(7, 'years').format('YYYY-MM-DD')\n      });\n    },\n\n    workspaceData: Ember.computed.alias('activeContext.topActiveContext.workspaceData'),\n    providerSortKeys: ['name'],\n    // eslint-disable-line ember/avoid-leaking-state-in-ember-objects\n    providerOptions: Ember.computed.sort('activeContext.topActiveContext.selectedProviders', 'providerSortKeys'),\n    // providerOptions: computed('routes', 'dummyProviderOptions', function() {\n    //   const dummyOptions = this.get('dummyProviderOptions');\n    //   const options = [];\n    //   return options.concat(dummyOptions).sortBy('name');\n    // }),\n    routeOptions: Ember.computed('routes', 'dummyRouteOptions', function () {\n      const routes = this.get('routes');\n      const routeConfig = this.get('config.route');\n      const routeNameConfig = this.get('config.routeName');\n      const dummyOptions = this.get('dummyRouteOptions');\n      const options = [];\n      if (Ember.isNone(routes)) return options.concat(dummyOptions).sortBy('id');\n      routes.map(route => {\n        options.push({\n          id: route.get(routeConfig.indexPath),\n          name: route.get(routeNameConfig.indexPath)\n        });\n      });\n      return options.concat(dummyOptions).sortBy('id');\n    }),\n    vehicleOptions: Ember.computed('vehicles', 'dummyVehicleOptions', function () {\n      const vehicles = this.get('vehicles');\n      const vehicleConfig = this.get('config.vehicle');\n      const dummyOptions = this.get('dummyVehicleOptions');\n      const options = [];\n      if (Ember.isNone(vehicles)) return options.concat(dummyOptions).sortBy('id');\n      vehicles.map(vehicle => {\n        options.push({\n          id: vehicle.get(vehicleConfig.indexPath)\n        });\n      });\n      return options.concat(dummyOptions).sortBy('id');\n    }),\n    driverOptions: Ember.computed('drivers', 'dummyDriverOptions', function () {\n      const drivers = this.get('drivers');\n      const driversConfig = this.get('config.driver');\n      const dummyOptions = this.get('dummyDriverOptions');\n      const options = [];\n      if (Ember.isNone(drivers)) return options.concat(dummyOptions).sortBy('id');\n      drivers.map(driver => {\n        options.push({\n          id: driver.get(driversConfig.indexPath)\n        });\n      });\n      return options.concat(dummyOptions).sortBy('id');\n    }),\n    selectedRadiusVehicleCount: Ember.computed('selectedRadiusVehicle', 'radiusVehicles', function () {\n      const selectedVehicle = Ember.get(this, 'selectedRadiusVehicle');\n      const radiusVehicles = Ember.get(this, 'radiusVehicles');\n      return (selectedVehicle ? [selectedVehicle].length : 0).toString() + '/' + radiusVehicles.length.toString();\n    }),\n\n    markerPinRegion(coord) {\n      const map = this.get('map');\n      let radius = this.get('selectedRadius.value') | 1;\n      radius = radius * 1609.344;\n      return window.L.circle(coord, {\n        radius\n      }).addTo(map.native);\n    },\n\n    onMarkerRadiusChanged(radius) {\n      const searchCenter = this.get('searchCenter');\n\n      if (searchCenter) {\n        searchCenter.setRadius(radius * 1609.344);\n      }\n    },\n\n    init() {\n      Ember.set(this, 'initialMapLayers', null);\n      Ember.set(this, 'allEvents', null);\n      Ember.set(this, 'nextEvent', null);\n      this.get('fetchVehiclesTask').perform();\n      this.get('fetchRoutesTask').perform();\n      this.get('fetchDriversTask').perform();\n      const activeTabModeId = this.get('activeTabModeId');\n\n      if (this.get('activeEvents') && this.get('activeEvents').length === 0 && activeTabModeId === 'byVehicle') {\n        Ember.set(this, 'selectedDateTimeRage', {\n          today: (0, _moment.default)().hours(0).minutes(0).format('YYYY-MM-DD'),\n          date: null,\n          starttime: null,\n          endtime: null,\n          startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n          startofday: (0, _moment.default)().startOf('day').toISOString(),\n          endofday: (0, _moment.default)().endOf('day').toISOString(),\n          endDateSelection: (0, _moment.default)().subtract(7, 'years').format('YYYY-MM-DD')\n        });\n      }\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n\n      const config = this.get('config');\n      const vehiclesTable = new _emberLightTable.default(config.vehiclesTableColumns);\n      this.set('vehiclesTable', vehiclesTable);\n      const vehicleSearchableColumns = [];\n      config.vehiclesTableColumns.map(item => {\n        if (item.searchable) vehicleSearchableColumns.push(item.valuePath);\n      });\n      const vehicleEventsTable = new _emberLightTable.default(config.vehicleEventsTableColumns);\n      this.set('vehicleEventsTable', vehicleEventsTable);\n      const vehicleEventSearchableColumns = [];\n      config.vehicleEventsTableColumns.map(item => {\n        if (item.searchable) vehicleEventSearchableColumns.push(item.valuePath);\n      });\n      Ember.set(this, 'vehicleSearchableColumns', vehicleSearchableColumns);\n      Ember.set(this, 'vehicleEventSearchableColumns', vehicleEventSearchableColumns); // TODO: move these two to active context.\n\n      this.set('durationInSeconds', 0);\n      this.set('animSpeed', 1);\n      Ember.set(this, 'dummyProviderOptions', [{\n        id: 1,\n        name: 'MVP'\n      }, {\n        id: 2,\n        name: 'BCH'\n      }, {\n        id: 3,\n        name: 'MVT'\n      }, {\n        id: 5,\n        name: 'EPC'\n      }, {\n        id: 4,\n        name: 'MAG'\n      }]);\n      Ember.set(this, 'dummyVehicleOptions', []);\n      Ember.set(this, 'dummyRouteOptions', []);\n      Ember.set(this, 'dummyDriverOptions', []);\n\n      if (this.get('selectedAddress')) {\n        Ember.run.scheduleOnce('afterRender', this, 'restoreSearchCenter');\n      }\n\n      if (this.get('radiusVehicles')) {\n        Ember.run.scheduleOnce('afterRender', this, 'updateVehiclesTable');\n      }\n\n      if (this.get('vehicleEvents')) {\n        Ember.run.scheduleOnce('afterRender', this, 'updateVehicleEventsTable');\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // Need to remove this env condition once reconcile-workspace is ready for avlm mode.\n\n\n      if (!_environment.default.APP.avlmLite) {\n        this.createContextMenuOptions();\n      }\n\n      this.createButtonMenuOptions();\n      this.onWidgetStateChange();\n    },\n\n    getMockTripData() {\n      const routeId = 5178750;\n      const tripId = '226077387';\n      const trip = Ember.Object.create({\n        id: tripId,\n        externalId: tripId,\n        avlmRoute: {\n          id: routeId\n        },\n        route: {\n          id: routeId\n        }\n      });\n      return trip;\n    },\n\n    getMockRouteData() {\n      const routeId = 5178750;\n      const route = Ember.Object.create({\n        id: routeId\n      });\n      return route;\n    },\n\n    createContextMenuOptions() {\n      const config = this.get('config');\n      Ember.set(this, 'rightClickActionArray', []);\n      Ember.set(this, 'routeActivityLogAction', {\n        id: 'routeActivityLog',\n        name: 'Route Activity Log',\n        permId: _mappedPermIds.default.activityLogRoute,\n        action: vehicleEvent => {\n          const routeId = Ember.get(vehicleEvent, 'routeId');\n          const route = Ember.Object.create({\n            id: routeId,\n            routeId: routeId,\n            adaptor: config.activitylog.adaptor,\n            driver: config.driver.model\n          });\n          Ember.get(this, 'workspace').pushState('routeActivityLog', {\n            displayName: `Route ${routeId} Activity Log`,\n            route\n          });\n        }\n      });\n      Ember.set(this, 'tripActivityLogAction', {\n        id: 'tripActivityLog',\n        name: 'Trip Activity Log',\n        permId: _mappedPermIds.default.activityLog,\n        action: vehicleEvent => {\n          const tripId = Ember.get(vehicleEvent, 'tripId');\n          const trip = Ember.Object.create({\n            id: tripId,\n            externalId: tripId,\n            tripId: tripId,\n            adaptor: config.activitylog.adaptor,\n            driver: config.driver.model\n          });\n          Ember.get(this, 'workspace').pushState('tripActivityLog', {\n            displayName: `Trip ${tripId} Activity Log`,\n            trip\n          });\n        }\n      });\n      this.rightClickActionArray.push(Ember.get(this, 'routeActivityLogAction'));\n      this.rightClickActionArray.push(Ember.get(this, 'tripActivityLogAction'));\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    updateVehiclesTable: Ember.observer('radiusVehicles', function () {\n      const radiusVehicles = this.get('radiusVehicles');\n      if (Ember.isNone(radiusVehicles)) return;\n      this.get('vehiclesTable').setRows(radiusVehicles); // Update Table selected\n\n      const rows = this.get('vehiclesTable.rows.content');\n      const selectedRow = rows.findBy('selected');\n      const selectedRadiusVehicle = this.get('selectedRadiusVehicle');\n\n      if (!selectedRow && selectedRadiusVehicle) {\n        const row = rows.findBy('id', selectedRadiusVehicle.get('id'));\n        row.set('selected', true);\n      } // Update Map\n\n\n      const map = this.get('map');\n      if (Ember.get(this, 'initialMapLayers') !== null) map.eachLayer(layer => {\n        if (!Ember.get(this, 'initialMapLayers').includes(layer._leaflet_id)) {\n          layer.remove();\n        }\n      });\n\n      if (this.get('_radiusMarkersGroup')) {\n        map.native.removeLayer(this.get('_radiusMarkersGroup'));\n        this.set('_radiusMarkersGroup', null);\n      }\n\n      const radiusMarkersGroup = this.get('radiusMarkersGroup');\n\n      if (Ember.isPresent(radiusMarkersGroup)) {\n        this.set('_radiusMarkersGroup', radiusMarkersGroup);\n        map.native.addLayer(radiusMarkersGroup);\n      }\n    }),\n    updateVehicleEventsTable: Ember.observer('vehicleEvents', function () {\n      const vehicleEvents = this.get('vehicleEvents');\n      this.get('vehicleEventsTable').setRows(vehicleEvents);\n\n      if (vehicleEvents && vehicleEvents.length > 0) {\n        this.notifyPropertyChange('activeEvents');\n        const widget = this.get('widget');\n\n        if (widget && widget.state && widget.state.columns) {\n          const columns = widget.state.columns;\n          let bool = true;\n          columns.map(data => {\n            if (data && (data.filterValues || data.filterType && data.filterType.id === 'empty' || data.filterTypeId === 'empty')) {\n              bool = false;\n              this.updateTableColumns();\n              return;\n            }\n          });\n\n          if (bool) {\n            this.setTableRows(vehicleEvents);\n          }\n        } else {\n          this.setTableRows(vehicleEvents);\n        }\n      } else {\n        this.setTableRows(vehicleEvents);\n      }\n    }),\n    updatePlayback: Ember.observer('activeEvents', function () {\n      const points = this.get('polylinePoints');\n      const activeEvents = Ember.get(this, 'activeEvents');\n      this.updateLabels();\n\n      if (!Ember.isEmpty(points)) {\n        if (Ember.get(this, 'initialMapLayers') === null) {\n          const fetchLayerIds = [];\n          Ember.get(this, 'map').eachLayer(layer => {\n            fetchLayerIds.push(layer._leaflet_id);\n          });\n          Ember.set(this, 'initialMapLayers', fetchLayerIds);\n        } else {\n          Ember.get(this, 'map').eachLayer(layer => {\n            if (!Ember.get(this, 'initialMapLayers').includes(layer._leaflet_id)) {\n              layer.remove();\n            }\n          });\n        }\n\n        const polyline = window.L.polyline(points, {\n          color: '#A9B2B5',\n          dashArray: '2 9',\n          opacity: 1,\n          weight: 5\n        });\n        const directionalMarkers = window.L.markerClusterGroup();\n        const directionalPoints = activeEvents.filter((value, index) => index % 50 === 0 && value.type === 'GPS Ping');\n        const directionIcon = window.L.icon({\n          iconUrl: _iconPaths.default.vehicleEvents.arrow,\n          iconSize: [10, 10],\n          iconAnchor: [3, 3]\n        });\n        directionalPoints.forEach(vehicle => {\n          const marker = window.L.marker([vehicle.lat, vehicle.lng], {\n            icon: directionIcon,\n            rotationAngle: vehicle.heading / 2,\n            rotationOrigin: '1px 1px'\n          });\n          directionalMarkers.addLayer(marker);\n        });\n        const nextEvent = activeEvents[0];\n        const data = activeEvents.filter(event => event.type !== 'GPS Ping');\n        const bounds = window.L.latLngBounds(points);\n        const events = data.map(event => {\n          event.isPerformed = false;\n          return event;\n        });\n        Ember.set(this, 'allEvents', events);\n        Ember.set(this, 'nextEvent', nextEvent);\n        Ember.set(this, '_directionalMarkerLayer', directionalMarkers);\n        this.set('pbounds', bounds);\n        this.set('polyline', polyline);\n        this.set('totolTimeInSeconds', ((0, _moment.default)(this.get('activeEvents.lastObject.timestamp')).valueOf() - (0, _moment.default)(this.get('activeEvents.firstObject.timestamp')).valueOf()) / 1000);\n      } else {\n        // If empty points, let us keep bounds\n        this.set('polyline', null);\n      }\n\n      this.updateContent(activeEvents);\n    }),\n    sliderIndex: null,\n    elapsedTime: 0,\n    //targetRow: null,\n    targetRow: Ember.computed('vehicleEventsTable', function () {\n      let rows = null;\n\n      if (this.get('vehicleEventsTable') && this.get('vehicleEventsTable.rows.content')) {\n        rows = this.get('vehicleEventsTable.rows.content');\n        return rows[0];\n      }\n\n      return rows;\n    }),\n    sliderIndexObserver: Ember.observer('sliderIndex', function () {\n      if (this.get('bufferSize') <= 4000) {\n        const bufferSize = this.get('bufferSize') + 200;\n        this.set('bufferSize', bufferSize);\n      }\n\n      const rows = this.get('vehicleEventsTable.rows.content');\n      const sliderIndex = this.get('sliderIndex');\n      if (Ember.isEmpty(rows) || Ember.isNone(sliderIndex)) return;\n      const currentRow = rows[sliderIndex];\n      const previousRow = rows.findBy('selected');\n\n      if (currentRow.get('isChecked')) {\n        if (previousRow) {\n          previousRow.set('selected', false);\n        }\n\n        currentRow.set('selected', true);\n        this.set('targetRow', currentRow); //this.set('rowSelection', currentRow);\n\n        const allRows = document.querySelector('.vehicle-event-table-body tbody').querySelectorAll('tr');\n        allRows.forEach(row => row.classList.remove('is-selected'));\n        allRows[sliderIndex].classList.add('is-selected');\n\n        if (sliderIndex > 1) {\n          allRows[sliderIndex - 1].scrollIntoView(true, {\n            behavior: 'smooth',\n            block: 'center'\n          });\n        }\n      }\n    }),\n    onWidgetStateChange: Ember.observer('widget.state', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableColumns');\n    }),\n\n    setTableRows(vehicleEvents) {\n      this.get('vehicleEventsTable').setRows(vehicleEvents);\n      this.notifyPropertyChange('activeEvents');\n    },\n\n    updateTableColumns() {\n      const state = this.get('widget.state') || {};\n      const config = this.get('config') || {};\n      const tableName = this.get('tableName') || null;\n      let columns = this.get('vehiclesTable.columns') || [];\n\n      if (tableName === 'vehicleEventsTable') {\n        columns = this.get('vehicleEventsTable.columns') || [];\n      }\n\n      const selectedRow = this.get('selectedRadiusVehicle');\n      let shouldResize = false;\n      let scrollLeft;\n      const body = this.$('.column-widget-body');\n\n      if (body) {\n        scrollLeft = this.$('.column-widget-body').scrollLeft();\n      }\n\n      if (columns) {\n        columns.forEach(column => {\n          const sortId = state.sortId || config.defaultSortId;\n\n          if (config.modelName === 'avlm-alert') {\n            config.defaultSortId = 'priorityId';\n          }\n\n          if (Ember.isPresent(sortId) && sortId === column.get('id') || config.modelName === 'avlm-alert' && Ember.isPresent(sortId) && sortId === 'priorityId' && column.get('id') === 'priority') {\n            let sortAsc;\n\n            if (Ember.isPresent(state.sortAsc)) {\n              sortAsc = state.sortAsc;\n            } else if (Ember.isPresent(config.defaultSortAsc)) {\n              sortAsc = config.defaultSortAsc;\n            } else {\n              sortAsc = true;\n            }\n\n            column.set('sorted', true);\n            column.set('ascending', sortAsc);\n          } else {\n            column.set('sorted', false);\n          }\n        });\n      }\n\n      const columnsHash = state.columns || {};\n      Object.entries(columnsHash).forEach(_ref => {\n        let [id, columnState] = _ref;\n        const column = columns.findBy('id', id);\n\n        if (!column) {\n          return;\n        }\n\n        if (Ember.isPresent(columnState.hidden)) {\n          column.set('hidden', columnState.hidden);\n          shouldResize = true;\n        }\n\n        if (Ember.isPresent(columnState.index)) {\n          // +/- 1 accounts for checkbox column\n          const oldIndex = columns.indexOf(column) - 1;\n\n          if (columnState.index !== oldIndex) {\n            const swapColumn = columns.objectAt(1 + columnState.index);\n            columns.replace(1 + columnState.index, 1, [column]);\n            columns.replace(1 + oldIndex, 1, [swapColumn]);\n            shouldResize = true;\n          }\n        }\n\n        const wasFiltered = column.get('isFiltered');\n        ['filterTypeId', 'filterValues', 'filterType'].forEach(prop => {\n          // allow null value to overwrite\n          if (!columnState.hasOwnProperty(prop)) {\n            return;\n          }\n\n          column.set(prop, columnState[prop]);\n        });\n\n        if (wasFiltered || column.get('isFiltered')) {\n          Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n        }\n\n        if (Ember.isPresent(columnState.width)) {\n          column.set('width', toPixels(columnState.width));\n          shouldResize = true;\n        }\n      });\n\n      if (shouldResize) {\n        // resize at end of _next_ loop so that all changes are applied\n        Ember.run.next(() => {\n          if (Ember.isPresent(scrollLeft)) {\n            // wait an additional loop before restoring scroll position\n            Ember.run.next(() => {\n              Ember.run.scheduleOnce('afterRender', this, 'setScrollLeft', scrollLeft);\n            });\n          }\n        });\n      }\n\n      if (!Ember.isEmpty(tableName)) {\n        const table = this.get(tableName) || null;\n        const resultModel = [];\n\n        if (table) {\n          const searchColumn = columns.filter(column => {\n            if (column.filterType && column.filterType !== null && column.filterValues && column.filterValues !== null) return column;\n          });\n          Ember.get(this, tableName === 'vehicleEventsTable' ? 'vehicleEvents' : 'radiusVehicles').map(item => {\n            if (Ember.isEmpty(searchColumn)) resultModel.push(item);else {\n              let bool = true;\n              searchColumn.forEach(column => {\n                if (column.filterType && column.filterType.exp && column.filterType.exp(item[column.valuePath], column.filterValues)) return;\n                bool = false;\n              });\n              if (bool) resultModel.push(item);\n            }\n          });\n\n          if (resultModel) {\n            const rows = [...new Set(resultModel)];\n\n            if (tableName === 'vehicleEventsTable') {\n              Ember.set(this, 'filteredEvents', rows.toArray());\n              this.notifyPropertyChange('filteredEvents');\n            }\n\n            table.setRowsSynced(rows.toArray());\n\n            if (tableName === 'vehiclesTable' && selectedRow && selectedRow.get('id')) {\n              const row = table.rows.content.findBy('id', selectedRow.get('id'));\n\n              if (row) {\n                row.set('selected', true);\n              }\n            }\n          }\n        }\n      }\n\n      this.set('eventTableFilterDone', this.vehicleEventsTable.rows.content);\n      this.set('vehicleTableFilterDone', this.vehiclesTable.rows.content);\n      Ember.run.debounce(this, 'refreshData', 250);\n    },\n\n    refreshData() {\n      if (this.get('isDestroyed')) return;\n      this.get('fetchDataTask').perform().then(() => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false);\n        }\n      }).catch(err => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false); // eslint-disable-next-line no-console\n\n          console.log('Error occoured when refreshing the Data' + err);\n        }\n\n        if (!(0, _emberConcurrency.didCancel)(err)) {\n          throw err;\n        }\n      });\n    },\n\n    fetchDataTask: (0, _emberConcurrency.task)(function* () {// const records = yield this.fetchDataQuery();\n      // this.set('records', records);\n    }).restartable(),\n\n    updateContent(activeEvents) {\n      const map = Ember.get(this, 'map');\n      let events = [];\n\n      if (activeEvents && activeEvents.lenght === 0) {\n        Ember.set(this, 'allEvents', null);\n      } else events = activeEvents;\n\n      if (!this.get('map')) return;\n\n      if (this.get('_polyline')) {\n        this.get('_polyline').remove(map.native);\n        this.set('_polyline', null);\n      }\n\n      if (this.get('_playedPolyline')) {\n        this.get('_playedPolyline').remove(map.native);\n        this.set('_playedPolyline', null);\n      }\n\n      if (this.get('_nextEventPolyline')) {\n        this.get('_nextEventPolyline').remove(map);\n        this.set('_nextEventPolyline', null);\n      }\n\n      if (this.get('_movingMarker')) {\n        map.native.removeLayer(this.get('_movingMarker'));\n        this.set('_movingMarker', null);\n      }\n\n      if (this.get('_eventsMarkers') && this.get('_eventsMarkers').length !== 0 && events.length === 0) {\n        map.eachLayer(layer => {\n          if (layer.myCustomID) {\n            layer.remove();\n          }\n        });\n        Ember.set(this, '_eventsMarkers', null);\n        Ember.set(this, 'allEvents', null);\n      }\n\n      if (this.get('_directionalMarkerLayer') && events.length === 0) {\n        map.eachLayer(layer => {\n          if (layer._leaflet_id === Ember.get(this, '_directionalMarkerLayer')._leaflet_id || !Ember.get(this, 'initialMapLayers').includes(layer._leaflet_id)) {\n            layer.remove();\n          }\n        });\n        Ember.set(this, '_directionalMarkerLayer', null);\n      }\n\n      const polyline = this.get('polyline');\n      const pbounds = this.get('pbounds');\n      const movingMarker = this.get('movingMarker');\n      const eventMarkers = Ember.get(this, '_eventsMarkers');\n      const directionalMarkers = Ember.get(this, '_directionalMarkerLayer');\n      this.set('_polyline', polyline);\n      this.set('_movingMarker', movingMarker);\n\n      if (polyline) {\n        polyline.addTo(map.native);\n      }\n\n      if (pbounds) {\n        map.native.fitBounds(pbounds);\n\n        const filteredArray = polyline._latlngs.filter(function (data) {\n          return data !== null;\n        });\n\n        polyline._latlngs = filteredArray;\n        polyline.addTo(map);\n      }\n\n      if (pbounds && pbounds.isValid()) {\n        map.fitBounds(pbounds);\n      }\n\n      if (movingMarker) {\n        const layer = movingMarker.addTo(map.native);\n        layer.on('lineUpdate', this.get('updateIndex').bind(this));\n        layer.on('end', this.get('playbackEnd').bind(this));\n      }\n\n      if (eventMarkers) {\n        eventMarkers.map(marker => {\n          marker.addTo(map);\n        });\n      }\n\n      if (directionalMarkers) {\n        map.addLayer(directionalMarkers);\n      }\n\n      this.set('sliderIndex', null);\n      this.set('elapsedTime', 0);\n    },\n\n    getIconInfo(eventType, state) {\n      let name = null;\n\n      if (state === 'pending') {\n        switch (eventType) {\n          case 'pick':\n            name = _iconPaths.default.vehicleEvents.pickPlanned;\n            break;\n\n          case 'wheelchair-pick':\n            name = _iconPaths.default.vehicleEvents.pickPlannedWheelchair;\n            break;\n\n          case 'wheelchair-drop':\n            name = _iconPaths.default.vehicleEvents.dropPlannedWheelchair;\n            break;\n\n          case 'offBreak':\n            name = _iconPaths.default.vehicleEvents.break;\n            break;\n\n          case 'onBreak':\n            name = _iconPaths.default.vehicleEvents.break;\n            break;\n\n          case 'drop':\n            name = _iconPaths.default.vehicleEvents.dropPlanned;\n            break;\n\n          case 'pullOut':\n          case 'pullIn':\n            name = _iconPaths.default.vehicleEvents.garagePlanned;\n            break;\n\n          case 'noShow':\n            name = _iconPaths.default.vehicleEvents.noshow;\n            break;\n\n          default:\n            break;\n        }\n      } else if (state === 'performed') {\n        switch (eventType) {\n          case 'pick':\n            name = _iconPaths.default.vehicleEvents.pickCompleted;\n            break;\n\n          case 'wheelchair-pick':\n            name = _iconPaths.default.vehicleEvents.pickCompleted;\n            break;\n\n          case 'wheelchair-drop':\n            name = _iconPaths.default.vehicleEvents.dropCompletedWheelchair;\n            break;\n\n          case 'onBreak':\n            name = _iconPaths.default.vehicleEvents.break;\n            break;\n\n          case 'offBreak':\n            name = _iconPaths.default.vehicleEvents.break;\n            break;\n\n          case 'drop':\n            name = _iconPaths.default.vehicleEvents.dropCompleted;\n            break;\n\n          case 'pullOut':\n          case 'pullIn':\n            name = _iconPaths.default.vehicleEvents.garageCompleted;\n            break;\n\n          case 'noShow':\n            name = _iconPaths.default.vehicleEvents.noshow;\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      return name;\n    },\n\n    updatePlayedPolyline(e) {\n      const map = this.get('map');\n      const activeEvents = this.get('activeEvents').filter(event => event.latlng !== null);\n      const allEvents = Ember.get(this, 'allEvents');\n\n      if (e.lineIndex > 0) {\n        const playedEvents = activeEvents.slice(0, e.lineIndex + 1);\n\n        if (playedEvents.length > 0) {\n          const playedPoints = [];\n          playedEvents.map(event => playedPoints.push(event.latlng));\n\n          if (playedEvents.length > 2) {\n            const point = window.L.interpolatePosition(playedEvents[playedEvents.length - 2], playedEvents[playedEvents.length - 1], e.currentDuration, e.elapsedTime); // Replace the last points\n\n            playedPoints[playedPoints.length - 1] = point;\n          }\n\n          const playedPolyline = window.L.polyline(playedPoints, {\n            color: '#555e63',\n            dashArray: '2 9',\n            opacity: 1,\n            weight: 5\n          });\n\n          if (this.get('_playedPolyline')) {\n            this.get('_playedPolyline').remove(map);\n          }\n\n          this.set('_playedPolyline', playedPolyline);\n\n          if (playedPolyline) {\n            playedPolyline.addTo(map);\n          }\n        }\n      }\n\n      if (activeEvents.length > 0 && e.lineIndex > 0 && allEvents) {\n        const filterEvents = allEvents.filter(event => event.timestamp <= activeEvents[e.lineIndex].timestamp && !event.isPerformed && event.type !== 'GPS Ping');\n\n        if (filterEvents.length !== 0) {\n          const timestamps = [];\n          filterEvents.map(stopData => {\n            timestamps.push(stopData.timestamp);\n          });\n          allEvents.map(event => {\n            if (timestamps.includes(event.timestamp)) {\n              event.isPerformed = true;\n            }\n          });\n          Ember.set(this, 'allEvents', allEvents);\n          this.addEventMarkerOnMap();\n        }\n      } // reset all events\n\n\n      if (e.lineIndex === 0 && allEvents) {\n        allEvents.map(event => {\n          event.isPerformed = false;\n          return event;\n        });\n        Ember.set(this, 'allEvents', allEvents);\n        this.addEventMarkerOnMap();\n      }\n    },\n\n    // Creates planned poly line till next pick or drop\n    updateEventPolyline(e) {\n      if (e.lineIndex >= 0) {\n        const activeEvents = this.get('activeEvents').filter(event => event.latlng !== null);\n        const map = this.get('map');\n        const nextEvent = Ember.get(this, 'nextEvent');\n        const events = activeEvents.slice(e.lineIndex);\n        const nextEventValue = events.findIndex(event => event.type === 'pick' || event.type === 'drop' || event.type === 'wheelchair-pick' || event.type === 'wheelchair-drop');\n\n        if (nextEventValue !== -1 && activeEvents[e.lineIndex].eventId >= nextEvent.eventId) {\n          const nextEvents = events.slice(0, nextEventValue + 1);\n\n          if (nextEvents.length > 0) {\n            const nextPoints = [];\n            nextEvents.map(event => nextPoints.push(event.latlng));\n\n            if (nextEvents.length > 2) {\n              const point = window.L.interpolatePosition(nextEvents[nextEvents.length - 2], nextEvents[nextEvents.length - 1], e.currentDuration, e.elapsedTime); // Replace the last points\n\n              nextPoints[nextPoints.length - 1] = point;\n            }\n\n            const nextEventPolyline = window.L.polyline(nextPoints, {\n              color: '#3697c7',\n              dashArray: '2 9',\n              opacity: 1,\n              weight: 5\n            });\n\n            if (nextEventPolyline) {\n              nextEventPolyline.addTo(map.native);\n            }\n\n            if (Ember.get(this, '_nextEventPolyline')) {\n              Ember.get(this, '_nextEventPolyline').remove(map.native);\n            }\n\n            Ember.set(this, '_nextEventPolyline', nextEventPolyline); // set next event item\n\n            Ember.set(this, 'nextEvent', events[nextEventValue]);\n          } else if (activeEvents.length - 2 < e.lineIndex) {\n            Ember.get(this, '_nextEventPolyline').remove(map.native);\n          }\n        }\n      }\n    },\n\n    updateIndex(e) {\n      // If slider is dragged, stop updating sliderIndex\n      if (!this.get('isSlideMoving')) {\n        // lineIndex is index for duration i to i+1\n        if (this.get('sliderIndex') !== e.lineIndex) {\n          this.set('sliderIndex', e.lineIndex);\n        }\n\n        if (e.elapsedTime) {\n          this.set('elapsedTime', e.elapsedTime);\n        }\n\n        this.updateEventPolyline(e);\n        this.updatePlayedPolyline(e);\n      }\n    },\n\n    // Update events and planned polyline on backword button\n    updateEventsandPlannedPolyline(e) {\n      const allEvents = Ember.get(this, 'allEvents');\n      const activeEvents = Ember.get(this, 'activeEvents');\n      const map = this.get('map');\n      const events = activeEvents.slice(e.lineIndex);\n      const nextEventValue = events.findIndex(event => event.type === 'pick' || event.type === 'drop' || event.type === 'wheelchair-pick' || event.type === 'wheelchair-drop');\n      const filterEvents = allEvents.filter(event => event.timestamp > activeEvents[e].timestamp && event.isPerformed);\n\n      if (filterEvents.length !== 0) {\n        const timestamps = [];\n        filterEvents.map(stopData => {\n          timestamps.push(stopData.timestamp);\n        });\n        allEvents.map(event => {\n          if (timestamps.includes(event.timestamp)) {\n            event.isPerformed = false;\n          }\n        });\n        Ember.set(this, 'allEvents', allEvents);\n        this.addEventMarkerOnMap();\n      }\n\n      if (nextEventValue !== -1) {\n        const nextEvents = events.slice(0, nextEventValue + 1);\n\n        if (nextEvents.length > 0) {\n          const nextPoints = [];\n          nextEvents.map(event => nextPoints.push(event.latlng));\n\n          if (nextEvents.length > 2) {\n            const point = window.L.interpolatePosition(nextEvents[nextEvents.length - 2], nextEvents[nextEvents.length - 1], e.currentDuration, e.elapsedTime); // Replace the last points\n\n            nextPoints[nextPoints.length - 1] = point;\n          }\n\n          const nextEventPolyline = window.L.polyline(nextPoints, {\n            color: '#3697c7',\n            dashArray: '2 9',\n            opacity: 1,\n            weight: 5\n          });\n\n          if (nextEventPolyline) {\n            nextEventPolyline.addTo(map);\n          }\n\n          if (Ember.get(this, '_nextEventPolyline')) {\n            Ember.get(this, '_nextEventPolyline').remove(map);\n          }\n\n          Ember.set(this, '_nextEventPolyline', nextEventPolyline);\n          Ember.set(this, 'nextEvent', events[nextEventValue]);\n        }\n      }\n    },\n\n    playbackEnd() {\n      this.set('sliderIndex', this.get('sliderIndexMax'));\n      this.notifyPropertyChange('isRunning');\n    },\n\n    updateMapView() {},\n\n    restoreSearchCenter() {\n      const address = this.get('selectedAddress');\n\n      if (address) {\n        this.setSearchCenter(window.L.latLng(address.get('lat'), address.get('lng')));\n      }\n    },\n\n    // overwirte mapwidgets\n    updateMap() {\n      // don't try to update until map is initialized\n      if (!this.get('map')) return;\n      const map = this.get('map');\n      map.native.on('zoom', this._mapZoomMethodHandler);\n    },\n\n    reCenterMapView() {\n      const map = this.get('map');\n      const pbounds = this.get('pbounds');\n      let zoom = map.getZoom(); // get user's current zoom level\n\n      if (!map) return;\n\n      if (pbounds) {\n        map.native.fitBounds(pbounds);\n      } else {\n        const centerLat = this.get('centerLat');\n        const centerLng = this.get('centerLng');\n        zoom = zoom >= this.get('zoom') ? this.get('zoom') : zoom;\n        map.move(centerLat, centerLng, zoom);\n      }\n    },\n\n    setSearchCenter(coord) {\n      if (this.get('searchCenter')) {\n        this.get('searchCenter').remove();\n      }\n\n      this.set('searchCenter', this.markerPinRegion(coord));\n      this.set('markerLocation', { ...coord,\n        lon: coord.lng\n      });\n    },\n\n    searchCenterReset() {\n      if (this.get('searchCenter')) {\n        this.get('searchCenter').remove();\n      }\n\n      this.setProperties({\n        searchCenter: null\n      });\n    },\n\n    updateLabels() {\n      const layers = Ember.get(this, 'layers');\n      const activeTooltipLabels = [];\n      const activeMarkersArray = [];\n      let displayAlways = false;\n\n      if (this.get('_eventsMarkers') && this.get('_eventsMarkers').length !== 0) {\n        Ember.get(this, 'map').eachLayer(layer => {\n          if (layer.myCustomID) {\n            layer.remove();\n          }\n        });\n        Ember.set(this, '_eventsMarkers', null);\n      }\n\n      if (layers) {\n        layers.map(data => {\n          if (data && data.id === 'vehicle-events') {\n            const vehicleEventLegendsData = data.labels;\n            const vehicleEventLabelsData = data.types;\n            vehicleEventLegendsData.map(item => {\n              if (item && item.isVisible) {\n                activeTooltipLabels.push(item.id);\n              }\n            });\n            vehicleEventLabelsData.map(item => {\n              if (item && item.isVisible) {\n                activeMarkersArray.push(item.filterValue);\n              }\n            });\n\n            if (data.selectedDisplay === 'Always') {\n              displayAlways = true;\n            }\n\n            if (this.get('movingMarker') && displayAlways) {\n              setTimeout(function () {\n                if (this.get('targetRow')) {\n                  const currentRow = this.get('targetRow.content');\n                  const formattedEventType = 'Vehicle <br/>';\n                  let label = formattedEventType.bold(); // NOTE: DON'T DELETE SPPED CODE\n                  // speed will be implemented later therefore commented the code, not removed the code.\n                  // let speed = 'N/A';\n                  // if (currentRow.speed) {\n                  //   speed = currentRow.speed;\n                  // }\n                  // if (currentRow.speed === 0) {\n                  //   speed = 0;\n                  // }\n\n                  let routeName = 'N/A';\n\n                  if (currentRow.routeName) {\n                    routeName = currentRow.routeName;\n                  }\n\n                  label = label + 'Vehicle ID: ' + currentRow.vehicleId + '<br/>'; // speed will be implemented later therefore commented the code, not removed the code.\n                  // label = label + 'Vehicle Speed: ' + speed + '<br/>';\n\n                  label = label + 'Route: ' + routeName + '<br/>';\n                  this.get('movingMarker').unbindPopup();\n                  this.get('movingMarker').bindPopup(label, {\n                    closeButton: true\n                  }).openPopup();\n                }\n              }.bind(this), 500);\n            }\n\n            if (this.get('movingMarker') && displayAlways === false) {\n              setTimeout(() => {\n                this.get('movingMarker').closePopup();\n              }, 500);\n            }\n\n            Ember.get(this, 'mapService').setDisplayMapIconLabelAllTime(data.id, displayAlways);\n          }\n        });\n        Ember.set(this, 'displayAlways', displayAlways);\n        Ember.set(this, 'activeTooltipLabels', activeTooltipLabels);\n        Ember.set(this, 'activeMarkersArray', activeMarkersArray);\n        this.addEventMarkerOnMap();\n      }\n    },\n\n    onClick(item) {\n      const formattedEventType = item.type === 'offBreak' || item.type === 'onBreak' ? 'Break <br/>' : item.type.charAt(0).toUpperCase() + item.type.slice(1) + '<br/>';\n      let label = formattedEventType.bold();\n      const activeTooltipLabels = Ember.get(this, 'activeTooltipLabels');\n      activeTooltipLabels.map(val => {\n        switch (val) {\n          case 'eventType':\n            label = label + 'Event Type: ' + item.eventType + '<br/>';\n            break;\n\n          case 'timestamp':\n            label = label + 'Date: ' + item.timestamp.toISOString().split('T')[0] + '<br/>';\n            break;\n\n          case 'stopType':\n            label = label + 'Stop Type: ' + item.stopType + '<br/>';\n            break;\n\n          case 'time':\n            label = label + 'Time: ' + item.time + '<br/>';\n            break;\n\n          case 'vehicleId':\n            label = label + 'Vehicle ID: ' + item.vehicleId + '<br/>';\n            break;\n\n          case 'passengerId':\n            label = label + 'Passenger ID: ' + item.passengerId + '<br/>';\n            break;\n\n          case 'lat':\n            label = label + 'Latitude: ' + item.lat + '<br/>';\n            break;\n\n          case 'lng':\n            label = label + 'Longitude: ' + item.lng + '<br/>';\n            break;\n\n          case 'speed':\n            label = label + 'Speed: ' + item.speed + '<br/>';\n            break;\n\n          case 'heading':\n            label = label + 'Heading: ' + item.heading + '<br/>';\n            break;\n\n          case 'passengerFName':\n            label = label + 'Passenger First Name: ' + item.passengerFName + '<br/>';\n            break;\n\n          case 'passengerLName':\n            label = label + 'Passenger Last Name: ' + item.passengerLName + '<br/>';\n            break;\n\n          case 'odo':\n            label = label + 'Odometer: ' + item.odo + '<br/>';\n            break;\n\n          case 'route':\n            label = label + 'Route: ' + item.routeName + '<br/>';\n            break;\n\n          case 'stopAddress':\n            label = label + 'Address: ' + item.stopAddress + '<br/>';\n            break;\n\n          case 'trip':\n            label = label + 'Trip: ' + item.tripId + '<br/>';\n            break;\n\n          default:\n            break;\n        }\n      });\n      return label;\n    },\n\n    addEventMarkerOnMap() {\n      const allEvents = Ember.get(this, 'allEvents');\n      const map = Ember.get(this, 'map');\n      const displayAlways = Ember.get(this, 'displayAlways'); // const markersGroup = tomtom.L.markerClusterGroup();\n\n      if (allEvents && allEvents.length !== 0) {\n        const eventMarkers = [];\n        let customMarkerId = null;\n        allEvents.map(stopData => {\n          if (stopData && stopData.lat && stopData.lng && Ember.get(this, 'activeMarkersArray').includes(stopData.type)) {\n            customMarkerId = stopData.eventId;\n            const iconUrl = this.getIconInfo(stopData.type, stopData.isPerformed ? 'performed' : 'pending');\n\n            if (iconUrl !== null) {\n              const pintPointIcon = {\n                icon: window.L.icon({\n                  iconUrl: iconUrl,\n                  iconSize: [20, 20],\n                  iconAnchor: [11.5, 11.5]\n                })\n              };\n              const markers = window.L.marker([stopData.lat, stopData.lng], pintPointIcon);\n              markers.myCustomID = customMarkerId;\n\n              if (Ember.get(this, '_eventsMarkers')) {\n                map.eachLayer(layer => {\n                  if (layer.myCustomID) {\n                    layer.remove();\n                  }\n                });\n                Ember.set(this, '_eventsMarkers', null);\n              } // map.addLayer(markers);\n\n\n              markers.addTo(map);\n\n              if (!displayAlways) {\n                markers.on('click', () => {\n                  const labels = this.onClick(stopData);\n                  markers.unbindPopup();\n                  markers.bindPopup(labels, {\n                    closeButton: true\n                  }).openPopup();\n                });\n              } else {\n                const labels = this.onClick(stopData);\n                markers.unbindPopup();\n                markers.bindPopup(labels, {\n                  closeButton: true,\n                  autoClose: false\n                }).openPopup();\n              }\n\n              eventMarkers.push(markers);\n            }\n          }\n        }); // if (displayAlways) map.addLayer(markersGroup);\n\n        Ember.set(this, '_eventsMarkers', eventMarkers);\n      }\n    },\n\n    canSearch: Ember.computed('activeTabModeId', 'selectedVehicle', 'selectedProvider', 'selectedAddress', 'selectedRadius', 'selectedDateTimeRage.{date,starttime,endtime}', function () {\n      const selectedVehicleId = this.get('selectedVehicle.id');\n      const selectedProvider = this.get('selectedProvider.name');\n      const selectedAddress = this.get('selectedAddress');\n      const selectedRadius = this.get('selectedRadius');\n      const selectedStarttime = this.get('selectedDateTimeRage.starttime');\n      const selectedendtime = this.get('selectedDateTimeRage.endtime');\n      const activeTabModeId = this.get('activeTabModeId');\n\n      if (activeTabModeId === 'byVehicle' && Ember.isNone(selectedProvider)) {\n        return false;\n      }\n\n      if (activeTabModeId === 'byVehicle' && Ember.isNone(selectedVehicleId)) {\n        return false;\n      }\n\n      if (activeTabModeId === 'byLocation' && (Ember.isNone(selectedAddress) || Ember.isNone(selectedRadius))) {\n        return false;\n      }\n\n      if (selectedStarttime && selectedendtime && (0, _moment.default)(selectedStarttime) < (0, _moment.default)(selectedendtime)) {\n        return true;\n      }\n\n      return false;\n    }),\n    searchByLocation: Ember.computed('activeTabModeId', function () {\n      const activeTabModeId = this.get('activeTabModeId');\n      if (activeTabModeId === 'byLocation') return true;\n      return false;\n    }),\n    canPlay: Ember.computed('activeEvents', function () {\n      const activeEvents = this.get('activeEvents');\n      if (activeEvents.length > 1) return true;\n      return false;\n    }),\n\n    createButtonMenuOptions() {\n      this.set('buttonActionOptions', [{\n        id: 'print',\n        name: 'Download',\n        action: param => {\n          this.onDownloadClick(param);\n        }\n      }]);\n    },\n\n    onDownloadClick(tableName) {\n      const table = this.get(tableName);\n      const columns = table.get('columns') || [];\n      const rows = table.get('rows') || [];\n      const fields = columns.reduce((arr, column) => {\n        const id = column.get('id');\n\n        if (['checkbox', 'spacer', 'radio'].includes(id)) {\n          return arr;\n        }\n\n        const label = column.get('label');\n        arr.push(label);\n        return arr;\n      }, []);\n      const data = rows.map(row => {\n        return columns.reduce((arr, column) => {\n          const id = column.get('id');\n\n          if (['checkbox', 'spacer', 'radio'].includes(id)) {\n            return arr;\n          }\n\n          const valuePath = column.get('valuePath');\n          const value = row.get(valuePath);\n          arr.push(value);\n          return arr;\n        }, []);\n      });\n\n      const csv = _papaparse.default.unparse({\n        fields,\n        data\n      }, {\n        quotes: true,\n        quoteChar: '\"',\n        escapeChar: '\"'\n      });\n\n      const link = document.createElement('a');\n      const timestamp = (0, _moment.default)().format('YYYY-MM-DD_HH-MM-SS');\n      const {\n        title\n      } = this.get('config');\n      const filename = `${timestamp}_${title}.csv`;\n      const blob = new Blob([csv], {\n        type: 'text/csv;charset=utf-8;'\n      });\n      const url = URL.createObjectURL(blob);\n      link.setAttribute('href', url);\n      link.setAttribute('download', filename);\n      link.style.visibility = 'hidden';\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n    },\n\n    filterTableData(searchText) {\n      const tableName = this.get('activeSearchTable');\n\n      if (!Ember.isEmpty(tableName)) {\n        const table = this.get(tableName);\n        const tableColumns = tableName === 'vehicleEventsTable' ? Ember.get(this, 'vehicleEventSearchableColumns') : Ember.get(this, 'vehicleSearchableColumns');\n        const search = searchText !== null ? searchText.trim().toLowerCase().split('=') : [];\n        const resultModel = [];\n        Ember.get(this, tableName === 'vehicleEventsTable' ? 'vehicleEvents' : 'radiusVehicles').map(item => {\n          if (Ember.isEmpty(searchText)) resultModel.push(item);\n\n          if (search && search.length > 1 && search[1] && search[1] !== '' && tableColumns.join(',').toLowerCase().includes(search[0].trim().toLowerCase().replace(' ', ''))) {\n            const colm = tableColumns.map(column => column.toLowerCase());\n            const index = colm.indexOf(search[0].trim().toLowerCase().replace(' ', ''));\n            if (index !== -1 && item[tableColumns[index]] && item[tableColumns[index]].toString().toLowerCase().indexOf(search[1].trim().toLowerCase()) !== -1) resultModel.push(item);\n          } else if (search.length === 1) tableColumns.filter(column => {\n            if (item[column] && item[column].toString().toLowerCase().indexOf(searchText.toLowerCase()) !== -1) {\n              resultModel.push(item);\n              return;\n            }\n          });\n        });\n\n        if (resultModel) {\n          const rows = [...new Set(resultModel)];\n\n          if (tableName === 'vehicleEventsTable') {\n            Ember.set(this, 'filteredEvents', rows.toArray());\n            this.notifyPropertyChange('filteredEvents');\n          }\n\n          table.setRowsSynced(rows.toArray());\n\n          if (this.get('activeSearchTable') === 'vehicleEventsTable') {\n            this.set('eventTableFilterDone', rows.toArray());\n          }\n\n          if (this.get('activeSearchTable') === 'vehiclesTable') {\n            this.set('vehicleTableFilterDone', rows.toArray());\n          }\n        }\n      }\n    },\n\n    actions: {\n      onDownloadClose(action, dropdown, param) {\n        dropdown.actions.close();\n        if (action.action) action.action(param);\n      },\n\n      onProviderOptionSelect(option) {\n        Ember.set(this, 'selectedProvider', option);\n        this.get('fetchVehiclesTask').perform();\n        this.get('fetchRoutesTask').perform();\n        this.get('fetchDriversTask').perform();\n        Ember.set(this, 'selectedRoute', null);\n        Ember.set(this, 'selectedVehicle', null);\n      },\n\n      onRouteOptionsSelect(option) {\n        Ember.set(this, 'selectedRoute', option);\n      },\n\n      onDriverOptionsSelect(option) {\n        Ember.set(this, 'selectedDriver', option);\n      },\n\n      onVehicleOptionsSelect(option) {\n        Ember.set(this, 'selectedVehicle', option);\n      },\n\n      onVehicleKeydown(dropdown, e) {\n        if (e.keyCode !== 13) return;\n        const vehicleId = e.target.value;\n\n        if (vehicleId.length > 0 && dropdown.results.length === 0) {\n          const dummyOption = {\n            id: vehicleId,\n            model: null\n          };\n          this.get('dummyVehicleOptions').pushObject(dummyOption);\n          this.notifyPropertyChange('dummyVehicleOptions');\n          this.set('selectedVehicle', dummyOption);\n        }\n      },\n\n      onRouteKeydown(dropdown, e) {\n        if (e.keyCode !== 13) return;\n        const routeId = e.target.value;\n\n        if (routeId.length > 0 && dropdown.results.length === 0) {\n          const dummyOption = {\n            id: routeId,\n            model: null\n          };\n          this.get('dummyRouteOptions').pushObject(dummyOption);\n          this.notifyPropertyChange('dummyRouteOptions');\n          this.set('selectedRoute', dummyOption);\n        }\n      },\n\n      onRadiusOptionsSelect(option) {\n        this.set('selectedRadius', option);\n        this.onMarkerRadiusChanged(option.value);\n      },\n\n      onValueChange(valuePath, value) {\n        this.set(valuePath, value);\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n\n        if (valuePath === 'selectedDateTimeRage.starttime') {\n          this.set('selectedDateTimeRage.startforendtime', momentTime.toISOString());\n        }\n\n        if (valuePath === 'selectedDateTimeRage.date') {\n          this.set('selectedDateTimeRage.startime', null);\n          this.set('selectedDateTimeRage.endtime', null);\n          this.set('selectedDateTimeRage.startforendtime', momentTime.startOf('day').toISOString());\n          this.set('selectedDateTimeRage.startofday', momentTime.startOf('day').toISOString());\n          this.set('selectedDateTimeRage.endofday', momentTime.endOf('day').toISOString());\n        }\n      },\n\n      onClearButtonClick() {\n        this.clearAll();\n      },\n\n      onSearchButtonClick() {\n        this.set('totolTimeInSeconds', null);\n        this.set('durationInSeconds', null);\n        this.set('animSpeed', 1);\n        Ember.set(this, 'animDisable', false);\n        this.searchCenterReset();\n        this.set('pbounds', null);\n        this.set('selectedRadiusVehicle', null);\n        Ember.set(this, 'filteredEvents', null);\n        this.set('tooLargeData', '');\n        this.notifyPropertyChange('filteredEvents');\n        if (!Ember.isEmpty(this.get('vehicleEvents'))) Ember.set(this, 'vehicleEvents', []);\n        if (!Ember.isEmpty(this.get('radiusVehicles'))) Ember.set(this, 'radiusVehicles', []);\n        this.notifyPropertyChange('vehicleEvents');\n        this.notifyPropertyChange('radiusVehicles');\n\n        if (this.get('activeTabModeId') === 'byVehicle') {\n          this.get('fetchEventsTask').perform();\n        } else {\n          this.get('fetchRadiusVehiclesTask').perform();\n        }\n      },\n\n      // eslint-disable-next-line consistent-this\n      onVehicleRowClick(row, self) {\n        const rows = self.get('vehiclesTable.rows.content');\n        const selectedRow = rows.findBy('selected');\n        const vehicleIcon = window.L.icon({\n          iconUrl: _iconPaths.default.vehicles.vehicle,\n          iconSize: [23, 23],\n          iconAnchor: [11.5, 11.5]\n        });\n        const selectedVehicleIcon = window.L.icon({\n          iconUrl: _iconPaths.default.vehicles.vehicle,\n          iconSize: [23, 23],\n          iconAnchor: [11.5, 11.5],\n          shadowUrl: _iconPaths.default.maps.highlight,\n          shadowSize: [27, 27],\n          shadowAnchor: [13.5, 13.5]\n        });\n        if (selectedRow && row.get('id') === selectedRow.get('id')) return;\n\n        if (!Ember.isEmpty(self.get('vehicleEvents'))) {\n          Ember.set(self, 'vehicleEvents', []);\n          Ember.set(self, 'filteredEvents', null);\n          self.notifyPropertyChange('vehicleEvents');\n        }\n\n        rows.forEach(_row => {\n          if (_row.get('id') === row.get('id')) {\n            _row.content.marker.native.setIcon(selectedVehicleIcon);\n          } else {\n            _row.content.marker.native.setIcon(vehicleIcon);\n          }\n        });\n        self.set('selectedRadiusVehicle', row.content);\n        self.notifyPropertyChange('selectedRadiusVehicle');\n        self.get('fetchEventsTask').perform();\n      },\n\n      onToggleCheckbox() {\n        this.notifyPropertyChange('activeEvents', 'sliderIndexMax');\n      },\n\n      // eslint-disable-next-line consistent-this\n      onEventRowClick(row, self) {\n        const rows = self.get('vehicleEventsTable.rows.content');\n        const activeEvents = self.get('activeEvents');\n        let index = 0;\n\n        for (const _row of rows) {\n          if (_row === row) {\n            break;\n          }\n\n          if (_row.get('isChecked')) {\n            index++;\n          }\n        }\n\n        if (self.get('_movingMarker')) {\n          if (index === activeEvents.length - 1) {\n            self.get('movingMarker').stop();\n          } else {\n            self.get('_movingMarker').setTo(index);\n          }\n\n          self.set('sliderIndex', index);\n          self.set('elapsedTime', 0);\n        }\n      },\n\n      onEventColumnClick() {},\n\n      setInlineRowMenu(dropdown) {\n        Ember.set(this, 'inlineRowMenu', dropdown);\n      },\n\n      onSingleRowAction(action) {\n        const model = Ember.get(this, 'lastRowClicked');\n        this.inlineRowMenu.actions.close();\n\n        if (action.action) {\n          action.action(model);\n        }\n      },\n\n      onRowRightClick(row, event) {\n        Ember.set(this, 'inlineRowMenuPosition', () => {\n          return {\n            style: {\n              top: event.clientY,\n              left: event.clientX\n            }\n          };\n        });\n        Ember.set(this, 'lastRowClicked', Ember.get(row, 'content'));\n        this.inlineRowMenu.actions.open();\n      },\n\n      onCheckAll() {\n        const vehicleEvents = this.get('vehicleEvents');\n        vehicleEvents.forEach(event => {\n          event.set('isChecked', true);\n        });\n        this.notifyPropertyChange('activeEvents');\n      },\n\n      onUncheckAll() {\n        const vehicleEvents = this.get('vehicleEvents');\n        vehicleEvents.forEach(event => {\n          event.set('isChecked', false);\n        });\n        this.notifyPropertyChange('activeEvents');\n      },\n\n      onLocationButtonClick() {\n        this.set('isSearchingLocation', !this.get('isSearchingLocation'));\n\n        if (this.get('isSearchingLocation')) {\n          Ember.$('html,body,.tomtom-map').addClass('pinpoint-cursor');\n          this.get('map').on('click', e => {\n            this.setSearchCenter(e.latlng);\n            this.set('isSearchingLocation', false);\n            Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n            this.get('map').off('click');\n          });\n        } else {\n          Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n          this.get('map').off('click');\n        }\n      },\n\n      //Implemented the pop up during search mode switching and clearing/resetting the fields\n      selectCurrentModeTab(mode) {\n        if (this.get('isVehicleSearchEnabled')) {\n          this.toggleProperty('isVehicleSearchEnabled');\n        }\n\n        if (this.get('isVehicleEventSearchEnabled')) {\n          this.toggleProperty('isVehicleEventSearchEnabled');\n        }\n\n        this.set('activeTabModeId', mode);\n        this.clearAll();\n        Ember.set(this, 'switching', null);\n      },\n\n      selectCurrentModeTabSearching(mode) {\n        if (mode === 'byVehicle') {\n          Ember.$('html,body,.tomtom-map').removeClass('pinpoint-cursor');\n          this.get('map').off('click');\n          this.set('isSearchingLocation');\n        }\n\n        const currentTab = Ember.get(this, 'activeTabModeId');\n        if (currentTab !== mode) Ember.set(this, 'switching', 'searchLocation');\n      },\n\n      cancel() {\n        Ember.set(this, 'switching', '');\n        Ember.set(this, 'isReconciled', false);\n      },\n\n      onPlayButtonClick() {\n        const currentMarker = this.get('_movingMarker.native');\n\n        if (currentMarker) {\n          if (currentMarker.isEnded()) {\n            this.set('sliderIndex', null);\n            this.set('elapsedTime', 0);\n            this.toggleProperty('animDisable');\n          }\n\n          if (currentMarker.isRunning()) {\n            currentMarker.pause();\n            this.toggleProperty('animDisable');\n          } else {\n            // Set speed everytime to avoid new marker not get speed setting.\n            currentMarker.setSpeed(this.get('animSpeed'));\n            currentMarker.start();\n\n            if (Ember.get(this, 'animDisable')) {\n              this.toggleProperty('animDisable');\n            }\n          }\n\n          this.notifyPropertyChange('isRunning');\n        }\n      },\n\n      onForwardButtonClick() {\n        const sliderIndex = this.get('sliderIndex');\n\n        if (this.get('_movingMarker')) {\n          const forwardIndex = Math.min(sliderIndex + 10, this.get('activeEvents').length - 2);\n          this.get('_movingMarker.native').setTo(forwardIndex);\n          this.set('sliderIndex', forwardIndex);\n          this.set('elapsedTime', 0);\n        }\n      },\n\n      onBackwardButtonClick() {\n        const sliderIndex = this.get('sliderIndex');\n\n        if (this.get('_movingMarker')) {\n          const backwardIndex = Math.max(sliderIndex - 10, 0);\n          this.get('_movingMarker.native').setTo(backwardIndex);\n          this.set('sliderIndex', backwardIndex);\n          this.set('elapsedTime', 0);\n          this.updateEventsandPlannedPolyline(backwardIndex);\n        }\n      },\n\n      onSpeedButtonClick() {\n        if (this.get('animSpeed') >= 8) {\n          this.set('animSpeed', 1);\n        } else {\n          this.set('animSpeed', this.get('animSpeed') * 2);\n        }\n\n        if (this.get('_movingMarker')) {\n          this.get('_movingMarker.native').setSpeed(this.get('animSpeed'));\n        }\n\n        this.set('sliderIndex', this.get('sliderIndex'));\n      },\n\n      onSliderAction(e) {\n        if (e === 'sliderStart') {\n          this.set('isSlideMoving', true);\n        } else if (e === 'sliderStop') {\n          this.set('isSlideMoving', false);\n        }\n      },\n\n      onSliderValueChange(value) {\n        const marker = this.get('_movingMarker');\n\n        if (marker) {\n          if (marker.native.isEnded() || !marker.native.isStarted()) {\n            // If animate done, just restart it.\n            marker.native.start();\n            marker.native.pause();\n          }\n\n          marker.native.setTo(value);\n          this.set('sliderIndex', value);\n        }\n      },\n\n      onFilterButtonClick() {\n        this.get('workspace').pushState('filterMapWidget', {\n          displayName: 'Map Layers',\n          action: this.actions.mapWidgetHandler.bind(this)\n        }, {\n          replaceSelf: true\n        });\n      },\n\n      mapWidgetHandler() {\n        this.updateLabels();\n      },\n\n      onTableSearchClick(param) {\n        this.send('onSearchTextChange', null);\n        this.toggleProperty(param === 'vehicleEventsTable' ? 'isVehicleEventSearchEnabled' : 'isVehicleSearchEnabled');\n        this.set('activeSearchTable', param);\n      },\n\n      onSearchTextChange(searchText) {\n        Ember.run.debounce(this, 'filterTableData', searchText, 300);\n      },\n\n      onTableColumnFilterButtonClick(tableName) {\n        const columns = [];\n        const workspace = this.get('workspace');\n        const widget = this.get('widget');\n        const config = this.get('config');\n        let tableColumns = [];\n\n        if (tableName === 'vehicleEventsTable') {\n          tableColumns = this.get('vehicleEventsTable.columns') || [];\n          Ember.set(this, 'tableName', 'vehicleEventsTable');\n        } else {\n          tableColumns = this.get('vehiclesTable.columns') || [];\n          Ember.set(this, 'tableName', 'vehiclesTable');\n        }\n\n        const displayName = `${config.title} Filters`; // close sidebar if _this_ widget's filter is currently open\n        // @TODO: define and use unique keys rather than `displayName` for this\n\n        if (displayName === workspace.get('topStateDisplayName')) {\n          workspace.popState();\n          return;\n        }\n\n        let topState = workspace.get('topState');\n\n        while (topState === 'playbackFilterColumnWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        tableColumns.forEach(column => {\n          column.set('filterTypes', config.filters[column.dataType] || []);\n          const columnConfig = column.config;\n\n          if (columnConfig) {\n            if (!columnConfig.unAvailable) {\n              columns.push(column);\n            }\n          } else if (column && column.id) {\n            columns.push(column);\n          }\n        });\n        workspace.pushState('playbackFilterColumnWidget', {\n          columns,\n          widget,\n          displayName\n        });\n      },\n\n      onRemoveSearchClick(param) {\n        this.toggleProperty(param === 'vehicleEventsTable' ? 'isVehicleEventSearchEnabled' : 'isVehicleSearchEnabled');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/playback-widget',\n    rowComponent: 'table/rows/action-row',\n    title: 'Playback',\n    filters: {\n      text: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase() === values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }],\n      uuid: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase() === values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase() !== values[0].toString().trim().toLowerCase();\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }],\n      number: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          return parseFloat(item) === parseFloat(values[0]);\n        }\n      }, {\n        id: 'notEqualTo',\n        label: '!=',\n        arity: 1,\n        exp: function (item, values) {\n          return parseFloat(item) !== parseFloat(values[0]);\n        }\n      }, {\n        id: 'greaterThan',\n        label: '>',\n        exp: function (item, values) {\n          return parseFloat(item) > parseFloat(values[0]);\n        }\n      }, {\n        id: 'lessThan',\n        label: '<',\n        arity: 1,\n        exp: function (item, values) {\n          return parseFloat(item) < parseFloat(values[0]);\n        }\n      }, {\n        id: 'between',\n        label: 'Between',\n        arity: 2,\n        exp: function (item, values) {\n          return values[1] > values[0] && item <= values[1] && item >= values[0];\n        }\n      }, {\n        id: 'contains',\n        label: 'Contains',\n        arity: 1,\n        exp: function (item, values) {\n          return item.toString().trim().toLowerCase().indexOf(values[0].toString().trim().toLowerCase()) !== -1;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }],\n      time: [{\n        id: 'equalTo',\n        label: '=',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid()) return item === values[0];\n          return false;\n        }\n      }, {\n        id: 'after',\n        label: 'After',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid()) return item > values[0];\n          return false;\n        }\n      }, {\n        id: 'before',\n        label: 'Before',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid()) return item < values[0];\n          return false;\n        }\n      }, {\n        id: 'atOrBefore',\n        label: 'At or Before',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid()) return item <= values[0];\n          return false;\n        }\n      }, {\n        id: 'atOrAfter',\n        label: 'At or After',\n        arity: 1,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid()) return item >= values[0];\n          return false;\n        }\n      }, {\n        id: 'between',\n        label: 'Between',\n        arity: 2,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid() && (0, _moment.default)(values[1], 'hh:mm A', true).isValid()) return values[1] > values[0] && item <= values[1] && item >= values[0];\n          return false;\n        }\n      }, {\n        id: 'strictlyBetween',\n        label: 'Strictly Between',\n        arity: 2,\n        exp: function (item, values) {\n          if ((0, _moment.default)(item, 'hh:mm A', true).isValid() && (0, _moment.default)(values[0], 'hh:mm A', true).isValid() && (0, _moment.default)(values[1], 'hh:mm A', true).isValid()) return values[1] > values[0] && item < values[1] && item > values[0];\n          return false;\n        }\n      }, {\n        id: 'empty',\n        label: 'Empty',\n        arity: 1,\n        exp: function (item) {\n          if (item && item !== null) return false;\n          return true;\n        }\n      }]\n    },\n    vehiclesTableColumns: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'vehicleId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'driverId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Driver Name',\n      valuePath: 'driverName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'driverName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'OTP',\n      valuePath: 'otp',\n      dataType: 'text',\n      resizable: true,\n      searchable: true,\n      minResizeWidth: 50,\n      id: 'otp',\n      component: 'iq-widgets/playback-widget/table-header'\n    }],\n    vehicleEventsTableColumns: [{\n      label: 'Time',\n      valuePath: 'time',\n      dataType: 'time',\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'time',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Route',\n      valuePath: 'routeName',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'routeId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'vehicleId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Latitude',\n      valuePath: 'lat',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'lat',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Longitude',\n      valuePath: 'lng',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      searchable: true,\n      id: 'lng',\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      dataType: 'uuid',\n      resizable: true,\n      minResizeWidth: 30,\n      id: 'passengerId',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger First Name',\n      valuePath: 'passengerFName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'passengerFName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLName',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'passengerLName',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Stop Address',\n      valuePath: 'formattedStopAddress',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 70,\n      id: 'stopAddress',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Stop Type',\n      valuePath: 'stopType',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'stopType',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Event Type',\n      valuePath: 'eventType',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      id: 'eventType',\n      searchable: true,\n      component: 'iq-widgets/playback-widget/table-header'\n    }, {\n      label: 'Vehicle Speed',\n      valuePath: 'speed',\n      dataType: 'text',\n      resizable: true,\n      minResizeWidth: 20,\n      id: 'speed',\n      component: 'iq-widgets/playback-widget/table-header'\n    }],\n    route: {\n      model: 'playback-route',\n      indexPath: 'routeId'\n    },\n    routeName: {\n      model: 'playback-route',\n      indexPath: 'routeName'\n    },\n    vehicle: {\n      model: 'playback-vehicle',\n      indexPath: 'vehicleId'\n    },\n    driver: {\n      model: 'playback-driver',\n      indexPath: 'driverId'\n    },\n    activitylog: {\n      adaptor: 'playback-activity-log'\n    },\n    vehicleEvents: ['pick', 'wheelchair-pick', 'wheelchair-drop', 'onBreak', 'offBreak', 'drop', 'pullOut', 'pullIn']\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/table-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['playback-table-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/table-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"/H83Oy6L\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/playback-widget/table-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/playback-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"MutoKCOm\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"index\\\",\\\"t\\\",\\\"b\\\",\\\"r\\\",\\\"cellValue\\\",\\\"dropdown\\\",\\\"event\\\",\\\"t\\\",\\\"b\\\",\\\"r\\\",\\\"cellValue\\\",\\\"dropdown\\\",\\\"event\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"playback-widget-title\\\"],[9],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-controls\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:none\\\"],[9],[0,\\\"  \\\"],[1,[21,\\\"currentSelection\\\"],false],[0,\\\" \\\"],[1,[21,\\\"vehicleRowSelection\\\"],false],[10],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button border-0\\\"],[11,\\\"data-test-map-filter-button\\\",\\\"\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"flex-body-left\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"playback-widget-tabs\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byVehicle\\\"],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search by Vehicle\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentModeTabSearching\\\",\\\"byVehicle\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byLocation\\\"],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search by Location\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentModeTabSearching\\\",\\\"byLocation\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byVehicle\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"form-panel-header-caret\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"car\\\"],[[\\\"class\\\"],[\\\"icon-block\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"form-panel-title\\\"],[9],[0,\\\"\\\\n            Select Route or Vehicle\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"form-panel-form mb-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Provider\\\",\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedProvider\\\",\\\"id\\\"]],[23,[\\\"providerOptions\\\"]]],null],[23,[\\\"providerOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,20,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[20]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select Route\\\",\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"name\\\",[23,[\\\"selectedRoute\\\",\\\"id\\\"]],[23,[\\\"routeOptions\\\"]]],null],[23,[\\\"routeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteOptionsSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,19,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[19]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select Vehicle\\\",\\\"id\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedVehicle\\\",\\\"id\\\"]],[23,[\\\"vehicleOptions\\\"]]],null],[23,[\\\"vehicleOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onVehicleOptionsSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,18,[\\\"id\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[18]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select Driver\\\",\\\"id\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedDriver\\\",\\\"id\\\"]],[23,[\\\"driverOptions\\\"]]],null],[23,[\\\"driverOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDriverOptionsSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,17,[\\\"id\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[17]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byLocation\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"form-panel-header-caret\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"gps\\\"],[[\\\"class\\\"],[\\\"icon-block\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"form-panel-title\\\"],[9],[0,\\\"\\\\n            Search by location\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"form-panel-form mb-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"address\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/playbackAddressSearch\\\",null,[[\\\"value\\\",\\\"selectedAddress\\\",\\\"onPickOnMap\\\"],[[27,\\\"readonly\\\",[[23,[\\\"markerLocation\\\"]]],null],[23,[\\\"selectedAddress\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onLocationButtonClick\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Radius\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Radius in miles\\\",\\\"id\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedRadius\\\",\\\"id\\\"]],[23,[\\\"radiusOptions\\\"]]],null],[23,[\\\"radiusOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadiusOptionsSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,16,[\\\"title\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[16]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"hr\\\"],[12,\\\"style\\\",[28,[\\\"margin: \\\",[27,\\\"if\\\",[[23,[\\\"searchByLocation\\\"]],\\\"41px 0px\\\",\\\"15px 0px\\\"],null],\\\";\\\"]]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"form-panel-header-caret\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"time\\\"],[[\\\"class\\\"],[\\\"icon-block\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"form-panel-title \\\"],[9],[0,\\\"\\\\n            Select Date and Time range\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"form-panel-form mb-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,\\\"MM/DD/YYYY\\\",[23,[\\\"dateTimeFormat\\\",\\\"dateFlatPickr\\\"]],false,[23,[\\\"selectedDateTimeRage\\\",\\\"date\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.date\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,true,0,\\\"HH:MM\\\",true,[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"startofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"starttime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.starttime\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td:first-child left\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,true,0,\\\"HH:MM\\\",true,[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"startforendtime\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endtime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.endtime\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row mt-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"btn-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn default\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClearButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n              Clear\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn default\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSearch\\\"]]],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n              Search\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"switching\\\"]],\\\"searchLocation\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"confirm-dialog top_0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"dialog-close\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"svg-jar\\\",[\\\"ic-close\\\"],[[\\\"class\\\"],[\\\"icon-block\\\"]]],false],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n    \\\"],[7,\\\"h2\\\"],[9],[0,\\\"Playback\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byVehicle\\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[9],[0,\\\"Switching to \\\\\\\"Search by Location\\\\\\\" will reset the playback function. Are you sure you want to switch\\\\n      to \\\\\\\"Search by Location\\\\\\\"?\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"confirm-cancel\\\"],[9],[0,\\\"Cancel\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"confirm-submit\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Confirm\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentModeTab\\\",\\\"byLocation\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byLocation\\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[9],[0,\\\"Switching to \\\\\\\"Search by Vehicle\\\\\\\" will reset the playback function. Are you sure you want to switch\\\\n      to \\\\\\\"Search by Vehicle\\\\\\\"?\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"confirm-cancel\\\"],[9],[0,\\\"Cancel\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"confirm-submit\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Confirm\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentModeTab\\\",\\\"byVehicle\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"flex-body-right\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"id\\\",[21,\\\"mapElementId\\\"]],[11,\\\"class\\\",\\\"tomtom-map playback\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-panel\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"caption\\\"],[11,\\\"class\\\",\\\"playback-slider-label\\\"],[12,\\\"style\\\",[28,[\\\"margin-left: \\\",[21,\\\"currentWidght\\\"],\\\";\\\"]]],[9],[0,\\\"\\\\n      \\\"],[1,[21,\\\"currentTimeSilder\\\"],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"panel-row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn circle-btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canPlay\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onBackwardButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canPlay\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"back\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"back-disabled\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn circle-btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canPlay\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlayButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"pause\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"canPlay\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"play\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"play-disabled\\\"],null],false],[0,\\\"\\\\n            \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn circle-btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canPlay\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onForwardButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canPlay\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"forward\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"svg-jar\\\",[\\\"forward-disabled\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-slider\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[1,[21,\\\"activeStartTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ui-slider\\\",null,[[\\\"min\\\",\\\"max\\\",\\\"value\\\",\\\"tooltip\\\",\\\"mood\\\",\\\"disabled\\\",\\\"naturalArrowKeys\\\",\\\"immediateResponse\\\"],[0,[23,[\\\"totolTimeInSeconds\\\"]],[23,[\\\"durationInSeconds\\\"]],\\\"hide\\\",\\\"success\\\",true,false,false]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[1,[21,\\\"activeEndTime\\\"],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn circle default\\\"],[12,\\\"disabled\\\",[27,\\\"if\\\",[[23,[\\\"animDisable\\\"]],true,[27,\\\"if\\\",[[23,[\\\"canPlay\\\"]],false,true],null]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSpeedButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[1,[21,\\\"animSpeed\\\"],false],[0,\\\"x\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byLocation\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"grid-table-left\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-table-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"playback-widget-table-title\\\"],[9],[0,\\\"Vehicles (\\\"],[1,[21,\\\"selectedRadiusVehicleCount\\\"],false],[0,\\\")\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isVehicleSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"column-widget-search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\",\\\"Vehicles\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onTableSearchClick\\\",\\\"vehiclesTable\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\"],[\\\"right\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,14,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L373:C11) \\\"],null]],[[\\\"class\\\"],[\\\"column-widget-button data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,14,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L379:C11) \\\"],null]],[[\\\"class\\\"],[\\\"table-component-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"buttonActionOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDownloadClose\\\",[22,15,[]],[22,14,[]],\\\"vehiclesTable\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[1,[22,15,[\\\"name\\\"]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[15]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[14]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button\\\"],[11,\\\"data-test-map-filter-button\\\",\\\"\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onTableColumnFilterButtonClick\\\",\\\"vehiclesTable\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-table-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"ember-table\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,10,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L399:C10) \\\"],null]],[[\\\"columns\\\"],[[23,[\\\"vehicleColumns\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,10,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L400:C11) \\\"],null]],[[\\\"rows\\\",\\\"selection\\\",\\\"onSelect\\\",\\\"checkboxSelectionMode\\\"],[[23,[\\\"vehicleRows\\\"]],[23,[\\\"vehicleRowsSelection\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRowsSelection\\\"]]],null]],null],\\\"single\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,11,[\\\"row\\\"]],\\\"expected `b.row` to be a contextual component but found a string. Did you mean `(component b.row)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L406:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,12,[\\\"cell\\\"]],\\\"expected `r.cell` to be a contextual component but found a string. Did you mean `(component r.cell)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L407:C15) \\\"],null]],null,{\\\"statements\\\":[[1,[22,13,[]],false]],\\\"parameters\\\":[13]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[12]},null]],\\\"parameters\\\":[11]},null]],\\\"parameters\\\":[10]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchRadiusVehiclesTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-container text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchEventsTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[23,[\\\"fetchRadiusVehiclesTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"vehiclesTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-container text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        No events found.\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabModeId\\\"]],\\\"byLocation\\\"],null],\\\"grid-table-right\\\",\\\"grid-table-all\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-table-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"playback-widget-table-title\\\"],[9],[0,\\\"Vehicle Events (\\\"],[1,[23,[\\\"activeEvents\\\",\\\"length\\\"]],false],[0,\\\"/\\\"],[1,[23,[\\\"vehicleEvents\\\",\\\"length\\\"]],false],[0,\\\")\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isVehicleEventSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"column-widget-search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\",\\\"vehicleEventsTable\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onTableSearchClick\\\",\\\"vehicleEventsTable\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\"],[\\\"right\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,8,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L453:C11) \\\"],null]],[[\\\"class\\\"],[\\\"column-widget-button data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,8,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L459:C11) \\\"],null]],[[\\\"class\\\"],[\\\"table-component-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"buttonActionOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDownloadClose\\\",[22,9,[]],[22,8,[]],\\\"vehicleEventsTable\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[1,[22,9,[\\\"name\\\"]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[9]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[8]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"playback-widget-button\\\"],[11,\\\"data-test-map-filter-button\\\",\\\"\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onTableColumnFilterButtonClick\\\",\\\"vehicleEventsTable\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"playback-widget-table-body vehicle-event-table-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"ember-table\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L479:C10) \\\"],null]],[[\\\"columns\\\"],[[23,[\\\"columns\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L480:C11) \\\"],null]],[[\\\"rows\\\",\\\"bufferSize\\\",\\\"selection\\\",\\\"onSelect\\\",\\\"checkboxSelectionMode\\\"],[[23,[\\\"rows\\\"]],[23,[\\\"bufferSize\\\"]],[23,[\\\"rowSelection\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"rowSelection\\\"]]],null]],null],\\\"none\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"row\\\"]],\\\"expected `b.row` to be a contextual component but found a string. Did you mean `(component b.row)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L487:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"cell\\\"]],\\\"expected `r.cell` to be a contextual component but found a string. Did you mean `(component r.cell)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L488:C15) \\\"],null]],null,{\\\"statements\\\":[[1,[22,7,[]],false]],\\\"parameters\\\":[7]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-container text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchEventsTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"tooLargeData\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-container text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            The results for the selected date/time frame exceed the maximum allowed. Please refine the search criteria and\\\\n            try again.\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"vehicleEventsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-container text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            No events found.\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"inlineRowMenuPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setInlineRowMenu\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L521:C3) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/playback-widget/template.hbs' @ L523:C3) \\\"],null]],[[\\\"isTouchDevice\\\",\\\"class\\\"],[false,\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"rightClickActionArray\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"rightClickActionArray\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,3,[]],0],null]],null]],null,{\\\"statements\\\":[[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSingleRowAction\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n  \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isReconciled\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"confirm-dialog top_0\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"dialog-close\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"svg-jar\\\",[\\\"ic-close\\\"],[[\\\"class\\\"],[\\\"icon-block\\\"]]],false],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n  \\\"],[7,\\\"h2\\\"],[9],[0,\\\"Playback\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[9],[0,\\\"Vehicle information has been reconciled. Please check the activity logs in the vehicle event for additional\\\\n    details.\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"confirm-cancel\\\"],[9],[0,\\\"OK\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/playback-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/previous-bookings-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/passengers-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-rider',\n    defaultSortId: 'riderId',\n    defaultSortAsc: false,\n    title: 'Passengers',\n    columns: [{\n      id: 'riderId',\n      index: 2,\n      type: 'uuid',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'id',\n      editable: false,\n      hidden: false,\n      defaultWidth: 30\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'fullPhoneNumber',\n      index: 3,\n      type: 'enum',\n      label: 'Phone Numbers',\n      valuePath: 'formattedPhoneNumbers',\n      cellDesc: 'Phone Numbers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 90\n    }, {\n      id: 'email',\n      index: 4,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      editable: true,\n      searchable: true,\n      hidden: false\n    }, {\n      id: 'middleName',\n      index: 5,\n      type: 'text',\n      label: 'Middle Name',\n      valuePath: 'middleName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 75,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/previous-bookings-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/previous-bookings-widget/config\", \"adept-iq/pods/components/iq-widgets/previous-bookings-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\", \"lodash\", \"moment\", \"adept-iq/config/api-urls\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _avlmConfig, _environment, _mappedPermIds, _lodash, _moment, _apiUrls, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n  const SEGMENT_TYPE_VALUE_FOR_ITP = 3;\n  const SCHEDULE_USER_ROLES = ['scheduler', 'scheduling'];\n  const BOOKING_USER_ROLES = ['booking', 'bookingagent'];\n  const CANCEL_TEXT = 'CANCEL';\n  const EDIT_TEXT = 'EDIT';\n  const DELETE_TEXT = 'DELETE';\n  const UPDATE_WAIT_TIME = 15000;\n\n  var _default = _component.default.extend({\n    classNames: ['previous-booking-widget'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    editComponent: 'iq-widgets/passengers-form-widget',\n    newTripComponent: 'iq-widgets/new-trip-form-widget',\n    canShowHeader: true,\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    isDeleteConfirm: false,\n    selectedRiders: null,\n    cancelAction: null,\n    editAction: null,\n    deleteAction: null,\n    viewItineraryAction: null,\n    bookingForEdit: null,\n    bookingForCancel: null,\n    cutOffTime4LateCancelTrip: 0,\n    lateTripCancelMessage: null,\n    cancelBookingComponent: 'iq-widgets/cancel-booking-form',\n    deleteBookingComponent: 'iq-widgets/delete-booking-form',\n    removeBookingPassengers: 'iq-widgets/remove-booking-passengers-form',\n    newBookingComponent: 'iq-widgets/new-booking-form',\n    viewItineraryComponent: 'iq-widgets/view-itinerary-modal',\n    updateRecords: true,\n    bookingDisplayMode: Ember.computed.alias('booking.bookingDisplayMode'),\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n\n      this.onBookingEdit = this.onBookingEdit.bind(this);\n      this.onCopyBooking = this.onCopyBooking.bind(this);\n      this.onViewBooking = this.onViewBooking.bind(this);\n      this.set('selectedRiders', []);\n      this.get('tableColumns').popObject();\n      this.get('tableColumns').lastObject.resizable = false;\n      this.onGroupBookingEditConfirm = this.onGroupBookingEditConfirm.bind(this);\n      this.lateTripCancelBooking = this.lateTripCancelBooking.bind(this);\n      this.onLateTripCancelBooking = this.onLateTripCancelBooking.bind(this);\n      this.onRemovePassengers = this.onRemovePassengers.bind(this);\n      this.getCurrentBookingRecords = this.getCurrentBookingRecords.bind(this);\n      this.onPreviousBookingsChange();\n      this.set('getRecords', this.getCurrentBookingRecords);\n      this.updateSelectedBooking();\n      this.set('config.titleSelected', this.get('booking.bookingDisplayMode'));\n    },\n\n    willDestroyElement() {\n      this.set('updateRecords');\n\n      this._super(...arguments);\n    },\n\n    async updateSelectedBooking() {\n      const currentTrips = this.get('booking.currentTrips') || [];\n      if (!this.get('updateRecords')) return;\n\n      try {\n        const currTripUpdatePromises = await this.get('apiContext').updateTripsFromIQUXService(currentTrips);\n        Promise.all(currTripUpdatePromises).then(() => {\n          Ember.run.later(() => this.updateSelectedBooking(), UPDATE_WAIT_TIME);\n        });\n      } catch (e) {\n        this.get('notifications').warning('missing trip from iqux service ' + e.message);\n      }\n    },\n\n    // also observe pastBookings: in Past Bookings mode the table is built from it, and it\n    // is set after currentBookings when a passenger is (un)checked — without this the past\n    // view renders from the stale list loaded by the previous click\n    onPreviousBookingsChange: Ember.observer('booking.currentBookings.[]', 'booking.currentBookings', 'booking.pastBookings.[]', 'booking.pastBookings', function () {\n      this.sortLegsInAllBookings();\n    }),\n    onCurrentTripsChange: Ember.observer('booking.currentTrips.[]', 'booking.currentTrips', function () {\n      this.filterTripsForselectedRiders();\n    }),\n    // the filter dropdown renders from config.titleSelected while the table is built from\n    // booking.bookingDisplayMode; anything that changes the mode outside of\n    // onTitleOptionChange has to bring the dropdown along, or it shows a filter the table\n    // isn't actually using\n    onBookingDisplayModeChange: Ember.observer('booking.bookingDisplayMode', function () {\n      const bookingDisplayMode = this.get('booking.bookingDisplayMode');\n      if (this.get('config.titleSelected') === bookingDisplayMode) return;\n      this.set('config.titleSelected', bookingDisplayMode);\n      this.sortLegsInAllBookings();\n    }),\n\n    sortLegsInAllBookings() {\n      const sort = this.buildSortParam();\n      const compareFn = (0, _sorts.buildCompareFunction)([sort]);\n      let records = [];\n\n      if (this.get('bookingDisplayMode.value') === 'past') {\n        records = this.getPastBookingRecords();\n      } else {\n        records = this.getCurrentBookingRecords();\n      }\n\n      this.set('records', records.sort(compareFn));\n    },\n\n    getCurrentBookingRecords() {\n      const currentBookings = this.get('booking.currentBookings') || [];\n      return currentBookings.map(booking => {\n        const legs = booking.get('legs');\n        const sortedLegs = legs.sortBy('legOrdinal');\n        booking.set('legs', sortedLegs);\n        booking.set('isPastBooking', false);\n        return booking;\n      });\n    },\n\n    getFutureBookingRecords() {\n      const futurueBookings = this.get('booking.futureBookings') || [];\n      return futurueBookings.map(booking => {\n        const legs = booking.get('legs');\n        const sortedLegs = legs.sortBy('legOrdinal');\n        booking.set('legs', sortedLegs);\n        booking.set('isPastBooking', false);\n        return booking;\n      });\n    },\n\n    getPastBookingRecords() {\n      const pastBookings = this.get('booking.pastBookings') || [];\n      return pastBookings.map(booking => {\n        const legs = booking.get('legs');\n        const sortedLegs = legs.sortBy('legOrdinal');\n        booking.set('legs', sortedLegs);\n        booking.set('isPastBooking', true);\n        return booking;\n      });\n    },\n\n    showGroupBookingWarning() {\n      this.get('tooltip').pushConfirmation({\n        title: 'Edit Booking',\n        tip: 'Are you sure you want to edit this Group booking?',\n        primaryActionText: 'Confirm',\n        primaryAction: this.onGroupBookingEditConfirm,\n        secondaryActionText: 'Cancel',\n        hasOverlay: true,\n        secondaryAction: () => {\n          this.get('tooltip').reset();\n        }\n      });\n    },\n\n    showLateTripCancelBookingWarning() {\n      this.get('tooltip').pushConfirmation({\n        title: 'LateTripCancel',\n        tip: this.get('lateTripCancelMessage').get('value'),\n        primaryActionText: 'Ok',\n        primaryAction: this.lateTripCancelBooking,\n        hasOverlay: true,\n        secondaryAction: () => {\n          this.get('tooltip').reset();\n        }\n      });\n    },\n\n    async getRequestDetail(url) {\n      const session = this.get('session');\n      const data = await this.get('ajax').request(url, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n      return data;\n    },\n\n    async checkRouteLockedByUnspecifiedUser(trips) {\n      const roleNames = this.get('session.data.authenticated.tokenInfo.roleNames');\n      const isCurrentUserIsBookingUser = roleNames.some(roleName => {\n        return BOOKING_USER_ROLES.includes(roleName.toLowerCase());\n      });\n      if (!isCurrentUserIsBookingUser) return false;\n      const routeData = trips.filter(trip => trip.get('route.id')).map(async filteredTrip => {\n        return await this.getRequestDetail(_apiUrls.API.iquxService.host + '/routeWidget/' + filteredTrip.get('route.id'));\n      });\n      const resolvedRoute = await Promise.all(routeData);\n      const filteredRouteLock = resolvedRoute.filter(route => route.data.attributes.isLocked ? route.data.attributes.isLocked : false);\n      let lockedUserDetails = [];\n\n      if (filteredRouteLock.length) {\n        const ssoUserDetails = filteredRouteLock.map(async route => {\n          const lockDetails = route.data.attributes.lock;\n          return await this.getRequestDetail(_apiUrls.API.ssoService.host + '/user/' + lockDetails.user);\n        });\n        lockedUserDetails = await Promise.all(ssoUserDetails);\n      }\n\n      let isRoleSchedule = false;\n      lockedUserDetails.forEach(user => {\n        const roleArray = user.UserRoleRoles.filter(role => SCHEDULE_USER_ROLES.includes(role.roleName.toLowerCase()));\n        if (roleArray.length) isRoleSchedule = true;\n      });\n      return isRoleSchedule;\n    },\n\n    async onLateTripCancelBooking(booking) {\n      const trips = booking.get('trips');\n      const isTripRelatedRouteIsLocked = await this.checkTripRelatedRouteIsLocked(trips);\n\n      if (isTripRelatedRouteIsLocked) {\n        this.showRouteLockWarning(CANCEL_TEXT);\n        return;\n      }\n\n      this.set('bookingForCancel', booking);\n      const isRouteLockedByUnspecifiedUser = await this.checkRouteLockedByUnspecifiedUser(booking.get('trips'));\n\n      if (isRouteLockedByUnspecifiedUser) {\n        this.get('notifications').warning('UNABLE TO CANCEL BOOKING. THE ROUTE IS CURRENTLY LOCKED.');\n        return;\n      }\n\n      const requestTime = booking.get('legs.firstObject.requestTime');\n      const value = Number(this.get('cutOffTime4LateCancelTrip').get('value')) / 60 || Number(this.get('cutOffTime4LateCancelTrip').get('defaultValue')) / 60;\n      const bookingDate = (0, _moment.default)(requestTime);\n      const currentDate = (0, _moment.default)().startOf('day');\n      /*if this is set to 120 minutes (2 hours), then trip with a 9:00 AM promise time will be considered a late cancel if the cancellation occurs anytime after 7:00 AM*/\n\n      const lessTwoHour = bookingDate.subtract(value, 'hours');\n      const currentTime = (0, _moment.default)();\n\n      if (bookingDate.date() <= currentDate.date() && (0, _moment.default)(lessTwoHour).isBefore(currentTime)) {\n        this.showLateTripCancelBookingWarning();\n      } else {\n        this.onOpenCancelBooking(booking, 'cancelled');\n      }\n    },\n\n    async onRemovePassengers(booking) {\n      const trips = booking.get('trips');\n      const isTripRelatedRouteIsLocked = await this.checkTripRelatedRouteIsLocked(trips);\n\n      if (isTripRelatedRouteIsLocked) {\n        this.showRouteLockWarning(CANCEL_TEXT);\n        return;\n      }\n\n      this.set('bookingForCancel', booking);\n      const isRouteLockedByUnspecifiedUser = await this.checkRouteLockedByUnspecifiedUser(booking.get('trips'));\n\n      if (isRouteLockedByUnspecifiedUser) {\n        this.get('notifications').warning('UNABLE TO CANCEL BOOKING. THE ROUTE IS CURRENTLY LOCKED.');\n        return;\n      }\n\n      const requestTime = booking.get('legs.firstObject.requestTime');\n      const value = Number(this.get('cutOffTime4LateCancelTrip').get('value')) / 60 || Number(this.get('cutOffTime4LateCancelTrip').get('defaultValue')) / 60;\n      const bookingDate = (0, _moment.default)(requestTime);\n      const currentDate = (0, _moment.default)().startOf('day');\n      /*if this is set to 120 minutes (2 hours), then trip with a 9:00 AM promise time will be considered a late cancel if the cancellation occurs anytime after 7:00 AM*/\n\n      const lessTwoHour = bookingDate.subtract(value, 'hours');\n      const currentTime = (0, _moment.default)();\n\n      if (bookingDate.date() <= currentDate.date() && (0, _moment.default)(lessTwoHour).isBefore(currentTime)) {\n        this.showLateTripCancelBookingWarning();\n      } else {\n        this.onOpenRemoveBookingPassengers(booking, 'cancelled');\n      }\n    },\n\n    lateTripCancelBooking() {\n      this.onOpenCancelBooking(this.get('bookingForCancel'), 'lateCancelled');\n      this.get('tooltip').reset();\n    },\n\n    async onGroupBookingEditConfirm() {\n      await this.openBookingForEdit(this.get('bookingForEdit'));\n      this.get('tooltip').reset();\n    },\n\n    onOpenCancelBooking(booking, status) {\n      const cancelBookingComponent = this.get('cancelBookingComponent');\n      this.get('editModal').open(cancelBookingComponent, [booking, status]);\n    },\n\n    onOpenRemoveBookingPassengers(booking, status) {\n      const removeBookingPassengers = this.get('removeBookingPassengers');\n      this.get('editModal').open(removeBookingPassengers, [booking, status]);\n    },\n\n    dedupeLegs(legsIncludingDupe, riderExternalIds) {\n      const anyOneRider = riderExternalIds[0];\n      const legsArray = legsIncludingDupe.toArray();\n      const legsGroupedByRider = (0, _lodash.groupBy)(legsArray, leg => {\n        return leg.get('rider.id');\n      });\n      return legsGroupedByRider[anyOneRider];\n    },\n\n    async fetchPlaces(legsInBooking) {\n      const placeIds = (0, _lodash.compact)((0, _lodash.uniq)((0, _lodash.flattenDeep)(legsInBooking.map(leg => {\n        return leg.get('segments').map(segment => [segment.get('pick.place.id'), segment.get('drop.place.id')]);\n      }))));\n      if (!placeIds.length) return;\n      const query = 'in(\\'id\\',(' + placeIds + '))&include=address,location';\n      return await this.store.query('place', {\n        filter: query\n      });\n    },\n\n    openBookingForEdit: async function (booking) {\n      let viewOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const bookingId = booking.get('id');\n\n      try {\n        await this.get('store').queryRecord('booking', bookingId);\n        const bookingRecord = this.get('store').peekRecord('booking', bookingId); // todo :should be handled differently\n\n        const dummySubscription = this.get('booking').createSubscriptionRecord();\n        await bookingRecord.set('subscription', dummySubscription);\n        this.set('booking.activeBooking', bookingRecord);\n        this.set('booking.isViewOnlyMode', viewOnly);\n        const legsInBooking = await bookingRecord.get('legs');\n        await this.fetchPlaces(legsInBooking);\n        this.get('booking').clearSelectedRiders();\n        const legsIncludingDupes = bookingRecord.get('legs');\n        const allRiderIdsIncludingDupes = legsIncludingDupes.map(leg => {\n          return leg.get('rider.id');\n        });\n        const riderIds = (0, _lodash.uniq)(allRiderIdsIncludingDupes).filter(rId => rId); // unpersisted record will have null\n\n        const riders = await this.get('booking').fetchAndReturnRiders(riderIds);\n        const riderExternalIds = riders.map(r => r.get('id'));\n        await this.get('booking').fetchExternalRidersAndSetToSelectedRiders(riderExternalIds, true);\n        await this.get('booking').fetchAllSelectedRidersForTravelNeeds();\n        await this.get('booking').fetchAndStoreEligibilityForAllSelectedRiders();\n        const legsAfterDedupe = this.dedupeLegs(legsIncludingDupes, riderExternalIds);\n        const legsWithZName = legsAfterDedupe.map(async leg => {\n          const pickZName = leg.get('segments.firstObject.pick.place.address.zoneName.id');\n          const dropZName = leg.get('segments.lastObject.drop.place.address.zoneName.id');\n          const pickZone = this.store.peekRecord('zone', parseInt(pickZName, 10));\n          const dropZone = this.store.peekRecord('zone', parseInt(dropZName, 10));\n          const pickZoneName = await this.store.createRecord('zone-type', {\n            name: pickZone.get('name'),\n            displayName: pickZone.get('displayName')\n          });\n          const dropZoneName = await this.store.createRecord('zone-type', {\n            name: dropZone.get('name'),\n            displayName: dropZone.get('displayName')\n          });\n          leg.set('segments.firstObject.pick.place.address.zName', pickZone.get('displayName'));\n          leg.set('segments.lastObject.drop.place.address.zName', dropZone.get('displayName'));\n          leg.set('segments.firstObject.pick.place.address.zoneName', pickZoneName);\n          leg.set('segments.lastObject.drop.place.address.zoneName', dropZoneName);\n          return leg;\n        });\n        await bookingRecord.get('legs').clear();\n        const legsWithZoneName = await Promise.all(legsWithZName);\n        bookingRecord.get('legs').pushObjects(legsWithZoneName.sortBy('legOrdinal'));\n        const bookingLegs = bookingRecord.get('legs').toArray();\n        const isBookingEditMode = true;\n        const selectedRider = this.get('booking.selectedRiders').firstObject;\n        const newBookingComponent = this.get('newBookingComponent');\n        this.get('booking').setIsAllLegField(bookingLegs);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').open(newBookingComponent, [isBookingEditMode, selectedRider, bookingRecord, viewOnly]);\n      } catch (e) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('notifications').warning('error while editing booking ' + e.message);\n      }\n    },\n\n    //NYAAR-19188 &NYAAR-19285 this method used for segmentStop pick and drop Phone No field empty from Ui while when we Edit the created booking and Phone Number field displayed blank in Create booking side panel on copying booking\n    setSegmentSavedPhoneNumber() {\n      const booking = this.get('booking');\n      booking.get('segmentStopPhoneNumberIds').forEach(phone => {\n        const id = phone.get('id');\n        const segmentStopPhoneNumberRecord = this.get('store').peekRecord('segment-stop-phone-number', id);\n        const segmentStopId = segmentStopPhoneNumberRecord.get('segmentStop.id');\n        const segmentStop = this.get('store').peekRecord('segment-stop', segmentStopId);\n        const phoneNumbers = segmentStop.get('phoneNumbers');\n        phoneNumbers.pushObject(segmentStopPhoneNumberRecord);\n        segmentStop.set('phoneNumbers', phoneNumbers);\n      });\n    },\n\n    async onBookingEdit(booking) {\n      const trips = booking.get('trips');\n      const isTripRelatedRouteIsLocked = await this.checkTripRelatedRouteIsLocked(trips);\n\n      if (isTripRelatedRouteIsLocked) {\n        this.showRouteLockWarning(EDIT_TEXT);\n        return;\n      }\n\n      this.set('bookingForEdit', booking);\n      const isRouteLockedByUnspecifiedUser = await this.checkRouteLockedByUnspecifiedUser(booking.get('trips'));\n\n      if (isRouteLockedByUnspecifiedUser) {\n        this.get('notifications').warning('UNABLE TO EDIT BOOKING. THE ROUTE IS CURRENTLY LOCKED.');\n        return;\n      }\n\n      this.setSegmentSavedPhoneNumber();\n\n      if (booking.get('isGroupBooking')) {\n        this.showGroupBookingWarning();\n      } else {\n        this.openBookingForEdit(booking);\n      }\n    },\n\n    async onCopyBooking(selectedBooking) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      this.setSegmentSavedPhoneNumber();\n      const selectedBookingId = selectedBooking.get('id');\n      await this.get('store').queryRecord('booking', selectedBookingId);\n      const selectedBookingRecord = this.get('store').peekRecord('booking', selectedBookingId); //if the legs are not in ascending order we have to sort that by leg id\n\n      const sortedLegs = selectedBookingRecord.get('legs').sortBy('id');\n      selectedBookingRecord.set('legs', sortedLegs);\n      const isBookingEditMode = false;\n      const newBookingComponent = this.get('newBookingComponent');\n      const legsToCopy = selectedBookingRecord.get('legs').toArray();\n      const booking = await this.get('booking').createBookingRecord(false, false, selectedBookingRecord.get('id'));\n      const isGroupBooking = selectedBookingRecord.get('isGroupBooking');\n      const legsIncludingDupes = selectedBookingRecord.get('legs');\n      const allRiderIdsIncludingDupes = legsIncludingDupes.map(leg => {\n        return leg.get('rider.id');\n      });\n\n      if (isGroupBooking) {\n        const selectedRiderId = selectedBookingRecord.get('legs.firstObject.rider.id');\n        const filteredLegs = legsIncludingDupes.filter(leg => {\n          return leg.get('rider.id') === selectedRiderId;\n        }).sortBy('id');\n        selectedBookingRecord.set('legs', filteredLegs);\n      }\n\n      this.set('booking.copiedBookingRecord', selectedBookingRecord); //set selectedRiders for copy-booking\n\n      this.get('booking').clearSelectedRiders();\n      const riderIds = (0, _lodash.uniq)(allRiderIdsIncludingDupes).filter(rId => rId); // unpersisted record will have null\n\n      const riders = await this.get('booking').fetchAndReturnRiders(riderIds);\n      const riderExternalIds = riders.map(r => r.get('id'));\n      await this.get('booking').fetchExternalRidersAndSetToSelectedRiders(riderExternalIds, true);\n      await this.get('booking').fetchAllSelectedRidersForTravelNeeds();\n      await this.get('booking').fetchAndStoreEligibilityForAllSelectedRiders();\n      const copiedLegs = await this.get('booking').cloneLegs(legsToCopy, booking);\n      booking.set('legs', copiedLegs);\n      this.set('booking.activeBooking', booking);\n      this.get('editModal').open(newBookingComponent, [isBookingEditMode, this.get('booking.selectedRiders.firstObject'), booking]);\n    },\n\n    async onViewBooking(booking) {\n      this.openBookingForEdit(booking, true);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('cancelAction', {\n        id: 'cancel',\n        name: 'Cancel Booking',\n        permIds: [_mappedPermIds.default.cancelFutureBookings, _mappedPermIds.default.cancelSameDayBookings],\n        action: this.onLateTripCancelBooking\n      });\n      this.set('removePassengersAction', {\n        id: 'removePassengers',\n        name: 'Remove Passenger(s)',\n        permId: _mappedPermIds.default.removePassengers,\n        action: this.onRemovePassengers\n      });\n      this.set('editAction', {\n        id: 'edit',\n        name: 'Edit Booking',\n        permId: [_mappedPermIds.default.editFutureBookings, _mappedPermIds.default.editSameDayBookings],\n        action: this.onBookingEdit\n      });\n      this.set('deleteAction', {\n        id: 'delete',\n        name: 'Delete Booking',\n        permId: _mappedPermIds.default.deleteBooking,\n        action: async model => {\n          const deleteBookingComponent = this.get('deleteBookingComponent');\n          const trips = model.get('trips');\n          const isTripRelatedRouteIsLocked = await this.checkTripRelatedRouteIsLocked(trips);\n\n          if (isTripRelatedRouteIsLocked) {\n            this.showRouteLockWarning(DELETE_TEXT);\n            return;\n          }\n\n          this.get('editModal').open(deleteBookingComponent, [model]);\n        }\n      });\n      this.set('viewItineraryAction', {\n        id: 'view',\n        name: 'View Itinerary',\n        permId: _mappedPermIds.default.createFutureBookings,\n        action: model => {\n          const viewItineraryComponent = this.get('viewItineraryComponent');\n          this.get('editModal').open(viewItineraryComponent, [model]);\n        }\n      });\n      this.set('copyBookingAction', {\n        id: 'copy',\n        name: 'Copy Booking',\n        permId: _mappedPermIds.default.copyBooking,\n        action: this.onCopyBooking\n      });\n      this.set('viewBookingAction', {\n        id: 'view',\n        name: 'View Booking',\n        permId: _mappedPermIds.default.copyBooking,\n        action: this.onViewBooking\n      });\n      this.set('activityLogAction', {\n        id: 'activityLog',\n        name: 'View Activity Log',\n        permId: _mappedPermIds.default.activityLog,\n        action: booking => {\n          const bookingId = booking.get('id');\n          this.get('workspace').pushState('bookingActivityLog', {\n            displayName: `Booking ${bookingId} Activity Log`,\n            booking\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      if (this.get('booking.isPassengerRowChecked')) {\n        this.filterTripsForselectedRiders();\n        this.selectAndDeselectTableRows(false);\n        this.set('booking.isPassengerRowChecked', false);\n      }\n    },\n\n    selectAndDeselectTableRows(isSelected) {\n      const bookingWidgetTableRows = this.get('table.rows');\n      bookingWidgetTableRows.setEach('selected', isSelected);\n      bookingWidgetTableRows.setEach('isChecked', isSelected);\n    },\n\n    filterTripsForselectedRiders() {\n      const bookingRows = this.get('table.rows') || [];\n      const selectedBookings = bookingRows.filter(row => row.get('isChecked'));\n      const selectedBookingIds = selectedBookings.map(booking => booking.get('id'));\n      const filteredTrips = (this.get('booking.currentTrips') || []).filter(trip => selectedBookingIds.some(bookingId => bookingId === trip.get('booking.id')));\n      this.set('booking.filteredCurrentTrips', filteredTrips);\n    },\n\n    filterTripsForUncheckedRow(bookingId) {\n      const subscriptionRows = this.get('subscriptionTableRef.table.rows');\n      const selectedSubscriptions = subscriptionRows.filter(subscriptionRow => subscriptionRow.get('isChecked'));\n      const selectedSubscriptionIds = selectedSubscriptions.map(subscription => subscription.get('id'));\n      const currentTrips = this.get('booking.filteredCurrentTrips');\n      return currentTrips.filter(trip => {\n        if (selectedSubscriptionIds.includes(trip.get('booking.subscription.id'))) {\n          return true;\n        }\n\n        return bookingId !== trip.get('booking.id');\n      });\n    },\n\n    checkIsItpBooking(row) {\n      const trips = row.get('trips');\n      const filteredTrips = trips.filter(trip => {\n        return trip.get('segment.segmentType') === SEGMENT_TYPE_VALUE_FOR_ITP;\n      });\n      return filteredTrips.length;\n    },\n\n    async checkTripRelatedRouteIsLocked(trips) {\n      const tripsWithRoute = trips.filter(trip => trip.get('route.id'));\n      const routeDetails = tripsWithRoute.map(async trip => {\n        const routeId = trip.get('route.id');\n        const iquxServiceHost = _apiUrls.API.iquxService.host;\n        const routeRequestUrl = `${iquxServiceHost}/routeWidget/${routeId}`;\n        const routeData = await this.getRouteData(routeRequestUrl);\n        return routeData;\n      });\n      const resolvedRoutes = (await Promise.all(routeDetails)) || [];\n      const lockedRoutes = resolvedRoutes.filter(route => route.data.attributes.isLocked);\n      return lockedRoutes.length;\n    },\n\n    async getRouteData(routeRequestUrl) {\n      const session = this.get('session');\n      const routeData = await this.get('ajax').request(routeRequestUrl, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n      return routeData;\n    },\n\n    showRouteLockWarning(triedAction) {\n      const warningMessage = `UNABLE TO ${triedAction} BOOKING. THE ROUTE IS CURRENTLY LOCKED.`;\n      this.get('notifications').warning(warningMessage);\n    },\n\n    // Switching the Current/Past filter swaps the whole booking list out, so a booking left\n    // checked under the outgoing filter keeps its trips in the View All Trips table with no\n    // visible row left to uncheck.\n    clearCheckedBookings() {\n      this.get('booking').unCheckAllBookings(); // isChecked lives in the active context, but the row highlight does not, and the data\n      // join reuses the same row object for a booking listed under both filters\n\n      (this.get('table.rows') || []).setEach('selected', false);\n    },\n\n    async updateBookingTripGrid() {\n      const bookingService = this.get('booking'); // eslint-disable-next-line no-unused-vars\n\n      const result = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n      const [bookings, trips] = result;\n      const {\n        pastBookings,\n        pastTrips\n      } = result;\n      const isPastMode = this.get('bookingDisplayMode.value') === 'past';\n      bookingService.set('futureTrips', trips || []);\n      bookingService.set('futureBookings', bookings || []);\n      bookingService.set('pastTrips', pastTrips || []);\n      bookingService.set('pastBookings', pastBookings || []); // currentBookings/currentTrips are the sets the grids render from, so they follow the\n      // selected filter (as in booking-widget onPassengerWidgetRowClick) -- otherwise Select\n      // All under Past Bookings looks for the checked bookings' trips in the current set\n\n      bookingService.set('currentTrips', (isPastMode ? pastTrips : trips) || []);\n      bookingService.set('currentBookings', (isPastMode ? pastBookings : bookings) || []);\n    },\n\n    actions: {\n      onTitleOptionChange(newValue) {\n        this.clearCheckedBookings();\n        this.set('booking.bookingDisplayMode', newValue);\n        this.set('config.titleSelected', newValue);\n        const sort = this.buildSortParam();\n        const compareFn = (0, _sorts.buildCompareFunction)([sort]);\n        let currentSelections;\n\n        if (newValue.value === 'current') {\n          currentSelections = this.getFutureBookingRecords();\n          this.set('booking.currentTrips', this.get('booking.futureTrips') || []);\n        } else if (newValue.value === 'past') {\n          currentSelections = this.getPastBookingRecords();\n          this.set('booking.currentTrips', this.get('booking.pastTrips') || []);\n        }\n\n        this.set('booking.currentBookings', currentSelections);\n        this.set('records', currentSelections.sort(compareFn));\n      },\n\n      async onUpdateIQUXRow(row) {\n        const tripPromisses = await this.get('apiContext').updateTripsFromIQUXService(row.get('trips'));\n        await Promise.all(tripPromisses);\n      },\n\n      async onRowClick(row) {\n        const isChecked = row.get('isChecked');\n        const currentTrips = this.get('booking.filteredCurrentTrips');\n        const bookingId = row.get('id');\n        const isPastBooking = row.get('isPastBooking');\n\n        if (isChecked) {\n          await this.updateBookingTripGrid();\n          await this.get('apiContext').updateTripsFromIQUXService(row.get('trips'));\n        }\n\n        if (isChecked) {\n          const tripsSet = (this.get('bookingDisplayMode.value') === 'current' ? this.get('booking.currentTrips') : this.get('booking.pastTrips')) || [];\n          const filteredTrips = tripsSet.filter(trip => bookingId === trip.get('booking.id'));\n          filteredTrips.forEach(trip => {\n            trip.set('isPastTrip', isPastBooking);\n          });\n          this.set('booking.filteredCurrentTrips', (0, _lodash.uniq)(currentTrips.concat(filteredTrips)));\n          return;\n        }\n\n        const filteredTrips = this.filterTripsForUncheckedRow(bookingId);\n        this.set('booking.filteredCurrentTrips', filteredTrips);\n      },\n\n      onRowRightClick(row) {\n        const trips = row.get('trips');\n        const dynamicSingleActions = [];\n        const rowStatus = row.get('status');\n        const cancelStatus = rowStatus === 'cancelled';\n        const lateCancelStatus = rowStatus === 'lateCancelled';\n        const isItpBooking = this.checkIsItpBooking(row);\n        const isGroupBooking = row.get('isGroupBooking');\n        const bookingDisplayMode = this.get('booking.bookingDisplayMode.value');\n\n        if (bookingDisplayMode === 'past') {\n          // For past bookings, only show \"View Booking\" and \"View Activity Log\"\n          dynamicSingleActions.push(this.get('viewBookingAction'), this.get('activityLogAction'));\n          this.set('dynamicSingleActions', dynamicSingleActions);\n\n          this._super(...arguments);\n\n          return;\n        }\n\n        const anyTripsInServiceOrCompleted = trips.filter(trip => {\n          const isCanceled = trip.get('isCanceled');\n          const isCompleted = trip.get('isCompleted');\n          const inService = trip.get('inService');\n          const isNoShowed = trip.get('isNoShowed');\n          const isArrived = trip.get('pickStopPoint.isArrived');\n          return isCanceled || isCompleted || inService || isNoShowed || isArrived;\n        });\n\n        if (cancelStatus || lateCancelStatus) {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('deleteAction'));\n          }\n\n          if (!isGroupBooking) {\n            dynamicSingleActions.push(this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        } else if (row.get('isSameDayBooking') || rowStatus === 'scheduled') {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('cancelAction'), this.get('deleteAction'));\n          }\n\n          if (isGroupBooking) {\n            dynamicSingleActions.push(this.get('removePassengersAction'));\n          } else {\n            dynamicSingleActions.push(this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        } else if (rowStatus === 'scheduled' && !isItpBooking) {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('cancelAction'), this.get('deleteAction'));\n          }\n\n          if (isGroupBooking) {\n            dynamicSingleActions.push(this.get('removePassengersAction'));\n          } else {\n            dynamicSingleActions.push(this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        } else if (isItpBooking && rowStatus === 'scheduled') {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('cancelAction'), this.get('deleteAction'));\n          }\n\n          dynamicSingleActions.push(this.get('viewItineraryAction'));\n\n          if (!isGroupBooking) {\n            dynamicSingleActions.push(this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        } else if (isItpBooking && rowStatus === 'unscheduled') {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('cancelAction'), this.get('deleteAction'));\n          }\n\n          if (!isGroupBooking) {\n            dynamicSingleActions.push(this.get('editAction'));\n          }\n\n          dynamicSingleActions.push(this.get('viewItineraryAction'));\n\n          if (!isGroupBooking) {\n            dynamicSingleActions.push(this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        } else if (rowStatus === 'refused') {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('deleteAction'));\n          }\n\n          dynamicSingleActions.push(this.get('deleteAction'));\n\n          if (!isGroupBooking) {\n            dynamicSingleActions.push(this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        } else {\n          if (anyTripsInServiceOrCompleted.length === 0) {\n            dynamicSingleActions.push(this.get('cancelAction'), this.get('deleteAction'));\n          }\n\n          if (isGroupBooking) {\n            dynamicSingleActions.push(this.get('removePassengersAction'));\n          } else {\n            dynamicSingleActions.push(this.get('editAction'), this.get('copyBookingAction'));\n          }\n\n          dynamicSingleActions.push(this.get('activityLogAction'));\n        }\n\n        this.set('dynamicSingleActions', dynamicSingleActions);\n        const cutOffTime4LateCancelTrip = this.store.peekRecord('cs-config-item', 'config-Cancel_Trips/cutOffTime4LateCancelTrip');\n        const lateTripCancelMessage = this.store.peekRecord('cs-config-item', 'config-Cancel_Trips/Late_Trip_Cancel_Message');\n        this.set('lateTripCancelMessage', lateTripCancelMessage);\n        this.set('cutOffTime4LateCancelTrip', cutOffTime4LateCancelTrip);\n\n        this._super(...arguments);\n      },\n\n      async onCheckAll() {\n        const isRowHeadChecked = true;\n        if (isRowHeadChecked) await this.updateBookingTripGrid();\n        this.selectAndDeselectTableRows(isRowHeadChecked);\n        this.filterTripsForselectedRiders();\n      },\n\n      onUncheckAll() {\n        const isRowHeadUnchecked = false;\n        this.selectAndDeselectTableRows(isRowHeadUnchecked);\n        this.set('booking.filteredCurrentTrips', []);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/previous-bookings-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const hoverCellComponent = 'iq-widgets/booking-trips-widget/cells/hover-cell';\n  var _default = {\n    component: 'iq-widgets/previous-bookings-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'booking',\n    defaultSortId: 'bookingDateRequestTime',\n    defaultSortAsc: true,\n    checkBoxColumn: true,\n    isFormControls: true,\n    title: 'Booking',\n    titleOptions: [{\n      label: 'Current Bookings',\n      value: 'current'\n    }, {\n      label: 'Past Bookings',\n      value: 'past'\n    }],\n    columns: [{\n      id: 'bookingDateRequestTime',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Date / Request / Time',\n      valuePath: 'requestTimeForDisplay',\n      customSortPath: 'firstLegRequestTimeFormat',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 200,\n      format: `${_environment.default.dateTimeFormat.dateMoment} / / ${_environment.default.dateTimeFormat.timeMoment}`\n    }, {\n      id: 'bookingId',\n      index: 1,\n      type: 'text',\n      label: 'Booking ID',\n      valuePath: 'id',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'bookingStatus',\n      index: 2,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'computedStatus',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 70,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'bookingPassengerId',\n      index: 3,\n      type: 'enum',\n      label: 'Passenger ID',\n      valuePath: 'associatedRiderRiderIds',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      },\n      cellComponent: hoverCellComponent,\n      cellDesc: 'Passenger IDs'\n    }, {\n      id: 'bookingFirstName1',\n      index: 4,\n      type: 'enum',\n      label: 'First Name',\n      valuePath: 'associatedRiderFirstNames',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 100,\n      cellComponent: hoverCellComponent,\n      cellDesc: 'First Names'\n    }, {\n      id: 'bookingLastName',\n      index: 5,\n      type: 'enum',\n      label: 'Last Name',\n      valuePath: 'associatedRiderLastNames',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 100,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      },\n      cellComponent: hoverCellComponent,\n      cellDesc: 'Last Names'\n    }, {\n      id: 'bookingPickAddress',\n      index: 6,\n      type: 'text',\n      label: 'Pickup Address',\n      valuePath: 'firstSegmentInFirstLeg.pick.place.address.simpleAddress',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 140,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'bookingPickCity',\n      index: 7,\n      type: 'text',\n      label: 'Pickup City',\n      valuePath: 'bookingPickUpAddress',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'pickupZone',\n      index: 8,\n      type: 'text',\n      label: 'Pickup Zone',\n      valuePath: 'firstSegmentInFirstLeg.pick.place.address.zoneName.valueDisplayName',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'bookingDropaddress',\n      index: 9,\n      type: 'text',\n      label: 'Drop off Address',\n      valuePath: 'lastSegmentInLastLeg.drop.place.address.simpleAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 140,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'bookingDropCity',\n      index: 10,\n      type: 'text',\n      label: 'Drop off City',\n      valuePath: 'bookingDropOffAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120\n    }, {\n      id: 'dropoffZone',\n      index: 11,\n      type: 'text',\n      label: 'Drop off Zone',\n      valuePath: 'firstSegmentInFirstLeg.drop.place.address.zoneName.valueDisplayName',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'isGroupBooking',\n      index: 12,\n      type: 'text',\n      label: 'Group Booking ',\n      valuePath: 'isGroupBookingDisplayText',\n      editable: false,\n      searchable: false,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'bookingGroupId',\n      index: 13,\n      type: 'text',\n      label: 'Group ID',\n      valuePath: 'group.id',\n      editable: false,\n      searchable: false,\n      hidden: false,\n      defaultWidth: 100\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-routes-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/reconcile-routes-widget/config\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"moment\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _component, _config, _lodash, _mappedPermIds, _moment, _filters, _sorts, _environment, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable camelcase */\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['reconcile-routes-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    // @TODO: saveRecordFunction shall be moved to a service later on\n    // This save is specific to saving drivers and all related models.\n    // eslint-disable-next-line no-unused-vars\n    saveRecordFunction(records) {},\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('tableActions', []);\n      this.set('singleActions', [{\n        id: 'activityLog',\n        permId: _mappedPermIds.default.accessReconcileWorkspace,\n        name: 'Activity Log',\n        action: model => {\n          const routeName = model.get('routeName');\n          this.get('workspace').pushState('routeActivityLog', {\n            displayName: `Route ${routeName} Activity Log`,\n            route: (0, _unwrapProxy.unwrapProxy)(model)\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      }]);\n      this.set('bulkActions', []);\n    },\n\n    buildDataFilter() {\n      const selectedDate = this.get('dwhService.reconcileDate');\n      if (!selectedDate) return null;\n      const date = (0, _moment.default)(selectedDate).format(_environment.default.dateTimeFormat.dwhDate); // Missing follow fields from API\n      //   attributes.driverPhoneNumber,\n      //   attributes.odoStart,\n      //   attributes.odoEnd\n\n      const fields = `\n      id,\n      provider,\n      attributes.routeStatus,\n      attributes.routeName,\n      attributes.tenantId,\n      attributes.vehicleName,\n      attributes.driverId,\n      attributes.driverFirstName,\n      attributes.driverLastName,\n      attributes.type,\n      attributes.plannedStartTime,\n      attributes.plannedEndTime,\n      attributes.actualstarttime,\n      attributes.actualendtime`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const data = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields\n        }\n      };\n      return data;\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        const data = this.buildDataFilter();\n\n        if (data) {\n          params.data = data;\n          return this.query(modelName, params);\n        }\n\n        return Promise.resolve([]);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n\n      if (!this.get('activeContext.topActiveContext.unloadTask.isRunning')) {\n        const responseData = (await store.query(modelName, params)) || [];\n        const storeData = store.peekAll(modelName);\n\n        _lodash.default.differenceBy(storeData.toArray(), responseData.toArray(), i => {\n          return i.get('id');\n        }).forEach(record => {\n          record.transitionTo('deleted.saved');\n          record.unloadRecord();\n        });\n      }\n\n      const activeData = this.get('activeContext.topActiveContext').getActiveData();\n      const filteredData = activeData[modelName].filter(filterFn).sort(compareFn);\n      return filteredData;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-routes-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/reconcile-routes-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'dwh-route',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    title: 'Routes',\n    columns: [{\n      id: 'name',\n      type: 'text',\n      label: 'Name',\n      valuePath: 'routeName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'status',\n      type: 'text',\n      label: 'Status',\n      valuePath: 'routeStatus',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'provider',\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'type',\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'driverId',\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'driverFirstName',\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driverFirstName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'driverLastName',\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driverLastName',\n      defaultWidth: 85,\n      searchable: true\n    }, // {\n    //   id: 'driverPhoneNumber',\n    //   type: 'text',\n    //   label: 'Driver Phone Number',\n    //   valuePath: 'driverPhoneNumBer',\n    //   defaultWidth: 85,\n    //   searchable: true\n    // },\n    {\n      id: 'vehicleId',\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'plannedStartTime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Planned Start Time',\n      valuePath: 'plannedStartTime',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'plannedEndTime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Planned End Time',\n      valuePath: 'plannedEndTime',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'actualStartTime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Actual Start Time',\n      valuePath: 'actualstarttime',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'actualEndTime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Actual End Time',\n      valuePath: 'actualendtime',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    dwhService: Ember.inject.service(),\n    reconcileDate: Ember.computed.readOnly('dwhService.reconcileDate'),\n    selectedRoute: Ember.computed.alias('dwhService.selectedRoute'),\n    routeFound: Ember.computed.alias('dwhService.routeFound'),\n    routeToSelect: Ember.computed.alias('dwhService.routeToSelect'),\n    canSelect: Ember.computed('routeFound', function () {\n      const routeFound = Ember.get(this, 'routeFound');\n      if (routeFound && routeFound !== null) return true;\n      return false;\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      async onSelectRouteClick() {\n        const routeToSelect = this.get('routeToSelect');\n        this.set('selectedRoute', routeToSelect);\n        await this.get('dwhService.fetchTripsWithBreaks').perform(routeToSelect.id);\n        Ember.set(this, 'selectedSearchMode', null);\n        this.get('dwhService').toggleProperty('showSearchPopUp');\n      },\n\n      cancel() {\n        Ember.set(this, 'selectedSearchMode', null);\n        this.get('dwhService').toggleProperty('showSearchPopUp');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const header = 'iq-widgets/reconcile-search-mode-pop-up/table-header';\n  var _default = {\n    title: 'Reconcile',\n    component: 'iq-widgets/search-mode-pop-up/',\n    addressTableColumns: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'Trip Date',\n      valuePath: 'tripDate',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      component: header\n    }, {\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      width: '60px',\n      resizable: true,\n      minResizeWidth: 60,\n      component: header\n    }, {\n      label: 'Status',\n      valuePath: 'status',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80,\n      component: header\n    }, {\n      label: 'Client Name',\n      valuePath: 'passenger.fullName',\n      width: '147px',\n      resizable: true,\n      minResizeWidth: 147,\n      component: header\n    }, {\n      label: 'Pick Time',\n      valuePath: 'actualDepartTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80,\n      component: header\n    }, {\n      label: 'Drop Time',\n      valuePath: 'actualArrivalTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80,\n      component: header\n    }, {\n      label: 'Pick Address',\n      valuePath: 'stopDetails.pick.address.formattedAddress',\n      width: '270px',\n      resizable: true,\n      minResizeWidth: 279,\n      component: header\n    }, {\n      label: 'Drop Address',\n      valuePath: 'stopDetails.drop.address.formattedAddress',\n      width: '290px',\n      resizable: true,\n      minResizeWidth: 290,\n      component: header\n    }, {\n      label: 'Provider ID',\n      valuePath: 'route.providerName',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      component: header\n    }, {\n      label: 'Route ID',\n      valuePath: 'routeid',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      component: header\n    }],\n    clientTableColumns: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'ID',\n      valuePath: 'riderId',\n      resizable: true,\n      // width: '150px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Last Name',\n      valuePath: 'passengerLastName',\n      resizable: true,\n      // width: '170px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'First Name',\n      valuePath: 'passengerFirstName',\n      resizable: true,\n      // width: '170px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Phone',\n      valuePath: 'phoneNumber',\n      resizable: true,\n      // width: '150px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Address',\n      valuePath: 'stopAddress',\n      resizable: true,\n      // width: '278px',\n      minResizeWidth: 50,\n      component: header\n    }],\n    driverAndVehicleTableColumns: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'Provider ID',\n      valuePath: 'providerName',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Date',\n      valuePath: 'tripDate',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Zone',\n      valuePath: 'start.address.zone',\n      resizable: true,\n      width: '120px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Route ID',\n      valuePath: 'routeid',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Manual Trips Only',\n      valuePath: 'manualTripsOnly',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      resizable: true,\n      minResizeWidth: 50,\n      width: '85px',\n      component: header\n    }, {\n      label: 'Driver Start Time',\n      valuePath: 'actualStartTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      minResizeWidth: 50,\n      width: '115px',\n      component: header\n    }, {\n      label: 'Driver End Time',\n      valuePath: 'actualEndTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Shift',\n      valuePath: 'shiftLength',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Original Shift Start Time',\n      valuePath: 'formattedActualStartTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Shift Start Time',\n      valuePath: 'plannedStartTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Original Shift End Time',\n      valuePath: 'formattedActualEndTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Shift End Time',\n      valuePath: 'plannedEndTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dead Head Miles',\n      valuePath: 'deadHeadMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dead Head Time',\n      valuePath: 'deadHeadTime',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Revenue Miles',\n      valuePath: 'revenueMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Revenue Time',\n      valuePath: 'revenueTime',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Total Time',\n      valuePath: 'totalTime',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Mileage',\n      valuePath: 'odometerStart',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Mileage',\n      valuePath: 'odometerEnd',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Places ID',\n      valuePath: 'startPlacesID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'County',\n      valuePath: 'county',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      hidden: true,\n      component: header\n    }, {\n      label: 'Logged On',\n      valuePath: 'loggedOn',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Status',\n      valuePath: 'formattedStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Run Status',\n      valuePath: 'runStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Notes',\n      valuePath: 'notes',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Last Update',\n      valuePath: 'lastUpdate',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Status Date',\n      valuePath: 'statusDate',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Description',\n      valuePath: 'start.address.identifier',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start House Number',\n      valuePath: 'startHouseNumber',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Address1',\n      valuePath: 'start.address.formattedAddress',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Address2',\n      valuePath: 'startAddress2',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start State',\n      valuePath: 'startState',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start ZIP',\n      valuePath: 'startZIP',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Zone ID',\n      valuePath: 'start.address.zone',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start River Region',\n      valuePath: 'startRiverRegion',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Country',\n      valuePath: 'startCountry',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Directions',\n      valuePath: 'startDirections',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start GridX',\n      valuePath: 'startGridX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start GridY',\n      valuePath: 'startGridY',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Method',\n      valuePath: 'startMethod',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Map Page',\n      valuePath: 'startMapPage',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Mail',\n      valuePath: 'startMail',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Start Phone',\n      valuePath: 'driver.phoneNumber',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Places ID',\n      valuePath: 'endPlacesID',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Description',\n      valuePath: 'end.address.identifier',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End House Number',\n      valuePath: 'endHouseNumber',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Address1',\n      valuePath: 'end.address.formattedAddress',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Address2',\n      valuePath: 'endAddress2',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End City',\n      valuePath: 'endCity',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End State',\n      valuePath: 'endState',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End ZIP',\n      valuePath: 'endZIP',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Zone ID',\n      valuePath: 'end.address.zone',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End River Region',\n      valuePath: 'endRiverRegion',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End County',\n      valuePath: 'endCounty',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Directions',\n      valuePath: 'endDirections',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End GridX',\n      valuePath: 'endGridX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End GridY',\n      valuePath: 'endGridY',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Method',\n      valuePath: 'endMethod',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Mail',\n      valuePath: 'endMail',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Map Page',\n      valuePath: 'endMapPage',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'End Phone',\n      valuePath: 'driver.phoneNumber',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Route Type ID',\n      valuePath: 'routeTypeId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Breakdown Time',\n      valuePath: 'formattedBreakdownTime',\n      resizable: true,\n      width: '115px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Keeper',\n      valuePath: 'keeper',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Limit Per Hour',\n      valuePath: 'tripLimit',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Mile Limit Per Hour',\n      valuePath: 'maxMilesPerHour',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Startegy',\n      valuePath: 'startegy',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Driver Phone Number',\n      valuePath: 'driver.phoneNumber',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Version',\n      valuePath: 'version',\n      resizable: true,\n      width: '80px',\n      hidden: true,\n      minResizeWidth: 50,\n      component: header\n    }],\n    tripTableColumns: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Group ID',\n      valuePath: 'groupId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Subscription ID',\n      valuePath: 'SubscriptionId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Client ID',\n      valuePath: 'passenger.id',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Status',\n      valuePath: 'status',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip State',\n      valuePath: 'formattedStatus',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip to Work ID',\n      valuePath: 'triptoWorkId',\n      resizable: true,\n      minResizeWidth: 50,\n      width: '85px',\n      component: header\n    }, {\n      label: 'Trip Date',\n      valuePath: 'tripDate',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Zone',\n      valuePath: 'stopDetails.pick.address.zone',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Anchor',\n      valuePath: 'anchor',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Request Time',\n      valuePath: 'formattedRequestTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Promise Time',\n      valuePath: 'promisedTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Service Window ID',\n      valuePath: 'serviceWindowId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Previous Route ID',\n      valuePath: 'previousRouteId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Route ID',\n      valuePath: 'routeid',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Time',\n      valuePath: 'formattedPickupPromiseTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Time',\n      valuePath: 'formattedDropoffPromiseTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Original Pick Time',\n      valuePath: 'formattedPickupActualArriveTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Original Drop Time',\n      valuePath: 'formattedDropoffActualArriveTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Perform Pick up',\n      valuePath: 'performedPickup',\n      //stopDetails.pick.performed\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Perform Drop off',\n      valuePath: 'performedDropoff',\n      // stopDetails.drop.performed\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Callback',\n      valuePath: 'callBack',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Equipment',\n      valuePath: 'equipment',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Amb Seats',\n      valuePath: 'travelRequirements.ambulatory',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'WC Seats',\n      valuePath: 'travelRequirements.wheelChair',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'XWide',\n      valuePath: 'travelRequirements.wideWheelChair',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Vehicle Type ID',\n      valuePath: 'vehicleTypeId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Load Time',\n      valuePath: 'travelRequirements.loadTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Unload Time',\n      valuePath: 'travelRequirements.unloadTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Companions',\n      valuePath: 'travelRequirements.companion',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PCA',\n      valuePath: 'travelRequirements.pca',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Service Animals',\n      valuePath: 'travelRequirements.serviceAnimal',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Address',\n      valuePath: 'stopDetails.pick.address.formattedAddress',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Zone ID',\n      valuePath: 'stopDetails.pick.address.zone',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick GridX',\n      valuePath: 'pickGridX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick GridY',\n      valuePath: 'pickGridY',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Address',\n      valuePath: 'stopDetails.drop.address.formattedAddress',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Zone ID',\n      valuePath: 'stopDetails.drop.address.zone',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop GridX',\n      valuePath: 'dropGridX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop GridY',\n      valuePath: 'dropGridY',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Provider ID',\n      valuePath: 'route.providerName',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Fare',\n      valuePath: 'fare',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Wait Rate',\n      valuePath: 'waitRate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Mile Rate',\n      valuePath: 'mileRate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PCount',\n      valuePath: 'pCount',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'DCount',\n      valuePath: 'dCount',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Travel Direction',\n      valuePath: 'Pick Travel Direction',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Travel Direction',\n      valuePath: 'dropTravelDirection',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pmiles',\n      valuePath: 'pMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pmins',\n      valuePath: 'pMins',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dmiles',\n      valuePath: 'dMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dmins',\n      valuePath: 'dMins',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pwait',\n      valuePath: 'pWait',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dwait',\n      valuePath: 'dWait',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pgap',\n      valuePath: 'pGap',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dgap',\n      valuePath: 'dGap',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PTNX',\n      valuePath: 'pTNX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'DTNX',\n      valuePath: 'dTNX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Time',\n      valuePath: 'tripTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Miles',\n      valuePath: 'tripMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AP Time',\n      valuePath: 'formattedPickupActualDepartTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AP Time1',\n      valuePath: 'formattedPickupActualArriveTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AD Time',\n      valuePath: 'formattedDropoffActualDepartTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AD Time1',\n      valuePath: 'formattedDropoffActualArriveTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AP Miles',\n      valuePath: 'stopDetails.pick.odometerArrival',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AD Miles',\n      valuePath: 'stopDetails.drop.odometerArrival',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Wait Time',\n      valuePath: 'waitTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PComments',\n      valuePath: 'pComments',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'DComments',\n      valuePath: 'dComments',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Same Day Change',\n      valuePath: 'sameDayChange',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Status',\n      valuePath: 'stopDetails.pick.otpStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Status',\n      valuePath: 'stopDetails.drop.otpStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Order',\n      valuePath: 'stopDetails.pick.ordinal',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Order',\n      valuePath: 'stopDetails.drop.ordinal',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Charter Minutes',\n      valuePath: 'charterMinutes',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Create Date',\n      valuePath: 'formattedCreatedDate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Scheduled Pick up',\n      valuePath: 'scheduledPickup',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Scheduled Drop off',\n      valuePath: 'scheduledDropOff',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Booking Leg ID',\n      valuePath: 'bookingLegID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Segment Order',\n      valuePath: 'segmentOrder',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Itinerary ID',\n      valuePath: 'itineraryID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Travel Mode ID',\n      valuePath: 'travelModeID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Broker Eligible',\n      valuePath: 'brokerEligible',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Fare Type',\n      valuePath: 'price.type',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Arrive Type',\n      valuePath: 'stopDetails.pick.arriveType',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Arrive Type',\n      valuePath: 'stopDetails.drop.arriveType',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }],\n    clientTableColumnsSearch: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'Trip Id',\n      valuePath: 'tripId',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Group ID',\n      valuePath: 'groupId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Subscription ID',\n      valuePath: 'subscriptionId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Client ID',\n      valuePath: 'riderId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Status',\n      valuePath: 'status',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip State',\n      valuePath: 'formattedStatus',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Master Trip',\n      valuePath: 'masterTrip',\n      resizable: true,\n      minResizeWidth: 50,\n      width: '85px',\n      component: header\n    }, {\n      label: 'Trip to Work ID',\n      valuePath: 'externalTripId',\n      resizable: true,\n      minResizeWidth: 50,\n      width: '85px',\n      component: header\n    }, {\n      label: 'Non Stop',\n      valuePath: 'nonStop',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Date',\n      valuePath: 'tripDate',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Mode ID',\n      valuePath: 'tripModeId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Zone',\n      valuePath: 'stopDetails.pick.address.zone',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Anchor',\n      valuePath: 'anchor',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Request Time',\n      valuePath: 'formattedRequestTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Promise Time',\n      valuePath: 'formattedPromiseTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Service Window ID',\n      valuePath: 'serviceWindowId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Type',\n      valuePath: 'type',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Previous Route ID',\n      valuePath: 'previousRouteId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Route ID',\n      valuePath: 'routeid',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Time',\n      valuePath: 'serviceStartTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Time',\n      valuePath: 'serviceEndTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Original Pick Time',\n      valuePath: 'serviceStartTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Original Drop Time',\n      valuePath: 'serviceEndTime',\n      dataType: 'time',\n      format: 'hh:mm A',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Perform Pick up',\n      valuePath: 'performedPickup',\n      // stopDetails.pick.performed\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Perform Drop off',\n      valuePath: 'performedDropoff',\n      // stopDetails.drop.performed\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Callback',\n      valuePath: 'callBack',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Equipment',\n      valuePath: 'equipment',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Amb Seats',\n      valuePath: 'travelRequirements.ambulatory',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'WC Seats',\n      valuePath: 'travelRequirements.wheelChair',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'XWide',\n      valuePath: 'travelRequirements.wideWheelChair',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Vehicle Type ID',\n      valuePath: 'vehicleTypeId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Load Time',\n      valuePath: 'travelRequirements.loadTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Unload Time',\n      valuePath: 'travelRequirements.unloadTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Clients',\n      valuePath: 'clients',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Companions',\n      valuePath: 'travelRequirements.companion',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PCA',\n      valuePath: 'travelRequirements.pca',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Service Animals',\n      valuePath: 'travelRequirements.serviceAnimal',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Break Type ID',\n      valuePath: 'breakTypeId',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Description',\n      valuePath: 'pickDescription',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick House Number',\n      valuePath: 'pickHouseNumber',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Address1',\n      valuePath: 'stopDetails.pick.address.formattedAddress',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Address2',\n      valuePath: 'pickAddress2',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick City',\n      valuePath: 'pickCity',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick State',\n      valuePath: 'pickStatee',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick ZIP',\n      valuePath: 'pickZIP',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Zone ID',\n      valuePath: 'stopDetails.pick.address.zone',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick River Region',\n      valuePath: 'pickRiverRegion',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick County',\n      valuePath: 'pickCounty',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Directions',\n      valuePath: 'pickDirections',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick GridX',\n      valuePath: 'pickGridX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick GridY',\n      valuePath: 'pickGridY',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Method',\n      valuePath: 'pickMethod',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Map Page',\n      valuePath: 'pickMapPage',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Phone',\n      valuePath: 'pickPhone',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Description',\n      valuePath: 'dropDescription',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Address1',\n      valuePath: 'stopDetails.drop.address.formattedAddress',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Address2',\n      valuePath: 'dropAddress2',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop City',\n      valuePath: 'dropCity',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop State',\n      valuePath: 'dropState',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop ZIP',\n      valuePath: 'dropZIP',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Zone ID',\n      valuePath: 'stopDetails.drop.address.zone',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop River Region',\n      valuePath: 'dropRiverRegion',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop County',\n      valuePath: 'dropCounty',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Directions',\n      valuePath: 'dropDirections',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop GridX',\n      valuePath: 'dropGridX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop GridY',\n      valuePath: 'dropGridY',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Method',\n      valuePath: 'dropMethod',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Map Page',\n      valuePath: 'dropMapPage',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Phone',\n      valuePath: 'dropPhone',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Purpose ID',\n      valuePath: 'tripPurposeID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Agency',\n      valuePath: 'Agency',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Agency2',\n      valuePath: 'agency2',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Bill Code',\n      valuePath: 'billCode',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Provider ID',\n      valuePath: 'route.providerName',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Fare',\n      valuePath: 'price.fare',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Fare Collected',\n      valuePath: 'fareCollected',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pass',\n      valuePath: 'pass',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Contract',\n      valuePath: 'contract',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Wait Rate',\n      valuePath: 'waitRate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Mile Rate',\n      valuePath: 'mileRate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PCount',\n      valuePath: 'pCount',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'DCount',\n      valuePath: 'dCount',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Travel Direction',\n      valuePath: 'pickTravelDirection',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Travel Direction',\n      valuePath: 'dropTravelDirection',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pmiles',\n      valuePath: 'pMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pmins',\n      valuePath: 'pMins',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dmiles',\n      valuePath: 'dMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dmins',\n      valuePath: 'dMins',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pwait',\n      valuePath: 'pWait',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dwait',\n      valuePath: 'dWait',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pgap',\n      valuePath: 'pGap',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Dgap',\n      valuePath: 'dGap',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PTNX',\n      valuePath: 'pTNX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'DTNX',\n      valuePath: 'dTNX',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Time',\n      valuePath: 'tripTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AD Miles',\n      valuePath: 'stopDetails.drop.odometerArrival',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AP Miles',\n      valuePath: 'stopDetails.pick.odometerArrival',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Trip Miles',\n      valuePath: 'tripMiles',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AP Time',\n      valuePath: 'formattedPickupActualDepartTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AD Time',\n      valuePath: 'formattedDropoffActualDepartTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'AD Time1',\n      valuePath: 'formattedDropoffActualArriveTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Wait Time',\n      valuePath: 'waitTime',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'PComments',\n      valuePath: 'pComments',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'DComments',\n      valuePath: 'dComments',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Same Day Change',\n      valuePath: 'sameDayChange',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Status',\n      valuePath: 'stopDetails.pick.otpStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Status',\n      valuePath: 'stopDetails.drop.otpStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Order',\n      valuePath: 'stopDetails.pick.ordinal',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Order',\n      valuePath: 'stopDetails.drop.ordinal',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Charter Minutes',\n      valuePath: 'charterMinutes',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Create Date',\n      valuePath: 'formattedCreatedDate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Last Update',\n      valuePath: 'lastUpdate',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Scheduled Pick up',\n      valuePath: 'scheduledPickup',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Scheduled Drop off',\n      valuePath: 'scheduledDropOff',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Booking Leg ID',\n      valuePath: 'bookingLegID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Segment Order',\n      valuePath: 'segmentOrder',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Itinerary ID',\n      valuePath: 'itineraryID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Travel Mode ID',\n      valuePath: 'travelModeID',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Version',\n      valuePath: 'version',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Broker Eligible',\n      valuePath: 'brokerEligible',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Fare Type',\n      valuePath: 'price.type',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Pick Arrive Type',\n      valuePath: 'stopDetails.pick.arriveType',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'Drop Arrive Type',\n      valuePath: 'stopDetails.drop.arriveType',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }, {\n      label: 'MultiSegment',\n      valuePath: 'multiSegment',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50,\n      component: header\n    }],\n    trip: {\n      model: 'reconcile-trip',\n      indexPath: 'tripId'\n    },\n    passenger: {\n      model: 'reconcile-passenger',\n      indexPath: 'passengerId'\n    },\n    driver: {\n      model: 'reconcile-driver',\n      indexPath: 'driverId'\n    },\n    vehicle: {\n      model: 'reconcile-vehicle',\n      indexPath: 'vehicleId'\n    },\n    stop: {\n      model: 'reconcile-stop',\n      indexPath: 'address.formattedAddress'\n    },\n    route: {\n      model: 'reconcile-route',\n      indexPath: 'routeId'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/config\"], function (_exports, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PICK_TYPE = 'Pick';\n  const DROP_TYPE = 'Drop';\n\n  var _default = Ember.Component.extend({\n    reconcileLambda: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    selectedAddress: null,\n    addressTable: null,\n    searchButtonEnabled: Ember.computed.empty('selectedAddress'),\n    clearButtonEnabled: Ember.computed.empty('selectedAddress'),\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'selectedRadioValue', 'pick');\n      this.set('fetchRoutesByAddress', this.get('fetchRoutesByAddress').bind(this));\n      this.set('config.title', '');\n    },\n\n    async fetchRoutesByAddress() {\n      const address = this.get('selectedAddress.streetNumber');\n      const searchMode = this.get('selectedSearchMode');\n\n      if (!address || !searchMode) {\n        return [];\n      }\n\n      let routes = await this.reconcileLambda.getReconcileRoutesAndTripsInfoByAddress.perform(searchMode, address);\n      routes = this.computeFullName(routes);\n\n      if (!routes.length) {\n        this.set('config.title', '');\n        this.set('config.noRecordsFound', true);\n      } else {\n        this.set('config.title', `${Ember.String.capitalize(searchMode)}`);\n        this.set('config.noRecordsFound', false);\n      }\n\n      const updatedResponse = routes.map(res => {\n        if (res.type === PICK_TYPE) {\n          return { ...res,\n            tripDate: this.get('reconcile.reconcileDate'),\n            pickAddress: res.stopAddress\n          };\n        }\n\n        if (res.type === DROP_TYPE) {\n          return { ...res,\n            tripDate: this.get('reconcile.reconcileDate'),\n            dropAddress: res.stopAddress\n          };\n        }\n      });\n      return updatedResponse;\n    },\n\n    computeFullName(response) {\n      return response.map(address => {\n        const firstName = address.passengerFirstName ? address.passengerFirstName : '';\n        const lastName = address.passengerLastName ? address.passengerLastName : '';\n        const fullName = `${firstName} ${lastName}`;\n        address.fullName = fullName;\n        return address;\n      });\n    },\n\n    actions: {\n      onChangeLocation(record) {\n        Ember.set(this, 'selectedAddress', record);\n      },\n\n      async onSearchRoutesByAddress() {\n        this.get('addressTable').refreshData();\n      },\n\n      clearSearchAddress() {\n        Ember.set(this, 'selectedAddress', null);\n        this.get('addressTable').clearData();\n        this.set('config.title', '');\n        this.set('config.noRecordsFound', false);\n        this.set('routeId', null);\n      },\n\n      onRadioButtonClick(val) {\n        this.set('selectedRadioValue', val);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Matching Trips',\n    defaultSortId: 'tripId',\n    defaultSortAsc: true,\n    reconcileSearchTables: true,\n    showSelectedRowLength: false,\n    noRecordsFound: false,\n    columns: [{\n      label: 'Trip Date',\n      id: 'tripDate',\n      valuePath: 'tripDate',\n      index: 0,\n      type: 'text',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      searchable: true\n    }, {\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      id: 'tripId',\n      index: 1,\n      type: 'text',\n      width: '60px',\n      resizable: true,\n      minResizeWidth: 60,\n      searchable: true\n    }, {\n      id: 'status',\n      index: 2,\n      label: 'Status',\n      type: 'text',\n      valuePath: 'status',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80,\n      searchable: true\n    }, {\n      id: 'clientName',\n      index: 3,\n      type: 'text',\n      label: 'Client Name',\n      valuePath: 'fullName',\n      width: '147px',\n      resizable: true,\n      minResizeWidth: 147,\n      searchable: true\n    }, {\n      id: 'actualDepartTime',\n      index: 4,\n      type: 'time',\n      label: 'Pick Time',\n      valuePath: 'actualDepartTime',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80\n    }, {\n      id: 'actualArrivalTime',\n      index: 5,\n      type: 'time',\n      label: 'Drop Time',\n      valuePath: 'actualArrivalTime',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80\n    }, {\n      id: 'pickAddress',\n      index: 6,\n      type: 'text',\n      label: 'Pick Address',\n      valuePath: 'pickAddress',\n      width: '270px',\n      resizable: true,\n      minResizeWidth: 279\n    }, {\n      id: 'dropAddress',\n      index: 7,\n      type: 'text',\n      label: 'Drop Address',\n      valuePath: 'dropAddress',\n      width: '290px',\n      resizable: true,\n      minResizeWidth: 290\n    }, {\n      id: 'providerName',\n      index: 8,\n      type: 'text',\n      label: 'Provider ID',\n      valuePath: 'providerName',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100\n    }, {\n      id: 'routeId',\n      index: 9,\n      type: 'text',\n      label: 'Route ID',\n      valuePath: 'routeid',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"guDo/MM/\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"address-select\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"isHidePicker\\\",\\\"canResetAddress\\\",\\\"onAddressSearch\\\",\\\"selectAddress\\\"],[true,[23,[\\\"canResetAddress\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeLocation\\\"],null],[23,[\\\"selectedAddress\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"pick\\\",[23,[\\\"selectedRadioValue\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"pick\\\"],null],\\\"radio-button-input mt-1 ml-4\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[9],[0,\\\"Pick Address\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"drop\\\",[23,[\\\"selectedRadioValue\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"drop\\\"],null],\\\"radio-button-input mt-1 ml-3\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[9],[0,\\\"Drop Address\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mr-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-4\\\"],[9],[0,\\\"Trip Date\\\"],[10],[0,\\\"\\\\n    \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"class\\\",\\\"locale\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"disabled\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"custom-input width-100 date-field\\\",\\\"en\\\",\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",true,[23,[\\\"reconcileDate\\\"]],[23,[\\\"selectedDateTimeRange\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRange\\\",\\\"today\\\"]],null]]],false],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-gray address-search-button\\\"],[12,\\\"disabled\\\",[21,\\\"searchButtonEnabled\\\"]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\" Search\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchRoutesByAddress\\\"]],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[12,\\\"disabled\\\",[21,\\\"clearButtonEnabled\\\"]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Clear All\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"clearSearchAddress\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"fetchReconcileSearchRoutes\\\",\\\"onReconcileRowClick\\\"],[[23,[\\\"addressTable\\\"]],[23,[\\\"config\\\"]],[23,[\\\"fetchRoutesByAddress\\\"]],[23,[\\\"onRowClick\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-address/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/client-config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Client',\n    defaultSortId: 'tripId',\n    defaultSortAsc: true,\n    reconcileSearchTables: true,\n    showSelectedRowLength: false,\n    noRecordsFound: false,\n    columns: [{\n      id: 'riderId',\n      index: 0,\n      type: 'text',\n      label: 'ID',\n      valuePath: 'riderId',\n      resizable: true,\n      // width: '150px',\n      minResizeWidth: 50\n    }, {\n      id: 'passengerLastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'passengerLastName',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      id: 'passengerFirstName',\n      index: 2,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'passengerFirstName',\n      resizable: true,\n      // width: '170px',\n      minResizeWidth: 50\n    }, {\n      id: 'phoneNumber',\n      index: 3,\n      type: 'text',\n      label: 'Phone',\n      valuePath: 'phoneNumber',\n      resizable: true,\n      // width: '150px',\n      minResizeWidth: 50\n    }, {\n      id: 'stopAddress',\n      index: 4,\n      type: 'text',\n      label: 'Address',\n      valuePath: 'stopAddress',\n      resizable: true,\n      // width: '278px',\n      minResizeWidth: 50\n    }, {\n      id: 'city',\n      index: 5,\n      type: 'text',\n      label: 'City',\n      valuePath: 'city',\n      resizable: true,\n      // width: '278px',\n      minResizeWidth: 50\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/client-search-config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Search',\n    defaultSortId: 'tripId',\n    defaultSortAsc: true,\n    reconcileSearchTables: true,\n    showSelectedRowLength: false,\n    noRecordsFound: false,\n    columns: [{\n      id: 'tripId',\n      index: 0,\n      type: 'text',\n      label: 'Trip Id',\n      valuePath: 'tripId',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      id: 'groupId',\n      index: 1,\n      type: 'text',\n      label: 'Group ID',\n      valuePath: 'groupId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'subscriptionId',\n      index: 2,\n      type: 'text',\n      label: 'Subscription ID',\n      valuePath: 'subscriptionId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'riderId',\n      index: 3,\n      type: 'text',\n      label: 'Client ID',\n      valuePath: 'riderId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'status',\n      index: 4,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50\n    }, {\n      id: 'tripdate',\n      index: 5,\n      type: 'date',\n      label: 'Trip Date',\n      valuePath: 'tripDate',\n      resizable: true,\n      minResizeWidth: 50,\n      width: '85px'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/client-config\", \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/client-search-config\"], function (_exports, _clientConfig, _clientSearchConfig) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CLIENT_FIELD_MAPPER = {\n    selectedClientId: 'clientId',\n    selectedFirstName: 'firstName',\n    selectedLastName: 'lastName'\n  };\n\n  var _default = Ember.Component.extend({\n    reconcileLambda: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    clientTable: null,\n    clientTableSearch: null,\n    selectedClientId: null,\n    selectedFirstName: null,\n    selectedLastName: null,\n    addressTable: null,\n    clientConfig: _clientConfig.default,\n    clientSearchConfig: _clientSearchConfig.default,\n    canSearchClientTrips: Ember.computed.notEmpty('selectedClientIdFromTable'),\n    canEnableSearchAndClear: Ember.computed.or('selectedClientId', 'selectedFirstName', 'selectedLastName'),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('fetchClients', this.get('fetchClients').bind(this));\n      this.set('fetchRoutesByClient', this.get('fetchRoutesByClient').bind(this));\n      this.set('onRowClickSetClient', this.get('onRowClickSetClient').bind(this));\n      this.set('clientConfig.title', '');\n      this.set('clientSearchConfig.title', '');\n    },\n\n    isClientValueChanged() {\n      const clientFields = Object.keys(CLIENT_FIELD_MAPPER);\n      return clientFields.some(field => Ember.isPresent(this.get(field)));\n    },\n\n    async fetchClients() {\n      if (!this.get('selectedSearchMode') || !this.isClientValueChanged()) {\n        return [];\n      }\n\n      const searchMode = this.get('selectedSearchMode').toLowerCase();\n      const queryParams = {};\n      Object.keys(CLIENT_FIELD_MAPPER).forEach(clientField => {\n        const clientFieldKey = CLIENT_FIELD_MAPPER[clientField];\n        const clientFieldValue = this.get(clientField);\n\n        if (clientFieldValue) {\n          queryParams[clientFieldKey] = clientFieldValue;\n        }\n      });\n      const clients = await this.reconcileLambda.getReconcileRoutesAndTripsInfoByClientId.perform(searchMode, queryParams);\n\n      if (!clients.length) {\n        this.set('clientConfig.title', '');\n        this.set('clientConfig.noRecordsFound', true);\n      } else {\n        this.set('clientConfig.title', `${Ember.String.capitalize(searchMode)}`);\n        this.set('clientConfig.noRecordsFound', false);\n      }\n\n      return clients;\n    },\n\n    async fetchRoutesByClient() {\n      const clientId = this.get('selectedClientIdFromTable');\n\n      if (!this.get('selectedSearchMode') || !clientId) {\n        return [];\n      }\n\n      const searchMode = this.get('selectedSearchMode').toLowerCase();\n      const routes = await this.reconcileLambda.getReconcileTripsInfoByClientId.perform(searchMode, clientId);\n\n      if (!routes.length) {\n        this.set('clientSearchConfig.title', '');\n        this.set('clientSearchConfig.noRecordsFound', true);\n      } else {\n        this.set('clientSearchConfig.title', 'Client Trips');\n        this.set('clientSearchConfig.noRecordsFound', false);\n      }\n\n      const updatedResponse = routes.map(res => {\n        return { ...res,\n          tripDate: this.get('reconcile.reconcileDate')\n        };\n      });\n      return updatedResponse;\n    },\n\n    onRowClickSetClient(row) {\n      this.set('selectedClientIdFromTable', row.get('riderId'));\n    },\n\n    updateSearchProperty(value, item) {\n      Ember.set(this, item, value);\n      this.notifyPropertyChange(item);\n    },\n\n    actions: {\n      onSearchRoutesByClient() {\n        this.set('selectedClientIdFromTable', null);\n        this.get('clientTable').refreshData();\n      },\n\n      onSearchByClient() {\n        this.get('clientTableSearch').refreshData();\n      },\n\n      clearSearchClient() {\n        this.setProperties({\n          selectedClientId: null,\n          selectedFirstName: null,\n          selectedLastName: null,\n          selectedClientIdFromTable: null\n        });\n        this.get('clientTable').clearData();\n        this.get('clientTableSearch').clearData();\n        this.set('clientConfig.title', '');\n        this.set('clientSearchConfig.title', '');\n        this.set('clientConfig.noRecordsFound', false);\n        this.set('clientSearchConfig.noRecordsFound', false);\n        this.set('routeId', null);\n      },\n\n      onInputTextChange(valuePath, searchText) {\n        Ember.run.debounce(this, 'updateSearchProperty', searchText, valuePath, 200);\n        this.set('clientConfig.noRecordsFound', false);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"rM6nRvrk\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Client ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"custom-input width-100\\\"],[11,\\\"maxlength\\\",\\\"25\\\"],[11,\\\"pattern\\\",\\\"^[0–9]$\\\"],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedClientId\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputTextChange\\\",\\\"selectedClientId\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex ml-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"custom-input width-130\\\"],[11,\\\"maxlength\\\",\\\"25\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedLastName\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputTextChange\\\",\\\"selectedLastName\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex ml-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"custom-input width-130\\\"],[11,\\\"maxlength\\\",\\\"25\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedFirstName\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputTextChange\\\",\\\"selectedFirstName\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEnableSearchAndClear\\\"]]],null]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchRoutesByClient\\\"]],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEnableSearchAndClear\\\"]]],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Clear All\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"clearSearchClient\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"fetchReconcileSearchRoutes\\\",\\\"onReconcileRowClick\\\"],[[23,[\\\"clientTable\\\"]],[23,[\\\"clientConfig\\\"]],[23,[\\\"fetchClients\\\"]],[23,[\\\"onRowClickSetClient\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center my-4 font-12\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Choose a Client by clicking on them\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex ml-5\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Trip Date\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"class\\\",\\\"locale\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"disabled\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"custom-input date-input date-field\\\",\\\"en\\\",\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",false,true,[23,[\\\"reconcileDate\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],null]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSearchClientTrips\\\"]]],null]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchByClient\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"fetchReconcileSearchRoutes\\\",\\\"onReconcileRowClick\\\"],[[23,[\\\"clientTableSearch\\\"]],[23,[\\\"clientSearchConfig\\\"]],[23,[\\\"fetchRoutesByClient\\\"]],[23,[\\\"onRowClick\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-client/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/config\", \"lodash\"], function (_exports, _config, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    dwhService: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    driverTable: null,\n    selectedDriver: null,\n    selectedCdl: null,\n    searchButtonEnabled: Ember.computed.or('selectedDriver', 'selectedCdl'),\n    clearButtonEnabled: Ember.computed.or('selectedDriver', 'selectedCdl'),\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('onRowClick', this.actions.onRowClick.bind(this));\n      this.set('fetchRoutesByDriver', this.get('fetchRoutesByDriver').bind(this));\n      this.set('config.title', '');\n    },\n\n    driverOptions: Ember.computed.alias('dwhService.driverOptions'),\n\n    fetchRoutesByDriver() {\n      const routes = this.get('dwhService.routes');\n      const selectedDriverId = this.get('selectedDriver.badgenumber');\n      if (!selectedDriverId) return [];\n      return routes.filter(r => _lodash.default.get(r, 'attributes.driverId') === selectedDriverId);\n    },\n\n    actions: {\n      onRowClick(selectedRow) {\n        if (Ember.isEmpty(selectedRow)) return;\n        const routeId = selectedRow.get('id');\n        this.set('dwhService.routeFound', routeId);\n      },\n\n      onSearchRoutesByDriver() {\n        if (this.selectedDriver && this.selectedCdl) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Search',\n            tip: 'Both Driver and CDL Number can not be supplied. Choose one or the other.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              tooltip.reset();\n            },\n            hasOverlay: true\n          });\n        }\n\n        this.get('driverTable').refreshData();\n      },\n\n      onOptionsSelect(item, option) {\n        Ember.set(this, item, option);\n      },\n\n      clearSearchDriver() {\n        this.set('selectedDriver', '');\n        this.get('driverTable').clearData();\n        this.set('config.title', '');\n        this.set('config.noRecordsFound', false);\n        this.set('routeId', null);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Driver',\n    defaultSortId: 'driverId',\n    defaultSortAsc: true,\n    reconcileSearchTables: true,\n    showSelectedRowLength: false,\n    noRecordsFound: false,\n    columns: [{\n      label: 'Provider ID',\n      id: 'providerName',\n      valuePath: 'provider',\n      width: '85px',\n      index: 0,\n      type: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      searchable: true\n    }, {\n      label: 'Trip Date',\n      id: 'tripDate',\n      valuePath: 'attributes.schedulename',\n      index: 1,\n      type: 'text',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      searchable: true\n    }, {\n      label: 'Zone',\n      id: 'zone',\n      valuePath: 'zoneName',\n      index: 2,\n      type: 'text',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      searchable: true\n    }, {\n      label: 'Route ID',\n      id: 'routeid',\n      valuePath: 'id',\n      index: 3,\n      type: 'number',\n      width: '60px',\n      resizable: true,\n      minResizeWidth: 60,\n      searchable: true\n    }, {\n      id: 'routeType',\n      label: 'Route Type',\n      valuePath: 'attributes.type',\n      index: 4,\n      type: 'text',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80,\n      searchable: true\n    }, {\n      id: 'driverId',\n      index: 5,\n      type: 'number',\n      label: 'Driver ID',\n      valuePath: 'attributes.driverId',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 147,\n      searchable: true\n    }, {\n      id: 'vehicleId',\n      index: 6,\n      type: 'number',\n      label: 'Vehicle ID',\n      valuePath: 'attributes.vehicleName',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 147,\n      searchable: true\n    }, {\n      label: 'Actual Start Time',\n      id: 'actualStartTime',\n      valuePath: 'attributes.actualstarttime',\n      index: 7,\n      type: 'time',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80\n    }, {\n      label: 'Actual End Time',\n      id: 'actualDepartTime',\n      valuePath: 'attributes.actualendtime',\n      index: 8,\n      type: 'time',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"M8+MwPmA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mr-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Driver\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"width-160\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"badgenumber\\\",true,[23,[\\\"selectedDriver\\\"]],[23,[\\\"driverOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onOptionsSelect\\\",\\\"selectedDriver\\\"],null]],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,1,[\\\"badgenumber\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mr-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"CDL\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"custom-input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedCdl\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedCdl\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mr-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Trip Date\\\"],[10],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"class\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"disabled\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"custom-input date-input date-field\\\",\\\"en\\\",1,false,false,\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",true,[23,[\\\"reconcileDate\\\"]],null]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"searchButtonEnabled\\\"]]],null]],[11,\\\"class\\\",\\\"btn-gray\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchRoutesByDriver\\\"]],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"clearButtonEnabled\\\"]]],null]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Clear All\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"clearSearchDriver\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"fetchTableData\\\",\\\"onReconcileRowClick\\\"],[[23,[\\\"driverTable\\\"]],[23,[\\\"config\\\"]],[23,[\\\"fetchRoutesByDriver\\\"]],[23,[\\\"onRowClick\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-driver/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DOWNLOAD_ACTION = 'Download';\n\n  var _default = _component.default.extend({\n    reconcileLambda: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    workspace: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      const tableActions = this.get('tableActions');\n      this.set('tableActions', tableActions.filter(tableAction => tableAction.name !== DOWNLOAD_ACTION));\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      if (!this.get('fetchTableData')) {\n        return [];\n      }\n\n      return this.get('fetchTableData')();\n    },\n\n    actions: {\n      onRowClick(row, event) {\n        this._super(row, event);\n\n        if (this.get('onReconcileRowClick')) {\n          this.get('onReconcileRowClick')(row);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/config\", \"moment\", \"lodash\"], function (_exports, _config, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    config: _config.default,\n    dwhService: Ember.inject.service(),\n    tripTable: null,\n    selectedTripId: null,\n    selectedRow: null,\n    searchButtonEnabled: Ember.computed.empty('selectedTripId'),\n    clearButtonEnabled: Ember.computed.empty('selectedTripId'),\n    routeOptions: Ember.computed.alias('dwhService.routeOptions'),\n    routeToSelect: Ember.computed('routeOptions', 'selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      if (Ember.isEmpty(selectedRow)) return;\n\n      const routeId = _lodash.default.get(selectedRow, 'attributes.routeId', null);\n\n      if (!routeId) return;\n      const routeOption = this.get('routeOptions').find(route => `${route.id}` === `${routeId}`);\n      return routeOption;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('fetchTripsByDateAndTripId', this.get('fetchTripsByDateAndTripId').bind(this));\n      this.set('onRowClick', this.actions.onRowClick.bind(this));\n      this.set('config.title', '');\n    },\n\n    updateSearchProperty(value, item) {\n      Ember.set(this, item, value);\n      this.notifyPropertyChange(item);\n    },\n\n    async fetchTripsByDateAndTripId() {\n      const selectedTripId = this.get('selectedTripId');\n      const searchMode = this.get('selectedSearchMode');\n\n      if (!selectedTripId || !searchMode) {\n        return [];\n      }\n\n      const date = this.get('dwhService.reconcileDate');\n      const dateString = (0, _moment.default)(date).format('YYYY-MM-DD');\n      const trips = await this.get('dwhService').findTripsByDateAndTripId(dateString, selectedTripId);\n      return trips;\n    },\n\n    actions: {\n      onRowClick(selectedRow) {\n        if (Ember.isEmpty(selectedRow)) return;\n        const routeId = selectedRow.get('attributes.routeId');\n        this.set('dwhService.routeFound', routeId);\n      },\n\n      onSearchRoutesByTrip() {\n        this.get('tripTable').refreshData();\n      },\n\n      onInputTextChange(valuePath, searchText) {\n        Ember.run.debounce(this, 'updateSearchProperty', searchText, valuePath, 200);\n      },\n\n      clearSearchTrip() {\n        this.set('selectedTripId', null);\n        this.get('tripTable').clearData();\n        this.set('config.title', '');\n        this.set('config.noRecordsFound', false);\n        this.set('routeId', null);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    defaultSortId: 'vehicleId',\n    defaultSortAsc: true,\n    reconcileSearchTables: true,\n    showSelectedRowLength: false,\n    noRecordsFound: false,\n    routeIdValuePath: 'attributes.routeId',\n    columns: [{\n      id: 'tripId',\n      index: 0,\n      type: 'number',\n      label: 'Trip ID',\n      valuePath: 'id',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      id: 'tripDate',\n      index: 1,\n      type: 'text',\n      label: 'Trip Date',\n      valuePath: 'attributes.schedulename',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'SubscriptionId',\n      index: 2,\n      type: 'text',\n      label: 'Subscription ID',\n      valuePath: 'attributes.subscriptionId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'groupId',\n      index: 3,\n      type: 'text',\n      label: 'Group ID',\n      valuePath: 'attributes.groupId',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'passengerId',\n      index: 4,\n      type: 'number',\n      label: 'Client ID',\n      valuePath: 'attributes.rider.id',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'lastname',\n      index: 5,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'attributes.rider.attributes.lastName',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'firstname',\n      index: 6,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'attributes.rider.attributes.firstName',\n      resizable: true,\n      width: '85px',\n      minResizeWidth: 50\n    }, {\n      id: 'status',\n      index: 7,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'attributes.tripStatus',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50\n    }, {\n      id: 'routeId',\n      index: 8,\n      type: 'number',\n      label: 'Route ID',\n      valuePath: 'attributes.routeName',\n      resizable: true,\n      width: '80px',\n      minResizeWidth: 50\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"RyvmhiZA\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Trip ID\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"custom-input\\\"],[11,\\\"maxlength\\\",\\\"25\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedTripId\\\"]]],null]],[11,\\\"pattern\\\",\\\"^[0–9]$\\\"],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputTextChange\\\",\\\"selectedTripId\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2 date-field-label\\\"],[9],[0,\\\"Trip Date\\\"],[10],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"class\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"disabled\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"custom-input date-input date-field\\\",\\\"en\\\",1,false,false,\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",true,[23,[\\\"reconcileDate\\\"]],null]]],false],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"searchButtonEnabled\\\"]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchRoutesByTrip\\\"]],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"clearButtonEnabled\\\"]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Clear All\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"clearSearchTrip\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"fetchTableData\\\",\\\"onReconcileRowClick\\\"],[[23,[\\\"tripTable\\\"]],[23,[\\\"config\\\"]],[23,[\\\"fetchTripsByDateAndTripId\\\"]],[23,[\\\"onRowClick\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-trip/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/config\", \"lodash\"], function (_exports, _config, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    dwhService: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    vehicleTable: null,\n    selectedVehicle: null,\n    searchButtonEnabled: Ember.computed.empty('selectedVehicle'),\n    clearButtonEnabled: Ember.computed.empty('selectedVehicle'),\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('onRowClick', this.actions.onRowClick.bind(this));\n      this.set('fetchRoutesByVehicle', this.get('fetchRoutesByVehicle').bind(this));\n      this.set('config.title', '');\n    },\n\n    vehicleOptions: Ember.computed.alias('dwhService.vehicleOptions'),\n\n    fetchRoutesByVehicle() {\n      const routes = this.get('dwhService.routes');\n      const selectedVehicleName = this.get('selectedVehicle.callsign');\n      if (!selectedVehicleName) return [];\n      return routes.filter(r => _lodash.default.get(r, 'attributes.vehicleName') === selectedVehicleName);\n    },\n\n    actions: {\n      onRowClick(selectedRow) {\n        if (Ember.isEmpty(selectedRow)) return;\n        const routeId = selectedRow.get('id');\n        this.set('dwhService.routeFound', routeId);\n      },\n\n      onSearchRoutesByVehicle() {\n        this.get('vehicleTable').refreshData();\n      },\n\n      onOptionsSelect(item, option) {\n        Ember.set(this, item, option);\n      },\n\n      clearSearchVehicle() {\n        this.set('selectedVehicle', '');\n        this.get('vehicleTable').clearData();\n        this.set('config.title', '');\n        this.set('config.noRecordsFound', false);\n        this.set('routeId', null);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    defaultSortId: 'vehicleId',\n    defaultSortAsc: true,\n    reconcileSearchTables: true,\n    showSelectedRowLength: false,\n    noRecordsFound: false,\n    columns: [{\n      label: 'Provider ID',\n      width: '85px',\n      id: 'providerName',\n      valuePath: 'provider',\n      index: 0,\n      type: 'text',\n      resizable: true,\n      minResizeWidth: 50,\n      searchable: true\n    }, {\n      label: 'Trip Date',\n      id: 'tripDate',\n      valuePath: 'attributes.schedulename',\n      index: 1,\n      type: 'text',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      searchable: true\n    }, {\n      label: 'Route ID',\n      id: 'routeId',\n      valuePath: 'attributes.routeName',\n      index: 2,\n      type: 'number',\n      width: '60px',\n      resizable: true,\n      minResizeWidth: 60,\n      searchable: true\n    }, {\n      label: 'Route Type',\n      id: 'routeType',\n      valuePath: 'attributes.type',\n      index: 3,\n      type: 'text',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 100,\n      searchable: true\n    }, {\n      id: 'driverId',\n      index: 4,\n      type: 'number',\n      label: 'Driver ID',\n      valuePath: 'attributes.driverId',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 147,\n      searchable: true\n    }, {\n      id: 'vehicleId',\n      index: 5,\n      type: 'number',\n      label: 'Vehicle ID',\n      valuePath: 'attributes.vehicleName',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 147,\n      searchable: true\n    }, {\n      label: 'Actual Start Time',\n      id: 'actualStartTime',\n      valuePath: 'attributes.actualstarttime',\n      index: 6,\n      type: 'time',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80\n    }, {\n      label: 'Actual End Time',\n      id: 'actualEndTime',\n      valuePath: 'attributes.actualendtime',\n      index: 7,\n      type: 'time',\n      format: 'hh:mm A',\n      width: '80px',\n      resizable: true,\n      minResizeWidth: 80\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"aIe1qm6e\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mr-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2\\\"],[9],[0,\\\"Vehicle\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"vehicle-dropdown width-160\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"callsign\\\",true,[23,[\\\"selectedVehicle\\\"]],[23,[\\\"vehicleOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onOptionsSelect\\\",\\\"selectedVehicle\\\"],null]],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,1,[\\\"callsign\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center mr-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"custom-label mr-2 \\\"],[9],[0,\\\"Trip Date\\\"],[10],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"class\\\",\\\"locale\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"disabled\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"custom-input date-input date-field\\\",\\\"en\\\",\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",false,true,[23,[\\\"reconcileDate\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],null]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"searchButtonEnabled\\\"]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchRoutesByVehicle\\\"]],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"clearButtonEnabled\\\"]],[11,\\\"class\\\",\\\"btn-gray ml-4\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Clear All\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"clearSearchVehicle\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-mode-table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"fetchTableData\\\",\\\"onReconcileRowClick\\\"],[[23,[\\\"vehicleTable\\\"]],[23,[\\\"config\\\"]],[23,[\\\"fetchRoutesByVehicle\\\"]],[23,[\\\"onRowClick\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/reconcile-search-vehicle/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/table-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['reconcile-table-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/table-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eKP+GcFM\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/table-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Cy/TJnL3\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget reconcile-search-mode-pop-up reconcile-widget-base\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dialog-box search-popup\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"confirm-dialog-unsuccessful\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center justify-content-between\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[0,\\\"Search\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"btn-close\\\"],[9],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/icons/ic-close-line.svg\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"iq-widgets/reconcile-search-mode-pop-up/reconcile-search-\\\",[23,[\\\"selectedSearchMode\\\"]]],null]],[[\\\"selectedSearchMode\\\",\\\"reconcileDate\\\",\\\"routeId\\\"],[[23,[\\\"selectedSearchMode\\\"]],[23,[\\\"reconcileDate\\\"]],[23,[\\\"routeId\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-3 text-right search-button-position\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-gray\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSelect\\\"]]],null]],[9],[0,\\\"Select\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectRouteClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-search-mode-pop-up/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-stops-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/reconcile-stops-widget/config\", \"lodash\", \"moment\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\", \"adept-iq/config/environment\"], function (_exports, _component, _config, _lodash, _moment, _filters, _sorts, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable camelcase */\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['reconcile-stops-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    // @TODO: saveRecordFunction shall be moved to a service later on\n    // This save is specific to saving drivers and all related models.\n    // eslint-disable-next-line no-unused-vars\n    saveRecordFunction(records) {},\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('tableActions', []);\n      this.set('singleActions', []);\n      this.set('bulkActions', []);\n    },\n\n    buildDataFilter() {\n      const selectedDate = this.get('dwhService.reconcileDate');\n      if (!selectedDate) return null;\n      const date = (0, _moment.default)(selectedDate).format(_environment.default.dateTimeFormat.dwhDate);\n      const fields = `\n      id,\n      provider,\n      attributes.iqid,\n      attributes.stoptype,\n      attributes.tripId,\n      attributes.routeid,\n      attributes.routename,\n      attributes.routeordinal,\n      attributes.tenantId,\n      attributes.requesttime,\n      attributes.promisetime,\n      attributes.passengerfirstname,\n      attributes.passengerlastname,\n      attributes.streetnumber,\n      attributes.streetaddress,\n      attributes.sublocality,\n      attributes.locality,\n      attributes.subregion,\n      attributes.region,\n      attributes.postalcode,\n      attributes.actualodometer,\n      attributes.actualarrivetime,\n      attributes.actualdeparttime`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const data = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields\n        }\n      };\n      return data;\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        const data = this.buildDataFilter();\n\n        if (data) {\n          params.data = data;\n          return this.query(modelName, params);\n        }\n\n        return Promise.resolve([]);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n\n      if (!this.get('activeContext.topActiveContext.unloadTask.isRunning')) {\n        const responseData = (await store.query(modelName, params)) || [];\n        const storeData = store.peekAll(modelName);\n\n        _lodash.default.differenceBy(storeData.toArray(), responseData.toArray(), i => {\n          return i.get('id');\n        }).forEach(record => {\n          store.unloadRecord(record);\n\n          store._removeFromIdMap(record._internalModel);\n        });\n      }\n\n      const activeData = this.get('activeContext.topActiveContext').getActiveData();\n      const filteredData = activeData[modelName].filter(filterFn).sort(compareFn);\n      return filteredData;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-stops-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/reconcile-stops-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'dwh-stop-point',\n    defaultSortId: 'actualarrivetime',\n    defaultSortAsc: true,\n    title: 'Stops',\n    columns: [{\n      id: 'tripId',\n      type: 'text',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'stoptype',\n      type: 'text',\n      label: 'Type',\n      valuePath: 'stoptype',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'routeName',\n      type: 'text',\n      label: 'Route Name',\n      valuePath: 'routename',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'passengerFirstName',\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerfirstname',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'passengerLastName',\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerlastname',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'address',\n      type: 'text',\n      label: 'Address',\n      valuePath: 'readableAddress',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'city',\n      type: 'text',\n      label: 'City',\n      valuePath: 'locality',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'county',\n      type: 'text',\n      label: 'County',\n      valuePath: 'subregion',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'state',\n      type: 'text',\n      label: 'State',\n      valuePath: 'region',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'zip',\n      type: 'text',\n      label: 'Zip',\n      valuePath: 'postalcode',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'odometer',\n      type: 'number',\n      label: 'Odometer on Arrival',\n      valuePath: 'actualodometer',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'actualarrivetime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Actual Arrive Time',\n      valuePath: 'actualarrivetime',\n      searchable: true\n    }, {\n      id: 'actualdeparttime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Actual Depart Time',\n      valuePath: 'actualdeparttime',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'stopOrdinal',\n      type: 'number',\n      label: 'Stop Ordinal',\n      valuePath: 'routeordinal',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-trips-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/reconcile-trips-widget/config\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"moment\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\", \"adept-iq/config/environment\"], function (_exports, _component, _config, _lodash, _mappedPermIds, _moment, _filters, _sorts, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable camelcase */\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['reconcile-trips-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    // @TODO: saveRecordFunction shall be moved to a service later on\n    // This save is specific to saving drivers and all related models.\n    // eslint-disable-next-line no-unused-vars\n    saveRecordFunction(records) {},\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('tableActions', []);\n      this.set('singleActions', [{\n        id: 'activityLog',\n        permId: _mappedPermIds.default.accessReconcileWorkspace,\n        name: 'Activity Log',\n        action: model => {\n          const id = model.get('id');\n          this.get('workspace').pushState('tripActivityLog', {\n            displayName: `Trip ${id} Activity Log`,\n            trip: model\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      }]);\n      this.set('bulkActions', []);\n    },\n\n    buildDataFilter() {\n      const selectedDate = this.get('dwhService.reconcileDate');\n      if (!selectedDate) return null;\n      const date = (0, _moment.default)(selectedDate).format(_environment.default.dateTimeFormat.dwhDate);\n      const fields = `\n      id,\n      provider,\n      attributes.tripId,\n      attributes.routeId,\n      attributes.routeName,\n      attributes.tenantId,\n      attributes.driver.attributes.driverAdeptId,\n      attributes.rider.id,\n      attributes.rider.attributes.firstName,\n      attributes.rider.attributes.lastName,\n      attributes.vehicle.attributes.name,\n      attributes.start.address.pickAddressId,\n      attributes.start.address.pickCity,\n      attributes.start.address.pickStreetAddress,\n      attributes.start.address.pickStreetNumber,\n      attributes.start.address.pickupZone,\n      attributes.start.address.formattedAddresss,\n      attributes.start.pickOdometerReading,\n      attributes.end.address.dropAddressId,\n      attributes.end.address.dropCity,\n      attributes.end.address.dropStreetAddress,\n      attributes.end.address.dropStreetNumber,\n      attributes.end.address.dropoffZone,\n      attributes.end.address.formattedAddress\n      attributes.end.dropOdometerReading,\n      attributes.type,\n      attributes.anchor,\n      attributes.tripStatus,\n      attributes.statusReason,\n      attributes.tripPurpose,\n      attributes.fare,\n      attributes.fareCategoryDisplayName,\n      attributes.paymentTypeName,\n      attributes.pca,\n      attributes.companions,\n      attributes.wcSeats,\n      attributes.promiseTime,\n      attributes.requestTime,\n      attributes.serviceCalcStartTime,\n      attributes.serviceCalcEndTime,\n      attributes.pickTime,\n      attributes.dropTime,\n      attributes.actualPickTime,\n      attributes.actualDropTime,\n      attributes.actualMiles`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const data = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields\n        }\n      };\n      return data;\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        const data = this.buildDataFilter();\n\n        if (data) {\n          params.data = data;\n          return this.query(modelName, params);\n        }\n\n        return Promise.resolve([]);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n\n      if (!this.get('activeContext.topActiveContext.unloadTask.isRunning')) {\n        const responseData = (await store.query(modelName, params)) || [];\n        const storeData = store.peekAll(modelName);\n\n        _lodash.default.differenceBy(storeData.toArray(), responseData.toArray(), i => {\n          return i.get('id');\n        }).forEach(record => {\n          store.unloadRecord(record);\n\n          store._removeFromIdMap(record._internalModel);\n        });\n      }\n\n      const activeData = this.get('activeContext.topActiveContext').getActiveData();\n      const filteredData = activeData[modelName].filter(filterFn).sort(compareFn);\n      return filteredData;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-trips-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/reconcile-trips-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'dwh-trip',\n    defaultSortId: 'requestTime',\n    defaultSortAsc: true,\n    title: 'Trips',\n    columns: [{\n      id: 'tripId',\n      type: 'text',\n      label: 'ID',\n      valuePath: 'id',\n      // TODO: extenalId might not match id\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'routeName',\n      type: 'text',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'provider',\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'riderId',\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'rider.id',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'riderFirstName',\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'rider.attributes.firstName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'riderLastName',\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'rider.attributes.lastName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'type',\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'anchor',\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'anchor',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'requestTime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'promiseTime',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'pickupAddress',\n      type: 'text',\n      label: 'Pickup Address',\n      valuePath: 'startAddress',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'pickupCity',\n      type: 'text',\n      label: 'Pickup City',\n      valuePath: 'start.address.pickCity',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'pickupZone',\n      type: 'text',\n      label: 'Pickup Zone',\n      valuePath: 'start.address.pickupZone',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'dropoffAddress',\n      type: 'text',\n      label: 'Dropoff Address',\n      valuePath: 'endAddress',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'dropoffCity',\n      type: 'text',\n      label: 'Dropoff City',\n      valuePath: 'end.address.dropCity',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'dropoffZone',\n      type: 'text',\n      label: 'Dropoff Zone',\n      valuePath: 'end.address.dropoffZone',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'status',\n      type: 'text',\n      label: 'Status',\n      valuePath: 'tripStatus',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'statusReason',\n      type: 'text',\n      label: 'Status Reason',\n      valuePath: 'statusReason',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'purpose',\n      type: 'text',\n      label: 'Purpose',\n      valuePath: 'tripPurpose',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'fare',\n      type: 'text',\n      label: 'Fare',\n      valuePath: 'fare',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'fareCategory',\n      type: 'text',\n      label: 'Fare Category',\n      valuePath: 'fareCategoryDisplayName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'paymentType',\n      type: 'text',\n      label: 'Payment Type',\n      valuePath: 'paymentTypeName',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'wcSeats',\n      type: 'text',\n      label: 'WC Count',\n      valuePath: 'wcSeats',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'pca',\n      type: 'text',\n      label: 'PCA Count',\n      valuePath: 'pca',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'companions',\n      type: 'text',\n      label: 'Comp Count',\n      valuePath: 'companions',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'serviceStart',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Service Start Time',\n      valuePath: 'serviceCalcStartTime',\n      defaultWidth: 85,\n      searchable: true\n    }, {\n      id: 'serviceEnd',\n      type: 'time',\n      format: 'HH:mm',\n      label: 'Service End Time',\n      valuePath: 'serviceCalcEndTime',\n      defaultWidth: 85,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-verify-route/component\", [\"exports\", \"ember-light-table\", \"adept-iq/pods/components/iq-widgets/reconcile-verify-route/config\"], function (_exports, _emberLightTable, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    classNames: ['reconcile-widget'],\n    config: _config.default,\n    unverifiedRouteData: null,\n    onCloseClick: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.displayUnVerifyRouteErrorDetails(this.unverifiedRouteData);\n    },\n\n    displayUnVerifyRouteErrorDetails(routeData) {\n      const tripTable = new _emberLightTable.default(_config.default.tripTableColumns);\n      const routeTable = new _emberLightTable.default(_config.default.routeTableColumns);\n      this.setProperties({\n        isTripMessageExists: false,\n        isRouteMessageExists: false,\n        tripTable,\n        routeTable\n      });\n\n      if (routeData && routeData.length) {\n        const tripErrors = routeData.filter(item => item.tripId);\n        const routeErrors = routeData.filter(item => item.routeId);\n\n        if (tripErrors.length) {\n          this.get('tripTable').setRows(tripErrors);\n          this.set('isTripMessageExists', true);\n        }\n\n        if (routeErrors.length) {\n          this.get('routeTable').setRows(routeErrors);\n          this.set('isRouteMessageExists', true);\n        }\n      }\n    },\n\n    actions: {\n      cancel() {\n        this.onCloseClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-verify-route/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    title: 'Verify Route',\n    tripTableColumns: [{\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      resizable: true,\n      defaultWidth: 20,\n      component: 'iq-widgets/reconcile-verify-route/table-header'\n    }, {\n      label: 'Message',\n      valuePath: 'message',\n      resizable: false,\n      defaultWidth: 80,\n      component: 'iq-widgets/reconcile-verify-route/table-header'\n    }],\n    routeTableColumns: [{\n      label: 'Route ID',\n      valuePath: 'routeId',\n      resizable: true,\n      defaultWidth: 20,\n      component: 'iq-widgets/reconcile-verify-route/table-header'\n    }, {\n      label: 'Message',\n      valuePath: 'message',\n      resizable: false,\n      defaultWidth: 80,\n      component: 'iq-widgets/reconcile-verify-route/table-header'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-verify-route/table-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['reconcile-table-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-verify-route/table-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"a7nhqYVa\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-verify-route/table-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reconcile-verify-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eamUsd7e\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dialog-box\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"confirm-dialog-unsuccessful\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center justify-content-between\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Verify Route\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"btn-close\\\"],[9],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/icons/ic-close-line.svg\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"color-danger verification-error\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Verification failed\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Check entry error messages below\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget-table-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"reconcile-widget-table-title\\\"],[9],[0,\\\"\\\\n            Verification Results\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isTripMessageExists\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"tripTable\\\"]]],[[\\\"height\\\"],[\\\"30vh\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/reconcile-verify-route/template.hbs' @ L29:C14) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/reconcile-verify-route/template.hbs' @ L33:C15) \\\"],null]],[[\\\"canSelect\\\"],[false]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[3]},null],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isRouteMessageExists\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body verify-route-tbl\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"routeTable\\\"]]],[[\\\"height\\\"],[\\\"15vh\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/reconcile-verify-route/template.hbs' @ L51:C14) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/reconcile-verify-route/template.hbs' @ L55:C15) \\\"],null]],[[\\\"canSelect\\\"],[false]],{\\\"statements\\\":[],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\\n      \\\"],[10],[0,\\\"\\\\n     \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-3 text-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-gray\\\"],[9],[0,\\\"OK\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"cancel\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reconcile-verify-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/booking-details/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // import {unwrapProxy} from 'adept-iq/utils/unwrapProxy';\n  var _default = _component.default.extend({\n    bookingID: null,\n    bookDate: null,\n    pickUpAddress: null,\n    dropOffAddress: null,\n\n    init() {\n      this._super(...arguments);\n\n      const bookingData = this.get('editModal.editableRecords')[0];\n      this.set('bookingID', bookingData.get('id'));\n      this.set('bookDate', bookingData.get('requestTimeForDisplay'));\n      this.set('pickUpAddress', bookingData.get('firstSegmentInFirstLeg.pick.place.address.simpleAddress'));\n      this.set('dropOffAddress', bookingData.get('lastSegmentInLastLeg.drop.place.address.simpleAddress'));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/booking-details/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"2V0pD6EC\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[11,\\\"style\\\",\\\"float:right\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Booking ID\\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"bookingID\\\"]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Date/Request/Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cancel-booking-detail-field\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"bookDate\\\"]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Pickup Address\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cancel-booking-detail-field\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"pickUpAddress\\\"]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Drop Off Address\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cancel-booking-detail-field\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"border-0\\\"],[12,\\\"value\\\",[21,\\\"dropOffAddress\\\"]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/booking-details/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/config/api-urls\"], function (_exports, _component, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['cancel-booking-form-side-drawer'],\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    bookingId: null,\n    groupId: null,\n    tripIds: null,\n    ridersInBooking: null,\n    isProgressShown: false,\n    isProcessing: false,\n    editableSections: null,\n    note: null,\n    selectedCancelType: null,\n    canSave: true,\n    cancelStatus: null,\n\n    init() {\n      this._super(...arguments);\n\n      const bookingId = this.get('editModal.editableRecords')[0].get('id');\n      const groupId = this.get('editModal.editableRecords')[0].get('group.id');\n      const ridersInBooking = this.get('editModal.editableRecords')[0].get('legs').map(leg => {\n        const rider = leg.get('rider');\n        const plainRider = rider.getProperties('id', 'riderId', 'firstName', 'lastName');\n        return { ...plainRider,\n          isChecked: false\n        };\n      }).uniqBy('riderId');\n      const filteredTrips = this.get('booking.currentTrips').filter(trip => bookingId === trip.get('booking.id'));\n      this.set('bookingId', bookingId);\n      this.set('groupId', groupId);\n      this.set('cancelStatus', this.get('editModal.editableRecords')[1]);\n      this.set('ridersInBooking', ridersInBooking);\n      this.set('tripIds', filteredTrips.map(t => t.get('id')));\n      this.set('editableSections', []);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    async partialBookingDeletion(ridersToRemove) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const bookingId = this.get('bookingId');\n      const booking = this.store.peekRecord('booking', bookingId);\n      const groupId = booking.get('group.id');\n      const currentBookingStatus = booking.status;\n      const session = this.get('session');\n      const bookingTrips = booking.trips.toArray();\n      const tripsToRemove = bookingTrips.filter(t => ridersToRemove.includes(t.segment.get('rider.id')));\n      const deleteEntireBooking = bookingTrips.length === tripsToRemove.length; // if all the riders been selected, do booking deletion\n\n      if (deleteEntireBooking) {\n        const deleteEntireBookingPayload = {\n          doCancel: true,\n          reason: 'Removed all passengers from booking.'\n        };\n\n        try {\n          await this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking/' + bookingId, {\n            method: 'DELETE',\n            contentType: 'application/json',\n            headers: {\n              Authorization: `Bearer ${session.data.authenticated.token}`\n            },\n            data: deleteEntireBookingPayload\n          });\n          await this.get('booking').deleteTrips(bookingId);\n          const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n          this.set('booking.currentBookings', bookings);\n          this.set('booking.currentTrips', trips);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          this.get('editModal').reset();\n          this.get('editModal').close();\n          this.get('notifications').success('Booking successfully deleted');\n        } catch (error) {\n          this.get('notifications').warning('FAILED TO DELETED BOOKING ID ' + bookingId + error.message);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          this.get('editModal').reset();\n          this.get('editModal').close();\n        }\n\n        return;\n      }\n\n      const tripIdsToRemove = tripsToRemove.map(t => t.id);\n      const legIdsToRemove = tripsToRemove.map(s => s.get('segment.leg.id'));\n      const segmentsToRemove = tripsToRemove.map(s => s.get('segment'));\n      const segmentStopIdsToRemove = segmentsToRemove.map(s => s.get('stops').toArray().map(ss => ss.id)).flat();\n      const prepareCancelData = {\n        data: {\n          attributes: {\n            notes: 'remove passenger from booking',\n            tripIds: tripIdsToRemove\n          },\n          relationships: {\n            cancelTypeName: {\n              data: {\n                id: 'cancel',\n                type: 'cancelTypeName'\n              }\n            }\n          },\n          id: this.get('bookingId'),\n          type: 'cancellation'\n        }\n      };\n      const json = JSON.stringify(prepareCancelData);\n\n      try {\n        // cancel selected passengers' trips\n        await this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking/' + this.get('bookingId') + '/cancellation', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        }); // delete trips, legs -> cascade segments & segmentStops\n\n        await this.get('booking').deleteSelectedTrips(tripIdsToRemove);\n        await this.get('booking').deleteSelectedLegs(legIdsToRemove);\n        await this.get('booking').deleteSelectedSegmentStops(segmentStopIdsToRemove);\n        const allScheduled = booking.trips.every(t => t.get('status') === 'scheduled');\n        this.get('booking').updateBookingStatus(this.get('bookingId'), allScheduled ? 'scheduled' : currentBookingStatus);\n        const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n        this.set('booking.currentBookings', bookings);\n        this.set('booking.currentTrips', trips); // activity log for BE and Rider Events\n\n        const activityLogAdapter = this.get('store').adapterFor('activity-log');\n        activityLogAdapter.removeBookingPassengers(ridersToRemove, bookingId);\n        this.get('notifications').success(`${ridersToRemove.length} passenger(s) have been successfully removed from Group ID: ${groupId}`);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n        this.set('isProcessing', false);\n      } catch (error) {\n        this.get('notifications').warning(`FAILED TO REMOVED RIDERS FROM BOOKING ${this.get('bookingId')}: ${error.message}`);\n        this.get('editModal').reset();\n        this.get('editModal').close();\n        this.set('isProcessing', false);\n      }\n\n      return;\n    },\n\n    actions: {\n      onUndoClick() {},\n\n      onSaveClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onXButtonClick() {\n        const booking = this.store.peekRecord('booking', this.get('bookingId'));\n        booking.set('cancellation', null);\n        this.toggleProperty('isProgressShown');\n      },\n\n      onCloseClick() {\n        this.get('editModal').close();\n      },\n\n      onConfirmClick() {\n        if (this.get('isProcessing')) return;\n        this.set('isProcessing', true);\n        const ridersToRemove = this.get('ridersInBooking').filter(v => v.isChecked).map(r => r.id);\n        this.partialBookingDeletion(ridersToRemove);\n      },\n\n      onNoteChange(note) {\n        this.set('note', note);\n      } // potential cancellation reason for removing passengers\n      // onSelectedCancelTypeChange(cancelType) {\n      //   this.set('selectedCancelType', cancelType);\n      // }\n\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/passenger-list/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    riderDetails: null,\n\n    init() {\n      this._super(...arguments);\n\n      const riderDetails = arguments[0].riderDetails;\n      this.set('riderDetails', riderDetails);\n    },\n\n    actions: {\n      toggleSelection(riderIndex) {\n        const isChecked = this.get(`riderDetails.${riderIndex}.isChecked`);\n        this.set(`riderDetails.${riderIndex}.isChecked`, !isChecked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/passenger-list/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"5PQz28+K\",\n    \"block\": \"{\\\"symbols\\\":[\\\"rider\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passenger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"text-sm text-gray-700 mb-4\\\"],[9],[0,\\\"\\\\n    This booking contains \\\"],[1,[23,[\\\"riderDetails\\\",\\\"length\\\"]],false],[0,\\\" passenger(s). Please select passenger(s) you wish to remove from the\\\\n    booking.\\\\n    \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n    This action will delete all generated trips for selected passenger(s).\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"w-full table-auto border-collapse\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"border-b\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left px-2 py-2 w-12\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left px-2 py-2 text-sm text-gray-700\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left px-2 py-2 text-sm text-gray-700\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left px-2 py-2 text-sm text-gray-700\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tbody\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"riderDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"border-b\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"px-2 py-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[22,1,[\\\"isChecked\\\"]]],[12,\\\"onChange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleSelection\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"px-2 py-1\\\"],[9],[1,[22,1,[\\\"riderId\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"px-2 py-1\\\"],[9],[1,[22,1,[\\\"firstName\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"px-2 py-1\\\"],[9],[1,[22,1,[\\\"lastName\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/passenger-list/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNameBindings: ['overrideClassName'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    columns: Ember.computed('table.allColumns', function () {\n      const tableColumns = this.get('table.allColumns');\n      return tableColumns;\n    }),\n    overrideClassName: Ember.computed('config', function () {\n      const tableColumn = this.get('columns');\n      const found = tableColumn.find(tc => tc.id === 'description');\n      const baseClassTestName = 'data-test-table-base-cell';\n\n      if (!Ember.isPresent(found)) {\n        return [`table-base-cell  ${baseClassTestName}`];\n      }\n\n      return [`table-base-cell-white-space ${baseClassTestName}`];\n    }),\n    tooltipText: Ember.computed('row.isLocked', function () {\n      const isLocked = this.get('row.isLocked');\n\n      if (Ember.isNone(isLocked)) {\n        return null;\n      }\n\n      if (isLocked) {\n        return `Locked by ${this.get('row.lockedBy')}`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'row.isLocked', function () {\n      const tooltipText = this.get('tooltipText');\n      const isLocked = this.get('row.isLocked');\n      return Ember.isPresent(tooltipText) && isLocked;\n    }),\n    tabindex: 0,\n    enabledFlagValue: Ember.computed('column.enabledFlagPath', 'row.content', function () {\n      const path = this.get('column.enabledFlagPath');\n      const row = this.get('row.content');\n      if (!path || !row) return null;\n      return row.get(path);\n    }),\n    isCreateNewAdHoc: Ember.computed.readOnly('table.isCreateNewAdHoc')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"6N+mbRle\",\n    \"block\": \"{\\\"symbols\\\":[\\\"@column\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"enabledFlagValue\\\"]],false],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"text-muted\\\"],[9],[1,[22,1,[\\\"defaultText\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"eq\\\",[[23,[\\\"value\\\"]],null],null],[27,\\\"eq\\\",[[23,[\\\"value\\\"]],[26]],null],[27,\\\"eq\\\",[[23,[\\\"value\\\"]],\\\"\\\"],null]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"isCreateNewAdHoc\\\"]]],null],[22,1,[\\\"onCreateShowDefault\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"text-muted\\\"],[9],[1,[22,1,[\\\"defaultText\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,1,[\\\"capitalized\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"capitalize\\\",[[23,[\\\"value\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"duration\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",500,3000,\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/check-box/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    activeContext: Ember.inject.service(),\n    isChecked: Ember.computed.alias('row.isChecked'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"4MBHxW9x\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/table/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"m4lMVz3I\",\n    \"block\": \"{\\\"symbols\\\":[\\\"rider\\\",\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"cancel-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.hbs' @ L5:C2) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Remove Passenger(s)\\\",[23,[\\\"canShrink\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.hbs' @ L17:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex;\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 \\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Group ID: \\\"],[1,[21,\\\"groupId\\\"],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.hbs' @ L27:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.hbs' @ L28:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Booking Details\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/remove-booking-passengers-form/booking-details\\\",null,[[\\\"editableRecords\\\",\\\"editableSections\\\"],[[23,[\\\"editableRecords\\\"]],[23,[\\\"editableSections\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.hbs' @ L32:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Select Passenger(s)\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/remove-booking-passengers-form/passenger-list\\\",null,[[\\\"riderDetails\\\",\\\"editableRecords\\\",\\\"editableSections\\\"],[[23,[\\\"ridersInBooking\\\"]],[23,[\\\"editableRecords\\\"]],[23,[\\\"editableSections\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"hasOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-container\\\",\\\"middle left\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Cancel Booking\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\"Are you sure you wish to remove the following passenger(s) from group booking?\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[27,\\\"filter-by\\\",[\\\"isChecked\\\",true,[23,[\\\"ridersInBooking\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"li\\\"],[9],[1,[22,1,[\\\"firstName\\\"]],false],[0,\\\" \\\"],[1,[22,1,[\\\"lastName\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls mx-auto\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[12,\\\"disabled\\\",[21,\\\"isProcessing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null]],[9],[0,\\\"\\\\n    Cancel\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"disabled\\\",[21,\\\"isProcessing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"],null]],[9],[0,\\\"\\\\n    Confirm\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/remove-booking-passengers-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reportlist-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/reportlist-widget',\n    rowComponent: 'table/rows/zonestat-formatted-row',\n    modelName: 'report-list',\n    title: 'Reports',\n    defaultSortId: 'reportName',\n    defaultSortAsc: true,\n    columns: [{\n      id: 'reportName',\n      index: 1,\n      type: 'text',\n      label: 'Report Name',\n      valuePath: 'name',\n      searchable: true,\n      defaultWidth: 480\n    }, {\n      id: 'description',\n      index: 2,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      searchable: true,\n      defaultWidth: 1000\n    }, {\n      id: 'category',\n      index: 3,\n      type: 'text',\n      label: 'Category',\n      valuePath: 'category',\n      searchable: true,\n      defaultWidth: 412\n    } // {\n    //   id: 'sharedWith',\n    //   index: 4,\n    //   type: 'text',\n    //   label: 'Shared With',\n    //   valuePath: 'sharedWith',\n    //   searchable: true,\n    //   defaultWidth: 100\n    // }\n    ]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reportlist-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/reportlist-widget/config\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\", \"adept-iq/config/mapped-permIds\"], function (_exports, _component, _config, _filters, _sorts, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const fromPixels = x => parseInt(x.split('px')[0], 10);\n\n  var _default = _component.default.extend({\n    classNames: ['reportlist-widget'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    router: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    report: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    isReportViewEnabled: false,\n    allReportList: null,\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      this.reportList();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.onWidgetStateChange();\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n      this.set('openAction', {\n        id: 'open',\n        permId: _mappedPermIds.default.accessReportsWorkspace,\n        name: 'Open Report',\n        action: () => {\n          //this.set('isLoading', true);\n          //this.get('workspace').set('isGlobalSpinnerVisible', true);\n          const lastRowClicked = this.get('lastRowClicked');\n          this.get('allReportList').forEach(item => {\n            if (item.id === lastRowClicked.id) {\n              this.getUrl(item, false);\n            }\n          });\n        }\n      });\n      this.set('shareAction', {\n        id: 'share',\n        permId: _mappedPermIds.default.accessReportsWorkspace,\n        name: 'Schedule Report',\n        action: () => {\n          const lastRowClicked = this.get('lastRowClicked');\n          this.get('allReportList').forEach(item => {\n            if (item.id === lastRowClicked.id) {\n              this.getUrl(item, true);\n            }\n          });\n        }\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    async reportList() {\n      const resultList = await this.report.reportList();\n\n      if (!Ember.isEmpty(resultList)) {\n        this.set('allReportList', resultList);\n      }\n\n      Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n    },\n\n    refreshData() {\n      if (this.get('isDestroyed')) return;\n      this.get('fetchDataTask').perform().then(() => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false);\n        }\n      }).catch(err => {\n        if (this.get('activeContext.topActiveContext.refreshInProgress')) {\n          this.set('activeContext.topActiveContext.refreshInProgress', false); // eslint-disable-next-line no-console\n\n          console.log('Error occoured when refreshing the Data' + err);\n        }\n      });\n    },\n\n    actions: {\n      onRowClick(row, event) {\n        let xpos = 0;\n        let i = 1;\n\n        while (this.table.columns[i].id !== 'reportName') {\n          if (this.table.columns[i].hidded !== true) {\n            xpos += fromPixels(this.table.columns[i].width);\n          }\n\n          i++;\n        }\n\n        this.get('allReportList').forEach(item => {\n          if (item.id === row.get('record').id && event.clientX > xpos && event.clientX < xpos + fromPixels(this.table.columns[i].width)) {\n            this.getUrl(item, false);\n          }\n        });\n      },\n\n      onBackButtonClick() {\n        this.set('isReportViewEnabled', false);\n        this.set('isLoading', false);\n      },\n\n      onIFrameLoad() {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        const notifications = this.get('notifications');\n        const that = document.getElementById('reportViewFrame');\n\n        try {\n          const isLoaded = that.contentWindow.window.length; // 0 or 1\n\n          if (isLoaded === 0) {\n            notifications.warning('Error related to the url link of the selected report');\n          }\n        } catch (err) {\n          notifications.warning('Error into the try/catch iframe onload section');\n        }\n      }\n\n    },\n\n    async getUrl(item, runshedule) {\n      const result = await this.report.getUrl(item, runshedule);\n\n      if (!Ember.isEmpty(result)) {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        this.set('iframeSrc', result);\n        this.set('reportTitleName', item.name);\n        this.set('isReportViewEnabled', true);\n      }\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = store.peekAll(modelName) || [];\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n\n      if (activeData.content.length === 0) {\n        return [];\n      } //filteredData = store.findAll('report-list');\n\n\n      return filteredData;\n    },\n\n    dynamicSingleActions: Ember.computed('lastRowClicked', 'table.rows', 'table.rows.@each.{selected,status}', 'selectedWidgetRecord', function () {\n      const openAction = this.get('openAction');\n      const shareAction = this.get('shareAction');\n      const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.designReports, null);\n\n      if (permGranted) {\n        return [openAction, shareAction];\n      }\n\n      return [openAction];\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reportlist-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/reportlist-widget',\n    rowComponent: 'table/rows/zonestat-formatted-row',\n    modelName: 'report-list',\n    title: 'Reports',\n    defaultSortId: 'reportName',\n    defaultSortAsc: true,\n    hideCheckBox: true,\n    columns: [{\n      id: 'reportName',\n      index: 1,\n      type: 'text',\n      label: 'Report Name',\n      valuePath: 'name',\n      searchable: true,\n      defaultWidth: 480,\n      cellComponent: 'iq-widgets/reportlist-widget/hyperlink-cell'\n    }, {\n      id: 'description',\n      index: 2,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      searchable: true,\n      defaultWidth: 1000\n    }, {\n      id: 'category',\n      index: 3,\n      type: 'text',\n      label: 'Category',\n      valuePath: 'category',\n      searchable: true,\n      defaultWidth: 412\n    } // {\n    //   id: 'sharedWith',\n    //   index: 4,\n    //   type: 'text',\n    //   label: 'Shared With',\n    //   valuePath: 'sharedWith',\n    //   searchable: true,\n    //   defaultWidth: 100\n    // }\n    ]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reportlist-widget/hyperlink-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['solution-table-base-cell', 'data-test-solution-table-base-cell']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reportlist-widget/hyperlink-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"q+yfYsYW\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"hyperlink-button\\\"],[11,\\\"style\\\",\\\"width:auto !important\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[1,[21,\\\"value\\\"],false],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reportlist-widget/hyperlink-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/reportlist-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"oyzb7YSP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"event\\\",\\\"index\\\",\\\"t\\\",\\\"body\\\",\\\"filter\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isReportViewEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"widget\\\"],[11,\\\"style\\\",\\\"height:100%\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row widget-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 context\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[9],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-long-arrow-left\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Back\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onBackButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[1,[21,\\\"reportTitleName\\\"],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"iframe\\\"],[11,\\\"id\\\",\\\"reportViewFrame\\\"],[11,\\\"marginwidth\\\",\\\"0\\\"],[11,\\\"marginheight\\\",\\\"0\\\"],[11,\\\"hspace\\\",\\\"0\\\"],[11,\\\"vspace\\\",\\\"0\\\"],[11,\\\"align\\\",\\\"middle\\\"],[11,\\\"frameborder\\\",\\\"0\\\"],[11,\\\"height\\\",\\\"127%\\\"],[11,\\\"scrolling\\\",\\\"no\\\"],[11,\\\"width\\\",\\\"100%\\\"],[12,\\\"src\\\",[28,[[21,\\\"iframeSrc\\\"]]]],[12,\\\"onload\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onIFrameLoad\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"canShowHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"column-widget-search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"column-widget-title data-test-column-title\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"quickFiltersExist\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-left-scroll-button\\\"],[12,\\\"onClick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLeftButtonClick\\\"],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-left active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"column-widget-filters-scroll \\\",[21,\\\"scrollClassName\\\"]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"widgetState\\\",\\\"quickFilters\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/quick-filters\\\",null,[[\\\"tableColumns\\\",\\\"quickFilters\\\",\\\"filter\\\",\\\"widget\\\",\\\"onRefresh\\\"],[[23,[\\\"table\\\",\\\"columns\\\"]],[23,[\\\"widgetState\\\",\\\"quickFilters\\\"]],[22,7,[]],[23,[\\\"widget\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefresh\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[7]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-right-scroll-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRightButtonClick\\\"],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-caret-right active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"config\\\",\\\"hideWidgetControls\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"id\\\",\\\"ember7851\\\"],[11,\\\"class\\\",\\\"help-link-component ember-view\\\"],[9],[0,\\\"  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"help-link-button\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveSearchClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button column-widget-search-button data-test-search-button initial-focus-control\\\"],[9],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-search \\\",[27,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFilterAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button data-test-filter-button\\\"],[12,\\\"data-filter-class\\\",[28,[[23,[\\\"config\\\",\\\"modelName\\\"]]]]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-filter \\\",[27,\\\"if\\\",[[23,[\\\"isFiltered\\\"]],\\\"active-button\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"maximizer\\\",\\\"maximizedWidget\\\"]],[23,[\\\"widget\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitMaximizedClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs' @ L124:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs' @ L135:C9) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"onRowClick\\\",\\\"onRowDoubleClick\\\",\\\"rowComponent\\\",\\\"extra\\\"],[false,false,[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowDoubleClick\\\"],null],[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"hash\\\",null,[[\\\"onRightClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowRightClick\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs' @ L147:C13) \\\"],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs' @ L154:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[6]},null]],\\\"parameters\\\":[5]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"inlineRowMenuPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setInlineRowMenu\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs' @ L174:C5) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs' @ L176:C5) \\\"],null]],[[\\\"isTouchDevice\\\",\\\"class\\\"],[false,\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showSingleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"singleActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,3,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,4,[]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSingleRowAction\\\",[22,3,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showBulkActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"bulkActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[23,[\\\"index\\\"]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onBulkRowAction\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/reportlist-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/roles-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/roles-form-widget/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      const errors = [];\n      records.forEach(record => {\n        const name = record.get('name');\n\n        if (Ember.isEmpty(name)) {\n          valid = false;\n          errors.push('Role Must have a Name');\n        }\n\n        record.set('displayName', name);\n        record.set('status', 'active');\n        record.set('roleName', name.replace(/\\s+/, '-'));\n      });\n      this.set('editModal.errors', errors);\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          this.get('service').apply();\n        }\n      },\n\n      onCloseClick() {\n        // destroy model that have not been saved\n        const editableRecords = this.get('editableRecords') || [];\n        editableRecords.forEach(currentRecord => {\n          if (currentRecord.isNew && Ember.isNone(currentRecord.get('id'))) {\n            currentRecord.destroyRecord();\n          }\n        });\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['sso-role']);\n\n        this._super(...arguments);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/roles-form-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'role',\n        type: 'text',\n        label: 'Role Name',\n        valuePath: 'displayName',\n        editable: false\n      }]\n    }, {\n      title: 'Role',\n      fields: [{\n        id: 'role',\n        type: 'text',\n        label: 'Role Name',\n        valuePath: 'displayName'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/roles-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/roles-widget/config\", \"adept-iq/config/api-urls\", \"adept-iq/config/mapped-permIds\"], function (_exports, _component, _config, _apiUrls, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['roles-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    editComponent: 'iq-widgets/roles-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('tableActions').unshiftObject({\n        id: 'newRole',\n        permId: _mappedPermIds.default.newRole,\n        name: 'New Role',\n        action: () => {\n          const store = this.get('store');\n          const newModel = store.createRecord(this.get('config.modelName'), {\n            permissionList: []\n          });\n          this.get('workspace').pushState('composeRole', {\n            displayName: 'Create Role',\n            roles: [newModel]\n          }, {\n            replaceSelf: true\n          });\n        }\n      });\n      this.set('singleActions', [{\n        id: 'edit',\n        permId: _mappedPermIds.default.editRole,\n        name: 'Edit',\n        action: async model => {\n          const session = this.get('session');\n          let permissionList = [];\n          const roleName = model.get('roleName');\n\n          if (roleName) {\n            permissionList = await this.get('ajax').request(`${_apiUrls.API.ssoService.host}/role/${roleName}/role-permission/`, {\n              method: 'GET',\n              contentType: 'application/json',\n              headers: {\n                'Authorization': `Bearer ${session.data.authenticated.token}`\n              }\n            }).catch(() => []);\n          }\n\n          permissionList = permissionList.map(perm => perm.permissionId);\n          model.set('permissionList', permissionList);\n          this.get('workspace').pushState('composeRole', {\n            displayName: 'Edit Role',\n            roles: [model]\n          }, {\n            replaceSelf: true\n          });\n        }\n      }]);\n      this.set('bulkActions', [{\n        id: 'bulkEdit',\n        permId: _mappedPermIds.default.editRole,\n        name: 'Bulk Edit',\n        action: async models => {\n          const session = this.get('session');\n          const displayName = models.length > 1 ? 'Edit Roles' : 'Edit Role';\n          await models.reduce(async (acu, model) => {\n            let permissionList = [];\n            const roleName = model.get('roleName');\n\n            if (roleName) {\n              permissionList = await this.get('ajax').request(`${_apiUrls.API.ssoService.host}/role/${roleName}/role-permission/`, {\n                method: 'GET',\n                contentType: 'application/json',\n                headers: {\n                  'Authorization': `Bearer ${session.data.authenticated.token}`\n                }\n              }).catch(() => []);\n            }\n\n            permissionList = permissionList.map(perm => perm.permissionId);\n            model.set('permissionList', permissionList);\n            return acu;\n          }, Promise.resolve());\n          this.get('workspace').pushState('composeRole', {\n            displayName,\n            roles: models\n          }, {\n            replaceSelf: true\n          });\n        }\n      }]);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/roles-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/roles-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'sso-role',\n    title: 'Role Configurations',\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'Role Name',\n      valuePath: 'displayName',\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/route-information-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"moment\", \"adept-iq/pods/components/iq-widgets/route-information-widget/config\", \"ember-concurrency\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/environment\"], function (_exports, _component, _moment, _config, _emberConcurrency, _mappedPermIds, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const VERIFY_ROUTE = 1;\n  const REOPEN_ROUTE = 2;\n  const REPORT_BREAKDOWN = 3;\n  const BREAKDOWN_REPLACEMENT = 4;\n  const RESCUE = 5;\n  const REQUIRE_FIELDS = {\n    driverPhoneNumber: 'Driver Phone Number',\n    startName: 'Start Name',\n    endName: 'End Name',\n    routeStartAddress: 'Start Address',\n    routeEndAddress: 'End Address',\n    odoMeterStart: 'Odo Meter Start',\n    odoMeterEnd: 'Odo Meter End'\n  };\n  const KEEPER_ROUTE = 'keeper';\n  const EXPANDED = 'expanded';\n  const COLLAPSED = 'collapsed';\n\n  var _default = _component.default.extend({\n    interaction: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    session: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    serviceModeTaxiType: 'Taxi',\n    classNames: ['reconcile-widget'],\n    layoutName: 'components/iq-widgets/reconcile-widget',\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    config: _config.default,\n    reconcileRouteDetails: null,\n    routeVerifyDetails: null,\n    requireFieldError: null,\n    collapseState: EXPANDED,\n    notesCollapseState: EXPANDED,\n    // Reset map and address picker\n    detailCollapseState: EXPANDED,\n    selectedLocationType: null,\n    selectedRouteInfo: Ember.computed.alias('dwhService.selectedRouteInfo'),\n    selectedLocation: Ember.computed('selectedLocationType', 'selectedRouteInfo', function () {\n      if (this.get('selectedLocationType') === 'start' && this.get('selectedRouteInfo')) {\n        return this.get('selectedRouteInfo.startGarage');\n      }\n\n      if (this.get('selectedLocationType') === 'end' && this.get('selectedRouteInfo')) {\n        return this.get('selectedRouteInfo.endGarage');\n      }\n\n      return null;\n    }),\n    selectedLocationAddress: Ember.computed('selectedLocation.{streetaddress,streetnumber}', function () {\n      if (this.get('selectedLocation.streetaddress') && this.get('selectedLocation.streetnumber')) {\n        return {\n          freeformAddress: `${this.get('selectedLocation.streetnumber')} ${this.get('selectedLocation.streetaddress')}`\n        };\n      }\n\n      return null;\n    }),\n    vehicleId: Ember.computed.alias('selectedRouteInfo.attributes.vehicleName'),\n    actionsEnabled: Ember.computed.alias('dwhService.isRouteCompleted'),\n    // vehicleId: computed.readOnly('selectedVehicle.vehicleId'),\n    driverId: Ember.computed.readOnly('selectedDriver.driverId'),\n    canEdit: Ember.computed.alias('enableEditing'),\n    isEditStart: Ember.computed.alias('isEditingStart'),\n    routeTypeOptions: Ember.computed('routeActionTypeOptions', 'selectedRouteType', function () {\n      return _config.default.routeTypes;\n    }),\n    routeActionTypeOptions: Ember.computed('selectedRouteActionType', function () {\n      return _config.default.routeActionTypes;\n    }),\n    zoneOptions: Ember.computed('routeStartZone', 'routeEndZone', function () {\n      const zones = this.store.peekAll('zone');\n      const zoneArray = [];\n      zones.map(zone => {\n        if (zone && zone.displayName) {\n          zoneArray.push(zone.displayName);\n        }\n      });\n      return zoneArray;\n    }),\n    routeSelectionPerformed: Ember.computed('selectedRouteInfo', function () {\n      if (!this.get('selectedRouteInfo')) return false;\n      return true;\n    }),\n\n    init() {\n      Ember.set(this, 'selectedLocationType', 'start');\n      Ember.set(this, 'enableEditing', false);\n      Ember.set(this, 'initialMapLayers', null);\n      Ember.set(this, 'allEvents', null);\n      this.set('isRouteVerified', false);\n      this.set('routeVerifyDetails', {});\n\n      this._super(...arguments);\n\n      if (this.get('reconcile.reconcileRouteInfo')) {\n        Ember.run.scheduleOnce('afterRender', this, 'updateReconcileRouteDetails');\n      }\n\n      this.resetProperties();\n      this.configurePermission();\n    },\n\n    configurePermission() {\n      Ember.set(this, 'isRouteVerificationAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.verifyRouteRecon, null));\n      Ember.set(this, 'isRouteEditingAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editRouteInfoRecon, null));\n      Ember.set(this, 'isRouteDeletingAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.deleteRouteRecon, null));\n      Ember.set(this, 'isRescueReplacementAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createRescueReplacementRecon, null));\n      Ember.set(this, 'isReportBreakdownAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.reportBreakdownRecon, null));\n      Ember.set(this, 'isBreakdownReplacementAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createBreakdownReplacementRecon, null));\n      Ember.set(this, 'isReopenRouteAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.reopenRouteRecon, null));\n    },\n\n    updateProperties(routeInformation) {\n      if (Ember.isEmpty(routeInformation)) {\n        return;\n      }\n\n      const routeTypeOptions = this.get('routeTypeOptions');\n      const routeType = routeTypeOptions.find(rt => routeInformation.scheduleRoute.type ? rt.name.toLowerCase() === routeInformation.scheduleRoute.type.toLowerCase() : '') || routeTypeOptions[0];\n      const zones = this.store.peekAll('zone');\n      const routeStartZone = zones.find(z => z.get('id') === routeInformation.startAddress.zoneid) || zones.firstObject;\n      const routeEndZone = zones.find(z => z.get('id') === routeInformation.endAddress.zoneid) || zones.firstObject;\n      const reconcileTripDate = new Date((0, _moment.default)(this.get('reconcileTripDate')).format('YYYY-MM-DD'));\n      this.setProperties({\n        driverOptions: this.get('reconcile.reconcileDrivers'),\n        vehicleOptions: this.get('reconcile.reconcileVehicles'),\n        reconcileNotes: routeInformation.startplace.address[0].reconciliationnotes,\n        routeName: routeInformation.routeName,\n        driverPhoneNumber: routeInformation.dispatchroutevehicledriver.driverPhoneNumber,\n        plannedStartTime: (0, _moment.default)(routeInformation.plannedStartTime).format('hh:mm A'),\n        plannedEndTime: (0, _moment.default)(routeInformation.plannedEndTime).format('hh:mm A'),\n        actualStartTime: (0, _moment.default)(routeInformation.routeStartEvent.receivedat).format('hh:mm A'),\n        actualEndTime: routeInformation.routeEndEvent ? (0, _moment.default)(routeInformation.routeEndEvent.receivedat).format('hh:mm A') : '',\n        badgeNumber: routeInformation.driver.badgeNumber,\n        odoMeterStart: routeInformation.routeStartEvent.odo,\n        odoMeterEnd: routeInformation.routeEndEvent ? routeInformation.routeEndEvent.odo : '',\n        startName: routeInformation.startplace.address[0].alias,\n        endName: routeInformation.endplace.alias,\n        routeStartAddress: {\n          freeformAddress: routeInformation.startAddress.formattedaddress,\n          lat: routeInformation.startAddress.latitude,\n          lng: routeInformation.startAddress.longitude\n        },\n        routeStartZone: routeStartZone.get('displayName'),\n        routeStartNotes: routeInformation.startplace.address[0].notes,\n        routeEndAddress: {\n          freeformAddress: routeInformation.endAddress.formattedaddress,\n          lat: routeInformation.endAddress.latitude,\n          lng: routeInformation.endAddress.longitude\n        },\n        routeEndZone: routeEndZone.get('displayName'),\n        routeEndNotes: routeInformation.endplace.notes,\n        keeper: routeInformation.scheduleRoute.type.toLowerCase() === KEEPER_ROUTE,\n        tripLimit: routeInformation.scheduleRoute.triplimit,\n        distanceLimit: routeInformation.scheduleRoute.distancelimit,\n        selectedDriver: routeInformation.driver,\n        selectedVehicle: routeInformation.vehicle,\n        selectedRouteType: routeType,\n        shiftTimeRange: {\n          startofday: (0, _moment.default)(new Date(reconcileTripDate.getFullYear(), reconcileTripDate.getMonth() + 1)).add(+14, 'days').toISOString(),\n          endofday: (0, _moment.default)(this.get('reconcileTripDate')).add(2, 'day').toISOString()\n        }\n      });\n    },\n\n    resetProperties() {\n      Ember.set(this, 'selectedLocationType', 'start');\n      Ember.set(this, 'enableEditing', false);\n      Ember.set(this, 'initialMapLayers', null);\n    },\n\n    enableDisableOption() {\n      const routeActionTypeArray = [];\n      const options = Ember.get(this, 'routeActionTypeOptions');\n      const isCompleted = Ember.get(this, 'dwhService.isRouteCompleted');\n      options.map(opt => {\n        const option = {\n          disabled: false,\n          name: opt.name,\n          id: opt.id\n        };\n\n        switch (opt.id) {\n          case VERIFY_ROUTE:\n            option.disabled = isCompleted || !this.isRouteVerificationAllowed;\n            break;\n\n          case REOPEN_ROUTE:\n            option.disabled = !isCompleted || this.isClosedRoute || !this.isReopenRouteAllowed;\n            break;\n\n          case RESCUE:\n            option.disabled = !(!isCompleted && (this.isRegularRoute || this.isRescueReplacementRoute || this.isBreakdownRoute || this.isBreakdownReplacementRoute)) || !this.isRescueReplacementAllowed;\n            break;\n\n          case REPORT_BREAKDOWN:\n            option.disabled = !(!isCompleted && (this.isRegularRoute || this.isRescueReplacementRoute || this.isRescueRoute)) || !this.isReportBreakdownAllowed;\n            break;\n\n          case BREAKDOWN_REPLACEMENT:\n            option.disabled = !(!isCompleted && this.isBreakdownRoute) || !this.isBreakdownReplacementAllowed;\n            break;\n\n          default:\n            break;\n        }\n\n        routeActionTypeArray.push(option);\n      });\n      Ember.set(this, 'routeActionTypeOptions', routeActionTypeArray);\n    },\n\n    showErrorToolTip(title, tip) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: title,\n        tip: tip,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    showToolTip(title, tip, type) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: title,\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          if (type === REOPEN_ROUTE) {\n            return Ember.get(this, 'patchRouteTask').perform('reopen route').then(() => {\n              this.send('reopenRouteSuccess');\n              this.get('notifications').success('THIS ROUTE WAS SUCCESSFULLY REOPENED FOR EDITING');\n              tooltip.reset();\n            }).catch(error => {\n              let message;\n\n              switch (error.status) {\n                case 400:\n                  message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                  break;\n\n                default:\n                  message = 'There was a problem in reopen route, please try again.';\n                  break;\n              }\n\n              this.get('notifications').warning(message);\n              Ember.set(this, 'selectedRouteActionType', null);\n              tooltip.reset();\n            });\n          }\n\n          this.toggleProperty('reconcile.isLoading');\n          return this.get('saveRouteInformationTask').perform().then(() => {\n            this.set('requireFieldError', null);\n            this.toggleProperty('reconcile.isLoading');\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in save route, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            this.toggleProperty('reconcile.isLoading');\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          Ember.set(this, 'selectedRouteActionType', null);\n          return tooltip.reset();\n        },\n        closeAction: () => {\n          Ember.set(this, 'selectedRouteActionType', null);\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    toggleEditing() {\n      Ember.set(this, 'enableEditing', !this.get('enableEditing'));\n    },\n\n    getValidationError() {\n      const odoStart = this.get('odoMeterStart') ? parseInt(this.get('odoMeterStart'), 10) : 0;\n      const odoEnd = this.get('odoMeterEnd') ? parseInt(this.get('odoMeterEnd'), 10) : 0;\n\n      if (odoStart > odoEnd) {\n        return 'Odometer Start value cannot be greater then Odometer End value.';\n      }\n\n      return null;\n    },\n\n    handleVerifyRoute() {\n      const reconcileTrips = Ember.get(this, 'reconcile.reconcileTripDetails');\n\n      if (!reconcileTrips) {\n        const title = 'Verify Route';\n        const tip = 'A route containing only driver breaks or no trips on it cannot be verified. Please delete the route';\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title,\n          tip,\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            Ember.set(this, 'selectedRouteActionType', null);\n            this.toggleEditing();\n            return tooltip.reset();\n          },\n          closeAction: () => {\n            Ember.set(this, 'selectedRouteActionType', null);\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      } else {\n        this.toggleProperty('reconcile.isLoading');\n        Ember.get(this, 'getVerifyRouteTask').perform('verify route').then(() => {\n          this.toggleProperty('reconcile.isLoading');\n        }).catch(error => {\n          let message;\n\n          switch (error.status) {\n            case 400:\n              message = 'There was a problem with one of the fields. Please check over the form and try again.';\n              break;\n\n            default:\n              message = 'There was a problem in verify route, please try again.';\n              break;\n          }\n\n          this.get('notifications').warning(message);\n          Ember.set(this, 'selectedRouteActionType', null);\n          this.toggleProperty('reconcile.isLoading');\n        });\n      }\n    },\n\n    handleCompleteRoute() {\n      const title = 'Route Information';\n      const tip = 'The route was successfully verified. Do you want to close the route?';\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title,\n        tip,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          return Ember.get(this, 'verifyRouteTask').perform().then(() => {\n            tooltip.reset();\n            this.set('reconcile.verifyRouteIsChecked', true);\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in route complete, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            Ember.set(this, 'selectedRouteActionType', null);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          Ember.set(this, 'selectedRouteActionType', null);\n          return tooltip.reset();\n        },\n        closeAction: () => {\n          Ember.set(this, 'selectedRouteActionType', null);\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    closePopupHandler() {\n      this.send('cancel');\n    },\n\n    setResetVerifyRouteOptions(status, errorMessages, callBackFun) {\n      this.setProperties({\n        verifyRouteStatus: status,\n        'reconcile.verifyRouteErrors': errorMessages,\n        'reconcile.closePopupHandler': callBackFun,\n        unverifiedRouteDetails: errorMessages\n      });\n    },\n\n    getVerifyRouteTask: (0, _emberConcurrency.task)(function* () {\n      const routeInfo = this.get('reconcileRouteInfo');\n      const routeId = routeInfo.routeid;\n      const verifyRouteData = yield this.reconcile.verifyRoute(routeId);\n\n      if (Ember.isEmpty(verifyRouteData)) {\n        this.setResetVerifyRouteOptions(null, null, null);\n        return;\n      }\n\n      const routeData = verifyRouteData.data;\n      const verifyRouteErrors = verifyRouteData.data.errors;\n\n      if (routeData && routeData.isVerified) {\n        this.setResetVerifyRouteOptions('verified', null, null);\n        this.handleCompleteRoute();\n      } else {\n        this.setResetVerifyRouteOptions('unverified', verifyRouteErrors, this.closePopupHandler.bind(this));\n      }\n    }),\n\n    //building Payload Response for the Events,Route, StartAddress, EndAddress, Place, RVD\n    buildEventResForPayload(routeRes, reconcileDate) {\n      return [{\n        'id': routeRes.routeStartEvent.id,\n        'routeId': routeRes.routeStartEvent.routeid,\n        'lng': routeRes.routeStartEvent.lng,\n        'lat': routeRes.routeStartEvent.lat,\n        'driverId': this.get('selectedDriver').badgenumber,\n        'vehicleId': this.get('selectedVehicle').callsign,\n        'scheduleId': routeRes.routeStartEvent.scheduleid,\n        'stopPointId': routeRes.routeStartEvent.stoppointid,\n        'odo': routeRes.routeStartEvent.odo,\n        'speed': routeRes.routeStartEvent.speed,\n        'heading': routeRes.routeStartEvent.heading,\n        'source': routeRes.routeStartEvent.source,\n        'eventType': routeRes.routeStartEvent.eventtype,\n        'actionType': routeRes.routeStartEvent.actiontype,\n        'createdAt': routeRes.routeStartEvent.createdat,\n        'updatedAt': routeRes.routeStartEvent.updatedat,\n        'receivedAt': routeRes.routeStartEvent.receivedat,\n        'userId': routeRes.routeStartEvent.userid,\n        'op$1': routeRes.routeStartEvent.__op,\n        'deleted$1': routeRes.routeStartEvent.__deleted,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }, {\n        'id': routeRes.routeEndEvent.id,\n        'routeId': routeRes.routeEndEvent.routeid,\n        'lng': routeRes.routeEndEvent.lng,\n        'lat': routeRes.routeEndEvent.lat,\n        'driverId': this.get('selectedDriver').badgenumber,\n        'vehicleId': this.get('selectedVehicle').callsign,\n        'scheduleId': routeRes.routeEndEvent.scheduleid,\n        'stopPointId': routeRes.routeEndEvent.stoppointid,\n        'odo': routeRes.routeEndEvent.odo,\n        'speed': routeRes.routeEndEvent.speed,\n        'heading': routeRes.routeEndEvent.heading,\n        'source': routeRes.routeEndEvent.source,\n        'eventType': routeRes.routeEndEvent.eventtype,\n        'actionType': routeRes.routeEndEvent.actiontype,\n        'createdAt': routeRes.routeEndEvent.createdat,\n        'updatedAt': routeRes.routeEndEvent.updatedat,\n        'receivedAt': routeRes.routeEndEvent.receivedat,\n        'userId': routeRes.routeEndEvent.userid,\n        'op$1': routeRes.routeEndEvent.__op,\n        'deleted$1': routeRes.routeEndEvent.__deleted,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRouteResForPayload(routeRes, startAddressId, endAddressId, reconcileDate) {\n      return {\n        'deleted$1': routeRes.dispatchRoute.__deleted,\n        'endAddressId': endAddressId,\n        'startAddressId': startAddressId,\n        'version': 1,\n        'op$1': routeRes.dispatchRoute.__op,\n        'createdAt': routeRes.dispatchRoute.createdat,\n        'plannedStartTime': _moment.default.utc(this.get('plannedStartTime'), 'HH:mm').toISOString(),\n        'plannedEndTime': _moment.default.utc(this.get('plannedEndTime'), 'HH:mm').toISOString(),\n        'actualStartTime': _moment.default.utc(this.get('actualStartTime'), 'HH:mm').toISOString(),\n        'actualEndTime': _moment.default.utc(this.get('actualEndTime'), 'HH:mm').toISOString(),\n        'id': routeRes.routeid,\n        'providerName': routeRes.vehicle.providername,\n        'scheduleId': routeRes.scheduleRoute.scheduleid,\n        'status': routeRes.status,\n        'trackingId': routeRes.routeName,\n        'updatedAt': routeRes.dispatchRoute.updatedat,\n        'alertId': routeRes.routeStartEvent.alertid,\n        'otpValue': null,\n        'otpStatus': null,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': this.get('reconcileNotes')\n      };\n    },\n\n    buildStartAddressResForPayload(routeRes, address, startAddressId, reconcileDate) {\n      return {\n        'id': startAddressId,\n        'streetName': address.streetname,\n        'streetNumber': address.streetnumber,\n        'postalCode': address.postalcode,\n        'locality': address.locality,\n        'region': address.region,\n        'latitude': address.latitude,\n        'longitude': address.longitude,\n        'formattedAddress': address.formattedaddress,\n        'zoneId': address.zoneid,\n        'description': address.description,\n        'subRegion': address.region,\n        'createdAt': routeRes.startplace.address[0].createdat,\n        'updatedAt': routeRes.startplace.address[0].updatedat,\n        'op$1': routeRes.startAddress.__op,\n        'deleted$1': routeRes.startAddress.__deleted,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': this.get('reconcileNotes')\n      };\n    },\n\n    buildEndAddressResForPayload(routeRes, address, endAddressId, reconcileDate) {\n      return {\n        'id': endAddressId,\n        'streetName': address.streetname,\n        'streetNumber': address.streetnumber,\n        'postalCode': address.postalcode,\n        'locality': address.locality,\n        'region': address.region,\n        'latitude': address.latitude,\n        'longitude': address.longitude,\n        'formattedAddress': address.formattedaddress,\n        'zoneId': address.zoneid,\n        'description': address.description,\n        'subRegion': address.region,\n        'createdAt': routeRes.endplace.createdat,\n        'updatedAt': routeRes.endplace.updatedat,\n        'op$1': routeRes.endAddress.__op,\n        'deleted$1': routeRes.endAddress.__deleted,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': this.get('reconcileNotes')\n      };\n    },\n\n    buildStartPlaceResForPayload(routeRes, id, reconcileDate) {\n      return {\n        'id': id,\n        'createdAt': routeRes.startplace.createdat,\n        'updatedAt': routeRes.startplace.updatedat,\n        'placeCategoryTypeName': routeRes.startplace.placecategorytypename,\n        'addressId': routeRes.startplace.addressid,\n        'locationId': routeRes.startplace.locationid,\n        'geocodingMethod': routeRes.startplace.geocodingmethod,\n        'op$1': routeRes.startplace.__op,\n        'deleted$1': routeRes.startplace.__deleted,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildEndPlaceResForPayload(routeRes, id, reconcileDate) {\n      return {\n        'id': id,\n        'createdAt': routeRes.endplace.createdat,\n        'updatedAt': routeRes.endplace.updatedat,\n        'placeCategoryTypeName': routeRes.endplace.placecategorytypename,\n        'addressId': routeRes.endplace.addressid,\n        'locationId': routeRes.endplace.locationid,\n        'geocodingMethod': routeRes.endplace.geocodingmethod,\n        'op$1': routeRes.endplace.__op,\n        'deleted$1': routeRes.endplace.__deleted,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildRVDResForPayload(rvdResponse, reconcileDate) {\n      return {\n        'createdAt': rvdResponse.route.createdat,\n        'routeId': rvdResponse.routeid,\n        'driverId': this.get('selectedDriver').badgenumber,\n        'deleted$1': rvdResponse.route.__deleted,\n        'startTime': rvdResponse.route.actualstarttime,\n        'id': rvdResponse.route.trackingid,\n        'vehicleId': this.get('selectedVehicle').callsign,\n        'endTime': rvdResponse.route.actualendtime,\n        'op$1': rvdResponse.route.__op,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'updatedAt': rvdResponse.route.updatedat,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': this.get('reconcileNotes')\n      };\n    },\n\n    generateAddressId(address) {\n      const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n      const startAddress = this.get('routeStartAddress.freeformAddress');\n\n      if (address === startAddress) {\n        if (address !== reconcileRouteInfo.startAddress.formattedaddress) {\n          return Math.floor(Math.random() * 1000);\n        }\n\n        return reconcileRouteInfo.startAddress.id;\n      }\n\n      if (address !== reconcileRouteInfo.endAddress.formattedaddress) {\n        return Math.floor(Math.random() * 1000);\n      }\n\n      return reconcileRouteInfo.endAddress.id;\n    },\n\n    buildReconcileRoutePayload() {\n      const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n      const reconcileRVDResponse = this.get('reconcile.reconcileRVDResponse').find(route => route.routeid === parseInt(reconcileRouteInfo.routeid, 10));\n      const startAddress = this.get('routeStartAddressGeoNode');\n      const endAddress = this.get('routeEndAddressGeoNode');\n      const startAddressId = this.generateAddressId(this.get('routeStartAddress.freeformAddress'));\n      const endAddressId = this.generateAddressId(this.get('routeEndAddress.freeformAddress'));\n      const reconcileDate = new Date().toISOString();\n      return {\n        'events': this.buildEventResForPayload(reconcileRouteInfo, reconcileDate),\n        'route': this.buildRouteResForPayload(reconcileRouteInfo, startAddressId, endAddressId, reconcileDate),\n        'address': [this.buildStartAddressResForPayload(reconcileRouteInfo, startAddress, startAddressId, reconcileDate), this.buildEndAddressResForPayload(reconcileRouteInfo, endAddress, endAddressId, reconcileDate)],\n        'place': [this.buildStartPlaceResForPayload(reconcileRouteInfo, startAddressId, reconcileDate), this.buildEndPlaceResForPayload(reconcileRouteInfo, endAddressId, reconcileDate)],\n        'rvd': this.buildRVDResForPayload(reconcileRVDResponse, reconcileDate)\n      };\n    },\n\n    buildRouteDetailsForDeletePayload(response, rvdResponse) {\n      return {\n        'deleted$1': false,\n        'endAddressId': response.endplace.addressid,\n        'startAddressId': response.startplace.addressid,\n        'version': 1,\n        'op$1': response.dispatchRoute.__op || '',\n        'createdAt': response.dispatchRoute.createdat || response.createdAt,\n        'plannedStartTime': response.plannedStartTime,\n        'plannedEndTime': response.plannedEndTime,\n        'id': response.routeid,\n        'providerName': response.vehicle.providername,\n        'scheduleId': response.scheduleRoute.scheduleid,\n        'status': response.status,\n        'trackingId': response.routeName,\n        'updatedAt': response.dispatchRoute.updatedat || response.createdAt,\n        'actualStartTime': rvdResponse.route.actualstarttime,\n        'actualEndTime': rvdResponse.route.actualendtime,\n        'alertId': response.routeStartEvent.alertid,\n        'otpValue': null,\n        'otpStatus': null,\n        'reconcileDate': new Date().toISOString(),\n        'isReconciled': true,\n        'reconciliationNotes': rvdResponse.route.reconciliationnotes\n      };\n    },\n\n    buildRVDResponseForDeletePayload(response) {\n      return {\n        'createdAt': response.route.createdat || response.createdat,\n        'routeId': response.routeid,\n        'driverId': response.driver.id,\n        'deleted$1': false,\n        'startTime': response.route.actualstarttime,\n        'id': response.route.trackingid,\n        'vehicleId': response.vehicle.id,\n        'endTime': response.route.actualendtime,\n        'op$1': response.route.__op || '',\n        'scheduleId': response.route.scheduleid,\n        'updatedAt': response.route.updatedat || response.createdat\n      };\n    },\n\n    buildReconcileDeleteRoutePayload() {\n      const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n      const reconcileRVDResponse = this.get('reconcile.reconcileRVDResponse').find(route => route.routeid === parseInt(reconcileRouteInfo.routeid, 10));\n      return {\n        'route': this.buildRouteDetailsForDeletePayload(reconcileRouteInfo, reconcileRVDResponse),\n        'rvd': this.buildRVDResponseForDeletePayload(reconcileRVDResponse)\n      };\n    },\n\n    saveRouteInformationTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const routePayload = this.buildReconcileRoutePayload();\n        const reconcile = this.get('reconcile');\n        yield reconcile.updateReconcileRouteInfo(routePayload);\n        this.confirmSaveAction();\n      } catch (error) {\n        throw error;\n      }\n    }),\n    patchRouteTask: (0, _emberConcurrency.task)(function* (type) {\n      const routeAdapter = this.get('store').adapterFor('reconcile-route');\n      const routeDetails = this.get('reconcileRouteDetails');\n      const payload = {\n        id: routeDetails.routeId\n      };\n\n      if (type === 'delete route') {\n        payload.isDeleted = true;\n      } else if (type === 'verify route') {\n        payload.isCompleted = true;\n        payload.verifiedBy = this.session.data.authenticated.tokenInfo.firstName;\n        payload.verifiedDate = (0, _moment.default)().toISOString();\n        payload.userId = this.session.data.authenticated.userId;\n      } else if (type === 'reopen route') {\n        payload.isCompleted = false;\n        payload.reopenedBy = this.session.data.authenticated.tokenInfo.firstName;\n        payload.reopenedDate = (0, _moment.default)().toISOString();\n        payload.userId = this.session.data.authenticated.userId;\n      }\n\n      yield routeAdapter.patchRoute(payload, type);\n    }),\n    verifyRouteTask: (0, _emberConcurrency.task)(function* () {\n      const routeInfo = this.get('reconcileRouteInfo');\n      const routeId = routeInfo.routeid;\n      const verifyRouteData = yield this.reconcile.verifyRoute(routeId);\n      const isverified = verifyRouteData.data.isVerified;\n\n      if (isverified) {\n        this.set('routeVerifyDetails.verifiedBy', this.session.data.authenticated.tokenInfo.firstName);\n        this.set('routeVerifyDetails.verifiedDate', (0, _moment.default)().toISOString());\n        this.set('routeVerifyDetails.userId', this.session.data.authenticated.userId);\n        this.set('isRouteVerified', true);\n        this.set('selectedRouteActionType', null);\n        this.toggleEditing();\n        this.updateRouteInformation();\n      }\n    }),\n\n    formattedPhoneNo(phone) {\n      if (!phone) {\n        return;\n      }\n\n      const phoneNoStr = phone.toString().replace(/[^\\d]/g, '');\n\n      if (phoneNoStr.length === 10) {\n        return phoneNoStr.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3');\n      }\n\n      return phoneNoStr;\n    },\n\n    updateRouteInformation() {\n      Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', {\n        'reconcile-trip': [],\n        'reconcile-trip-stops': []\n      });\n    },\n\n    requireFieldVallidation() {\n      const errors = [];\n      const requiredFields = Object.keys(REQUIRE_FIELDS);\n      this.set('requireFieldError', {});\n      requiredFields.forEach(rf => {\n        const fieldValue = this.get(rf);\n\n        if (Ember.isEmpty(fieldValue)) {\n          errors.push({\n            validation: `${REQUIRE_FIELDS[rf]} is required`\n          });\n          this.set(`requireFieldError.${rf}`, true);\n        }\n      });\n      return errors;\n    },\n\n    routeInfoValidation() {\n      const errors = this.requireFieldVallidation();\n      const odoMeterStart = this.get('odoMeterStart') ? parseInt(this.get('odoMeterStart'), 10) : 0;\n      const odoMeterEnd = this.get('odoMeterEnd') ? parseInt(this.get('odoMeterEnd'), 10) : 0;\n\n      if (odoMeterStart > odoMeterEnd) {\n        errors.pushObject({\n          validation: 'Odometer Start value cannot be greater then Odometer End value.'\n        });\n        this.set('requireFieldError.odoMeterStart', true);\n      }\n\n      const tooltip = this.get('tooltip');\n\n      if (!errors.length) {\n        return true;\n      }\n\n      tooltip.pushConfirmation({\n        title: 'Route Information',\n        hasoverlay: true,\n        errors,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          this.set('inValidInfo', this.get('inValidRouteInfoError'));\n          tooltip.reset();\n        }\n      });\n      return false;\n    },\n\n    updateRouteIdsInformation() {\n      this.fetchRouteIdsTask.perform();\n    },\n\n    calculateZone(selectedAddress) {\n      const geocode = this.get('geocode');\n      return geocode.calculateZone(selectedAddress.position.lat, selectedAddress.position.lon).then(result => {\n        return result;\n      });\n    },\n\n    buildStartAndEndAddress(selectedAddress) {\n      const addressDetails = selectedAddress.attributes;\n      const formattedAddress = this.buildFormattedAddress(addressDetails.address);\n      return {\n        streetname: addressDetails.address.streetName,\n        formattedaddress: formattedAddress,\n        postalcode: addressDetails.address.postalCode,\n        latitude: addressDetails.coordinates.lat,\n        locality: addressDetails.address.city,\n        zoneid: selectedAddress.zone.zoneName,\n        longitude: addressDetails.coordinates.lng,\n        streetnumber: addressDetails.address.streetNumber,\n        description: addressDetails.address.city,\n        region: addressDetails.address.state\n      };\n    },\n\n    buildFormattedAddress(address) {\n      return `${address.streetNumber} ,${address.streetName},${address.city}, ${address.state}`;\n    },\n\n    async setDriverFields(selectedOption) {\n      const routeResponse = this.get('reconcile.routeResponseFromTripDate');\n      const foundRouteInfo = routeResponse.find(response => {\n        return response.driver.id === selectedOption.id;\n      });\n      this.setProperties({\n        driverPhoneNumber: foundRouteInfo.dispatchroutevehicledriver.driverPhoneNumber\n      });\n    },\n\n    confirmSaveAction() {\n      Ember.set(this, 'selectedLocationType', 'start');\n      Ember.set(this, 'saveDataPopup', '');\n      this.get('notifications').success('ROUTE ' + this.get('reconcileRouteInfo').routeName + ' SAVED SUCCESSFULLY');\n    },\n\n    actions: {\n      onValueChange(inputType, object, field, value) {\n        if (inputType === 'text') {\n          object.set(field, value);\n        }\n      },\n\n      async onChangeStartLocation(record) {\n        this.set('routeStartAddress', record);\n        const geoNode = await this.calculateZone(record);\n        const zoneName = await this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n        this.set('routeStartZone', zoneName.get('displayName'));\n        const startAddress = this.buildStartAndEndAddress(geoNode);\n        this.set('routeStartAddressGeoNode', startAddress);\n      },\n\n      async onChangeEndLocation(record) {\n        this.set('routeEndAddress', record);\n        const geoNode = await this.calculateZone(record);\n        const zoneName = await this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n        this.set('routeEndZone', zoneName.get('displayName'));\n        const endAddress = this.buildStartAndEndAddress(geoNode);\n        this.set('routeEndAddressGeoNode', endAddress);\n      },\n\n      oninputTextChange(type, value) {\n        Ember.set(this, 'isEditingStart', true);\n\n        switch (type) {\n          case _config.default.DRIVER_PHONE_NUMBER:\n            Ember.set(this, 'driverPhoneNumber', this.formattedPhoneNo(value));\n            break;\n\n          case _config.default.ODOMETER_START:\n            Ember.set(this, 'odoMeterStart', value);\n            break;\n\n          case _config.default.ODOMETER_END:\n            Ember.set(this, 'odoMeterEnd', value);\n            break;\n\n          case _config.default.RECONCILE_NOTES:\n            Ember.set(this, 'reconcileNotes', value);\n            break;\n\n          case _config.default.ROUTE_START_IDENTIFIER:\n            Ember.set(this, 'startName', value);\n            break;\n\n          case _config.default.ROUTE_START_NOTES:\n            Ember.set(this, 'routeStartNotes', value);\n            break;\n\n          case _config.default.ROUTE_END_IDENTIFIER:\n            Ember.set(this, 'endName', value);\n            break;\n\n          case _config.default.ROUTE_END_NOTES:\n            Ember.set(this, 'routeEndNotes', value);\n            break;\n\n          default: // code block\n\n        }\n      },\n\n      isNumber(keyCode) {\n        if (keyCode > 31 && (keyCode < 48 || keyCode > 57)) {\n          return false;\n        }\n\n        return true;\n      },\n\n      onProviderOptionSelect(option) {\n        Ember.set(this, 'selectedProvider', option);\n        this.notifyPropertyChange('vehicleOptions');\n        Ember.set(this, 'selectedRoute', null);\n        Ember.set(this, 'selectedVehicle', null);\n      },\n\n      onRouteTypeSelect(option) {\n        Ember.set(this, 'selectedRouteType', option);\n      },\n\n      onRouteActionTypeSelect(option) {\n        Ember.set(this, 'selectedRouteActionType', option);\n\n        switch (option.id) {\n          case VERIFY_ROUTE:\n            this.handleVerifyRoute();\n            break;\n\n          case REOPEN_ROUTE:\n            this.showToolTip('Route Information', 'Reopen this route to allow editing?', REOPEN_ROUTE);\n            break;\n\n          case BREAKDOWN_REPLACEMENT:\n            this.get('workspace').pushState('reconcileReplacementBreakdown', {\n              route: this.get('reconcileRouteDetails'),\n              action: this.actions.closeDialogHandler.bind(this, option.id)\n            });\n            break;\n\n          case REPORT_BREAKDOWN:\n            this.get('workspace').pushState('reconcileVehicleBreakdown', {\n              route: this.get('reconcileRouteDetails'),\n              action: this.actions.closeDialogHandler.bind(this, option.id)\n            });\n            break;\n\n          case RESCUE:\n            this.get('workspace').pushState('rescueRouteReconcile', {\n              route: this.get('reconcileRouteInfo'),\n              action: this.actions.closeDialogHandler.bind(this, option.id)\n            });\n            break;\n\n          default:\n            break;\n        }\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.format('LT'));\n      },\n\n      reopenRouteSuccess() {\n        Ember.set(this, 'selectedRouteActionType', null);\n        const routeDetails = Ember.get(this, 'reconcile.reconcileRouteDetails');\n        Ember.set(routeDetails, 'isCompleted', false);\n      },\n\n      deleteRouteSuccess() {\n        this.resetProperties();\n      },\n\n      cancel() {\n        Ember.set(this, 'saveDataPopup', '');\n        Ember.set(this, 'selectedRouteActionType', null);\n        this.setResetVerifyRouteOptions(null, null, null);\n        this.toggleEditing();\n      },\n\n      cancelAction() {\n        Ember.set(this, 'enableEditing', false);\n        this.setResetVerifyRouteOptions(null, null, null);\n      },\n\n      onEditButtonClick() {\n        this.toggleEditing();\n      },\n\n      onSaveButtonClick() {\n        // const validRouteInfo = this.routeInfoValidation();\n        // if (validRouteInfo) {\n        //   this.showToolTip('Route Information', 'Do you want to save route information?', 'Save Route');\n        //   set(this, 'workspace.activeContext.topActiveContext.resetMapFlag', true);\n        // }\n        const selectedRouteInfo = this.get('dwhService.selectedRouteInfo');\n        selectedRouteInfo.save();\n      },\n\n      onUndoButtonClick() {\n        const map = this.get('workspace.activeContext.topActiveContext.map');\n\n        if (this.get('geocode.activeMarker')) {\n          map.removeMarker(this.get('geocode.activeMarker'));\n        }\n\n        this.set('requireFieldError', null);\n        this.set('selectedLocationType', 'start');\n        this.toggleEditing();\n      },\n\n      onRadioButtonClick(val) {\n        this.set('selectedLocationType', val);\n      },\n\n      async onDeleteButtonClick() {\n        const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n        const isTripExists = await this.reconcileLambda.validateRouteBeforeDeleting.perform(reconcileRouteInfo.routeid, 'validate');\n        const title = 'Route Information';\n        let tip = `Do you want to delete route ${this.get('reconcileRouteInfo').routeid}?`;\n        const successMsg = `ROUTE ${this.get('reconcileRouteInfo').routeid} DELETED SUCCESSFULLY`;\n        const tooltip = this.get('tooltip');\n\n        if (isTripExists.count !== '0') {\n          tip = isTripExists.message;\n          tooltip.pushConfirmation({\n            title,\n            tip,\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            },\n            hasOverlay: true\n          });\n        } else {\n          const payload = this.buildReconcileDeleteRoutePayload();\n          tooltip.pushConfirmation({\n            title,\n            tip,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('reconcile').deleteReconcileRouteInfo(payload, 'delete').then(() => {\n                this.send('deleteRouteSuccess');\n                this.get('notifications').success(successMsg);\n                tooltip.reset();\n              }).catch(error => {\n                let message;\n\n                switch (error.status) {\n                  case 400:\n                    message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                    break;\n\n                  default:\n                    message = 'There was a problem in delete route, please try again.';\n                    break;\n                }\n\n                this.get('notifications').warning(message);\n                tooltip.reset();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: () => {\n              this.send('cancelAction');\n              return tooltip.reset();\n            },\n            hasOverlay: true\n          });\n        }\n      },\n\n      onLocationHeaderClick() {\n        const collapseState = this.get('collapseState');\n\n        if (collapseState === COLLAPSED) {\n          this.set('collapseState', EXPANDED);\n        } else {\n          this.set('collapseState', COLLAPSED);\n        }\n      },\n\n      onReconcileNotesHeaderClick() {\n        const notesCollapseState = this.get('notesCollapseState');\n\n        if (notesCollapseState === COLLAPSED) {\n          this.set('notesCollapseState', EXPANDED);\n        } else {\n          this.set('notesCollapseState', COLLAPSED);\n        }\n      },\n\n      onDetailsHeaderClick() {\n        const detailCollapseState = this.get('detailCollapseState');\n\n        if (detailCollapseState === COLLAPSED) {\n          this.set('detailCollapseState', EXPANDED);\n        } else {\n          this.set('detailCollapseState', COLLAPSED);\n        }\n      },\n\n      closeDialogHandler(option, isSaved) {\n        if (option === REPORT_BREAKDOWN) {\n          Ember.set(this, 'workspace.activeContext.topActiveContext.resetLocation', true);\n        }\n\n        Ember.set(this, 'selectedRouteActionType', null);\n\n        if (!isSaved) {\n          return;\n        }\n\n        if (option === REPORT_BREAKDOWN) {\n          this.updateRouteInformation();\n          Ember.set(this, 'workspace.activeContext.topActiveContext.resetLocation', true);\n        } else if (option === BREAKDOWN_REPLACEMENT || option === RESCUE) {\n          this.updateRouteIdsInformation();\n          this.updateRouteInformation();\n        }\n      },\n\n      onZoneOptionsSelect(isStart, option) {\n        if (isStart) {\n          Ember.set(this, 'routeStartZone', option);\n        } else {\n          Ember.set(this, 'routeEndZone', option);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/route-information-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    title: 'Reconcile',\n    DRIVER_PHONE_NUMBER: 100,\n    ODOMETER_START: 101,\n    ODOMETER_END: 102,\n    ROUTE_START_IDENTIFIER: 104,\n    ROUTE_START_NOTES: 105,\n    ROUTE_END_IDENTIFIER: 106,\n    ROUTE_END_NOTES: 107,\n    RECONCILE_NOTES: 108,\n    routeActionTypes: [{\n      id: 1,\n      name: 'Verify Route'\n    }, {\n      id: 2,\n      name: 'Reopen Route'\n    }, {\n      id: 3,\n      name: 'Report Breakdown'\n    }, {\n      id: 4,\n      name: 'Breakdown Replacement'\n    }, {\n      id: 5,\n      name: 'Rescue'\n    }],\n    routeTypes: [{\n      id: 1,\n      name: 'Regular'\n    }, {\n      id: 2,\n      name: 'Breakdown'\n    }, {\n      id: 3,\n      name: 'Breakdown Replacement'\n    }, {\n      id: 4,\n      name: 'Rescue'\n    }, {\n      id: 5,\n      name: 'Rescue Replacement'\n    }, {\n      id: 6,\n      name: 'Keeper'\n    }],\n    RECONCILE_ROUTE_EDITABLE_FIELDS_OBJ: [{\n      fieldKey: 'driverPhoneNumber',\n      fieldPath: 'dispatchroutevehicledriver.driverPhoneNumber',\n      topic: 'tiq_dispatch_transportiq_routevehicledriver_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return oldVal !== newValue;\n      }\n    }, {\n      fieldKey: 'odoMeterStart',\n      fieldPath: 'routeStartEvent.odo',\n      topic: 'tiq_avlm_transportiq_Event_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return parseInt(oldVal, 10) !== parseInt(newValue, 10);\n      }\n    }, {\n      fieldKey: 'odoMeterEnd',\n      fieldPath: 'routeEndEvent.odo',\n      topic: 'tiq_avlm_transportiq_Event_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return parseInt(oldVal, 10) !== parseInt(newValue, 10);\n      }\n    }, {\n      fieldKey: 'selectedVehicle',\n      fieldPath: 'vehicle',\n      topic: 'tiq_transportiq_routevehicledriver_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return JSON.stringify(oldVal) !== JSON.stringify(newValue);\n      }\n    }, {\n      fieldKey: 'selectedDriver',\n      fieldPath: 'driver',\n      topic: 'tiq_transportiq_routevehicledriver_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return JSON.stringify(oldVal) !== JSON.stringify(newValue);\n      }\n    }, {\n      fieldKey: 'startName',\n      fieldPath: 'startplace.address.firstObject.alias',\n      topic: 'tiq_address_transportiq_Place_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return oldVal !== newValue;\n      }\n    }, {\n      fieldKey: 'endName',\n      fieldPath: 'endplace.alias',\n      topic: 'tiq_address_transportiq_Place_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return oldVal !== newValue;\n      }\n    }, {\n      fieldKey: 'routeStartAddressGeoNode',\n      fieldPath: 'startAddress',\n      topic: 'tiq_avlm_transportiq_address_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return JSON.stringify(oldVal) !== JSON.stringify(newValue);\n      }\n    }, {\n      fieldKey: 'routeEndAddressGeoNode',\n      fieldPath: 'endAddress',\n      topic: 'tiq_avlm_transportiq_address_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return JSON.stringify(oldVal) !== JSON.stringify(newValue);\n      }\n    }, {\n      fieldKey: 'routeStartNotes',\n      fieldPath: 'startplace.address.firstObject.notes',\n      topic: 'tiq_address_transportiq_Address_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return oldVal !== newValue;\n      }\n    }, {\n      fieldKey: 'routeEndNotes',\n      fieldPath: 'endplace.notes',\n      topic: 'tiq_address_transportiq_Address_s3',\n      isValueChanged: (oldVal, newValue) => {\n        return oldVal !== newValue;\n      }\n    }],\n    routeFields: [{\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driverId'\n    }, {\n      type: 'text',\n      label: 'Driver Phone Number',\n      valuePath: 'driverPhoneNumber'\n    }, {\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleName'\n    }, {\n      type: 'time',\n      label: 'Planned Start Time',\n      valuePath: 'plannedStartTime'\n    }, {\n      type: 'time',\n      label: 'Planned End Time',\n      valuePath: 'plannedEndTime'\n    }, {\n      type: 'time',\n      label: 'Actual Start Time',\n      valuePath: 'actualstarttime'\n    }, {\n      type: 'time',\n      label: 'Actual End Time',\n      valuePath: 'actualendtime'\n    }, {\n      type: 'text',\n      label: 'Odometer Start',\n      valuePath: 'startGarage.actualodometer'\n    }, {\n      type: 'text',\n      label: 'Odometer End',\n      valuePath: 'endGarage.actualodometer'\n    }, {\n      type: 'options',\n      label: 'Route Type',\n      valuePath: 'type',\n      options: 'routeTypeOptions'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/route-information-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"hstb0/QB\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"field\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-widget\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"route-info column-widget-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-title d-flex align-items-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Route Information\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"route-action ml-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"searchField\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"tagName\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[[27,\\\"not\\\",[[23,[\\\"routeSelectionPerformed\\\"]]],null],\\\"name\\\",\\\"Route Action\\\",true,\\\"div\\\",[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedRouteActionType\\\",\\\"id\\\"]],[23,[\\\"routeActionTypeOptions\\\"]]],null],[23,[\\\"routeActionTypeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteActionTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"and\\\",[[23,[\\\"actionsEnabled\\\"]],[23,[\\\"isRouteEditingAllowed\\\"]],[23,[\\\"enableEditing\\\"]]],null]],[11,\\\"class\\\",\\\"column-widget-button minimize-button \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"tooltipClass\\\",\\\"innerClass\\\",\\\"side\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"tooltip-error\\\",\\\"tooltip-error1\\\",\\\"bottom\\\",\\\"body\\\",\\\"Edit\\\"]]],false],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onEditButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null]],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-undo\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"tooltipClass\\\",\\\"innerClass\\\",\\\"side\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"tooltip-error\\\",\\\"tooltip-error1\\\",\\\"bottom\\\",\\\"body\\\",\\\"Undo\\\"]]],false],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onUndoButtonClick\\\"]],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableSavebtn\\\"]],[11,\\\"class\\\",\\\"column-widget-button minimize-button\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"tooltipClass\\\",\\\"innerClass\\\",\\\"side\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"tooltip-error\\\",\\\"tooltip-error1\\\",\\\"bottom\\\",\\\"body\\\",\\\"Save\\\"]]],false],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSaveButtonClick\\\"]],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[27,\\\"and\\\",[[23,[\\\"actionsEnabled\\\"]],[23,[\\\"isRouteDeletingAllowed\\\"]]],null]],null]],[11,\\\"class\\\",\\\"column-widget-button minimize-button \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"tooltipClass\\\",\\\"innerClass\\\",\\\"side\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"tooltip-error\\\",\\\"tooltip-error1\\\",\\\"bottom\\\",\\\"body\\\",\\\"Delete\\\"]]],false],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDeleteButtonClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget wmax-100\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row form-widget-body ember-modal-dialog position-relative\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"table\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"detailCollapseState\\\"]],\\\"expanded\\\"],null],\\\"section-table mt-3 pb-2 h-95\\\",\\\"section-table mt-3 pb-2\\\"],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"header cursor-none\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"colspan\\\",\\\"100\\\"],[11,\\\"class\\\",\\\"cell-header\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"h4\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-sort-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                  Route Info\\\\n                \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDetailsHeaderClick\\\"]],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[2,\\\"\\\"],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"detailCollapseState\\\"]],\\\"expanded\\\"],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"config\\\",\\\"routeFields\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[22,2,[\\\"label\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"text\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"input\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"selectedRouteInfo\\\"]],[22,2,[\\\"valuePath\\\"]]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,2,[\\\"type\\\"]],[23,[\\\"selectedRouteInfo\\\"]],[22,2,[\\\"valuePath\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"time\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"disabled\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"value\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"en\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null],1,false,false,\\\"hh:mm A\\\",true,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"selectedRouteInfo\\\"]],[22,2,[\\\"valuePath\\\"]]],null]],null],\\\"hh:mm A\\\"],[[\\\"allow-empty\\\"],[true]]],\\\"h:i K\\\",[23,[\\\"shiftTimeRange\\\",\\\"endofday\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"startofday\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,2,[\\\"type\\\"]],[23,[\\\"selectedRouteInfo\\\"]],[22,2,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"options\\\"],null]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"tagName\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"name\\\",true,[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null],\\\"div\\\",[27,\\\"find-by\\\",[\\\"id\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"selectedRouteInfo\\\"]],[22,2,[\\\"valuePath\\\"]]],null]],null],[27,\\\"get\\\",[[22,2,[\\\"options\\\"]]],null]],null],[23,[\\\"routeTypeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,2,[\\\"type\\\"]],[23,[\\\"selectedRouteInfo\\\"]],[22,2,[\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\\n\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"50%\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"miles-section\\\"],[9],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"miles-box\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Keeper Route:\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[12,\\\"disabled\\\",true],[11,\\\"class\\\",\\\"miles-input\\\"],[12,\\\"value\\\",[21,\\\"keeper\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex keeper-route-miles\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"miles-box\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Max Miles Per Hour:\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[12,\\\"disabled\\\",true],[11,\\\"class\\\",\\\"miles-input\\\"],[12,\\\"value\\\",[21,\\\"distanceLimit\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"miles-box\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Max Trips Per Hour:\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[12,\\\"disabled\\\",true],[11,\\\"class\\\",\\\"miles-input\\\"],[12,\\\"value\\\",[21,\\\"tripLimit\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[2,\\\"\\\"],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"table\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"collapseState\\\"]],\\\"expanded\\\"],null],\\\"section-table mt-3 pb-2 h-right-col\\\",\\\"section-table mt-3 pb-2\\\"],null]],[9],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"header cursor-none\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[11,\\\"colspan\\\",\\\"100\\\"],[11,\\\"class\\\",\\\"cell-header\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"h4\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-sort-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    Route Location Info\\\\n                  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onLocationHeaderClick\\\"]],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"collapseState\\\"]],\\\"expanded\\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"100\\\"],[11,\\\"class\\\",\\\"cell-header start-end-button\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[[27,\\\"not\\\",[[23,[\\\"selectedRouteInfo\\\"]]],null],\\\"start\\\",[23,[\\\"selectedLocationType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"start\\\"],null],\\\"radio-button-input form-check form-check-label\\\"]],{\\\"statements\\\":[[0,\\\"                      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Start\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"radio-button\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[[27,\\\"not\\\",[[23,[\\\"selectedRouteInfo\\\"]]],null],\\\"end\\\",[23,[\\\"selectedLocationType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"end\\\"],null],\\\"radio-button-input form-check form-check-label\\\"]],{\\\"statements\\\":[[0,\\\"                      \\\"],[7,\\\"span\\\"],[9],[0,\\\"End\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label p-left-40\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-components-datetimeflatpickr ember-view \\\"],[9],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\",\\\"class\\\"],[[27,\\\"if\\\",[[23,[\\\"requireFieldError\\\",\\\"startName\\\"]],\\\"error\\\"],null],[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"selectedLocation\\\"]],\\\"iqid\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",\\\"text\\\",[23,[\\\"selectedLocation\\\"]],\\\"iqid\\\"],null],\\\"ember-text-field ember-flatpickr-input ember-view flatpickr-input\\\\n                        route-location-info-name-cell\\\"]]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label p-left-40\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n                      \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"onPickSearch\\\",\\\"onAddressSearch\\\",\\\"removeMarker\\\",\\\"canReset\\\",\\\"selectAddress\\\"],[[27,\\\"if\\\",[[23,[\\\"requireFieldError\\\",\\\"routeStartAddress\\\"]],\\\"error\\\"],null],[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeStartLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeStartLocation\\\"],null],true,[23,[\\\"canReset\\\"]],[23,[\\\"selectedLocationAddress\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label p-left-40\\\"],[9],[0,\\\"Zone\\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[true,[23,[\\\"option\\\"]],true,[23,[\\\"routeStartZone\\\"]],[23,[\\\"zoneOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneOptionsSelect\\\",true],null]]],{\\\"statements\\\":[[0,\\\"                      \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"cell-label valign p-left-40  \\\"],[9],[0,\\\"Address Notes\\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input address-textarea\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ember-view\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"textarea\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"selectedLocation\\\"]],\\\"notes\\\"],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",\\\"text\\\",[23,[\\\"selectedLocation\\\"]],\\\"notes\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"class\\\",\\\"ember-text-field ember-flatpickr-input ember-view \\\"],[9],[10],[0,\\\"                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isRouteVerified\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"mt-5 ml-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"success-verify-text \\\"],[9],[0,\\\"\\\\n                  This route has been verified\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"routeVerifyDetails\\\",\\\"verifiedBy\\\"]]],null,{\\\"statements\\\":[[0,\\\"                  by '\\\"],[1,[23,[\\\"routeVerifyDetails\\\",\\\"verifiedBy\\\"]],false],[0,\\\"'\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"routeVerifyDetails\\\",\\\"verifiedDate\\\"]]],null,{\\\"statements\\\":[[0,\\\"                  on \\\"],[1,[23,[\\\"routeVerifyDetails\\\",\\\"verifiedDate\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                  . No further editing can be made to the route or associated trips. The user must 'Reopen Route' to\\\\n                  enable editing.\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"table\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"notesCollapseState\\\"]],\\\"expanded\\\"],null],\\\"section-table mt-3 pb-2 h-right-col-1\\\",\\\"section-table mt-3 pb-2\\\"],null]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"header cursor-none\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[11,\\\"colspan\\\",\\\"100\\\"],[11,\\\"class\\\",\\\"cell-header\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"h4\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-sort-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    Reconcile Notes\\\\n                  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onReconcileNotesHeaderClick\\\"]],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"notesCollapseState\\\"]],\\\"expanded\\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ember-view\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"textarea\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canEdit\\\"]]],null]],[12,\\\"value\\\",[21,\\\"reconcileNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"config\\\",\\\"RECONCILE_NOTES\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"class\\\",\\\"textarea-reconcile-test ember-text-field ember-flatpickr-input ember-view\\\"],[9],[10],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/route-information-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-end-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/routes-end-form-widget/config\", \"adept-iq/config/mapped-permIds\", \"moment\", \"adept-iq/mixins/version-check\"], function (_exports, _component, _config, _mappedPermIds, _moment, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_versionCheck.default, {\n    classNames: ['routes-end-form-widget'],\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n\n    allStopsPerformed(dispatchRoute) {\n      let orderedStops = dispatchRoute.get('orderedStopsWithBreaks');\n      if (!orderedStops) return false;\n      orderedStops = orderedStops.filterBy('isPickOrDrop'); // empty route\n\n      if (!orderedStops || orderedStops.length === 0) return true;\n      const allStopsPerformed = orderedStops.every(stop => stop.get('isPerformed') || stop.get('isNoShow'));\n      return allStopsPerformed;\n    },\n\n    validateRecords() {\n      const canUserSetRouteLimit = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.limitRoute);\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const plannedStartTime = (0, _moment.default)(record.get('dispatchRoute.plannedStartTime'));\n        const plannedEndTime = (0, _moment.default)(record.get('dispatchRoute.plannedEndTime'));\n        const actualStartTime = (0, _moment.default)(record.get('actualStartTimestamp'));\n        const actualEndTime = (0, _moment.default)(record.get('timestamp'));\n        const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n        //extensionUsed is a negative number if actualStartTime is before plannedStartTime (early start consuming extension time)\n\n        const extensionUsed = Math.min(0, actualStartTime.diff(plannedStartTime, 'minutes'));\n        const extensionRemaining = routeMaxExtension + extensionUsed;\n        const extensionExceeded = actualEndTime.diff(plannedEndTime, 'minutes') > extensionRemaining;\n        const lastPerformedStopTime = (0, _moment.default)(record.get('dispatchRoute.lastDropStop.computedActualDepartTime'));\n        const allStopsPerformed = this.allStopsPerformed(record.get('dispatchRoute'));\n        record.set('extensionExceeded');\n\n        if (lastPerformedStopTime.isSameOrAfter(actualEndTime)) {\n          this.get('editModal.errors').pushObject('The route end time must be after the time of last performed stop');\n          valid = false;\n        } // if we have the permission, we don't show the warning, instead the confirm tooltip will be altered in routes-widget\n\n\n        if (extensionExceeded && !canUserSetRouteLimit) {\n          this.get('editModal.errors').pushObject(`The route end time may not exceed the planned Route End time by more than ${extensionRemaining} minutes.`);\n          valid = false;\n        }\n\n        if (!allStopsPerformed) {\n          this.get('editModal.errors').pushObject('Route end time cannot be set until all stops performed');\n          valid = false;\n        }\n\n        record.set('odometer', null); // extension exceeded and user have permission to overide\n\n        if (extensionExceeded && canUserSetRouteLimit) record.set('extensionExceeded', extensionExceeded);\n      });\n      return valid;\n    },\n\n    onEnter() {\n      if (this.validateRecords()) {\n        const title = this.get('title');\n        this.get('service').apply(title);\n      }\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {},\n\n      async onApplyClick() {\n        const dispatchRoute = this.get('editableRecords.firstObject.dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        const closeCallback = () => {\n          this.send('onCloseClick');\n        }; // Check dispatchRoute version first\n\n\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n        if (this.validateRecords()) {\n          try {\n            await lockRouteAction();\n            const title = this.get('title');\n            this.get('service').applyWithCallback(title, unlockRouteAction);\n          } catch (error) {\n            await unlockRouteAction();\n            return;\n          }\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-end-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route Id',\n        valuePath: 'name',\n        editable: false\n      }]\n    }, {\n      title: 'Route',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route ID',\n        valuePath: 'name',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'vehicleId',\n        type: 'text',\n        label: 'Vehicle ID',\n        valuePath: 'dispatchRoute.assignedVehicle.name',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'driverId',\n        type: 'text',\n        label: 'Driver ID',\n        valuePath: 'dispatchRoute.assignedDriver.driverId',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'driverId',\n        type: 'text',\n        label: 'Driver Name',\n        valuePath: 'dispatchRoute.assignedDriver.fullName',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'phoneNuber',\n        type: 'text',\n        label: 'Phone Number',\n        valuePath: 'dispatchRoute.latestRouteVehicleDriver.driverPhoneNumber',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }]\n    }, {\n      title: 'Route End',\n      fields: [{\n        title: 'Route End',\n        type: 'datetimeflatpickr',\n        label: 'Planned End Time',\n        valuePath: 'dispatchRoute.plannedEndTime',\n        editable: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        readonlyCell: true,\n        defaultWidth: 50\n      }, {\n        id: 'timestamp',\n        type: 'datetimeflatpickr',\n        label: 'Actual End Time',\n        valuePath: 'timestamp',\n        editable: true,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        defaultWidth: 50,\n        extra: {\n          minTimePath: 'dispatchRoute.lastDropStop.actualDepartTime'\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/routes-form-widget/config\", \"adept-iq/pods/components/iq-widgets/routes-form-widget/scheduleConfig\", \"moment\", \"adept-iq/mixins/version-check\", \"adept-iq/models/dashboard\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _component, _config, _scheduleConfig, _moment, _versionCheck, _dashboard, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_versionCheck.default, {\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    classNames: ['data-test-route-form-widget', 'route-form-widget'],\n    onRouteRecordChanged: Ember.observer('editableRecords.firstObject.route.{tripLimit,distanceLimit}', function () {\n      const tripLimit = this.get('editableRecords.firstObject.route.tripLimit');\n      const distanceLimit = this.get('editableRecords.firstObject.route.distanceLimit');\n      this.set('saveDisable', false);\n\n      if (!tripLimit || !distanceLimit) {\n        this.set('saveDisable', true);\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (role === _dashboard.SCHEDULE_ROLENAME) {\n        this.set('editableSections', _scheduleConfig.default.editableSections);\n      } // initialize for observer\n\n\n      this.get('editableRecords.firstObject');\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords');\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const rdv = record.get('latestRouteVehicleDriver'); // make sure we apply the date to the plannedStartTime and plannedEndTime\n\n        const plannedStartTime = (0, _moment.default)(rdv.get('startTime'));\n        const plannedEndTime = (0, _moment.default)(rdv.get('endTime'));\n        const firstStopMaxTime = record.get('firstStopMaxTime');\n        const lastStopTime = record.get('lastStopTime');\n        const routeMaxTimeLimit = record.get('routeMaxTimeLimit');\n        const routeTimeDiff = plannedEndTime.diff(plannedStartTime, 'minutes');\n\n        if (firstStopMaxTime && plannedStartTime.isSameOrAfter(firstStopMaxTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Route start time cannot be after start time of first Stop');\n        }\n\n        if (lastStopTime && lastStopTime.isSameOrAfter(plannedEndTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Route end time cannot be before end time of last stop');\n        }\n\n        if (routeTimeDiff > routeMaxTimeLimit) {\n          valid = false;\n          this.get('editModal.errors').pushObject(`Route length of ${routeTimeDiff} exceeds config Route Max Time Limit of ${routeMaxTimeLimit} minutes`);\n        }\n\n        if (plannedStartTime.isAfter(plannedEndTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Start Time cannot be after End Time');\n        }\n      });\n      return valid;\n    },\n\n    validateRecordsForScheduling() {\n      let valid = true;\n      const records = this.get('editableRecords');\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        // make sure we apply the date to the plannedStartTime and plannedEndTime\n        const plannedStartTime = (0, _moment.default)(record.get('plannedStartTime'));\n        const plannedEndTime = (0, _moment.default)(record.get('plannedEndTime'));\n        const originalPlannedStartTime = (0, _moment.default)(record.get('plannedStartTime'));\n        const originalPlannedEndTime = (0, _moment.default)(record.get('plannedEndTime'));\n\n        if (plannedStartTime.isAfter(plannedEndTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Start Time cannot be after End Time');\n        }\n\n        const routeMaxAdjustments = routeMaxExtension;\n        const startTimeDiff = plannedStartTime.diff(originalPlannedStartTime, 'minutes');\n\n        if (Math.abs(startTimeDiff) > routeMaxAdjustments) {\n          valid = false;\n          this.get('editModal.errors').pushObject(`Start Time cannot be adjusted more than ${routeMaxAdjustments} minutes`);\n        }\n\n        const endTimeDiff = plannedEndTime.diff(originalPlannedEndTime, 'minutes');\n\n        if (Math.abs(endTimeDiff) > routeMaxAdjustments) {\n          valid = false;\n          this.get('editModal.errors').pushObject(`End Time cannot be adjusted more than ${routeMaxAdjustments} minutes`);\n        }\n\n        if (Ember.isEmpty(record.get('tripLimit'))) {\n          record.set('tripLimit', 0);\n        }\n\n        if (Ember.isEmpty(record.get('distanceLimit'))) {\n          record.set('distanceLimit', 0);\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const records = this.get('editableRecords') || [];\n        const role = this.get('workspace.dashboardModel.role');\n        this.set('editModal.errors', []);\n\n        if (role === _dashboard.DISPATCH_ROLENAME) {\n          records.forEach(record => {\n            const route = (0, _unwrapProxy.unwrapProxy)(record.get('route'));\n            const latestRouteVehicleDriver = (0, _unwrapProxy.unwrapProxy)(record.get('latestRouteVehicleDriver'));\n            route.rollbackAttributes();\n            latestRouteVehicleDriver.rollbackAttributes();\n            record.rollbackAttributes();\n          });\n          return;\n        }\n\n        records.forEach(record => {\n          record.rollbackAttributes();\n        });\n      },\n\n      async onApplyClick() {\n        const role = this.get('workspace.dashboardModel.role');\n\n        if (role === _dashboard.DISPATCH_ROLENAME) {\n          const dispatchRoute = this.get('editableRecords.firstObject');\n          const lockRouteAction = this.get('lockRouteAction').bind(this);\n          const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n          this.set('dispatchRouteToCheck', dispatchRoute);\n\n          const closeCallback = () => {\n            this.send('onCloseClick');\n          }; // Check dispatchRoute version first\n\n\n          await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n          if (this.validateRecords()) {\n            try {\n              await lockRouteAction();\n              const title = this.get('title');\n              this.get('service').applyWithCallback(title, async () => await unlockRouteAction(0));\n            } catch (err) {\n              await unlockRouteAction();\n              return;\n            }\n          }\n\n          return;\n        }\n\n        if (this.validateRecordsForScheduling()) {\n          const title = this.get('title');\n          this.get('service').apply(title);\n        }\n      },\n\n      onCloseClick() {\n        this.actions.onUndoClick.call(this);\n        this.get('service').close();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route Id',\n        valuePath: 'route.name',\n        editable: false\n      }]\n    }, {\n      title: 'Edit Route',\n      fields: [{\n        id: 'name',\n        type: 'text',\n        label: 'Route Name',\n        valuePath: 'route.name',\n        readonlyCell: true\n      }, {\n        id: 'date',\n        type: 'date',\n        label: 'Date',\n        valuePath: 'route.plannedStartTime',\n        format: `${_environment.default.dateTimeFormat.dateFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        readonlyCell: true\n      }, {\n        id: 'start',\n        type: 'datetimeflatpickr',\n        label: 'Start Time',\n        valuePath: 'latestRouteVehicleDriver.startTime',\n        readonlyCell: false,\n        hidden: false,\n        extra: {\n          routeStartFlag: 'routeStartFlag',\n          minTimePath: 'plannedTimeMin',\n          maxTimePath: 'firstStopMaxTime'\n        }\n      }, {\n        id: 'end',\n        type: 'datetimeflatpickr',\n        label: 'End Time',\n        editable: true,\n        hidden: false,\n        valuePath: 'latestRouteVehicleDriver.endTime',\n        readonlyCell: false,\n        extra: {\n          minTimePath: 'lastStopTime',\n          maxTimePath: 'plannedTimeMax'\n        }\n      }, {\n        id: 'tripLimit',\n        type: 'number',\n        label: 'Trip Limit',\n        valuePath: 'route.tripLimit',\n        readonlyCell: false,\n        editable: true,\n        extra: {\n          setLimit: true,\n          min: 0,\n          max: 10\n        }\n      }, {\n        id: 'distanceLimit',\n        type: 'number',\n        label: 'Distance Limit',\n        valuePath: 'route.distanceLimit',\n        readonlyCell: false,\n        editable: true,\n        extra: {\n          setLimit: true,\n          min: 0,\n          max: 100\n        }\n      }, {\n        id: 'vehicleId',\n        type: 'number',\n        label: 'Vehicle ID',\n        valuePath: 'assignedVehicle.name',\n        readonlyCell: true,\n        editable: true\n      }, {\n        id: 'driverId',\n        type: 'text',\n        label: 'Driver ID',\n        valuePath: 'assignedDriver.driverId',\n        editable: true,\n        readonlyCell: true\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-form-widget/scheduleConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route Id',\n        valuePath: 'name',\n        editable: false\n      }]\n    }, {\n      title: 'Edit Route',\n      fields: [{\n        id: 'name',\n        type: 'text',\n        label: 'Route Name',\n        valuePath: 'name',\n        readonlyCell: true\n      }, {\n        id: 'date',\n        type: 'date',\n        label: 'Date',\n        valuePath: 'plannedStartTime',\n        format: `${_environment.default.dateTimeFormat.dateFlatPickr}`,\n        // date flatpickr uses a different formating than moment\n        readonlyCell: true\n      }, {\n        id: 'start',\n        type: 'datetimeflatpickr',\n        editable: true,\n        hidden: false,\n        label: 'Start Time',\n        valuePath: 'plannedStartTime'\n      }, {\n        id: 'end',\n        type: 'datetimeflatpickr',\n        label: 'End Time',\n        editable: true,\n        hidden: false,\n        valuePath: 'plannedEndTime'\n      }, {\n        id: 'tripLimit',\n        type: 'number',\n        label: 'Trip Limit',\n        valuePath: 'tripLimit',\n        readonlyCell: false,\n        editable: true\n      }, {\n        id: 'distanceLimit',\n        type: 'number',\n        label: 'Distance Limit',\n        valuePath: 'distanceLimit',\n        readonlyCell: false,\n        editable: true\n      }, {\n        id: 'vehicleId',\n        type: 'number',\n        label: 'Vehicle ID',\n        valuePath: 'vehicle.name',\n        readonlyCell: true,\n        editable: true\n      }, {\n        id: 'driverId',\n        type: 'text',\n        label: 'Driver ID',\n        valuePath: 'assignedDriver.driverId',\n        editable: true,\n        readonlyCell: true\n      }, {\n        id: 'schedulingMode',\n        type: 'enum',\n        label: 'Scheduling Mode',\n        valuePath: 'schedulingMode',\n        cellDesc: 'schedulingMode',\n        editable: true,\n        hidden: false,\n        extra: {\n          options: ['automatic', 'manual'],\n          allowMultiple: false\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-start-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/routes-start-form-widget/config\", \"moment\", \"adept-iq/mixins/version-check\"], function (_exports, _component, _config, _moment, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_versionCheck.default, {\n    classNames: ['routes-start-form-widget'],\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const currentTimestamp = (0, _moment.default)().toISOString();\n        const actualStartTime = record.get('timestamp');\n        const plannedEndTime = record.get('dispatchRoute.plannedEndTime');\n        const tripStartTime = record.get('dispatchRoute.tripStartTime');\n        const plannedStartTime = record.get('dispatchRoute.plannedStartTime');\n        const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n        const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n\n        const routeMinTimeLimit = (0, _moment.default)(plannedStartTime).subtract(routeMaxExtension, 'minutes');\n        record.set('odometer', null);\n\n        if ((0, _moment.default)(currentTimestamp).isSameOrBefore(actualStartTime)) {\n          this.get('editModal.errors').pushObject('Actual Start Time should be less than now.');\n          valid = false;\n        }\n\n        if ((0, _moment.default)(plannedEndTime).isSameOrBefore(actualStartTime)) {\n          this.get('editModal.errors').pushObject('Actual Start Time should be less than planned end time.');\n          valid = false;\n        }\n\n        if ((0, _moment.default)(tripStartTime).isSameOrBefore(actualStartTime)) {\n          this.get('editModal.errors').pushObject('Actual Start Time should be less than planned trip start time.');\n          valid = false;\n        }\n\n        if ((0, _moment.default)(actualStartTime).isBefore(routeMinTimeLimit)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Actual Start Time cannot be in the future and cannot cause route to extend past its configured allowed length.');\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      onUndoClick() {\n        this.get('editModal').undoAll();\n        this.set('editModal.errors', []);\n      },\n\n      async onApplyClick() {\n        const dispatchRoute = this.get('editableRecords.firstObject.dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        const closeCallback = () => {\n          this.send('onCloseClick');\n        }; // Check dispatchRoute version first\n\n\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n        if (this.validateRecords()) {\n          try {\n            await lockRouteAction();\n            const title = this.get('title');\n            this.get('service').applyWithCallback(title, unlockRouteAction);\n          } catch (error) {\n            await unlockRouteAction();\n            return;\n          }\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-start-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route Id',\n        valuePath: 'name',\n        editable: false\n      }]\n    }, {\n      title: 'Route',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route ID',\n        valuePath: 'name',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'vehicleId',\n        type: 'text',\n        label: 'Vehicle ID',\n        valuePath: 'dispatchRoute.assignedVehicle.name',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'driverId',\n        type: 'text',\n        label: 'Driver ID',\n        valuePath: 'dispatchRoute.assignedDriver.driverId',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'driverId',\n        type: 'text',\n        label: 'Driver Name',\n        valuePath: 'dispatchRoute.assignedDriver.fullName',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }, {\n        id: 'phoneNuber',\n        type: 'text',\n        label: 'Phone Number',\n        valuePath: 'dispatchRoute.latestRouteVehicleDriver.driverPhoneNumber',\n        editable: true,\n        readonlyCell: true,\n        hidden: false\n      }]\n    }, {\n      title: 'Route Start',\n      fields: [{\n        title: 'Route Start',\n        type: 'datetimeflatpickr',\n        label: 'Planned Start Time',\n        valuePath: 'dispatchRoute.plannedStartTime',\n        editable: true,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        readonlyCell: true,\n        defaultWidth: 50\n      }, {\n        id: 'timestamp',\n        type: 'datetimeflatpickr',\n        label: 'Actual Start Time',\n        valuePath: 'timestamp',\n        editable: true,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        defaultWidth: 50,\n        extra: {\n          minTimePath: 'computedMinDate',\n          maxTimePath: 'computedMaxDate'\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-widget/avlmConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/routes-widget',\n    rowComponent: 'iq-widgets/routes-widget/routes-row',\n    modelName: 'avlm-route',\n    title: 'Routes',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    widgetName: 'routeWidget',\n    selectedRowLimit: 5,\n    columns: [{\n      id: 'name',\n      type: 'text',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Name',\n      valuePath: 'name',\n      valuePreview: '22',\n      editable: true,\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'vehicle',\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'driverId',\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'driverLastName',\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driverLastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'driverFirstName',\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driverFirstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'status',\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      valuePreview: 'Planned',\n      searchable: true,\n      editable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 75\n    }, {\n      id: 'plannedStartTime',\n      type: 'date',\n      label: 'Planned Start Time',\n      valuePath: 'plannedStartDateTime',\n      valuePreview: '09:00 AM',\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualStartTime',\n      type: 'date',\n      label: 'Actual Start Time',\n      valuePath: 'actualStartTime',\n      valuePreview: '09:05 AM',\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedBreaks',\n      type: 'number',\n      label: 'Planned Breaks',\n      valuePath: 'plannedBreaksCount',\n      cellDesc: 'Driver Breaks',\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'actualBreaks',\n      type: 'enum',\n      label: 'Actual Breaks',\n      valuePath: 'actualBreaks',\n      cellDesc: 'Driver Breaks',\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'vehicleType',\n      type: 'text',\n      label: 'Vehicle Type',\n      valuePath: 'vehicleType',\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'plannedEndTime',\n      type: 'date',\n      label: 'Planned End Time',\n      valuePath: 'plannedEndDateTime',\n      valuePreview: '04:00 PM',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualEndTime',\n      type: 'date',\n      label: 'Actual End Time',\n      valuePath: 'actualEndTime',\n      valuePreview: '04:35 PM',\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedStartDate',\n      type: 'date',\n      label: 'Planned Start Date',\n      valuePath: 'plannedStartDate',\n      valuePreview: '2018-05-15',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateCellItem'\n    }, {\n      id: 'actualStartDate',\n      type: 'date',\n      label: 'Actual Start Date',\n      valuePath: 'actualStartDate',\n      valuePreview: '2018-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'plannedEndDate',\n      type: 'date',\n      label: 'Planned End Date',\n      valuePath: 'plannedEndDate',\n      valuePreview: '2018-05-15',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateCellItem'\n    }, {\n      id: 'actualEndDate',\n      type: 'date',\n      label: 'Actual End Date',\n      valuePath: 'actualEndDate',\n      valuePreview: '2018-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'otpStatus',\n      type: 'string',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      valuePreview: 'On Time',\n      searchable: true,\n      highlightable: true,\n      cellItem: 'OTPCellItem'\n    }, {\n      id: 'otp',\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'provider',\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      valuePreview: 'MAG',\n      hidden: true,\n      highlightable: false\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'name',\n          valuePath: 'routeName'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'name',\n          valuePath: 'routeName'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'name',\n          valuePath: 'routeName'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/routes-widget/config\", \"adept-iq/pods/components/iq-widgets/routes-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/routes-widget/scheduleConfig\", \"adept-iq/config/environment\", \"adept-iq/utils/find-row-record\", \"adept-iq/config/api-urls\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/mapped-permIds\", \"moment\", \"adept-iq/utils/rql-generators\", \"adept-iq/mixins/version-check\", \"lodash\", \"ember-concurrency\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/utils/filters\", \"adept-iq/utils/regex-functions\", \"adept-iq/models/route-template\", \"adept-iq/models/dispatch-route\", \"adept-iq/models/stop-point\", \"adept-iq/models/dashboard\"], function (_exports, _component, _config, _avlmConfig, _scheduleConfig, _environment, _findRowRecord, _apiUrls, _unwrapProxy, _mappedPermIds, _moment, _rqlGenerators, _versionCheck, _lodash, _emberConcurrency, _asyncScheduleOperation, _filters, _regexFunctions, _routeTemplate, _dispatchRoute, _stopPoint, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-console */\n  // display statuses\n  const pathToModel = {\n    'vehicleType': 'vehicle-type'\n  };\n  const specialRouteHost = _apiUrls.API.dispatchService.host;\n  const INCLUDES = ['clusters', 'vehicleRoutes', 'vehicleRoutes.driverShifts', 'vehicleRoutes.vehicle', 'vehicleRoutes.driverShifts.driver', 'vehicleRoutes.vehicle.vehicleType', 'driverBreaks', 'driverBreaks.driverBreakEvents', 'vehicleRoutes.vehicle.vehicleEvents'];\n\n  var _default = _component.default.extend(_asyncScheduleOperation.default, _versionCheck.default, {\n    classNames: ['routes-widget', 'data-test-routes-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    dragCoordinator: Ember.inject.service(),\n    routeexecevent: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    providersList: Ember.computed.alias('workspaceContext._selectedProviders'),\n    newComponent: 'iq-widgets/routes-widget/new',\n    routesEndComponent: 'iq-widgets/routes-end-form-widget',\n    routesStartComponent: 'iq-widgets/routes-start-form-widget',\n    breakdownReplacementComponent: 'iq-widgets/breakdown-replacement-form-widget',\n    driverBreakEditComponent: 'iq-widgets/driver-breaks-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    isWorkspaceExported: Ember.computed.or('workspace.isExported'),\n    isDispatchDashboard: Ember.computed.readOnly('workspace.isDispatchDashboard'),\n    isScheduleDashboard: Ember.computed.readOnly('workspace.isScheduleDashboard'),\n    providersDict: Ember.computed('providersList', function () {\n      const ProvidersList = this.get('providersList');\n      const dict = {};\n      ProvidersList.forEach(provider => {\n        dict[provider.get('id')] = provider.get('name');\n      });\n      return dict;\n    }),\n    onScheduleExported: Ember.observer('isWorkspaceExported', function () {\n      if (this.get('isWorkspaceExported')) {\n        this.get('disabledTableActions').addObject('newRoute');\n      } else {\n        this.get('disabledTableActions').removeObject('newRoute');\n      }\n    }),\n\n    init() {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this.set('config', _scheduleConfig.default);\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this.set('config', _config.default);\n            break;\n        }\n      }\n\n      this._super(...arguments);\n    },\n\n    saveRouteForDispatch(records) {\n      return Ember.RSVP.all(records.map(async dispatchRoute => {\n        try {\n          const route = (0, _unwrapProxy.unwrapProxy)(dispatchRoute.get('route'));\n          const rdv = dispatchRoute.get('latestRouteVehicleDriver');\n          await rdv.save();\n          await route.save();\n          this.get('notifications').success(`ROUTE ${dispatchRoute.get('route.name')} WAS EDITED SUCCESSFULLY`);\n        } catch (error) {\n          let msg = `EDIT TO ROUTE ${dispatchRoute.get('route.name')} FAILED`;\n          const e = error.errors.get('firstObject');\n          if (!_lodash.default.isEmpty(e.detail) && e.detail.includes('modified by another request')) msg = `UNABLE TO UPDATE ROUTE ${dispatchRoute.get('route.name')}, BECAUSE IT HAS BEEN MODIFIED BY ANOTHER REQUEST.`;\n          this.get('notifications').warning(msg);\n        }\n      }));\n    },\n\n    saveRouteForSchedule(records) {\n      return Ember.RSVP.all(records.map(async route => {\n        try {\n          await route.save();\n          this.get('notifications').success(`ROUTE ${route.get('name')} WAS EDITED SUCCESSFULLY`);\n        } catch (error) {\n          this.get('notifications').warning(`EDIT TO ROUTE ${route.get('name')} FAILED`);\n        }\n      }));\n    },\n\n    saveRouteStartRecordFunction(records) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      return Ember.RSVP.all(records.map(record => {\n        if (Ember.isNone(record.get('dispatchRoute.assignedDriver.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot start a route that does not have a driver.'));\n        }\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedVehicle.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot start a route that does not have a vehicle.'));\n        }\n\n        return routeExecEventAdapter.createStartRouteEvent(record).then(() => {\n          record.set('isForceDirty', false);\n          this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n          this.get('notifications').success('Route started successfully');\n          return Ember.RSVP.Promise.resolve();\n        }).catch(e => {\n          const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n          let messageText = 'Start route failed';\n\n          if (e.status === 400 || e.status === 500) {\n            if (payloadMessage.errorDetail.includes('Execution version is different') || payloadMessage.errorDetail.includes('it was changed by another request')) {\n              messageText = `START ROUTE FAILED. THE ROUTE (${record.get('name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n            }\n          }\n\n          this.get('notifications').warning(messageText);\n          return Ember.RSVP.Promise.reject(e);\n        });\n      }));\n    },\n\n    confirmSaveRouteEndFunction(records, callback) {\n      let specialCallbackWhenSuccess = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      const tooltip = this.get('tooltip');\n      const title = 'End Route';\n      let tip = 'The route end time selected is outside the configured limit of the planned route end time. Do you want to continue?';\n      return Ember.RSVP.all(records.map(record => {\n        const extensionExceeded = record.get('extensionExceeded');\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedDriver.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot end a route that does not have a driver.'));\n        }\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedVehicle.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot end a route that does not have a vehicle.'));\n        }\n\n        if (!extensionExceeded) {\n          tip = 'Would you like to commit your changes?';\n        }\n\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await this.saveRouteEndRecordFunction(record);\n            } catch (err) {\n              return;\n            } finally {\n              if (specialCallbackWhenSuccess) {\n                await specialCallbackWhenSuccess();\n              } else if (callback) {\n                await callback();\n              }\n\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            if (callback) await callback();\n            tooltip.reset();\n          },\n          closeAction: async () => {\n            if (callback) await callback();\n          }\n        });\n      }));\n    },\n\n    async confirmSaveUndoRouteStartFunction(route) {\n      const tooltip = this.get('tooltip');\n      const title = 'Undo Route Start';\n      const tip = 'Would you like to undo route start?';\n      const dispatchRoute = route.get('dispatchRoute');\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      this.set('dispatchRouteToCheck', dispatchRoute); // Check dispatchRoute version first\n\n      try {\n        await this.get('versionCheckOperation').perform();\n        await lockRouteAction();\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await this.saveUndoRouteStartRecordFunction(route);\n            } catch (e) {\n              return;\n            } finally {\n              await unlockRouteAction();\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          },\n          closeAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          }\n        });\n      } catch (err) {\n        await unlockRouteAction();\n      }\n    },\n\n    saveUndoRouteStartRecordFunction(record) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      return routeExecEventAdapter.createUndoStartRouteEvent(record).then(() => {\n        record.set('isForceDirty', false);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n        this.get('notifications').success('Started Route was undone successfully');\n        return Ember.RSVP.Promise.resolve();\n      }).catch(e => {\n        const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n        let messageText = 'Failed to undo started route';\n\n        if (e.status === 400 || e.status === 500) {\n          if (payloadMessage.errorDetail.includes('Execution version is different') || payloadMessage.errorDetail.includes('it was changed by another request')) {\n            messageText = `FAILED TO UNDO STARTED ROUTE. THE ROUTE (${record.get('name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n          }\n        }\n\n        this.get('notifications').warning(messageText);\n        return Ember.RSVP.Promise.reject(e);\n      });\n    },\n\n    saveRouteEndRecordFunction(record) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      return routeExecEventAdapter.createEndRouteEvent(record).then(avlmVersion => routeExecEventAdapter.createCompleteRouteEvent(record, avlmVersion)).then(() => {\n        record.set('isForceDirty', false);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n        this.get('notifications').success('Route completed successfully');\n        this.get('editModal').close();\n        return Ember.RSVP.Promise.resolve();\n      }).catch(e => {\n        const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n        let messageText = 'Failed to complete route';\n\n        if (e.status === 400 || e.status === 500) {\n          if (payloadMessage.errorDetail.includes('Execution version is different') || payloadMessage.errorDetail.includes('it was changed by another request')) {\n            messageText = `FAILED TO COMPLETE ROUTE. THE ROUTE (${record.get('name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n          }\n        }\n\n        this.get('notifications').warning(messageText);\n        this.get('editModal').close();\n        return Ember.RSVP.Promise.reject(e);\n      });\n    },\n\n    // 1. Create a new place in the Address service that represents the breakdown location, address and place\n    // 2. Mark the vehicle as broken down in the Transit Vehicle service.\n    // 3. Create a replacement route in Transit Dispatch service\n    // 4. Move trips from the broken down route to the replacement route. Optional\n    // 5. undo stops that have arrive status\n    saveBreakdownReplacementFunction(dispatchRoutes) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-Route');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      this.set('editModal.errors', []);\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        if (!Ember.isEmpty(dispatchRoutes)) {\n          return dispatchRoutes.forEach(async dispatchRoute => {\n            const vehicleBreakdown = (0, _unwrapProxy.unwrapProxy)(dispatchRoute.get('assignedVehicle.latestVehicleBreakdown'));\n            const breakdownPlace = (0, _unwrapProxy.unwrapProxy)(vehicleBreakdown.get('place'));\n            let activePicksAndDrops = [];\n            let partialPerformedTrips = [];\n            let address = (0, _unwrapProxy.unwrapProxy)(breakdownPlace.get('address'));\n\n            if (Ember.isNone(address.get('streetNumber'))) {\n              address.set('streetNumber', '');\n            }\n\n            try {\n              // save location for start garage and end garage\n              const locationResponse = await locationAdapter.postLocation(breakdownPlace.get('location.content')); // temporary assignment of zone type until we figure out how to deal with zone types\n\n              address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n              address = await addressAdapter.postAddress(breakdownPlace.get('address'));\n              await addressAdapter.postAddressLocation(locationResponse, address);\n              const newDispatchRoute = await dispatchRouteAdapter.postSpecialRoute(dispatchRoute, breakdownPlace);\n\n              if (dispatchRoute.get('replacementMoveAllTrips')) {\n                const stops = dispatchRoute.get('orderedStops'); // get all pick / drop stop points\n\n                const pickOrDropStops = stops.filter(stop => stop.get('isPickOrDrop')) || []; // get all trips\n\n                const trips = pickOrDropStops.filter(stop => stop.get('isPick')).map(stop => (0, _unwrapProxy.unwrapProxy)(stop.get('trip'))); // get all trips that are still scheduled and active\n\n                const unperformedTrips = trips.filter(trip => !trip.get('isPickPerformed') && !trip.get('isNoShow')) || [];\n                partialPerformedTrips = trips.filter(trip => trip.get('isPickPerformed') && !trip.get('isDropPerformed')) || []; // get all active stops\n\n                activePicksAndDrops = unperformedTrips.reduce((acu, trip) => {\n                  const pickStopPoint = trip.get('pickStopPoint');\n                  const dropStopPoint = trip.get('dropStopPoint');\n                  acu.push(...[pickStopPoint, dropStopPoint]);\n                  return acu;\n                }, []);\n                await dispatchRouteAdapter.transferAllTripsToRouteFunction(dispatchRoute, newDispatchRoute, activePicksAndDrops, dispatchRoute.get('ignoreCapacityViolations'));\n              } // give it a second to refresh the widgets because socket updates takes awhile to update\n              // multiple records\n\n\n              Ember.run.later(async () => {\n                let avlmVersion = null; // active picks that have Arrived status should be reversed\n\n                for (const stopPoint of activePicksAndDrops) {\n                  if (stopPoint.get('stopType') === 'pick' && stopPoint.get('computedStatus') === _stopPoint.ARRIVE_STOP_STATUS) {\n                    avlmVersion = await routeExecEventAdapter.createAcceptEvent(stopPoint, avlmVersion);\n                  }\n                } // trips that are partially performed should be completed\n\n\n                for (const trip of partialPerformedTrips) {\n                  const dropStopPoint = trip.get('dropStopPoint');\n\n                  if (dropStopPoint.get('computedStatus') !== _stopPoint.PERFORMED_STOP_STATUS) {\n                    if (!dropStopPoint.get('isArrived')) {\n                      dropStopPoint.set('actualArriveTime', (0, _moment.default)().toDate());\n                      avlmVersion = await routeExecEventAdapter.createStopArriveEvent(dropStopPoint, avlmVersion);\n                    }\n                  }\n\n                  dropStopPoint.set('actualDepartTime', (0, _moment.default)().toDate());\n                  avlmVersion = await routeExecEventAdapter.createStopDepartEvent(dropStopPoint, avlmVersion);\n                }\n\n                this.get('activeContext.topActiveContext').refreshTableContent.perform('vehicle');\n              }, 1000);\n              this.get('notifications').success(`YOU REPLACED ROUTE ${dispatchRoute.get('route.name')} WITH ROUTE ${dispatchRoute.get('replacementRouteId')} SUCCESSFULLY`);\n              this.get('workspace').requestWootricSurvey('on_breakdownRoute');\n              return resolve(null);\n            } catch (error) {\n              this.get('notifications').warning(`ROUTE BREAKDOWN REPLACEMENT FOR ROUTE ${dispatchRoute.get('route.name')} FAILED`);\n              console.log(error);\n              reject(error);\n            }\n          });\n        }\n      });\n    },\n\n    saveDriverBreakFunction(records) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const routeBreakAdapter = store.adapterFor('route-break');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n      this.set('editModal.errors', []);\n      return records.reduce(async (acu, record) => {\n        const requestTime = record.get('requestTime');\n        const projectedEndDate = record.get('projectedEndDate');\n        const place = (0, _unwrapProxy.unwrapProxy)(record.get('place'));\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        const locationExist = !Ember.isEmpty(location.get('lat'));\n        let placeResponse;\n        place.set('type', 'driverBreak');\n        place.set('schedule', (0, _unwrapProxy.unwrapProxy)(record.get('schedule')));\n        record.set('estimatedStart', requestTime);\n        record.set('estimatedEnd', projectedEndDate); // temporary assignment of zone type until we figure out how to deal with\n        // zone types\n\n        address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n        const rollbackOperations = []; // creating new driver break\n\n        try {\n          if (locationExist) {\n            record.set('place', place);\n            const locationResponse = await locationAdapter.postLocation(location);\n            const addressResponse = await addressAdapter.postAddress(address);\n            await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n            placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n          }\n\n          const placeId = Ember.isNone(placeResponse) ? '' : placeResponse.data.id;\n          const routeBreak = await routeBreakAdapter.postRouteBreak(record, placeId);\n\n          const routeBreakId = _lodash.default.get(routeBreak, 'data.id', null);\n\n          if (routeBreakId) {\n            rollbackOperations.push(_lodash.default.bind(routeBreakAdapter.deleteRouteBreak, routeBreakAdapter, routeBreak.data.id));\n          }\n\n          await acu;\n          const dispatchRouteId = record.get('route.dispatchRoute.id');\n          const dispatchRouteVersion = record.get('route.dispatchRoute.version');\n          const dRDriverBreakResponse = await dispatchRouteAdapter.createDriverBreak((0, _unwrapProxy.unwrapProxy)(record.get('route.dispatchRoute')), routeBreak.data.attributes.plannedRouteOrdinal || 1, routeBreak.data.id, dispatchRouteVersion);\n\n          const dRDriverBreakId = _lodash.default.get(dRDriverBreakResponse, 'data.id', null);\n\n          if (dRDriverBreakId && dispatchRouteId) {\n            rollbackOperations.push(_lodash.default.bind(dispatchRouteAdapter.removeDriverBreak, dispatchRouteAdapter, dispatchRouteId, routeBreakId, dispatchRouteVersion));\n          }\n\n          this.get('notifications').success(`Successfully added driver break to route ${record.get('route.name')}`);\n          record.destroyRecord();\n          this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route-break,stop-point']);\n          this.get('workspace').requestWootricSurvey('on_addEditDriverBreak');\n          return;\n        } catch (e) {\n          for (const operation of rollbackOperations) {\n            await operation();\n          }\n\n          let msg = `Failed to add driver break to route ${record.get('route.name')}`;\n          if (e.message && e.message.includes('modified by another request')) msg = `UNABLE TO SAVE BREAK, BECAUSE ITS ROUTE ${record.get('route.name')} HAS BEEN MODIFIED BY ANOTHER REQUEST.`;\n          this.get('notifications').warning(msg);\n          throw e;\n        }\n      }, Ember.RSVP.Promise.resolve());\n    },\n\n    async confirmSaveUndoRouteEndFunction(route) {\n      const tooltip = this.get('tooltip');\n      const title = 'Undo Route End';\n      const tip = 'Would you like to undo route end?';\n      const dispatchRoute = route.get('dispatchRoute');\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      this.set('dispatchRouteToCheck', dispatchRoute);\n\n      try {\n        // Check dispatchRoute version first\n        await this.get('versionCheckOperation').perform();\n        await lockRouteAction();\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await this.saveUndoRouteEndRecordFunction(route);\n            } catch (e) {\n              return;\n            } finally {\n              await unlockRouteAction();\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          },\n          closeAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          }\n        });\n      } catch (e) {\n        await unlockRouteAction();\n      }\n    },\n\n    saveUndoRouteEndRecordFunction(record) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      return routeExecEventAdapter.createUndoEndRouteEvent(record).then(() => {\n        record.set('isForceDirty', false);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n        this.get('notifications').success('Undid Route end successfully');\n        return Ember.RSVP.Promise.resolve();\n      }).catch(e => {\n        const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n        let messageText = 'Failed to undo ended route';\n\n        if (e.status === 400 || e.status === 500) {\n          if (payloadMessage.errorDetail.includes('Execution version is different') || payloadMessage.errorDetail.includes('it was changed by another request')) {\n            messageText = `FAILED TO UNDO ENDED ROUTE. THE ROUTE (${record.get('name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n          }\n        }\n\n        this.get('notifications').warning(messageText);\n        return Ember.RSVP.Promise.reject(e);\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this._initDispatchSingleActions();\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this._initScheduleSingleActions(); // Init the observer;\n\n\n            this.onScheduleExported();\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this._initDispatchSingleActions();\n\n            break;\n        }\n      }\n    },\n\n    dragRowGroup: Ember.computed('row', function () {\n      return this.get('table.rows');\n    }).readOnly(),\n    dynamicSingleActions: Ember.computed('table.rows.@each.{selected,status}', 'selectedWidgetRecord', function () {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        return this._dynamicAVLMActions();\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            return this._dynamicScheduleActions();\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            return this._dynamicDispatchActions();\n        }\n      }\n    }),\n\n    dragStart(event) {\n      const row = (0, _findRowRecord.findRowRecordByElement)(event.target, this.get('dragRowGroup'));\n      if (Ember.isBlank(row)) return;\n      const dragId = Ember.guidFor(row);\n      this.get('dragCoordinator').setSourceRow(dragId, row, 'routes');\n      event.dataTransfer.setData('text', dragId);\n    },\n\n    dragEnd() {\n      this.get('dragCoordinator').clearSourceRows();\n    },\n\n    saveRecordFunction(records) {\n      return Ember.RSVP.all(records.map(record => {\n        const {\n          name,\n          selectedProvider,\n          selectedDriver,\n          selectedVehicle,\n          plannedStartTime,\n          plannedEndTime\n        } = record.getProperties('name', 'selectedProvider', 'selectedDriver', 'selectedVehicle', 'plannedStartTime', 'plannedEndTime');\n        const ajax = this.get('ajax');\n        const token = this.get('session.data.authenticated.token'); // const scheduleId = record.get('schedule.id');\n\n        const vehicleId = selectedVehicle ? selectedVehicle.get('id') : null;\n        const driverId = selectedDriver ? selectedDriver.get('id') : null;\n        const providerNameId = selectedProvider ? selectedProvider.get('id') : null;\n        const json = {\n          data: {\n            type: 'specialRoute',\n            attributes: {\n              name,\n              routeType: 'supervisor',\n              shiftStartTime: plannedStartTime,\n              shiftEndTime: plannedEndTime\n            },\n            relationships: {\n              dispatchSchedule: {\n                data: {\n                  id: '1',\n                  // TODO: fetch this\n                  type: 'dispatchSchedule'\n                }\n              },\n              driver: {\n                data: {\n                  id: driverId,\n                  type: 'driver'\n                }\n              },\n              providerName: {\n                data: {\n                  id: providerNameId,\n                  type: 'providerName'\n                }\n              },\n              vehicle: {\n                data: {\n                  id: vehicleId,\n                  type: 'vehicle'\n                }\n              }\n            }\n          }\n        };\n        return ajax.post(`${specialRouteHost}/special-route`, {\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${token}`\n          },\n          data: json\n        }).then(() => {// TODO: handle success\n        }).catch(() => {// TODO: show errors?\n        });\n      }));\n    },\n\n    async sendMessagesToRoutesAvlmLite(avlmRoutes) {\n      const avlmRouteList = avlmRoutes ? avlmRoutes : [];\n      const draftMessages = avlmRouteList.map(avlmRoute => {\n        const driverId = avlmRoute.get('latestDriver') ? avlmRoute.get('latestDriver.id') : null;\n        const vehicleId = avlmRoute.get('latestVehicle') ? avlmRoute.get('latestVehicle.callSign') : null;\n        const routeId = avlmRoute.get('latestRouteVehicleDriver.route.id') ? avlmRoute.get('latestRouteVehicleDriver.route.id') : avlmRoute.get('id');\n\n        if (!driverId) {\n          this.get('notifications').warning(`Can not send message due to missing driver id on route id = ${routeId}`);\n          return null;\n        }\n\n        avlmRoute.set('route', {\n          id: routeId\n        });\n        avlmRoute.set('messageNr', '0'); // conflict due to merge r4 and r4.2.12\n        //     this.get('workspace').pushState('routeActivityLog', {\n        //       displayName: `Route ${routeName} Activity Log`,\n        //       route: ENV.APP.avlmLite ? unwrapProxy(route) : unwrapProxy(route.get('route'))\n        //     });\n        //   },\n        //   disableOnLocked: false,\n        //   disableOnLockedRoute: false\n        // });\n\n        avlmRoute.set('avlmDriver', {\n          id: driverId,\n          endPointType: 'recipient',\n          fullName: avlmRoute.get('latestDriver') ? avlmRoute.get('latestDriver.fullName') : null,\n          badgeNumber: avlmRoute.get('latestDriver') ? avlmRoute.get('latestDriver.badgeNumber') : null\n        });\n        avlmRoute.set('avlmVehicle.content', {\n          id: vehicleId\n        });\n        return avlmRoute;\n      }).filter(route => !Ember.isNone(route));\n\n      if (!Ember.isEmpty(draftMessages)) {\n        this.get('workspace').pushState('addNewMessage', {\n          draftMessages\n        });\n      }\n    },\n\n    sendMessagesToRoutes(dsRoutes, messageType) {\n      const dsRouteList = dsRoutes ? dsRoutes : [];\n      const draftMessages = dsRouteList.map(dsRoute => {\n        const trueVehicle = (0, _unwrapProxy.unwrapProxy)(dsRoute.get('assignedVehicle'));\n        const assignedDriver = trueVehicle.get('latestDriver');\n        let badgeNumber = null;\n\n        if (Ember.isNone(trueVehicle)) {\n          return [];\n        }\n\n        const driverId = assignedDriver ? assignedDriver.get('id') : null;\n\n        if (assignedDriver) {\n          if (assignedDriver.get('badgeNumber')) {\n            badgeNumber = assignedDriver.get('badgeNumber');\n          } else {\n            badgeNumber = assignedDriver.get('driver.badgeNumber');\n          }\n        }\n\n        if (messageType === 'singleMessage' && !badgeNumber) {\n          this.get('notifications').warning(`Can not send message due to missing driver id on vehicle id = ${trueVehicle.get('id')}`);\n        }\n\n        if (messageType === 'bulkMessage' && !badgeNumber) {\n          this.get('notifications').warning('MESSAGE COULD NOT BE SENT TO SOME VEHICLES WHICH DO NOT HAVE DRIVER ASSOCIATED.');\n        }\n\n        trueVehicle.set('driver', {\n          id: driverId,\n          endPointType: 'recipient',\n          fullName: trueVehicle.get('latestDriver.fullName'),\n          badgeNumber: badgeNumber\n        });\n        const vehicleId = trueVehicle.get('id');\n        const vehicleName = trueVehicle.get('name');\n        trueVehicle.set('vehicle', {\n          id: vehicleId,\n          name: vehicleName\n        });\n        const routeId = trueVehicle.get('latestRouteVehicleDriver.route.id');\n        const routeName = trueVehicle.get('latestRouteVehicleDriver.dispatchRoute.route.name');\n        trueVehicle.set('route', {\n          id: routeId,\n          name: routeName\n        });\n        trueVehicle.set('messageNr', '0');\n\n        if (_environment.default.APP.avlmLite) {\n          trueVehicle.set('avlmDriver', {\n            id: driverId,\n            endPointType: 'recipient'\n          });\n          trueVehicle.set('avlmVehicle', {\n            id: vehicleId\n          });\n        }\n\n        return trueVehicle;\n      });\n\n      if (messageType === 'singleMessage' && draftMessages.firstObject.driver.badgeNumber) {\n        this.get('workspace').pushState('addNewMessage', {\n          draftMessages\n        });\n      } else if (messageType === 'bulkMessage') {\n        this.get('workspace').pushState('addNewMessage', {\n          draftMessages\n        });\n      }\n    },\n\n    /**\n     *\n     * @param route\n     * @returns {*}  --> returns length of trips\n     */\n    routeTripLength(route) {\n      if (this.isDispatchDashboard) {\n        const trips = route.get('dispatchRoute.trips');\n        return trips.length;\n      }\n\n      const trips = route.get('trips');\n      const scheduledTrips = trips.toArray().filter(trip => trip.get('status') === 'scheduled');\n      return scheduledTrips.length;\n    },\n\n    doDeleteDispatchRoute(model) {\n      const route = (0, _unwrapProxy.unwrapProxy)(model.get('route'));\n      const istripsAvailable = this.routeTripLength(route);\n      const rvd = model.get('assignedVehicle');\n      const isRVDAvailable = rvd && rvd.get('id');\n      const isRouteDefaultVehicle = isRVDAvailable ? rvd.get('placeholder') === true || rvd.get('id') === route.vehicleId : true;\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const routeName = route.get('name');\n      const store = this.get('store');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-Route');\n\n      if (istripsAvailable) {\n        tooltip.pushConfirmation({\n          title: 'Delete Route',\n          tip: 'Unable to delete route because there are active trip(s) on it.',\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      } else if (isRVDAvailable && !isRouteDefaultVehicle) {\n        tooltip.pushConfirmation({\n          title: 'Delete Route',\n          tip: 'Unable to delete route because it\\'s assigned to a vehicle/driver',\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      } else {\n        tooltip.pushConfirmation({\n          title: 'Delete Route',\n          tip: 'Are you sure you want to delete this route?',\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            const dispatchRouteId = model.get('id');\n\n            try {\n              if (model.get('routeBreaks.length')) {\n                const routebreaks = model.get('routeBreaks');\n                await Ember.RSVP.Promise.all(routebreaks.map(async stop => {\n                  await dispatchRouteAdapter.removeDriverBreak(dispatchRouteId, stop.get('routeBreak.id'));\n                }));\n              }\n\n              await model.destroyRecord();\n              notifications.success(`SUCCESSFULLY DELETED ROUTE ${routeName}`);\n              await this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n              tooltip.reset();\n            } catch (error) {\n              notifications.warning(`FAILED TO DELETE ROUTE ${routeName}`);\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      }\n    },\n\n    doDeleteRoute(route) {\n      const istripsAvailable = this.routeTripLength(route);\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const routeName = route.get('name');\n\n      if (istripsAvailable) {\n        tooltip.pushConfirmation({\n          title: 'Delete Route',\n          tip: 'Unable to delete route because there are active trip(s) on it.',\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      } else {\n        tooltip.pushConfirmation({\n          title: 'Delete Route',\n          tip: 'Are you sure you want to delete this route?',\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              if (route.get('routeBreaks.length')) {\n                await this.performScheduleCancelRouteBreak.perform(route);\n              }\n\n              await route.destroyRecord();\n              notifications.success(`SUCCESSFULLY DELETED ROUTE ${routeName}`);\n              await this.get('activeContext.topActiveContext').clearCheckedItems(['route']);\n              tooltip.reset();\n            } catch (error) {\n              notifications.warning(`FAILED TO DELETE ROUTE ${routeName}`);\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      }\n    },\n\n    performScheduleCancelRouteBreak: (0, _emberConcurrency.task)(function* (route) {\n      const workspace = this.get('workspace');\n      let currentSchedule = workspace.get('currentSchedule');\n\n      if (this.isDispatchDashboard && Ember.isEmpty(currentSchedule)) {\n        currentSchedule = (0, _unwrapProxy.unwrapProxy)(route.get('schedule'));\n      }\n\n      return yield route.get('routeBreaks').reduce(async (previousPromise, driverBreak) => {\n        const routeBreakId = Number(driverBreak.get('id'));\n        const operationData = {\n          routeBreakId\n        };\n        const options = {\n          operationData,\n          outputResult: true\n        };\n\n        try {\n          const {\n            isJobSuccess\n          } = await this.createScheduleAsyncOperation.perform(currentSchedule, 'cancelRouteBreak', options);\n\n          if (!isJobSuccess) {\n            throw new Error();\n          } else {\n            return Ember.RSVP.Promise.resolve();\n          }\n        } catch (e) {\n          return Ember.RSVP.Promise.reject();\n        }\n      }, Ember.RSVP.Promise.resolve());\n    }).drop(),\n\n    doScheduleLockRoute(route) {\n      const session = this.get('session');\n      const notifications = this.get('notifications');\n      const timeoutParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeLockTimeout');\n      const routeLockTimeout = timeoutParam ? parseInt(timeoutParam.get('value'), 10) : 1800;\n      const json = {\n        data: {\n          type: 'lock',\n          attributes: {\n            entityType: 'route',\n            entityId: route.get('id'),\n            timeToLive: routeLockTimeout,\n            persist: false\n          }\n        }\n      };\n      this.get('ajax').post(_apiUrls.API.schedulingService.host + '/lock', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).catch(function (error) {\n        notifications.warning(`Error creating route lock, ${error.message}`);\n      });\n    },\n\n    lockRouteConfirmation(dispatchRoute) {\n      const lockAdapter = this.get('store').adapterFor('lock');\n      const tooltip = this.get('tooltip');\n      const tip = `Are you sure you want to lock Route ${dispatchRoute.get('route.name')}?`;\n      const title = 'Lock Route';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          tooltip.reset();\n          return lockAdapter.doLockRoute(dispatchRoute, false);\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    scheduleRouteLockConfirmation(route) {\n      const tooltip = this.get('tooltip');\n      const tip = `Are you sure you want to lock Route ${route.get('name')}?`;\n      const title = 'Lock Route';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          tooltip.reset();\n          return this.doScheduleLockRoute(route);\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    unLockRouteConfirmation(dispatchRoute) {\n      const lockAdapter = this.get('store').adapterFor('lock');\n      const tooltip = this.get('tooltip');\n      const tip = `Route Unlocked ${dispatchRoute.get('route.name')}`;\n      const title = 'Unlock Route';\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n\n      if (!selectedWidgetRecord.isLocked) {\n        return;\n      }\n\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          tooltip.reset();\n          return lockAdapter.forceUnlockRoute(dispatchRoute);\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    scheduleRouteUnLockConfirmation(route) {\n      const tooltip = this.get('tooltip');\n      const tip = `Are you sure you want to unlock Route ${route.get('name')}?`;\n      const title = 'Unlock Route';\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n\n      if (!selectedWidgetRecord.isLocked) {\n        return;\n      }\n\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          tooltip.reset();\n          return this.scheduleDoUnlockRoute(route);\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    scheduleDoUnlockRoute(route) {\n      const session = this.get('session');\n      const notifications = this.get('notifications');\n      const userId = session.data.authenticated.userId;\n      const scheduleRouteLock = route.get('scheduleRouteLock');\n      const user = this.get('store').peekRecord('sso-user', userId);\n      const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.unlockOtherUserLocks, null);\n\n      if (!permGranted && userId !== scheduleRouteLock.get('owner.id') && !user.get('isAdmin')) {\n        notifications.info('You do not have permission to unlock this route.');\n        return;\n      }\n\n      if (!Ember.isNone(scheduleRouteLock)) {\n        return this.invokeScheduleUnlock(route.get('id'));\n      }\n    },\n\n    _initDispatchSingleActions() {\n      this.set('tableActions', [{\n        id: 'newRoute',\n        permId: _mappedPermIds.default.createRoute,\n        name: 'New Route',\n        action: () => {\n          const tripLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeTripLimit');\n          const distanceLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeDistanceLimit');\n          let tripLimit = 9;\n          let distanceLimit = 99; // prepare getting values from config service for tripLimit and distanceLimit\n          // Special Route creation does not accept these 2 new variables yet.\n\n          if (!Ember.isNone(tripLimitParam) && !Ember.isNone(tripLimitParam.get('value')) && _regexFunctions.REGEX_NUMBER.test(tripLimitParam.get('value'))) {\n            tripLimit = parseInt(tripLimitParam.get('value'), 10);\n          }\n\n          if (!Ember.isNone(distanceLimitParam) && !Ember.isNone(distanceLimitParam.get('value')) && _regexFunctions.REGEX_NUMBER.test(distanceLimitParam.get('value'))) {\n            distanceLimit = parseInt(distanceLimitParam.get('value'), 10);\n          }\n\n          const dispatchRouteModel = Ember.Object.create({\n            schedulingMode: _routeTemplate.AUTOMATIC_SCHEDULING_MODE,\n            affinities: [],\n            tripLimit: tripLimit,\n            distanceLimit: distanceLimit\n          });\n          const routeModel = Ember.Object.create({\n            routeDate: new Date(this.workspace.startDate),\n            plannedStartTime: (0, _moment.default)().toDate(),\n            plannedEndTime: null,\n            tripLimit: tripLimit,\n            distanceLimit: distanceLimit,\n            dispatchRoute: dispatchRouteModel\n          });\n          let minDate = null;\n          minDate = new Date().getTime();\n          this.get('workspace').pushState('addEditDispatchRoute', {\n            displayName: 'Add Route',\n            routeModel,\n            minDate: (0, _moment.default)(minDate).toDate()\n          }, {\n            replaceSelf: true\n          });\n        },\n        disableOnLockedRoute: true\n      }, {\n        id: 'print',\n        permIds: [_mappedPermIds.default.downloadRoutes],\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      }]);\n      this.set('assignVehicleDriver', {\n        id: 'assignVehicleDriver',\n        permId: _mappedPermIds.default.assignVehicleDriver,\n        name: 'Assign Vehicle & Driver',\n        action: dispatchRoute => {\n          const store = this.get('store');\n          const name = dispatchRoute.get('route.name');\n          const routeVehicleDrivers = (0, _unwrapProxy.unwrapProxy)(dispatchRoute.get('routeVehicleDrivers')); // possibility of a route not having assigned driver and vehicle\n\n          if (!routeVehicleDrivers.length || Ember.isNone(routeVehicleDrivers)) {\n            const routeVehicleDriver = store.createRecord('route-vehicle-driver');\n            dispatchRoute.get('routeVehicleDrivers').pushObject(routeVehicleDriver);\n          }\n\n          this.get('workspace').pushState('assignVehicleDriverToRoute', {\n            displayName: `Assign Vehicle & Driver to Route #${name}`,\n            dispatchRoute\n          }, {\n            replaceSelf: true\n          });\n        },\n        disableOnLockedRoute: true\n      });\n      this.set('sendMessage', {\n        id: 'sendMessage',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Send Message',\n        action: route => {\n          if (_environment.default.APP.avlmLite) {\n            this.sendMessagesToRoutesAvlmLite([route]);\n          } else {\n            this.sendMessagesToRoutes([route], 'singleMessage');\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('startRoute', {\n        id: 'startRoute',\n        permId: _mappedPermIds.default.startRoute,\n        name: 'Start Route',\n        model: 'vehicle-event',\n        action: model => {\n          const route = model.get('route');\n          const routesStartComponent = this.get('routesStartComponent');\n          const stops = model.get('orderedStopsWithBreaks'); //not sure if we ever have only 1 stop, or if its possible to have 0 stops\n\n          const firstStopTime = stops !== null && stops.length > 0 ? (0, _moment.default)(stops[0].get('computedStartTime')) : (0, _moment.default)();\n          const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n          const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n\n          const computedMinDate = (0, _moment.default)(model.get('plannedStartTime')).subtract(routeMaxExtension, 'minutes');\n\n          const computedMaxDate = _moment.default.min([(0, _moment.default)(model.get('plannedEndTime')), (0, _moment.default)(firstStopTime), (0, _moment.default)()]);\n\n          route.set('computedMinDate', computedMinDate);\n          route.set('computedMaxDate', computedMaxDate);\n          route.set('odometerInMiles', '');\n          route.set('timestamp', new Date());\n          this.get('editModal').open(routesStartComponent, [route], this.get('saveRouteStartRecordFunction').bind(this), null, null, {\n            componentName: 'startRoute'\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('undoStartRoute', {\n        id: 'undoStartRoute',\n        permId: _mappedPermIds.default.undoRouteStart,\n        name: 'Undo Route Start',\n        action: async model => {\n          this.set('dispatchRouteToCheck', model); // Check dispatchRoute version first\n\n          await this.get('versionCheckOperation').perform();\n          const route = model.get('route');\n          route.set('odometerInMiles', '');\n          route.set('timestamp', new Date());\n          this.confirmSaveUndoRouteStartFunction(route);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('endRoute', {\n        id: 'endRoute',\n        permId: _mappedPermIds.default.endRoute,\n        name: 'End Route',\n        action: model => {\n          const route = model.get('route');\n          const plannedEndTime = new Date();\n          const routesEndComponent = this.get('routesEndComponent');\n          route.set('odometerInMiles', '');\n          route.set('timestamp', plannedEndTime);\n          this.get('editModal').open(routesEndComponent, [route], null, null, this.get('confirmSaveRouteEndFunction').bind(this), {\n            componentName: 'endRoute'\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('undoEndRoute', {\n        id: 'undoEndRoute',\n        permId: _mappedPermIds.default.undoRouteEnd,\n        name: 'Undo Route End',\n        action: async model => {\n          this.set('dispatchRouteToCheck', model); // Check dispatchRoute version first\n\n          await this.get('versionCheckOperation').perform();\n          const route = model.get('route');\n          route.set('odometerInMiles', '');\n          route.set('timestamp', new Date());\n          this.confirmSaveUndoRouteEndFunction(route);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('activityLog', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLogRoute,\n        name: 'Activity Log',\n        action: model => {\n          let routeName = model.get('route.name');\n\n          if (_environment.default.APP.avlmLite) {\n            routeName = model.get('trackingId');\n          }\n\n          this.get('workspace').pushState('routeActivityLog', {\n            displayName: `Route ${routeName} Activity Log`,\n            route: _environment.default.APP.avlmLite ? (0, _unwrapProxy.unwrapProxy)(model) : (0, _unwrapProxy.unwrapProxy)(model.get('route'))\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      this.set('deleteRoute', {\n        id: 'deleteRoute',\n        permId: _mappedPermIds.default.deleteRoute,\n        name: 'Delete Route',\n        model: 'vehicle-event',\n        action: model => {\n          this.doDeleteDispatchRoute(model);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('addBreakdownReplacement', {\n        id: 'addBreakdownReplacement',\n        permId: _mappedPermIds.default.createSameDayReplacement,\n        name: 'Breakdown Replacement',\n        action: async model => {\n          const dispatchRoute = model;\n          const breakdownTime = (0, _moment.default)(dispatchRoute.get('assignedVehicle.latestVehicleBreakdown.time'));\n          const lastDropStop = dispatchRoute.get('lastDropStop');\n          const replacementEndTime = lastDropStop ? (0, _moment.default)(lastDropStop.get('computedEta')).add(1, 'hours') : (0, _moment.default)().add(1, 'hours');\n          const breakdownReplacementComponent = this.get('breakdownReplacementComponent'); // setup new route information\n\n          dispatchRoute.set('replacementRouteId', '');\n          dispatchRoute.set('replacementStartTime', breakdownTime.toDate());\n          dispatchRoute.set('breakdownTime', breakdownTime.toDate());\n          dispatchRoute.set('replacementEndTime', replacementEndTime.toDate());\n          dispatchRoute.set('replacementRouteType', 'breakdown replacement');\n          dispatchRoute.set('replacementDriver', null);\n          dispatchRoute.set('replacementVehicle', null);\n          dispatchRoute.set('replacementMoveAllTrips', true); // As this option had been removed from UI, set it to true as default.\n\n          dispatchRoute.set('breakdownPlace', dispatchRoute.get('assignedVehicle.latestVehicleBreakdown.place'));\n          dispatchRoute.set('ignoreCapacityViolations', false);\n          this.get('editModal').open(breakdownReplacementComponent, [dispatchRoute], this.get('saveBreakdownReplacementFunction').bind(this), null, null, {\n            componentName: 'breakdownReplacement'\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('rescueRoute', {\n        id: 'rescueRoute',\n        permId: _mappedPermIds.default.reportRescue,\n        name: 'Rescue',\n        action: dsRoute => {\n          this.get('workspace').pushState('rescueRoute', {\n            dsRoute\n          }, {\n            replaceSelf: true\n          });\n        },\n        disableOnLockedRoute: true\n      });\n      this.set('lockRoute', {\n        id: 'lockRoute',\n        permId: _mappedPermIds.default.lockUnlockRoute,\n        name: 'Lock Route',\n        action: model => {\n          this.lockRouteConfirmation((0, _unwrapProxy.unwrapProxy)(model));\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('unlockRoute', {\n        id: 'unlockRoute',\n        permIds: [_mappedPermIds.default.lockUnlockRoute, _mappedPermIds.default.unlockOtherUserLocks],\n        name: 'Unlock Route',\n        action: model => {\n          this.unLockRouteConfirmation((0, _unwrapProxy.unwrapProxy)(model));\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      this.set('editRoute', {\n        id: 'editRoute',\n        permId: _mappedPermIds.default.editRoute,\n        name: 'Edit',\n        action: async model => {\n          const rdv = model.get('latestRouteVehicleDriver');\n          const stops = model.get('orderedStopsWithBreaks'); //not sure if we ever have only 1 stop, or if its possible to have 0 stops\n\n          const firstStopTime = stops.length ? (0, _moment.default)(stops[0].get('computedStartTime')) : null;\n          const lastStopTime = stops.length ? (0, _moment.default)(stops[stops.length - 1].get('computedStartTime')) : null;\n          const firstStopMaxTime = stops.length ? (0, _moment.default)(stops[0].get('computedMaximumStartTime')) : null; // eslint-disable-next-line no-unneeded-ternary\n\n          const computedReadOnlyCell = model.get('route.actualStartTimestamp') ? true : false;\n          const routeMaxTimeLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeMaxTimeLimit');\n          const routeMaxTimeLimit = routeMaxTimeLimitParam ? parseInt(routeMaxTimeLimitParam.get('value'), 10) : 720; // minutes\n\n          const plannedStartTime = (0, _moment.default)(model.get('latestRouteVehicleDriver.startTime'));\n          const plannedEndTime = (0, _moment.default)(model.get('latestRouteVehicleDriver.endTime'));\n          const dispatchRouteVersion = model.get('version');\n          const routeModel = model.get('route');\n          const affinities = model.get('affinities');\n          rdv.set('dispatchRouteVersion', dispatchRouteVersion);\n          model.set('computedReadOnlyCell', computedReadOnlyCell);\n          model.set('routeMaxTimeLimit', routeMaxTimeLimit);\n          model.set('firstStopTime', firstStopTime);\n          model.set('lastStopTime', lastStopTime);\n          model.set('firstStopMaxTime', firstStopMaxTime);\n          model.set('plannedTimeMin', plannedStartTime.subtract(routeMaxTimeLimit, 'minutes'));\n          model.set('plannedTimeMax', plannedEndTime.add(routeMaxTimeLimit, 'minutes'));\n\n          if (rdv) {\n            if (Ember.typeOf(affinities) === 'string') {\n              model.set('affinities', JSON.parse(affinities));\n            }\n\n            this.get('workspace').pushState('addEditDispatchRoute', {\n              displayName: `Edit Route ${routeModel.get('name')}`,\n              routeModel: routeModel\n            }, {\n              replaceSelf: true\n            });\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('addDriverBreakAction', {\n        id: 'addDriverBreak',\n        permId: _mappedPermIds.default.addBreak,\n        name: 'Add Driver Break',\n        action: model => {\n          const store = this.get('store');\n          const route = (0, _unwrapProxy.unwrapProxy)(model.get('route'));\n          const trips = (0, _unwrapProxy.unwrapProxy)(model.get('trip'));\n          let routeOrdinal = 1; // default routeOrdianl\n\n          if (!Ember.isEmpty(route) || !Ember.isNone(route)) {\n            let plannedStartTime = (0, _moment.default)(route.get('computedPlannedStartTime'));\n            const currentTime = (0, _moment.default)();\n\n            if (currentTime.isAfter(plannedStartTime)) {\n              plannedStartTime = currentTime;\n            }\n\n            if (route.get('dispatchRoute.orderedStopsWithBreaks')) {\n              const lastStop = route.get('dispatchRoute.orderedStopsWithBreaks').lastObject;\n\n              if (!Ember.isEmpty(lastStop)) {\n                routeOrdinal = lastStop.get('routeOrdinal') + 1;\n              }\n            }\n\n            const dispatchRouteVersion = route.get('dispatchRoute.version');\n            const driverBreak = store.createRecord('route-break', {\n              estimatedStart: plannedStartTime.toDate(),\n              requestTime: plannedStartTime.toDate(),\n              route: route,\n              schedule: route.get('schedule'),\n              notes: 'Driver Break',\n              plannedRouteOrdinal: routeOrdinal,\n              plannedDuration: 15,\n              // This need to be seconds, but for UI to change it, we keep it mins for here\n              state: 'planned',\n              status: 'scheduled',\n              promisedStart: plannedStartTime.toDate(),\n              dispatchRouteVersion: dispatchRouteVersion\n            });\n\n            if (Ember.isNone(driverBreak.get('place.id'))) {\n              const locationModel = store.createRecord('location');\n              const addressModel = store.createRecord('address', {\n                locations: [locationModel]\n              });\n              const placeModel = store.createRecord('place', {\n                address: addressModel,\n                location: locationModel\n              });\n              driverBreak.set('place', placeModel);\n            }\n\n            this.get('records').pushObject(driverBreak);\n\n            if (Ember.isNone(driverBreak.get('stopPoint.id'))) {\n              const stopPoint = store.createRecord('stop-point');\n              driverBreak.set('stopPoint', stopPoint);\n            }\n\n            const saveDriverBreakFunction = this.get('saveDriverBreakFunction').bind(this);\n            this.get('workspace').pushState('addBreak', {\n              driverBreak,\n              trips,\n              saveDriverBreakFunction\n            });\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('bulkActions', [{\n        id: 'bulkMessage',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Bulk Message',\n        action: routes => {\n          if (_environment.default.APP.avlmLite) {\n            this.sendMessagesToRoutesAvlmLite(routes.map(route => route));\n          } else {\n            const routesWithNoEmergencyVehicles = routes.filter(dispatchRoute => {\n              return !dispatchRoute.get('latestRouteVehicleDriver.vehicle.isWidgetEmergencyRecAck');\n            });\n            this.sendMessagesToRoutes(routesWithNoEmergencyVehicles, 'bulkMessage');\n          }\n        },\n        disableOnLockedRoute: true\n      }]);\n    },\n\n    _initScheduleSingleActions() {\n      this.get('tableActions').unshiftObject({\n        id: 'newRoute',\n        permId: _mappedPermIds.default.createRoute,\n        name: 'New Route',\n        action: () => {\n          const tripLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeTripLimit');\n          const distanceLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeDistanceLimit');\n          let tripLimit = 9;\n          let distanceLimit = 99; // prepare getting values from config service for tripLimit and distanceLimit\n          // Special Route creation does not accept these 2 new variables yet.\n\n          if (!Ember.isNone(tripLimitParam) && !Ember.isNone(tripLimitParam.get('value')) && _regexFunctions.REGEX_NUMBER.test(tripLimitParam.get('value'))) {\n            tripLimit = parseInt(tripLimitParam.get('value'), 10);\n          }\n\n          if (!Ember.isNone(distanceLimitParam) && !Ember.isNone(distanceLimitParam.get('value')) && _regexFunctions.REGEX_NUMBER.test(distanceLimitParam.get('value'))) {\n            distanceLimit = parseInt(distanceLimitParam.get('value'), 10);\n          }\n\n          const newRouteModel = Ember.Object.create({\n            routeDate: new Date(this.workspace.startDate),\n            plannedStartTime: (0, _moment.default)().toDate(),\n            plannedEndTime: null,\n            tripLimit: tripLimit,\n            distanceLimit: distanceLimit,\n            type: _routeTemplate.ROUTE_TEMPLATE_TYPE_KEEPER,\n            schedulingMode: _routeTemplate.AUTOMATIC_SCHEDULING_MODE,\n            optimizationFlags: 3,\n            affinities: []\n          });\n          const minDate = new Date().getTime();\n          this.get('workspace').pushState('addeditScheduleRoute', {\n            displayName: 'Add Route',\n            routeModel: newRouteModel,\n            minDate: (0, _moment.default)(minDate).toDate()\n          }, {\n            replaceSelf: true\n          });\n        }\n      });\n      this.set('bulkActions', [{\n        id: 'bulkEdit',\n        permId: [_mappedPermIds.default.editRoute],\n        name: 'Bulk Edit',\n        action: async models => {\n          const isTraversalEnabled = this.get('isTraversalEnabled');\n          const widgetService = this.get('widgetService');\n          const widgetInstanceId = widgetService.GLOBAL_WIDGET_INST;\n          const modelName = 'routeWidget';\n          const offset = 0;\n          const limit = 5000;\n          const sort = null;\n          const dateQueryFields = widgetService.getDateQueryFields();\n          const selectedProviders = widgetService.getAllProviders();\n          const filter = this.get('widgetCompoundFilter');\n          const newRouteModel = Ember.Object.create({\n            routeDate: new Date(this.workspace.startDate),\n            plannedStartTime: (0, _moment.default)().toDate(),\n            plannedEndTime: (0, _moment.default)().endOf('day').toDate(),\n            tripLimit: 0,\n            distanceLimit: 0\n          });\n          let fullFilteredRouteIds = [];\n          fullFilteredRouteIds = models.map(route => route.id);\n\n          if (!isTraversalEnabled) {\n            const fullFilteredRoutes = await widgetService.requestWidgetApi(widgetInstanceId, modelName, filter, offset, limit, sort, dateQueryFields, selectedProviders);\n            const selectedRoutes = fullFilteredRoutes.filter(filteredRoute => fullFilteredRouteIds.includes(filteredRoute.id));\n            fullFilteredRouteIds = selectedRoutes.map(route => route.id);\n          }\n\n          this.get('workspace').pushState('addeditScheduleRoute', {\n            displayName: 'Bulk Edit',\n            routeModel: newRouteModel,\n            bulkRouteIds: fullFilteredRouteIds\n          }, {\n            replaceSelf: true\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      }]);\n      this.set('activityLog', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLogRoute,\n        name: 'View Activity Log',\n        action: model => {\n          let routeName = model.get('name');\n\n          if (_environment.default.APP.avlmLite) {\n            routeName = model.get('trackingId');\n          }\n\n          this.get('workspace').pushState('routeActivityLog', {\n            displayName: `Route ${routeName} Activity Log`,\n            route: _environment.default.APP.avlmLite ? (0, _unwrapProxy.unwrapProxy)(model) : model\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      this.set('deleteScheduleRoute', {\n        id: 'deleteRoute',\n        permId: _mappedPermIds.default.deleteRoute,\n        name: 'Delete Route',\n        model: 'vehicle-event',\n        action: model => {\n          this.doDeleteRoute(model);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editScheduleRoute', {\n        id: 'editRoute',\n        permId: _mappedPermIds.default.editRoute,\n        name: 'Edit',\n        action: model => {\n          const affinities = model.get('affinities');\n\n          if (Ember.typeOf(affinities) === 'string') {\n            model.set('affinities', JSON.parse(affinities));\n          }\n\n          this.get('workspace').pushState('addeditScheduleRoute', {\n            displayName: `Edit Route ${model.get('name')}`,\n            routeModel: model\n          }, {\n            replaceSelf: true\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('lockRoute', {\n        id: 'lockRoute',\n        permId: _mappedPermIds.default.lockUnlockRoute,\n        name: 'Lock Route',\n        action: model => {\n          this.scheduleRouteLockConfirmation(model);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('unlockRoute', {\n        id: 'unlockRoute',\n        permId: _mappedPermIds.default.unlockOtherUserLocks,\n        name: 'Unlock Route',\n        action: model => {\n          this.scheduleRouteUnLockConfirmation(model);\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      this.set('schedulingAddDriverBreakAction', {\n        id: 'addDriverBreak',\n        permId: _mappedPermIds.default.addBreak,\n        name: 'Add Driver Break',\n        action: async model => {\n          const routeId = model.get('id');\n          const route = await this.get('store').findRecord('route', routeId, {\n            include: 'trips,routeBreaks'\n          });\n          setTimeout(() => {\n            this.get('workspace').pushState('schedulingAddBreak', {\n              route\n            });\n          }, 1000);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n    },\n\n    _dynamicAVLMActions() {\n      const sendMessage = this.get('sendMessage');\n      const startRoute = this.get('startRoute');\n      const endRoute = this.get('endRoute');\n      const activityLog = this.get('activityLog');\n      const addBreakdownReplacement = this.get('addBreakdownReplacement');\n      const rescueRoute = this.get('rescueRoute');\n      const lockRoute = this.get('lockRoute');\n      const unlockRoute = this.get('unlockRoute');\n      const editRoute = this.get('editRoute');\n      const addDriverBreakAction = this.get('addDriverBreakAction');\n      const row = this.getSelectedCoreModel();\n      if (!row) return [];\n      const userId = this.get('session').data.authenticated.userId;\n      const assignVehicleDriver = this.get('assignVehicleDriver');\n      const vehicle = row.get('assignedVehicle');\n      const isLocked = row.get('isLocked');\n      const isLockedByOtherUser = row.get('isLockedByOtherUser');\n      const computedStatus = row.get('computedStatus');\n      const record = (0, _unwrapProxy.unwrapProxy)(row);\n      if (Ember.isNone(record)) return [];\n      const allStopsPerformed = _environment.default.APP.avlmLite ? record.allStopsPerformedAvlmlite() : record.allStopsPerformed();\n      const genericActions = [sendMessage, activityLog, editRoute];\n      let user;\n\n      if (userId) {\n        user = this.get('store').peekRecord('sso-user', userId);\n      } // only display the locked route action for \"unlocked routes\"\n\n\n      if (!isLocked) {\n        genericActions.push(lockRoute);\n      } // Check if the route is locked.  If it is, then:\n      //  * if the user is an admin, or is the user that locked the route, add the 'unlock' entry, but go ahead and\n      //    get the rest of the actions\n      //  * if the user is not the user that locked the route, or an admin, then just show the actions that are\n      //    always allowed (sendMessage and activityLog)\n\n\n      if (isLocked) {\n        // should not show unlock if locked by another user and non-admin\n        const isUserAdmin = user && user.get('isAdmin');\n\n        if (isLockedByOtherUser && !isUserAdmin) {\n          return [sendMessage, activityLog];\n        } // User is an admin, or was the user that locked the route, allow unlock\n\n\n        genericActions.push(unlockRoute);\n      }\n\n      if (vehicle && vehicle.get('isBroken')) {\n        genericActions.push(addBreakdownReplacement);\n      }\n\n      if (allStopsPerformed && computedStatus !== _dispatchRoute.ROUTE_COMPLETED_STATUS) {\n        genericActions.push(endRoute);\n      }\n\n      switch (computedStatus) {\n        case _dispatchRoute.ROUTE_SIGNED_ON_STATUS:\n          genericActions.push(...[startRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_STARTED_STATUS:\n        case _dispatchRoute.ROUTE_IN_PROGRESS_STATUS:\n        case _dispatchRoute.ROUTE_ON_BREAK_STATUS:\n          genericActions.push(...[rescueRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_COMPLETED_STATUS:\n          break;\n\n        case _dispatchRoute.ROUTE_AWAITING_STATUS:\n          genericActions.push(...[assignVehicleDriver, startRoute, rescueRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_EMERGENCY_STATUS:\n          genericActions.push(...[assignVehicleDriver, startRoute, rescueRoute, addDriverBreakAction]);\n          break;\n\n        default:\n          genericActions.push(...[assignVehicleDriver, rescueRoute, addDriverBreakAction]);\n      }\n\n      return genericActions;\n    },\n\n    _dynamicDispatchActions() {\n      const sendMessage = this.get('sendMessage');\n      const startRoute = this.get('startRoute');\n      const undoStartRoute = this.get('undoStartRoute');\n      const endRoute = this.get('endRoute');\n      const activityLog = this.get('activityLog');\n      const addBreakdownReplacement = this.get('addBreakdownReplacement');\n      const rescueRoute = this.get('rescueRoute');\n      const lockRoute = this.get('lockRoute');\n      const unlockRoute = this.get('unlockRoute');\n      const editRoute = this.get('editRoute');\n      const deleteRoute = this.get('deleteRoute');\n      const addDriverBreakAction = this.get('addDriverBreakAction');\n      const undoEndRoute = this.get('undoEndRoute');\n      const row = this.getSelectedCoreModel();\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      if (!row) return [];\n      const assignVehicleDriver = this.get('assignVehicleDriver');\n      const vehicle = row.get('latestRouteVehicleDriver.vehicle.content');\n      const driver = row.get('assignedDriver.driverId');\n      const isWidgetEmergencyRecAck = Ember.isPresent(vehicle) ? vehicle.get('isWidgetEmergencyRecAck') : false;\n      const isLocked = selectedWidgetRecord.isLocked;\n      const isLockedByOtherUser = this.isLockedByOtherUser(isLocked, selectedWidgetRecord.lock);\n      const routeStatus = selectedWidgetRecord.routeStatus;\n      const routeEnded = [_dispatchRoute.ROUTE_ENDED_STATUS].includes(row.get('computedStatus')) || row.get('pullinGarageStop.isPerformed');\n      const routeStarted = row.get('hasStarted');\n      const actualEndDateTime = selectedWidgetRecord.actualEndDateTime;\n      const record = (0, _unwrapProxy.unwrapProxy)(row);\n      const allStopsPerformed = _environment.default.APP.avlmLite ? record.allStopsPerformedAvlmlite() : record.allStopsPerformed();\n      const allStopsUnPerformed = record.allStopsUnPerformed();\n      const genericActions = [activityLog];\n      const isBreakdown = routeStatus === _dispatchRoute.ROUTE_BREAKDOWN_STATUS;\n      const isReplacementCreated = record.isReplacementRouteCreated(this.widgetRecords, selectedWidgetRecord.name);\n      const doTripsExist = row.trips.length > 0; // If status is no driver and no driverId is assigned then no send message.\n\n      if (!isWidgetEmergencyRecAck && driver && !routeEnded && !(isBreakdown && isReplacementCreated)) {\n        genericActions.push(sendMessage);\n      } // only display the locked route action for \"unlocked routes\"\n\n\n      if (!isLocked && !routeEnded) {\n        genericActions.push(lockRoute);\n      }\n\n      if (routeEnded && !isBreakdown) {\n        genericActions.push(undoEndRoute);\n      } // Check if the route is locked.  If it is, then:\n      //  * if the user is an admin, or is the user that locked the route, add the 'unlock' entry, but go ahead and\n      //    get the rest of the actions\n      //  * if the user is not the user that locked the route, or an admin, then just show the actions that are\n      //    always allowed (sendMessage and activityLog)\n\n\n      if (vehicle && vehicle.get('isBroken') && routeStatus === _dispatchRoute.ROUTE_BREAKDOWN_STATUS && !routeEnded && !isReplacementCreated && routeStarted) {\n        genericActions.push(addBreakdownReplacement);\n      }\n\n      if (allStopsPerformed && routeStatus !== _dispatchRoute.ROUTE_COMPLETED_STATUS && !routeEnded) {\n        genericActions.push(endRoute);\n      }\n\n      if (routeStatus !== _dispatchRoute.ROUTE_COMPLETED_STATUS && !routeEnded && !isBreakdown) {\n        genericActions.push(editRoute);\n      }\n\n      if (allStopsPerformed && routeStatus === _dispatchRoute.ROUTE_ENDED_STATUS) {\n        genericActions.splice(2);\n      }\n\n      switch (routeStatus) {\n        case _dispatchRoute.ROUTE_SIGNED_ON_STATUS:\n          genericActions.push(...[startRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_SIGNED_OFF_STATUS:\n          // signed off status with an empty actualEndDateTime is just a temporary signed off\n          // route is not done.\n          if (Ember.isNone(actualEndDateTime)) {\n            if (routeStarted && allStopsUnPerformed) {\n              genericActions.push(...[undoStartRoute, rescueRoute, addDriverBreakAction]);\n            } else {\n              genericActions.push(...[rescueRoute, addDriverBreakAction]);\n            }\n          }\n\n          break;\n\n        case _dispatchRoute.ROUTE_STARTED_STATUS:\n          genericActions.push(...[undoStartRoute, rescueRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_IN_PROGRESS_STATUS:\n        case _dispatchRoute.ROUTE_ON_BREAK_STATUS:\n          genericActions.push(...[rescueRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_COMPLETED_STATUS:\n        case _dispatchRoute.ROUTE_ENDED_STATUS:\n          if (isWidgetEmergencyRecAck) {\n            genericActions.push(...[activityLog, lockRoute]);\n          } else {\n            genericActions.push(...[sendMessage, activityLog, lockRoute]);\n          }\n\n          break;\n\n        case _dispatchRoute.ROUTE_NEW_STATUS:\n          genericActions.push(...[assignVehicleDriver, rescueRoute, addDriverBreakAction]);\n          break;\n        // eslint-disable-next-line no-fallthrough\n\n        case _dispatchRoute.ROUTE_AWAITING_STATUS:\n        case _dispatchRoute.ROUTE_DISPATCHED_STATUS:\n          if (driver) {\n            genericActions.push(...[assignVehicleDriver, startRoute, rescueRoute, addDriverBreakAction]);\n          } else {\n            genericActions.push(...[assignVehicleDriver, rescueRoute, addDriverBreakAction]);\n          }\n\n          break;\n\n        case _dispatchRoute.ROUTE_EMERGENCY_STATUS:\n          genericActions.push(...[rescueRoute, addDriverBreakAction]);\n          break;\n\n        case _dispatchRoute.ROUTE_BREAKDOWN_STATUS:\n          break;\n\n        case _dispatchRoute.ROUTE_SCHEDULED_STATUS:\n        default:\n          genericActions.push(...[assignVehicleDriver, rescueRoute, addDriverBreakAction]);\n      }\n\n      if (isLocked) {\n        const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.unlockOtherUserLocks, null);\n\n        if ((!isLockedByOtherUser || isLockedByOtherUser && permGranted) && !isBreakdown) {\n          genericActions.push(unlockRoute);\n        }\n      }\n\n      const deleteRouteGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.deleteRoute, null);\n      const vehicleNotExistOrPlaceHolder = vehicle && vehicle.get('isPlaceholder') || !vehicle;\n\n      if (deleteRouteGranted && vehicleNotExistOrPlaceHolder && !driver && !doTripsExist) {\n        genericActions.push(deleteRoute);\n      }\n\n      return genericActions;\n    },\n\n    _dynamicScheduleActions() {\n      const activityLog = this.get('activityLog');\n      const editRoute = this.get('editScheduleRoute');\n      const lockRoute = this.get('lockRoute');\n      const unlockRoute = this.get('unlockRoute');\n      const schedulingAddDriverBreakAction = this.get('schedulingAddDriverBreakAction');\n      const row = this.getSelectedCoreModel();\n      const deleteRoute = this.get('deleteScheduleRoute');\n      if (!row) return [];\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const isLocked = selectedWidgetRecord.isLocked;\n      const isLockedByOtherUser = this.isLockedByOtherUser(isLocked, selectedWidgetRecord.lock);\n      const genericActions = [activityLog, editRoute, deleteRoute];\n      const isBrokerProviderType = row.get('provider.isBrokerProviderType');\n\n      if (!isBrokerProviderType) {\n        genericActions.push(schedulingAddDriverBreakAction);\n      } // only display the locked route action for \"unlocked routes\"\n\n\n      if (!isLocked) {\n        genericActions.push(lockRoute);\n      }\n\n      if (isLocked) {\n        const permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.unlockOtherUserLocks, null);\n\n        if (!isLockedByOtherUser || isLockedByOtherUser && permGranted) {\n          genericActions.push(unlockRoute);\n        }\n      }\n\n      return genericActions;\n    },\n\n    // ember-react-table overwrites\n    applyTransformationData(widgetRecords) {\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          this.applyOtpStatusTransformation(widgetRecord);\n          this.applyActualDateTransformation(widgetRecord);\n          this.applyPlannedBreakTransformation(widgetRecord);\n          this.applyProviderTransformation(widgetRecord);\n          this.applyRouteLockInfoTransformation(widgetRecord);\n\n          if (!_environment.default.APP.avlmLite) {\n            this.applyDispatchRouteIdTransformation(widgetRecord);\n            this.applyRoutePlanedTimeTransformation(widgetRecord);\n          }\n\n          widgetRecord._transformed = true;\n        }\n      });\n      return widgetRecords;\n    },\n\n    // filtering the route based on plannedStartDate greater than current  schedule date\n    applyPostFetchFilter(widgetRecords) {\n      if (this.get('isScheduleDashboard')) {\n        const filterRecords = this.filterScheduleRecordByPlannedStartDate(widgetRecords);\n        return filterRecords;\n      }\n\n      return widgetRecords;\n    },\n\n    async getUserName(currRowData) {\n      const lock = currRowData.lock;\n      const store = this.get('store');\n      let ssoUser = store.peekRecord('sso-user', lock.user);\n\n      if (Ember.isNone(ssoUser)) {\n        ssoUser = await store.find('sso-user', lock.user).catch(error => {\n          const errorCode = Ember.isPresent(error.errors.get('firstObject').status) ? error.errors.get('firstObject').status : null; // This is a temporary hack because continuous otimization user key does not exist in sso\n          // must remove after a permanent solution is found in locking in continuous optimization\n\n          if (errorCode === '404') {\n            currRowData.lock.fullName = 'Continuous Optimization';\n\n            if (!store.hasRecordForId('sso-user', lock.user)) {\n              return store.createRecord('sso-user', {\n                id: lock.user,\n                userId: lock.user,\n                fullName: 'Continuous Optimization'\n              });\n            }\n          }\n\n          return null;\n        });\n      }\n\n      if (!Ember.isNone(ssoUser)) {\n        currRowData.lock.fullName = ssoUser.fullName;\n      }\n    },\n\n    applyRouteLockInfoTransformation(widgetRecord) {\n      if (widgetRecord.isLocked) {\n        this.getUserName(widgetRecord);\n      }\n    },\n\n    applyDispatchRouteIdTransformation(widgetRecord) {\n      if (!widgetRecord.routeId) {\n        widgetRecord.routeId = widgetRecord.id;\n      }\n\n      if (widgetRecord.dispatchRoutePk && this.get('isDispatchDashboard')) {\n        widgetRecord.id = widgetRecord.dispatchRoutePk;\n      }\n    },\n\n    applyRoutePlanedTimeTransformation(widgetRecord) {\n      widgetRecord.plannedStartDateTime = widgetRecord.rvdStartTime || widgetRecord.plannedStartDateTime;\n      widgetRecord.plannedEndDateTime = widgetRecord.rvdEndTime || widgetRecord.plannedEndDateTime;\n    },\n\n    applyPlannedBreakTransformation(widgetRecord) {\n      if (widgetRecord.plannedBreaks && _lodash.default.isObject(widgetRecord.plannedBreaks)) {\n        const objectLength = Object.keys(widgetRecord.plannedBreaks).length;\n        widgetRecord.plannedBreaks = objectLength;\n      }\n    },\n\n    applyProviderTransformation(widgetRecord) {\n      if (widgetRecord.provider) {\n        const providersList = this.get('providersDict');\n        widgetRecord.provider = providersList[widgetRecord.provider];\n      }\n    },\n\n    applyActualDateTransformation(widgetRecord) {\n      // Need to have full datetime to do timezone transform\n      if (widgetRecord.actualStartDate && widgetRecord.actualStartTime) {\n        widgetRecord.actualStartDate = widgetRecord.actualStartDate + ' ' + widgetRecord.actualStartTime;\n      }\n\n      if (widgetRecord.actualEndDate && widgetRecord.actualEndTime) {\n        widgetRecord.actualEndDate = widgetRecord.actualEndDate + ' ' + widgetRecord.actualEndTime;\n      }\n    },\n\n    filterScheduleRecordByPlannedStartDate(widgetRecords) {\n      const workspace = this.get('workspace');\n      const currentScheduleStartDate = workspace.get('currentSchedule.start');\n      const filterWidgetRecords = widgetRecords.filter(widgetRecord => {\n        const plannedStartDate = (0, _moment.default)(widgetRecord.plannedStartDateTime).format('MM/DD/YYYY');\n        const currentScheduleDate = (0, _moment.default)(currentScheduleStartDate).format('MM/DD/YYYY');\n        return !(0, _moment.default)(plannedStartDate).isAfter(currentScheduleDate);\n      });\n      return filterWidgetRecords;\n    },\n\n    calculateTimeQuery() {\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const startTime = startDate.getTime();\n      const endTime = endDate.getTime();\n      const plannedStartDateQuery = (0, _rqlGenerators.dateGteFormatRQL)('plannedStartDate', [startTime], 'YYYY-MM-DD');\n      const plannedEndDateQuery = (0, _rqlGenerators.dateLteFormatRQL)('plannedEndDate', [endTime], 'YYYY-MM-DD');\n      const plannedStartTimeQuery = (0, _rqlGenerators.dateGteFormatRQL)('plannedStartTime', [startTime], 'HH:mm:ss.SSS');\n      const plannedEndTimeQuery = (0, _rqlGenerators.dateLteFormatRQL)('plannedEndTime', [endTime], 'HH:mm:ss.SSS');\n      const dateRangeFilterQuery = (0, _rqlGenerators.andRQL)(plannedStartDateQuery, plannedEndDateQuery);\n      const timeRangeFilterQuery = (0, _rqlGenerators.andRQL)(plannedStartTimeQuery, plannedEndTimeQuery);\n      const rangeFilterQuery = (0, _rqlGenerators.andRQL)(dateRangeFilterQuery, timeRangeFilterQuery);\n      return rangeFilterQuery;\n    },\n\n    rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currRowData) {\n      let rowStyleHandler = '';\n\n      if (currRowData.isLocked) {\n        rowStyleHandler += ' is-locked';\n      }\n\n      if (columnIndex === 0) {\n        if (currRowData.otpStatus === 'Late') {\n          rowStyleHandler += ' otp-late-first-column';\n        }\n\n        if (currRowData.otpStatus === 'On Time') {\n          rowStyleHandler += ' otp-on-time-first-column';\n        }\n\n        if (currRowData.otpStatus === 'In Danger') {\n          rowStyleHandler += ' otp-in-danger-first-column';\n        }\n      }\n\n      return rowStyleHandler;\n    },\n\n    invokeScheduleUnlock(routeId) {\n      const notifications = this.get('notifications');\n      const session = this.get('session');\n      return this.get('ajax').delete(_apiUrls.API.schedulingService.host + '/lock/force/route/' + routeId, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).catch(function (error) {\n        notifications.warning(`Error removing route lock, ${error.message}`);\n      });\n    },\n\n    applyFilterQueryConversion(filters) {\n      this._super(...arguments);\n\n      filters.forEach(filter => {\n        this.applyVehicleTypeFilterConversion(filter);\n      });\n    },\n\n    applyVehicleTypeFilterConversion(filter) {\n      if (!filter || filter.local.path !== 'vehicleType') {\n        return;\n      }\n\n      const modelName = pathToModel[filter.local.path];\n      const modelTypeMapper = this.get('store').peekAll(modelName).map(record => {\n        return {\n          id: record.id,\n          name: record.name,\n          displayName: record.displayName.trim().toLowerCase()\n        };\n      });\n      const newValues = (0, _filters.applyFilterConversionToID)(filter.local.values, filter.type, modelTypeMapper);\n      filter.local.values = newValues;\n      filter.rql.values = newValues;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/routes-widget',\n    rowComponent: 'iq-widgets/routes-widget/routes-row',\n    modelName: 'dispatch-route',\n    title: 'Routes',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    // ember-react-widget properties\n    widgetName: 'routeWidget',\n    selectedRowLimit: 5,\n    maxLimitByRouteSelection: 5,\n    columns: [{\n      id: 'name',\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Name',\n      valuePath: 'name',\n      valuePreview: '22',\n      mapValuePath: 'route.name',\n      editable: true,\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'vehicle',\n      type: 'uuid',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleName',\n      mapValuePath: 'assignedVehicle.name',\n      searchable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'driverId',\n      type: 'uuid',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      mapValuePath: 'assignedDriver.driverId',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'driverLastName',\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driverLastName',\n      mapValuePath: 'assignedDriver.lastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'driverFirstName',\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driverFirstName',\n      mapValuePath: 'assignedDriver.firstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'driverPhoneNumber',\n      type: 'text',\n      label: 'Driver Phone Number',\n      valuePath: 'rvdDriverPhoneNumber',\n      mapValuePath: 'assignedDriverPhoneNumber',\n      searchable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'status',\n      type: 'text',\n      label: 'Status',\n      valuePath: 'routeStatus',\n      valuePreview: 'Planned',\n      mapValuePath: 'computedStatus',\n      editable: true,\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 75\n    }, {\n      id: 'plannedStartTime',\n      type: 'time',\n      label: 'Planned Start Time',\n      valuePath: 'plannedStartDateTime',\n      mapValuePath: 'plannedStartTime',\n      valuePreview: '09:00',\n      editable: true,\n      hidden: true,\n      format: 'HH:mm',\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualStartTime',\n      type: 'time',\n      label: 'Actual Start Time',\n      valuePath: 'actualStartDateTime',\n      mapValuePath: 'route.actualStartTimestamp',\n      valuePreview: '09:05',\n      hidden: true,\n      searchable: true,\n      format: 'HH:mm',\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedBreaks',\n      type: 'number',\n      label: 'Planned Breaks',\n      valuePath: 'plannedBreaksCount',\n      //need to handle json\n      mapValuePath: 'plannedDriverBreaks',\n      cellDesc: 'Driver Breaks',\n      hidden: true\n    }, {\n      id: 'vehicleType',\n      type: 'text',\n      label: 'Vehicle Type',\n      valuePath: 'vehicleTypeNameToDisplay',\n      mapValuePath: 'assignedVehicle.vehicleType.name',\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'plannedEndTime',\n      type: 'time',\n      label: 'Planned End Time',\n      valuePath: 'plannedEndDateTime',\n      mapValuePath: 'plannedEndTime',\n      valuePreview: '04:00',\n      editable: true,\n      format: 'HH:mm',\n      searchable: true,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualEndTime',\n      type: 'time',\n      label: 'Actual End Time',\n      valuePath: 'actualEndDateTime',\n      mapValuePath: 'route.actualEndTimestamp',\n      valuePreview: '04:35',\n      format: 'HH:mm',\n      searchable: true,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedStartDate',\n      type: 'date',\n      label: 'Planned Start Date',\n      valuePath: 'plannedStartDateTime',\n      mapValuePath: 'plannedStartTime',\n      valuePreview: '2018-05-15',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'actualStartDate',\n      type: 'date',\n      label: 'Actual Start Date',\n      valuePath: 'actualStartDateTime',\n      mapValuePath: 'route.actualStartTimestamp',\n      valuePreview: '2018-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'plannedEndDate',\n      type: 'date',\n      label: 'Planned End Date',\n      valuePath: 'plannedEndDateTime',\n      mapValuePath: 'plannedEndTime',\n      valuePreview: '2018-05-15',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'actualEndDate',\n      type: 'date',\n      label: 'Actual End Date',\n      valuePath: 'actualEndDateTime',\n      mapValuePath: 'route.actualEndTimestamp',\n      valuePreview: '2018-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'otpStatus',\n      type: 'string',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      mapValuePath: 'route.otpLabel',\n      valuePreview: 'On Time',\n      searchable: true,\n      highlightable: true,\n      cellItem: 'OTPValueCellItem'\n    }, {\n      id: 'otp',\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otpWithSign',\n      mapValuePath: 'route.otpValueWithSign',\n      customSortPath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'provider',\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      mapValuePath: 'provider.name',\n      valuePreview: 'MAG',\n      hidden: true,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'routeType',\n      type: 'string',\n      label: 'Type',\n      valuePath: 'type',\n      mapValuePath: 'route.type',\n      hidden: true,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'breakdownTime',\n      type: 'date',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      label: 'Breakdown Time',\n      valuePath: 'breakdownTime',\n      mapValuePath: 'assignedVehicle.vehicleBreakdowns.firstObject.time',\n      hidden: true,\n      searchable: false,\n      highlightable: false,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'breakdownLocation',\n      type: 'text',\n      label: 'Breakdown Location',\n      valuePath: 'breakdownLocation',\n      mapValuePath: 'assignedVehicle.vehicleBreakdowns.firstObject.place.address.fullAddress',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'breakdownReason',\n      type: 'text',\n      label: 'Breakdown Reason',\n      valuePath: 'breakdownReason',\n      mapValuePath: 'assignedVehicle.vehicleBreakdowns.firstObject.type.displayName',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'mode',\n      type: 'text',\n      label: 'Scheduling Mode',\n      valuePath: 'mode',\n      mapValuePath: 'route.schedulingMode',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'replacedRoute',\n      type: 'uuid',\n      label: 'Replaced Route Name',\n      valuePath: 'replacedRouteName',\n      mapValuePath: 'route.replacedRoute.name',\n      hidden: true,\n      searchable: true,\n      defaultWidth: 50\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'id',\n          valuePath: 'routeId'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'vehicleId',\n          valuePath: 'id'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'id',\n          valuePath: 'routeId'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      },\n      riderWidget: {\n        links: [{\n          type: 'inObjKeys',\n          valuePath: 'routes'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'neRQL',\n        field: 'dispatchRoutePk',\n        value: [null]\n      }, {\n        type: 'stringEq',\n        field: 'scheduleStatus',\n        value: ['exported']\n      }]\n    },\n    // record id stored as routeId\n    transform: {\n      id: 'routeId'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-widget/routes-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/text-formatted-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    attributeBindings: ['draggable'],\n    draggable: 'true',\n    // TODO: delete or revise when API and/or model is updated.\n    otp: Ember.computed.alias('row.otp')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/routes-widget/scheduleConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/routes-widget',\n    rowComponent: 'iq-widgets/routes-widget/routes-row',\n    modelName: 'route',\n    title: 'Routes',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    // ember-react-widget properties\n    widgetName: 'routeWidget',\n    selectedRowLimit: 5,\n    maxLimitByRouteSelection: 5,\n    columns: [{\n      id: 'name',\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Name',\n      valuePath: 'name',\n      valuePreview: '22',\n      editable: true,\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 125\n    }, {\n      id: 'vehicle',\n      type: 'uuid',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleName',\n      searchable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'driverId',\n      type: 'uuid',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'driverLastName',\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driverLastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'driverFirstName',\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driverFirstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'driverPhoneNumber',\n      type: 'text',\n      label: 'Driver Phone Number',\n      valuePath: 'driverPhoneNumbers',\n      searchable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'status',\n      type: 'text',\n      label: 'Status',\n      valuePath: 'routeStatus',\n      valuePreview: 'Planned',\n      editable: true,\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 75\n    }, {\n      id: 'plannedStartTime',\n      type: 'time',\n      label: 'Planned Start Time',\n      valuePath: 'plannedStartDateTime',\n      valuePreview: '09:00',\n      editable: true,\n      hidden: true,\n      format: 'HH:mm',\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualStartTime',\n      type: 'time',\n      label: 'Actual Start Time',\n      valuePath: 'actualStartDateTime',\n      valuePreview: '09:05',\n      hidden: true,\n      searchable: true,\n      format: 'HH:mm',\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedBreaks',\n      type: 'number',\n      label: 'Planned Breaks',\n      valuePath: 'plannedBreaksCount',\n      cellDesc: 'Driver Breaks',\n      hidden: true\n    }, {\n      id: 'actualBreaks',\n      type: 'enum',\n      label: 'Actual Breaks',\n      valuePath: 'actualDriverBreaks',\n      cellDesc: 'Driver Breaks',\n      hidden: true\n    }, {\n      id: 'vehicleType',\n      type: 'text',\n      label: 'Vehicle Type',\n      valuePath: 'vehicleTypeNameToDisplay',\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'plannedEndTime',\n      type: 'time',\n      label: 'Planned End Time',\n      valuePath: 'plannedEndDateTime',\n      valuePreview: '04:00',\n      editable: true,\n      format: 'HH:mm',\n      searchable: true,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualEndTime',\n      type: 'time',\n      label: 'Actual End Time',\n      valuePath: 'actualEndTimestamp',\n      valuePreview: '04:35',\n      format: 'HH:mm',\n      searchable: true,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedStartDate',\n      type: 'date',\n      label: 'Planned Start Date',\n      valuePath: 'plannedStartDateTime',\n      valuePreview: '2018-05-15',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'actualStartDate',\n      type: 'date',\n      label: 'Actual Start Date',\n      valuePath: 'actualStartDateTime',\n      valuePreview: '2018-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'plannedEndDate',\n      type: 'date',\n      label: 'Planned End Date',\n      valuePath: 'plannedEndDateTime',\n      valuePreview: '2018-05-15',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'actualEndDate',\n      type: 'date',\n      label: 'Actual End Date',\n      valuePath: 'actualEndTimestamp',\n      valuePreview: '2018-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'otpStatus',\n      type: 'string',\n      label: 'OTP Status',\n      valuePath: 'otpLabel',\n      //missing\n      valuePreview: 'On Time',\n      searchable: true,\n      highlightable: true\n    }, {\n      id: 'otp',\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otpValueWithSign',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'provider',\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      valuePreview: 'MAG',\n      hidden: true,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'routeType',\n      type: 'string',\n      label: 'Type',\n      valuePath: 'type',\n      hidden: true,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'breakdownTime',\n      type: 'date',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      label: 'Breakdown Time',\n      valuePath: 'vehicleBreakdownTime',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'breakdownLocation',\n      type: 'text',\n      label: 'Breakdown Location',\n      valuePath: 'vehicleBreakdownPlace',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'breakdownReason',\n      type: 'text',\n      label: 'Breakdown Reason',\n      valuePath: 'vehicleBreakdownType',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'mode',\n      type: 'text',\n      label: 'Scheduling Mode',\n      valuePath: 'mode',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'replacedRoute',\n      type: 'uuid',\n      label: 'Replaced Route Name',\n      valuePath: 'replacedRoute',\n      hidden: true,\n      searchable: true,\n      defaultWidth: 50\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'name',\n          valuePath: 'routeName'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'name',\n          valuePath: 'routeName'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'id',\n          valuePath: 'originalRouteId'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'vehicleId',\n          valuePath: 'vehicleId'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'neRQL',\n        field: 'scheduleType',\n        value: ['booking']\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/scatter-chart-widget/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/chartjs-widget/component\", \"ember-concurrency\", \"lodash\"], function (_exports, _component, _emberConcurrency, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    workspace: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    store: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    classNames: ['scatter-chart-widget'],\n    widget: null,\n    options: Ember.computed.alias('widget.state.dataType'),\n    records: null,\n    isEmpty: false,\n    refreshInProgress: Ember.computed.readOnly('activeContext.refreshInProgress'),\n\n    init() {\n      this._super(arguments);\n\n      this.set('records', []);\n    },\n\n    willDestroyElement() {\n      this._super(arguments);\n    },\n\n    /* Applies the choice of data source. */\n    chartRecords: Ember.computed('records.[]', function () {\n      // const modelName = this.get('options.modelName');\n      const wrappedRecords = this.get('records');\n      return wrappedRecords;\n    }),\n    refreshChart: Ember.computed('refreshInProgress', function () {\n      this.get('updateChartRecordsTask').perform();\n      return this.get('refreshInProgress');\n    }),\n    updateChartRecordsTask: (0, _emberConcurrency.task)(function* () {\n      yield (0, _emberConcurrency.timeout)(400);\n      this.set('records', this.store.peekAll('packet').toArray());\n    }).keepLatest(),\n\n    /* Builds the chosen filters. */\n    filterFunction: Ember.computed('options.columns', function () {// const filterColumns = Object.values(this.get('options.columns')).map((col) => new FilterColumn(col));\n      // const args = filterColumns.map((column) => {\n      //   return column.get('filterNode');\n      // });\n      // return buildFilterFunction(buildCompoundFilterNode('and', args));\n    }),\n\n    /* Applies the choice of filters. */\n    filteredRecords: Ember.computed('chartRecords', 'filterFunction', function () {\n      // return this.get('chartRecords').filter(this.get('filterFunction'));\n      return this.get('chartRecords');\n    }),\n    chartSum: Ember.computed.alias('filteredRecords.length'),\n\n    /* Gets the choice for slicing the data. */\n    slicedBy: Ember.computed('options.displayOptions', function () {\n      if (Ember.isBlank(this.get('options.displayOptions'))) return;\n      /*eslint-disable */\n\n      return this.get('options.displayOptions').selected;\n      /*eslint-enable */\n    }),\n\n    /* Applies the choice for slicing the data. */\n    recordSlices: Ember.computed('filteredRecords', 'slicedBy', function () {\n      // const categories = {};\n      const filteredRecords = this.get('filteredRecords') || [];\n      const data = [];\n      filteredRecords.forEach(packet => {\n        data.push({\n          t: new Date(packet.timestamp),\n          y: packet.topic\n        });\n      });\n      return data; // const slicedBy = this.get('slicedBy');\n      // if (isBlank(slicedBy)) return categories;\n      // const filterKey = this.get('slicedBy.id');\n      // const metricOption = this.get('slicedBy.metricOption.id');\n      // this.get('slicedBy.valueCategories').forEach((category) => {\n      //   switch (metricOption) {\n      //   case 'count':\n      //     categories[category.label] = filteredRecords.filterBy(filterKey, category.value).length;\n      //     break;\n      //   case 'sumOccurrences':\n      //     categories[category.label] = filteredRecords.reduce((a, b) => {\n      //       return a + b.get(filterKey).filter((item) => item === category.value).length;\n      //     }, 0);\n      //     break;\n      //   default:\n      //     return;\n      //   }\n      // });\n      // { 'label1': <value>, 'label2': <value> }\n      // return categories;\n    }),\n\n    /* Applies the choices for displaying data counts and/or percentages. */\n    aggregatedSliceData: Ember.computed('recordSlices', 'options.visualOptions.@each.isChecked', function () {\n      // const visualOptions = this.get('options.visualOptions');\n      // const showValues = visualOptions.findBy('id', 'value').isChecked;\n      // const showPercentage = visualOptions.findBy('id', 'percentage').isChecked;\n      // const totalCount = this.get('chartSum');\n      const data = [];\n      const recordSlices = this.get('recordSlices') || [];\n      Object.entries(recordSlices).forEach(slice => {\n        const label = slice[1].y;\n        const timestamp = slice[1].t; // if (showValues) {\n        //   label += (', ' + numRecords);\n        // }\n        // if (showPercentage && totalCount !== 0) {\n        //   label += (', ' + Math.floor(100 * numRecords / totalCount) + '%');\n        // }\n\n        data.push({\n          label: label,\n          value: timestamp\n        });\n      }); // [{...}, {...}, ...]\n\n      return data;\n    }),\n    chartData: Ember.computed('aggregatedSliceData', function () {\n      const aggregatedData = this.get('aggregatedSliceData');\n      if (Ember.isBlank(aggregatedData)) return {\n        data: {\n          datasets: []\n        },\n        labels: [],\n        datasets: []\n      };\n      const data = [];\n      const labels = {}; // const backgroundColor = [];\n      // const colors = this.get('colors');\n\n      aggregatedData.forEach(dataSlice => {\n        data.push({\n          t: dataSlice.value,\n          y: dataSlice.label\n        });\n        labels[dataSlice.label] = null;\n      });\n\n      const yLabels = _lodash.default.keys(labels);\n\n      const datasets = [{\n        data: data,\n        labels: [],\n        label: 'Number of Network Packets for Each Updated Topic'\n      }];\n      return {\n        datasets,\n        yLabels\n      };\n    }),\n\n    /* Applies the chart title input. */\n    chartTitle: Ember.computed('widget.state.dataType.{name,title}', function () {\n      const title = this.get('widget.state.dataType.title');\n      if (Ember.isPresent(title)) return title;\n      const name = this.get('widget.state.dataType.name');\n\n      if (Ember.isPresent(name)) {\n        return `${name} Scatter Chart`;\n      } // this.get('updateChartRecordsTask').perform();\n\n\n      return 'Scatter Chart';\n    }),\n    chartOptions: Ember.computed('', function () {\n      const options = {\n        scales: {\n          xAxes: [{\n            type: 'time',\n            distribution: 'series',\n            time: {\n              displayFormats: {\n                second: 'h:mm:ss a'\n              }\n            },\n            ticks: {\n              autoSkip: false,\n              fontSize: 11,\n              precision: 2,\n              suggestedMin: 0,\n              minRotation: 30\n            }\n          }],\n          yAxes: [{\n            type: 'category',\n            position: 'left',\n            display: true\n          }]\n        },\n        responsive: true,\n        maintainAspectRatio: true\n      };\n      return options;\n    }),\n    actions: {\n      onHeaderDoubleClick() {\n        const maximizer = this.get('maximizer');\n\n        if (maximizer.maximizedWidget === this.get('widget')) {\n          maximizer.minimize();\n          return;\n        }\n\n        maximizer.maximize(this.get('widget'));\n      },\n\n      onExitMaximizedClick() {\n        const maximizer = this.get('maximizer');\n        maximizer.minimize();\n      },\n\n      onFilterButtonClick() {\n        const workspace = this.get('workspace');\n        let topState = workspace.get('topState');\n\n        while (topState === 'scatterChartWidget') {\n          workspace.popState();\n          topState = workspace.get('topState');\n        }\n\n        const displayName = 'Scatter Chart';\n        const widget = this.get('widget');\n        workspace.pushState('scatterChartWidget', {\n          displayName,\n          widget\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/scatter-chart-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ZLKEuf1E\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"analytics-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"analytics-widget-title\\\"],[9],[1,[21,\\\"chartTitle\\\"],false],[0,\\\"       \\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"refreshChart\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"analytics-widget-button\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-filter\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onFilterButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onHeaderDoubleClick\\\"],[[\\\"on\\\"],[\\\"doubleClick\\\"]]],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"scatter-chart-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"scatter-chart-container\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-chart-fix\\\",null,[[\\\"type\\\",\\\"data\\\",\\\"options\\\",\\\"width\\\",\\\"height\\\"],[\\\"scatter\\\",[23,[\\\"chartData\\\"]],[23,[\\\"chartOptions\\\"]],350,170]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/scatter-chart-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/schedule-column-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/schedule-column-widget/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _unwrapProxy, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SCHEDULE_MODEL = 'schedule';\n\n  var _default = _component.default.extend({\n    classNames: ['analytics-widget', 'schedule-column-widget'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    table: null,\n    config: _config.default,\n    currentScheduleId: Ember.computed.readOnly('workspace.currentSchedule.id'),\n    queryParams: Ember.computed('currentScheduleId', function () {\n      const currentScheduleId = this.get('currentScheduleId');\n      return {\n        filter: `eq(id,${currentScheduleId})?include=metric`\n      };\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('isSearchAllowed', false);\n    },\n\n    // @FIXME: using an observer is a band aid, and there could be a way to refactor this\n    //after the reoptimazition need to refresh the metric widget\n    scheduleSuccessfullyReoptimized: Ember.observer('workspace.reoptimizeInProgress', function () {\n      if (!this.get('workspace.reoptimizeInProgress')) {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['metric']);\n      }\n    }),\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = SCHEDULE_MODEL;\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let activeData = store.peekAll(modelName) || [];\n\n      if (Ember.isPresent(this.get('queryParams'))) {\n        const queryParams = this.get('queryParams');\n        activeData = await store.query(modelName, queryParams);\n\n        if (Ember.isPresent(activeData)) {\n          await activeData.firstObject.get('metric').reload();\n          const metric = (0, _unwrapProxy.unwrapProxy)(activeData.firstObject.get('metric'));\n          activeData = Ember.isPresent(metric) ? Ember.makeArray(metric) : [];\n        }\n      }\n\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    actions: {\n      //NYAAR-17671  widgets are not maximized and cross icon should also not display in this widgets.\n      onHeaderDoubleClick() {\n        const maximizer = this.get('maximizer');\n        maximizer.minimize();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/schedule-column-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/schedule-column-widget',\n    modelName: 'metric',\n    title: 'Schedule Metrics',\n    defaultSortId: 'timestamp',\n    defaultSortAsc: true,\n    columns: [{\n      id: 'routes',\n      index: 1,\n      type: 'number',\n      label: 'Number of routes',\n      valuePath: 'routes',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'unusedRoutes',\n      index: 2,\n      type: 'number',\n      label: 'Number of unused routes',\n      valuePath: 'unusedRoutes',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'scheduledTrips',\n      index: 3,\n      type: 'number',\n      label: 'Number of scheduled trips',\n      valuePath: 'scheduledTrips',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'waitlistTrips',\n      index: 4,\n      type: 'number',\n      label: 'Number of waitlist trips',\n      valuePath: 'waitlistedTrips',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'manualTrips',\n      index: 5,\n      type: 'number',\n      label: 'Number of manual trips',\n      valuePath: 'manualTrips',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'brokerTrips',\n      index: 6,\n      type: 'number',\n      label: 'Number of broker trips',\n      valuePath: 'brokerTrips',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'breaks',\n      index: 7,\n      type: 'number',\n      label: 'Number of breaks',\n      valuePath: 'breakTrips',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'passengers',\n      index: 8,\n      type: 'number',\n      label: 'Number of passengers',\n      valuePath: 'riders',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'revenueMiles',\n      index: 9,\n      type: 'number',\n      label: 'Number of revenue miles',\n      valuePath: 'revenueMiles',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'revenueHours',\n      index: 10,\n      type: 'number',\n      label: 'Number of revenue hours',\n      valuePath: 'revenueHours',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'totalHours',\n      index: 11,\n      type: 'number',\n      label: 'Total hours',\n      valuePath: 'totalHours',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'totalMiles',\n      index: 12,\n      type: 'number',\n      label: 'Total miles',\n      valuePath: 'totalMiles',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'rideshareTrips',\n      index: 13,\n      type: 'number',\n      label: '% of rideshare trips',\n      valuePath: 'percentageTripsRidesharing',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'timeSingle',\n      index: 14,\n      type: 'number',\n      label: '% time single',\n      valuePath: 'percentageTimeSingle',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'rideshareHours',\n      index: 15,\n      type: 'number',\n      label: '% of rideshare hours',\n      valuePath: 'percentageTimeRidesharing',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'timeOnBreak',\n      index: 16,\n      type: 'number',\n      label: '% time on break',\n      valuePath: 'percentageTimeOnBreak',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'tripRideTime',\n      index: 17,\n      type: 'number',\n      label: 'Average trip ride time',\n      valuePath: 'averageRideTimePerTrip',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'scheduleId',\n      index: 18,\n      type: 'uuid',\n      label: 'Schedule ID',\n      valuePath: 'schedule.id',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'illegalTrips',\n      index: 20,\n      type: 'number',\n      label: 'Number of illegal trips',\n      valuePath: 'illegalTrips',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'timeEmpty',\n      index: 22,\n      type: 'number',\n      label: '% time empty',\n      valuePath: 'percentageTimeEmpty',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }, {\n      id: 'adeptUser',\n      index: 23,\n      type: 'string',\n      label: 'ADEPT User',\n      valuePath: 'userName',\n      sortable: false,\n      searchable: true,\n      defaultWidth: 70,\n      resizable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/stops-form-widget/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSections\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-form-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Section 1',\n      fields: [{\n        id: 'id',\n        type: 'uuid',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }]\n    }, {\n      title: 'Section 2',\n      fields: [{\n        id: 'state',\n        type: 'enum',\n        label: 'State',\n        valuePath: 'state',\n        extra: {\n          options: ['Not Started', 'Sign On', 'Start', 'In-Progress', 'On-Break', 'End', 'Signoff'],\n          allowMultiple: true\n        }\n      }, {\n        id: 'xmin',\n        type: 'text',\n        label: 'X Min',\n        valuePath: 'xmin'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-widget/avlmConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/stops-widget',\n    rowComponent: 'iq-widgets/stops-widget/stops-row',\n    modelName: 'avlm-stop-point',\n    defaultSortId: 'tripId',\n    defaultSortAsc: false,\n    title: 'Stops',\n    // performance table attributes\n    widgetName: 'stopWidget',\n    selectedRowLimit: 100,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    columns: [{\n      id: 'id',\n      index: 18,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      valuePreview: '1',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'type',\n      index: 0,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      mapValuePath: 'stopType',\n      valuePreview: 'Pick',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 50\n    }, {\n      id: 'tripId',\n      index: 1,\n      type: 'text',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderLastName',\n      index: 2,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      searchable: true,\n      defaultWidth: 75,\n      defaultTabletWidth: 170\n    }, {\n      id: 'riderFirstName',\n      index: 3,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      searchable: true,\n      defaultWidth: 60,\n      defaultTabletWidth: 170\n    }, {\n      id: 'riderPhone',\n      index: 16,\n      type: 'enum',\n      label: 'Passenger Phone Number',\n      valuePath: 'passengerPhoneNumber',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'riderId',\n      index: 17,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'status',\n      index: 7,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      valuePreview: 'Planned',\n      editable: false,\n      defaultWidth: 60,\n      defaultTabletWidth: 100,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'OTPstatus',\n      index: 4,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      defaultWidth: 40,\n      defaultTabletWidth: 100,\n      highlightable: true,\n      searchable: true,\n      cellItem: 'OTPCellItem'\n    }, {\n      id: 'ETA',\n      index: 5,\n      type: 'date',\n      label: 'ETA',\n      valuePath: 'eta',\n      editable: true,\n      format: 'hh:mm A',\n      defaultWidth: 70,\n      defaultTabletWidth: 100,\n      highlightable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'promisedTime',\n      index: 13,\n      type: 'datetime',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'requestedTime',\n      index: 6,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      editable: true,\n      format: 'hh:mm A',\n      defaultWidth: 70,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualArrivalTime',\n      index: 8,\n      type: 'time',\n      label: 'Actual Arrive Time',\n      valuePath: 'actualArriveTimestamp',\n      editable: true,\n      hidden: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualDepartTime',\n      index: 9,\n      type: 'time',\n      label: 'Actual Depart Time',\n      valuePath: 'actualDepartTimestamp',\n      editable: true,\n      hidden: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedDepartTime',\n      index: 14,\n      type: 'datetime',\n      label: 'Planned Depart Time',\n      valuePath: 'plannedDepartTime',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'DateCellItem'\n    }, {\n      id: 'routeName',\n      index: 10,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      valuePreview: '40',\n      defaultWidth: 70,\n      hidden: true,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 25,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      editable: true,\n      searchable: true,\n      defaultWidth: 100,\n      hidden: true\n    }, {\n      id: 'address',\n      index: 11,\n      type: 'text',\n      label: 'Address ',\n      valuePath: 'address',\n      searchable: true,\n      editable: true,\n      hidden: true,\n      defaultWidth: 80,\n      defaultTabletWidth: 300\n    }, {\n      id: 'date',\n      index: 12,\n      type: 'date',\n      label: 'Date',\n      valuePath: 'date',\n      format: '`${ENV.dateTimeFormat.dateMoment}`',\n      defaultWidth: 70,\n      hidden: true,\n      cellItem: 'DateCellItem'\n    }, {\n      id: 'city',\n      type: 'text',\n      label: 'City',\n      valuePath: 'city',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'odometer',\n      index: 26,\n      type: 'number',\n      label: 'Odometer on Arrival',\n      valuePath: 'odometerOnArrival',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'serviceWindow',\n      index: 15,\n      type: 'text',\n      label: 'Service Window',\n      valuePath: 'serviceWindow',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'BreakStartTime',\n      index: 19,\n      type: 'time',\n      label: 'Break Start Time',\n      valuePath: 'plannedBreakStartTime',\n      editable: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'BreakEndTime',\n      index: 20,\n      type: 'time',\n      label: 'Break End Time',\n      valuePath: 'plannedBreakEndTime',\n      editable: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'BreakType',\n      index: 21,\n      type: 'text',\n      label: 'Break Type',\n      valuePath: 'breakType',\n      valuePreview: 'Floating',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'BreakCategory',\n      index: 22,\n      type: 'text',\n      label: 'Break Category',\n      valuePath: 'breakCategory',\n      defaultWidth: 70,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'slackMinutes',\n      index: 23,\n      type: 'text',\n      label: 'Slack Minutes',\n      valuePath: 'slack',\n      defaultWidth: 70,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'onboardCount',\n      index: 24,\n      type: 'number',\n      label: 'Onboard Count',\n      valuePath: 'onboardCount',\n      defaultWidth: 70,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'stopBreakOrd',\n      type: 'number',\n      label: 'Stop Break Ord',\n      valuePath: 'ordinal',\n      searchable: false,\n      editable: false,\n      defaultWidth: 50,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'iqId',\n      type: 'number',\n      label: 'IQ ID',\n      valuePath: 'id',\n      searchable: false,\n      editable: false,\n      defaultWidth: 50,\n      unAvailable: true\n    }, {\n      id: 'otpValue',\n      index: 27,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'arriveLat',\n      index: 28,\n      type: 'string',\n      label: 'Actual Arrive Lat',\n      valuePath: 'actualArriveLat',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'arriveLng',\n      index: 29,\n      type: 'string',\n      label: 'Actual Arrive Lng',\n      valuePath: 'actualArriveLng',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLat',\n      index: 30,\n      type: 'string',\n      label: 'Actual Depart Lat',\n      valuePath: 'actualDepartLat',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLng',\n      index: 31,\n      type: 'string',\n      label: 'Actual Depart Lng',\n      valuePath: 'actualDepartLng',\n      hidden: true,\n      highlightable: false\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'id'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'name'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'stopPointId',\n          valuePath: 'stopId'\n        }, {\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'tripId'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'stringNeRQL',\n        field: 'status',\n        value: ['R']\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/stops-widget/config\", \"adept-iq/pods/components/iq-widgets/stops-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/stops-widget/scheduleConfig\", \"adept-iq/config/environment\", \"adept-iq/utils/find-row-record\", \"ember-changeset\", \"adept-iq/config/api-urls\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/stringifyNumber\", \"ember-concurrency\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/rql-generators\", \"react-sortable-hoc\", \"lodash\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/utils/format-function\", \"adept-iq/utils/format-text-extension\", \"adept-iq/mixins/version-check\", \"adept-iq/models/dispatch-route\", \"adept-iq/models/stop-point\", \"adept-iq/models/dashboard\", \"adept-iq/models/trip\", \"adept-iq/models/route-break\"], function (_exports, _component, _config, _avlmConfig, _scheduleConfig, _environment, _findRowRecord, _emberChangeset, _apiUrls, _moment, _unwrapProxy, _stringifyNumber, _emberConcurrency, _mappedPermIds, _rqlGenerators, _reactSortableHoc, _lodash, _asyncScheduleOperation, _formatFunction, _formatTextExtension, _versionCheck, _dispatchRoute, _stopPoint, _dashboard, _trip, _routeBreak) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const arrayMove = _reactSortableHoc.default.arrayMove;\n  const INCLUDES = ['clusters', 'vehicleRoutes', 'vehicleRoutes.driverShifts', 'vehicleRoutes.vehicle', 'vehicleRoutes.driverShifts.driver', 'vehicleRoutes.vehicle.vehicleType', 'driverBreaks', 'driverBreaks.driverBreakEvents', 'vehicleRoutes.vehicle.vehicleEvents', 'clusters.trips', 'clusters.trips.stops'];\n\n  var _default = _component.default.extend(_asyncScheduleOperation.default, _versionCheck.default, {\n    classNames: ['stops-widget'],\n    classNameBindings: ['isReordering'],\n    editModal: Ember.inject.service(),\n    dragCoordinator: Ember.inject.service(),\n    stopsReorder: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    routeexecevent: Ember.inject.service(),\n    user: Ember.inject.service(),\n    getCoreModelNameByWidgetRecord: Ember.computed('activeContext.topActiveContext.getCoreModelNameByWidgetRecord', function () {\n      const func = this.get('activeContext.topActiveContext.getCoreModelNameByWidgetRecord');\n      return func;\n    }),\n    permissionLayer: Ember.inject.service(),\n    editComponent: 'iq-widgets/stops-form-widget',\n    driverBreakEditComponent: 'iq-widgets/driver-breaks-form-widget',\n    vehicleEventComponent: 'iq-widgets/vehicle-event-form-widget',\n    noShowComponent: 'iq-widgets/noshow-event-stop-form-widget',\n    routesEndComponent: 'iq-widgets/routes-end-form-widget',\n    routesStartComponent: 'iq-widgets/routes-start-form-widget',\n    cancelTripComponent: 'iq-widgets/cancel-type-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    sourceRowId: null,\n    dragTarget: null,\n    isReordering: Ember.computed.alias('stopsReorder.reorderInProgress'),\n    rightClickDelay: 250,\n    // Check if we still need this after iqux-perf merged\n    // onReorderChange: observer('stopsReorder.reorderInProgress', function() {\n    //   run.scheduleOnce('afterRender', this, 'refreshData');\n    // }),\n    dynamicSingleActions: Ember.computed('table.rows.@each.{selected,computedStatus}', 'selectedWidgetRecord', 'isLoading', function () {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        return this._dynamicAVLMActions();\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            return this._dynamicScheduleActions();\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            return this._dynamicDispatchActions();\n        }\n      }\n    }),\n    dragRowGroup: Ember.computed('row', function () {\n      return this.get('table.rows');\n    }).readOnly(),\n    dragDirection: Ember.computed('dragTarget', 'sourceRowId', function () {\n      const targetRow = this.get('dragTarget');\n\n      if (targetRow) {\n        const rows = this.get('dragRowGroup');\n        const targetIdx = rows.indexOf((0, _findRowRecord.findRowRecordByElement)(targetRow, rows));\n        const sourceIdx = rows.indexOf(rows.findBy('rowId', this.get('sourceRowId')));\n        return sourceIdx - targetIdx;\n      }\n\n      return null;\n    }).readOnly(),\n    dragOverClass: Ember.computed('dragDirection', function () {\n      const direction = this.get('dragDirection') < 0 ? 'below' : 'above';\n      return ` drag-target-${direction} drag-target`;\n    }),\n\n    init() {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this.set('config', _scheduleConfig.default);\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this.set('config', _config.default);\n            break;\n        }\n      }\n\n      this._super(...arguments);\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        // if it is a trip active context\n        // only include the pick and drop stops\n        if (this.get('activeContext.topActiveContext').tripActiveContext()) {\n          return records.filter(record => {\n            return ['pick', 'drop'].includes(record.get('stopType'));\n          });\n        }\n\n        return records;\n      });\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    saveCancelRecordFunction(records) {\n      /*eslint-disable */\n      const me = this;\n      /*eslint-enable */\n\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        if (!Ember.isEmpty(records)) {\n          records.forEach(record => {\n            const bookingId = record.get('leg.booking.id');\n            const cancelData = this.get('routeexecevent').cancelData();\n            const prepareCancelData = this.get('routeexecevent').prepareTripCancelData(cancelData, record);\n            const json = JSON.stringify(prepareCancelData);\n            const session = this.get('session');\n            return this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking/' + bookingId + '/cancellation', {\n              method: 'POST',\n              contentType: 'application/json',\n              headers: {\n                'Authorization': `Bearer ${session.data.authenticated.token}`\n              },\n              data: json\n            }).then(() => {\n              record.set('isForceDirty', false);\n              me.get('notifications').success('Trip successfully canceled');\n              me.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n              resolve();\n            }).catch(function (error) {\n              me.get('notifications').warning('Failed to cancel Trip');\n              reject(error);\n            });\n          });\n        }\n      });\n    },\n\n    saveRouteStartRecordFunction(records) {\n      return Ember.RSVP.all(records.map(record => {\n        if (Ember.isNone(record.get('dispatchRoute.assignedDriver.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot start a route that does not have a driver.'));\n        }\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedVehicle.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot start a route that does not have a vehicle.'));\n        }\n\n        const routeStartData = this.get('routeexecevent').routeStartData();\n        const preparedRouteStartData = this.get('routeexecevent').prepareRouteStartData(routeStartData, record);\n        const json = JSON.stringify(preparedRouteStartData);\n        const session = this.get('session');\n        return this.get('ajax').post(_apiUrls.API.avlmService.host + '/route-exec-event', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        }).then(() => {\n          record.set('isForceDirty', false);\n          this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n          this.get('notifications').success('Start route successful');\n        }).catch(() => {\n          this.get('notifications').warning('Start route failed');\n        });\n      }));\n    },\n\n    confirmSaveRouteEndFunction(records, callback) {\n      let specialCallbackWhenSuccess = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      const tooltip = this.get('tooltip');\n      const title = 'End Route';\n      let tip = 'The route end time selected is outside the configured limit of the planned route end time. Do you want to continue?';\n      return Ember.RSVP.all(records.map(record => {\n        const extensionExceeded = record.get('extensionExceeded');\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedDriver.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot end a route that does not have a driver.'));\n        }\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedVehicle.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot end a route that does not have a vehicle.'));\n        }\n\n        if (!extensionExceeded) {\n          tip = 'Would you like to commit your changes?';\n        }\n\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await this.saveRouteEndRecordFunction(record);\n            } catch (err) {\n              return;\n            } finally {\n              if (specialCallbackWhenSuccess) {\n                await specialCallbackWhenSuccess();\n              } else if (callback) {\n                await callback();\n              }\n\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            if (callback) await callback();\n            tooltip.reset();\n          },\n          closeAction: async () => {\n            if (callback) await callback();\n          }\n        });\n      }));\n    },\n\n    saveRouteEndRecordFunction(record) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      return routeExecEventAdapter.createEndRouteEvent(record).then(avlmVersion => routeExecEventAdapter.createCompleteRouteEvent(record, avlmVersion)).then(() => {\n        record.set('isForceDirty', false);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n        this.get('notifications').success('Route completed successfully');\n        this.get('editModal').close();\n        return Ember.RSVP.Promise.resolve();\n      }).catch(e => {\n        const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n        let messageText = 'Failed to complete route';\n\n        if (e.status === 400 || e.status === 500) {\n          if (payloadMessage.errorDetail.includes('Execution version is different')) {\n            messageText = `FAILED TO COMPLETE ROUTE. THE ROUTE (${record.get('name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n          }\n        }\n\n        this.get('notifications').warning(messageText);\n        this.get('editModal').close();\n        return Ember.RSVP.Promise.reject(e);\n      });\n    },\n\n    saveDriverBreakFunction(records) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const routeBreakAdapter = store.adapterFor('route-break');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n      this.set('editModal.errors', []);\n      const rollbackOperations = [];\n      return records.reduce(async (acu, record) => {\n        const requestTime = record.get('requestTime');\n        const projectedEndDate = record.get('projectedEndDate');\n        const place = (0, _unwrapProxy.unwrapProxy)(record.get('place'));\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        const locationExist = !Ember.isEmpty(location.get('lat'));\n        let placeResponse;\n        place.set('type', 'driverBreak');\n        place.set('schedule', (0, _unwrapProxy.unwrapProxy)(record.get('schedule')));\n        record.set('estimatedStart', requestTime);\n        record.set('estimatedEnd', projectedEndDate); // creating new driver break\n\n        if (record.get('isNew')) {\n          try {\n            if (locationExist) {\n              record.set('place', place);\n              const locationResponse = await locationAdapter.postLocation(location);\n              const addressResponse = await addressAdapter.postAddress(address);\n              await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n              placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n            }\n\n            const placeId = Ember.isNone(placeResponse) ? '' : placeResponse.data.id;\n            const routeBreak = await routeBreakAdapter.postRouteBreak(record, placeId);\n\n            const routeBreakId = _lodash.default.get(routeBreak, 'data.id', null);\n\n            if (routeBreakId) {\n              rollbackOperations.push(_lodash.default.bind(routeBreakAdapter.deleteRouteBreak, routeBreakAdapter, routeBreak.data.id));\n            }\n\n            await acu;\n            const dispatchRouteId = record.get('route.dispatchRoute.id');\n            const dispatchRouteVersion = record.get('route.dispatchRoute.version');\n            const dRDriverBreakResponse = await dispatchRouteAdapter.createDriverBreak((0, _unwrapProxy.unwrapProxy)(record.get('route.dispatchRoute')), routeBreak.data.attributes.plannedRouteOrdinal, routeBreak.data.id, dispatchRouteVersion);\n\n            const dRDriverBreakId = _lodash.default.get(dRDriverBreakResponse, 'data.id', null);\n\n            if (dRDriverBreakId && dispatchRouteId) {\n              rollbackOperations.push(_lodash.default.bind(dispatchRouteAdapter.removeDriverBreak, dispatchRouteAdapter, dispatchRouteId, routeBreakId, dispatchRouteVersion));\n            }\n\n            this.get('notifications').success(`Break successfully added to route ${record.get('route.name')}`);\n            record.destroyRecord();\n            this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['stop-point']);\n            this.get('workspace').requestWootricSurvey('on_addEditDriverBreak');\n            return;\n          } catch (e) {\n            // async function reject promise by throwing an error\n            let msg = `Break failed to be added to route ${record.get('route.name')}`;\n\n            if (e.message) {\n              if (e.message.includes('modified by another request')) msg = `UNABLE TO SAVE BREAK, BECAUSE ITS ROUTE ${record.get('route.name')} HAS BEEN MODIFIED BY ANOTHER REQUEST.`;else if (e.message.includes('Unable to lock entities')) msg = 'Obtain route lock failed at this time, please retry operation.';\n            }\n\n            this.get('notifications').warning(msg);\n            throw e;\n          }\n        } // patching driver break\n\n\n        try {\n          let placeId;\n\n          if (locationExist) {\n            if (!Ember.isEmpty(place.id)) {\n              await place.save();\n              await location.save();\n              await address.save();\n              placeId = place.get('id');\n            } else {\n              const locationResponse = await locationAdapter.postLocation(location);\n              const addressResponse = await addressAdapter.postAddress(address);\n              await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n              placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n              placeId = Ember.isNone(placeResponse) ? '' : placeResponse.data.id;\n            }\n          }\n\n          await routeBreakAdapter.patchRouteBreak(record, placeId);\n          rollbackOperations.push(_lodash.default.bind(this.rollBackEditDriverBreak, this, record));\n          await dispatchRouteAdapter.putRouteBreak(record);\n          this.get('notifications').success('SUCCESSFULLY EDITED DRIVER BREAK');\n          this.get('workspace').requestWootricSurvey('on_addEditDriverBreak');\n          return;\n        } catch (e) {\n          // async function reject promise by throwing an error\n          let msg = 'FAILED TO EDIT DRIVER BREAK';\n\n          if (e.message) {\n            if (e.message.includes('modified by another request')) msg = `UNABLE TO SAVE BREAK, BECAUSE ITS ROUTE ${record.get('route.name')} HAS BEEN MODIFIED BY ANOTHER REQUEST.`;else if (e.message.includes('Unable to lock entities')) msg = 'Obtain route lock failed at this time, please retry operation.';\n          }\n\n          this.get('notifications').warning(msg);\n          throw e;\n        }\n      }, Ember.RSVP.Promise.resolve()).catch(async e => {\n        for (const operation of rollbackOperations) {\n          await operation();\n        }\n\n        let msg = `Failed to add/edit driver break to route ${records[0].get('route.name')}`;\n        if (e.message) msg = e.message;\n        this.get('notifications').warning(msg);\n      });\n    },\n\n    rollBackEditDriverBreak(record) {\n      const store = this.get('store');\n      const routeBreakAdapter = store.adapterFor('route-break');\n      record.rollbackAttributes();\n      return routeBreakAdapter.patchRouteBreak(record, record.get('place.id'));\n    },\n\n    saveNoShowRecordFunction(records) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const tripNoShowAdapter = store.adapterFor('trip-noshow');\n      const notifications = this.get('notifications');\n      return records.reduce((acu, record) => {\n        const dsStop = (0, _unwrapProxy.unwrapProxy)(record);\n        const noshow = (0, _unwrapProxy.unwrapProxy)(dsStop.get('noShow'));\n        const noshowReason = (0, _unwrapProxy.unwrapProxy)(noshow.get('noShowReasonCode'));\n        const trip = (0, _unwrapProxy.unwrapProxy)(dsStop.get('trip'));\n        trip.set('noshowDetails', noshow.get('notes'));\n        return acu.then(() => routeExecEventAdapter.createStopNoShowEvent(record)).then(() => tripNoShowAdapter.createTripNoShow(trip, noshowReason)).then(() => {\n          notifications.success(`Successfully No Showed Trip ${dsStop.get('trip.tripId')}`);\n        }).catch(e => {\n          const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n\n          if (payloadMessage.errorDetail.includes('Execution version is different')) {\n            notifications.warning(`PERFORM NOSHOW FAILED. THE ROUTE (${dsStop.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`);\n          } else {\n            notifications.warning(`Failed to No Show Trip ${dsStop.get('trip.tripId')}`);\n          } // throw new Error(e);\n\n        });\n      }, Ember.RSVP.Promise.resolve());\n    },\n\n    async confirmSaveUndoRouteEndFunction(route) {\n      const tooltip = this.get('tooltip');\n      const title = 'Undo Route End';\n      const tip = 'Would you like to undo route end?';\n      const dispatchRoute = route.get('dispatchRoute');\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      this.set('dispatchRouteToCheck', dispatchRoute);\n\n      try {\n        // Check dispatchRoute version first\n        await this.get('versionCheckOperation').perform();\n        await lockRouteAction();\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await this.saveUndoRouteEndRecordFunction(route);\n            } catch (e) {\n              return;\n            } finally {\n              await unlockRouteAction();\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          },\n          closeAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          }\n        });\n      } catch (e) {\n        await unlockRouteAction();\n      }\n    },\n\n    saveUndoRouteEndRecordFunction(record) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      return routeExecEventAdapter.createUndoEndRouteEvent(record).then(() => {\n        record.set('isForceDirty', false);\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n        this.get('notifications').success('Undid Route end successfully');\n        return Ember.RSVP.Promise.resolve();\n      }).catch(e => {\n        const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n        let messageText = 'Failed to undo ended route';\n\n        if (e.status === 400 || e.status === 500) {\n          if (payloadMessage.errorDetail.includes('Execution version is different')) {\n            messageText = `FAILED TO UNDO ENDED ROUTE. THE ROUTE (${record.get('name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n          }\n        }\n\n        this.get('notifications').warning(messageText);\n        return Ember.RSVP.Promise.reject(e);\n      });\n    },\n\n    async reorderBreakInRoute(dispatchRoute, driverBreak) {\n      // eslint-disable-next-line consistent-this\n      const notifications = this.get('notifications');\n      const store = this.get('store');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n      const routeBreak = Ember.Object.create({\n        id: driverBreak.routeBreakId,\n        plannedRouteOrdinal: driverBreak.stopBreakOrd,\n        route: {\n          dispatchRoute\n        }\n      });\n\n      try {\n        const newBreakDetails = await dispatchRouteAdapter.putRouteBreak(routeBreak);\n        notifications.success('Successfully reordered driver break');\n        return newBreakDetails;\n      } catch (error) {\n        let message = '';\n\n        if (!Ember.isNone(error) && !Ember.isNone(error.payload) && !Ember.isNone(error.payload.message)) {\n          message = error.payload.message;\n        }\n\n        notifications.warning(`Failed to Reorder Driver Break. ${message}`);\n        return false;\n      }\n    },\n\n    validateScheduleCapacity(widgetRecords, vehicle) {\n      const capacityCounts = vehicle ? vehicle.get('capacityCounts') : {};\n      const flexSeats = capacityCounts.flexSeats;\n      let tripsInDanger = [];\n      let minimumTripsInDanger = []; // go through all the flex seats possibilities\n\n      const capacityFits = flexSeats.some(flexSeat => {\n        const currentTravelNeedCapacity = {\n          ambulatory: flexSeat.ambulatory || 0,\n          wheelchair: flexSeat.wheelchair || 0\n        };\n        tripsInDanger = [];\n\n        for (const widgetRecord of widgetRecords) {\n          const stop = this.get('store').peekRecord('trip-stop', widgetRecord.id);\n          const tripTravelNeedCounts = stop ? stop.get('trip.travelNeedCounts') : {\n            ambulatory: 0,\n            wheelchair: 0\n          };\n          const stopTripId = stop ? stop.get('trip.tripId') : 0;\n\n          if (stop) {\n            if (stop.get('isPick')) {\n              currentTravelNeedCapacity.ambulatory -= tripTravelNeedCounts.ambulatory;\n              currentTravelNeedCapacity.wheelchair -= tripTravelNeedCounts.wheelchair;\n            } else if (stop.get('isDrop')) {\n              currentTravelNeedCapacity.ambulatory += tripTravelNeedCounts.ambulatory;\n              currentTravelNeedCapacity.wheelchair += tripTravelNeedCounts.wheelchair;\n            }\n\n            if (stop.get('isPick')) {\n              if (currentTravelNeedCapacity.ambulatory < 0 || currentTravelNeedCapacity.wheelchair < 0) {\n                tripsInDanger.pushObject(stopTripId);\n              }\n            }\n          }\n        } // this flex seat fits. exit.\n\n\n        if (tripsInDanger.length === 0) {\n          return true;\n        } // does not fit for this flex seat. keep the best possibilities\n\n\n        if (minimumTripsInDanger.length === 0 || minimumTripsInDanger.length > tripsInDanger.length) {\n          minimumTripsInDanger = tripsInDanger;\n        }\n\n        return false;\n      });\n      return capacityFits ? [] : minimumTripsInDanger;\n    },\n\n    validateCapacity(widgetRecords, vehicle) {\n      const capacityCounts = vehicle ? vehicle.get('capacityCounts') : {};\n      const flexSeats = capacityCounts.flexSeats;\n      let tripsInDanger = [];\n      let minimumTripsInDanger = []; // go through all the flex seats possibilities\n\n      const capacityFits = flexSeats.some(flexSeat => {\n        const currentTravelNeedCapacity = {\n          ambulatory: flexSeat.ambulatory || 0,\n          wheelchair: flexSeat.wheelchair || 0\n        };\n        tripsInDanger = [];\n\n        for (const widgetRecord of widgetRecords) {\n          const stop = this.get('store').peekRecord('stop-point', widgetRecord.id);\n          const tripTravelNeedCounts = stop.get('trip.travelNeedCounts');\n          const stopTripId = stop.get('trip.tripId');\n\n          if (stop.get('isPick')) {\n            currentTravelNeedCapacity.ambulatory -= tripTravelNeedCounts.ambulatory;\n            currentTravelNeedCapacity.wheelchair -= tripTravelNeedCounts.wheelchair;\n          } else if (stop.get('isDrop')) {\n            currentTravelNeedCapacity.ambulatory += tripTravelNeedCounts.ambulatory;\n            currentTravelNeedCapacity.wheelchair += tripTravelNeedCounts.wheelchair;\n          }\n\n          if (stop.get('isPick')) {\n            if (currentTravelNeedCapacity.ambulatory < 0 || currentTravelNeedCapacity.wheelchair < 0) {\n              tripsInDanger.pushObject(stopTripId);\n            }\n          }\n        } // this flex seat fits. exit.\n\n\n        if (tripsInDanger.length === 0) {\n          return true;\n        } // does not fit for this flex seat. keep the best possibilities\n\n\n        if (minimumTripsInDanger.length === 0 || minimumTripsInDanger.length > tripsInDanger.length) {\n          minimumTripsInDanger = tripsInDanger;\n        }\n\n        return false;\n      });\n      return capacityFits ? [] : minimumTripsInDanger;\n    },\n\n    validateReorderBeforeCommit(sourceType, sourceRowRecord, targetRowRecord, pickOrdinal, dropOrdinal) {\n      const widgetRecords = this.get('widgetRecords').sortBy('stopBreakOrd');\n\n      if (sourceType !== 'break' && sourceRowRecord.get('computedStatus') !== _stopPoint.PENDING_STOP_STATUS) {\n        this.get('notifications').warning('Cannot move stop because trip have already been started.');\n        return false;\n      }\n\n      if (sourceType === 'break' && (sourceRowRecord.get('computedStatus') === _stopPoint.ON_BREAK_STOP_STATUS || sourceRowRecord.get('computedStatus') === 'OffBreak')) {\n        this.get('notifications').warning('Cannot move break because it have already been started.');\n        return false;\n      }\n\n      if (targetRowRecord.get('stopType') !== 'break' && (sourceRowRecord.get('computedStatus') !== _stopPoint.PENDING_STOP_STATUS || targetRowRecord.get('computedStatus') !== _stopPoint.PENDING_STOP_STATUS)) {\n        this.get('notifications').warning('Cannot move stop before a trip that have already been started.');\n        return false;\n      }\n\n      if (targetRowRecord.get('stopType') === 'break' && (targetRowRecord.get('computedStatus') === _stopPoint.ON_BREAK_STOP_STATUS || targetRowRecord.get('computedStatus') === 'OffBreak')) {\n        this.get('notifications').warning('Cannot move stop before a break that have already been started.');\n        return false;\n      }\n\n      if (sourceType !== 'break' && dropOrdinal <= pickOrdinal) {\n        this.get('notifications').warning('Drop-off cannot be before the Pickup');\n        return false;\n      }\n\n      let onBoardCount = 0;\n      let invalidBreakPostion = false;\n      widgetRecords.forEach(widgetRecord => {\n        if (widgetRecord.type === 'pick') {\n          onBoardCount++;\n        } else if (widgetRecord.type === 'drop') {\n          onBoardCount--;\n        } else if (widgetRecord.type === 'break') {\n          if (onBoardCount > 0) invalidBreakPostion = true;\n        }\n      });\n\n      if (invalidBreakPostion) {\n        this.get('notifications').warning('Breaks cannot be in-between a pick and a drop stop');\n        return false;\n      }\n\n      return true;\n    },\n\n    validateScheduleReorderBeforeCommit(sourceType, sourceRowRecord, targetRowRecord, pickOrdinal, dropOrdinal) {\n      const widgetRecords = this.get('widgetRecords').sortBy('scheduleOrdinal');\n\n      if (sourceType !== 'break' && dropOrdinal <= pickOrdinal) {\n        this.get('notifications').warning('Drop-off cannot be before the Pickup');\n        return false;\n      }\n\n      let onBoardCount = 0;\n      let invalidBreakPostion = false;\n      widgetRecords.forEach(widgetRecord => {\n        if (widgetRecord.type === 'pick') {\n          onBoardCount++;\n        } else if (widgetRecord.type === 'drop') {\n          onBoardCount--;\n        } else if (widgetRecord.type === 'break') {\n          if (onBoardCount > 0) invalidBreakPostion = true;\n        }\n      });\n\n      if (invalidBreakPostion) {\n        this.get('notifications').warning('Breaks cannot be in-between a pick and a drop stop');\n        return false;\n      }\n\n      return true;\n    },\n\n    doReorder(sourceRowRecord, targetRowRecord, previousOrdinalArray) {\n      const tooltip = this.get('tooltip');\n      const sourceType = sourceRowRecord.get('stopType');\n      const targetType = targetRowRecord.get('stopType');\n      const title = 'Reordering Stops';\n      const breaks = previousOrdinalArray.filter(stop => stop.type === _routeBreak.BREAK_TYPE);\n      const minBreakLength = 1;\n      let pickOrdinal = null;\n      let dropOrdinal = null;\n      let breakOrdinal = null;\n\n      if (sourceType === 'pulloutGarage' || sourceType === 'pullinGarage' || targetType === 'pulloutGarage' || targetType === 'pullinGarage' || sourceRowRecord.get('routeOrdinal') === targetRowRecord.get('routeOrdinal')) {\n        return false;\n      }\n\n      if (sourceType === 'drop') {\n        pickOrdinal = previousOrdinalArray.find(obj => obj.id === sourceRowRecord.get('trip.pick.stopPoint.id')).stopBreakOrd; //sourceRowRecord.get('trip.pick.stopPoint.routeOrdinal');\n\n        dropOrdinal = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id')).stopBreakOrd; //targetRowRecord.get('routeOrdinal');\n      } else if (sourceType === 'pick') {\n        pickOrdinal = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id')).stopBreakOrd; //targetRowRecord.get('routeOrdinal');\n\n        dropOrdinal = previousOrdinalArray.find(obj => obj.id === sourceRowRecord.get('trip.drop.stopPoint.id')).stopBreakOrd; //sourceRowRecord.get('trip.drop.stopPoint.routeOrdinal');\n      } else if (sourceType === 'break') {\n        breakOrdinal = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id')).stopBreakOrd; //parseInt(targetRowRecord.get('routeOrdinal'), 10);\n      } else {\n        this.get('notifications').warning('Invalid Source');\n        return false;\n      }\n\n      let confirmMessage = `Move ${sourceRowRecord.get('stopType')} stop of Trip ${sourceRowRecord.get('trip.tripId')} to position ${targetRowRecord.get('routeOrdinal')}`;\n\n      if (sourceRowRecord.get('stopType') === 'break') {\n        const breakIndexText = this.getBreakIndexPositionByText(sourceRowRecord, previousOrdinalArray);\n        confirmMessage = `Move ${breakIndexText} ${sourceRowRecord.get('stopType')} to position ${breakOrdinal}`; //NYAAR-19436-if only one break in the stops widget means we need a different confirm message\n\n        if (breaks.length === minBreakLength) {\n          confirmMessage = `Move ${sourceRowRecord.get('stopType')} to position ${breakOrdinal}`;\n        }\n      }\n\n      if (!this.validateReorderBeforeCommit(sourceType, sourceRowRecord, targetRowRecord, pickOrdinal, dropOrdinal, previousOrdinalArray)) {\n        return false;\n      }\n\n      tooltip.pushConfirmation({\n        tip: confirmMessage,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.forceUpdateGrids();\n          tooltip.reset();\n          return true;\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          const widgetRecords = this.get('widgetRecords');\n          widgetRecords.map(record => {\n            const origOrdinalObj = previousOrdinalArray.find(obj => obj.id === record.id);\n\n            if (Ember.isPresent(origOrdinalObj)) {\n              record.stopBreakOrd = origOrdinalObj.stopBreakOrd;\n            }\n          }); // This function only works for ember-react-widget\n\n          this.rollbackCache();\n          tooltip.reset();\n          return false;\n        }\n      });\n    },\n\n    doScheduleReorder(sourceRowRecord, targetRowRecord, previousOrdinalArray) {\n      if (Ember.isBlank(sourceRowRecord) || Ember.isBlank(targetRowRecord)) {\n        return false;\n      }\n\n      const tooltip = this.get('tooltip');\n      const sourceType = sourceRowRecord.get('stopType');\n      const targetType = targetRowRecord.get('stopType');\n      const targetWidget = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id'));\n      const title = 'Reordering Stops';\n      const breaks = previousOrdinalArray.filter(stop => stop.type === _routeBreak.BREAK_TYPE);\n      const minBreakLength = 1;\n      let pickOrdinal = null;\n      let dropOrdinal = null;\n      let breakOrdinal = null;\n\n      if (sourceType === 'pulloutGarage' || sourceType === 'pullinGarage' || targetType === 'pulloutGarage' || targetType === 'pullinGarage' || sourceRowRecord.get('scheduleOrdinal') === targetRowRecord.get('scheduleOrdinal')) {\n        return false;\n      }\n\n      if (sourceType === 'drop') {\n        pickOrdinal = previousOrdinalArray.find(obj => obj.id === sourceRowRecord.get('trip.pick.id')).scheduleOrdinal;\n        dropOrdinal = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id')).scheduleOrdinal;\n      } else if (sourceType === 'pick') {\n        pickOrdinal = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id')).scheduleOrdinal;\n        dropOrdinal = previousOrdinalArray.find(obj => obj.id === sourceRowRecord.get('trip.drop.id')).scheduleOrdinal;\n      } else if (sourceType === 'break') {\n        breakOrdinal = previousOrdinalArray.find(obj => obj.id === targetRowRecord.get('id')).scheduleOrdinal;\n      } else {\n        this.get('notifications').warning('Invalid Source');\n        return false;\n      }\n\n      let confirmMessage = `Move ${sourceRowRecord.get('stopType')} stop of Trip ${sourceRowRecord.get('trip.tripId')} to position ${targetWidget.scheduleOrdinal}`;\n\n      if (sourceRowRecord.get('stopType') === 'break') {\n        const breakIndexText = this.getBreakIndexPositionByText(sourceRowRecord, previousOrdinalArray);\n        confirmMessage = `Move ${breakIndexText} ${sourceRowRecord.get('stopType')} to position ${breakOrdinal}`; //NYAAR-19436-if only one break in the stops widget means we need a different confirm message\n\n        if (breaks.length === minBreakLength) {\n          confirmMessage = `Move ${sourceRowRecord.get('stopType')} to position ${breakOrdinal}`;\n        }\n      }\n\n      if (!this.validateScheduleReorderBeforeCommit(sourceType, sourceRowRecord, targetRowRecord, pickOrdinal, dropOrdinal, previousOrdinalArray)) {\n        return false;\n      }\n\n      tooltip.pushConfirmation({\n        tip: confirmMessage,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.forceUpdateGrids();\n          tooltip.reset();\n          return true;\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          const widgetRecords = this.get('widgetRecords');\n          widgetRecords.map(record => {\n            const origOrdinalObj = previousOrdinalArray.find(obj => obj.id === record.id);\n\n            if (Ember.isPresent(origOrdinalObj)) {\n              record.scheduleOrdinal = origOrdinalObj.scheduleOrdinal;\n            }\n          }); // This function only works for ember-react-widget\n\n          this.rollbackCache();\n          tooltip.reset();\n          return false;\n        }\n      });\n    },\n\n    formatBulkTransfer(stopPoints, sourceId, destinationId) {\n      return stopPoints.map(stop => {\n        return {\n          id: stop.id,\n          type: 'stop',\n          source: sourceId,\n          destination: destinationId,\n          ordinal: stop.stopBreakOrd\n        };\n      });\n    },\n\n    formatReorderManufest(stops) {\n      const formattedStops = stops.map(stop => {\n        return {\n          id: stop.id,\n          type: stop.type,\n          ordinal: stop.scheduleOrdinal\n        };\n      });\n      return formattedStops.sortBy('ordinal');\n    },\n\n    reorderBreak(breakRecords, dispatchRoute) {\n      return Ember.RSVP.Promise.all(breakRecords.map(breakRecord => {\n        // only send out break update of it was changed.\n        if (breakRecord.ordinal !== breakRecord.stopBreakOrd) {\n          return this.reorderBreakInRoute(dispatchRoute, breakRecord);\n        }\n      }));\n    },\n\n    async doReorderConfirm() {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      const notifications = this.get('notifications');\n      const widgetRecords = this.get('widgetRecords');\n      const sourceId = this.get('stopsReorder.dispatchRoute.id');\n      const destinationId = sourceId;\n      const tripStopRecords = widgetRecords.filter(stopPoint => ['pick', 'drop'].includes(stopPoint.type));\n      const tripInstructions = this.formatBulkTransfer(tripStopRecords, sourceId, destinationId);\n      const dispatchRoute = this.get('stopsReorder.dispatchRoute');\n      const routeVersion = this.get('stopsReorder.dispatchRouteVersion'); // change pointer to working so user knows and disable the header button\n\n      this.cursorWait();\n      this.get('stopsReorder').toggleHiddenFlag();\n\n      if (tripInstructions.length > 0) {\n        const bulkOperationAdapter = this.get('store').adapterFor('bulk-operation');\n        await bulkOperationAdapter.createBulkAsyncOperation.perform({\n          instructions: tripInstructions,\n          prerequisites: [{\n            id: sourceId,\n            type: 'route',\n            version: routeVersion\n          }]\n        }).then(async result => {\n          if (result.isJobSuccess) {\n            notifications.success('Successfully reordered stops');\n            this.get('stopsReorder').stopReorder();\n            Ember.run.later(this, function () {\n              coreEntityPopulator.populateRtsRoute(dispatchRoute.get('route.id'), {});\n            }, 3000);\n          } else {\n            if (result.result.includes('violated the capacity')) {\n              notifications.warning('Reorder failed. Exceeds route capacity.');\n            } else if (result.result.includes('modified by another request') || result.result.includes('but has version')) {\n              const routeName = dispatchRoute.get('route.name');\n              notifications.warning(`Reorder failed. The Route (${routeName}) has already been modified with another request`);\n            } else if (result.result.includes('connect ECONNREFUSED')) {\n              notifications.warning('UNABLE TO REORDER STOPS. SERVICE CONNECTION IS DOWN. CONTACT ADMINISTRATOR.');\n            } else {\n              notifications.warning('Reorder failed. Check logs for result.');\n            }\n\n            console.log(result.result); //eslint-disable-line no-console\n\n            this.get('stopsReorder').cancelConfirmReorder();\n          }\n        }).catch(function (error) {\n          notifications.warning(`Reorder failed. ${error}`);\n          console.log(error); //eslint-disable-line no-console\n        });\n      } // switch pointer back to default\n\n\n      this.cursorDefault();\n      this.get('stopsReorder').toggleHiddenFlag();\n    },\n\n    async doScheduleReorderConfirm() {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      const notifications = this.get('notifications');\n      const widgetRecords = this.get('widgetRecords');\n      const sourceId = this.get('stopsReorder.route.id');\n      const tripStopRecords = widgetRecords.filter(stopPoint => ['pick', 'drop', 'break'].includes(stopPoint.type));\n      const tripInstructions = this.formatReorderManufest(tripStopRecords); // change pointer to working so user knows and disable the header button\n\n      this.cursorWait();\n      this.get('stopsReorder').toggleHiddenFlag();\n\n      if (tripInstructions.length > 0) {\n        const currentSchedule = this.get('workspace.currentSchedule');\n        const operationData = {\n          routeId: sourceId,\n          stops: tripInstructions\n        };\n        const options = {\n          operationData,\n          outputResult: true\n        };\n        await this.createScheduleAsyncOperation.perform(currentSchedule, 'reorderManifest', options).then(result => {\n          if (result.isJobSuccess) {\n            notifications.success('Successfully reordered stops/breaks');\n            this.get('stopsReorder').stopReorder();\n            Ember.run.later(this, function () {\n              coreEntityPopulator.populateRtsRoute(sourceId, {});\n            }, 3000);\n          } else {\n            if (result.results.includes('Reorder Manifest in SES fails with error:')) {\n              notifications.warning('STOP CANNOT BE MOVED BECAUSE THE ROUTE HAS SINCE CHANGED.');\n            } else {\n              notifications.warning('Reorder failed.');\n            }\n\n            console.log(result.result); //eslint-disable-line no-console\n\n            this.get('stopsReorder').cancelConfirmReorder();\n          }\n        }).catch(function (error) {\n          notifications.warning(`Reorder failed. ${error}`);\n          console.log(error); //eslint-disable-line no-console\n        });\n      } // switch pointer back to default\n\n\n      this.cursorDefault();\n      this.get('stopsReorder').toggleHiddenFlag();\n    },\n\n    validateReorderAfterCommit() {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      const widgetRecords = isScheduleDashboard ? this.get('widgetRecords').sortBy('scheduleOrdinal') : this.get('widgetRecords').sortBy('stopBreakOrd');\n      const dispatchRoute = this.get('stopsReorder.dispatchRoute');\n      const route = this.get('stopsReorder.route');\n      const vehicle = isScheduleDashboard ? route.get('vehicle') : dispatchRoute.get('assignedVehicle');\n      const tripsInDanger = isScheduleDashboard ? this.validateScheduleCapacity(widgetRecords, vehicle) : this.validateCapacity(widgetRecords, vehicle);\n\n      if (tripsInDanger.length > 0) {\n        this.get('notifications').warning(`Reorder failed. Trip ${tripsInDanger[0]} Exceeds route capacity`);\n        return false;\n      }\n\n      return true;\n    },\n\n    onReorderConfirmObserver: Ember.observer('stopsReorder.confirmReorderInProgress', function () {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      if (!this.get('stopsReorder.confirmReorderInProgress')) return;\n\n      if (this.validateReorderAfterCommit()) {\n        if (isScheduleDashboard) {\n          this.doScheduleReorderConfirm();\n        } else {\n          this.doReorderConfirm();\n        }\n      } else {\n        this.get('stopsReorder').cancelConfirmReorder();\n      }\n    }),\n\n    // generic function to append the stop type to an action label\n    appendStopTypeToActionLabel(action, stopPoint) {\n      switch (action.id) {\n        case 'unperform':\n          {\n            this.set('unPerformAction.name', 'Unperform');\n\n            if (stopPoint.get('isNoShow')) {\n              this.set('unPerformAction.name', 'Unperform No Show');\n            }\n\n            break;\n          }\n\n        default:\n      }\n    },\n\n    doScheduleRowReorder(oldIndex, newIndex) {\n      const stopBreakOrdinals = this.get('stopsReorder.stopBreakOrdinals');\n      const widgetRecords = this.get('widgetRecords').sortBy('scheduleOrdinal');\n      const sourceRowId = widgetRecords[oldIndex].id;\n      const sourceRowRecord = widgetRecords[oldIndex].type === 'break' ? this.get('store').peekRecord('route-break', sourceRowId) : this.get('store').peekRecord('trip-stop', sourceRowId);\n      const targetRowId = widgetRecords[newIndex].id;\n      const targetRowRecord = widgetRecords[newIndex].type === 'break' ? this.get('store').peekRecord('route-break', targetRowId) : this.get('store').peekRecord('trip-stop', targetRowId);\n      const previousOrdinalArray = widgetRecords.map(widgetRecord => {\n        return {\n          id: widgetRecord.id,\n          scheduleOrdinal: widgetRecord.scheduleOrdinal,\n          type: widgetRecord.type\n        };\n      });\n      const reorderWidgetRecords = arrayMove(widgetRecords, oldIndex, newIndex); // calculate new ordinals\n\n      reorderWidgetRecords.map((record, index) => {\n        this.get('widgetRecords').findBy('id', record.id).scheduleOrdinal = index;\n        stopBreakOrdinals[record.id] = index;\n      });\n      const result = this.doScheduleReorder(sourceRowRecord, targetRowRecord, previousOrdinalArray); // reverse changes if doScheduleReorder return false validation\n\n      if (Ember.isPresent(result) && !result) {\n        widgetRecords.map((record, index) => {\n          this.get('widgetRecords').findBy('id', record.id).scheduleOrdinal = previousOrdinalArray[index].scheduleOrdinal;\n          stopBreakOrdinals[record.id] = previousOrdinalArray[index].scheduleOrdinal;\n        });\n        this.rollbackCache();\n      }\n    },\n\n    doDispatchRowReorder(oldIndex, newIndex) {\n      const stopBreakOrdinals = this.get('stopsReorder.stopBreakOrdinals');\n      const widgetRecords = this.get('widgetRecords').sortBy('stopBreakOrd');\n      const coreModelName = this.get('config.modelName');\n      const sourceRowId = widgetRecords[oldIndex].id;\n      const sourceRowRecord = this.get('store').peekRecord(coreModelName, sourceRowId);\n      const targetRowId = widgetRecords[newIndex].id;\n      const targetRowRecord = this.get('store').peekRecord(coreModelName, targetRowId);\n      const previousOrdinalArray = widgetRecords.map(widgetRecord => {\n        return {\n          id: widgetRecord.id,\n          stopBreakOrd: widgetRecord.stopBreakOrd,\n          type: widgetRecord.type\n        };\n      });\n      const reorderWidgetRecords = arrayMove(widgetRecords, oldIndex, newIndex); // calculate new ordinals\n\n      reorderWidgetRecords.map((record, index) => {\n        this.get('widgetRecords').findBy('id', record.id).stopBreakOrd = index;\n        stopBreakOrdinals[record.id] = index;\n      });\n      const result = this.doReorder(sourceRowRecord, targetRowRecord, previousOrdinalArray); // reverse changes if doReorder return false validation\n\n      if (Ember.isPresent(result) && !result) {\n        widgetRecords.map((record, index) => {\n          this.get('widgetRecords').findBy('id', record.id).stopBreakOrd = previousOrdinalArray[index].stopBreakOrd;\n          stopBreakOrdinals[record.id] = previousOrdinalArray[index].stopBreakOrd;\n        });\n        this.rollbackCache();\n      }\n    },\n\n    actions: {\n      onColumnClick() {\n        if (this.get('isReordering')) return;\n\n        this._super(...arguments);\n      },\n\n      onSearchButtonClick() {\n        if (this.get('isReordering')) return;\n\n        this._super(...arguments);\n      },\n\n      onFilterButtonClick() {\n        if (this.get('isReordering')) return;\n\n        this._super(...arguments);\n      },\n\n      async onRowRightClick() {\n        if (this.get('isReordering')) return;\n        return this._super(...arguments);\n      },\n\n      rowReorderHandler(oldIndex, newIndex) {\n        const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n\n        if (isScheduleDashboard) {\n          this.doScheduleRowReorder(oldIndex, newIndex);\n        } else {\n          this.doDispatchRowReorder(oldIndex, newIndex);\n        }\n      }\n\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this._initDispatchSingleActions();\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this._initScheduleSingleActions();\n\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this._initDispatchSingleActions();\n\n            break;\n        }\n      }\n    },\n\n    dragStart(event) {\n      const row = (0, _findRowRecord.findRowRecordByElement)(event.target, this.get('dragRowGroup'));\n      if (Ember.isBlank(row)) return;\n      this.set('sourceRowId', row.get('rowId'));\n      const dragId = Ember.guidFor(row);\n      this.get('dragCoordinator').setSourceRow(dragId, row, 'stops');\n      event.dataTransfer.setData('text', dragId);\n    },\n\n    dragOver(event) {\n      event.preventDefault();\n      if (this.get('dragCoordinator.widgetType') !== 'stops') return;\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drag over other widget elements.\n\n      if (Ember.isBlank(rowElement)) {\n        return;\n      }\n\n      this.set('dragTarget', rowElement);\n      this.$(`#${rowElement.id}`).addClass(this.get('dragOverClass'));\n    },\n\n    dragLeave(event) {\n      event.preventDefault();\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drag over other widget elements.\n\n      if (Ember.isBlank(rowElement)) {\n        return;\n      }\n\n      this.$(`#${rowElement.id}`).removeClass(['drag-target-above', 'drag-target-below', 'drag-target']);\n    },\n\n    drop(event) {\n      if (this.get('dragCoordinator.widgetType') !== 'stops') return;\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drop onto other widget elements.\n\n      if (Ember.isBlank(rowElement)) {\n        return;\n      }\n\n      this.$(`#${rowElement.id}`).removeClass(['drag-target-above', 'drag-target-below', 'drag-target']);\n      const table = this.get('table');\n      const rows = this.get('dragRowGroup'); // let sourceRowRecord = rows.findBy('rowId', this.get('sourceRowId'));\n      // // User might drop elements that are not Stops widget rows.\n      // if (isBlank(sourceRowRecord)) {\n      //   return;\n      // }\n\n      const sourceRowRecord = this.get('dragCoordinator').getSourceRow(event.dataTransfer.getData('text'));\n      if (Ember.isBlank(sourceRowRecord)) return;\n      const targetRowRecord = (0, _findRowRecord.findRowRecordByElement)(event.target, rows);\n\n      const _rows = rows.toArray();\n\n      const targetRowIdx = _rows.indexOf(targetRowRecord) + (this.get('dragDirection') < 0 ? 0 : 0);\n      event.dataTransfer.dropEffect = 'move';\n      event.preventDefault();\n      event.stopPropagation();\n      table.notifyPropertyChange('rows');\n\n      _rows.removeObject(sourceRowRecord);\n\n      _rows.insertAt(targetRowIdx, sourceRowRecord);\n\n      const result = this.doReorder(sourceRowRecord, targetRowRecord);\n\n      if (result) {\n        rows.setObjects(_rows);\n      }\n\n      table.notifyPropertyChange('rows');\n    },\n\n    dragEnd() {\n      this.set('sourceRowId', null);\n      this.set('dragTarget', null);\n      this.get('dragCoordinator').clearSourceRows();\n    },\n\n    performScheduleCancelRouteBreak: (0, _emberConcurrency.task)(function* (routeBreakId) {\n      const workspace = this.get('workspace');\n      const currentSchedule = workspace.get('currentSchedule');\n      const operationData = {\n        routeBreakId\n      };\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      return yield new Ember.RSVP.Promise(async (resolve, reject) => {\n        try {\n          const {\n            isJobSuccess\n          } = await this.createScheduleAsyncOperation.perform(currentSchedule, 'cancelRouteBreak', options);\n\n          if (!isJobSuccess) {\n            throw new Error();\n          } else {\n            return resolve();\n          }\n        } catch (e) {\n          return reject();\n        }\n      });\n    }).drop(),\n\n    _initDispatchSingleActions() {\n      this.set('tableActions', [{\n        id: 'print',\n        permIds: [_mappedPermIds.default.downloadStops],\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      }]);\n      this.set('noShowAction', {\n        id: 'noShow',\n        permId: _mappedPermIds.default.noShowTrip,\n        name: 'No Show',\n        action: model => {\n          const store = this.get('store');\n          const noShowReasonCodes = this.get('store').peekAll('no-show-reason-category');\n          const overrideNoShowReason = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideNoShowReason); // sort all no show reason code by the promise time start/end\n\n          const sortedNoShowReasonCode = noShowReasonCodes.toArray().sort(function (a, b) {\n            const aMinStartTime = Ember.isPresent(a.get('minutesFromPromiseTimeStart')) ? parseInt(a.get('minutesFromPromiseTimeStart'), 10) : 999;\n            const aMinEndTime = Ember.isPresent(a.get('minutesFromPromiseTimeEnd')) ? parseInt(a.get('minutesFromPromiseTimeEnd'), 10) : 999;\n            const bMinStartTime = Ember.isPresent(b.get('minutesFromPromiseTimeStart')) ? parseInt(b.get('minutesFromPromiseTimeStart'), 10) : 999;\n            const bMinEndTime = Ember.isPresent(b.get('minutesFromPromiseTimeEnd')) ? parseInt(b.get('minutesFromPromiseTimeEnd'), 10) : 999;\n\n            if (aMinStartTime > bMinStartTime && aMinEndTime > bMinEndTime) {\n              return 1;\n            } else if (aMinStartTime < bMinStartTime && aMinEndTime < bMinEndTime) {\n              return -1;\n            }\n\n            return 0;\n          }); // calculate the duration for current time and stop's ETA\n\n          const actualArriveTime = model.get('actualArriveTime') ? (0, _moment.default)(model.get('actualArriveTime')) : (0, _moment.default)();\n          const promisedTime = (0, _moment.default)(model.get('promisedTime'));\n\n          const minDurations = _moment.default.duration(actualArriveTime.diff(promisedTime)).asMinutes();\n\n          let calculatedNoShowReason = sortedNoShowReasonCode.find(code => {\n            const aMinStartTime = Ember.isPresent(code.get('minutesFromPromiseTimeStart')) ? parseInt(code.get('minutesFromPromiseTimeStart'), 10) : 999;\n            const aMinEndTime = Ember.isPresent(code.get('minutesFromPromiseTimeEnd')) ? parseInt(code.get('minutesFromPromiseTimeEnd'), 10) : 999;\n\n            if (minDurations >= aMinStartTime && minDurations <= aMinEndTime) {\n              return true;\n            }\n\n            return false;\n          });\n\n          if (!Ember.isPresent(calculatedNoShowReason)) {\n            // if it's really early then pick one with the biggest range\n            if (minDurations > 0) {\n              calculatedNoShowReason = sortedNoShowReasonCode.lastObject;\n            } else {\n              calculatedNoShowReason = sortedNoShowReasonCode.firstObject;\n            }\n          }\n\n          model.set('noShow', store.createRecord('no-show', {\n            noShowReasonCode: calculatedNoShowReason,\n            timestamp: new Date()\n          }));\n\n          if (!Ember.isPresent(calculatedNoShowReason) || overrideNoShowReason) {\n            model.set('noShowDropDownReadonly', false);\n          } else {\n            model.set('noShowDropDownReadonly', true);\n          }\n\n          const noShowComponent = this.get('noShowComponent');\n          this.get('editModal').open(noShowComponent, [model], this.get('saveNoShowRecordFunction').bind(this), null, null, {\n            title: 'No Show Stop'\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('removeAction', {\n        id: 'remove',\n        name: 'Remove',\n        action: () => {},\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editAction', {\n        id: 'edit',\n        name: 'Edit',\n        action: () => {},\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('cancelAction', {\n        id: 'cancelTrip',\n        permIds: [_mappedPermIds.default.cancelFuture, _mappedPermIds.default.cancelSameDay],\n        name: 'Cancel Trip',\n        action: model => {\n          const selectedWidgetRecord = this.get('selectedWidgetRecord');\n          const selectedRowTripId = selectedWidgetRecord ? parseInt(selectedWidgetRecord.tripId, 10) : '';\n          const selectedRowTrip = selectedRowTripId ? this.get('store').peekRecord('trip', selectedRowTripId) : '';\n          const trip = (0, _unwrapProxy.unwrapProxy)(model.get('trip')) ? (0, _unwrapProxy.unwrapProxy)(model.get('trip')) : selectedRowTrip;\n          const tripId = _environment.default.APP.avlmLite ? trip.get('externalId') : trip.get('tripId');\n          const booking = (0, _unwrapProxy.unwrapProxy)(trip.get('booking'));\n          const segment = (0, _unwrapProxy.unwrapProxy)(trip.get('segment'));\n          booking.set('timestamp', new Date());\n          this.get('workspace').pushState('cancelTripForm', {\n            displayName: 'Cancel Trip',\n            trip,\n            booking,\n            segment,\n            tripId\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('addDriverBreakAction', {\n        id: 'addDriverBreak',\n        permId: _mappedPermIds.default.addBreak,\n        name: 'Add Driver Break',\n        action: model => {\n          const store = this.get('store');\n          const route = (0, _unwrapProxy.unwrapProxy)(model.get('dispatchRoute.route'));\n\n          if (!Ember.isEmpty(route) || !Ember.isNone(route)) {\n            let plannedStartTime = (0, _moment.default)(route.get('computedPlannedStartTime'));\n            const currentTime = (0, _moment.default)();\n\n            if (currentTime.isAfter(plannedStartTime)) {\n              plannedStartTime = currentTime;\n            }\n\n            const dispatchRouteVersion = route.get('dispatchRoute.version');\n            const lastStop = route.get('dispatchRoute.orderedStopsWithBreaks').lastObject;\n            const trips = (0, _unwrapProxy.unwrapProxy)(model.get('trip'));\n            const driverBreak = store.createRecord('route-break', {\n              estimatedStart: plannedStartTime.toDate(),\n              requestTime: plannedStartTime.toDate(),\n              route: route,\n              schedule: route.get('schedule'),\n              notes: '',\n              plannedRouteOrdinal: Ember.isPresent(lastStop) ? lastStop.get('routeOrdinal') + 1 : 1,\n              plannedDuration: 15,\n              state: 'planned',\n              status: 'scheduled',\n              promisedStart: plannedStartTime.toDate(),\n              dispatchRouteVersion: dispatchRouteVersion\n            });\n\n            if (Ember.isNone(driverBreak.get('place.id'))) {\n              const locationModel = store.createRecord('location');\n              const addressModel = store.createRecord('address', {\n                locations: [locationModel]\n              });\n              const placeModel = store.createRecord('place', {\n                address: addressModel,\n                location: locationModel\n              });\n              driverBreak.set('place', placeModel);\n            }\n\n            if (Ember.isNone(driverBreak.get('stopPoint.id'))) {\n              const stopPoint = store.createRecord('stop-point');\n              driverBreak.set('stopPoint', stopPoint);\n            }\n\n            const saveDriverBreakFunction = this.get('saveDriverBreakFunction').bind(this);\n            this.get('workspace').pushState('addBreak', {\n              driverBreak,\n              trips,\n              saveDriverBreakFunction\n            });\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('delDriverBreakAction', {\n        id: 'deleteDriverBreak',\n        permId: _mappedPermIds.default.deleteBreak,\n        name: 'Remove Driver Break',\n        action: async model => {\n          const dispatchRouteAdapter = this.get('store').adapterFor('dispatch-route');\n          const routeBreak = model.get('routeBreak');\n          const routeBreakId = routeBreak.get('id');\n          const dispatchRouteId = routeBreak.get('route.dispatchRoute.id');\n          const tooltip = this.get('tooltip');\n          const tip = 'Are you sure you want to Remove Driver Break';\n          const title = 'Remove Driver Break';\n          const dispatchRouteVersion = routeBreak.get('route.dispatchRoute.version');\n          const dispatchRoute = routeBreak.get('route.dispatchRoute');\n          const lockRouteAction = this.get('lockRouteAction').bind(this);\n          const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n          this.set('dispatchRouteToCheck', dispatchRoute);\n\n          try {\n            // Check dispatchRoute version first\n            await this.get('versionCheckOperation').perform();\n            await lockRouteAction();\n            tooltip.pushConfirmation({\n              tip,\n              title,\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              secondaryActionText: 'Cancel',\n              primaryAction: async () => {\n                try {\n                  await dispatchRouteAdapter.removeDriverBreak(dispatchRouteId, routeBreakId, dispatchRouteVersion);\n                  this.get('notifications').success(`Successfully removed driver break B${routeBreakId} from route ${routeBreak.get('route.name')}`);\n                } catch (error) {\n                  let msg = `Failed to remove driver break B${routeBreakId}`;\n\n                  if (error.message) {\n                    if (error.message.includes('modified by another request')) msg = `UNABLE TO REMOVE BREAK B${routeBreakId}, BECAUSE ITS ROUTE ${routeBreak.get('route.name')} HAS BEEN MODIFIED BY ANOTHER REQUEST.`;else if (error.message.includes('Unable to lock entities')) msg = 'Obtain route lock failed at this time, please retry operation.';\n                  }\n\n                  this.get('notifications').warning(msg);\n                } finally {\n                  await unlockRouteAction(0);\n                  tooltip.reset();\n                }\n              },\n              secondaryAction: async () => {\n                await unlockRouteAction(0);\n                tooltip.reset();\n                return;\n              },\n              closeAction: async () => {\n                await unlockRouteAction(0);\n              }\n            });\n          } catch (e) {\n            await unlockRouteAction();\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editDriverBreakAction', {\n        id: 'editDriverBreak',\n        permId: _mappedPermIds.default.editBreak,\n        name: 'Edit',\n        action: model => {\n          const store = this.get('store');\n          const driverBreak = (0, _unwrapProxy.unwrapProxy)(model.get('routeBreak'));\n          const estimatedStart = (0, _moment.default)(Ember.get(driverBreak, 'estimatedStart'));\n          const estimatedEnd = (0, _moment.default)(Ember.get(driverBreak, 'estimatedEnd'));\n          const dispatchRouteVersion = driverBreak.get('route.dispatchRoute.version');\n          const stopPointETA = Ember.isPresent(driverBreak.get('stopPoint.eta')) ? driverBreak.get('stopPoint.eta') : driverBreak.get('requestTime');\n          driverBreak.set('plannedDuration', estimatedEnd.diff(estimatedStart, 'minutes')); // keep the original planned Break times\n\n          driverBreak.set('originalPlannedBreakStartTime', estimatedStart);\n          driverBreak.set('originalPlannedBreakEndTime', estimatedEnd);\n          driverBreak.set('originalPlannedDuration', driverBreak.get('plannedDuration'));\n          driverBreak.set('dispatchRouteVersion', dispatchRouteVersion);\n          driverBreak.set('requestTime', stopPointETA); // for edit break, use the ETA instead of original requestTime. This is for validation when modifying the duration\n\n          if (Ember.isNone(driverBreak.get('place.id'))) {\n            const locationModel = store.createRecord('location');\n            const addressModel = store.createRecord('address', {\n              locations: [locationModel]\n            });\n            const placeModel = store.createRecord('place', {\n              address: addressModel,\n              location: locationModel\n            });\n            driverBreak.set('place', placeModel);\n          } else {\n            driverBreak.set('place.address.freeformAddress', driverBreak.get('place.address.fullAddress'));\n          }\n\n          this.get('records').pushObject(driverBreak);\n          const editComponent = this.get('driverBreakEditComponent');\n          this.get('editModal').open(editComponent, [driverBreak], this.get('saveDriverBreakFunction').bind(this));\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('reorderStopsAction', {\n        id: 'reorderStops',\n        permId: _mappedPermIds.default.reorderStops,\n        name: 'Reorder Stops',\n        action: model => {\n          const widgetRecords = this.get('widgetRecords');\n          const widget = this.get('widget');\n          const sortByStr = 'stopBreakOrd'; // route ordinal\n\n          const dispatchRoute = model.get('dispatchRoute');\n          const stopBreakOrdinals = {}; // keep the original stopBreakOrd before going to re-ordering mode\n\n          for (let i = 0; i < widgetRecords.length; i++) {\n            stopBreakOrdinals[widgetRecords[i].id] = widgetRecords[i].stopBreakOrd;\n          }\n\n          this.get('stopsReorder').startReorder(widget, sortByStr, dispatchRoute, null, stopBreakOrdinals);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('navigateToAction', {\n        id: 'navigateTo',\n        permId: _mappedPermIds.default.navigateStop,\n        name: 'Navigate To',\n        action: model => {\n          const tooltip = this.get('tooltip');\n          const fullAddress = _environment.default.APP.avlmLite ? model.get('place.fullAddress') : model.get('place.address.fullAddress');\n          const selectedWidgetRecord = this.get('selectedWidgetRecord');\n          const recordAddress = `${selectedWidgetRecord.address || ''}, ${selectedWidgetRecord.city || ''}`.trim();\n          const displayAddress = recordAddress || fullAddress;\n          tooltip.pushConfirmation({\n            title: 'Navigate To',\n            tip: 'Navigate To ' + displayAddress,\n            primaryActionText: 'Yes',\n            secondaryActionText: 'No',\n            secondaryAction: () => {\n              tooltip.reset();\n            },\n            primaryAction: () => {\n              tooltip.reset();\n              this.set('loading', true);\n              this.roadSupervisor.enter().finally(() => this.set('loading', false));\n              this.get('roadSupervisor').navigateToStop(model);\n            }\n          });\n        },\n        disableOnLockedRoute: true\n      });\n      this.set('bulkPerformAction', {\n        id: 'bulkPerform',\n        permIds: [_mappedPermIds.default.markStopArrived, _mappedPermIds.default.markStopDeparted],\n        name: 'Bulk Perform',\n        action: model => {\n          const dispatchRoute = model.get('dispatchRoute');\n          const unperformedIQStops = dispatchRoute.findUnperformedStopsInSequence(model);\n          const changesetIQStops = unperformedIQStops.map(stop => new _emberChangeset.default(stop));\n          const changesetModel = new _emberChangeset.default(model);\n          const driverBreak = (0, _unwrapProxy.unwrapProxy)(model.get('routeBreak'));\n          const store = this.get('store');\n          const type = model.get('stopType');\n\n          if (type === 'break') {\n            if (Ember.isNone(driverBreak.get('place.id'))) {\n              const locationModel = store.createRecord('location');\n              const addressModel = store.createRecord('address', {\n                locations: [locationModel]\n              });\n              const placeModel = store.createRecord('place', {\n                address: addressModel,\n                location: locationModel\n              });\n              driverBreak.set('startPlace', placeModel);\n            } else if (driverBreak.get('startPlace')) {\n              driverBreak.set('startPlace.address.freeformAddress', driverBreak.get('place.address.fullAddress'));\n            }\n\n            const locationModel = store.createRecord('location');\n            const addressModel = store.createRecord('address', {\n              locations: [locationModel]\n            });\n            const endPlaceModel = store.createRecord('place', {\n              address: addressModel,\n              location: locationModel\n            });\n            driverBreak.set('endPlace', endPlaceModel);\n          }\n\n          if (unperformedIQStops.length > 1) {\n            this.get('workspace').pushState('performAllStop', {\n              stopPoints: changesetIQStops,\n              dispatchRoute: dispatchRoute,\n              lastStopPoint: model,\n              dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n            }, {\n              replaceSelf: true\n            });\n            return;\n          }\n\n          switch (model.get('stopType')) {\n            case 'pick':\n              {\n                this.get('workspace').pushState('performPickStop', {\n                  stopPoint: changesetModel,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'drop':\n              {\n                this.get('workspace').pushState('performDropStop', {\n                  stopPoint: changesetModel,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'pulloutGarage':\n              {\n                const route = model.get('dispatchRoute.route');\n                const routesStartComponent = this.get('routesStartComponent');\n                route.set('odometer', '');\n                route.set('timestamp', new Date());\n                this.get('editModal').open(routesStartComponent, [route], this.get('saveRouteStartRecordFunction').bind(this));\n                break;\n              }\n\n            case 'pullinGarage':\n              {\n                const route = model.get('dispatchRoute.route');\n                const routesEndComponent = this.get('routesEndComponent');\n                route.set('odometerInMiles', '');\n                route.set('odometer', '');\n                route.set('timestamp', new Date());\n                this.get('editModal').open(routesEndComponent, [route], null, null, this.get('confirmSaveRouteEndFunction').bind(this));\n                break;\n              }\n\n            case 'break':\n              {\n                this.get('workspace').pushState('performDriverBreak', {\n                  stopPoint: changesetModel,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            default:\n              break;\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('performAction', {\n        id: 'perform',\n        permIds: [_mappedPermIds.default.markStopArrived, _mappedPermIds.default.markStopDeparted],\n        name: 'Perform',\n        action: model => {\n          const dispatchRoute = model.get('dispatchRoute');\n          const changesetModel = new _emberChangeset.default(model);\n          const driverBreak = (0, _unwrapProxy.unwrapProxy)(model.get('routeBreak'));\n          const store = this.get('store');\n          const type = model.get('stopType');\n\n          if (type === 'break') {\n            if (Ember.isNone(driverBreak.get('place.id'))) {\n              const locationModel = store.createRecord('location');\n              const addressModel = store.createRecord('address', {\n                locations: [locationModel]\n              });\n              const placeModel = store.createRecord('place', {\n                address: addressModel,\n                location: locationModel\n              });\n              driverBreak.set('startPlace', placeModel);\n            } else if (driverBreak.get('startPlace')) {\n              driverBreak.set('startPlace.address.freeformAddress', driverBreak.get('place.address.fullAddress'));\n            }\n\n            const locationModel = store.createRecord('location');\n            const addressModel = store.createRecord('address', {\n              locations: [locationModel]\n            });\n            const endPlaceModel = store.createRecord('place', {\n              address: addressModel,\n              location: locationModel\n            });\n            driverBreak.set('endPlace', endPlaceModel);\n          }\n\n          switch (model.get('stopType')) {\n            case 'pick':\n              {\n                this.get('workspace').pushState('performPickStop', {\n                  stopPoint: changesetModel,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'drop':\n              {\n                this.get('workspace').pushState('performDropStop', {\n                  stopPoint: changesetModel,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'pulloutGarage':\n              {\n                const route = model.get('dispatchRoute.route');\n                const routesStartComponent = this.get('routesStartComponent');\n                route.set('odometer', '');\n                route.set('timestamp', new Date());\n                this.get('editModal').open(routesStartComponent, [route], this.get('saveRouteStartRecordFunction').bind(this));\n                break;\n              }\n\n            case 'pullinGarage':\n              {\n                const route = model.get('dispatchRoute.route');\n                const routesEndComponent = this.get('routesEndComponent');\n                route.set('odometerInMiles', '');\n                route.set('odometer', '');\n                route.set('timestamp', new Date());\n                this.get('editModal').open(routesEndComponent, [route], null, null, this.get('confirmSaveRouteEndFunction').bind(this));\n                break;\n              }\n\n            case 'break':\n              {\n                this.get('workspace').pushState('performDriverBreak', {\n                  stopPoint: changesetModel,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            default:\n              break;\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('unPerformAction', {\n        id: 'unperform',\n        permId: _mappedPermIds.default.unperformStop,\n        name: 'Unperform',\n        action: model => {\n          const workspace = this.get('workspace');\n          const dispatchRoute = model.get('dispatchRoute');\n          let stopType = model.get('stopType');\n          let title = `Unperform ${Ember.String.capitalize(stopType)} Stop`;\n\n          if (model.get('isNoShow')) {\n            const trip = (0, _unwrapProxy.unwrapProxy)(model.get('trip'));\n            stopType = trip.get('pickStopPoint.stopType'); // eslint-disable-next-line no-param-reassign\n\n            model = (0, _unwrapProxy.unwrapProxy)(trip.get('pickStopPoint'));\n            title = 'Unperform No Show';\n            workspace.pushState('unPerformNoShow', {\n              stopPoint: model,\n              title,\n              dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n            }, {\n              replaceSelf: true\n            });\n            return;\n          }\n\n          if (stopType === 'break') {\n            title = 'Unperform Break';\n          }\n\n          switch (stopType) {\n            case 'pick':\n              {\n                workspace.pushState('unPerformPickStop', {\n                  stopPoint: model,\n                  title,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'drop':\n              {\n                workspace.pushState('unPerformDropStop', {\n                  stopPoint: model,\n                  title,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'break':\n              {\n                workspace.pushState('unPerformBreak', {\n                  stopPoint: model,\n                  title,\n                  dispatchRouteVersionSnapshot: dispatchRoute.get('version')\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            default:\n              break;\n          }\n        },\n        disableOnLockedRoute: true\n      });\n      this.set('undoEndRoute', {\n        id: 'undoEndRoute',\n        permId: _mappedPermIds.default.undoRouteEnd,\n        name: 'Undo Route End',\n        action: model => {\n          const route = model.get('route');\n          route.set('odometerInMiles', '');\n          route.set('timestamp', new Date());\n          this.confirmSaveUndoRouteEndFunction(route);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('bulkActions', [{\n        id: 'bulkEdit',\n        permId: _mappedPermIds.default.editStop,\n        name: 'Bulk Edit',\n        action: models => {\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, models);\n        },\n        disableOnLockedRoute: true\n      }]);\n    },\n\n    _initScheduleSingleActions() {\n      this.set('cancelAction', {\n        id: 'cancelTrip',\n        permIds: [_mappedPermIds.default.cancelFuture, _mappedPermIds.default.cancelSameDay],\n        name: 'Cancel Trip',\n        action: model => {\n          const trip = (0, _unwrapProxy.unwrapProxy)(model.get('trip'));\n          const tripId = _environment.default.APP.avlmLite ? trip.get('externalId') : trip.get('tripId');\n          const booking = (0, _unwrapProxy.unwrapProxy)(trip.get('booking'));\n          const segment = (0, _unwrapProxy.unwrapProxy)(trip.get('segment'));\n          booking.set('timestamp', new Date());\n          this.get('workspace').pushState('cancelTripForm', {\n            displayName: 'Cancel Trip',\n            trip,\n            booking,\n            segment,\n            tripId\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('schedulingAddDriverBreakAction', {\n        id: 'addDriverBreak',\n        permId: _mappedPermIds.default.addBreak,\n        name: 'Add Driver Break',\n        action: model => {\n          // stopPoint.type of garage pullout and pullin does not have trip stop model, just stopPoint model\n          // and has a relationship with stopRoute.\n          const route = (0, _unwrapProxy.unwrapProxy)(model.get('route') ? model.get('route') : model.get('stopRoute'));\n          this.get('workspace').pushState('schedulingAddBreak', {\n            route,\n            displayName: 'Add Driver Break',\n            isEditMode: false\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editDriverBreakAction', {\n        id: 'editDriverBreak',\n        permId: _mappedPermIds.default.editBreak,\n        name: 'Edit',\n        action: model => {\n          const route = model;\n          this.get('workspace').pushState('schedulingAddBreak', {\n            route,\n            displayName: 'Edit Driver Break',\n            isEditMode: true\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('reorderStopsAction', {\n        id: 'reorderStops',\n        permId: _mappedPermIds.default.reorderStops,\n        name: 'Reorder Stops',\n        action: model => {\n          const widgetRecords = this.get('widgetRecords');\n          const widget = this.get('widget');\n          const sortByStr = 'scheduleOrdinal'; // route ordinal\n\n          const route = model.get('route');\n          const stopBreakOrdinals = {}; // keep the original stopBreakOrd before going to re-ordering mode\n\n          for (let i = 0; i < widgetRecords.length; i++) {\n            stopBreakOrdinals[widgetRecords[i].id] = widgetRecords[i].scheduleOrdinal;\n          }\n\n          this.get('stopsReorder').startReorder(widget, sortByStr, null, route, stopBreakOrdinals);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('delDriverBreakAction', {\n        id: 'deleteDriverBreak',\n        permId: _mappedPermIds.default.deleteBreak,\n        name: 'Remove Driver Break',\n        action: model => {\n          const routeBreakId = model.get('id');\n          const routeName = model.get('routeName');\n          const tooltip = this.get('tooltip');\n          const tip = 'Are you sure you want to Remove Driver Break';\n          const title = 'Remove Driver Break';\n          const notifications = this.get('notifications');\n          tooltip.pushConfirmation({\n            tip,\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            secondaryActionText: 'Cancel',\n            primaryAction: async () => {\n              return this.performScheduleCancelRouteBreak.perform(routeBreakId).then(() => {\n                notifications.success(`Successfully removed driver break from route ${routeName}`);\n              }).catch(() => {\n                notifications.warning(`Failed to remove driver break from route ${routeName}`);\n              }).finally(() => {\n                tooltip.reset();\n                this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['model']);\n              });\n            },\n\n            secondaryAction() {\n              tooltip.reset();\n              return;\n            }\n\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n    },\n\n    _dynamicAVLMActions() {\n      const noshowAction = this.get('noShowAction');\n      const breakEditAction = this.get('editDriverBreakAction');\n      const breakAddAction = this.get('addDriverBreakAction');\n      const breakDelAction = this.get('delDriverBreakAction');\n      const reorderAction = this.get('reorderStopsAction');\n      const navigateToAction = this.get('navigateToAction');\n      const performAction = this.get('performAction');\n      const unperformAction = this.get('unPerformAction');\n      const row = this.getSelectedCoreModel();\n      const record = row;\n      const stopType = row ? row.get('stopType') : null;\n      if (!row) return [];\n\n      if (this.get('isReordering')) {\n        return [];\n      }\n\n      this.appendStopTypeToActionLabel(unperformAction, record); // there's an off chance the avlm-route-exec event won't update the route status to started / in-progress to keep no-show available\n\n      let routeStarted = [_dispatchRoute.ROUTE_IN_PROGRESS_STATUS, _dispatchRoute.ROUTE_STARTED_STATUS, _dispatchRoute.ROUTE_AWAITING_STATUS].includes(row.get('dispatchRoute.computedStatus'));\n      let route = record.get('dispatchRoute') || record.get('avlmCluster.route');\n      let routeChecked = false;\n      let isPerformedTripStops = false;\n\n      if (route) {\n        const model = route;\n        routeChecked = this.get('activeContext.topActiveContext').isRecordChecked(model);\n      }\n\n      const multiRecordsChecked = this.get('activeContext.topActiveContext').isMultiRecordsChecked(route);\n      const isTimelineSpanMultipleDays = this.get('workspace.isTimelineSpanMultipleDays');\n      let reorderEligible = false;\n\n      if (routeChecked && !multiRecordsChecked && !isTimelineSpanMultipleDays) {\n        reorderEligible = true;\n      }\n\n      const isRoleSupervisor = this.user.isRoadSupEnable(false); //Update isPerformedTripStops flag and Check whether any stop is performed after current stop.\n\n      if (row.get('computedStatus') && !Ember.isEmpty(route) && !Ember.isEmpty(route.get('orderedStopsWithGaragesAndBreaks'))) {\n        const allStops = route.get('orderedStopsWithGaragesAndBreaks');\n        isPerformedTripStops = allStops.some(item => item.get('routeOrdinal') > row.get('routeOrdinal') && item.get('isPerformedOrBeingPerformed'));\n      }\n\n      switch (stopType) {\n        case 'pick':\n          {\n            switch (row.get('status')) {\n              case 'Arrive':\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, noshowAction, performAction, navigateToAction];\n                  }\n\n                  return [breakAddAction, noshowAction, performAction];\n                }\n\n              case 'Depart':\n                {\n                  if (isRoleSupervisor) {\n                    if (isPerformedTripStops) {\n                      return [breakAddAction, navigateToAction];\n                    }\n\n                    return [breakAddAction, navigateToAction, unperformAction];\n                  }\n\n                  if (isPerformedTripStops) {\n                    return [breakAddAction];\n                  }\n\n                  return [breakAddAction, unperformAction];\n                }\n\n              case 'Scheduled':\n                {\n                  if (row.get('actualArrivalTime') === null || Ember.isNone(row.get('actualArrivalTime'))) {\n                    return [breakAddAction];\n                  }\n\n                  return [breakAddAction];\n                }\n\n              case 'Cancelled':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              case 'No Show':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  if (isPerformedTripStops) {\n                    return [breakAddAction];\n                  }\n\n                  return [unperformAction, breakAddAction];\n                }\n\n              case 'Pending':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              default:\n                {\n                  if (routeStarted) {\n                    return [breakAddAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (reorderEligible) {\n                      if (routeStarted) {\n                        return [breakAddAction, performAction];\n                      }\n\n                      return [breakAddAction, reorderAction, performAction];\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return [breakAddAction, performAction];\n                  }\n\n                  return [performAction];\n                }\n            }\n          }\n\n        case 'drop':\n          {\n            switch (row.get('status')) {\n              case 'Arrive':\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, performAction, navigateToAction];\n                  }\n\n                  return [breakAddAction, performAction];\n                }\n\n              case 'Depart':\n                {\n                  if (isRoleSupervisor) {\n                    if (isPerformedTripStops) {\n                      return [breakAddAction, navigateToAction];\n                    }\n\n                    return [breakAddAction, navigateToAction, unperformAction];\n                  }\n\n                  if (isPerformedTripStops) {\n                    return [breakAddAction];\n                  }\n\n                  return [breakAddAction, unperformAction];\n                }\n\n              case 'Cancelled':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              case 'No Show':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  if (isPerformedTripStops) {\n                    return [breakAddAction];\n                  }\n\n                  return [unperformAction, breakAddAction];\n                }\n\n              case 'Pending':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              default:\n                {\n                  if (routeStarted) {\n                    return [breakAddAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (reorderEligible) {\n                      if (routeStarted) {\n                        return [breakAddAction, performAction];\n                      }\n\n                      return [breakAddAction, reorderAction, performAction];\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return [breakAddAction, performAction];\n                  }\n\n                  return [];\n                }\n            }\n          }\n\n        case 'break':\n          {\n            routeStarted = ['In Progress', 'Started'].includes(row.get('dispatchRoute.computedStatus'));\n            route = row.get('dispatchRoute');\n\n            switch (row.get('routeBreak.status')) {\n              case 'OnBreak':\n                return [breakAddAction, performAction];\n\n              case 'OffBreak':\n                return [breakAddAction];\n\n              default:\n                {\n                  if (routeStarted) {\n                    return [breakAddAction, breakDelAction, breakEditAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (routeChecked && !multiRecordsChecked && !routeStarted) {\n                      return [breakAddAction, breakDelAction, breakEditAction, reorderAction, performAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction, performAction];\n                  }\n\n                  return [];\n                }\n            }\n          }\n\n        case 'pulloutGarage':\n          {\n            routeStarted = ['In Progress', 'Started'].includes(row.get('dispatchRoute.computedStatus'));\n\n            if (isRoleSupervisor) {\n              return [breakAddAction, navigateToAction];\n            }\n\n            if (!routeStarted) {\n              return [breakAddAction, performAction];\n            }\n\n            return [breakAddAction];\n          }\n\n        case 'pullinGarage':\n          {\n            routeStarted = ['In Progress', 'Started'].includes(row.get('dispatchRoute.computedStatus'));\n\n            if (isRoleSupervisor) {\n              return [breakAddAction, navigateToAction];\n            }\n\n            if (routeStarted) {\n              return [breakAddAction, performAction];\n            }\n\n            return [breakAddAction];\n          }\n\n        case 'deployStop':\n          {\n            if (isRoleSupervisor) {\n              return [navigateToAction];\n            }\n\n            return [];\n          }\n\n        default:\n          {\n            return [];\n          }\n      }\n    },\n\n    _dynamicDispatchActions() {\n      const noshowAction = this.get('noShowAction');\n      const breakEditAction = this.get('editDriverBreakAction');\n      const breakAddAction = this.get('addDriverBreakAction');\n      const cancelAction = this.get('cancelAction');\n      const breakDelAction = this.get('delDriverBreakAction');\n      const reorderAction = this.get('reorderStopsAction');\n      const navigateToAction = this.get('navigateToAction');\n      const performAction = this.get('performAction');\n      const unperformAction = this.get('unPerformAction');\n      const undoEndRoute = this.get('undoEndRoute');\n      const row = this.getSelectedCoreModel();\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const dispatchRoute = row.get('dispatchRoute');\n      const unperformedIQStops = Ember.isPresent(dispatchRoute) ? dispatchRoute.findUnperformedStopsInSequence(row) : [];\n      const isNextUnperformed = unperformedIQStops.length === 1;\n      if (!row) return [];\n      const record = row;\n      const stopType = record.get('stopType') || selectedWidgetRecord.type;\n\n      if (this.get('isReordering')) {\n        return [];\n      }\n\n      this.appendStopTypeToActionLabel(unperformAction, record);\n      let route = record.get('dispatchRoute') || record.get('avlmCluster.route');\n      let routeStarted = [_dispatchRoute.ROUTE_IN_PROGRESS_STATUS, _dispatchRoute.ROUTE_STARTED_STATUS, _dispatchRoute.ROUTE_AWAITING_STATUS, _dispatchRoute.ROUTE_ON_BREAK_STATUS, _dispatchRoute.ROUTE_SIGNED_OFF_STATUS].includes(row.get('dispatchRoute.computedStatus'));\n      const routeEnded = [_dispatchRoute.ROUTE_ENDED_STATUS].includes(row.get('dispatchRoute.computedStatus')) || row.get('dispatchRoute.pullinGarageStop.isPerformed');\n      let routeChecked = false;\n      let isPerformedTripStops = false;\n      let isPickPerformedTripStops = false;\n\n      if (route) {\n        const model = route;\n        routeChecked = this.get('activeContext.topActiveContext').isRecordChecked(model);\n      }\n\n      const multiRecordsChecked = this.get('activeContext.topActiveContext').isMultiRecordsChecked(route);\n      let reorderEligible = false;\n\n      if (routeChecked && !multiRecordsChecked) {\n        reorderEligible = true;\n      }\n\n      const isRoleSupervisor = this.user.isRoadSupEnable(false); //Update isPerformedTripStops flag and Check whether any stop is performed after current stop.\n\n      if (row.get('computedStatus') && !Ember.isEmpty(route) && !Ember.isEmpty(route.get('orderedStopsWithGaragesAndBreaks'))) {\n        const allStops = route.get('orderedStopsWithGaragesAndBreaks');\n        isPerformedTripStops = allStops.some(item => item.get('routeOrdinal') > row.get('routeOrdinal') && item.get('isPerformedOrBeingPerformed'));\n      }\n\n      if (row.get('computedStatus') && !Ember.isEmpty(route) && !Ember.isEmpty(route.get('orderedStopsWithGaragesAndBreaks'))) {\n        const allStops = route.get('orderedStopsWithGaragesAndBreaks');\n        isPickPerformedTripStops = allStops.some(item => item.get('isPerformedOrBeingPerformed') && !item.get('isSoftPerformed') && row.get('trip.id') === item.get('trip.id'));\n      }\n\n      switch (stopType) {\n        case 'pick':\n          {\n            switch (selectedWidgetRecord.status) {\n              case _stopPoint.ARRIVE_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, noshowAction, performAction, navigateToAction];\n                  }\n\n                  const currentTime = new Date();\n                  const noShowTimeThreshold = this.get('store').peekRecord('cs-config-item', 'config-Driving_Configuration/noShowTimeThreshold');\n                  const promisedTime = row.get('promisedTime');\n                  const actualArriveTime = row.get('actualArriveTime');\n                  const noShowAvailableTime = promisedTime && actualArriveTime ? _moment.default.max((0, _moment.default)(promisedTime), (0, _moment.default)(actualArriveTime)) : (0, _moment.default)(currentTime);\n\n                  if (noShowTimeThreshold) {\n                    row.set('noShowTimeThreshold', noShowTimeThreshold);\n                    noShowAvailableTime.add(parseInt(noShowTimeThreshold.value, 10), noShowTimeThreshold.unit);\n                  }\n\n                  if ((0, _moment.default)(currentTime).isBefore(noShowAvailableTime)) {\n                    return [breakAddAction, performAction];\n                  }\n\n                  return [breakAddAction, noshowAction, performAction];\n                }\n\n              case _stopPoint.PERFORMED_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    if (isPerformedTripStops) {\n                      return [breakAddAction, navigateToAction];\n                    }\n\n                    return [breakAddAction, navigateToAction, unperformAction];\n                  }\n\n                  if (routeEnded) {\n                    return this.addPerformOptionForSoftPerformedStops([], row);\n                  }\n\n                  if (isPerformedTripStops) {\n                    return this.addPerformOptionForSoftPerformedStops([breakAddAction], row);\n                  }\n\n                  return this.addPerformOptionForSoftPerformedStops([breakAddAction, unperformAction], row);\n                }\n\n              case _stopPoint.SCHEDULED_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  if (row.get('actualArrivalTime') === null || Ember.isNone(row.get('actualArrivalTime'))) {\n                    return this.addOptionsByRowConditions([breakAddAction], row);\n                  }\n\n                  return this.addOptionsByRowConditions([breakAddAction], row);\n                }\n\n              case _stopPoint.CANCELLED_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              case _stopPoint.NOSHOW_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  if (routeEnded) {\n                    return this.addOptionsByRowConditions([], row);\n                  }\n\n                  if (isPerformedTripStops) {\n                    return this.addOptionsByRowConditions([breakAddAction], row);\n                  }\n\n                  return this.addOptionsByRowConditions([unperformAction, breakAddAction], row);\n                }\n\n              case _stopPoint.PENDING_STOP_STATUS:\n                {\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      return this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return this.addOptionsByRowConditions([], row);\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (reorderEligible) {\n                      return routeStarted ? this.addOptionsByRowConditions([breakAddAction], row) : this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return [breakAddAction, cancelAction];\n                  }\n\n                  if (isRoleSupervisor) {\n                    return this.addOptionsByRowConditions([navigateToAction], row);\n                  }\n\n                  return [cancelAction];\n                }\n\n              default:\n                {\n                  // const nextUnperformedStop = row.get('dispatchRoute.firstUnperformedStop');\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      return this.addOptionsByRowConditions([breakAddAction, performAction, reorderAction], row);\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return this.addOptionsByRowConditions([], row);\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (reorderEligible) {\n                      return this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return [breakAddAction, cancelAction];\n                  }\n\n                  if (isRoleSupervisor) {\n                    return this.addOptionsByRowConditions([navigateToAction], row);\n                  }\n\n                  return this.addOptionsByRowConditions([], row);\n                }\n            }\n          }\n\n        case 'drop':\n          {\n            switch (selectedWidgetRecord.status) {\n              case _stopPoint.ARRIVE_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return this.addOptionsByRowConditions([breakAddAction, navigateToAction], row);\n                  }\n\n                  return this.addOptionsByRowConditions([breakAddAction], row);\n                }\n\n              case _stopPoint.PERFORMED_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    if (isPerformedTripStops) {\n                      return [breakAddAction, navigateToAction];\n                    }\n\n                    return [breakAddAction, navigateToAction, unperformAction];\n                  }\n\n                  if (routeEnded) {\n                    return this.addPerformOptionForSoftPerformedStops([], row);\n                  }\n\n                  if (isPerformedTripStops) {\n                    return this.addPerformOptionForSoftPerformedStops([breakAddAction], row);\n                  }\n\n                  return this.addPerformOptionForSoftPerformedStops([breakAddAction, unperformAction], row);\n                }\n\n              case _stopPoint.CANCELLED_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              case _stopPoint.NOSHOW_STOP_STATUS:\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  if (routeEnded) {\n                    //NYAAR-18659: In stop widget, On performing pick-stop, the cancel trip option should not be displayed for the drop stop\n                    if (isPickPerformedTripStops) {\n                      return [];\n                    }\n\n                    return this.addOptionsByRowConditions([], row);\n                  }\n\n                  if (isPickPerformedTripStops) {\n                    return [breakAddAction];\n                  }\n\n                  return this.addOptionsByRowConditions([breakAddAction], row);\n                }\n\n              case _stopPoint.PENDING_STOP_STATUS:\n                {\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      return this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return this.addOptionsByRowConditions([], row);\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    if (reorderEligible) {\n                      return this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    return this.addOptionsByRowConditions([breakAddAction, cancelAction], row);\n                  }\n\n                  return [cancelAction];\n                }\n\n              default:\n                {\n                  if (routeStarted) {\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    if (reorderEligible) {\n                      return this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    return this.addOptionsByRowConditions([breakAddAction], row);\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    if (reorderEligible) {\n                      return routeStarted ? this.addOptionsByRowConditions([breakAddAction], row) : this.addOptionsByRowConditions([breakAddAction, reorderAction], row);\n                    }\n\n                    return this.addOptionsByRowConditions([breakAddAction, cancelAction], row);\n                  }\n\n                  return this.addOptionsByRowConditions([], row);\n                }\n            }\n          }\n\n        case 'break':\n          {\n            routeStarted = row.get('dispatchRoute.hasStarted');\n            route = row.get('dispatchRoute');\n\n            switch (row.get('status')) {\n              case _stopPoint.ON_BREAK_STOP_STATUS:\n                if (isPerformedTripStops) {\n                  if (isNextUnperformed) {\n                    return [breakAddAction, performAction];\n                  }\n\n                  return [breakAddAction];\n                }\n\n                if (isNextUnperformed) {\n                  return [breakAddAction, performAction, unperformAction];\n                }\n\n                return [breakAddAction, performAction, unperformAction];\n\n              case _stopPoint.OFF_BREAK_STOP_STATUS:\n                if (routeEnded) {\n                  return this.addOptionsByRowConditions([], row);\n                }\n\n                if (route.get('orderedStopsWithBreaks')[row.get('routeOrdinal')] && route.get('orderedStopsWithBreaks')[row.get('routeOrdinal')].isNoShow) {\n                  return this.addOptionsByRowConditions([breakAddAction], row);\n                }\n\n                if (isPerformedTripStops) {\n                  return this.addOptionsByRowConditions([breakAddAction], row);\n                }\n\n                return this.addOptionsByRowConditions([breakAddAction, unperformAction], row);\n\n              case _stopPoint.PENDING_STOP_STATUS:\n                {\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      return [breakAddAction, breakDelAction, breakEditAction, performAction, reorderAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (routeChecked && !multiRecordsChecked && !routeStarted && reorderEligible) {\n                      return [breakAddAction, breakDelAction, breakEditAction, reorderAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction];\n                  }\n\n                  return [];\n                }\n\n              default:\n                {\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      return [breakAddAction, breakDelAction, breakEditAction, performAction, reorderAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (routeChecked && !multiRecordsChecked && !routeStarted) {\n                      return [breakAddAction, breakDelAction, breakEditAction, reorderAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction];\n                  }\n\n                  return [];\n                }\n            }\n          }\n\n        case 'pulloutGarage':\n          {\n            routeStarted = row.get('dispatchRoute.hasStarted');\n\n            if (isRoleSupervisor) {\n              return [breakAddAction, navigateToAction];\n            }\n\n            if (row.get('dispatchRoute.assignedDriver.content') && row.get('dispatchRoute.assignedVehicle.content') && !row.get('dispatchRoute.assignedVehicle.content.placeholder') && !routeStarted) {\n              return [breakAddAction, performAction];\n            }\n\n            if (routeEnded) {\n              return [];\n            }\n\n            return [breakAddAction];\n          }\n\n        case 'pullinGarage':\n          {\n            routeStarted = row.get('dispatchRoute.hasStarted');\n            const allStopsPerformed = row.get('dispatchRoute').allStopsPerformed();\n\n            if (isRoleSupervisor) {\n              return [breakAddAction, navigateToAction];\n            }\n\n            if (routeStarted) {\n              if (routeEnded || row.get('computedStatus') === _stopPoint.PULLED_IN_STOP_STATUS) {\n                return [undoEndRoute];\n              }\n\n              if (allStopsPerformed) {\n                return [breakAddAction, performAction];\n              }\n\n              return [breakAddAction];\n            }\n\n            return [breakAddAction];\n          }\n\n        default:\n          {\n            if (isRoleSupervisor) {\n              return [navigateToAction];\n            }\n\n            return [];\n          }\n      }\n    },\n\n    _dynamicScheduleActions() {\n      const row = this.getSelectedCoreModel();\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      if (!row) return [];\n      const record = row;\n      const stopType = record.get('stopType') || selectedWidgetRecord.type;\n      const isBusOrWalkTravelMode = row.get('trip.segment.isBusOrWalkTravelMode'); //NYAAR-19327:No right click context menu options for bus/or walk stops\n\n      if (isBusOrWalkTravelMode) return [];\n\n      switch (stopType) {\n        case 'pick':\n        case 'drop':\n          {\n            const trip = (0, _unwrapProxy.unwrapProxy)(record.get('trip'));\n            const route = (0, _unwrapProxy.unwrapProxy)(trip.get('route'));\n            const tripStatus = trip ? `${trip.get('computedStatus')}`.toLowerCase() : selectedWidgetRecord.status.toLowerCase();\n            return this.getScheduleTripActions(tripStatus, stopType, trip, route);\n          }\n\n        case 'pullinGarage':\n        case 'pulloutGarage':\n        case 'break':\n          {\n            const route = (0, _unwrapProxy.unwrapProxy)(record.get('route'));\n            const tripStatus = selectedWidgetRecord.status.toLowerCase();\n            return this.getScheduleTripActions(tripStatus, stopType, null, route);\n          }\n\n        default:\n          return [];\n      }\n    },\n\n    getScheduleTripActions: function (tripStatus, stopType, trip, route) {\n      const cancelTripAction = this.get('cancelAction');\n      const editDriverBreakAction = this.get('editDriverBreakAction');\n      const delDriverBreakAction = this.get('delDriverBreakAction');\n      const schedulingAddDriverBreakAction = this.get('schedulingAddDriverBreakAction');\n      const reorderAction = this.get('reorderStopsAction');\n      const widgetModelName = this.get('config.widgetName');\n      const isMultiRecordsChecked = this.get('widgetService').isMultiRecordsSelected(widgetModelName);\n      const isTaxiTravelMode = !trip ? false : trip.get('segment.isTaxiTravelMode');\n      let routeChecked = false;\n\n      if (route) {\n        routeChecked = this.get('activeContext.topActiveContext').isRecordChecked(route);\n      }\n\n      const multiRecordsChecked = this.get('activeContext.topActiveContext').isMultiRecordsChecked(route);\n      let reorderEligible = false;\n\n      if (routeChecked && !multiRecordsChecked) {\n        reorderEligible = true;\n      }\n\n      switch (tripStatus) {\n        //trip status is completed,canceled and no show restrict cancel-trip and add-driver-break actions\n        case 'completed':\n        case 'canceled':\n        case 'no show':\n          return [];\n        //trip status is illegal show cancel-trip action\n\n        case 'waitlisted':\n        case 'illegal':\n        case 'callback':\n          {\n            return [cancelTripAction];\n          }\n\n        default:\n          if (isMultiRecordsChecked) {\n            return [];\n          } else if (stopType === 'break') {\n            if (reorderEligible) {\n              return [schedulingAddDriverBreakAction, editDriverBreakAction, delDriverBreakAction, reorderAction];\n            }\n\n            return [schedulingAddDriverBreakAction, editDriverBreakAction, delDriverBreakAction];\n          } else if (stopType === 'pullinGarage' || stopType === 'pulloutGarage') {\n            return [schedulingAddDriverBreakAction];\n          } else if (isTaxiTravelMode) {\n            return [cancelTripAction];\n          }\n\n          if (reorderEligible) {\n            return [cancelTripAction, schedulingAddDriverBreakAction, reorderAction];\n          }\n\n          return [cancelTripAction, schedulingAddDriverBreakAction];\n      }\n    },\n\n    calculateTimeQuery() {\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const startTime = startDate.getTime();\n      const endTime = endDate.getTime();\n      const dateRangeFilterQuery = (0, _rqlGenerators.dateBetweenRQLUsingFormat)('promiseTime', [startTime, endTime], 'YYYY-MM-DDTHH:mm:ss.SSS');\n      return dateRangeFilterQuery;\n    },\n\n    async getUserName(currRowData) {\n      const lock = currRowData.lock;\n      const store = this.get('store');\n      let ssoUser = store.peekRecord('sso-user', lock.user);\n\n      if (Ember.isNone(ssoUser)) {\n        ssoUser = await store.find('sso-user', lock.user).catch(error => {\n          const errorCode = Ember.isPresent(error.errors.get('firstObject').status) ? error.errors.get('firstObject').status : null; // This is a temporary hack because continuous otimization user key does not exist in sso\n          // must remove after a permanent solution is found in locking in continuous optimization\n\n          if (errorCode === '404') {\n            currRowData.lock.fullName = 'Continuous Optimization';\n\n            if (!store.hasRecordForId('sso-user', lock.user)) {\n              return store.createRecord('sso-user', {\n                id: lock.user,\n                userId: lock.user,\n                fullName: 'Continuous Optimization'\n              });\n            }\n          }\n\n          return null;\n        });\n      }\n\n      if (!Ember.isNone(ssoUser)) {\n        currRowData.lock.fullName = ssoUser.fullName;\n      }\n    },\n\n    applyRouteLockInfoTransformation(widgetRecord) {\n      if (widgetRecord.isLocked) {\n        this.getUserName(widgetRecord);\n      }\n    },\n\n    // server dependency table overwrites\n    applyTransformationData(widgetRecords) {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          this.applyOtpStatusTransformation(widgetRecord);\n          this.applyStopTypeTransformation(widgetRecord);\n          this.applyOdometerTransformation(widgetRecord);\n          this.applyStopSegmentPhoneNumbersTransformation(widgetRecord);\n          this.applyRouteLockInfoTransformation(widgetRecord);\n\n          if (_environment.default.APP.avlmLite) {\n            this.applySlackTimeTransformation(widgetRecord);\n            this.applyStopIdTransformation(widgetRecord);\n          } else if (isScheduleDashboard) {\n            this.applySchedulingSlackTimeTransformation(widgetRecord);\n            this.applyScheduleStopIdTransformation(widgetRecord);\n            this.applyCoreModelTransformation(widgetRecord);\n            this.applyTripCancelTransformation(widgetRecord);\n            this.applyEtaTransformation(widgetRecord);\n          } else {\n            this.applyStopPointPkTransformation(widgetRecord);\n          }\n\n          this.applyStopBreakOrd(widgetRecord);\n          widgetRecord._transformed = true;\n        }\n      });\n      return widgetRecords;\n    },\n\n    applyStopSegmentPhoneNumbersTransformation(widgetRecord) {\n      const segmentStopPhoneNumbers = widgetRecord.segmentStopPhoneNumbers;\n      const phoneNumbers = [];\n\n      if (Ember.isPresent(segmentStopPhoneNumbers)) {\n        segmentStopPhoneNumbers.forEach(function (item) {\n          phoneNumbers.push((0, _formatTextExtension.formatTextExtension)('valueItem', `${(0, _formatFunction.formatPhoneNumber)(item.areaCode, item.phoneNumber, item.extension)}`));\n        });\n        widgetRecord.formattedSegmentStopPhoneNumbers = {\n          values: phoneNumbers\n        };\n        widgetRecord.segmentStopPhoneNumbers = segmentStopPhoneNumbers.map(phoneNumber => `${(0, _formatFunction.formatPhoneNumber)(phoneNumber.areaCode, phoneNumber.phoneNumber, phoneNumber.extension)}`);\n      }\n    },\n\n    applyCoreModelTransformation(widgetRecord) {\n      const coreModelName = this.get('config.modelName');\n\n      if (this.get('getCoreModelNameByWidgetRecord')) {\n        widgetRecord.coreModel = this.get('getCoreModelNameByWidgetRecord')(coreModelName, widgetRecord);\n      }\n    },\n\n    rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currRowData) {\n      let rowStyleHandler = '';\n\n      if (currRowData.isLocked) {\n        rowStyleHandler += ' is-locked';\n      }\n\n      if (columnIndex === 0) {\n        if (currRowData.otpStatus === 'Late') {\n          rowStyleHandler += ' otp-late-first-column';\n        }\n\n        if (currRowData.otpStatus === 'On Time') {\n          rowStyleHandler += ' otp-on-time-first-column';\n        }\n\n        if (currRowData.otpStatus === 'In Danger') {\n          rowStyleHandler += ' otp-in-danger-first-column';\n        }\n      }\n\n      return rowStyleHandler;\n    },\n\n    canFurtherSelectionAllowed() {\n      const gridConfig = this.get('config');\n      const maxLimitByRouteSelection = gridConfig.maxLimitByRouteSelection;\n      const maxLimitWithoutRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n      const selectedStopRecords = this.get('widgetService').getSelectedWidgetRecordsByModel('stopWidget');\n      const selectedRouteSet = new Set();\n      selectedStopRecords.forEach(data => {\n        if (data.routeId) {\n          selectedRouteSet.add(data.routeId);\n        }\n      });\n\n      if (selectedRouteSet.size >= maxLimitByRouteSelection || selectedStopRecords.length >= maxLimitWithoutRouteAssociation) {\n        return false;\n      }\n\n      return true;\n    },\n\n    applySchedulingSlackTimeTransformation(widgetRecord) {\n      if (!widgetRecord.plannedSlackTime || typeof widgetRecord.plannedSlackTime !== 'number') {\n        // set default to 0\n        widgetRecord.plannedSlackTime = 0;\n      }\n    },\n\n    applySlackTimeTransformation(widgetRecord) {\n      if (widgetRecord.slack && typeof widgetRecord.slack === 'number') {\n        // truncate instead of round so we can filter properly because of min to sec conversion (applySlackFilterConversion).\n        widgetRecord.slack = Math.trunc(widgetRecord.slack / 60);\n      } else {\n        // set default to 0\n        widgetRecord.slack = 0;\n      }\n    },\n\n    // use stopBreakOrd for stopBreakOrd column instead of the original ordinal from\n    // iqux-service when not in re-ordering mode.\n    // Use stopBreakOrdinals from stopsReorder service. This is to prevent updates of ordinal\n    // coming from iqux-service while in re-ordering mode\n    applyStopBreakOrd(widgetRecord) {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard'); // If the record were updated by redis, ordinal could be a string which will affect sorting.\n\n      widgetRecord.ordinal = isNaN(widgetRecord.ordinal) ? widgetRecord.ordinal : Number(widgetRecord.ordinal);\n      widgetRecord.scheduleOrdinal = isNaN(widgetRecord.scheduleOrdinal) ? widgetRecord.scheduleOrdinal : Number(widgetRecord.scheduleOrdinal);\n\n      if (!this.get('isReordering')) {\n        widgetRecord.stopBreakOrd = isScheduleDashboard ? widgetRecord.scheduleOrdinal : widgetRecord.ordinal;\n      } else {\n        const stopBreakOrdinals = this.get('stopsReorder.stopBreakOrdinals');\n\n        if (Ember.isPresent(stopBreakOrdinals)) {\n          widgetRecord.stopBreakOrd = stopBreakOrdinals[widgetRecord.id];\n        }\n      }\n    },\n\n    applyOdometerTransformation(widgetRecord) {\n      if (widgetRecord.odometerOnArrival) {\n        widgetRecord.odometerOnArrival = Math.round(widgetRecord.odometerOnArrival * 0.000621371192);\n      }\n\n      if (widgetRecord.odometerOnArrival === 0) {\n        widgetRecord.odometerOnArrival = null;\n      }\n    },\n\n    applyStopIdTransformation(widgetRecord) {\n      if (!widgetRecord.id) return;\n\n      if (widgetRecord.id.startsWith('SP')) {\n        widgetRecord.id = widgetRecord.id.replace('SP', 'P');\n      }\n\n      if (widgetRecord.id.startsWith('SD')) {\n        widgetRecord.id = widgetRecord.id.replace('SD', 'D');\n      } // TODO: remove workaround for break point id not matched.\n\n\n      if (widgetRecord.type === 'break' && !widgetRecord.id.startsWith('B')) {\n        widgetRecord.id = 'B' + widgetRecord.id;\n      }\n    },\n\n    applyStopPointPkTransformation(widgetRecord) {\n      widgetRecord.stopPointId = widgetRecord.id;\n\n      if (widgetRecord.stopPointPk) {\n        widgetRecord.id = widgetRecord.stopPointPk;\n      }\n    },\n\n    applyScheduleStopIdTransformation(widgetRecord) {\n      if (widgetRecord.type === 'break' || widgetRecord.type === 'pick' || widgetRecord.type === 'drop') {\n        widgetRecord.stopPk = widgetRecord.id;\n        widgetRecord.id = widgetRecord.id.substr(1);\n      }\n    },\n\n    applyStopTypeTransformation(widgetRecord) {\n      try {\n        if (!widgetRecord.type && widgetRecord.id) {\n          if (widgetRecord.id.includes('GP')) {\n            widgetRecord.type = 'pulloutGarage';\n          } else if (widgetRecord.id.includes('GD')) {\n            widgetRecord.type = 'pullinGarage';\n          } else if (widgetRecord.id.includes('B')) {\n            widgetRecord.type = 'break';\n          }\n        }\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.log(e);\n      }\n    },\n\n    /**\n     * Regarding NYAAR-16231\n     * @param widgetRecord\n     */\n    applyTripCancelTransformation(widgetRecord) {\n      if (!widgetRecord.hasOwnProperty('tripCanceled')) {\n        widgetRecord.tripCanceled = 'null';\n      }\n    },\n\n    /**\n     * Stop record with status 'R' should not be displayed\n     * @param header\n     * @param body\n     * @returns {string|*}\n     */\n    determineWidgetRecordAction(widgetRecords, header, data) {\n      if (data.status === 'R') {\n        return 'DELETE';\n      }\n\n      return this._super(...arguments);\n    },\n\n    // This no longer need to implement, we have cluster entity updates now.\n    removeDeletedItems() {},\n\n    changeTripStatusToLowerCase(status) {\n      return status.toLowerCase();\n    },\n\n    addCancelOptionForPickAndDrop(defaultOptions, row) {\n      const cancelAction = this.get('cancelAction');\n      const rowTripStatus = row.get('trip.status');\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const tripId = selectedWidgetRecord.tripId;\n      const trip = this.get('store').peekRecord('trip', parseInt(tripId, 10));\n      const tripStatus = rowTripStatus ? rowTripStatus : trip.get('status');\n      const tripStatusOptions = [_trip.TRIP_SCHEDULED_STATUS, _trip.TRIP_WAITLIST_STATUS, _trip.TRIP_DISPATCH_STATUS, _trip.TRIP_ENROUTE_STATUS, _trip.TRIP_ILLEGAL_STATUS, _trip.TRIP_UNSCHEDULED_STATUS];\n      const filteredTripStatusOptions = tripStatusOptions.map(status => {\n        return this.changeTripStatusToLowerCase(status);\n      });\n\n      if (filteredTripStatusOptions.includes(tripStatus)) {\n        defaultOptions.push(cancelAction);\n        return defaultOptions;\n      }\n\n      return defaultOptions;\n    },\n\n    addBulkPerformOption(defaultOptions, row) {\n      const bulkPerformAction = this.get('bulkPerformAction');\n      const dispatchRoute = row.get('dispatchRoute');\n      const unperformedIQStops = Ember.isPresent(dispatchRoute) ? dispatchRoute.findUnperformedStopsInSequence(row) : [];\n      const isNextUnperformed = unperformedIQStops.length === 1;\n\n      if (!isNextUnperformed) {\n        defaultOptions.push(bulkPerformAction);\n      }\n\n      return defaultOptions;\n    },\n\n    addPerformOptionForSoftPerformedStops(defaultOptions, row) {\n      const performAction = this.get('performAction');\n      const dispatchRoute = row.get('dispatchRoute');\n      const firstUnperformedStop = Ember.isPresent(dispatchRoute) ? dispatchRoute.getFirstUnPeformedStop() : null;\n      const isRealPerformable = row.get('isRealPerformable');\n\n      if (defaultOptions.includes(performAction)) {\n        return defaultOptions;\n      }\n\n      if (isRealPerformable && (!firstUnperformedStop || firstUnperformedStop && !firstUnperformedStop.get('isArrived'))) {\n        defaultOptions.push(performAction);\n      }\n\n      return defaultOptions;\n    },\n\n    addPerformOptionForStops(defaultOptions, row) {\n      const performAction = this.get('performAction');\n      const dispatchRoute = row.get('dispatchRoute');\n      const firstUnperformedStop = Ember.isPresent(dispatchRoute) ? dispatchRoute.getFirstUnPeformedStop() : null;\n      const isPerformable = row.get('isPerformable');\n\n      if (defaultOptions.includes(performAction)) {\n        return defaultOptions;\n      } // 1. if firstUnperformedStop is current row the add perform\n      // 2. if firstUnperfromedStop is not current row but it has not arrvied yet.\n\n\n      if (isPerformable && (!firstUnperformedStop || firstUnperformedStop && (firstUnperformedStop.get('id') === row.get('id') || !firstUnperformedStop.get('isArrived')))) {\n        defaultOptions.push(performAction);\n      }\n\n      return defaultOptions;\n    },\n\n    addOptionsByRowConditions(defaultOptions, row) {\n      const optionsFn = [this.addPerformOptionForStops.bind(this), this.addBulkPerformOption.bind(this), this.addCancelOptionForPickAndDrop.bind(this)];\n      return optionsFn.reduce((options, fn) => {\n        return fn(options, row);\n      }, defaultOptions);\n    },\n\n    /**\n     * find break index position by text Eg: 1 - first , 2- second\n     * @param sourceRowRecord\n     * @param previousOrdinalArray\n     * @returns {string}\n     */\n    getBreakIndexPositionByText(sourceRowRecord, previousOrdinalArray) {\n      const sortedBreakRecords = previousOrdinalArray.filter(rec => rec.type === _routeBreak.BREAK_TYPE).sortBy('stopBreakOrd');\n      const sourceBreakRecord = sortedBreakRecords.find(rec => rec.id === sourceRowRecord.get('id'));\n      let sourceBreakIndex = sortedBreakRecords.indexOf(sourceBreakRecord);\n      let numberInWords = '';\n\n      if (sourceBreakIndex !== -1) {\n        ++sourceBreakIndex;\n        numberInWords = (0, _stringifyNumber.stringifyNumber)(sourceBreakIndex);\n      }\n\n      return numberInWords;\n    },\n\n    //NYAAR-20192-A break stop ETA is equal to the break's planned start time\n    applyEtaTransformation(widgetRecord) {\n      if (widgetRecord.type === _routeBreak.BREAK_TYPE) {\n        widgetRecord.scheduleEta = widgetRecord.plannedBreakStartTime;\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/stops-widget',\n    rowComponent: 'iq-widgets/stops-widget/stops-row',\n    modelName: 'stop-point',\n    defaultSortId: 'tripId',\n    defaultSortAsc: false,\n    title: 'Stops',\n    // ember-react-widget properties\n    widgetName: 'stopWidget',\n    selectedRowLimit: 100,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    restrictSwapColumns: false,\n    columns: [{\n      id: 'id',\n      index: 18,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      alternateValuePath: 'stopPointPk',\n      valuePreview: '1',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'type',\n      index: 0,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      mapValuePath: 'stopType',\n      valuePreview: 'Pick',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 50\n    }, {\n      id: 'tripId',\n      index: 1,\n      type: 'uuid',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      mapValuePath: 'trip.tripId',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderLastName',\n      index: 2,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      mapValuePath: 'trip.segment.leg.rider.lastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderFirstName',\n      index: 3,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      mapValuePath: 'trip.segment.leg.rider.firstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderPhone',\n      index: 16,\n      type: 'enum',\n      label: 'Passenger Phone Number',\n      valuePath: 'legPhoneNumber',\n      mapValuePath: 'trip.segment.leg.rider.formattedPhoneNumbers',\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'riderId',\n      index: 17,\n      type: 'uuid',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      mapValuePath: 'trip.segment.leg.rider.riderId',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'status',\n      index: 7,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      mapValuePath: 'computedStatus',\n      valuePreview: 'Planned',\n      editable: false,\n      defaultWidth: 60,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'OTPstatus',\n      index: 4,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      mapValuePath: 'trip.otpLabel',\n      defaultWidth: 40,\n      highlightable: true,\n      searchable: true,\n      cellItem: 'OTPValueCellItem'\n    }, {\n      id: 'ETA',\n      index: 5,\n      type: 'time',\n      label: 'ETA',\n      valuePath: 'eta',\n      alternateValuePath: 'eta',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 40,\n      highlightable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'promisedTime',\n      index: 13,\n      type: 'time',\n      label: 'Promise Time',\n      valuePath: 'pickPromiseTime',\n      mapValuePath: 'computedPromiseTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'requestedTime',\n      index: 6,\n      type: 'time',\n      label: 'Appointment Time',\n      valuePath: 'appointmentTime',\n      mapValuePath: 'computedApptTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 70,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualArrivalTime',\n      index: 8,\n      type: 'time',\n      label: 'Actual Arrive Timestamp',\n      valuePath: 'actualArriveTimestamp',\n      classPath: 'perform',\n      classValueMap: {\n        'Perform': 'perform',\n        'Soft Perform': 'soft-perform'\n      },\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 150,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualDepartTime',\n      index: 9,\n      type: 'time',\n      label: 'Actual Depart Timestamp',\n      valuePath: 'actualDepartTimestamp',\n      classPath: 'perform',\n      classValueMap: {\n        'Perform': 'perform',\n        'Soft Perform': 'soft-perform'\n      },\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 150,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedDepartTime',\n      index: 14,\n      type: 'time',\n      label: 'Planned Depart Time',\n      valuePath: 'plannedDepartTime',\n      mapValuePath: 'departTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 130,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'routeName',\n      index: 10,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      mapValuePath: 'routeName',\n      valuePreview: '40',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'notes',\n      index: 33,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      editable: true,\n      searchable: true,\n      defaultWidth: 100,\n      hidden: true\n    }, {\n      id: 'address',\n      index: 11,\n      type: 'text',\n      label: 'Address ',\n      valuePath: 'address',\n      mapValuePath: 'place.address.readableAddress',\n      searchable: true,\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'date',\n      index: 12,\n      type: 'date',\n      label: 'Date',\n      valuePath: 'promiseTime',\n      mapValuePath: 'stopDate',\n      alternateValuePath: 'promiseTime',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 70,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'city',\n      index: 21,\n      type: 'text',\n      label: 'City',\n      valuePath: 'city',\n      mapValuePath: 'place.address.locality',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'county',\n      index: 22,\n      type: 'text',\n      label: 'County',\n      valuePath: 'county',\n      mapValuePath: 'place.address.subRegion',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'zone',\n      index: 23,\n      type: 'text',\n      label: 'Zone',\n      valuePath: 'addressZoneConf.nameToDisplay',\n      mapValuePath: 'place.address.zoneName.name',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'odometer',\n      index: 26,\n      type: 'number',\n      label: 'Odometer on Arrival',\n      valuePath: 'odometerOnArrival',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'serviceWindow',\n      index: 15,\n      type: 'text',\n      label: 'Service Window',\n      valuePath: 'serviceWindowConf.displayName',\n      mapValuePath: 'serviceWindow.name',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'BreakStartTime',\n      index: 19,\n      type: 'time',\n      label: 'Planned Break Start Time',\n      valuePath: 'plannedBreakStartTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'BreakEndTime',\n      index: 20,\n      type: 'time',\n      label: 'Planned Break End Time',\n      valuePath: 'plannedBreakEndTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'BreakType',\n      index: 24,\n      type: 'text',\n      label: 'Break Type',\n      valuePath: 'breakType',\n      //missing\n      mapValuePath: 'routeBreak.breakType.name',\n      valuePreview: 'Floating',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'onboardCount',\n      index: 25,\n      type: 'number',\n      label: 'Onboard Passengers',\n      valuePath: 'onboardPassengers',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'stopBreakOrd',\n      type: 'number',\n      label: 'Stop Break Ord',\n      valuePath: 'stopBreakOrd',\n      mapValuePath: 'routeOrdinal',\n      customSortPath: 'ordinal',\n      alternateValuePath: 'ordinal',\n      searchable: false,\n      editable: false,\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'otp',\n      index: 27,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otpWithSign',\n      customSortPath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'arriveLat',\n      index: 28,\n      type: 'string',\n      label: 'Actual Arrive Lat',\n      valuePath: 'actualArriveLat',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'arriveLng',\n      index: 29,\n      type: 'string',\n      label: 'Actual Arrive Lng',\n      valuePath: 'actualArriveLng',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLat',\n      index: 30,\n      type: 'string',\n      label: 'Actual Depart Lat',\n      valuePath: 'actualDepartLat',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLng',\n      index: 31,\n      type: 'string',\n      label: 'Actual Depart Lng',\n      valuePath: 'actualDepartLng',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'Slack Time',\n      index: 32,\n      type: 'number',\n      label: 'Slack Minutes',\n      valuePath: 'slack',\n      mapValuePath: 'slackInMinutes',\n      editable: true,\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'segmentStopPhoneNumbers ',\n      type: 'enum',\n      label: 'Phone',\n      valuePath: 'segmentStopPhoneNumbers',\n      mapValuePath: 'formattedSegmentStopPhoneNumbers',\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'perform',\n      type: 'text',\n      label: 'Perform',\n      valuePath: 'perform',\n      mapValuePath: 'perform',\n      defaultWidth: 40,\n      highlightable: true,\n      searchable: true,\n      cellItem: 'PerformCellItem'\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'id'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routeId',\n          valuePath: 'routeId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'stopPointPk',\n          valuePath: 'stopId'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'vehicleId',\n          valuePath: 'id'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'tripId'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      riderWidget: {\n        links: [{\n          type: 'eq',\n          field: 'passengerPk',\n          valuePath: 'id'\n        }]\n      }\n    },\n    excluded: {\n      routeWidget: {\n        conflicts: [{\n          widget: 'tripWidget',\n          srcField: 'routeId',\n          targetField: 'routeId'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'stringNeRQL',\n        field: 'type',\n        value: ['deletedBreak']\n      }, {\n        type: 'neRQL',\n        field: 'scheduleType',\n        value: ['booking']\n      }, {\n        type: 'stringEq',\n        field: 'scheduleStatus',\n        value: ['exported']\n      }, {\n        type: 'eqRQL',\n        field: 'tripCanceled',\n        value: [null]\n      }, {\n        type: 'neRQL',\n        field: 'stopPointPk',\n        value: [null]\n      }]\n    },\n    // stopPointId stop tripStipId like 'Sxxxx' and routeBreakId like 'Bxxxx'\n    transform: {\n      id: 'stopPointId'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-widget/scheduleConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/stops-widget',\n    rowComponent: 'iq-widgets/stops-widget/stops-row',\n    modelName: ['route-break', 'trip-stop', 'stop-point'],\n    defaultSortId: 'scheduleOrdinal',\n    defaultSortAsc: true,\n    title: 'Stops',\n    // ember-react-widget properties\n    widgetName: 'stopWidget',\n    selectedRowLimit: 100,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    restrictSwapColumns: false,\n    columns: [{\n      id: 'id',\n      index: 18,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      valuePreview: '1',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'type',\n      index: 0,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      mapValuePath: 'stopType',\n      valuePreview: 'Pick',\n      searchable: true,\n      isMapLabelVisible: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'tripId',\n      index: 1,\n      type: 'uuid',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      mapValuePath: 'trip.tripId',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderLastName',\n      index: 2,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      mapValuePath: 'trip.segment.leg.rider.lastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderFirstName',\n      index: 3,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      mapValuePath: 'trip.segment.leg.rider.firstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderPhone',\n      index: 16,\n      type: 'enum',\n      label: 'Passenger Phone Number',\n      valuePath: 'legPhoneNumber',\n      mapValuePath: 'trip.segment.leg.rider.formattedPhoneNumbers',\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'riderId',\n      index: 17,\n      type: 'uuid',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      mapValuePath: 'trip.segment.leg.rider.riderId',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'status',\n      index: 7,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'scheduleStopStatus',\n      mapValuePath: 'scheduleStopStatus',\n      valuePreview: 'Planned',\n      editable: false,\n      defaultWidth: 60,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'OTPstatus',\n      index: 4,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpLabel',\n      defaultWidth: 40,\n      highlightable: true,\n      searchable: true\n    }, {\n      id: 'ETA',\n      index: 5,\n      type: 'time',\n      label: 'ETA',\n      valuePath: 'scheduleEta',\n      mapValuePath: 'scheduleEta',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 40,\n      highlightable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'promisedTime',\n      index: 13,\n      type: 'time',\n      label: 'Promise Time',\n      valuePath: 'pickPromiseTime',\n      mapValuePath: 'computedPromiseTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'requestedTime',\n      index: 6,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      mapValuePath: 'trip.segment.formattedPromiseTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 70,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualArrivalTime',\n      index: 8,\n      type: 'time',\n      label: 'Actual Arrive Timestamp',\n      valuePath: 'actualArriveTimestamp',\n      editable: true,\n      hidden: true,\n      format: 'MM/DD/YYYY HH:mm',\n      defaultWidth: 150,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'actualDepartTime',\n      index: 9,\n      type: 'time',\n      label: 'Actual Depart Timestamp',\n      valuePath: 'actualDepartTimestamp',\n      editable: true,\n      hidden: true,\n      format: 'MM/DD/YYYY HH:mm',\n      defaultWidth: 150,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'plannedDepartTime',\n      index: 14,\n      type: 'time',\n      label: 'Planned Depart Time',\n      valuePath: 'plannedDepartTime',\n      mapValuePath: 'plannedEta',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 130,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'routeName',\n      index: 10,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      valuePreview: '40',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'notes',\n      index: 26,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      mapValuePath: 'notes',\n      editable: true,\n      searchable: true,\n      defaultWidth: 100,\n      hidden: true\n    }, {\n      id: 'address',\n      index: 11,\n      type: 'text',\n      label: 'Address ',\n      valuePath: 'address',\n      mapValuePath: 'address',\n      searchable: true,\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'date',\n      index: 12,\n      type: 'date',\n      label: 'Date',\n      valuePath: 'promiseTime',\n      mapValuePath: 'trip.route.plannedStartTime',\n      alternateValuePath: 'promiseTime',\n      format: 'MM/DD/YYYY',\n      defaultWidth: 70,\n      hidden: true,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'city',\n      index: 21,\n      type: 'text',\n      label: 'City',\n      valuePath: 'city',\n      mapValuePath: 'city',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'county',\n      index: 22,\n      type: 'text',\n      label: 'County',\n      valuePath: 'county',\n      mapValuePath: 'place.address.subRegion',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'zone',\n      index: 23,\n      type: 'text',\n      label: 'Zone',\n      valuePath: 'addressZoneConf.nameToDisplay',\n      mapValuePath: 'place.address.zoneName.name',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'odometer',\n      index: 27,\n      type: 'number',\n      label: 'Odometer on Arrival',\n      valuePath: 'computedOdometer',\n      //missing\n      editable: true,\n      hidden: true\n    }, {\n      id: 'serviceWindow',\n      index: 15,\n      type: 'text',\n      label: 'Service Window',\n      valuePath: 'serviceWindowConf.displayName',\n      mapValuePath: 'trip.segment.leg.serviceWindow.name',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'BreakStartTime',\n      index: 19,\n      type: 'time',\n      label: 'Planned Break Start Time',\n      valuePath: 'plannedBreakStartTime',\n      mapValuePath: 'plannedBreakStartTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'BreakEndTime',\n      index: 20,\n      type: 'time',\n      label: 'Planned Break End Time',\n      valuePath: 'plannedBreakEndTime',\n      mapValuePath: 'plannedBreakEndTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'BreakType',\n      index: 24,\n      type: 'text',\n      label: 'Break Type',\n      valuePath: 'breakType',\n      mapValuePath: 'routeBreak.breakType.name',\n      valuePreview: 'Floating',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'onboardCount',\n      index: 25,\n      type: 'number',\n      label: 'Onboard Passengers',\n      valuePath: 'scheduleOnboardPassengers',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'scheduleOrdinal',\n      type: 'number',\n      label: 'Stop Break Ord',\n      valuePath: 'scheduleOrdinal',\n      mapValuePath: 'scheduleOrdinal',\n      searchable: false,\n      editable: false,\n      defaultWidth: 50\n    }, {\n      id: 'otp',\n      index: 28,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otpValueWithSign',\n      //missing\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'arriveLat',\n      index: 29,\n      type: 'string',\n      label: 'Actual Arrive Lat',\n      valuePath: 'computedArriveLat',\n      //missing\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'arriveLng',\n      index: 30,\n      type: 'string',\n      label: 'Actual Arrive Lng',\n      valuePath: 'computedArriveLng',\n      //missing\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLat',\n      index: 31,\n      type: 'string',\n      label: 'Actual Depart Lat',\n      valuePath: 'computedDepartLat',\n      //missing\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLng',\n      index: 32,\n      type: 'string',\n      label: 'Actual Depart Lng',\n      valuePath: 'computedDepartLng',\n      //missing\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'Slack Time',\n      index: 33,\n      type: 'number',\n      label: 'Slack',\n      valuePath: 'plannedSlackTime',\n      mapValuePath: 'plannedSlackTime',\n      editable: true,\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'segmentStopPhoneNumbers ',\n      type: 'enum',\n      label: 'Phone',\n      valuePath: 'segmentStopPhoneNumbers',\n      mapValuePath: 'formattedSegmentStopPhoneNumbers',\n      defaultWidth: 60,\n      hidden: true\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'id'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'eq',\n          field: 'originalRouteId',\n          valuePath: 'routeId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'stopPointId',\n          valuePath: 'stopId'\n        }, {\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'tripPk',\n          valuePath: 'tripId'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      }\n    },\n    excluded: {\n      routeWidget: {\n        conflicts: [{\n          widget: 'tripWidget',\n          srcField: 'routeId',\n          targetField: 'routeId'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'stringNeRQL',\n        field: 'scheduleStopStatus',\n        value: ['R']\n      }, {\n        type: 'neRQL',\n        field: 'scheduleType',\n        value: ['booking']\n      }, {\n        type: 'eqRQL',\n        field: 'tripCanceled',\n        value: [null]\n      }, {\n        type: 'stringNeRQL',\n        field: 'type',\n        value: ['deletedBreak']\n      }]\n    },\n    // stopPk stop tripStipId like 'Sxxxx' and routeBreakId like 'Bxxxx'\n    transform: {\n      id: 'stopPk'\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/stops-widget/stops-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/text-formatted-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    attributeBindings: ['draggable'],\n    draggable: 'true',\n    // TODO: delete or revise when API and/or model is updated.\n    otp: Ember.computed.alias('row.otp')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/booking-map/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/map-widget/component\", \"adept-iq/mixins/ada-boundary-layer\", \"adept-iq/utils/geolib\"], function (_exports, _component, _adaBoundaryLayer, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-unused-vars */\n  const pintPointIcon = {\n    icon: window.L.icon({\n      iconUrl: '/map-icons/icon-pinpoint.svg',\n      iconSize: [48, 48],\n      iconAnchor: [24, 48]\n    }),\n    keyboard: false,\n    interactive: false\n  };\n  const arrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 16,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillColor: 'black',\n          fillOpacity: 1,\n          color: 'black',\n          opacity: 1\n        }\n      })\n    }]\n  };\n  const thickArrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 16,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillOpacity: 0,\n          opacity: 0\n        }\n      })\n    }]\n  };\n  const polyAndDecKeyCoordinates = [{\n    path: '_parts',\n    x1: 'x',\n    y1: 'y'\n  }, {\n    path: '_paths',\n    x1: 'lat',\n    y1: 'lng'\n  }, {\n    path: '_parts',\n    x1: 'x',\n    y1: 'y'\n  }, {\n    path: '_paths',\n    x1: 'lat',\n    y1: 'lng'\n  }];\n\n  var _default = _component.default.extend(Ember.Evented, _adaBoundaryLayer.default, {\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    defaultPickMarker: null,\n    zoom: 12,\n    layerGroup: null,\n    activeBookingSegments: null,\n    allActivePlaces: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        layerGroup: new window.L.LayerGroup()\n      });\n    },\n\n    didInsertElement() {\n      const mapService = this.get('mapService');\n\n      this._super(...arguments);\n\n      this.get('map.native').setView({\n        lat: mapService.get('center.lat'),\n        lng: mapService.get('center.lon')\n      }, 12);\n      this.activeGeocode();\n      this.onChangeActiveAddress();\n      this.onChangeActiveLegsInBooking();\n      const editmodelwidth = Ember.$('.edit-widget-modal').width();\n      Ember.$('.edit-widget-modal').width('25%');\n      Ember.$('.booking-map-container').css({\n        'width': 'calc(97% - ' + editmodelwidth + 'px)'\n      }).css({\n        'height': 'calc(100% - 14%)',\n        'left': editmodelwidth + 'px)'\n      });\n      this.set('booking.bookingMap', this.get('map'));\n    },\n\n    activeGeocode: Ember.observer('booking.activeDragPlace', 'booking.addressSelectType', function () {\n      const activeDragPlace = this.get('booking.activeDragPlace');\n      const map = this.get('map');\n      const addressSelectType = this.get('booking.addressSelectType');\n\n      if (!activeDragPlace) {\n        map.native.off('click');\n        return;\n      }\n\n      const bookingService = this.get('booking');\n      Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').addClass('custom-cursor');\n      map.native.on('click', async event => {\n        try {\n          const bookingAddress = await bookingService.fetchAddressForLatLng(event.latlng);\n          const legType = 'Leg';\n\n          if (!bookingAddress) {\n            this.booking.showErrorMessage('Location must be within the agency service boundary.');\n            this.drawMarkersAndPolylines();\n            return;\n          }\n\n          const beNomadAddress = bookingAddress.address.beNomadAddress;\n          const latlng = event.latlng;\n          const geoNode = await this.booking.getAddressGeoNode(latlng.lat, latlng.lng, beNomadAddress, addressSelectType);\n\n          if (!geoNode || Ember.isEmpty(geoNode.zone.zoneName) || geoNode && geoNode.zone.zoneName <= '0') {\n            this.booking.showErrorMessage('Unable to use address because it falls outside the service area.');\n            return;\n          }\n\n          const activeDragAddress = activeDragPlace.get('address'); //Getting the zone type using the id present in the geoNode and setting it to address\n\n          const zoneName = this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n          activeDragAddress.set('zName', zoneName.get('displayName'));\n          activeDragAddress.set('zoneName', zoneName);\n\n          if (!activeDragAddress.get('zoneName.name')) {\n            this.booking.showErrorMessage('Unable to use address because it falls outside the service area.');\n            return;\n          }\n\n          const locationRecord = this.store.createRecord('location', {\n            lat: parseFloat(latlng.lat.toFixed(5)),\n            lng: parseFloat(latlng.lng.toFixed(5))\n          });\n          locationRecord.set('geoNode', geoNode.geonode);\n          bookingService.updateAddress(activeDragAddress, bookingAddress, geoNode.zone);\n          activeDragPlace.set('location', locationRecord);\n        } catch (error) {\n          // eslint-disable-next-line no-console\n          console.log(error);\n        } finally {\n          Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').removeClass('custom-cursor');\n          bookingService.setActiveDragPlace(null);\n          map.native.off('click');\n        }\n      });\n    }),\n\n    doDrawMarkersAndPolylines() {\n      const booking = this.get('booking');\n      const skipSetView = booking.get('skipSetView');\n      this.drawMarkersAndPolylines(skipSetView);\n      booking.set('skipSetView', false);\n    },\n\n    onChangeActiveLegsInBooking: Ember.observer('booking.activeLegsInBooking', 'booking.activeDragPlace', function () {\n      Ember.run.debounce(this, this.doDrawMarkersAndPolylines, 300);\n    }),\n    onChangeActiveAddress: Ember.observer('booking.activeAddress', function () {\n      this.drawMarkersAndPolylines();\n    }),\n    onMarkerPinRemove: Ember.observer('booking.setMarkerPinOff', function () {\n      Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').removeClass('custom-cursor');\n    }),\n\n    drawMarkersAndPolylines() {\n      let skipSetView = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!Ember.isPresent(this.get('map'))) {\n        return;\n      }\n\n      this.get('layerGroup').clearLayers();\n      const legsInBooking = this.booking.get('activeLegsInBooking') ? this.booking.get('activeLegsInBooking').toArray() : [];\n      const allSegments = [];\n      const latLngs = [];\n      legsInBooking.forEach(leg => {\n        const segments = leg.get('segments').toArray();\n        const validSegments = segments.filter(segment => {\n          return segment.get('pick.place.location.lat') && segment.get('drop.place.location.lat');\n        });\n        allSegments.push(...validSegments);\n        segments.forEach(segment => {\n          const legMarkers = [segment.get('pick.place.location'), segment.get('drop.place.location')];\n          const validMarkers = legMarkers.filter(marker => {\n            return marker.get('lat') && marker.get('lng');\n          });\n          validMarkers.forEach(marker => {\n            latLngs.push([marker.get('lat'), marker.get('lng')]);\n            this.drawMarker(marker, skipSetView);\n          });\n        });\n      });\n      this.drawPloylinePath(allSegments);\n\n      if (!skipSetView) {\n        Ember.run.later(this, () => {\n          this.boundLatLng(latLngs);\n        }, 500);\n      }\n    },\n\n    boundLatLng(latLngs) {\n      const map = this.get('map.native');\n\n      if (map && latLngs.length > 1) {\n        const bound = window.L.latLngBounds(latLngs);\n        map.fitBounds(bound);\n      }\n    },\n\n    drawMarker(latLngObj) {\n      let skipSetView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const map = this.get('map');\n      const marker = window.L.marker([latLngObj.get('lat'), latLngObj.get('lng')], pintPointIcon);\n      this.get('layerGroup').addLayer(marker).addTo(this.get('map.native'));\n\n      if (!skipSetView) {\n        this.get('map.native').setView(marker._latlng, map.getZoom());\n      }\n    },\n\n    drawPolyline(pick, drop) {\n      const tooltipOptions = {\n        opacity: 0.7,\n        direction: 'top',\n        sticky: true\n      }; // Drawing reversly to make arrow head correct\n\n      const from = pick.get('place.location');\n      const to = drop.get('place.location');\n      const toLatLng = {\n        lat: to.get('lat'),\n        lng: to.get('lng')\n      };\n      const fromLatLng = {\n        lat: from.get('lat'),\n        lng: from.get('lng')\n      };\n      const polyline = window.L.polyline([[to.get('lat'), to.get('lng')], [from.get('lat'), from.get('lng')]], {\n        color: 'black',\n        endOffset: '300'\n      });\n      const thickInvisiblePolyline = window.L.polyline([[to.get('lat'), to.get('lng')], [from.get('lat'), from.get('lng')]], {\n        opacity: 0,\n        weight: 25,\n        endOffset: '300'\n      });\n      const polylineDecorator = window.L.polylineDecorator(polyline, arrowHeadLineConfig);\n      const thickPolylineDecorator = window.L.polylineDecorator(thickInvisiblePolyline, thickArrowHeadLineConfig);\n      const distance = (0, _geolib.getDistance)(toLatLng, fromLatLng) * 3.281 / 5280; // convert to miles\n      // create a thicker invisible line so hovering around the polyline will be friendlier. We don't want to remove popup\n      // as we move the mouse a tiny bit.\n\n      thickInvisiblePolyline.bindTooltip(`<span>Distance: <br>${distance.toFixed(3)} mi</span>`, tooltipOptions);\n      this.get('layerGroup').addLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n      const polyAndDecorators = [polyline, polylineDecorator, thickInvisiblePolyline, thickPolylineDecorator]; //set arrow head - NYAAR-14549\n\n      this.get('layerGroup').removeLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n      this.shortenPolylineAndDecorator(polyAndDecorators);\n      this.get('layerGroup').addLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n    },\n\n    shortenPolylineAndDecorator(polyAndDecorators) {\n      let factor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.2;\n      const isParts = !polyAndDecorators[0]._parts || polyAndDecorators[0]._parts.length === 0;\n      const isPaths = !polyAndDecorators[1]._paths || polyAndDecorators[1]._paths.length === 0;\n      const isThickParts = !polyAndDecorators[2]._parts || polyAndDecorators[2]._parts.length === 0;\n      const isThickPaths = !polyAndDecorators[3]._paths || polyAndDecorators[3]._paths.length === 0;\n\n      if (isParts || isPaths || isThickParts || isThickPaths) {\n        return;\n      }\n\n      polyAndDecKeyCoordinates.forEach((pdk, index) => {\n        const firstCoordinate = polyAndDecorators[index][pdk.path][0][0];\n        const secondCoordinate = polyAndDecorators[index][pdk.path][0][1];\n        const x1 = firstCoordinate[pdk.x1];\n        const y1 = firstCoordinate[pdk.y1];\n        const x2 = secondCoordinate[pdk.x1];\n        const y2 = secondCoordinate[pdk.y1];\n        const newStartX = x1 + factor * (x2 - x1);\n        const newStartY = y1 + factor * (y2 - y1);\n        const endFactor = 1 - factor;\n        const newEndX = x1 + endFactor * (x2 - x1);\n        const newEndY = y1 + endFactor * (y2 - y1);\n        polyAndDecorators[index][pdk.path][0][0][pdk.x1] = newStartX;\n        polyAndDecorators[index][pdk.path][0][0][pdk.y1] = newStartY;\n        polyAndDecorators[index][pdk.path][0][1][pdk.x1] = newEndX;\n        polyAndDecorators[index][pdk.path][0][1][pdk.y1] = newEndY;\n      });\n    },\n\n    drawPloylinePath(segments) {\n      if (segments.length === 0) {\n        return;\n      }\n\n      for (let i = 0; i < segments.length; i++) {\n        this.drawPolyline(segments[i].get('pick'), segments[i].get('drop'));\n      }\n    },\n\n    destroy() {\n      this._super(...arguments);\n\n      Ember.$('html,body,.tomtom-map,.ada-boundary-polygon').removeClass('custom-cursor');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/component\", [\"exports\", \"moment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/pods/components/generic-widgets/base-widget/component\", \"adept-iq/mixins/async-booking-operation\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\", \"adept-iq/utils/geolib\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\"], function (_exports, _moment, _mappedPermIds, _component, _asyncBookingOperation, _lodash, _unwrapProxy, _polyline, _geolib, _environment, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // eslint-disable-line\n  const {\n    bemap\n  } = window;\n  const PICK = 'pick';\n  const DROP = 'appt';\n  const PHONE_NUMBER_LENGTH = 10;\n\n  const convertDate = str => {\n    var date = new Date(str);\n    var mnth = ('0' + (date.getMonth() + 1)).slice(-2);\n    var day = ('0' + date.getDate()).slice(-2);\n    return [date.getFullYear(), mnth, day].join('-');\n  };\n\n  const SUSPENSIONDAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'holiday'];\n  /* eslint-disable camelcase */\n\n  const UPDATE_SUBSCRIPTION_DATE_MAP = {\n    Immediate_NEW: 'Schedule',\n    Immediate_DELETE: 'Cancel',\n    Immediate_UPDATE_STATIC: 'Update',\n    Immediate_UPDATE_CRITICAL: 'Cancel & Schedule',\n    Callback_NEW: 'Callback',\n    Callback_DELETE: 'Cancel',\n    Callback_UPDATE_STATIC: 'Update',\n    Callback_UPDATE_CRITICAL: 'Cancel & Callback'\n  };\n  const ORIGIN_NUMBER_DESCRIPTION = 'ORIGIN NUMBER';\n  const DESTINATION_NUMBER_DESCRIPTION = 'DESTINATION NUMBER';\n  /* eslint-enable camelcase */\n\n  var _default = _component.default.extend(_asyncBookingOperation.default, {\n    classNames: ['new-booking-form-side-drawer'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    fareCalc: Ember.inject.service(),\n    subscriptionService: Ember.inject.service('subscription'),\n    subscriptionLogGeneration: Ember.inject.service('subscription-activitylog-generation'),\n    isProgressShown: false,\n    riderToBook: null,\n    serviceNeeds: null,\n    subscription: null,\n    defaultFare: 0,\n    companionFare: 0,\n    isLoadAndUnLoadTimeValid: true,\n    isLoadAndUnLoadTimeNumber: false,\n    travelNeedCollapseState: 'expanded',\n    passengerCollapseState: 'collapsed',\n    serviceNeedCollapseState: 'collapsed',\n    // Checking the leg date eligibility\n    selectedLegDate: null,\n    isEligiblitiyCheck: false,\n    isOpenErrorModal: Ember.computed.alias('booking.isOpenErrorModal'),\n    errorMessage: Ember.computed.alias('booking.errorMessage'),\n    canSave: Ember.computed.alias('booking.canSave'),\n    isEditMode: false,\n    passengerInfo: null,\n    legTravelNeeds: null,\n    subscriptionServiceNeeds: null,\n    effectiveRecurrencePattern: null,\n    legsInBooking: Ember.computed.alias('activeLegsInBooking'),\n    pickupPostalAddress: null,\n    dropoffPostalAddress: null,\n    pickAddressText: null,\n    dropAddressText: null,\n    selectedRiders: null,\n    disablePhoneNumber: null,\n    phoneNumbers: null,\n    previousCompanionCount: null,\n    isComputingDistance: false,\n    distancePt1: null,\n    distancePt2: null,\n    activeADABoundary: false,\n    adaBoundary: null,\n    canShowSubscriptionChanges: false,\n    tripsGeneration: null,\n    subscriptionBookings: null,\n    editSubscriptionShowChanges: false,\n    isInactive: Ember.computed.alias('subscription.isInactive'),\n    selectedCompanionCount: Ember.computed.alias('booking.selectedCompanionCount'),\n    // eslint-disable-next-line ember/use-brace-expansion\n    riderFullNames: Ember.computed('booking.selectedRiders.[]', function () {\n      return this.get('editableRecords')[1].get('fullName');\n    }),\n    noOfActiveRiders: Ember.computed('booking.selectedRiders.[]', function () {\n      return this.get('booking.selectedRiders').length;\n    }),\n    passengerListTitle: Ember.computed('noOfActiveRiders', function () {\n      return 'Passenger List (1)';\n    }),\n    subscriptionPanelTitle: Ember.computed('isEditMode', 'isViewOnlyMode', function () {\n      if (this.get('isViewOnlyMode')) {\n        return 'View Subscription';\n      } else if (this.get('isEditMode')) {\n        return 'Edit Subscription';\n      }\n\n      return 'Create Subscription';\n    }),\n    activeLegsInBooking: Ember.computed('booking.activeBooking.legs.[]', function () {\n      return this.get('booking.activeBooking.legs');\n    }),\n    activeLegsInBookingForMapObserver: Ember.observer('booking.activeBooking.legs.[]', function () {\n      this.booking.setActiveLegsInBooking(this.get('activeLegsInBooking'));\n    }),\n    // eslint-disable-next-line ember/use-brace-expansion\n    tripLegsInBooking: Ember.computed('booking.activeBooking.legs.[]', 'booking.activeBooking.legs', function () {\n      const tripLegs = this.get('booking.activeBooking.legs').filterBy('purpose', 'trip');\n      return tripLegs.sortBy('legOrdinal');\n    }),\n    isSubscription: Ember.computed('subscription.latestRecurrence.recurring', function () {\n      return this.get('subscription.latestRecurrence.recurring');\n    }),\n    addressesOfRiderToBook: Ember.computed('riderToBook', function () {\n      return this.get('riderToBook.places').map(place => {\n        if (Ember.typeOf(place) === 'object') {\n          return this.store.createRecord('address', {\n            freeformAddress: '',\n            // we give this empty because nyct does give this field,full address in address model checks for this\n            streetNumber: place.address.streetNumber,\n            streetAddress: place.address.streetAddress,\n            notes: place.address.notes,\n            premise: place.address.premise,\n            region: place.address.region,\n            locality: place.address.locality,\n            subLocality: place.address.locality,\n            postalCode: place.address.postalCode,\n            lat: place.address.lat,\n            lng: place.address.lng,\n            zName: place.address.zName\n          });\n        }\n\n        return this.store.createRecord('address', {\n          freeformAddress: place.get('address.freeformAddress') || '',\n          streetNumber: place.get('address.streetNumber'),\n          streetAddress: place.get('address.streetAddress'),\n          notes: place.get('address.notes'),\n          premise: place.get('address.premise'),\n          region: place.get('address.region'),\n          locality: place.get('address.locality'),\n          subLocality: place.get('address.subLocality'),\n          postalCode: place.get('address.postalCode'),\n          lat: place.get('location.lat'),\n          lng: place.get('location.lng'),\n          zName: place.get('address.zName')\n        });\n      });\n    }),\n    popUpHeaderTitle: Ember.computed('isEditMode', function () {\n      return this.get('isEditMode') ? 'Edit Subscription' : 'Create Subscription';\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.configureAddTripPermission();\n      const records = this.get('editableRecords');\n      this.set('isEditMode', records[0]);\n      this.set('isViewOnlyMode', records[4]);\n      this.set('subscription', records[2].get('subscription')); // the manual pick/drop times live on the subscription service, so without this\n      // they carry over from the last subscription this session touched; in edit mode\n      // setupManualSubscription repopulates them from the record being edited\n\n      this.set('subscriptionService.pickTime');\n      this.set('subscriptionService.dropTime');\n      this.set('subscriptionService.pickTimeMoment');\n      this.set('subscriptionService.dropTimeMoment');\n      this.activeLegsInBookingForMapObserver();\n\n      if (this.get('isEditMode')) {\n        this.initEditMode();\n      } else {\n        this.initAddMode();\n      }\n\n      const maximumCompanionConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/maximum_companions');\n      const maximumCompanionValue = maximumCompanionConfig ? parseInt(maximumCompanionConfig.get('value'), 10) : 1;\n      this.set('maxCompanionCount', maximumCompanionValue);\n      const previousSubscriptionDays = {};\n      this.syncPickAndDrop = this.syncPickAndDrop.bind(this);\n      this.onFirstLegDateChange = this.onFirstLegDateChange.bind(this);\n      this.updateFare = this.updateFare.bind(this);\n      this.setupManualSubscription = this.setupManualSubscription.bind(this);\n      this.updateADABoundary = this.updateADABoundary.bind(this);\n      this.onSubscriptionChangesModalClose = this.onSubscriptionChangesModalClose.bind(this);\n      this.onSubscriptionChangesAccept = this.onSubscriptionChangesAccept.bind(this);\n      this.set('companionFare', this.get('booking').getSysConfigCompanionFare());\n      this.setDefaultFare();\n      this.combineServiceNeedsForGroupBooking();\n      this.set('booking.previousSubscriptionStartDate', this.get('subscription.startDate'));\n      this.set('booking.previousSubscriptionEndDate', this.get('subscription.endDate'));\n      this.set('booking.previousSubscriptionSuspendStartDate', this.get('subscription.exclusions.firstObject.startDate'));\n      this.set('booking.previousSubscriptionSuspendEndDate', this.get('subscription.exclusions.firstObject.endDate'));\n      this.set('subscriptionService.previousSchedulingMode', this.get('subscription.schedulingMode'));\n      this.set('subscriptionService.previousOriginPlannedEta', this.get('subscription.originPlannedEta'));\n      this.set('subscriptionService.previousDestinationPlannedEta', this.get('subscription.destinationPlannedEta'));\n      this.set('subscriptionService.previousRouteTemplate', this.get('subscription.routeTemplate'));\n      SUSPENSIONDAYS.forEach(day => {\n        const subscriptionDay = `subscription.latestRecurrence.${day}`;\n\n        if (Ember.isPresent(this.get('subscription.latestRecurrence'))) {\n          previousSubscriptionDays[day] = this.get(subscriptionDay);\n        }\n      });\n      this.set('subscriptionService.previousSubscriptionDays', previousSubscriptionDays);\n      this.set('selectedRiders', this.get('booking.selectedRiders'));\n      this.savePreviousSubscriptionData();\n      this.setDefaultBookingData();\n      this.setupADABoundary();\n    },\n\n    async setupADABoundary() {\n      const requestTime = this.get('activeLegsInBooking.firstObject.requestTime');\n      this.updateADABoundary(requestTime);\n    },\n\n    async updateADABoundary(requestTime) {\n      if (Ember.isEmpty(requestTime)) return;\n      const requestTimeMoment = (0, _moment.default)(requestTime);\n      const adaBoundary = await this.getADAEligibility(requestTimeMoment);\n      const activeADABoundary = await this.checkADABoundaries();\n      this.set('activeADABoundary', activeADABoundary);\n      this.set('adaBoundary', adaBoundary.geoms.length > 0 ? adaBoundary : null);\n      const ridersFullNamesOrNull = this.get('booking.selectedRiders').map(externalRider => {\n        const rider = this.get('store').peekRecord('rider', externalRider.id);\n\n        if (rider.get('expiringNotRenewedEligibilityTypes.length') > 0) {\n          return rider.fullName;\n        }\n\n        return null;\n      });\n\n      const ridersFullNames = _lodash.default.compact(ridersFullNamesOrNull);\n\n      if (ridersFullNames.length > 0) {\n        this.get('notifications').warning(`${ridersFullNames.join(', ')} ELIGIBILITY IS SET TO EXPIRE SOON.`);\n      }\n    },\n\n    filterPhoneNumbersBasedDescription(subscriptionPhoneNumbers, numberDescription) {\n      const filteredPhoneNumbers = subscriptionPhoneNumbers.filter(number => {\n        return number.get('description') === numberDescription;\n      });\n      return filteredPhoneNumbers;\n    },\n\n    savePreviousSubscriptionData() {\n      const previousCriticalData = {};\n      const previousStaticData = {};\n      const subscription = this.get('subscription');\n      previousCriticalData.requestTime = subscription.get('requestTime');\n      previousCriticalData.anchor = subscription.get('anchor');\n      previousCriticalData.originAddress = subscription.get('origin.address.fullAddress');\n      previousCriticalData.destinationAddress = subscription.get('destination.address.fullAddress');\n      previousCriticalData.originPlannedEta = subscription.get('originPlannedEta');\n      previousCriticalData.destinationPlannedEta = subscription.get('destinationPlannedEta');\n      previousCriticalData.subscriptionTravelNeeds = subscription.get('subscriptionTravelNeeds').map(tn => tn.travelNeedTypeNameUppercase).toString();\n      previousCriticalData.serviceTypeName = subscription.get('serviceWindow.name');\n      previousCriticalData.noSharing = subscription.get('noSharing');\n      previousCriticalData.routeTemplateName = subscription.get('routeTemplate.name');\n      const originNumber = this.filterPhoneNumbersBasedDescription(subscription.get('phoneNumbers'), ORIGIN_NUMBER_DESCRIPTION);\n      const destinationNumber = this.filterPhoneNumbersBasedDescription(subscription.get('phoneNumbers'), DESTINATION_NUMBER_DESCRIPTION);\n      previousStaticData.originNotes = subscription.get('originNotes');\n      previousStaticData.destinationNotes = subscription.get('destinationNotes');\n      previousStaticData.originNumber = originNumber.get('firstObject.fullPhoneNumber');\n      previousStaticData.destinationNumber = destinationNumber.get('firstObject.fullPhoneNumber');\n      previousStaticData.fareCategoryname = subscription.get('fareCategory.name');\n      previousStaticData.fare = subscription.get('fare');\n      previousStaticData.fundingAgencyName = subscription.get('fundingAgency.name');\n      previousStaticData.purpose = subscription.get('purpose');\n      this.set('subscriptionService.previousCriticalData', previousCriticalData);\n      this.set('subscriptionService.previousStaticData', previousStaticData);\n    },\n\n    setDefaultBookingData() {\n      const isEditMode = this.get('isEditMode');\n      const store = this.get('store');\n      const records = this.get('editableRecords');\n      const selectedRidersLength = this.get('booking.noOfSelectedRiders');\n      const riderLegsTravelNeeds = selectedRidersLength > 1 ? this.get('booking').reGroupLegtravelneedsForGroupBooking() : [{\n        rider: this.get('selectedRiders.firstObject'),\n        travelNeeds: this.get('booking.activeBooking.legs.firstObject.legTravelNeeds').map(travelNeed => {\n          return {\n            type: travelNeed.get('travelNeedTypeName'),\n            cnt: travelNeed.get('count')\n          };\n        })\n      }];\n      const legTravelNeeds = isEditMode ? this.get('legTravelNeeds') : this.get('booking').createLegTravelNeeds(riderLegsTravelNeeds).toArray();\n      const bookingRecord = (0, _lodash.clone)(records[2]);\n      const loadTime = records[1].loadTime;\n      const unLoadTime = records[1].unloadTime;\n      const notes = records[1].notes;\n      this.set('riderTravelNeeds', riderLegsTravelNeeds.firstObject.travelNeeds.map(riderTravelNeed => {\n        const travelNeedType = store.peekAll('travel-need-type').find(tntype => {\n          return tntype.get('id') === riderTravelNeed.type;\n        });\n        return travelNeedType;\n      }));\n      let formattedPhoneNumber;\n\n      if (records[1].notificationPhoneNumbers.length > 1) {\n        const areaCode = records[1].notificationPhoneNumbers[0].areaCode;\n        const phoneNumber = records[1].notificationPhoneNumbers[0].phoneNumber;\n        formattedPhoneNumber = `${areaCode}-${phoneNumber}`;\n      }\n\n      const ambulatoryTravelNeed = legTravelNeeds.find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'AMBULATORY';\n      });\n      let ambulatorySeatCount = 0;\n\n      if (isEditMode) {\n        ambulatorySeatCount = Ember.isPresent(ambulatoryTravelNeed) ? ambulatoryTravelNeed.get('count') : 0;\n      } else {\n        ambulatorySeatCount = this.get('booking').calculateAmbulatoryCount(legTravelNeeds);\n      }\n\n      if (ambulatoryTravelNeed) {\n        ambulatoryTravelNeed.set('count', ambulatorySeatCount);\n      }\n\n      this.set('previousCompanionCount', this.get('booking').getTravelNeedsCompanion(legTravelNeeds).map(legTravelNeed => {\n        return {\n          count: legTravelNeed.get('count'),\n          travelNeedTypeNameUppercase: legTravelNeed.get('travelNeedTypeNameUppercase')\n        };\n      }));\n      const rider = this.get('selectedRiders');\n      const riderPhoneNumber = rider.get('firstObject.formattedPhoneNumber');\n      const record = Ember.Object.create({\n        legs: [].concat(bookingRecord.get('legs').toArray()),\n        booking: bookingRecord,\n        legTravelNeeds: legTravelNeeds.toArray(),\n        loadTime: loadTime,\n        unLoadTime: unLoadTime,\n        notes: notes,\n        formattedPhoneNumber: formattedPhoneNumber,\n        riderPhoneNumber: riderPhoneNumber,\n        rider: rider\n      });\n      record.set('legSegments', this.createClonedLegSegments(record.get('legs')));\n      record.set('travelNeeds', this.createClonedTravelNeeds(record.get('legTravelNeeds')));\n      record.set('subscription', this.createSuspensionRecord(this.get('subscription')));\n      this.set('defaultBookingData', record);\n      this.createClonedPhoneNumbers(this.get('defaultBookingData'));\n      this.set('defaultBookingData.phoneNumbers', this.get('phoneNumbers'));\n\n      if (this.get('isEditMode')) {\n        const defaultActivityLogData = this.get('subscriptionLogGeneration').subscriptionDataForActivityLog(record.get('booking.subscription'), record.get('subscription'));\n        this.set('subscriptionService.defaultActivityLogData', defaultActivityLogData);\n      }\n    },\n\n    createPlaceRecord(place) {\n      const store = this.get('store');\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const placeCategoryType = (0, _unwrapProxy.unwrapProxy)(place.get('placeCategoryType'));\n      const addressAttr = address.toJSON();\n      const placeAttr = place.toJSON();\n      const clonedAddress = store.createRecord('address', addressAttr);\n      const clonePlace = store.createRecord('place', placeAttr);\n      const clonePlaceCategoryType = store.createRecord('place-category-type', placeCategoryType);\n      clonePlace.set('address', clonedAddress);\n      clonePlace.set('placeCategoryType', clonePlaceCategoryType); // if clone the location it will update the location in map\n\n      clonePlace.set('location', place.get('location'));\n      return clonePlace;\n    },\n\n    /**\n    * To save the previous subscription pick and drop phone number for future use(undo,etc)\n    * @param {*} defaultBookingData\n    */\n    createClonedPhoneNumbers(defaultBookingData) {\n      let pickPhoneNumber = '';\n      let dropPhoneNumber = '';\n      let phoneNumbers = [...defaultBookingData.get('booking.subscription.phoneNumbers').toArray()]; //To check whether the phone number is entered or empty\n\n      if (phoneNumbers.length) {\n        const previousPickPhoneNumberRecord = phoneNumbers.get('firstObject');\n        const previousDropPhoneNumberRecord = phoneNumbers.get('lastObject');\n        pickPhoneNumber = previousPickPhoneNumberRecord.toJSON();\n        dropPhoneNumber = previousDropPhoneNumberRecord.toJSON();\n        pickPhoneNumber.compareKey = 'formattedPhoneNumber';\n        dropPhoneNumber.compareKey = 'formattedPhoneNumber';\n        phoneNumbers = [{\n          pickPhoneNumber: pickPhoneNumber,\n          dropPhoneNumber: dropPhoneNumber\n        }];\n      }\n\n      this.set('phoneNumbers', phoneNumbers);\n    },\n\n    createClonedLegSegments(legs) {\n      const legSegments = legs.map(leg => {\n        const pickPlace = this.createPlaceRecord((0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.pick.place')));\n        const dropPlace = this.createPlaceRecord((0, _unwrapProxy.unwrapProxy)(leg.get('segments.lastObject.drop.place')));\n        const fare = leg.get('segments.firstObject.fare');\n        const pickNotes = leg.get('segments.firstObject.pick.notes');\n        const dropNotes = leg.get('segments.lastObject.drop.notes');\n        const pickPlaceAddress = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('address')).toJSON();\n        const dropPlaceAddress = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('address')).toJSON();\n        const pickPlaceLocation = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('location')).toJSON();\n        const dropPlaceLocation = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('location')).toJSON();\n        const pickZoneName = leg.get('segments.firstObject.pick.place.address.zoneName.name');\n        const dropZoneName = leg.get('segments.lastObject.drop.place.address.zoneName.name');\n        const pickZone = leg.get('segments.firstObject.pick.place.address.zoneName');\n        const dropZone = leg.get('segments.lastObject.drop.place.address.zoneName');\n        const pickCategoryType = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('placeCategoryType'));\n        const dropCategoryType = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('placeCategoryType'));\n        return Ember.Object.create({\n          pickPlace: pickPlace,\n          dropPlace: dropPlace,\n          pickPlaceAddress: pickPlaceAddress,\n          dropPlaceAddress: dropPlaceAddress,\n          pickPlaceLocation: pickPlaceLocation,\n          dropPlaceLocation: dropPlaceLocation,\n          fare: fare,\n          pickNotes: pickNotes,\n          dropNotes: dropNotes,\n          serviceWindow: leg.get('serviceWindow'),\n          fundingAgency: leg.get('fundingAgency'),\n          tripPurpose: leg.get('tripPurpose'),\n          anchor: leg.get('anchor'),\n          requestTime: leg.get('requestTime'),\n          pickZoneName: pickZoneName,\n          dropZoneName: dropZoneName,\n          pickZone: pickZone,\n          dropZone: dropZone,\n          pickCategoryType: pickCategoryType,\n          dropCategoryType: dropCategoryType\n        });\n      });\n      return legSegments;\n    },\n\n    createClonedTravelNeeds(legTravelNeed) {\n      const legTravelNeeds = legTravelNeed.map(travelNeed => {\n        return Ember.Object.create({\n          count: travelNeed.get('count'),\n          travelNeedType: travelNeed.get('travelNeedType'),\n          passengerType: travelNeed.get('passengerType'),\n          travelNeedTypeNameUppercase: travelNeed.get('travelNeedTypeNameUppercase'),\n          compareKey: 'travelNeedTypeNameUppercase'\n        });\n      });\n      return legTravelNeeds;\n    },\n\n    createSuspensionRecord(subscription) {\n      const suspensionStatus = subscription.get('status') ? subscription.get('status') : 'active';\n      const suspensionType = subscription.get('exclusions.firstObject.type') ? subscription.get('exclusions.firstObject.type') : 'suspension';\n      const effectiveRecurrencePattern = subscription.get('latestRecurrence');\n      this.set('effectiveRecurrencePattern', effectiveRecurrencePattern);\n      const isSuspensionOnSunday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('sunday') : false;\n      const isSuspensionOnMonday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('monday') : false;\n      const isSuspensionOnTuesday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('tuesday') : false;\n      const isSuspensionOnWednesday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('wednesday') : false;\n      const isSuspensionOnThursday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('thursday') : false;\n      const isSuspensionOnFriday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('friday') : false;\n      const isSuspensionOnSaturday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('saturday') : false;\n      const isSuspensionOnHoliday = Ember.isPresent(effectiveRecurrencePattern) ? effectiveRecurrencePattern.get('holiday') : false;\n      const isSuspended = subscription.get('exclusions.firstObject.suspend');\n      const noSharing = subscription.get('noSharing') ? subscription.get('noSharing') : 0;\n      const suspensionRecord = Ember.Object.create({\n        status: suspensionStatus,\n        type: suspensionType,\n        isSuspended: isSuspended,\n        noSharing: noSharing,\n        sunday: isSuspensionOnSunday,\n        monday: isSuspensionOnMonday,\n        tuesday: isSuspensionOnTuesday,\n        wednesday: isSuspensionOnWednesday,\n        thursday: isSuspensionOnThursday,\n        friday: isSuspensionOnFriday,\n        saturday: isSuspensionOnSaturday,\n        holiday: isSuspensionOnHoliday\n      });\n      return suspensionRecord;\n    },\n\n    clearPreviousSubscriptionData() {\n      this.set('subscriptionService.previousCriticalData', {});\n      this.set('subscriptionService.previousStaticData', {});\n    },\n\n    willDestroyElement() {\n      this.clearPreviousSubscriptionData();\n      this.set('booking.selectedCompanionCount', 0);\n      this.set('booking.isOpenErrorModal', false);\n      this.set('booking.previousSubscriptionStartDate', null);\n      this.set('booking.previousSubscriptionEndDate', null);\n      this.set('booking.previousSubscriptionSuspendStartDate', null);\n      this.set('booking.previousSubscriptionSuspendEndDate', null);\n      this.set('subscriptionService.previousSchedulingMode', null);\n      this.set('subscriptionService.previousOriginPlannedEta', null);\n      this.set('subscriptionService.previousDestinationPlannedEta', null);\n      this.set('subscriptionService.previousRouteTemplate', null);\n      this.set('subscriptionService.previousSubscriptionDays', null);\n      this.set('booking.bookingMap', null);\n\n      this._super(...arguments);\n    },\n\n    initEditMode() {\n      const record = this.get('editableRecords');\n      const subscriptionTravelNeeds = this.get('subscription.subscriptionTravelNeeds').toArray();\n      const clonedLegTravelNeeds = [...subscriptionTravelNeeds];\n      const legTravelNeeds = clonedLegTravelNeeds;\n      const subscriptionServiceNeeds = this.get('subscription.subscriptionServiceNeeds');\n      this.set('riderToBook', record[1]);\n      this.set('legTravelNeeds', legTravelNeeds);\n      this.set('subscriptionServiceNeeds', subscriptionServiceNeeds);\n    },\n\n    initAddMode() {\n      const record = this.get('editableRecords');\n      const travelNeeds = record[2].legs.firstObject.legTravelNeeds;\n      const subscription = record[2].get('subscription');\n      const subscriptionServiceNeeds = subscription.get('subscription.subscriptionServiceNeeds');\n      const store = this.get('store');\n      const rider = store.peekRecord('rider', record[1].id);\n      const subscriptionTravelneeds = travelNeeds.map(travelNeed => {\n        return store.createRecord('subscription-travel-need', {\n          count: travelNeed.get('count'),\n          travelNeedType: travelNeed.get('travelNeedType'),\n          passengerType: travelNeed.get('passengerType')\n        });\n      });\n      this.set('riderToBook', record[1]);\n      this.set('legTravelNeeds', subscriptionTravelneeds);\n      this.set('subscriptionServiceNeeds', subscriptionServiceNeeds);\n      subscription.set('fareCategory', rider.get('fareCategory'));\n    },\n\n    duplicateWideSeats(legTravelNeeds) {\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      const bigSeatTravelneeds = legTravelNeeds.filter(travelNeed => {\n        return bigSeatTRs.includes(travelNeed.get('travelNeedTypeNameUppercase'));\n      });\n      bigSeatTravelneeds.forEach(tr => {\n        const wideTravelNeed = bigSeatsTN.find(travelNeed => {\n          return travelNeed.get('travelNeedTypeNameUppercase') === tr.get('name');\n        });\n        const configCount = parseInt(wideTravelNeed.get('vehicleCapacityCount'), 10);\n\n        if (tr.count > configCount) {\n          const count = tr.count / configCount;\n\n          for (let i = 1; i < count; i++) {\n            const newLegTravelNeed = this.store.createRecord('subscription-travel-need', {\n              count: configCount,\n              travelNeedType: tr.get('travelNeedType'),\n              passengerType: tr.get('passengerType')\n            });\n            legTravelNeeds.pushObject(newLegTravelNeed);\n          }\n        }\n      });\n      return legTravelNeeds;\n    },\n\n    onNoteChange(value) {\n      this.set('riderToBook.notes', value);\n    },\n\n    checkIfFullAddressPresent(address) {\n      return !Ember.isEmpty(address.get('fullAddress'));\n    },\n\n    syncPickAndDrop() {\n      const legsInBooking = this.get('tripLegsInBooking').toArray();\n      this.syncLegsInBooking(legsInBooking); // last trip leg's drop should first return trip leg's pick\n\n      if (this.get('returnTripLegsInBooking.length')) {\n        const lastTripLeg = this.get('tripLegsInBooking.lastObject');\n        const firstReturnLeg = this.get('returnTripLegsInBooking.firstObject');\n        const prevDrop = lastTripLeg.get('segments.firstObject.drop.place');\n        const currPick = firstReturnLeg.get('segments.firstObject.pick');\n        const previousDrop = this.addressRecordCreation(prevDrop);\n        currPick.set('place', previousDrop);\n      }\n\n      const returnLegsInBooking = this.get('returnTripLegsInBooking').toArray();\n      this.syncLegsInBooking(returnLegsInBooking);\n      const activelegsInBooking = this.get('activeLegsInBooking');\n      this.booking.setActiveLegsInBooking(activelegsInBooking);\n    },\n\n    syncLegsInBooking(legsInBooking) {\n      if (legsInBooking.length <= 1) {\n        return;\n      }\n\n      for (let i = 1; i < legsInBooking.length; i++) {\n        const previousLeg = legsInBooking[i - 1];\n        const currentLeg = legsInBooking[i];\n        const prevDrop = previousLeg.get('segments.firstObject.drop.place');\n        const currPick = currentLeg.get('segments.firstObject.pick');\n        const pickPlace = this.addressRecordCreation(prevDrop);\n        currPick.set('place', pickPlace);\n      }\n    },\n\n    /**\n     * address record creation\n     */\n    addressRecordCreation(prevDrop) {\n      const pickAddress = this.store.createRecord('address', {\n        freeformAddress: prevDrop.get('address.freeformAddress') || '',\n        streetNumber: prevDrop.get('address.streetNumber'),\n        streetAddress: prevDrop.get('address.streetAddress'),\n        notes: prevDrop.get('address.notes'),\n        premise: prevDrop.get('address.premise'),\n        region: prevDrop.get('address.region'),\n        locality: prevDrop.get('address.locality'),\n        subLocality: prevDrop.get('address.subLocality'),\n        postalCode: prevDrop.get('address.postalCode'),\n        zName: prevDrop.get('address.zName')\n      });\n      const pickLocation = this.store.createRecord('location', {\n        lat: prevDrop.get('location.lat'),\n        lng: prevDrop.get('location.lng'),\n        geoNode: prevDrop.get('location.geoNode')\n      });\n      const pickPlace = this.store.createRecord('place', {\n        address: pickAddress,\n        location: pickLocation\n      });\n      return pickPlace;\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      Ember.$('.edit-widget-modal').width('465');\n      Ember.$('.booking-map-container').css({\n        'width': 'calc(97% - ' + Ember.$('.edit-widget-modal').width() + 'px)'\n      }).css({\n        'height': 'calc(100% - 16%)',\n        'left': Ember.$('.edit-widget-modal').width() + 'px)'\n      });\n      this.set('travelNeedCollapseState', 'collapsed');\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    getNewLegDate(prevLeg) {\n      const bufferMinutes = 2;\n      const rTime = prevLeg.get('requestTime');\n      const currentDateAndTime = (0, _moment.default)(rTime);\n      const newMomentDate = (0, _moment.default)();\n      const currentYear = currentDateAndTime.year();\n      const currentMonth = currentDateAndTime.month();\n      const currentDay = currentDateAndTime.date();\n      const currentHour = currentDateAndTime.hour();\n      const currentMinutes = currentDateAndTime.minutes();\n      const currentSeconds = currentDateAndTime.seconds();\n      newMomentDate.year(currentYear);\n      newMomentDate.month(currentMonth);\n      newMomentDate.date(currentDay);\n      newMomentDate.hour(currentHour);\n      newMomentDate.minutes(currentMinutes + bufferMinutes);\n      newMomentDate.seconds(currentSeconds);\n      const selectedDateObjectWithTime = newMomentDate.toDate();\n      return selectedDateObjectWithTime;\n    },\n\n    configureAddTripPermission() {\n      const record = this.get('editableRecords')[1];\n      const sameDayTripPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createSameDayBookings, null);\n      const FutureDayTripPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createFutureBookings, null);\n      let maxDate = null;\n      let minDate = null;\n\n      if (sameDayTripPermGranted && !FutureDayTripPermGranted) {\n        maxDate = (0, _moment.default)().endOf('day');\n      }\n\n      if (FutureDayTripPermGranted && !sameDayTripPermGranted) {\n        minDate = (0, _moment.default)().startOf('day').add(1, 'day').toDate();\n      }\n\n      record.set('tripMaxDate', maxDate);\n      record.set('tripMinDate', minDate);\n    },\n\n    async createLegSegmentRecord(isReturn) {\n      const store = this.get('store');\n      const serviceWindow = store.peekRecord('service-window', 'GENERAL');\n      const fareType = store.peekAll('fare-type').firstObject;\n      const rider = this.get('booking.selectedRiders.firstObject');\n      const legTravelNeeds = this.get('legTravelNeeds');\n      let date;\n\n      if (!isReturn || !this.get('returnTripLegsInBooking.lastObject.requestTime')) {\n        const legToUse = this.get('tripLegsInBooking.lastObject');\n        date = this.getNewLegDate(legToUse);\n      } else {\n        const legToUse = this.get('returnTripLegsInBooking.lastObject');\n        date = this.getNewLegDate(legToUse);\n      }\n\n      const pickAddress = store.createRecord('address');\n      const pickLocation = store.createRecord('location');\n      const pickPlace = store.createRecord('place', {\n        address: pickAddress,\n        location: pickLocation\n      });\n      const dropAddress = store.createRecord('address');\n      const dropLocation = store.createRecord('location');\n      const dropPlace = store.createRecord('place', {\n        address: dropAddress,\n        location: dropLocation\n      });\n      const leg = store.createRecord('leg', {\n        requestTime: date,\n        anchor: 'pick',\n        purpose: isReturn ? 'return' : 'trip',\n        notes: '',\n        serviceWindow\n      });\n      const legOrdinalForNewLeg = 1;\n      const fareAmount = await this.get('fareCalc').calcFareByRiderIdAndTravelNeeds(rider, legTravelNeeds);\n      const segment = store.createRecord('segment', {\n        promiseTime: date,\n        anchor: 'Pick',\n        fare: fareAmount,\n        travelMode: 'paratransit',\n        segmentType: 2,\n        noSharing: 0,\n        legOrdinal: legOrdinalForNewLeg,\n        pick: store.createRecord('segment-stop', {\n          type: 'pick',\n          notes: '',\n          plannedTime: date,\n          onboardCount: 1,\n          place: pickPlace\n        }),\n        drop: store.createRecord('segment-stop', {\n          type: 'drop',\n          notes: '',\n          plannedTime: date,\n          onboardCount: 1,\n          place: dropPlace\n        }),\n        fareType: fareType,\n        leg: leg\n      });\n      leg.set('segments', [segment]);\n      return leg;\n    },\n\n    getLegTypeField(isReturn) {\n      return isReturn ? 'returnTripLegsInBooking' : 'tripLegsInBooking';\n    },\n\n    // we are just checking using postalCode because both nyct and tomtom returns that consistently\n    validateIfPickAndDropArePresentInAllLegs() {\n      let allLegsHavePickAndDrop = true;\n      this.get('legsInBooking').forEach(leg => {\n        if (leg.get('segments.firstObject.pick.place.address.postalCode') && leg.get('segments.firstObject.drop.place.address.postalCode')) {\n          allLegsHavePickAndDrop = true;\n        } else {\n          allLegsHavePickAndDrop = false;\n\n          if (leg.get('segments.firstObject.pick.place.address.postalCode')) {\n            const pickPostalCode = leg.get('segments.firstObject.pick.place.address.postalCode');\n            this.set('pickupPostalAddress', pickPostalCode);\n          }\n\n          if (leg.get('segments.firstObject.drop.place.address.postalCode')) {\n            const dropPostalCode = leg.get('segments.firstObject.drop.place.address.postalCode');\n            this.set('dropoffPostalAddress', dropPostalCode);\n          }\n        }\n      });\n      return allLegsHavePickAndDrop;\n    },\n\n    validateFromToDatesNotToBePastDates(startDate, endDate, type) {\n      const currentDate = (0, _moment.default)().startOf('day');\n      const prevStartDate = type === 'Subscription' ? this.get('booking.previousSubscriptionStartDate') : this.get('booking.previousSubscriptionSuspendStartDate');\n      const prevEndDate = type === 'Subscription' ? this.get('booking.previousSubscriptionEndDate') : this.get('booking.previousSubscriptionSuspendEndDate'); // prevent user to select previous date on editMode only allow current date and after for subscription\n\n      if (!this.get('booking').validateDateNotToBePastDate(startDate, currentDate, prevStartDate, type, 'From')) {\n        return false;\n      }\n\n      if (!this.get('booking').validateDateNotToBePastDate(endDate, currentDate, prevEndDate, type, 'To')) {\n        return false;\n      }\n\n      return true;\n    },\n\n    validateFromToDates(startDate, endDate, type) {\n      if (Ember.isEmpty(startDate) || Ember.isNone(startDate) || Ember.isEmpty(endDate) || Ember.isNone(endDate)) {\n        this.get('booking').showErrorMessage(`Please select ${type} From date and To date.`);\n        return false;\n      }\n\n      if (!(0, _moment.default)(convertDate(startDate)).isSameOrBefore((0, _moment.default)(convertDate(endDate)))) {\n        this.get('booking').showErrorMessage(`${type} From date must be same or before To date.`);\n        return false;\n      }\n\n      return true;\n    },\n\n    validateForAtleastOneDaySelected() {\n      const recurrencePattern = this.get('effectiveRecurrencePattern');\n      return recurrencePattern.get('sunday') || recurrencePattern.get('monday') || recurrencePattern.get('tuesday') || recurrencePattern.get('wednesday') || recurrencePattern.get('thursday') || recurrencePattern.get('friday') || recurrencePattern.get('saturday') || recurrencePattern.get('holiday');\n    },\n\n    validateSeatAndPassengerCount() {\n      const noOfRiders = this.get('booking').noOfSelectedRiders;\n      const noOfPassengers = noOfRiders;\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      const bigSeatTravelneeds = this.get('legTravelNeeds').filter(travelNeed => {\n        return bigSeatTRs.includes(travelNeed.get('travelNeedTypeNameUppercase'));\n      });\n      const wheelchairTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'WHEELCHAIR';\n      });\n      const ambulatoryTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'AMBULATORY';\n      });\n      const wheelchaircount = wheelchairTravelNeed ? parseInt(wheelchairTravelNeed.count, 10) : 0;\n      const ambulatoryCount = ambulatoryTravelNeed ? parseInt(ambulatoryTravelNeed.count, 10) : 0;\n      const noOfSeats = ambulatoryCount + wheelchaircount + bigSeatTravelneeds.length;\n\n      if (noOfPassengers !== noOfSeats) {\n        return false;\n      }\n\n      return true;\n    },\n\n    validateEmptyTravelNeeds() {\n      return this.get('legTravelNeeds').toArray().some(tr => !tr.get('travelNeedTypeNameUppercase'));\n    },\n\n    /**\n     *  NYAAR-18964 The validation should be applied on the save tick icon and it shows the warning pop up less then 10 Digit phone number.\n     * @returns {boolean}\n     * @param {phoneNumber}\n     */\n    validatePhoneNumber(phoneNumber) {\n      let valid = true;\n\n      if (phoneNumber.length < PHONE_NUMBER_LENGTH) {\n        valid = false;\n      }\n\n      return valid;\n    },\n\n    validateRecords() {\n      let valid = true;\n      this.set('editModal.errors', []);\n      const firstLeg = this.get('legsInBooking.firstObject');\n      const pickAddress = firstLeg.get('segments.firstObject.pick.place.address.postalCode');\n      const dropAddress = firstLeg.get('segments.firstObject.drop.place.address.postalCode');\n      const requestTime = firstLeg.get('requestTime');\n      const formattedPhoneNumber = this.get('editableRecords')[1].get('formattedPhoneNumber');\n      const requestType = firstLeg.get('anchor');\n      const isManualSchedulingMode = this.get('subscription.isManualSchedulingMode');\n\n      if (this.get('isSubscription')) {\n        const startDate = this.get('subscription.startDate');\n        const endDate = this.get('subscription.endDate');\n\n        if (!this.validateFromToDates(startDate, endDate, 'Subscription')) {\n          valid = false;\n        }\n\n        if (!this.validateFromToDatesNotToBePastDates(startDate, endDate, 'Subscription')) {\n          valid = false;\n        }\n\n        if (!this.validateForAtleastOneDaySelected()) {\n          this.get('booking').showErrorMessage('Please select at least one day from weekdays.');\n          valid = false;\n        }\n      }\n\n      if (this.get('subscription.exclusions.firstObject.suspend')) {\n        const startDate = this.get('subscription.exclusions.firstObject.startDate');\n        const endDate = this.get('subscription.exclusions.firstObject.endDate');\n\n        if (!this.validateFromToDates(startDate, endDate, 'Suspend')) {\n          valid = false;\n        }\n\n        if (!this.validateFromToDatesNotToBePastDates(startDate, endDate, 'Suspend')) {\n          valid = false;\n        }\n      }\n\n      if (isManualSchedulingMode) {\n        const originPlannedEta = this.get('subscription.originPlannedEta');\n        const destinationPlannedEta = this.get('subscription.destinationPlannedEta');\n        const routeTemplate = this.get('subscription.routeTemplate.content');\n\n        if (Ember.isEmpty(routeTemplate)) {\n          this.get('booking').showErrorMessage('Please select a manual route.');\n          valid = false;\n        }\n\n        if (Ember.isEmpty(originPlannedEta) || Ember.isEmpty(destinationPlannedEta)) {\n          this.get('booking').showErrorMessage('Please select a start time and end time.');\n          valid = false;\n        }\n      }\n\n      if (!this.get('isLoadAndUnLoadTimeValid')) {\n        this.get('booking').showErrorMessage('Load/Unload time value must be 15 min or less.');\n        valid = false;\n      }\n\n      if (!this.get('isLoadAndUnLoadTimeNumber')) {\n        this.get('booking').showErrorMessage('Please enter valid numbers for load/unload time.');\n        valid = false;\n      } //NYAAR-20220-User is able to create subscription without selecting request type\n\n\n      if (Ember.isEmpty(requestType) || Ember.isNone(requestType)) {\n        this.get('booking').showErrorMessage('Request type is missing. Please select a request type.');\n        valid = false;\n      }\n\n      if (Ember.isEmpty(requestTime) || Ember.isNone(requestTime)) {\n        this.get('booking').showErrorMessage('Request time is missing. Please enter a valid time.');\n        valid = false;\n      }\n\n      if (Ember.isEmpty(pickAddress) || Ember.isNone(pickAddress)) {\n        this.get('booking').showErrorMessage('Unknown Address. Please enter a valid Pickup Leg address.');\n        valid = false;\n      }\n\n      if (Ember.isEmpty(dropAddress) || Ember.isNone(dropAddress)) {\n        this.get('booking').showErrorMessage('Unknown Address. Please enter a valid DropOff Leg address.');\n        valid = false;\n      }\n\n      if (!this.validateIfPickAndDropArePresentInAllLegs()) {\n        if (!this.get('pickupPostalAddress') && !this.get('dropoffPostalAddress')) {\n          this.get('booking').showErrorMessage('Unknown Address. Please enter a valid address.');\n        } else {\n          if (!this.get('pickupPostalAddress')) {\n            this.get('booking').showErrorMessage('Unknown Address. Please enter a valid Pickup Leg address.');\n          }\n\n          if (!this.get('dropoffPostalAddress')) {\n            this.get('booking').showErrorMessage('Unknown Address. Please enter a valid DropOff Leg address.');\n          }\n        }\n\n        valid = false;\n      }\n\n      if (!this.validateLegRequestTimeAfterPrevLegRequestTime()) {\n        this.get('booking').showErrorMessage('The leg trip time must come after the previous trip request time.');\n        valid = false;\n      }\n\n      if (!this.get('isEditMode')) {\n        const today = (0, _moment.default)();\n        const subscription = this.get('subscription');\n        const subsStartDate = today.isAfter(subscription.get('startDate')) ? today : (0, _moment.default)(subscription.get('startDate'));\n        const subsStartTime = subscription.get('originPlannedEta') || subscription.get('requestTime');\n        const subsStartDateTime = subsStartDate.hour(subsStartTime.getHours()).minute(subsStartTime.getMinutes());\n\n        if (!this.validateSubscriptionEligibility(subsStartDateTime)) {\n          this.set('selectedLegDate', subsStartDateTime.format(_environment.default.dateTimeFormat.dateMoment));\n          this.get('booking').showErrorMessage(`${this.get('riderToBook.firstName')} ${this.get('riderToBook.lastName')}\n        has no client eligibility records for the date \\n  ${this.get('selectedLegDate')} . Please select another date.`);\n          valid = false;\n        }\n      }\n\n      if (this.validateEmptyTravelNeeds()) {\n        this.get('booking').showErrorMessage('Please remove empty Travel needs to proceed.');\n        valid = false;\n      }\n\n      if (!this.validatePhoneNumber(formattedPhoneNumber)) {\n        this.get('booking').showErrorMessage('Please enter 10 digit in the Phone number field.');\n        valid = false;\n      }\n\n      if (this.validateSubscriptionPhoneNumber()) {\n        this.get('booking').showErrorMessage('Please enter 10 digit in the Phone number field.');\n        valid = false;\n      }\n\n      return valid;\n    },\n\n    // when the date of the first leg changes . all the date should change\n    onFirstLegDateChange() {\n      const rTime = this.get('legsInBooking.firstObject.requestTime');\n      const firstLegDateAndTime = (0, _moment.default)(rTime);\n      const firstLegYear = firstLegDateAndTime.year();\n      const firstLegMonth = firstLegDateAndTime.month();\n      const firstLegDay = firstLegDateAndTime.date();\n\n      for (let i = 1; i < this.get('legsInBooking').length; i++) {\n        const leg = this.get('legsInBooking').objectAt(i);\n        const legDateAndTime = (0, _moment.default)(leg.get('requestTime'));\n        legDateAndTime.year(firstLegYear);\n        legDateAndTime.month(firstLegMonth);\n        legDateAndTime.date(firstLegDay);\n        const legDateObjectWithTime = legDateAndTime.toDate();\n        leg.set('requestTime', legDateObjectWithTime);\n      }\n    },\n\n    validateLegTimeBasedOnAnchor(leg, isReturn) {\n      const bookingFieldType = this.getLegTypeField(isReturn);\n      const legsInPanel = this.get(bookingFieldType);\n      let currentLeg = legsInPanel.objectAt(0);\n      const FORMAT = 'mm-dd-yyyy';\n\n      for (let i = 0; i < legsInPanel.length - 1; i++) {\n        const legToCompare = legsInPanel.objectAt(i + 1);\n        const currentLegRequestTime = (0, _moment.default)(currentLeg.get('requestTime'));\n        const legToCompareRequestTime = (0, _moment.default)(legToCompare.get('requestTime'));\n\n        if (legToCompare.get('anchor').toLowerCase() === PICK) {\n          const currentFormattedTime = currentLegRequestTime.format(FORMAT);\n          const compareFormattedTime = legToCompareRequestTime.format(FORMAT);\n\n          if (currentFormattedTime !== compareFormattedTime) {\n            return false;\n          }\n        }\n\n        if (legToCompare.get('anchor').toLowerCase() === DROP) {\n          const dayAfterTwo = currentLegRequestTime.clone().add(1, 'days');\n\n          if (!currentLegRequestTime.isBetween(currentLegRequestTime, dayAfterTwo)) {\n            return false;\n          }\n        }\n\n        currentLeg = legToCompare;\n      }\n\n      return true;\n    },\n\n    validateSubscriptionEligibility(subscriptionDateTime) {\n      const eligibleEndDate = (0, _moment.default)(this.get('riderToBook').get('eligibilityEnd'), 'DD/MM/YYYY');\n      const eligibleStartDate = (0, _moment.default)(this.get('riderToBook').get('eligibilityStart'), 'DD/MM/YYYY'); // Checking the rider eligibility\n\n      if (!(subscriptionDateTime.isSameOrAfter(eligibleStartDate) && subscriptionDateTime.isSameOrBefore(eligibleEndDate))) {\n        return false;\n      }\n\n      return true;\n    },\n\n    validateEligibility(leg) {\n      const requestTimeOfLeg = leg.get('requestTime');\n      const momentedRequestTime = (0, _moment.default)(requestTimeOfLeg);\n      const eligibleEndDate = (0, _moment.default)(this.get('riderToBook').get('eligibilityEnd'), 'DD/MM/YYYY').add(1, 'days');\n      const eligibleStartDate = (0, _moment.default)(this.get('riderToBook').get('eligibilityStart'), 'DD/MM/YYYY'); // Checking the rider eligibility\n\n      if (!(momentedRequestTime.isSameOrAfter(eligibleStartDate) && momentedRequestTime.isSameOrBefore(eligibleEndDate))) {\n        return false;\n      }\n\n      return true;\n    },\n\n    validateLegRequestTimeAfterPrevLegRequestTime() {\n      const legsInBooking = this.get('tripLegsInBooking').toArray();\n\n      if (legsInBooking.length <= 1) {\n        return true;\n      }\n\n      for (let i = 1; i < legsInBooking.length; i++) {\n        const prevLeg = legsInBooking[i - 1];\n        const prevlegRequestime = prevLeg.get('requestTime');\n        const curLeg = legsInBooking[i];\n        const curLegRequestTime = curLeg.get('requestTime'); //Compares each leg requestTime with previous leg requestTime\n\n        if ((0, _moment.default)(curLegRequestTime) <= (0, _moment.default)(prevlegRequestime)) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    checkIfLegIsFirstLeg(leg) {\n      const legsInBooking = this.get('activeLegsInBooking');\n      const indexOfLeg = legsInBooking.indexOf(leg);\n\n      if (indexOfLeg > 0) {\n        return false;\n      }\n\n      return true;\n    },\n\n    combineServiceNeedsForGroupBooking() {\n      const serviceNeeds = this.get('booking.selectedRiders').map(rider => rider.serviceNeeds);\n      const uniqServiceNeeds = (0, _lodash.uniq)((0, _lodash.flattenDeep)(serviceNeeds));\n      this.set('serviceNeeds', uniqServiceNeeds);\n    },\n\n    //subscription phone number validation\n    validateSubscriptionPhoneNumber() {\n      const subscription = this.get('subscription');\n      const phoneNumbers = subscription.get('phoneNumbers');\n      const maxPhoneNumberLength = 10;\n      const filteredPhoneNumbers = phoneNumbers.filter(number => {\n        return number && number.get('fullPhoneNumber').length > 0 && number.get('fullPhoneNumber').length < maxPhoneNumberLength;\n      });\n      return filteredPhoneNumbers.length;\n    },\n\n    async validateFundingAgency() {\n      const activeLegs = this.get('activeLegsInBooking');\n      const subscription = this.get('subscription');\n      const subscriptionStartDate = (0, _moment.default)(subscription.get('startDate'));\n      const subscriptionEndDate = (0, _moment.default)(subscription.get('endDate'));\n      const riderId = this.get('selectedRiders.firstObject.id');\n      const localRiderRecord = await this.store.findRecord('rider', riderId);\n      const riderFundings = localRiderRecord.get('riderFundings');\n      return activeLegs.every(leg => {\n        const legFundingAgency = leg.get('fundingAgency');\n        const legFundingAgencyName = legFundingAgency.get('name');\n\n        if (Ember.isPresent(legFundingAgencyName)) {\n          const legRiderFundings = riderFundings.map(currRiderFunding => {\n            if (currRiderFunding.get('fundingAgency.name') === legFundingAgencyName) {\n              return currRiderFunding;\n            }\n\n            return null;\n          }).compact();\n          return legRiderFundings.any(legRiderFunding => {\n            const startDate = (0, _moment.default)(legRiderFunding.get('startDate')).startOf('day');\n            const endDate = (0, _moment.default)(legRiderFunding.get('endDate')).endOf('day');\n\n            if (subscriptionStartDate.isValid() && subscriptionEndDate.isValid() && (!subscriptionStartDate.isBetween(startDate, endDate) || !subscriptionEndDate.isBetween(startDate, endDate))) {\n              return false;\n            }\n\n            return true;\n          });\n        }\n\n        return true;\n      });\n    },\n\n    async confirmAndSaveSubscription() {\n      const tooltip = this.get('tooltip');\n      const title = this.get('isEditMode') ? 'Edit Subscription' : 'Create Subscription';\n\n      if (await this.validateFundingAgency()) {\n        this.processSubscriptionSave();\n      } else {\n        tooltip.pushConfirmation({\n          tip: \"The subscription's date range exceeds the selected Funding Agency's date range. ADEPT will continue to assign the selected Funding Agency to subscription trips even if the trip occurs outside the Funding Agency date range. \",\n          title: title,\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            return this.processSubscriptionSave();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n            return;\n          }\n        });\n      }\n    },\n\n    async saveSubscription() {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const isEditMode = this.get('isEditMode');\n      const subscriptionData = this.get('subscription');\n      let subscriptionId = null;\n\n      try {\n        if (isEditMode) {\n          subscriptionId = subscriptionData.get('id');\n          await this.get('subscriptionService').prepareSubscriptionUpdateRawData(subscriptionData);\n          const subscriptionFormData = this.createSuspensionRecord(this.get('subscription'));\n          const updatedActivityLogData = this.get('subscriptionLogGeneration').subscriptionDataForActivityLog(this.get('subscription'), subscriptionFormData);\n          this.set('subscriptionService.updatedActivityLogData', updatedActivityLogData);\n          const exclusion = this.get('subscription.exclusions.firstObject');\n\n          if (Ember.isNone(exclusion.get('startDate'))) {\n            exclusion.deleteRecord();\n          }\n        }\n\n        const subscription = await this.get('subscriptionService').saveSubscription(this.get('subscription'), isEditMode, this.get('legTravelNeeds'));\n\n        if (!isEditMode) {\n          const subscriptionServiceNeeds = this.get('subscriptionServiceNeeds') ? this.get('subscriptionServiceNeeds').toArray() : [];\n          subscriptionId = subscription.data.id;\n\n          if (subscriptionServiceNeeds.length > 0) {\n            await this.get('subscriptionService').saveSubscriptionServiceNeeds(subscriptionId, subscriptionServiceNeeds);\n          }\n        } //subscription phone number save\n\n\n        this.get('subscriptionService').saveSubscriptionPhoneNumber(subscriptionId, subscriptionData); // send out trips creation\n\n        const result = await this.processTripsGeneration(subscriptionId, this.get('tripsGeneration'));\n\n        if (!result) {\n          this.get('notifications').warning('Booking trips generation failed');\n        }\n\n        const message = isEditMode ? 'Subscription successfully edited.' : 'Subscription saved.';\n        const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n        const subscriptions = await this.get('apiContext').loadSubscriptionsForSelectedExternalRiders(); //roll back address record(NYAAR-18629)\n\n        this.resetModelAttribute();\n        this.set('booking.currentBookings', bookings);\n        this.set('booking.currentTrips', trips);\n        this.set('booking.currentSubscriptions', subscriptions);\n        this.get('editModal').close();\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('notifications').success(message);\n      } catch (err) {\n        const message = this.get('isEditMode') ? 'Subscription failed to be edited.' : `Failed to create Subscription  ${err.message}`;\n        this.get('notifications').warning(message);\n        this.get('editModal').close();\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    updateFare() {\n      this.get('booking.activeBooking.legs').forEach(async leg => {\n        const legTravelNeeds = this.get('legTravelNeeds');\n        const rider = this.get('booking.selectedRiders.firstObject');\n        const segments = leg.get('segments');\n        const fareCategoryName = Ember.isPresent(this.get('subscription.fareCategory.id')) ? this.get('subscription.fareCategory.id').capitalize() : null;\n        const fareAmount = await this.get('fareCalc').calcFareByRiderIdAndTravelNeeds(rider, legTravelNeeds, true, fareCategoryName);\n        segments.forEach(segment => {\n          segment.set('fare', fareAmount);\n        });\n      });\n    },\n\n    setDefaultFare() {\n      const fare = this.get('legsInBooking.firstObject.segments.firstObject.fare');\n      const regularFare = this.get('booking').getSysConfigRegularFare();\n      const guestFare = this.get('booking').getSysConfigCompanionFare();\n      const activeRiders = this.get('noOfActiveRiders'); // when REG or Guest fare is 0 return original fare\n\n      if (regularFare === 0 || guestFare === 0) {\n        if (activeRiders > 1) {\n          this.set('defaultFare', regularFare * activeRiders);\n          return;\n        }\n\n        this.set('defaultFare', regularFare);\n        return;\n      }\n\n      const companionCount = this.get('booking').getTravelNeedsCompanionCount(this.get('legTravelNeeds'));\n      const defaultFare = fare / (activeRiders + companionCount);\n\n      if (activeRiders > 1) {\n        this.set('defaultFare', defaultFare * activeRiders);\n      } else {\n        this.set('defaultFare', defaultFare);\n      }\n    },\n\n    resetAddressAndLocation(legSegment, leg) {\n      const store = this.get('store');\n      const pickPlace = (0, _unwrapProxy.unwrapProxy)(legSegment.get('pickPlace'));\n      const dropPlace = (0, _unwrapProxy.unwrapProxy)(legSegment.get('dropPlace'));\n      const clonedPickAddress = store.createRecord('address', legSegment.get('pickPlaceAddress'));\n      const clonedPickLocation = store.createRecord('location', legSegment.get('pickPlaceLocation'));\n      const clonedDropAddress = store.createRecord('address', legSegment.get('dropPlaceAddress'));\n      const clonedDropLocation = store.createRecord('location', legSegment.get('dropPlaceLocation'));\n      const clonedPickPlaceCategoryType = store.createRecord('place-category-type', legSegment.get('pickCategoryType'));\n      const clonedDropPlaceCategoryType = store.createRecord('place-category-type', legSegment.get('dropCategoryType'));\n      clonedPickAddress.set('zoneName', legSegment.get('pickZone'));\n      clonedDropAddress.set('zoneName', legSegment.get('dropZone'));\n      pickPlace.set('address', clonedPickAddress);\n      pickPlace.set('location', clonedPickLocation);\n      dropPlace.set('address', clonedDropAddress);\n      dropPlace.set('location', clonedDropLocation);\n      pickPlace.set('placeCategoryType', clonedPickPlaceCategoryType);\n      dropPlace.set('placeCategoryType', clonedDropPlaceCategoryType);\n      leg.set('segments.firstObject.pick.place', pickPlace);\n      leg.set('segments.lastObject.drop.place', dropPlace);\n    },\n\n    /**\n    * Reset subscription pick and drop phoneNumber while clicking undo button and click on x close button in booking side panel.\n    * its working in create Subscription and edit Subscription.\n    */\n    resetPhoneNumber() {\n      let phoneNumbers = this.get('phoneNumbers'); //To check whether the phone number is entered or empty\n\n      if (phoneNumbers.length) {\n        const pickPhoneNumber = this.get('phoneNumbers.firstObject.pickPhoneNumber');\n        const dropPhoneNumber = this.get('phoneNumbers.firstObject.dropPhoneNumber');\n        phoneNumbers = this.createSubscriptionPhoneNumRecord(pickPhoneNumber, dropPhoneNumber);\n      }\n\n      this.set('subscription.phoneNumbers', phoneNumbers);\n    },\n\n    resetModelAttribute() {\n      this.get('booking.activeBooking.legs').forEach(leg => {\n        if (!leg) {\n          return;\n        }\n\n        const pickAddressId = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.pick.place.address.id'));\n        const dropAddressId = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.drop.place.address.id'));\n\n        if (pickAddressId) {\n          const pickAddressRecord = this.get('store').peekRecord('address', pickAddressId);\n          pickAddressRecord.rollbackAttributes();\n        }\n\n        if (dropAddressId) {\n          const dropAddressRecord = this.get('store').peekRecord('address', dropAddressId);\n          dropAddressRecord.rollbackAttributes();\n        }\n      });\n    },\n\n    /**\n     * Reset phoneNumber and Notes while clicking undo button and click on x close button in booking side panel\n     * its working in create Subscription and edit Subscription.\n     */\n    resetPassengerListPhoneNumberAndNotes(defaultBookingData) {\n      const notes = defaultBookingData.get('notes');\n      const rider = defaultBookingData.get('rider');\n      const riderPhoneNumber = defaultBookingData.get('riderPhoneNumber');\n      rider.forEach(riderData => {\n        riderData.set('notes', notes);\n        riderData.set('formattedPhoneNumber', riderPhoneNumber);\n      });\n    },\n\n    resetCompanionCountFields(defaultBookingData) {\n      const legTravelNeeds = defaultBookingData.get('legTravelNeeds').toArray();\n      this.set('legTravelNeeds', legTravelNeeds);\n      const newLegTravelNeed = defaultBookingData.get('travelNeeds');\n      const companionCount = this.get('booking').getTravelNeedsCompanionCount(newLegTravelNeed);\n      const companions = this.get('previousCompanionCount') || [];\n      legTravelNeeds.forEach(travelNeed => {\n        if (this.booking.get('isCompanionTravelNeed')(travelNeed)) {\n          const previousCompanion = companions.find(companion => {\n            return companion.travelNeedTypeNameUppercase === travelNeed.get('travelNeedTypeNameUppercase');\n          });\n          const previousCompanionCount = Ember.isPresent(previousCompanion) ? previousCompanion.count : 0;\n          travelNeed.set('count', previousCompanionCount);\n        }\n      });\n      this.get('booking').setCompanionCount(companionCount);\n    },\n\n    resetFieldStates() {\n      if (this.get('travelNeedCollapseState') === 'expanded') this.set('travelNeedCollapseState', 'collapsed');\n      if (this.get('passengerCollapseState') === 'expanded') this.set('passengerCollapseState', 'collapsed');\n      if (this.get('serviceNeedCollapseState') === 'expanded') this.set('serviceNeedCollapseState', 'collapsed');\n    },\n\n    resetSuspensionDaysFields(defaultBookingData) {\n      const subscription = defaultBookingData.get('subscription');\n      const previousSubscriptionDays = this.get('subscriptionService.previousSubscriptionDays');\n      this.set('subscription.startDate', this.get('booking.previousSubscriptionStartDate'));\n      this.set('subscription.endDate', this.get('booking.previousSubscriptionEndDate'));\n      this.set('subscription.exclusions.firstObject.startDate', this.get('booking.previousSubscriptionSuspendStartDate'));\n      this.set('subscription.exclusions.firstObject.endDate', this.get('booking.previousSubscriptionSuspendEndDate'));\n      this.set('subscription.exclusions.firstObject.type', subscription.get('type'));\n      this.set('subscription.status', subscription.get('status'));\n      this.set('subscription.exclusions.firstObject.suspend', subscription.get('isSuspended'));\n      this.set('subscription.noSharing', subscription.get('noSharing'));\n      this.set('subscription.schedulingMode', this.get('subscriptionService.previousSchedulingMode'));\n      this.set('subscription.originPlannedEta', this.get('subscriptionService.previousOriginPlannedEta'));\n      this.set('subscription.destinationPlannedEta', this.get('subscriptionService.previousDestinationPlannedEta'));\n      this.set('subscription.routeTemplate', this.get('subscriptionService.previousRouteTemplate'));\n      this.set('subscriptionService.pickTime');\n      this.set('subscriptionService.dropTime');\n      this.set('subscriptionService.pickTimeMoment');\n      this.set('subscriptionService.dropTimeMoment');\n      SUSPENSIONDAYS.forEach(day => {\n        const subscriptionDay = `subscription.latestRecurrence.${day}`;\n\n        if (Ember.isPresent(this.get('subscription.latestRecurrence')) && Ember.isPresent(previousSubscriptionDays)) {\n          this.set(subscriptionDay, previousSubscriptionDays[day]);\n        }\n      });\n    },\n\n    /**\n     *NYAAR-19273: Creating a record in subscription-phone-number model for pick and drop phone number\n     * @param {*} pickPhoneNumber\n     * @param {*} dropPhoneNumber\n     * @returns subscription phone number model\n     */\n    createSubscriptionPhoneNumRecord(pickPhoneNumber, dropPhoneNumber) {\n      const pickPhoneNumberRecord = this.get('store').createRecord('subscription-phone-number', pickPhoneNumber);\n      const dropPhoneNumberRecord = this.get('store').createRecord('subscription-phone-number', dropPhoneNumber);\n      return [pickPhoneNumberRecord, dropPhoneNumberRecord];\n    },\n\n    resetFieldValues() {\n      const defaultBookingData = this.get('defaultBookingData');\n      const loadTime = defaultBookingData.get('loadTime');\n      const unLoadTime = defaultBookingData.get('unLoadTime');\n      const legs = defaultBookingData.get('legs').toArray();\n      const legSegments = defaultBookingData.get('legSegments').toArray();\n      const legSegment = legSegments[0];\n      const leg = legs[0];\n      const legTravelNeeds = defaultBookingData.get('travelNeeds').toArray();\n      this.set('legTravelNeeds', legTravelNeeds);\n      leg.set('segments.lastObject.drop.notes', legSegment.get('dropNotes'));\n      leg.set('segments.firstObject.pick.notes', legSegment.get('pickNotes'));\n      leg.set('segments.firstObject.fare', legSegment.get('fare'));\n      leg.set('serviceWindow', legSegment.get('serviceWindow'));\n      leg.set('fundingAgency', legSegment.get('fundingAgency'));\n      leg.set('anchor', legSegment.get('anchor'));\n      leg.set('requestTime', legSegment.get('requestTime'));\n      leg.set('segments.firstObject.pick.dwell', loadTime);\n      leg.set('segments.firstObject.drop.dwell', unLoadTime);\n      this.set('pickAddressText', '');\n      this.set('dropAddressText', '');\n      this.resetAddressAndLocation(legSegment, leg);\n      this.resetSuspensionDaysFields(defaultBookingData);\n      this.resetModelAttribute();\n      this.resetPassengerListPhoneNumberAndNotes(defaultBookingData);\n      this.resetPhoneNumber();\n      this.resetFieldStates();\n      this.set('booking.activeBooking.legs', legs);\n    },\n\n    setDistances(coord) {\n      if (this.get('distancePt1') === null) {\n        this.set('distancePt1', this.markerPinPoint(coord));\n      } else if (this.get('distancePt2') === null) {\n        this.set('distancePt2', this.markerPinPoint(coord));\n        const map = this.get('booking.bookingMap');\n        const distance = (0, _geolib.getDistance)(this.get('distancePt1.native._latlng'), coord); // eslint-disable-line\n        //convert from metre -> feet -> mile\n\n        const feet = distance * 3.281;\n        const miles = feet / 5280;\n        this.set('computedDistance', `${miles.toFixed(3)} mi (${Math.round(feet).toLocaleString()} feet)`);\n        const polyLineOptions = _polyline.default['dottedDistance']; // eslint-disable-line\n\n        const distancePoints = [{\n          lat: this.get('distancePt1.native._latlng.lat'),\n          lon: this.get('distancePt1.native._latlng.lng')\n        }, {\n          lat: this.get('distancePt2.native._latlng.lat'),\n          lon: this.get('distancePt2.native._latlng.lng')\n        }];\n        const distancePolyline = new bemap.Polyline(distancePoints, {\n          style: polyLineOptions\n        });\n        map.addPolyline(distancePolyline);\n        this.set('distancePolyline', distancePolyline);\n      } else {\n        this.distanceReset();\n      }\n    },\n\n    distanceReset() {\n      const map = this.get('booking.bookingMap');\n      const distancePt1 = this.get('distancePt1');\n      const distancePt2 = this.get('distancePt2');\n      const distancePolyline = this.get('distancePolyline');\n\n      if (distancePt1) {\n        map.removeMarker(distancePt1);\n      }\n\n      if (distancePt2) {\n        map.removeMarker(distancePt2);\n      }\n\n      if (distancePolyline) {\n        map.removePolyline(distancePolyline);\n      }\n\n      this.setProperties({\n        distancePt1: null,\n        distancePt2: null,\n        computedDistance: null,\n        distancePolyline: null\n      });\n    },\n\n    markerPinPoint(coord) {\n      const map = this.get('booking.bookingMap');\n      if (!coord) return;\n      const bemapCoords = new bemap.Coordinate(coord.lng, coord.lat);\n      const pintPointIcon = {\n        icon: {\n          src: '/map-icons/icon-pinpoint.svg',\n          anchorX: 0.50,\n          anchorY: 1,\n          height: 23,\n          width: 23,\n          anchorXUnits: 'fraction',\n          anchorYUnits: 'fraction',\n          scale: 1\n        }\n      };\n      const bemapIcon = new bemap.Icon(pintPointIcon.icon);\n      const marker = new bemap.Marker(bemapCoords, {\n        icon: bemapIcon\n      });\n      map.addMarker(marker);\n      return marker;\n    },\n\n    setupManualSubscription() {\n      const subscription = this.get('subscription');\n      const isManualSchedulingMode = subscription.get('isManualSchedulingMode');\n      const originPlannedEta = subscription.get('originPlannedEta');\n      const destinationPlannedEta = subscription.get('destinationPlannedEta');\n\n      if (isManualSchedulingMode && Ember.isPresent(originPlannedEta) && Ember.isPresent(destinationPlannedEta)) {\n        this.set('subscriptionService.pickTimeMoment', (0, _moment.default)(originPlannedEta));\n        this.set('subscriptionService.dropTimeMoment', (0, _moment.default)(destinationPlannedEta));\n        this.set('subscriptionService.pickTime', this.get('subscriptionService.pickTimeMoment').format('HH:mm'));\n        this.set('subscriptionService.dropTime', this.get('subscriptionService.dropTimeMoment').format('HH:mm'));\n      }\n    },\n\n    checkADABoundaries() {\n      const configADABoundaries = this.store.peekRecord('cs-config-item', 'config-Book_Trips/checkADABoundariesEligibleRiders');\n      const checkADABoundaries = configADABoundaries ? this.store.peekRecord('cs-config-item', 'config-Book_Trips/checkADABoundariesEligibleRiders').value : false;\n      const selectedRidersLength = this.get('booking.noOfSelectedRiders');\n      if (!checkADABoundaries || selectedRidersLength > 1) return false;\n      const selectedRider = this.get('selectedRiders.firstObject');\n      const rider = this.get('store').peekRecord('rider', selectedRider.id);\n      const eligibilities = rider.get('riderEligibilities').toArray();\n      const activeLegs = this.get('booking.activeBooking.legs');\n      const legsWithADAEligibility = []; // legs that have a requestTime in ADA eligibility category\n\n      activeLegs.forEach(leg => {\n        const requestTime = (0, _moment.default)(leg.get('requestTime'));\n        const eligibility = eligibilities.find(elig => {\n          const from = (0, _moment.default)(elig.from).startOf('day');\n          const to = (0, _moment.default)(elig.to).endOf('day');\n          return requestTime.isBetween(from, to) && elig.get('checkADABoundary');\n        });\n        const isADAEligibility = Ember.isPresent(eligibility) ? eligibility.get('checkADABoundary') : false;\n\n        if (isADAEligibility) {\n          this.set('riderADAEligibility', eligibility);\n          legsWithADAEligibility.push(leg);\n        }\n      });\n      if (legsWithADAEligibility.length <= 0) return false;\n      this.set('passedADACheck', true);\n      return true;\n    },\n\n    switchLatLonPositions(geoms) {\n      const flattenGeoms = _lodash.default.flatten(_lodash.default.flatten(_lodash.default.flatten(geoms)));\n\n      flattenGeoms.map(point => {\n        const lon = point[0];\n        const lat = point[1];\n        point[0] = lat;\n        point[1] = lon;\n      });\n    },\n\n    async getADAEligibility(requestTime) {\n      const requestTimeFormat = requestTime.format();\n      return this.get('ajax').request(_apiUrls.API.iqMap.host + `/ada-boundary?requestTime=${requestTimeFormat}`, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n        }\n      }).then(result => {\n        const geoms = [];\n        result.data.forEach(dataObject => {\n          geoms.push(dataObject.attributes.geom.coordinates);\n        });\n        this.switchLatLonPositions(geoms);\n        return {\n          geoms\n        };\n      }).catch(() => {\n        return {\n          geoms: []\n        };\n      });\n    },\n\n    anyCriticalChanges() {\n      if (!this.get('isEditMode')) return true;\n      const activeBooking = this.get('booking.activeBooking');\n      const leg = activeBooking.get('firstLeg');\n      const segment = leg.get('segment');\n      const subscription = this.get('subscription');\n      const previousCriticalData = this.get('subscriptionService.previousCriticalData');\n      const subscriptionTravelNeeds = this.get('legTravelNeeds').map(tn => tn.travelNeedTypeNameUppercase).toString();\n      if (previousCriticalData.anchor !== leg.get('anchor')) return true;\n      if (previousCriticalData.destinationAddress !== segment.get('drop.place.address.fullAddress')) return true;\n      if (previousCriticalData.originAddress !== segment.get('pick.place.address.fullAddress')) return true;\n      if (previousCriticalData.destinationPlannedEta !== subscription.get('destinationPlannedEta')) return true;\n      if (previousCriticalData.originPlannedEta !== subscription.get('originPlannedEta')) return true;\n      if (previousCriticalData.requestTime !== leg.get('requestTime')) return true;\n      if (previousCriticalData.subscriptionTravelNeeds !== subscriptionTravelNeeds) return true;\n      if (previousCriticalData.serviceTypeName !== leg.get('serviceWindow.name')) return true;\n      if (previousCriticalData.noSharing !== subscription.get('noSharing')) return true;\n      if (previousCriticalData.routeTemplateName !== subscription.get('routeTemplate.name')) return true;\n      return false;\n    },\n\n    anyStaticChanges() {\n      if (!this.get('isEditMode')) return true;\n      const activeBooking = this.get('booking.activeBooking');\n      const leg = activeBooking.get('firstLeg');\n      const segment = leg.get('segment');\n      const subscription = this.get('subscription');\n      const previousStaticData = this.get('subscriptionService.previousStaticData');\n      const originNumber = this.filterPhoneNumbersBasedDescription(subscription.get('phoneNumbers'), ORIGIN_NUMBER_DESCRIPTION);\n      const destinationNumber = this.filterPhoneNumbersBasedDescription(subscription.get('phoneNumbers'), DESTINATION_NUMBER_DESCRIPTION);\n      if (previousStaticData.originNotes !== segment.get('pick.notes')) return true;\n      if (previousStaticData.destinationNotes !== segment.get('drop.notes')) return true;\n      if (previousStaticData.originNumber !== originNumber.get('firstObject.fullPhoneNumber')) return true;\n      if (previousStaticData.destinationNumber !== destinationNumber.get('firstObject.fullPhoneNumber')) return true;\n      if (previousStaticData.fareCategoryname !== subscription.get('fareCategory.name')) return true;\n      if (previousStaticData.fare !== subscription.get('fare')) return true;\n      if (previousStaticData.fundingAgencyName !== subscription.get('fundingAgency.name')) return true;\n      if (previousStaticData.purpose !== subscription.get('purpose')) return true;\n      return false;\n    },\n\n    onSubscriptionChangesModalOpen() {\n      this.set('canShowSubscriptionChanges', true);\n    },\n\n    onSubscriptionChangesModalClose() {\n      this.set('canShowSubscriptionChanges', false);\n    },\n\n    onSubscriptionChangesAccept() {\n      const isCallBackBookingModeType = this.get('booking').isCallBackBookingModeType();\n      const anyCriticalChanges = this.anyCriticalChanges();\n      const tableRef = this.get('tableRef');\n      const tripsGeneration = [];\n      this.set('tripsGeneration');\n      tableRef.table.rows.forEach(row => {\n        const isChecked = row.get('isPreviouslyChecked');\n        const parseDateTime = row.get('time').split('T');\n        let tripGen = {};\n        let action = row.get('action');\n\n        if (action === 'NEW') {\n          if (!isChecked) action = 'SKIP_NEW';\n          tripGen = {\n            action,\n            date: parseDateTime[0],\n            bookingId: row.get('bookingId'),\n            tripId: row.get('tripId'),\n            tripStatus: row.get('tripStatus')\n          };\n        }\n\n        if (action === 'UPDATE') {\n          if (anyCriticalChanges) {\n            const isScheduledStatus = row.get('tripStatus') === 'scheduled';\n\n            if (!isCallBackBookingModeType || isCallBackBookingModeType && isScheduledStatus) {\n              action = 'REPLACE';\n            }\n          }\n\n          if (isChecked) {\n            tripGen = {\n              action,\n              date: parseDateTime[0],\n              bookingId: row.get('bookingId'),\n              tripId: row.get('tripId'),\n              tripStatus: row.get('tripStatus')\n            };\n          }\n        }\n\n        if (action === 'DELETE') {\n          if (isChecked) {\n            tripGen = {\n              action,\n              date: parseDateTime[0],\n              bookingId: row.get('bookingId'),\n              tripId: row.get('tripId'),\n              tripStatus: row.get('tripStatus')\n            };\n          }\n        }\n\n        if (!_lodash.default.isEmpty(tripGen)) {\n          tripsGeneration.push(tripGen);\n        }\n      });\n      this.set('tripsGeneration', tripsGeneration);\n      this.onSubscriptionChangesModalClose();\n      this.saveSubscription();\n    },\n\n    createTripsBookingPayload(subscriptionId, tripsGeneration) {\n      const bookingMode = this.get('booking').getBookingMode();\n      const recipe = tripsGeneration.map(tripGen => {\n        return {\n          date: tripGen.date,\n          action: tripGen.action,\n          tripId: tripGen.tripId,\n          tripStatus: tripGen.tripStatus,\n          bookingId: tripGen.bookingId\n        };\n      });\n      const payload = {\n        data: {\n          type: 'bookingAsyncOperation',\n          attributes: {\n            operationType: 'subscriptionTripsGeneration',\n            operationData: {\n              subscriptionId: subscriptionId,\n              bookingMode,\n              recipe\n            }\n          }\n        }\n      };\n      return payload;\n    },\n\n    async processTripsGeneration(subscriptionId, tripsGeneration) {\n      if (Ember.isEmpty(tripsGeneration)) return true;\n      const payload = await this.createTripsBookingPayload(subscriptionId, tripsGeneration);\n      const options = {\n        operationData: payload,\n        outputResult: true\n      };\n      let returnValue = false;\n\n      try {\n        const {\n          isJobSuccess\n        } = await this.createTripsBookingAsyncOperation.perform(payload, 'subscriptionTripsGeneration', options);\n        returnValue = isJobSuccess;\n      } catch (err) {\n        throw err;\n      }\n\n      return returnValue;\n    },\n\n    getSubscriptionDatepayload(subscriptionData) {\n      const subscriptionPayload = this.get('subscriptionService').convertSubscriptionCreateRecordToPayloadFormat(subscriptionData, this.get('legTravelNeeds'));\n      return subscriptionPayload;\n    },\n\n    postSubscriptionBookings(payload) {\n      const session = this.get('session');\n      return this.get('ajax').post(_apiUrls.API.bookingService.host + '/generate-subscription-date', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: payload\n      });\n    },\n\n    async processSubscriptionSave() {\n      const isEditMode = this.get('isEditMode');\n      const isCallBackBookingModeType = this.get('booking').isCallBackBookingModeType();\n      const subscriptionData = this.get('subscription');\n      const leg = this.booking.get('activeBooking.legs.firstObject');\n      const origin = leg.get('segments.firstObject.pick.place');\n      const destination = leg.get('segments.firstObject.drop.place');\n      const pickAddress = origin.get('address.simpleAddress');\n      const dropAddress = destination.get('address.simpleAddress');\n      const pickCity = origin.get('address.locality');\n      const dropCity = destination.get('address.locality');\n      const subscriptionDatePayload = this.getSubscriptionDatepayload(subscriptionData);\n\n      if (isEditMode) {\n        subscriptionDatePayload.data.id = subscriptionData.get('id');\n      }\n\n      return await this.postSubscriptionBookings(subscriptionDatePayload).then(response => {\n        const bookingMode = this.get('booking').getBookingMode();\n        const anyCriticalChanges = this.anyCriticalChanges();\n        const anyStaticChanges = this.anyStaticChanges();\n        const subscriptionBookings = [];\n        const requestTime = (0, _moment.default)(subscriptionData.get('originPlannedEta') || leg.get('requestTime'));\n\n        if (response.length === 0 || subscriptionDatePayload.data.attributes.status === 'inactive') {\n          return this.saveSubscription();\n        }\n\n        const sortedResponse = _lodash.default.orderBy(response, res => {\n          return new Date(res.date);\n        }, ['asc']);\n\n        sortedResponse.forEach(subscriptionDate => {\n          let actionCode = subscriptionDate.action;\n          let actionDescription = '';\n          const parsedDate = subscriptionDate.date.split('-');\n          requestTime.set('year', parsedDate[0]);\n          requestTime.set('month', parsedDate[1] - 1);\n          requestTime.set('date', parsedDate[2]);\n\n          if (isEditMode) {\n            if (subscriptionDate.action === 'UPDATE') {\n              if (anyCriticalChanges) {\n                const isScheduledStatus = subscriptionDate.tripStatus === 'scheduled';\n\n                if (isCallBackBookingModeType) {\n                  actionCode = isScheduledStatus ? 'UPDATE_CRITICAL' : 'UPDATE_STATIC';\n                } else {\n                  actionCode = 'UPDATE_CRITICAL';\n                }\n              } else {\n                actionCode = 'UPDATE_STATIC';\n              }\n            } else {\n              actionCode = subscriptionDate.action;\n            }\n\n            actionDescription = UPDATE_SUBSCRIPTION_DATE_MAP[`${bookingMode}_${actionCode}`];\n          } else {\n            actionDescription = UPDATE_SUBSCRIPTION_DATE_MAP[`${bookingMode}_${actionCode}`];\n          }\n\n          if (subscriptionDate.action === 'NEW' || subscriptionDate.action === 'DELETE' || subscriptionDate.action === 'UPDATE' && (anyCriticalChanges || anyStaticChanges)) {\n            subscriptionBookings.push(Ember.Object.create({\n              action: subscriptionDate.action,\n              tripId: subscriptionDate.tripId,\n              tripStatus: subscriptionDate.tripStatus,\n              bookingId: subscriptionDate.bookingId,\n              actionDescription,\n              time: requestTime.format(),\n              pickAddress,\n              dropAddress,\n              pickCity,\n              dropCity\n            }));\n          }\n        });\n\n        if (subscriptionBookings.length === 0) {\n          this.set('subscriptionBookings', subscriptionBookings);\n          this.saveSubscription();\n        } else {\n          this.onSubscriptionChangesModalOpen();\n          this.set('subscriptionBookings', subscriptionBookings);\n          Ember.run.later(() => {\n            const tableRef = this.get('tableRef');\n            if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'onCheckAll');\n          }, 500);\n        }\n\n        return response;\n      }).catch(err => {\n        const message = this.get('isEditMode') ? 'Subscription failed to be edited.' : `Failed to create Subscription  ${err.message}`;\n        this.get('notifications').warning(message);\n      });\n    },\n\n    actions: {\n      onUndoClick() {\n        this.resetFieldValues();\n        this.setDefaultBookingData();\n        this.setupManualSubscription();\n      },\n\n      onSaveClick() {\n        this.set('canSave', true);\n\n        if (this.validateRecords()) {\n          this.confirmAndSaveSubscription();\n        }\n      },\n\n      onXButtonClick() {\n        this.toggleProperty('isProgressShown');\n      },\n\n      onProgressNoClick() {\n        this.resetFieldValues();\n        this.toggleProperty('isProgressShown');\n        this.get('editModal').close();\n      },\n\n      onCloseClick() {\n        const isInactive = this.get('isInactive');\n\n        if (!isInactive) {\n          this.toggleProperty('isProgressShown');\n        } else {\n          this.resetFieldValues();\n          this.get('editModal').close();\n        }\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n          this.get('geocode').activateGeocode(false);\n          this.set('addressRecord', null);\n          this.get('service').apply();\n        }\n      },\n\n      validateRequestDateTime(leg) {\n        this.set('canSave', true);\n        this.set('errorMessage', '');\n\n        if (!this.get('isEditMode') && !this.validateEligibility(leg)) {\n          this.set('selectedLegDate', (0, _moment.default)(leg.get('requestTime')).format('M/D/Y'));\n          this.get('booking').showErrorMessage(`${this.get('riderToBook.firstName')} ${this.get('riderToBook.lastName')}\n        has no client eligibility records for the date \\n  ${this.get('selectedLegDate')} . Please select another date.`);\n          return;\n        }\n\n        if (!this.validateLegRequestTimeAfterPrevLegRequestTime()) {\n          this.get('booking').showErrorMessage('The leg trip time must come after the previous trip request time.');\n          return;\n        }\n      },\n\n      async onYesButtonClick() {\n        if (this.validateRecords()) {\n          this.confirmAndSaveSubscription();\n        }\n      },\n\n      onWarningModalClose() {\n        this.set('isOpenErrorModal', false);\n        this.set('disablePhoneNumber', false);\n      },\n\n      setLoadAndUnLoadTimeFlag(isLoadAndUnLoadTimeValid) {\n        this.set('isLoadAndUnLoadTimeValid', isLoadAndUnLoadTimeValid);\n      },\n\n      setIsLoadAndUnLoadTimeNumberFlag(isLoadAndUnLoadTimeNumber) {\n        this.set('isLoadAndUnLoadTimeNumber', isLoadAndUnLoadTimeNumber);\n      },\n\n      onDistanceButtonClick() {\n        this._bodyClickFunction = event => {\n          this.actions.onBodyClickFunction(event, this);\n        };\n\n        document.body.addEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', true);\n        this.get('booking.bookingMap').native.on('click', e => {\n          this.setDistances(e.latlng);\n        });\n        Ember.$('.tomtom-map').addClass('pinpoint-cursor');\n      },\n\n      onBodyClickFunction(e, thisObject) {\n        const node = e.target;\n        let isInPage = true;\n\n        if (document.getElementsByClassName('map-widget')[0]) {\n          isInPage = document.getElementsByClassName('map-widget')[0].contains(node);\n        }\n\n        if (isInPage === false) {\n          thisObject.distanceReset();\n        }\n      },\n\n      onDistanceClose() {\n        document.body.removeEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', false);\n        this.distanceReset();\n        this.get('booking.bookingMap.native').off('click');\n        Ember.$('.tomtom-map').removeClass('pinpoint-cursor');\n      },\n\n      onDistanceReset() {\n        this.distanceReset();\n      },\n\n      onBoundaryToggle() {\n        this.toggleProperty('activeADABoundary');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/leg-form/component\", [\"exports\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/mapped-permIds\"], function (_exports, _moment, _unwrapProxy, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DISPLAY_NAME = 'Display Name';\n  const PHONE_NUMBER_PLACEHOLDER = 'Phone Number';\n  const ORIGIN_NUMBER_DESCRIPTION = 'ORIGIN NUMBER';\n  const DESTINATION_NUMBER_DESCRIPTION = 'DESTINATION NUMBER';\n  const ANCHOR = 'Appt';\n\n  var _default = Ember.Component.extend({\n    classNames: ['leg-form'],\n    anchorTypeOptions: null,\n    serviceTypeOptions: null,\n    rideshareTypeOptions: null,\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    subscriptionService: Ember.inject.service('subscription'),\n    permissionLayer: Ember.inject.service(),\n    maxDate: null,\n    minDate: null,\n    isFirstLeg: false,\n    markerType: null,\n    disablePick: false,\n    defaultFare: 0,\n    editRideshareSubscriptionGranted: false,\n    allowFundingAgency: false,\n    originNumberDescription: ORIGIN_NUMBER_DESCRIPTION,\n    destinationNumberDescription: DESTINATION_NUMBER_DESCRIPTION,\n    phoneNumberPlaceHolder: PHONE_NUMBER_PLACEHOLDER,\n    disableFareField: false,\n    fareCategoryOptions: null,\n    isInactive: false,\n    isNotFirstLeg: Ember.computed('isFirstLeg', function () {\n      return !this.get('isFirstLeg');\n    }),\n    canShowRemoveButton: Ember.computed('isFirstLeg', 'leg.purpose', 'isReturnTrip', function () {\n      return this.get('isReturnTrip');\n    }),\n    // Reg - NYAAR-18733\n    legFareCategory: Ember.computed('booking.selectedRiders.firstObject.fareCategory', function () {\n      const configFareCategories = this.get('booking').getSystemConfigFareCategories();\n      const fareCategoryDisplayName = this.get('booking.selectedRiders.firstObject.fareCategory');\n      const fareCategory = configFareCategories.find(configFareCategory => configFareCategory.get('displayName') === fareCategoryDisplayName);\n      return fareCategory.get('value')[DISPLAY_NAME];\n    }),\n    originPhoneNumber: Ember.computed('subscription.phoneNumbers.[]', 'subscription.phoneNumbers.@each.{areaCode,phoneNumber,fullPhoneNumber}', function () {\n      const phoneNumbers = this.get('subscription.phoneNumbers').toArray();\n      const originNumber = this.filterPhoneNumbersBasedDescription(phoneNumbers, ORIGIN_NUMBER_DESCRIPTION);\n\n      if (originNumber.length) {\n        return originNumber.get('firstObject.fullPhoneNumber');\n      }\n\n      return '';\n    }),\n    destinationPhoneNumber: Ember.computed('subscription.phoneNumbers.[]', 'subscription.phoneNumbers.@each.{areaCode,phoneNumber,fullPhoneNumber}', function () {\n      const phoneNumbers = this.get('subscription.phoneNumbers').toArray();\n      const destinationNumber = this.filterPhoneNumbersBasedDescription(phoneNumbers, DESTINATION_NUMBER_DESCRIPTION);\n\n      if (destinationNumber.length) {\n        return destinationNumber.get('firstObject.fullPhoneNumber');\n      }\n\n      return '';\n    }),\n    fundingAgencyOptions: Ember.computed('leg.requestTime', async function () {\n      const fundingAgencyOptions = [];\n      const riderId = this.get('riderRecord.id');\n      const requestLegTime = (0, _moment.default)(this.get('leg.requestTime'));\n      const localRiderRecord = await this.store.findRecord('rider', riderId);\n      const riderFundings = localRiderRecord.get('riderFundings');\n      riderFundings.forEach(riderFunding => {\n        const startDate = (0, _moment.default)(riderFunding.get('startDate')).startOf('day');\n        const endDate = (0, _moment.default)(riderFunding.get('endDate')).endOf('day');\n\n        if (requestLegTime.isBetween(startDate, endDate)) {\n          fundingAgencyOptions.push(riderFunding.fundingAgency);\n        }\n      });\n      return fundingAgencyOptions;\n    }),\n\n    // we should only show upto day  after tomorrow for booking\n    setMaxDate() {\n      const today = new Date();\n      const maxDate = new Date(today);\n      maxDate.setDate(maxDate.getDate() + 2);\n      maxDate.setHours(23, 59);\n      this.set('maxDate', maxDate); //regarding this ticket NYAAR-14603\n\n      const minDate = this.get('isEditMode') ? this.get('leg.requestTime') : new Date().setHours(0, 0, 0, 0);\n      this.set('minDate', minDate);\n    },\n\n    anchorObserver: Ember.observer('leg.anchor', 'legIndex', function () {\n      if (this.get('leg.anchor') === ANCHOR || this.get('legIndex') === 0) {\n        this.set('isFirstLeg', true);\n      } else {\n        this.set('isFirstLeg', false);\n      }\n    }),\n\n    init() {\n      this.set('disableFareField', !this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editFareSubscription, null));\n\n      this._super(...arguments);\n\n      const serviceTypeOptions = this.booking.getServiceTypeOptions();\n      const fareCategoryOptions = this.booking.getFareCategoryOptions();\n      const tripPurposeOptions = this.booking.getTripPurposeOptions();\n      this.setProperties({\n        anchorTypeOptions: [{\n          id: 'pick',\n          name: 'Pick'\n        }, {\n          id: 'drop',\n          name: 'Appt'\n        }],\n        serviceTypeOptions,\n        rideshareTypeOptions: [{\n          id: 0,\n          name: 'Allowed'\n        }, {\n          id: 2,\n          name: 'Not Allowed'\n        }],\n        fareCategoryOptions,\n        tripPurposeOptions\n      });\n      this.setMaxDate();\n      this.isFirstLegValidation();\n      this.defaultFare = this.get('leg.segments.firstObject.fare');\n      const subscriptionNoSharing = this.get('subscription.noSharing') ? this.get('subscription.noSharing') : 0;\n      this.set('allowFundingAgency', this.get('booking').getAllowFundingAgency());\n      this.set('subscription.noSharing', subscriptionNoSharing);\n      this.set('subscriptionService.noSharing', subscriptionNoSharing);\n      this.set('editRideshareSubscriptionGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editRideshareSubscription, null));\n      this.updateLocationForAddressSelect = this.updateLocationForAddressSelect.bind(this);\n    },\n\n    selectedTime: Ember.computed('leg.requestTime', function () {\n      return this.get('leg.requestTime');\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    isFirstLegValidation() {\n      if (this.get('legIndex') === 0 && this.get('leg.purpose') !== 'return') {\n        this.set('isFirstLeg', true);\n        this.set('disablePick', true);\n      } else {\n        this.set('isFirstLeg', false);\n        this.set('disablePick', false);\n      }\n    },\n\n    validateAddress(addressSearchResult, addressType) {\n      const streetAddress = addressSearchResult.get('streetAddress');\n      const postalCode = addressSearchResult.get('postalCode');\n      const lat = addressSearchResult.get('lat');\n      const lng = addressSearchResult.get('lng');\n\n      if (lat === 0 || lng === 0) {\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid ${addressType} address.`);\n        return false;\n      }\n\n      if (Ember.isNone(streetAddress) || Ember.isNone(postalCode)) {\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid ${addressType} address.`);\n        return false;\n      }\n\n      if (Ember.isEmpty(streetAddress) || Ember.isEmpty(postalCode)) {\n        this.get('booking').showErrorMessage(`Unknown Address. Please enter a valid ${addressType} address.`);\n        return false;\n      }\n\n      return true;\n    },\n\n    async updateLocationForAddressSelect(addressRecord, close, selectType) {\n      const addressType = selectType === 'pick' ? `${selectType}up` : `${selectType}off`;\n      const segment = selectType === 'pick' ? this.get('leg.segments.firstObject') : this.get('leg.segments.lastObject');\n      const segmentStop = segment.get(`${selectType}`);\n      const place = segment.get(`${selectType}.place`);\n      let address = addressRecord;\n      this.set('booking.canSave', true);\n\n      if (!address) {\n        address = segment.get(`${selectType}.place.address`);\n        place.set('address', addressRecord);\n        place.set('location', null);\n        this.booking.setActiveAddress(address);\n        return;\n      }\n\n      if (!this.validateAddress(address, addressType)) {\n        return;\n      }\n\n      const lat = address.get('lat');\n      const lng = address.get('lng');\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const beNomadAddress = address.get('beNomadAddress');\n      const geoNode = await this.booking.getAddressGeoNode(lat, lng, beNomadAddress, addressType);\n\n      if (!geoNode || Ember.isEmpty(geoNode.zone.zoneName) || geoNode && geoNode.zone.zoneName <= '0') {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.booking.showErrorMessage('Location must be within the agency service boundary.');\n        return;\n      }\n\n      const zoneName = this.get('store').peekRecord('zone-type', geoNode.zone.zoneName);\n      address.set('zName', zoneName.get('displayName'));\n      address.set('zoneName', zoneName);\n\n      if (!address.get('zoneName.name')) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.booking.showErrorMessage('Location must be within the agency service boundary.');\n        return;\n      }\n\n      const locationRecord = this.store.createRecord('location', {\n        lat,\n        lng\n      });\n      locationRecord.set('geoNode', geoNode.geonode);\n      place.set('location', locationRecord);\n      place.set('address', address);\n      segmentStop.set('notes', address.notes || '');\n      this.booking.setActiveAddress(address);\n      if (close) close();\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    filterPhoneNumbersBasedDescription(subscriptionPhoneNumbers, numberDescription) {\n      const filteredPhoneNumbers = subscriptionPhoneNumbers.filter(number => {\n        return number.get('description') === numberDescription;\n      });\n      return filteredPhoneNumbers;\n    },\n\n    actions: {\n      onDateChange(value) {\n        const rTime = this.get('leg.requestTime');\n        const currentDateAndTime = (0, _moment.default)(rTime);\n        const selectedDate = (0, _moment.default)(value[0]);\n        selectedDate.hour(currentDateAndTime.hour());\n        selectedDate.minutes(currentDateAndTime.minutes());\n        selectedDate.seconds(currentDateAndTime.seconds());\n        const selectedDateObjectWithTime = selectedDate.toDate();\n        this.set('leg.requestTime', selectedDateObjectWithTime);\n        this.get('updateADABoundary')(selectedDateObjectWithTime);\n        const legIndexWithinTotalLegs = this.get('booking.activeBooking.legs').indexOf(this.get('leg'));\n        this.get('validateRequestDateTime')(this.get('leg'), this.get('isReturnTrip'));\n\n        if (legIndexWithinTotalLegs === 0) {\n          this.get('onFirstLegDateChange')();\n        }\n      },\n\n      onTimeChange(value) {\n        const rTime = this.get('leg.requestTime');\n        const currentDateAndTime = (0, _moment.default)(rTime);\n        const selectedDate = (0, _moment.default)(value);\n        const currentYear = currentDateAndTime.year();\n        const currentMonth = currentDateAndTime.month();\n        const currentDay = currentDateAndTime.date();\n        selectedDate.year(currentYear);\n        selectedDate.month(currentMonth);\n        selectedDate.date(currentDay);\n        const selectedDateObjectWithTime = selectedDate.toDate();\n        this.set('leg.requestTime', selectedDateObjectWithTime);\n        this.get('validateRequestDateTime')(this.get('leg'), this.get('isReturnTrip'));\n        this.get('updateADABoundary')(selectedDateObjectWithTime);\n      },\n\n      onChangeServiceType(selectedType) {\n        this.set('leg.serviceWindow', selectedType);\n      },\n\n      onPickAddressSelect(address, close) {\n        this.updateLocationForAddressSelect(address, close, 'pick');\n      },\n\n      onDropAddressSelect(address, close) {\n        this.updateLocationForAddressSelect(address, close, 'drop');\n      },\n\n      onPickOnMap(place, selectType) {\n        const activeDragPlace = this.booking.get('activeDragPlace');\n        this.set('booking.skipSetView', true);\n\n        if (!(0, _unwrapProxy.unwrapProxy)(place.get('address'))) {\n          this.get('booking').setEmptyAddressLocation(place);\n        }\n\n        if (!activeDragPlace) {\n          this.booking.set('activeDragPlace', place);\n        }\n\n        this.booking.set('addressSelectType', selectType);\n      },\n\n      toggleCalendar() {\n        this.calflatpickrRef.toggle();\n      },\n\n      toggleTime() {\n        this.timeflatpickrRef.toggle();\n      },\n\n      onLegRemoveClick(leg) {\n        this.get('onLegRemoveClick')(leg);\n      },\n\n      onRideshareChange(rideshareType) {\n        this.set('subscription.noSharing', rideshareType.id);\n        this.set('subscriptionService.noSharing', rideshareType.id);\n      },\n\n      onNumberChange(subscriptionPhoneNumbers, numberDescription, maskObj) {\n        const areaCode = maskObj.unmasked.substring(0, 3).trim();\n        const phoneNumber = maskObj.unmasked.substring(3).trim();\n        const filteredPhoneNumbers = this.filterPhoneNumbersBasedDescription(subscriptionPhoneNumbers, numberDescription); // for new subscription or if the subscription does'nt have a phone number\n\n        if (!filteredPhoneNumbers.length) {\n          const phoneNumberObj = {\n            type: 'HOME',\n            areaCode: areaCode,\n            phoneNumber: phoneNumber,\n            extension: '',\n            description: numberDescription,\n            mobileCarrier: 'yes',\n            useForSmsNotifications: false,\n            useForVoiceNotifications: true\n          };\n          const phoneNumberRecord = this.get('store').createRecord('subscription-phone-number', phoneNumberObj);\n          subscriptionPhoneNumbers.pushObject(phoneNumberRecord);\n          return;\n        }\n\n        filteredPhoneNumbers.set('firstObject.areaCode', areaCode);\n        filteredPhoneNumbers.set('firstObject.phoneNumber', phoneNumber);\n      },\n\n      onFareChange(segment, maskObj) {\n        segment.set('fare', maskObj.unmasked);\n      },\n\n      onFareCategoryChange(subscription, fareCategory) {\n        subscription.set('fareCategory', fareCategory);\n        this.get('updateFare')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/leg-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8StX0Y1Z\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowRemoveButton\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row col-12 ml-3 remove-col-padding\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 ml-1 remove-col-padding\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9 \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Leg Trip \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6 ml-0 remove-col-padding\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton float-right mr-1 btn-font-size\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLegRemoveClick\\\",[23,[\\\"leg\\\"]]],null]],[9],[0,\\\"\\\\n          Remove\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Request\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td-display\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters justify-content-between\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3 pr-1\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"leg\\\",\\\"anchor\\\"]],[23,[\\\"anchorTypeOptions\\\"]]],null],[23,[\\\"anchorTypeOptions\\\"]],[23,[\\\"isInactive\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"anchor\\\"]]],null]],[[\\\"value\\\"],[\\\"id\\\"]]]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 pr-1\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"icon-parent-div\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"allowInput\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"maxDate\\\",\\\"minDate\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"disabled\\\",\\\"date\\\",\\\"getFlatpickrRef\\\"],[\\\"en\\\",true,[23,[\\\"leg\\\",\\\"requestTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\"],null],[23,[\\\"maxDate\\\"]],[23,[\\\"minDate\\\"]],\\\"D, M j\\\",true,[27,\\\"or\\\",[[23,[\\\"disableRequestDate\\\"]],[23,[\\\"isInactive\\\"]]],null],[23,[\\\"selectedTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"calflatpickrRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[11,\\\"title\\\",\\\"Date disabled because subscriptions have recurring dates.\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\"],null]],[9],[0,\\\"\\\\n                            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar\\\"],[9],[10],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"icon-parent-div\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/timeflatpickr\\\",null,[[\\\"isFieldDisabled\\\",\\\"onChange\\\",\\\"value\\\",\\\"getFlatpickrRef\\\"],[[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\"],null],[23,[\\\"selectedTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"timeflatpickrRef\\\"]]],null]],null]]]],false],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleTime\\\"],null]],[9],[0,\\\"\\\\n                            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o\\\"],[9],[10],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Pickup\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td-display mr-1\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 remove-search-map-gaps col-10 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"initialAddresses\\\",\\\"autoFocus\\\",\\\"inputClass\\\",\\\"inputPlaceholder\\\",\\\"text\\\",\\\"selectedAddress\\\",\\\"onTextChange\\\",\\\"onAddressSelect\\\",\\\"isFieldDisabled\\\"],[[23,[\\\"addressesOfRiderToBook\\\"]],false,\\\"map-widget-location-search-box\\\",\\\"Search by Address\\\",[27,\\\"readonly\\\",[[23,[\\\"pickAddressText\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"pickAddressText\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPickAddressSelect\\\"],null],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\"],[\\\"bottom\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\",\\\"placeNameAddress\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[0,\\\"lat : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[0,\\\"lng : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"location\\\",\\\"lng\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[9],[0,\\\"zone : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\",\\\"zName\\\"]],false],[10],[0,\\\"\\\\n                    \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-1 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/address-place-search\\\",null,[[\\\"updateLocationForAddressSelect\\\",\\\"addressType\\\",\\\"riderRecord\\\",\\\"isFieldDisabled\\\"],[[23,[\\\"updateLocationForAddressSelect\\\"]],\\\"pick\\\",[23,[\\\"riderRecord\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-2 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton\\\"],[12,\\\"disabled\\\",[21,\\\"isInactive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\"]],\\\"pickup\\\"],null]],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Pickup Zone\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Note\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\",\\\"disabled\\\"],[\\\"Write a note\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"500\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"notes\\\"]]],null]],null],[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pick\\\",\\\"notes\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Phone\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"phoneNumberPlaceHolder\\\"]],\\\"999-999-9999\\\",[23,[\\\"originPhoneNumber\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[23,[\\\"subscription\\\",\\\"phoneNumbers\\\"]],[23,[\\\"originNumberDescription\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Dropoff\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"td-display mr-1\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/address-search\\\",null,[[\\\"inputClass\\\",\\\"inputPlaceholder\\\",\\\"text\\\",\\\"initialAddresses\\\",\\\"autoFocus\\\",\\\"isFieldDisabled\\\",\\\"onTextChange\\\",\\\"selectedAddress\\\",\\\"onAddressSelect\\\"],[\\\"map-widget-location-search-box\\\",\\\"Search by Address\\\",[27,\\\"readonly\\\",[[23,[\\\"dropAddressText\\\"]]],null],[23,[\\\"addressesOfRiderToBook\\\"]],false,[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"dropAddressText\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDropAddressSelect\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]]],null,{\\\"statements\\\":[[0,\\\"                      \\\"],[5,\\\"ember-tooltip\\\",[],[[\\\"@side\\\"],[\\\"bottom\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\",\\\"placeNameAddress\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[0,\\\"lat : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[0,\\\"lng : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"location\\\",\\\"lng\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[9],[0,\\\"zone : \\\"],[1,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\",\\\"zName\\\"]],false],[10],[0,\\\"\\\\n                      \\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-1 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/address-place-search\\\",null,[[\\\"updateLocationForAddressSelect\\\",\\\"addressType\\\",\\\"isFieldDisabled\\\",\\\"riderRecord\\\"],[[23,[\\\"updateLocationForAddressSelect\\\"]],\\\"drop\\\",[23,[\\\"isInactive\\\"]],[23,[\\\"riderRecord\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 ml-2 remove-search-map-gaps\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trip-locationButton\\\"],[12,\\\"disabled\\\",[21,\\\"isInactive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\"]],\\\"dropoff\\\"],null]],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin serviceTypeLabel\\\"],[9],[0,\\\"Drop off Zone\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Note\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\",\\\"disabled\\\"],[\\\"Write a note\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"500\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"notes\\\"]]],null]],null],[23,[\\\"leg\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"drop\\\",\\\"notes\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Phone\\\"],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"phoneNumberPlaceHolder\\\"]],\\\"999-999-9999\\\",[23,[\\\"destinationPhoneNumber\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[23,[\\\"subscription\\\",\\\"phoneNumbers\\\"]],[23,[\\\"destinationNumberDescription\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Fare Category\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"or\\\",[[23,[\\\"isFieldDisabled\\\"]],[23,[\\\"isInactive\\\"]]],null],[23,[\\\"subscription\\\",\\\"fareCategory\\\"]],[23,[\\\"fareCategoryOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onFareCategoryChange\\\",[23,[\\\"subscription\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[22,5,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Fare\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/number-mask\\\",null,[[\\\"placeholder\\\",\\\"inputClass\\\",\\\"decimal\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Amount\\\",\\\"fare-field\\\",true,[27,\\\"or\\\",[[23,[\\\"disableFareField\\\"]],[23,[\\\"isInactive\\\"]]],null],[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"fare\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onFareChange\\\",[23,[\\\"leg\\\",\\\"segments\\\",\\\"firstObject\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin serviceTypeLabel\\\"],[9],[0,\\\"Service Type\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"leg\\\",\\\"serviceWindow\\\"]],[23,[\\\"serviceTypeOptions\\\"]],false,[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"serviceWindow\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,4,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"allowFundingAgency\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Funding Agency\\\"],[10],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"leg\\\",\\\"fundingAgency\\\"]],[23,[\\\"fundingAgencyOptions\\\"]],false,[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"leg\\\",\\\"fundingAgency\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,3,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Purpose\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"subscription\\\",\\\"tripPurpose\\\"]],[23,[\\\"tripPurposeOptions\\\"]],[23,[\\\"tripPurpose\\\"]],\\\"displayName\\\",[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscription\\\",\\\"tripPurpose\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,2,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editRideshareSubscriptionGranted\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-float\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label label-margin\\\"],[9],[0,\\\"Rideshare\\\"],[10],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"subscription\\\",\\\"noSharing\\\"]],[23,[\\\"rideshareTypeOptions\\\"]]],null],[23,[\\\"rideshareTypeOptions\\\"]],false,[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRideshareChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/leg-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/passenger-list/component\", [\"exports\", \"adept-iq/config/placeholders\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/rider-phone-number\"], function (_exports, _placeholders, _mappedPermIds, _riderPhoneNumber) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    selectedRiders: null,\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    disablePhoneNumber: false,\n    isInactive: false,\n    passengerNotesSubscriptionGranted: false,\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n      const editableRecords = this.get('editableRecords');\n      this.set('selectedRiders', [editableRecords[1]]);\n      const rider = store.peekRecord('rider', editableRecords[1].id);\n      editableRecords[1].set('rider', rider);\n      this.set('passengerNotesSubscriptionGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editPassengerNotesSubscription));\n    },\n\n    actions: {\n      onNumberChange(rider, maskObj) {\n        rider.set('formattedPhoneNumber', maskObj.unmasked);\n        const areaCode = maskObj.unmasked.substring(0, 3).trim();\n        const phoneNumber = maskObj.unmasked.substring(3).trim();\n        const notificationPhoneNumbers = rider.get('notificationPhoneNumbers'); // the rider does have a main phone number from nyct\n\n        if (notificationPhoneNumbers.length == 0) {\n          const phoneNumberObj = {\n            type: _riderPhoneNumber.MAIN_PHONE_TYPE,\n            areaCode: areaCode,\n            phoneNumber: phoneNumber,\n            extension: '',\n            description: 'MAIN CONTACT #',\n            useForSmsNotifications: false,\n            useForVoiceNotifications: true\n          };\n          notificationPhoneNumbers.pushObject(phoneNumberObj);\n        } else {\n          const updatedNotificationPhoneNumbers = notificationPhoneNumbers.map(phoneNumberObj => {\n            if (phoneNumberObj.type.toLowerCase() == _riderPhoneNumber.MAIN_PHONE_TYPE) {\n              return { ...phoneNumberObj,\n                areaCode,\n                phoneNumber\n              };\n            }\n\n            return phoneNumberObj;\n          });\n          rider.set('notificationPhoneNumbers', updatedNotificationPhoneNumbers);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/passenger-list/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"gLllrZlM\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderRecord\\\",\\\"eligibility\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passanger-list-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"selectedRiders\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"row-hidden\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"firstName\\\"]]],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"lastName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"ID\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"riderId\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Date of Birth\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"dobFormatted\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Current Age\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"age\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Passcode\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border border-success\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"text-success\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,1,[\\\"passcode\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"field-label-right\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n             \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\",\\\"disabled\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[22,1,[\\\"formattedPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[22,1,[]]],null],[27,\\\"or\\\",[[23,[\\\"disablePhoneNumber\\\"]],[23,[\\\"isInactive\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"field-label-right align-top\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"border\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"cols\\\",\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"focus-out\\\"],[\\\"3\\\",\\\"14\\\",\\\"form-control\\\",\\\"Write a Note\\\",[22,1,[\\\"notes\\\"]],[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"passengerNotesSubscriptionGranted\\\"]]],null],[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[22,1,[\\\"notes\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"eligibility-group\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Eligibility\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"eligibility-rows\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,1,[\\\"rider\\\",\\\"futureEligibilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"eligibility-row\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"eligibility-category\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,2,[\\\"categoryDisplayName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"eligibility-condition\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,2,[\\\"conditionDisplayName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"eligibility-dates\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,2,[\\\"formattedEligibilityStartEnd\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/passenger-list/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/service-needs-form/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['service-needs-form', 'travel-needs-form']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/service-needs-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Hmz3idJ2\",\n    \"block\": \"{\\\"symbols\\\":[\\\"serviceNeed\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"subscriptionServiceNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters mt-1\\\"],[9],[0,\\\"\\\\n       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10 pl-0  ml-3\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[22,1,[\\\"serviceNeedType\\\",\\\"displayName\\\"]]],[11,\\\"readonly\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 p-0 ml-1\\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[10],[0,\\\"\\\\n     \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/service-needs-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['Subscription-changes-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n      const sort = this.buildSortParam();\n\n      if (sort) {\n        params.sorts.push(sort);\n      }\n\n      return this._super(...arguments).then(records => {\n        return records;\n      });\n    },\n\n    async query() {\n      return this.get('subscriptionBookings');\n    },\n\n    actions: {\n      onPlusIconClick() {\n        this.get('addRiderActivityLog')();\n      },\n\n      onColumnClick(column) {\n        this.set('state', {\n          sortAsc: column.ascending,\n          sortId: column.get('id')\n        });\n      },\n\n      onSubscriptionChangesModalClose() {\n        this.onSubscriptionChangesModalClose();\n      },\n\n      onSubscriptionChangesAccept() {\n        this.onSubscriptionChangesAccept();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    rowSelectionType: 'checkbox',\n    modelName: 'subscription-booking',\n    title: 'Bookings',\n    defaultSortId: 'time',\n    defaultSortAsc: true,\n    queryModelData: false,\n    showSelectedRowLength: false,\n    columns: [{\n      id: 'action',\n      index: 0,\n      type: 'text',\n      label: 'Action',\n      defaultWidth: 180,\n      sortable: true,\n      valuePath: 'actionDescription',\n      searchable: true\n    }, {\n      id: 'time',\n      index: 1,\n      type: 'date',\n      label: 'Date/Request/Time',\n      defaultWidth: 130,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'time',\n      searchable: true,\n      sortable: true\n    }, {\n      id: 'pickAddress',\n      index: 2,\n      type: 'text',\n      label: 'Pickup Address',\n      defaultWidth: 210,\n      sortable: true,\n      searchable: true,\n      valuePath: 'pickAddress'\n    }, {\n      id: 'pickCity',\n      index: 3,\n      type: 'text',\n      label: 'Pickup City',\n      defaultWidth: 100,\n      sortable: true,\n      searchable: true,\n      valuePath: 'pickCity'\n    }, {\n      id: 'dropAddress',\n      index: 4,\n      type: 'text',\n      label: 'Drop off Address',\n      defaultWidth: 210,\n      sortable: true,\n      searchable: true,\n      valuePath: 'dropAddress'\n    }, {\n      id: 'dropCity',\n      index: 5,\n      type: 'text',\n      label: 'Drop off Address',\n      defaultWidth: 100,\n      sortable: true,\n      searchable: true,\n      valuePath: 'dropCity'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"adpY5SUA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"subscription-detail-overlay\\\",\\\"subscription-detail-container\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"subscription-details-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-heading mb-2\\\"],[9],[0,\\\"\\\\n        Subscription Bookings\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"x-button mr-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"close\\\"],[11,\\\"aria-label\\\",\\\"Close\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubscriptionChangesModalClose\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\"×\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"subscription-message-notes\\\"],[9],[0,\\\"Select the booking action(s) to be processed:\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"subscription-bookings-body\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],false,[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/template.hbs' @ L43:C12) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n          \\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/template.hbs' @ L55:C13) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/template.hbs' @ L62:C13) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"subscription-buttons pl-5\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-light subscription-accept-btn v-btn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubscriptionChangesAccept\\\"],null]],[9],[0,\\\"Accept\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/subscription-changes-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/subscription-form/component\", [\"exports\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/placeholders\", \"adept-iq/models/route-template\"], function (_exports, _moment, _unwrapProxy, _placeholders, _routeTemplate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['subscription-form'],\n    statusOptions: null,\n    suspensionTypes: null,\n    activeFromMinDate: null,\n    activeToMinDate: null,\n    statusFlag: true,\n    booking: Ember.inject.service(),\n    subscriptionService: Ember.inject.service('subscription'),\n    store: Ember.inject.service(),\n    //placeholders\n    TIME_PLACEHOLDER: _placeholders.TIME_PLACEHOLDER,\n\n    setMaxDate() {\n      const minDate = (0, _moment.default)(this.get('subscription.startDate')).startOf('day').toDate();\n      const maxDate = (0, _moment.default)(this.get('subscription.endDate')).endOf('day').toDate();\n      this.set('maxDate', maxDate);\n      this.set('minDate', minDate);\n      this.set('activeToMinDate', minDate);\n    },\n\n    suspendedDateVisibility: Ember.computed('subscription.exclusions.firstObject.suspend', function () {\n      return !this.get('subscription.exclusions.firstObject.suspend');\n    }),\n\n    subscriptionInShiftBreak(pickTimeMoment, dropTimeMoment, shiftBreaks) {\n      const workingDay = pickTimeMoment ? pickTimeMoment.format('YYYY-MM-DD') : null;\n      let inShiftBreak = false;\n      shiftBreaks.forEach(shiftBreak => {\n        const breakStart = (0, _moment.default)(`${workingDay} ${shiftBreak.get('promisedStart')}`, 'YYYY-MM-DD HH:mm');\n        const breakEnd = (0, _moment.default)(breakStart);\n        breakEnd.add(shiftBreak.get('minutesPlannedDuration'), 'minutes');\n\n        if (breakStart.isBetween(pickTimeMoment, dropTimeMoment, null, '[]') || breakEnd.isBetween(pickTimeMoment, dropTimeMoment, null, '[]') || pickTimeMoment.isBetween(breakStart, breakEnd, null, '[]')) {\n          inShiftBreak = true;\n        }\n      });\n      return inShiftBreak;\n    },\n\n    filteredRouteTemplates: Ember.computed('routeTemplates', 'notHavePickAndDropTime', 'subscription.latestRecurrence.{selectedDOWHolidays,subscriptionStartDate,subscriptionEndDate}', function () {\n      const routeTemplates = this.get('routeTemplates');\n      const notHavePickAndDropTime = this.get('notHavePickAndDropTime');\n      const recurrencePattern = this.get('subscription.latestRecurrence');\n      const selectedDOWHolidays = recurrencePattern.get('selectedDOWHolidays');\n      const subscriptionStartDate = (0, _moment.default)(recurrencePattern.get('subscriptionStartDate'));\n      const subscriptionEndDate = (0, _moment.default)(recurrencePattern.get('subscriptionEndDate'));\n      const pickTimeMoment = this.get('subscriptionService.pickTimeMoment');\n      const dropTimeMoment = this.get('subscriptionService.dropTimeMoment');\n      const workingDay = pickTimeMoment ? pickTimeMoment.format('YYYY-MM-DD') : null;\n\n      if (notHavePickAndDropTime) {\n        return [];\n      }\n\n      const availableRouteTemplates = routeTemplates.filter(routeTemplate => {\n        const active = routeTemplate.get('active');\n        const availabilities = [];\n        if (!active) return false;\n        selectedDOWHolidays.forEach(day => {\n          const availability = routeTemplate[`${day}Availability`];\n\n          if (Ember.isPresent(availability)) {\n            const shiftBreaks = availability.get('shiftBreaks');\n            const startTime = availability.get('startTime');\n            const endTime = availability.get('endTime');\n            const shiftStartMoment = (0, _moment.default)(availability.get('shiftStart'));\n            const routeLength = availability.get('routeLength');\n            const startShift = (0, _moment.default)(`${workingDay} ${shiftStartMoment.format('HH:mm')}`, 'YYYY-MM-DD HH:mm');\n            const endShift = (0, _moment.default)(startShift);\n            const duration = routeLength.split(':');\n            const hours = duration[0];\n            const minutes = duration.length > 1 ? duration[1] : 0;\n            endShift.add(hours, 'hours');\n            endShift.add(minutes, 'minutes');\n\n            if (subscriptionStartDate.isSameOrAfter(startTime) && subscriptionEndDate.isSameOrBefore(endTime) && pickTimeMoment.isSameOrAfter(startShift) && dropTimeMoment.isSameOrBefore(endShift) && !this.subscriptionInShiftBreak(pickTimeMoment, dropTimeMoment, shiftBreaks)) {\n              availabilities.push(day);\n            }\n          }\n        });\n        return availabilities.length === selectedDOWHolidays.length;\n      });\n      return availableRouteTemplates.sort((a, b) => a.name.localeCompare(b.name));\n    }),\n    isNotManual: Ember.computed('subscription.isManualSchedulingMode', function () {\n      const isManualSchedulingMode = this.get('subscription.isManualSchedulingMode');\n      return !isManualSchedulingMode;\n    }),\n    noActiveDates: Ember.computed('subscription.recurrencePatterns.@each.{selectedDOWHolidays,subscriptionStartDate,subscriptionEndDate}', function () {\n      const recurrencePatterns = this.get('subscription.recurrencePatterns').toArray();\n      let noActiveDates = true;\n      recurrencePatterns.forEach(pattern => {\n        const selectedDOWHolidays = pattern.get('selectedDOWHolidays');\n        const subscriptionStartDate = pattern.get('subscriptionStartDate');\n        const subscriptionEndDate = pattern.get('subscriptionEndDate');\n\n        if (Ember.isPresent(subscriptionStartDate) && Ember.isPresent(subscriptionEndDate) && selectedDOWHolidays.length > 0) {\n          noActiveDates = false;\n        }\n      });\n      return noActiveDates;\n    }),\n    notHavePickAndDropTime: Ember.computed('isNotManual', 'subscriptionService.{pickTimeMoment,dropTimeMoment}', function () {\n      const isNotManual = this.get('isNotManual');\n      const pickTimeMoment = this.get('subscriptionService.pickTimeMoment');\n      const dropTimeMoment = this.get('subscriptionService.dropTimeMoment');\n      return isNotManual || !pickTimeMoment || !dropTimeMoment;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.setMaxDate();\n      this.setProperties({\n        statusOptions: [{\n          id: 'active',\n          name: 'Active'\n        }, {\n          id: 'inactive',\n          name: 'Inactive'\n        }, {\n          id: 'denied',\n          name: 'Denied'\n        }],\n        suspensionTypes: [{\n          id: 'suspension',\n          name: 'Suspension'\n        }, {\n          id: 'clientRequested',\n          name: 'Client Requested'\n        }]\n      });\n      const subscriptionStatus = this.get('subscription.status') ? this.get('subscription.status') : 'active';\n      const supensionType = this.get('subscription.exclusions.firstObject.type') ? this.get('subscription.exclusions.firstObject.type') : 'suspension';\n      const routeTemplates = this.get('store').peekAll('route-template');\n      this.set('routeTemplates', routeTemplates);\n      this.set('subscription.status', subscriptionStatus);\n      this.set('subscription.exclusions.firstObject.type', supensionType);\n      this.set('activeFromMinDate', this.getActiveSuspendMinDate('startDate'));\n      this.set('activeToMinDate', this.getActiveSuspendMinDate('endDate'));\n      this.get('setupManualSubscription')();\n      this.suspendCheck();\n    },\n\n    // NYAAR-13554 Subscription - From date is not displayed upon editing the subscription\n    getActiveSuspendMinDate(dateType) {\n      const minDate = this.get('isEditMode') ? this.getMinDate(this.get(`subscription.${dateType}`)) : 'today';\n      return minDate;\n    },\n\n    suspendCheck() {\n      const exclusion = this.get('subscription.exclusions.firstObject');\n      const suspensionChecked = exclusion.get('suspend');\n\n      if (!suspensionChecked) {\n        exclusion.set('startDate', null);\n        exclusion.set('endDate', null);\n      }\n    },\n\n    getMinDate(date) {\n      const currentDate = (0, _moment.default)().startOf('day');\n      return (0, _moment.default)(date).diff(currentDate) > 0 ? 'today' : date;\n    },\n\n    convertToRegularDateTime(value, originalDateTime) {\n      // keep the original date for comparison. We only care about the time\n      const dateTimeMoment = originalDateTime ? (0, _moment.default)(originalDateTime).startOf('day') : (0, _moment.default)().startOf('day');\n      const timeArray = value.masked.split(':');\n      dateTimeMoment.add(timeArray[0], 'hours');\n      dateTimeMoment.add(timeArray[1], 'minutes');\n      return dateTimeMoment;\n    },\n\n    checkValidateOrder(type) {\n      const pickTimeMoment = this.get('subscriptionService.pickTimeMoment');\n      const dropTimeMoment = this.get('subscriptionService.dropTimeMoment');\n      this.set('overrideErrorText', '');\n      let isValid = true;\n\n      if (pickTimeMoment.isSameOrAfter(dropTimeMoment)) {\n        this.get('booking').showErrorMessage('Dropoff Time must be after Pickup Time.');\n        isValid = false;\n      }\n\n      if (!isValid) {\n        if (type === 'pick') {\n          Ember.run.schedule('afterRender', () => {\n            this.set('subscriptionService.pickTime');\n            this.set('subscriptionService.pickTimeMoment');\n            this.set('subscription.originPlannedEta');\n          });\n        } else {\n          Ember.run.schedule('afterRender', () => {\n            this.set('subscriptionService.dropTime');\n            this.set('subscriptionService.dropTimeMoment');\n            this.set('subscription.destinationPlannedEta');\n          });\n        }\n      }\n\n      return isValid;\n    },\n\n    validateManualRoute() {\n      const routeTemplate = (0, _unwrapProxy.unwrapProxy)(this.get('subscription.routeTemplate'));\n      const filteredRouteTemplates = this.get('filteredRouteTemplates');\n      if (this.get('isNotManual') || Ember.isEmpty(routeTemplate)) return;\n      const templateFound = filteredRouteTemplates.find(template => {\n        return template.id === routeTemplate.id;\n      });\n\n      if (Ember.isEmpty(templateFound)) {\n        this.set('subscription.routeTemplate');\n      }\n    },\n\n    actions: {\n      toggleCalendar(flatrRef) {\n        flatrRef.toggle();\n      },\n\n      onSuspendCheckBoxClick(path, event) {\n        this.set(path, event.target.checked);\n        this.suspendCheck();\n        const isSuspend = this.get(path);\n\n        if (!isSuspend) {\n          const exclusion = this.get('subscription.exclusions.firstObject');\n          exclusion.set('startDate', null);\n          exclusion.set('endDate', null);\n        }\n      },\n\n      onManualCheckBoxClick(path, event) {\n        if (event.target.checked) {\n          this.set(path, _routeTemplate.MANUAL_SCHEDULING_MODE);\n        } else {\n          this.set(path, '');\n          this.set('subscriptionService.pickTime');\n          this.set('subscriptionService.pickTimeMoment');\n          this.set('subscriptionService.dropTime');\n          this.set('subscriptionService.dropTimeMoment');\n          this.set('subscription.schedulingMode', _routeTemplate.AUTOMATIC_SCHEDULING_MODE);\n          this.set('subscription.originPlannedEta');\n          this.set('subscription.destinationPlannedEta');\n          this.set('subscription.routeTemplate');\n        }\n      },\n\n      onCheckBoxClick(path, event) {\n        this.set(path, event.target.checked);\n        this.suspendCheck();\n        this.validateManualRoute();\n      },\n\n      onDateChange(path, type, value) {\n        const selectedDate = (0, _moment.default)(value[0]);\n        const rTime = this.get('leg.requestTime');\n        const currentDateAndTime = (0, _moment.default)(rTime);\n        selectedDate.hour(currentDateAndTime.hour());\n        selectedDate.minutes(currentDateAndTime.minutes());\n        selectedDate.seconds(currentDateAndTime.seconds());\n        const selectedDateObjectWithTime = selectedDate.toDate();\n        const currentDate = (0, _moment.default)().startOf('day');\n\n        if (path.indexOf('startDate') > -1) {\n          const prevStartDate = type === 'Subscription' ? this.get('booking.previousSubscriptionStartDate') : this.get('booking.previousSubscriptionSuspendStartDate');\n          this.get('booking').validateDateNotToBePastDate(selectedDateObjectWithTime, currentDate, prevStartDate, type, 'From');\n        } else {\n          const prevEndDate = type === 'Subscription' ? this.get('booking.previousSubscriptionEndDate') : this.get('booking.previousSubscriptionSuspendEndDate');\n          this.get('booking').validateDateNotToBePastDate(selectedDateObjectWithTime, currentDate, prevEndDate, type, 'To');\n        } // suspend from date should be less than or equal to suspend to date\n\n\n        const exclusion = this.get('subscription.exclusions.firstObject');\n\n        if (path.indexOf('startDate') > -1) {\n          const exclusionStartDate = selectedDate.startOf('day');\n          const exclusionEndDate = (0, _moment.default)(exclusion.get('endDate')).startOf('day');\n\n          if (exclusionStartDate.isAfter(exclusionEndDate)) {\n            this.get('booking').showErrorMessage(`Please select valid ${type} From date.`);\n          } // NYAAR-18080 Suspend date calendar should show the month according to the active date and not blank\n\n\n          if (exclusion.get('startDate') && selectedDate.isAfter(exclusion.get('startDate'))) {\n            exclusion.set('startDate', null);\n          }\n\n          if (exclusion.get('endDate') && selectedDate.isAfter(exclusion.get('endDate'))) {\n            exclusion.set('endDate', null);\n          }\n        } else {\n          const exclusionStartDate = (0, _moment.default)(exclusion.get('startDate')).startOf('day');\n          const exclusionEndDate = selectedDate.startOf('day');\n\n          if (exclusionStartDate.isAfter(exclusionEndDate)) {\n            this.get('booking').showErrorMessage(`Please select valid ${type} To date.`);\n          } // NYAAR-18080 Suspend date calendar should show the month according to the active date and not blank\n\n\n          if (exclusion.get('startDate') && selectedDate.isBefore(exclusion.get('startDate'))) {\n            exclusion.set('startDate', null);\n          }\n\n          if (exclusion.get('endDate') && selectedDate.isBefore(exclusion.get('endDate'))) {\n            exclusion.set('endDate', null);\n          }\n        }\n\n        this.set(path, selectedDateObjectWithTime);\n        this.setMaxDate();\n        this.validateManualRoute();\n      },\n\n      onChangePickTime(value) {\n        this.set('subscriptionService.pickTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('subscriptionService.pickTimeMoment');\n          this.set('subscription.originPlannedEta');\n          return;\n        }\n\n        const pickTimeMoment = this.convertToRegularDateTime(value, this.get('subscriptionService.previousOriginPlannedEta'));\n        const dropTimeMoment = this.get('subscriptionService.dropTimeMoment');\n        this.set('subscriptionService.pickTimeMoment', pickTimeMoment);\n        this.set('subscription.originPlannedEta', pickTimeMoment.toDate());\n\n        if (dropTimeMoment) {\n          this.checkValidateOrder('pick');\n        }\n\n        this.validateManualRoute();\n      },\n\n      onChangeDropTime(value) {\n        this.set('subscriptionService.dropTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('subscriptionService.dropTimeMoment');\n          this.set('subscription.destinationPlannedEta');\n          return;\n        }\n\n        const dropTimeMoment = this.convertToRegularDateTime(value, this.get('subscriptionService.previousDestinationPlannedEta'));\n        const pickTimeMoment = this.get('subscriptionService.pickTimeMoment');\n        this.set('subscriptionService.dropTimeMoment', dropTimeMoment);\n        this.set('subscription.destinationPlannedEta', dropTimeMoment.toDate());\n\n        if (pickTimeMoment) {\n          this.checkValidateOrder('drop');\n        }\n\n        this.validateManualRoute();\n      },\n\n      onRouteTemplateChange(subscription, routeTemplate) {\n        subscription.set('routeTemplate', routeTemplate);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/subscription-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"FmMrXIzE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"Status \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\",\\\"disabled\\\"],[[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"subscription\\\",\\\"computedStatus\\\"]],[23,[\\\"statusOptions\\\"]]],null],[23,[\\\"statusOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscription\\\",\\\"computedStatus\\\"]]],null]],[[\\\"value\\\"],[\\\"id\\\"]]],[23,[\\\"isInactive\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-1 ml-1\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"  \\\"],[7,\\\"label\\\"],[9],[0,\\\"Active Dates\\\"],[10],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6 pl-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"From\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 pl-1\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"placeholder\\\",\\\"locale\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"minDate\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"disabled\\\",\\\"date\\\",\\\"getFlatpickrRef\\\"],[\\\"Date\\\",\\\"en\\\",[23,[\\\"subscription\\\",\\\"startDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",\\\"subscription.startDate\\\",\\\"Subscription\\\"],null],[23,[\\\"activeFromMinDate\\\"]],\\\"D, M j\\\",true,[27,\\\"or\\\",[[23,[\\\"isEditMode\\\"]],[23,[\\\"isInactive\\\"]]],null],[23,[\\\"subscription\\\",\\\"startDate\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscriptionFromRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n                    \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"disabled\\\",[21,\\\"isInactive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\",[23,[\\\"subscriptionFromRef\\\"]]],null]],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar cal-icon\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6 pl-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 mr-3\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"To\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 pl-1\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"placeholder\\\",\\\"locale\\\",\\\"minDate\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"disabled\\\",\\\"date\\\",\\\"getFlatpickrRef\\\"],[\\\"Date\\\",\\\"en\\\",[23,[\\\"activeToMinDate\\\"]],[23,[\\\"subscription\\\",\\\"endDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",\\\"subscription.endDate\\\",\\\"Subscription\\\"],null],\\\"D, M j\\\",true,[23,[\\\"isInactive\\\"]],[23,[\\\"subscription\\\",\\\"endDate\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscriptionToRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n                    \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"disabled\\\",[21,\\\"isInactive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\",[23,[\\\"subscriptionToRef\\\"]]],null]],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar cal-icon\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"mleft subscription-label\\\"],[9],[0,\\\"Days\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 d-flex ml-n2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"sun\\\",\\\"checkbox\\\",\\\"checkbox-sun\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"sunday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.sunday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-sun\\\"],[9],[0,\\\"S\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"mon\\\",\\\"checkbox\\\",\\\"checkbox-mon\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"monday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.monday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-mon\\\"],[9],[0,\\\"M\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"tue\\\",\\\"checkbox\\\",\\\"checkbox-tue\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"tuesday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.tuesday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-tue\\\"],[9],[0,\\\"T\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"wed\\\",\\\"checkbox\\\",\\\"checkbox-wed\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"wednesday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.wednesday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-wed\\\"],[9],[0,\\\"W\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"thu\\\",\\\"checkbox\\\",\\\"checkbox-thu\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"thursday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.thursday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-thu\\\"],[9],[0,\\\"T\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"fri\\\",\\\"checkbox\\\",\\\"checkbox-fri\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"friday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.friday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-fri\\\"],[9],[0,\\\"F\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n2\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"sat\\\",\\\"checkbox\\\",\\\"checkbox-sat\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"saturday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.saturday\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"checkbox-sat\\\"],[9],[0,\\\"S\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"daysCheckbox col-1 ml-n4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"holiday\\\",\\\"checkbox\\\",\\\"holiday\\\",[23,[\\\"subscription\\\",\\\"latestRecurrence\\\",\\\"holiday\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckBoxClick\\\",\\\"subscription.latestRecurrence.holiday\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"holidaysField\\\"],[11,\\\"for\\\",\\\"holiday\\\"],[9],[0,\\\"Holidays\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2 ml-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12 mt-0 row-check-box\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"manualRoute\\\",\\\"checkbox\\\",\\\"manualRoute\\\",[23,[\\\"subscription\\\",\\\"isManualSchedulingMode\\\"]],[27,\\\"or\\\",[[23,[\\\"noActiveDates\\\"]],[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onManualCheckBoxClick\\\",\\\"subscription.schedulingMode\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"manualRoute\\\"],[11,\\\"class\\\",\\\"m-0\\\"],[9],[0,\\\"Manual\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pick-time-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"manual-time-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"manual-time-label\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"Pick Time\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"manual-time-input\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"manual-route-pickup-time\\\",[23,[\\\"subscriptionService\\\",\\\"pickTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[27,\\\"or\\\",[[23,[\\\"isNotManual\\\"]],[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"drop-time-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"manual-time-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"manual-time-label\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"Drop Time\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"manual-time-input\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"manual-route-dropoff-time\\\",[23,[\\\"subscriptionService\\\",\\\"dropTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[27,\\\"or\\\",[[23,[\\\"isNotManual\\\"]],[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 mr-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"Route \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"subscription\\\",\\\"routeTemplate\\\"]],[23,[\\\"filteredRouteTemplates\\\"]],false,[27,\\\"or\\\",[[23,[\\\"notHavePickAndDropTime\\\"]],[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteTemplateChange\\\",[23,[\\\"subscription\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2 ml-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12 mt-0 row-check-box\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"id\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"suspendDays\\\",\\\"checkbox\\\",\\\"suspendDays\\\",[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"suspend\\\"]],[23,[\\\"isInactive\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSuspendCheckBoxClick\\\",\\\"subscription.exclusions.firstObject.suspend\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"suspendDays\\\"],[11,\\\"class\\\",\\\"m-0\\\"],[9],[0,\\\"Suspend Dates\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6 pl-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"From\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 pl-1\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"placeholder\\\",\\\"locale\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"maxDate\\\",\\\"minDate\\\",\\\"date\\\",\\\"getFlatpickrRef\\\",\\\"disabled\\\",\\\"monthSelectorType\\\"],[\\\"Date\\\",\\\"en\\\",[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"startDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",\\\"subscription.exclusions.firstObject.startDate\\\",\\\"Suspend\\\"],null],\\\"D, M j\\\",true,[23,[\\\"maxDate\\\"]],[23,[\\\"minDate\\\"]],[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"startDate\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscriptionExclusionFromRef\\\"]]],null]],null],[27,\\\"or\\\",[[23,[\\\"suspendedDateVisibility\\\"]],[23,[\\\"isInactive\\\"]]],null],\\\"dropdown\\\"]]],false],[0,\\\"\\\\n                \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\",[23,[\\\"subscriptionExclusionFromRef\\\"]]],null]],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar cal-icon\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6 pl-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 mr-3\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"To\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 pl-1\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"placeholder\\\",\\\"locale\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"maxDate\\\",\\\"minDate\\\",\\\"date\\\",\\\"getFlatpickrRef\\\",\\\"disabled\\\",\\\"monthSelectorType\\\"],[\\\"Date\\\",\\\"en\\\",[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"endDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",\\\"subscription.exclusions.firstObject.endDate\\\",\\\"Suspend\\\"],null],\\\"D, M j\\\",true,[23,[\\\"maxDate\\\"]],[23,[\\\"minDate\\\"]],[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"endDate\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscriptionExclusionToRef\\\"]]],null]],null],[27,\\\"or\\\",[[23,[\\\"suspendedDateVisibility\\\"]],[23,[\\\"isInactive\\\"]]],null],\\\"dropdown\\\"]]],false],[0,\\\"\\\\n                    \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"input-button iconspan\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCalendar\\\",[23,[\\\"subscriptionExclusionToRef\\\"]]],null]],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar cal-icon\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 mr-2\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"subscription-label\\\"],[9],[0,\\\"Type \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"onchange\\\"],[[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"type\\\"]],[23,[\\\"suspensionTypes\\\"]]],null],[23,[\\\"suspensionTypes\\\"]],false,[27,\\\"or\\\",[[23,[\\\"suspendedDateVisibility\\\"]],[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"subscription\\\",\\\"exclusions\\\",\\\"firstObject\\\",\\\"type\\\"]]],null]],[[\\\"value\\\"],[\\\"id\\\"]]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/subscription-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Wde31tM8\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"new-booking-form-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\",\\\"canUndo\\\",\\\"onUndoClick\\\"],[[23,[\\\"subscriptionPanelTitle\\\"]],[27,\\\"and\\\",[[23,[\\\"canSave\\\"]],[27,\\\"not\\\",[[23,[\\\"isInactive\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null],[27,\\\"not\\\",[[23,[\\\"isInactive\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"passenger-name-list\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[21,\\\"riderFullNames\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"new-booking-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L20:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L21:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[[23,[\\\"passengerListTitle\\\"]],[23,[\\\"passengerCollapseState\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/subscription-form/passenger-list\\\",null,[[\\\"canSave\\\",\\\"disablePhoneNumber\\\",\\\"editableRecords\\\",\\\"isInactive\\\"],[[23,[\\\"canSave\\\"]],[23,[\\\"disablePhoneNumber\\\"]],[23,[\\\"editableRecords\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L34:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Details\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/subscription-form/trip-details-form\\\",null,[[\\\"riderRecord\\\",\\\"addressesOfRiderToBook\\\",\\\"disableRequestDate\\\",\\\"isReturnTrip\\\",\\\"legsInBooking\\\",\\\"onFirstLegDateChange\\\",\\\"validateRequestDateTime\\\",\\\"syncPickAndDrop\\\",\\\"isEditMode\\\",\\\"updateFare\\\",\\\"subscription\\\",\\\"pickAddressText\\\",\\\"dropAddressText\\\",\\\"updateADABoundary\\\",\\\"isInactive\\\"],[[23,[\\\"riderToBook\\\"]],[23,[\\\"addressesOfRiderToBook\\\"]],[23,[\\\"isSubscription\\\"]],false,[23,[\\\"tripLegsInBooking\\\"]],[23,[\\\"onFirstLegDateChange\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"validateRequestDateTime\\\"],null],[23,[\\\"syncPickAndDrop\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"updateFare\\\"]],[23,[\\\"subscription\\\"]],[23,[\\\"pickAddressText\\\"]],[23,[\\\"dropAddressText\\\"]],[23,[\\\"updateADABoundary\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L57:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[\\\"Travel Needs\\\",[23,[\\\"travelNeedCollapseState\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/subscription-form/travel-needs\\\",null,[[\\\"legTravelNeeds\\\",\\\"riderToBook\\\",\\\"riderTravelNeeds\\\",\\\"setLoadAndUnLoadTimeFlag\\\",\\\"setIsLoadAndUnLoadTimeNumberFlag\\\",\\\"legs\\\",\\\"updateFare\\\",\\\"editableRecords\\\",\\\"subscription\\\",\\\"isEditMode\\\",\\\"maxCompanionCount\\\",\\\"isInactive\\\"],[[23,[\\\"legTravelNeeds\\\"]],[23,[\\\"riderToBook\\\"]],[23,[\\\"riderTravelNeeds\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setLoadAndUnLoadTimeFlag\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"setIsLoadAndUnLoadTimeNumberFlag\\\"],null],[23,[\\\"activeLegsInBooking\\\"]],[23,[\\\"updateFare\\\"]],[23,[\\\"editableRecords\\\"]],[23,[\\\"subscription\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"maxCompanionCount\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L78:C9) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[\\\"Service Needs\\\",[23,[\\\"serviceNeedCollapseState\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/subscription-form/service-needs-form\\\",null,[[\\\"serviceNeeds\\\",\\\"subscriptionServiceNeeds\\\"],[[23,[\\\"serviceNeeds\\\"]],[23,[\\\"subscriptionServiceNeeds\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/iq-widgets/subscription-form/template.hbs' @ L89:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Subscription\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"iq-widgets/subscription-form/subscription-form\\\",null,[[\\\"subscription\\\",\\\"isEditMode\\\",\\\"setupManualSubscription\\\",\\\"editSubscriptionShowChanges\\\",\\\"isInactive\\\"],[[23,[\\\"subscription\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"setupManualSubscription\\\"]],[23,[\\\"editSubscriptionShowChanges\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"translucentOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-map-container\\\",\\\"middle left\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isComputingDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map map-widget-controls\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-box\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"computedDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"          Distance is \\\"],[1,[21,\\\"computedDistance\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            Please click to drop pin 1\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            Please click to drop pin 2\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-control right-control\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not-eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control reset-button\\\"],[9],[0,\\\"\\\\n            Reset\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceReset\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceClose\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map map-widget-controls\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map-header\\\"],[9],[0,\\\"Map\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"right-control\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control distance-icon\\\"],[9],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not-eq\\\",[null,[23,[\\\"adaBoundary\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"map-widget-button initial-focus-control ada-boundary-icon \\\",[27,\\\"if\\\",[[23,[\\\"activeADABoundary\\\"]],\\\"active\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onBoundaryToggle\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/subscription-form/booking-map\\\",null,[[\\\"elementId\\\",\\\"widget\\\",\\\"latLongPairs\\\",\\\"activeADABoundary\\\",\\\"adaBoundary\\\"],[\\\"booking\\\",[23,[\\\"widget\\\"]],[23,[\\\"latLongPairs\\\"]],[23,[\\\"activeADABoundary\\\"]],[23,[\\\"adaBoundary\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sec-w-m\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isProgressShown\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Edit Subscription\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\"Do you want to save your progress?\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-2 mb-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[9],[0,\\\"\\\\n            No\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onProgressNoClick\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[9],[0,\\\"\\\\n            Yes\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onYesButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[\\\"Create Subscription\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\"Do you want to save your progress?\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-2 mb-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[9],[0,\\\"\\\\n            No\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onProgressNoClick\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[9],[0,\\\"\\\\n            Yes\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onYesButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sec-w-m\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isOpenErrorModal\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\",\\\"isCenterTitleAlign\\\"],[[23,[\\\"popUpHeaderTitle\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onWarningModalClose\\\"],null],[23,[\\\"isLoading\\\"]],true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-12 mt-3\\\"],[9],[0,\\\" \\\"],[1,[21,\\\"errorMessage\\\"],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-controls  mx-auto mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri\\\"],[9],[0,\\\"\\\\n          OK\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onWarningModalClose\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowSubscriptionChanges\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/subscription-form/subscription-changes-table\\\",null,[[\\\"elementId\\\",\\\"subscription\\\",\\\"subscriptionBookings\\\",\\\"isEditMode\\\",\\\"tableRef\\\",\\\"onSubscriptionChangesModalClose\\\",\\\"onSubscriptionChangesAccept\\\"],[\\\"subscription-changes-table\\\",[23,[\\\"subscription\\\"]],[23,[\\\"subscriptionBookings\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"onSubscriptionChangesModalClose\\\"]],[23,[\\\"onSubscriptionChangesAccept\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/travel-needs/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/vehicleCapacity\", \"adept-iq/models/travel-need-type\"], function (_exports, _emberConcurrency, _lodash, _mappedPermIds, _vehicleCapacity, _travelNeedType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const travelNeedsToFilter = [];\n  const MAX_LOAD_TIME = 15;\n\n  var _default = Ember.Component.extend({\n    classNames: ['travel-needs-form'],\n    booking: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    travelNeedTypes: null,\n    passengerTypes: null,\n    ambulatoryCount: 1,\n    countPath: 'count',\n    pcaTravelNeed: null,\n    travelNeedTypePath: 'travelNeedType',\n    previousSelectedCompanionCount: 0,\n    travelNeedTypeOptions: null,\n    // need to populate this,\n    totalRidersCount: 0,\n    bigSeats: null,\n    editLoadUnloadSubscriptionGranted: false,\n    isShowSpecialPermission: false,\n    haveSpecialPermission: false,\n    specialPermissionTitle: 'Subscription - Wheelchair Override',\n    bodyMessage: 'Override privileges are required to assign a lift and/or wheelchair to a trip for a client that is not approved for this equipment.',\n    overrideWheelchairRequest: _mappedPermIds.default.overrideWheelchairRequest,\n    disableLoadAndUnloadTime: Ember.computed.readOnly('booking.isOpenErrorModal'),\n    maximumCompanionCount: Ember.computed.alias('maxCompanionCount'),\n\n    init() {\n      this._super(...arguments);\n\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const passengerTypes = this.store.peekAll('passenger-type');\n      const maximumCompanionConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/maximum_companions');\n      const maximumCompanionValue = maximumCompanionConfig ? parseInt(maximumCompanionConfig.get('value'), 10) : 1;\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2); //we have to set Maximum companion value based on defined in System configuration should match with the Companion field in the drop down of travel needs of Create subscription.\n\n      const companionArray = [...Array(maximumCompanionValue + 1).keys()];\n      const editableRecords = this.get('editableRecords');\n      this.set('booking.travelNeedItems', travelNeedTypes);\n      this.setProperties({\n        companionOptions: companionArray,\n        bigSeats: bigSeatsTN.map(tr => tr.get('name').toUpperCase()),\n        passengerTypes,\n        travelNeedTypes,\n        travelNeedTypeOptions: travelNeedTypes,\n        totalRidersCount: [editableRecords[1]].length\n      });\n      this.getAndSetCompanionTravelNeed();\n      this.countDisabledObserver();\n      this.validateLoadAndUnLoadTimeToBeNumber();\n      this.validateLoadAndUnLoadTime();\n      this.loadTimeValue();\n      this.unloadTimeValue();\n      this.set('editLoadUnloadSubscriptionGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editLoadUnloadSubscription, null));\n    },\n\n    selectedCompanionCount: Ember.computed.alias('booking.selectedCompanionCount'),\n    countDisabledObserver: Ember.observer('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const isEditMode = this.get('isEditMode');\n      this.get('legTravelNeeds').forEach(legTravelNeed => {\n        const isConsumable = legTravelNeed.get('travelNeedType.isConsumable');\n        let isCountDisabled = true;\n\n        if (!isEditMode && isConsumable) {\n          isCountDisabled = false;\n        }\n\n        legTravelNeed.set('isCountDisabled', isCountDisabled);\n      });\n    }),\n\n    // get wheelchair count for single and multiple riders NYAAR-11938\n    getAndSetWheelChairSeatCount() {\n      let wheelChairCount = 0;\n      this.get('booking.selectedRiders').forEach(rider => {\n        const riderTravelNeeds = rider.get('travelNeeds');\n        riderTravelNeeds.forEach(riderTravelNeed => {\n          if (riderTravelNeed.type === 'wheelchair') {\n            wheelChairCount += riderTravelNeed.cnt;\n          }\n        });\n      });\n      const wheelChairTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'WHEELCHAIR';\n      });\n\n      if (wheelChairTravelNeed) {\n        wheelChairTravelNeed.set('count', wheelChairCount);\n      }\n    },\n\n    getAndSetCompanionTravelNeed() {\n      const companionCount = this.get('booking').getTravelNeedsCompanionCount(this.get('legTravelNeeds'));\n      this.get('booking').setCompanionCount(companionCount);\n    },\n\n    ambulatorySeatCount: Ember.computed('ambulatoryTravelNeed', function () {\n      const ambulatoryTravelNeed = this.get('ambulatoryTravelNeed');\n      return ambulatoryTravelNeed.get('count');\n    }),\n    ambulatoryTravelNeed: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const ambulatoryTravelNeed = this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'AMBULATORY';\n      });\n      return ambulatoryTravelNeed;\n    }),\n    loadTime: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', 'riderToBook.loadTime', function () {\n      let pickDwellTime;\n      const rider = this.store.peekRecord('rider', this.get('riderToBook.id'));\n      const riderTravelNeeds = rider.get('riderTravelNeeds');\n      this.get('legs').forEach(leg => {\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          if (segment.get('id')) {\n            pickDwellTime = segment.get('pick.dwell');\n          }\n        });\n      });\n\n      if (pickDwellTime) {\n        return pickDwellTime / 60;\n      }\n\n      const allTravelNeedLoadTimes = this.get('legTravelNeeds').map(travelNeed => {\n        const travelNeedTypeName = travelNeed.get('travelNeedType.name');\n        const foundRiderTravelNeed = riderTravelNeeds.find(riderTravelNeed => {\n          return riderTravelNeed.get('travelNeedTypeName') === travelNeedTypeName;\n        });\n        const configTravelNeedTypeLoadTime = travelNeed.get('travelNeedType.loadTime') ? parseInt(travelNeed.get('travelNeedType.loadTime'), 10) : 0;\n        const loadTime = (0, _lodash.isEmpty)(foundRiderTravelNeed) ? configTravelNeedTypeLoadTime : foundRiderTravelNeed.get('loadTime');\n        return (0, _lodash.isNumber)(loadTime) && !(0, _lodash.isNaN)(loadTime) ? loadTime : 0;\n      });\n      const maxLoadTime = Math.max(...allTravelNeedLoadTimes);\n      return maxLoadTime;\n    }),\n    unloadTime: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', 'riderToBook.unloadTime', function () {\n      let dropDwellTime;\n      const rider = this.store.peekRecord('rider', this.get('riderToBook.id'));\n      const riderTravelNeeds = rider.get('riderTravelNeeds');\n      this.get('legs').forEach(leg => {\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          if (segment.get('id')) {\n            dropDwellTime = segment.get('drop.dwell');\n          }\n        });\n      });\n\n      if (dropDwellTime) {\n        return dropDwellTime / 60;\n      }\n\n      const allTravelNeedUnLoadTimes = this.get('legTravelNeeds').map(travelNeed => {\n        const travelNeedTypeName = travelNeed.get('travelNeedType.name');\n        const foundRiderTravelNeed = riderTravelNeeds.find(riderTravelNeed => {\n          return riderTravelNeed.get('travelNeedTypeName') === travelNeedTypeName;\n        });\n        const configTravelNeedTypeUnloadTime = travelNeed.get('travelNeedType.unloadTime') ? parseInt(travelNeed.get('travelNeedType.unloadTime'), 10) : 0;\n        const unloadTime = (0, _lodash.isEmpty)(foundRiderTravelNeed) ? configTravelNeedTypeUnloadTime : foundRiderTravelNeed.get('unloadTime');\n        return (0, _lodash.isNumber)(unloadTime) && !(0, _lodash.isNaN)(unloadTime) ? unloadTime : 0;\n      });\n      const maxUnLoadTime = Math.max(...allTravelNeedUnLoadTimes);\n      return maxUnLoadTime;\n    }),\n    loadTimeValue: Ember.observer('loadTime', function () {\n      //converting the loadTime to seconds\n      const loadTime = this.get('loadTime') * 60;\n      this.get('legs').forEach(leg => {\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          segment.set('pick.dwell', loadTime);\n        });\n      });\n    }),\n    unloadTimeValue: Ember.observer('unloadTime', function () {\n      //converting the unloadTime to seconds\n      const unloadTime = this.get('unloadTime') * 60;\n      this.get('legs').forEach(leg => {\n        const segments = leg.get('segments');\n        segments.forEach(segment => {\n          segment.set('drop.dwell', unloadTime);\n        });\n      });\n    }),\n    pcaEligible: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const pcaRequired = true; //this.get('riderToBook.eligibility.pcaRequired');\n      // if pcaRequired then disable the checkbox\n\n      if (pcaRequired) {\n        return false;\n      }\n\n      const totalPcaRider = this.getNoOfPcaRiders();\n      const pcaTravelNeed = this.getPcaTravelNeed();\n\n      if (totalPcaRider > 0 || pcaTravelNeed) {\n        return true;\n      }\n\n      return false;\n    }),\n    pcaStateChecked: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const pcaRequired = true; //this.get('riderToBook.eligibility.pcaRequired');\n\n      if (pcaRequired) {\n        return true;\n      }\n\n      const pcaTravelNeed = this.getPcaTravelNeed();\n\n      if (pcaTravelNeed) {\n        return true;\n      }\n\n      return false;\n    }),\n    serviceAnimalChecked: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const serviceAnimalTravelNeed = this.getServiceAnimalTravelNeed();\n\n      if (serviceAnimalTravelNeed) {\n        return true;\n      }\n\n      return false;\n    }),\n    availableTravelNeedTypes: Ember.computed('legTravelNeeds.@each.{travelNeedType}', 'legTravelNeeds.[]', function () {\n      const allTravelTypes = this.store.peekAll('travel-need-type');\n      const existingTravelNeedsTypes = this.get('legTravelNeeds').map(travelNeed => travelNeed.get('travelNeedTypeNameUppercase'));\n      const travelNeedTypesOptionsThatShouldNotBeInOptions = existingTravelNeedsTypes.filter(tr => tr).concat(travelNeedsToFilter);\n      const filteredArray = allTravelTypes.filter(travelType => {\n        return !travelNeedTypesOptionsThatShouldNotBeInOptions.includes(travelType.name.toUpperCase()) || this.get('bigSeats').includes(travelType.name.toUpperCase());\n      });\n      return filteredArray;\n    }),\n    nonClonedTravelNeeds: Ember.computed('legTravelNeeds.[]', function () {\n      const filteredTravelNeeds = this.get('legTravelNeeds').filter(legtravelNeed => {\n        return !travelNeedsToFilter.includes(legtravelNeed.get('travelNeedTypeNameUppercase')) && !legtravelNeed.get('isCloned');\n      });\n      return filteredTravelNeeds;\n    }),\n    validateLoadAndUnLoadTime: Ember.observer('loadTime', 'unloadTime', function () {\n      this.set('booking.canSave', true);\n      const loadTime = this.get('loadTime');\n      const unLoadTime = this.get('unloadTime');\n\n      if (loadTime > MAX_LOAD_TIME || unLoadTime > MAX_LOAD_TIME) {\n        this.get('setLoadAndUnLoadTimeFlag')(false);\n        this.get('booking').showErrorMessage('Load/Unload time value must be 15 min or less.');\n      } else {\n        this.get('setLoadAndUnLoadTimeFlag')(true);\n      }\n    }),\n    validateLoadAndUnLoadTimeToBeNumber: Ember.observer('loadTime', 'unloadTime', function () {\n      const loadTime = this.get('loadTime');\n      const unLoadTime = this.get('unloadTime');\n      const isLoadUnloadTimesNumber = this.get('booking').isNumber(loadTime) && this.get('booking').isNumber(unLoadTime);\n\n      if (isLoadUnloadTimesNumber) {\n        this.get('setIsLoadAndUnLoadTimeNumberFlag')(true);\n      } else {\n        this.get('setIsLoadAndUnLoadTimeNumberFlag')(false);\n        this.get('booking').showErrorMessage('Please enter valid numbers for load/unload time.');\n      }\n    }),\n    //NYAAR-12930  verify if pca and serviceAnimal are present in the config item\n    isPcaPresentInConfig: Ember.computed('legTravelNeeds.[]', function () {\n      return this.get('booking').isCheckPca();\n    }),\n\n    getPcaTravelNeed() {\n      return this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedType.upperCaseName') === 'PCA';\n      });\n    },\n\n    getServiceAnimalTravelNeed() {\n      return this.get('legTravelNeeds').find(travelNeed => {\n        return travelNeed.get('travelNeedType.name') === 'serviceAnimal';\n      });\n    },\n\n    getNoOfPcaRiders() {\n      const pcaRiders = [];\n      this.get('booking.selectedRiders').forEach(rider => {\n        const riderTravelNeeds = rider.get('travelNeeds');\n        riderTravelNeeds.forEach(riderTravelNeed => {\n          if (riderTravelNeed.type === 'pca') {\n            pcaRiders.push(rider);\n          }\n        });\n      });\n      return pcaRiders.length;\n    },\n\n    getPermission: (0, _emberConcurrency.task)(function* () {\n      this.set('isShowSpecialPermission', true);\n      yield (0, _emberConcurrency.waitForProperty)(this, 'isShowSpecialPermission', p => p === false);\n    }),\n\n    // check for vehicle capacity type of wheelchair and lift required travel needs only\n    async isTravelNeedTypeAllowed(travelNeedType) {\n      const overrideWheelchairRequestGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideWheelchairRequest, null);\n      const riderTravelNeeds = this.get('riderTravelNeeds');\n      const travelNeedTypeId = travelNeedType.get('vehicleCapacityType.id');\n      const needsValidation = [_travelNeedType.LIFTREQUIRED_TRAVELNEED_TYPE, _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE].includes(travelNeedTypeId); // we don't require validation for other travel need types except for liftRequired and wheelchair\n\n      if (!needsValidation) {\n        return true;\n      }\n\n      const existInRiderTravelNeeds = riderTravelNeeds.filter(riderTravelNeed => riderTravelNeed.get('vehicleCapacityType.id') === travelNeedTypeId); // exist in the rider's travel needs\n\n      if (existInRiderTravelNeeds.length > 0) {\n        return true;\n      } // does not exist in rider's travel needs but user have overrideWheelchairRequest permission\n\n\n      if (overrideWheelchairRequestGranted) {\n        return true;\n      } // get permission from another user\n\n\n      await this.get('getPermission').perform();\n      return this.get('haveSpecialPermission');\n    },\n\n    async changeTravelNeedType(travelNeed, travelNeedType) {\n      const travelNeedTypePath = this.get('travelNeedTypePath');\n      const isTravelNeedTypeAllowed = await this.isTravelNeedTypeAllowed(travelNeedType);\n      const isConsumable = travelNeedType.get('isConsumable');\n      const isPrevConsumable = travelNeed.get('travelNeedType.isConsumable');\n\n      if (isTravelNeedTypeAllowed) {\n        travelNeed.set(travelNeedTypePath, travelNeedType);\n      } // The \"seat\" changes from 0 to 1 as the travel need changes from non-consumable to consumable.\n      // and vice versa\n\n\n      if (!isConsumable && isPrevConsumable) {\n        travelNeed.set('count', 0);\n      }\n\n      if (isConsumable && !isPrevConsumable) {\n        travelNeed.set('count', 1);\n      }\n    },\n\n    actions: {\n      onTravelNeedCountChange(travelNeed, value) {\n        travelNeed.set('count', value);\n        this.getAndSetCompanionTravelNeed();\n        this.get('updateFare')();\n      },\n\n      async onTravelNeedChange(travelNeed, travelNeedType) {\n        await this.changeTravelNeedType(travelNeed, travelNeedType);\n        this.getAndSetCompanionTravelNeed();\n        this.get('updateFare')();\n      },\n\n      onLoadTimeChange(loadTime) {\n        const loadTimeInSeconds = loadTime * 60;\n        this.get('legs').forEach(leg => {\n          const segments = leg.get('segments');\n          segments.forEach(segment => {\n            segment.set('pick.dwell', loadTimeInSeconds);\n          });\n        });\n      },\n\n      onUnLoadTimeChange(unloadTime) {\n        const unloadTimeInSeconds = unloadTime * 60;\n        this.get('legs').forEach(leg => {\n          const segments = leg.get('segments');\n          segments.forEach(segment => {\n            segment.set('drop.dwell', unloadTimeInSeconds);\n          });\n        });\n      },\n\n      onServiceAnimalChange(event) {\n        if (event.target.checked) {\n          const allTravelTypes = this.store.peekAll('travel-need-type');\n          const serviceAnimalType = allTravelTypes.find(travelType => {\n            return travelType.name.toUpperCase() === 'SERVICEANIMAL';\n          });\n          const newServiceAnimalTravelNeed = this.store.createRecord('subscription-travel-need', {\n            count: 1,\n            travelNeedType: this.store.peekRecord('travel-need-type', serviceAnimalType.get('id')),\n            passengerType: this.store.peekRecord('passenger-type', 'client')\n          });\n          this.get('legTravelNeeds').pushObject(newServiceAnimalTravelNeed);\n        } else {\n          const sAnimalTravelNeed = this.get('legTravelNeeds').find(travelNeed => travelNeed.get('travelNeedType.name') === 'serviceAnimal');\n          this.get('legTravelNeeds').removeObject(sAnimalTravelNeed);\n        }\n      },\n\n      onAddTravelNeed() {\n        const store = this.get('store');\n        const subscription = this.get('subscription');\n        const newLegTravelNeed = store.createRecord('subscription-travel-need', {\n          count: 0,\n          travelNeedType: null,\n          passengerType: store.peekRecord('passenger-type', 'client')\n        });\n        newLegTravelNeed.set('subscription', subscription);\n        this.get('legTravelNeeds').pushObject(newLegTravelNeed);\n        this.getAndSetCompanionTravelNeed();\n        this.get('updateFare')();\n      },\n\n      onRemoveTravelNeed(legTravelNeed) {\n        const newLegsTravelNeeds = this.get('legTravelNeeds').filter(tn => tn !== legTravelNeed);\n        const enoughVehCapacity = (0, _vehicleCapacity.haveEnoughVehCapacity)(newLegsTravelNeeds);\n\n        if (!enoughVehCapacity) {\n          this.get('notifications').warning('Must have at least one travel need with ambulatory or wheelchair vehicle capacity.');\n          return;\n        }\n\n        legTravelNeed.deleteRecord();\n        this.get('legTravelNeeds').removeObject(legTravelNeed);\n        this.getAndSetCompanionTravelNeed();\n        this.get('updateFare')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/travel-needs/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"LNnWedxE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"travelNeed\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex flex-row-reverse bd-highlight\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 pl-2 ml-1\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-add-travel-need\\\"],[12,\\\"disabled\\\",[21,\\\"isInactive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddTravelNeed\\\"],null]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 pr-1 pt-1  flex-seat-label\\\"],[9],[0,\\\"Seats\\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"nonClonedTravelNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-margin\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8 p-0 ml-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\",\\\"disabled\\\"],[\\\"data-test-power-select\\\",[23,[\\\"availableTravelNeedTypes\\\"]],false,[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],[23,[\\\"travelNeedTypePath\\\"]]],null]],null],\\\"Travel Needs\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedChange\\\",[22,1,[]]],null],[23,[\\\"isInactive\\\"]]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,2,[\\\"upperCaseName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 ml-1\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[11,\\\"min\\\",\\\"0\\\"],[12,\\\"max\\\",[27,\\\"if\\\",[[22,1,[\\\"travelNeedType\\\",\\\"isCompanion\\\"]],[23,[\\\"maximumCompanionCount\\\"]],10],null]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,1,[]],\\\"count\\\"],null]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[27,\\\"or\\\",[[27,\\\"get\\\",[[22,1,[]],\\\"isCountDisabled\\\"],null],[23,[\\\"isInactive\\\"]]],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedCountChange\\\",[22,1,[]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-1 p-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trashButton\\\"],[12,\\\"disabled\\\",[21,\\\"isInactive\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveTravelNeed\\\",[22,1,[]]],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editLoadUnloadSubscriptionGranted\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"load-unload-row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"load-time-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"load-time-label\\\"],[9],[0,\\\"Load Time\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"text\\\",[27,\\\"or\\\",[[23,[\\\"disableLoadAndUnloadTime\\\"]],[23,[\\\"isInactive\\\"]]],null],[23,[\\\"loadTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onLoadTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unload-time-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"unload-time-label\\\"],[9],[0,\\\"Unload Time\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"text\\\",[27,\\\"or\\\",[[23,[\\\"disableLoadAndUnloadTime\\\"]],[23,[\\\"isInactive\\\"]]],null],[23,[\\\"unloadTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUnLoadTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isShowSpecialPermission\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"get-special-permission\\\",null,[[\\\"haveSpecialPermission\\\",\\\"isShowSpecialPermission\\\",\\\"requiredPermission\\\",\\\"headerTitle\\\",\\\"bodyMessage\\\"],[[23,[\\\"haveSpecialPermission\\\"]],[23,[\\\"isShowSpecialPermission\\\"]],[23,[\\\"overrideWheelchairRequest\\\"]],[23,[\\\"specialPermissionTitle\\\"]],[23,[\\\"bodyMessage\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/travel-needs/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/trip-details-form/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['trip-details-form'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    hasMoreThanOneLeg: Ember.computed('legsInBooking.[]', function () {\n      return this.get('legsInBooking.length') > 1;\n    }),\n    noOfLegs: Ember.computed('legsInBooking.[]', function () {\n      return this.get('legsInBooking.length');\n    }),\n\n    canShowRemove(legIndex) {\n      return this.get('hasMoreThanOneLeg') && legIndex !== 0;\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    // we are just checking using postalCode because both nyct and tomtom returns that consistently\n    validateIfPickAndDropArePresent() {\n      let allLegsHavePickAndDrop = true;\n      this.get('legsInBooking').forEach(leg => {\n        if (leg.get('segments.firstObject.pick.place.address.postalCode') && leg.get('segments.firstObject.drop.place.address.postalCode')) {\n          allLegsHavePickAndDrop = true;\n        } else {\n          allLegsHavePickAndDrop = false;\n        }\n      });\n      return allLegsHavePickAndDrop;\n    },\n\n    actions: {\n      onLegRemoveClick(leg) {\n        this.get('onLegRemoveClick')(leg);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-form/trip-details-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7ID/oZAa\",\n    \"block\": \"{\\\"symbols\\\":[\\\"leg\\\",\\\"index\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"noOfLegs\\\"]],0],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"legsInBooking\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[11,\\\"style\\\",\\\"display: block;\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/subscription-form/leg-form\\\",null,[[\\\"legIndex\\\",\\\"addressesOfRiderToBook\\\",\\\"syncPickAndDrop\\\",\\\"leg\\\",\\\"disableRequestDate\\\",\\\"isReturnTrip\\\",\\\"onFirstLegDateChange\\\",\\\"onLegRemoveClick\\\",\\\"validateRequestDateTime\\\",\\\"showErrorMessage\\\",\\\"isEditMode\\\",\\\"subscription\\\",\\\"pickAddressText\\\",\\\"dropAddressText\\\",\\\"riderRecord\\\",\\\"updateFare\\\",\\\"updateADABoundary\\\",\\\"isInactive\\\"],[[22,2,[]],[23,[\\\"addressesOfRiderToBook\\\"]],[23,[\\\"syncPickAndDrop\\\"]],[22,1,[]],[23,[\\\"disableRequestDate\\\"]],[23,[\\\"isReturnTrip\\\"]],[23,[\\\"onFirstLegDateChange\\\"]],[23,[\\\"onLegRemoveClick\\\"]],[23,[\\\"validateRequestDateTime\\\"]],[23,[\\\"showErrorMessage\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"subscription\\\"]],[23,[\\\"pickAddressText\\\"]],[23,[\\\"dropAddressText\\\"]],[23,[\\\"riderRecord\\\"]],[23,[\\\"updateFare\\\"]],[23,[\\\"updateADABoundary\\\"]],[23,[\\\"isInactive\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/subscription-form/trip-details-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-widget/avlmConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/subscription-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'subscription',\n    title: 'Subscriptions',\n    columns: [{\n      id: 'id',\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'requestedTime',\n      index: 0,\n      type: 'time',\n      label: 'Request/Time',\n      valuePath: 'requestTime',\n      editable: false,\n      hidden: false,\n      format: 'HH:MM',\n      defaultWidth: 200\n    }, {\n      id: 'externalId',\n      index: 1,\n      type: 'text',\n      label: 'Subscription ID',\n      valuePath: 'id',\n      editable: true,\n      hidden: false,\n      defaultWidth: 150\n    }, {\n      id: 'status',\n      index: 2,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      editable: true,\n      hidden: false,\n      defaultWidth: 150\n    }, {\n      id: 'riderId',\n      index: 3,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'rider.riderId',\n      editable: true,\n      hidden: false,\n      defaultWidth: 150\n    }, {\n      id: 'riderFirstName',\n      index: 4,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'rider.firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 200\n    }, {\n      id: 'riderLastName',\n      index: 5,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'rider.lastName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 200\n    }, {\n      id: 'pickupaddress',\n      index: 6,\n      type: 'text',\n      label: 'Pick Address ',\n      valuePath: 'origin.address.fullAddress',\n      editable: true,\n      hidden: false,\n      defaultWidth: 200\n    }, {\n      id: 'pickCity',\n      index: 7,\n      type: 'text',\n      label: 'Pick City ',\n      valuePath: 'origin.address.region',\n      editable: true,\n      hidden: false,\n      defaultWidth: 150\n    }, {\n      id: 'Start Date',\n      index: 8,\n      type: 'datetime',\n      label: 'Start Date',\n      valuePath: 'startDate',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 200\n    }, {\n      id: 'datetime',\n      index: 9,\n      type: 'datetime',\n      label: 'End Date',\n      valuePath: 'endDate',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 200\n    }, {\n      id: 'riderPhone',\n      index: 10,\n      type: 'text',\n      label: 'Rider Phone',\n      valuePath: 'rider.riderPhoneNumber.phoneNumber',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 200\n    }, {\n      id: 'recurrence',\n      index: 11,\n      type: 'enum',\n      label: 'Recurrence',\n      valuePath: 'formattedRecurrence',\n      cellDesc: 'Recurrences',\n      editable: false,\n      hidden: false,\n      defaultWidth: 200\n    }, {\n      id: 'serviceStartTime',\n      index: 12,\n      type: 'date',\n      label: 'Service Start Time',\n      valuePath: 'serviceWindowStartTime',\n      editable: true,\n      hidden: true,\n      format: 'HH:MM',\n      defaultWidth: 200\n    }, {\n      id: 'serviceEndTime',\n      index: 13,\n      type: 'date',\n      label: 'Service End Time',\n      valuePath: 'serviceWindowEndTime',\n      editable: true,\n      hidden: true,\n      format: 'HH:MM',\n      defaultWidth: 200\n    }, {\n      id: 'dropaddress',\n      index: 14,\n      type: 'text',\n      label: 'Dropoff Address',\n      valuePath: 'destination.address.fullAddress',\n      editable: true,\n      hidden: false,\n      defaultWidth: 200\n    }, {\n      id: 'anchor',\n      index: 15,\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'anchor',\n      editable: true,\n      hidden: false,\n      defaultWidth: 200\n    }, {\n      id: 'notes',\n      index: 16,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'legNotes',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 200\n    }, {\n      id: 'passengerNotes',\n      index: 17,\n      type: 'text',\n      label: 'Passenger Notes',\n      valuePath: 'rider.notes',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 200\n    }, {\n      id: 'travelNeeds',\n      index: 18,\n      type: 'number',\n      label: 'Travel Needs',\n      valuePath: 'noOfTravelNeeds',\n      editable: true,\n      hidden: false,\n      defaultWidth: 200\n    }, {\n      id: 'fare',\n      index: 19,\n      type: 'text',\n      label: 'Fare',\n      valuePath: 'fare',\n      editable: true,\n      hidden: false,\n      defaultWidth: 200\n    }, {\n      id: 'paymentType',\n      index: 20,\n      type: 'text',\n      label: 'Payment Type',\n      valuePath: 'fareType.name',\n      editable: true,\n      hidden: false,\n      defaultWidth: 200\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/subscription-widget/config\", \"adept-iq/pods/components/iq-widgets/subscription-widget/avlmConfig\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\", \"moment\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _avlmConfig, _environment, _mappedPermIds, _moment, _lodash, _unwrapProxy, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n  const UPDATE_WAIT_TIME = 15000;\n\n  var _default = _component.default.extend({\n    classNames: ['subscription-widget'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    canShowHeader: true,\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    editAction: null,\n    deleteAction: null,\n    subscriptionComponent: 'iq-widgets/subscription-form',\n    deleteSubscriptionComponent: 'iq-widgets/delete-subscriptions-form',\n    cancelSubscriptionComponent: 'iq-widgets/cancel-subscription-trips',\n    subscriptionActivityLogComponent: 'side-drawer/activity-log/subscription-activity-log',\n    changeRecords: Ember.observer('booking.currentSubscriptions', function () {\n      const currentSubscriptions = this.get('booking.currentSubscriptions');\n      const currentSubscriptionsArray = currentSubscriptions.toArray ? currentSubscriptions.toArray() : currentSubscriptions;\n      const sort = this.buildSortParam();\n      const compareFn = (0, _sorts.buildCompareFunction)([sort]);\n      this.set('records', currentSubscriptionsArray.sort(compareFn));\n      this.filterTripsForselectedSubscriptions();\n    }),\n\n    init() {\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      this._super(...arguments);\n\n      this.onSubscriptionEdit = this.onSubscriptionEdit.bind(this);\n      this.onViewSubscription = this.onViewSubscription.bind(this);\n      this.getCurrentSubscriptions = this.getCurrentSubscriptions.bind(this);\n      this.get('tableColumns').popObject();\n      this.get('tableColumns').lastObject.resizable = false;\n      this.set('getRecords', this.getCurrentSubscriptions);\n      Ember.run.later(() => this.updateSelectedSubscription(), UPDATE_WAIT_TIME);\n    },\n\n    async updateSelectedSubscription() {\n      const store = this.get('store');\n      const subscriptionRows = this.get('tableRef.table.rows');\n      const subscriptionSelected = subscriptionRows ? subscriptionRows.find(subRow => {\n        return subRow.get('isChecked');\n      }) : null;\n      const currentTrips = this.get('booking.currentTrips') || [];\n\n      if (subscriptionSelected) {\n        let include = `subscription,\n        booking,\n        booking.cancellation,\n        segment,\n        pick,\n        drop,\n        pick.segmentStop,\n        pick.segmentStop.place,\n        pick.segmentStop.place.address,\n        pick.segmentStop.place.location,\n        drop.segmentStop,\n        drop.segmentStop.place,\n        drop.segmentStop.place.address,\n        drop.segmentStop.place.location,\n        segment.leg,\n        segment.leg.travelNeeds,\n        segment.leg.serviceNeeds,\n        stopPoints,\n        stopPoints.cluster,\n        stopPoints.cluster.dispatchRoute,\n        stopPoints.cluster.dispatchRoute.route,\n        stopPoints.cluster.dispatchSchedule,\n        schedule,\n        routeAssignments,\n        routeAssignments.route,\n        routeAssignments.trip`;\n        include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n        currentTrips.forEach(trip => {\n          store.findRecord('trip', trip.get('id'), {\n            include\n          });\n        });\n      }\n\n      Ember.run.later(() => this.updateSelectedSubscription(), UPDATE_WAIT_TIME);\n    },\n\n    async onViewSubscription(subscription) {\n      this.onSubscriptionEdit(subscription, true);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('editAction', {\n        id: 'edit',\n        name: 'Edit Subscription',\n        permId: [_mappedPermIds.default.editSubscription],\n        action: this.onSubscriptionEdit\n      });\n      this.set('viewAction', {\n        id: 'view',\n        name: 'View Subscription',\n        permId: [_mappedPermIds.default.editSubscription],\n        action: this.onViewSubscription\n      });\n      this.set('deleteAction', {\n        id: 'delete',\n        name: 'Delete Subscription',\n        permId: _mappedPermIds.default.deleteSubscription,\n        action: model => {\n          const deleteSubscriptionComponent = this.get('deleteSubscriptionComponent');\n          this.get('editModal').open(deleteSubscriptionComponent, [model]);\n        }\n      });\n      this.set('cancelAction', {\n        id: 'cancel',\n        name: 'Cancel Subscription Trips',\n        permId: _mappedPermIds.default.cancelSubscriptionTrips,\n        action: model => {\n          const cancelSubscriptionsComponent = this.get('cancelSubscriptionComponent');\n          this.get('editModal').open(cancelSubscriptionsComponent, [model]);\n        }\n      });\n      this.set('viewActivityLogAction', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLog,\n        name: 'View Activity Log',\n        action: subscription => {\n          const id = subscription.get('id');\n          this.get('workspace').pushState('subscriptionActivityLog', {\n            displayName: `Subscription ${id} Activity Log`,\n            subscription\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      setTimeout(() => {\n        if (this.get('booking.passengerRowSelected')) {\n          this.selectAndDeselectTableRows(false);\n          this.filterTripsForselectedSubscriptions();\n          this.set('booking.passengerRowSelected', false);\n        }\n      }, 1000);\n    },\n\n    getCurrentSubscriptions() {\n      const currentSubscriptions = this.get('booking.currentSubscriptions') || [];\n      return currentSubscriptions;\n    },\n\n    async onSubscriptionEdit(subscription) {\n      let isViewOnlyMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const travelNeedNames = subscription.get('subscriptionTravelNeeds').map(tn => tn.get('travelNeedType.id'));\n        const isDuplicated = new Set(travelNeedNames).size !== travelNeedNames.length;\n        const subscriptionPassengerId = subscription.get('rider.id');\n\n        if (isDuplicated) {\n          const travelNeedsBySubIdQuery = `in(subscriptionId,(${subscription.get('id')}))`;\n          const subTravelNeeds = await this.get('store').query('subscription-travel-need', {\n            filter: travelNeedsBySubIdQuery\n          });\n          subscription.set('subscriptionTravelNeeds', subTravelNeeds);\n        }\n\n        if (!subscription.get('exclusions.firstObject')) {\n          const exclusion = this.get('store').createRecord('subscription-exclusion');\n          subscription.set('exclusions', [exclusion]);\n        }\n\n        const subscriptionExclusion = subscription.get('exclusions');\n\n        if (subscriptionExclusion.length > 1) {\n          const exlusionRecord = subscriptionExclusion.filter(exclusion => exclusion.id !== null);\n          subscription.set('exclusions', exlusionRecord);\n        }\n\n        if (subscription.get('exclusions.firstObject.startDate') && subscription.get('exclusions.firstObject.endDate')) {\n          subscription.set('exclusions.firstObject.suspend', true);\n        }\n\n        const pickPlace = subscription.get('origin');\n        const dropPlace = subscription.get('destination');\n        const {\n          createdPickPlace,\n          createdDropPlace\n        } = this.createPickAndDropPlaceRecord(pickPlace, dropPlace);\n        const pickGeoNode = await this.get('geocode').calculateZone(pickPlace.get('location.lat'), pickPlace.get('location.lng'));\n        const dropGeoNode = await this.get('geocode').calculateZone(dropPlace.get('location.lat'), dropPlace.get('location.lng'));\n        const pickZoneName = this.store.peekRecord('zone-type', pickGeoNode.zone.zoneName);\n        const dropZoneName = this.store.peekRecord('zone-type', dropGeoNode.zone.zoneName);\n        createdPickPlace.set('address.zoneName', pickZoneName);\n        createdDropPlace.set('address.zoneName', dropZoneName);\n        createdPickPlace.set('address.zName', pickZoneName.get('displayName') || '');\n        createdDropPlace.set('address.zName', dropZoneName.get('displayName') || '');\n        const leg = this.store.createRecord('leg', {\n          requestTime: subscription.get('requestTime'),\n          anchor: subscription.get('anchor'),\n          purpose: subscription.get('purpose'),\n          notes: subscription.get('legNotes'),\n          serviceWindow: subscription.get('serviceWindow'),\n          fundingAgency: subscription.get('fundingAgency')\n        });\n        const segment = this.store.createRecord('segment', {\n          anchor: subscription.get('anchor'),\n          fare: subscription.get('fare'),\n          fareType: subscription.get('fareType'),\n          pick: this.store.createRecord('segment-stop', {\n            type: 'pick',\n            place: createdPickPlace,\n            notes: subscription.get('originNotes')\n          }),\n          drop: this.store.createRecord('segment-stop', {\n            type: 'drop',\n            place: createdDropPlace,\n            notes: subscription.get('destinationNotes')\n          }),\n          leg: leg\n        });\n        const dummyBookingForOpeningForm = this.store.createRecord('booking', {\n          provider: subscription.get('provider'),\n          subscription: subscription\n        });\n        leg.set('segments', [segment]);\n        dummyBookingForOpeningForm.set('legs', [leg]);\n        const isSubscriptionEditMode = true;\n        const newSubscriptionComponent = this.get('subscriptionComponent');\n        const selectedRiders = this.get('booking.selectedRiders').filter(rider => rider.get('id') === subscriptionPassengerId);\n        const riderId = selectedRiders.get('firstObject.id');\n        await this.store.queryRecord('rider-external', riderId);\n        this.set('booking.activeBooking', dummyBookingForOpeningForm);\n        const hasFutureTrips = this.hasFutureTripsForSelectedSubscription(subscription.get('id'));\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('editModal').open(newSubscriptionComponent, [isSubscriptionEditMode, selectedRiders.get('firstObject'), dummyBookingForOpeningForm, hasFutureTrips, isViewOnlyMode]);\n      } catch (e) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('notifications').warning('error while editing subscription' + e.message);\n      }\n    },\n\n    createPickAndDropPlaceRecord(pickPlace, dropPlace) {\n      const pickPlaceCategoryType = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('placeCategoryType'));\n      const dropPlaceCategoryType = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('placeCategoryType'));\n      const pickPlaceAddress = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('address')).toJSON();\n      const dropPlaceAddress = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('address')).toJSON();\n      const pickPlaceLocation = (0, _unwrapProxy.unwrapProxy)(pickPlace.get('location')).toJSON();\n      const dropPlaceLocation = (0, _unwrapProxy.unwrapProxy)(dropPlace.get('location')).toJSON();\n      const createdPickAddress = this.store.createRecord('address', pickPlaceAddress);\n      const createdDropAddress = this.store.createRecord('address', dropPlaceAddress);\n      const createdPickLocation = this.store.createRecord('location', pickPlaceLocation);\n      const createdDropLocation = this.store.createRecord('location', dropPlaceLocation);\n      const createdPickPlace = this.store.createRecord('place', {\n        address: createdPickAddress,\n        location: createdPickLocation,\n        placeCategoryType: pickPlaceCategoryType\n      });\n      const createdDropPlace = this.store.createRecord('place', {\n        address: createdDropAddress,\n        location: createdDropLocation,\n        placeCategoryType: dropPlaceCategoryType\n      });\n      return {\n        createdPickPlace,\n        createdDropPlace\n      };\n    },\n\n    selectAndDeselectTableRows(isRow) {\n      const subscriptionWidgetTableRows = this.get('table.rows');\n      subscriptionWidgetTableRows.setEach('selected', isRow);\n      subscriptionWidgetTableRows.setEach('isChecked', isRow);\n    },\n\n    filterTripsForselectedSubscriptions() {\n      const subscriptionRows = this.get('table.rows');\n      const selectedSubsciptions = subscriptionRows.filter(row => row.get('isChecked'));\n      const selectedSubscriptionIds = selectedSubsciptions.map(sub => sub.get('id'));\n      const subscriptionBookings = this.get('booking.currentBookings').filter(booking => selectedSubscriptionIds.some(subscriptionId => subscriptionId === booking.get('subscription.id')));\n      const selectedBookingIds = subscriptionBookings.map(booking => booking.get('id'));\n      const filteredTrips = this.get('booking.currentTrips').filter(trip => selectedBookingIds.some(bookingId => bookingId === trip.get('booking.id')));\n      this.set('booking.filteredCurrentTrips', filteredTrips);\n    },\n\n    hasFutureTripsForSelectedSubscription(subscriptionId) {\n      const subscriptionBookings = this.get('booking.currentBookings').filter(booking => subscriptionId === booking.get('subscription.id'));\n      const selectedBookingIds = subscriptionBookings.map(booking => booking.get('id'));\n      const filteredTrips = this.get('booking.currentTrips').filter(trip => selectedBookingIds.some(bookingId => bookingId === trip.get('booking.id')));\n      const currentDate = (0, _moment.default)().startOf('day');\n      if (!filteredTrips || Ember.isEmpty(filteredTrips)) return false;\n      return filteredTrips.some(trip => !(0, _moment.default)(trip.get('tripStartTime')).isBefore(currentDate));\n    },\n\n    filterTripsForUncheckedRow(subscriptionId) {\n      const filteredCurrentTrips = this.get('booking.filteredCurrentTrips');\n      const bookingRows = this.get('bookingTableRef.table.rows');\n      const selectedBookings = bookingRows.filter(bookingRow => bookingRow.get('isChecked'));\n      const selectedBookingIds = selectedBookings.map(booking => booking.get('id'));\n      return filteredCurrentTrips.filter(trip => {\n        if (selectedBookingIds.includes(trip.get('booking.id'))) {\n          return true;\n        }\n\n        return trip.get('booking.subscription.id') !== subscriptionId;\n      });\n    },\n\n    actions: {\n      onRowClick(row) {\n        const isChecked = row.get('isChecked');\n        const filteredCurrentTrips = this.get('booking.filteredCurrentTrips');\n        const subscriptionId = row.get('id');\n\n        if (isChecked) {\n          const filteredTrips = this.get('booking.currentTrips').concat(this.get('booking.pastTrips')).filter(trip => trip.get('booking.subscription.id') === subscriptionId);\n          this.set('booking.filteredCurrentTrips', (0, _lodash.uniq)(filteredCurrentTrips.concat(filteredTrips)));\n          return;\n        }\n\n        const filteredTrips = this.filterTripsForUncheckedRow(subscriptionId);\n        this.set('booking.filteredCurrentTrips', filteredTrips);\n      },\n\n      onRowRightClick(row) {\n        const now = new Date();\n        const isExpired = row.get('endDate') < now;\n\n        if (row.get('status') === 'cancelled') {\n          this.set('dynamicSingleActions', [this.get('deleteAction'), this.get('viewActivityLogAction')]);\n        } else if (isExpired) {\n          this.set('dynamicSingleActions', [this.get('viewAction'), this.get('viewActivityLogAction')]);\n        } else {\n          this.set('dynamicSingleActions', [this.get('editAction'), this.get('deleteAction'), this.get('cancelAction'), this.get('viewActivityLogAction')]);\n        }\n\n        this._super(...arguments);\n      },\n\n      onCheckAll() {\n        const isRowHeadChecked = true;\n        this.selectAndDeselectTableRows(isRowHeadChecked);\n        this.filterTripsForselectedSubscriptions();\n      },\n\n      onUncheckAll() {\n        const isRowHeadUnchecked = false;\n        const bookingRows = this.get('bookingTableRef.table.rows');\n        const isEveryRowChecked = bookingRows.every(bookingRow => bookingRow.get('isChecked'));\n        this.selectAndDeselectTableRows(isRowHeadUnchecked);\n\n        if (!isEveryRowChecked) {\n          this.set('booking.filteredCurrentTrips', []);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscription-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/subscription-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'subscription',\n    defaultSortId: 'subscriptionDatetime',\n    defaultSortAsc: true,\n    checkBoxColumn: false,\n    isFormControls: true,\n    title: 'Subscriptions',\n    columns: [{\n      id: 'subscriptionId',\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      searchable: true,\n      defaultWidth: 100,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'subscriptionRequestedTime',\n      index: 0,\n      type: 'text',\n      label: 'Request/Time',\n      valuePath: 'requestTimeForDisplay',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      format: 'hh:mm A',\n      defaultWidth: 160\n    }, {\n      id: 'subscriptionExternalId',\n      index: 1,\n      type: 'text',\n      label: 'Subscription ID',\n      valuePath: 'id',\n      searchable: true,\n      editable: true,\n      hidden: false,\n      defaultWidth: 140\n    }, {\n      id: 'subscriptionGroupId',\n      index: 2,\n      type: 'text',\n      label: 'Group ID',\n      valuePath: 'group.groupId',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 140\n    }, {\n      id: 'subscriptionStatus',\n      index: 3,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'displayStatus',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'subscriptionRiderId',\n      index: 4,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'rider.riderId',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'subscriptionRiderFirstName',\n      index: 5,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'rider.firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100\n    }, {\n      id: 'subscriptionRiderLastName',\n      index: 6,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'rider.lastName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100\n    }, {\n      id: 'subscriptionPickupaddress',\n      index: 7,\n      type: 'text',\n      label: 'Pick Address ',\n      valuePath: 'origin.address.simpleAddress',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 140\n    }, {\n      id: 'subscriptionPickCity',\n      index: 8,\n      type: 'text',\n      label: 'Pick City',\n      valuePath: 'origin.address.locality',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'pickupZone',\n      index: 9,\n      type: 'text',\n      label: 'Pickup Zone',\n      valuePath: 'origin.address.zoneName.valueDisplayName',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'subscriptionStartDate',\n      index: 10,\n      type: 'datetime',\n      label: 'Start Date',\n      valuePath: 'startDate',\n      editable: true,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 140\n    }, {\n      id: 'subscriptionDatetime',\n      index: 11,\n      type: 'datetime',\n      label: 'End Date',\n      valuePath: 'endDate',\n      editable: false,\n      searchable: false,\n      hidden: false,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 140\n    }, {\n      id: 'subscriptionDropoffaddress',\n      index: 12,\n      type: 'text',\n      label: 'Drop off Address ',\n      valuePath: 'destination.address.simpleAddress',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 140\n    }, {\n      id: 'subscriptionDropoffCity',\n      index: 13,\n      type: 'text',\n      label: 'Drop off City',\n      valuePath: 'destination.address.locality',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'dropoffZone',\n      index: 14,\n      type: 'text',\n      label: 'Drop off Zone',\n      valuePath: 'destination.address.zoneName.valueDisplayName',\n      editable: true,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscriptions-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/subscriptions-form-widget/config\", \"moment\"], function (_exports, _component, _config, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      const records = this.get('editableRecords') || [];\n      records.forEach(record => {\n        if (record.get('exclusions').length === 0) {\n          const exclusionRecord = this.get('store').createRecord('subscription-exclusion');\n          exclusionRecord.set('subscription', record);\n          record.get('exclusions').pushObject(exclusionRecord);\n        }\n      });\n    },\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const requestedTime = (0, _moment.default)(record.get('requestedTime'));\n        const recurrencePatterns = record.recurrencePatterns || [];\n\n        if (Ember.isNone(requestedTime)) {\n          valid = false;\n          this.get('editModal.errors').pushObject('Date should be there');\n        }\n\n        recurrencePatterns.forEach(recurrencePattern => {\n          if (recurrencePattern.recurring) {\n            if (recurrencePattern.type === 'monthly') {\n              if (Ember.isNone(recurrencePattern.weekOfMonth) && Ember.isNone(recurrencePattern.dayOfMonth)) {\n                valid = false;\n                this.get('editModal.errors').pushObject('Day of month and week of month cannot be both blank.');\n              } else if (!Ember.isNone(recurrencePattern.weekOfMonth) && recurrencePattern.selectedDOWs.length < 1) {\n                valid = false;\n                this.get('editModal.errors').pushObject('Select day of the week.');\n              }\n            } else if (recurrencePattern.selectedDOWs.length < 1) {\n              valid = false;\n              this.get('editModal.errors').pushObject('Select the recurring day for subscription.');\n            }\n\n            if (Ember.isNone(recurrencePattern.subscriptionStartDate)) {\n              valid = false;\n              this.get('editModal.errors').pushObject('Must select a start date for subscription.');\n            }\n          }\n        });\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          this.get('service').apply();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscriptions-form-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }]\n    }, {\n      title: 'Editable',\n      fields: [{\n        id: 'anchor',\n        type: 'enum',\n        label: 'Anchor',\n        valuePath: 'anchor',\n        extra: {\n          options: ['pick', 'drop']\n        }\n      }, {\n        id: 'purpose',\n        type: 'text',\n        label: 'Purpose',\n        valuePath: 'purpose'\n      }, {\n        id: 'maximumOccurrences',\n        type: 'number',\n        label: 'Max Occurences',\n        valuePath: 'maximumOccurrences'\n      }, {\n        id: 'requestTime',\n        type: 'timeflatpickr',\n        label: 'Request Time',\n        valuePath: 'requestTime',\n        editable: true\n      }]\n    }, {\n      title: 'Fare',\n      fields: [{\n        id: 'type',\n        type: 'searchable-enum',\n        label: 'Payment Type',\n        valuePath: 'fareType',\n        editable: true,\n        extra: {\n          optionModelName: 'fare-type',\n          optionSearchPath: 'name',\n          optionSelectedPath: '',\n          optionIncludes: '',\n          optionSearchEnabled: false\n        }\n      }, {\n        id: 'fare',\n        type: 'number',\n        label: 'Amount',\n        valuePath: 'fare',\n        editable: true\n      }]\n    }, {\n      title: 'Origin',\n      fields: [{\n        id: 'origins',\n        type: 'addresses',\n        label: '',\n        valuePath: 'origin',\n        modelName: 'place',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetName',\n          localityPath: 'address.content.city',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.county',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          locationsPath: 'address.locations.content.firstObject.latlng'\n        }\n      }]\n    }, {\n      title: 'Destination',\n      fields: [{\n        id: 'destinations',\n        type: 'addresses',\n        label: '',\n        valuePath: 'destination',\n        modelName: 'place',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetName',\n          localityPath: 'address.content.city',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.county',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          locationsPath: 'address.locations.content.firstObject.latlng'\n        }\n      }]\n    }, {\n      title: 'Travel Needs',\n      fields: [{\n        id: 'travelNeeds',\n        type: 'bs-travel-needs',\n        label: '',\n        valuePath: 'subscriptionTravelNeeds',\n        modelName: 'subscription-travel-need',\n        isMultiType: true,\n        extra: {\n          travelNeedTypeModelName: 'travel-need-type',\n          passengerTypeModelName: 'passenger-type',\n          countPath: 'count',\n          travelNeedTypePath: 'travelNeedType',\n          passengerTypePath: 'passengerType'\n        }\n      }]\n    }, {\n      title: 'Subscription',\n      fields: [{\n        id: 'subscriptions',\n        type: 'bs-subscriptions',\n        label: '',\n        valuePath: 'recurrencePatterns',\n        modelName: 'subscription-recurence-pattern',\n        isMultiType: true,\n        extra: {\n          recurringPath: 'recurring',\n          dailyConfigPath: 'type',\n          selectedWOMPath: 'selectedWOM',\n          startDateTimePath: 'subscriptionStartDate',\n          endDateTimePath: 'subscriptionEndDate',\n          sundayPath: 'sunday',\n          mondayPath: 'monday',\n          tuesdayPath: 'tuesday',\n          wednesdayPath: 'wednesday',\n          thursdayPath: 'thursday',\n          fridayPath: 'friday',\n          saturdayPath: 'saturday',\n          excludeStartDateTimePath: 'exclusionStartDate',\n          excludeEndDateTimePath: 'exclusionEndDate',\n          maxOccurencesPath: 'subscriptionMaxOccurences',\n          separationCountPath: 'separationCount',\n          dayOfMonthPath: 'dayOfMonth'\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscriptions-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/subscriptions-widget/config\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"moment\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _lodash, _mappedPermIds, _moment, _filters, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    dragCoordinator: Ember.inject.service(),\n    store: Ember.inject.service(),\n    classNames: ['subscriptions-widget', 'data-test-subscriptions-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    editComponent: 'iq-widgets/subscriptions-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    limit: 500,\n\n    saveRecordFunction(records) {\n      this.set('editModal.errors', []);\n\n      function saveDeleteAllTravelNeeds(objects) {\n        const deleteObjects = _lodash.default.difference(objects.content.canonicalState, objects.content.currentState) || []; // delete objects that have been removed from the array\n\n        return Promise.all(deleteObjects.map(deleteObject => {\n          deleteObject._record.deleteRecord();\n\n          return deleteObject.save();\n        })).then(() => {\n          return Promise.all(objects.map(object => {\n            object.save();\n          }));\n        });\n      }\n\n      function saveNewTravelNeedObjects(subscription, oldObjects, newObjects) {\n        /*eslint-disable */\n        return Promise.all(newObjects.map(newObject => {\n          if (newObject.get('count') !== null && newObject.get('count') > 0) {\n            newObject.set('subscription', subscription);\n            newObject.save();\n            return newObject;\n          }\n        }));\n        /*eslint-enable */\n      }\n\n      function saveRecurrencePatterns(objects) {\n        return Promise.all(objects.map(object => {\n          object.save();\n        }));\n      }\n\n      function saveExlusions(objects) {\n        return Promise.all(objects.map(object => {\n          if (!Ember.isNone(object.get('startDate')) && !Ember.isNone(object.get('endDate'))) {\n            object.save();\n          }\n        }));\n      }\n\n      async function saveLocationObject(object) {\n        await object.address.save();\n        await object.location.save();\n        return object.save();\n      }\n\n      return new Promise((resolve, reject) => {\n        if (records) {\n          records.forEach(record => {\n            record.save().then(() => {\n              saveLocationObject(record.origin.content).then(() => {\n                saveLocationObject(record.destination.content).then(() => {\n                  saveRecurrencePatterns(record.get('recurrencePatterns')).then(() => {\n                    saveExlusions(record.get('exclusions')).then(() => {\n                      saveDeleteAllTravelNeeds(record.get('subscriptionTravelNeeds')).then(() => {\n                        saveNewTravelNeedObjects(record, record.get('subscriptionTravelNeeds'), record.get('newTravelNeeds')).then(() => {\n                          record.set('isForceDirty', false);\n                          this.get('activeContext.topActiveContext').get('refreshTableContent').perform([this.get('modelName')]);\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            }).catch(e => {\n              reject(e);\n            });\n          });\n        }\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('singleActions', [{\n        id: 'edit',\n        permId: _mappedPermIds.default.editSubscriptions,\n        name: 'Edit',\n        action: model => {\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [model], this.get('saveRecordFunction').bind(this));\n        }\n      }, {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLog,\n        name: 'View Activity Log',\n        action: subscription => {\n          const id = subscription.get('id');\n          this.get('workspace').pushState('subscriptionActivityLog', {\n            displayName: `Subscription ${id} Activity Log`,\n            subscription\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      }]);\n      this.set('bulkActions', [{\n        name: 'Bulk Edit',\n        action: () => {}\n      }]);\n    },\n\n    rowGroup: Ember.computed('row', function () {\n      return this.get('table.rows');\n    }).readOnly(),\n\n    fetchDataQuery() {\n      const start = (0, _moment.default)(this.get('workspace.startDate')).format();\n      const end = (0, _moment.default)(this.get('workspace.endDate')).format();\n      const filter = `and(and(lt(startDate,'${start}'),ge(endDate,'${end}')),or(eq(status,'active'),eq(status,'Active')))`;\n      const queryParams = {\n        filter: filter\n      };\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params, queryParams);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      let queryParams = arguments.length > 2 ? arguments[2] : undefined;\n      const store = this.get('store');\n      const testSubscriptionsWidget = this.get('testSubscriptionsWidget');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let activeData = store.peekAll(modelName) || [];\n\n      if (testSubscriptionsWidget) {\n        return activeData.filter(filterFn).sort(compareFn);\n      }\n\n      activeData = await store.query(modelName, queryParams);\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    actions: {\n      //NYAAR-17671  widgets are not maximized and cross icon should also not display in this widgets.\n      onHeaderDoubleClick() {\n        const maximizer = this.get('maximizer');\n        maximizer.minimize();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/subscriptions-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/subscriptions-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'subscription',\n    title: 'Subscriptions',\n    columns: [{\n      id: 'id',\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'bookings.firstObject.id',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'riderFirstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'rider.firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderLastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'rider.lastName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderPhone',\n      index: 2,\n      type: 'text',\n      label: 'Rider Phone',\n      valuePath: 'rider.riderPhoneNumber.formattedPhoneNumber',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'status',\n      index: 3,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60,\n      searchable: true\n    }, {\n      id: 'externalId',\n      index: 4,\n      type: 'text',\n      label: 'Subscription ID',\n      valuePath: 'id',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60,\n      searchable: true\n    }, {\n      id: 'Start Date',\n      index: 5,\n      type: 'datetime',\n      label: 'Start Date',\n      valuePath: 'startDate',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'datetime',\n      index: 6,\n      type: 'datetime',\n      label: 'End Date',\n      valuePath: 'endDate',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'recurrence',\n      index: 7,\n      type: 'enum',\n      label: 'Recurrence',\n      valuePath: 'formattedRecurrence',\n      cellDesc: 'Recurrences',\n      editable: false,\n      hidden: true,\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'riderId',\n      index: 8,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'rider.riderId',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60,\n      searchable: true\n    }, {\n      id: 'requestedTime',\n      index: 9,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      editable: true,\n      hidden: true,\n      format: 'HH:MM',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'serviceStartTime',\n      index: 10,\n      type: 'date',\n      label: 'Service Start Time',\n      valuePath: 'serviceWindowStartTime',\n      editable: true,\n      hidden: true,\n      format: 'HH:MM',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'serviceEndTime',\n      index: 11,\n      type: 'date',\n      label: 'Service End Time',\n      valuePath: 'serviceWindowEndTime',\n      editable: true,\n      hidden: true,\n      format: 'HH:MM',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'pickupaddress',\n      index: 12,\n      type: 'text',\n      label: 'Pickup Address ',\n      valuePath: 'origin.address.fullAddress',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80,\n      searchable: true\n    }, {\n      id: 'dropaddress',\n      index: 13,\n      type: 'text',\n      label: 'Dropoff Address',\n      valuePath: 'destination.address.fullAddress',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80,\n      searchable: true\n    }, {\n      id: 'anchor',\n      index: 14,\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'anchor',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 15,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'legNotes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'passengerNotes',\n      index: 16,\n      type: 'text',\n      label: 'Passenger Notes',\n      valuePath: 'rider.notes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'travelNeeds',\n      index: 17,\n      type: 'number',\n      label: 'Travel Needs',\n      valuePath: 'noOfTravelNeeds',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'fare',\n      index: 18,\n      type: 'number',\n      label: 'Fare',\n      valuePath: 'fare',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'paymentType',\n      index: 19,\n      type: 'text',\n      label: 'Payment Type',\n      valuePath: 'fareType.name',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'otp',\n      index: 20,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otp',\n      editable: false,\n      hidden: false,\n      highlightable: true,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/trips-widget/avlmConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/trips-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-trip',\n    defaultSortId: 'id',\n    defaultSortAsc: false,\n    title: 'Trips',\n    widgetName: 'tripWidget',\n    selectedRowLimit: 50,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    columns: [{\n      id: 'id',\n      index: 3,\n      type: 'text',\n      label: 'ID',\n      valuePath: 'tripId',\n      valuePreview: '1',\n      hidden: false,\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 95\n    }, {\n      id: 'riderFirstName',\n      index: 0,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderLastName',\n      index: 1,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderPhone',\n      type: 'enum',\n      index: 2,\n      label: 'Passenger Phone Number',\n      valuePath: 'passengerPhoneNumbers',\n      hidden: true,\n      defaultWidth: 70,\n      searchable: true,\n      unAvailable: true\n    }, {\n      id: 'externalId',\n      index: 11,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'tripType',\n      index: 9,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      editable: true,\n      hidden: false,\n      defaultWidth: 70,\n      unAvailable: true\n    }, {\n      id: 'routeName',\n      index: 4,\n      type: 'text',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      searchable: true,\n      hidden: false,\n      defaultWidth: 70\n    }, {\n      id: 'status',\n      index: 5,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      hidden: false,\n      isMapLabelVisible: true,\n      defaultWidth: 75\n    }, {\n      id: 'statusReason',\n      index: 6,\n      type: 'text',\n      label: 'Status Reason',\n      valuePath: 'statusReason',\n      hidden: false,\n      defaultWidth: 75\n    }, {\n      id: 'statusNotes',\n      index: 27,\n      type: 'text',\n      label: 'Status Notes',\n      valuePath: 'statusNotes',\n      hidden: true,\n      defaultWidth: 75\n    }, {\n      id: 'otpStatus',\n      index: 7,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      valuePreview: 'On Time',\n      hidden: false,\n      highlightable: true,\n      cellItem: 'OTPCellItem'\n    }, {\n      id: 'otpValue',\n      index: 28,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'promisedTime',\n      index: 8,\n      type: 'datetime',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      valuePreview: '09:00 AM',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 50,\n      cellItem: 'DateLocalCellItem'\n    }, {\n      id: 'requestedTime',\n      index: 10,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      valuePreview: '08:00 AM',\n      editable: true,\n      hidden: false,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'anchorETA',\n      index: 12,\n      type: 'time',\n      label: 'Anchor ETA',\n      valuePath: 'anchorEta',\n      valuePreview: '16',\n      hidden: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      cellItem: 'TimeCellItem'\n    }, {\n      id: 'serviceStartTime',\n      index: 13,\n      type: 'date',\n      label: 'Service Start Time',\n      valuePath: 'serviceStartTime',\n      valuePreview: '?',\n      editable: true,\n      hidden: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      cellItem: 'TimeCellItem'\n    }, {\n      id: 'serviceEndTime',\n      index: 14,\n      type: 'date',\n      label: 'Service End Time',\n      valuePath: 'serviceEndTime',\n      valuePreview: '?',\n      editable: true,\n      hidden: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      cellItem: 'TimeCellItem'\n    }, {\n      id: 'anchor',\n      index: 15,\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'anchor',\n      valuePreview: 'Pick',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'pickupAddress',\n      index: 16,\n      type: 'text',\n      label: 'Pickup Address',\n      valuePath: 'pickAddress',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupCity',\n      index: 17,\n      type: 'text',\n      label: 'Pickup City',\n      valuePath: 'pickCity',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropAddress',\n      index: 18,\n      type: 'text',\n      label: 'Drop off Address',\n      valuePath: 'dropAddress',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropCity',\n      index: 19,\n      type: 'text',\n      label: 'Drop off City',\n      valuePath: 'dropCity',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'passengerNotes',\n      index: 21,\n      type: 'text',\n      label: 'Passenger Notes',\n      valuePath: 'passengerNotes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80,\n      unAvailable: true\n    }, {\n      id: 'notes',\n      index: 20,\n      type: 'text',\n      label: 'Driver Notes',\n      valuePath: 'driverNotes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'travelNeeds',\n      index: 22,\n      type: 'enum',\n      label: 'Travel Needs',\n      valuePath: 'travelNeeds',\n      cellDesc: 'Travel Needs',\n      editable: false,\n      hidden: true,\n      unAvailable: true\n    }, // STUB FOR AVA DEMO\n    {\n      id: 'plannedMiles',\n      index: 23,\n      type: 'number',\n      label: 'Planned Trip Miles',\n      valuePath: 'plannedTripMiles',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50,\n      unAvailable: true\n    }, // STUB FOR AVA DEMO\n    {\n      id: 'actualMiles',\n      index: 24,\n      type: 'number',\n      label: 'Actual Trip Miles',\n      valuePath: 'actualTripMiles',\n      editable: false,\n      hidden: true,\n      defaultWidth: 50,\n      unAvailable: true\n    }, {\n      id: 'fare',\n      index: 25,\n      type: 'text',\n      label: 'Fare',\n      valuePath: 'fare',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'paymentType',\n      index: 26,\n      type: 'text',\n      label: 'Payment Type',\n      valuePath: 'paymentType',\n      valuePreview: 'Single',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50,\n      unAvailable: true\n    }, {\n      id: 'provider',\n      index: 29,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      valuePreview: 'MAG',\n      hidden: true,\n      highlightable: true\n    }],\n    traversal: {\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'name'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      }\n    },\n    implicit: {\n      conditions: [{\n        type: 'eqRQL',\n        field: 'isSupRoute',\n        value: [false]\n      }, {\n        type: 'stringNeRQL',\n        field: 'status',\n        value: ['Cancelled']\n      }, {\n        type: 'stringNeRQL',\n        field: 'status',\n        value: ['Removed']\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/trips-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/trips-widget/config\", \"adept-iq/pods/components/iq-widgets/trips-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/trips-widget/scheduleConfig\", \"adept-iq/config/environment\", \"adept-iq/utils/find-row-record\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/api-urls\", \"ember-concurrency\", \"moment\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/mixins/async-booking-operation\", \"adept-iq/mixins/version-check\", \"adept-iq/utils/rql-generators\", \"adept-iq/models/trip\", \"adept-iq/models/stop-point\", \"adept-iq/models/dashboard\", \"adept-iq/models/segment\"], function (_exports, _component, _config, _avlmConfig, _scheduleConfig, _environment, _findRowRecord, _unwrapProxy, _apiUrls, _emberConcurrency, _moment, _lodash, _mappedPermIds, _asyncScheduleOperation, _asyncBookingOperation, _versionCheck, _rqlGenerators, _trip, _stopPoint, _dashboard, _segment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = ['rider', 'cluster.route', 'stops', 'stops.place', 'rider.travelNeeds', 'rider.travelNeeds.travelNeedType', 'cluster', 'cluster.route,stops.stopEvents', 'fareType', 'serviceWindow'];\n  const TRIP_UNASSIGNED = 'UNASSIGNED';\n\n  var _default = _component.default.extend(_asyncScheduleOperation.default, _asyncBookingOperation.default, _versionCheck.default, {\n    dragCoordinator: Ember.inject.service(),\n    store: Ember.inject.service(),\n    classNames: ['trips-widget', 'data-test-trips-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    flashMessages: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    providersList: Ember.computed.alias('workspaceContext._selectedProviders'),\n    cutOffTime4LateCancelTrip: 0,\n    lateTripCancelMessage: null,\n    notificationInitiation: Ember.inject.service(),\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    noShowComponent: 'iq-widgets/noshow-event-stop-form-widget',\n    cancelTripComponent: 'iq-widgets/cancel-type-form-widget',\n    isScheduleDashboard: Ember.computed.readOnly('workspace.isScheduleDashboard'),\n    isReconcileDashboard: Ember.computed.readOnly('workspace.isReconcileDashboard'),\n    isDispatchDashboard: Ember.computed.readOnly('workspace.isDispatchDashboard'),\n    providersDict: Ember.computed('providersList', function () {\n      const ProvidersList = this.get('providersList');\n      const dict = {};\n      ProvidersList.forEach(provider => {\n        dict[provider.get('id')] = provider.get('name');\n      });\n      return dict;\n    }),\n    routeexecevent: Ember.inject.service(),\n\n    init() {\n      const isDispatchDashboard = this.get('isDispatchDashboard');\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      const implicitConditions = _config.default.implicit.conditions;\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      if (isDispatchDashboard) {\n        const implicitConditionsForDispatch = [{\n          type: 'stringEq',\n          field: 'scheduleStatus',\n          value: ['exported']\n        }];\n        _config.default.implicit.conditions = implicitConditions.concat(implicitConditionsForDispatch);\n        this.set('config', _config.default);\n      }\n\n      if (isScheduleDashboard) {\n        const restrictConditionForSchedule = ['scheduleStatus'];\n        _scheduleConfig.default.implicit.conditions = _scheduleConfig.default.implicit.conditions.filter(condition => {\n          if (restrictConditionForSchedule.includes(condition.field)) {\n            return false;\n          }\n\n          return true;\n        });\n        this.set('config', _scheduleConfig.default);\n      }\n\n      this._super(...arguments);\n\n      this.routeTripFetchQuery = this.routeTripFetchQuery.bind(this);\n    },\n\n    saveNoShowRecordFunction(records) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const tripNoShowAdapter = store.adapterFor('trip-noshow');\n      const notifications = this.get('notifications');\n      return records.reduce((acu, record) => {\n        const dsStop = (0, _unwrapProxy.unwrapProxy)(record);\n        const noshow = (0, _unwrapProxy.unwrapProxy)(dsStop.get('noShow'));\n        const noshowReason = (0, _unwrapProxy.unwrapProxy)(noshow.get('noShowReasonCode'));\n        const trip = (0, _unwrapProxy.unwrapProxy)(dsStop.get('trip'));\n        trip.set('noshowDetails', noshow.get('notes'));\n        return acu.then(() => routeExecEventAdapter.createStopNoShowEvent(record)).then(() => tripNoShowAdapter.createTripNoShow(trip, noshowReason)).then(() => {\n          notifications.success(`Successfully No Showed Trip ${dsStop.get('trip.tripId')}`);\n        }).catch(e => {\n          notifications.warning(`Failed to No Show Trip ${dsStop.get('trip.tripId')}`);\n          throw new Error(e);\n        });\n      }, Promise.resolve());\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('tableActions', [{\n        id: 'print',\n        permIds: [_mappedPermIds.default.downloadTrips],\n        name: 'Download',\n        action: () => {\n          this.exportData();\n        }\n      }]);\n      this.get('tableActions').unshiftObject({\n        id: 'adHocNotifications',\n        name: 'Ad Hoc Notification',\n        permId: _mappedPermIds.default.adHocNotifications,\n        action: async () => {\n          const tooltip = this.get('tooltip');\n          const isDispatchDashboard = this.get('isDispatchDashboard');\n          const currentScheduleId = isDispatchDashboard ? 'dispatchSchedule' : this.get('workspace.currentSchedule.id');\n          const allNotificationSchedules = await this.get('notificationInitiation').getAllNotificationSchedules(currentScheduleId);\n\n          const scheduledFutureNotification = _lodash.default.find(allNotificationSchedules, ns => ns.attributes.type === 'scheduled' && ns.attributes.status === 'created');\n\n          const selectedTrips = this.get('checkedItems') || []; // filter out invalid trips statuses\n\n          _lodash.default.remove(selectedTrips, st => !_lodash.default.includes(['Scheduled', 'Dispatched', 'En route', 'Callback', 'Waitlisted', 'Active'], st.get('tripStatus')));\n\n          const currentSelectedRiders = selectedTrips.map(trip => trip.get('rider')); // Find the earliest tripTime from selectedTrips\n\n          const tripTimeByRiderId = {};\n          selectedTrips.forEach(trip => {\n            const riderId = trip.get('rider.id');\n            const time = trip.get('promiseTime');\n            const tripId = trip.get('id');\n\n            if (!tripTimeByRiderId[riderId]) {\n              tripTimeByRiderId[riderId] = {\n                earliestTripTime: time,\n                tripIds: [tripId]\n              };\n            } else {\n              if (time < tripTimeByRiderId[riderId].earliestTripTime) {\n                tripTimeByRiderId[riderId].earliestTripTime = time;\n              }\n\n              tripTimeByRiderId[riderId].tripIds.push(tripId);\n            }\n          });\n\n          if (scheduledFutureNotification) {\n            tooltip.pushConfirmation({\n              tip: 'You have an active ad hoc notification scheduled. Only one notification can be scheduled at any given time. You can view the current notification status by selecting \\'view\\' or create a new \\'Send Now\\' notification',\n              title: 'Ad Hoc Message',\n              primaryActionText: 'Send New',\n              primaryAction: () => {\n                this.get('workspace').pushState('addEditAdHocNotification', {\n                  displayName: 'Add Notification',\n                  currentSelectedRiders,\n                  allNotificationSchedules,\n                  tripTimeByRiderId\n                });\n                tooltip.reset();\n              },\n              secondaryActionText: 'View',\n              secondaryAction: () => {\n                this.get('workspace').pushState('addEditAdHocNotification', {\n                  displayName: 'View Scheduled Notification',\n                  currentSelectedRiders,\n                  allNotificationSchedules,\n                  scheduledFutureNotification,\n                  tripTimeByRiderId\n                });\n                tooltip.reset();\n              },\n              thirdActionText: 'Cancel',\n              thirdAction: () => tooltip.reset(),\n              closeAction: () => tooltip.reset(),\n              hasOverlay: true\n            });\n            return;\n          }\n\n          this.get('workspace').pushState('addEditAdHocNotification', {\n            displayName: 'Add Notification',\n            currentSelectedRiders,\n            allNotificationSchedules,\n            tripTimeByRiderId\n          });\n        }\n      });\n      this.set('tripTransferAction', {\n        id: 'tripTransfer',\n        permId: _mappedPermIds.default.autoTransferTrip,\n        name: 'Transfer Trip',\n        action: trip => {\n          if (this.get('isScheduleDashboard')) {\n            this.get('workspace').pushState('schedulingTripTransfer', {\n              trip\n            });\n            return;\n          }\n\n          this.get('workspace').pushState('tripTransfer', {\n            callback: this.get('updateTripSelection').bind(this),\n            trip\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('bulkTripTransferAction', [{\n        id: 'bulkTripTransfer',\n        permId: _mappedPermIds.default.autoTransferTrip,\n        name: 'Bulk Trip Transfer',\n        action: trips => {\n          if (this.get('isScheduleDashboard')) {\n            this.get('workspace').pushState('schedulingBulkTripTransfer', {\n              trips\n            });\n            return;\n          }\n\n          this.get('workspace').pushState('bulkTripTransfer', {\n            trips\n          });\n        }\n      }]);\n      this.set('noShowAction', {\n        id: 'noShow',\n        permId: _mappedPermIds.default.noShowTrip,\n        name: 'No Show',\n        action: model => {\n          const store = this.get('store');\n          const pickStopPoint = model.get('pickStopPoint');\n          const noShowReasonCodes = this.get('store').peekAll('no-show-reason-category');\n          const overrideNoShowReason = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideNoShowReason);\n          const routeTripStartTime = (0, _moment.default)(pickStopPoint.get('routeTripStartTime')).toDate(); // sort all no show reason code by the promise time start/end\n\n          const sortedNoShowReasonCode = noShowReasonCodes.toArray().sort(function (a, b) {\n            const aMinStartTime = Ember.isPresent(a.get('minutesFromPromiseTimeStart')) ? parseInt(a.get('minutesFromPromiseTimeStart'), 10) : 999;\n            const aMinEndTime = Ember.isPresent(a.get('minutesFromPromiseTimeEnd')) ? parseInt(a.get('minutesFromPromiseTimeEnd'), 10) : 999;\n            const bMinStartTime = Ember.isPresent(b.get('minutesFromPromiseTimeStart')) ? parseInt(b.get('minutesFromPromiseTimeStart'), 10) : 999;\n            const bMinEndTime = Ember.isPresent(b.get('minutesFromPromiseTimeEnd')) ? parseInt(b.get('minutesFromPromiseTimeEnd'), 10) : 999;\n\n            if (aMinStartTime > bMinStartTime && aMinEndTime > bMinEndTime) {\n              return 1;\n            } else if (aMinStartTime < bMinStartTime && aMinEndTime < bMinEndTime) {\n              return -1;\n            }\n\n            return 0;\n          }); // calculate the duration for current time and stop's ETA\n\n          const actualArriveTime = pickStopPoint.get('actualArriveTime') ? (0, _moment.default)(pickStopPoint.get('actualArriveTime')) : (0, _moment.default)();\n          const promisedTime = (0, _moment.default)(pickStopPoint.get('promisedTime'));\n\n          const minDurations = _moment.default.duration(actualArriveTime.diff(promisedTime)).asMinutes();\n\n          let calculatedNoShowReason = sortedNoShowReasonCode.find(code => {\n            const aMinStartTime = Ember.isPresent(code.get('minutesFromPromiseTimeStart')) ? parseInt(code.get('minutesFromPromiseTimeStart'), 10) : 999;\n            const aMinEndTime = Ember.isPresent(code.get('minutesFromPromiseTimeEnd')) ? parseInt(code.get('minutesFromPromiseTimeEnd'), 10) : 999;\n\n            if (minDurations >= aMinStartTime && minDurations <= aMinEndTime) {\n              return true;\n            }\n\n            return false;\n          });\n\n          if (!Ember.isPresent(calculatedNoShowReason)) {\n            // if it's really early then pick one with the biggest range\n            if (minDurations > 0) {\n              calculatedNoShowReason = sortedNoShowReasonCode.lastObject;\n            } else {\n              calculatedNoShowReason = sortedNoShowReasonCode.firstObject;\n            }\n          }\n\n          pickStopPoint.set('routeTripStartTime', routeTripStartTime);\n          pickStopPoint.set('noShow', store.createRecord('no-show', {\n            timestamp: new Date(),\n            noShowReasonCode: calculatedNoShowReason\n          }));\n          pickStopPoint.set('minPerformedTime', new Date());\n\n          if (!Ember.isPresent(calculatedNoShowReason) || overrideNoShowReason) {\n            pickStopPoint.set('noShowDropDownReadonly', false);\n          } else {\n            pickStopPoint.set('noShowDropDownReadonly', true);\n          }\n\n          const noShowComponent = this.get('noShowComponent'); // this.get('editModal').open(noShowComponent, [pickStopPoint], this.get('saveNoShowRecordFunction').bind(this), null, { title: 'Perform No Show' });\n\n          this.get('editModal').open(noShowComponent, [pickStopPoint], this.get('saveNoShowRecordFunction').bind(this), null, null, {\n            title: 'No Show Trip'\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('unPerformNoShowAction', {\n        id: 'unperform',\n        permId: _mappedPermIds.default.unperformStop,\n        name: 'Unperform No Show',\n        action: model => {\n          const workspace = this.get('workspace');\n          const pickStopPoint = model.get('pickStopPoint');\n          const title = 'Unperform No Show';\n          workspace.pushState('unPerformNoShow', {\n            stopPoint: pickStopPoint,\n            title\n          }, {\n            replaceSelf: true\n          });\n        },\n        disableOnLockedRoute: true\n      });\n      this.set('approveNoShowRequestAction', {\n        id: 'approveNoShowRequest',\n        permId: _mappedPermIds.default.approveNoShowRequest,\n        name: 'Approve NoShow Request',\n        action: trip => {\n          this.get('workspace').pushState('noShowForm', {\n            displayName: 'No Show Approval Form',\n            trip,\n            sectionId: 'approve'\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: true\n      });\n      this.set('denyNoShowRequestAction', {\n        id: 'denyNoShowRequest',\n        permId: _mappedPermIds.default.denyNoShowRequest,\n        name: 'Deny NoShow Request',\n        action: trip => {\n          this.get('workspace').pushState('noShowForm', {\n            displayName: 'No Show Denial Form',\n            trip,\n            sectionId: 'deny'\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('waitlistAction', {\n        id: 'waitlist',\n        permId: _mappedPermIds.default.waitlist,\n        name: 'Waitlist',\n        action: model => {\n          this.waitlistTrip(model);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('cancelAction', {\n        id: 'cancelTrip',\n        permIds: [_mappedPermIds.default.cancelFuture, _mappedPermIds.default.cancelSameDay],\n        name: 'Cancel Trip',\n        action: model => {\n          const trip = model;\n          const tripId = _environment.default.APP.avlmLite ? model.get('externalId') : model.get('tripId');\n          const booking = (0, _unwrapProxy.unwrapProxy)(model.get('booking.content'));\n          const segment = (0, _unwrapProxy.unwrapProxy)(model.get('segment'));\n          const isParaTransitTravelMode = model.get('segment.isParaTransitTravelMode');\n          const isUnScheduledTrip = model.get('isUnScheduledTrip');\n          const isScheduleDashboard = this.get('isScheduleDashboard');\n          booking.set('timestamp', new Date());\n          const cutOffTime4LateCancelTrip = this.store.peekRecord('cs-config-item', 'config-Cancel_Trips/cutOffTime4LateCancelTrip');\n          const lateTripCancelMessage = this.store.peekRecord('cs-config-item', 'config-Cancel_Trips/Late_Trip_Cancel_Message');\n          this.set('lateTripCancelMessage', lateTripCancelMessage);\n          this.set('cutOffTime4LateCancelTrip', cutOffTime4LateCancelTrip);\n          const value = Number(this.get('cutOffTime4LateCancelTrip').get('value'));\n          const row = this.getSelectedCoreModel();\n          const promiseTime = row.get('promiseTime');\n          const tripDate = promiseTime ? (0, _moment.default)(promiseTime) : (0, _moment.default)(row.get('segment.leg.requestTime'));\n          const lateCancelCutoffTime = (0, _moment.default)().add(value, 'minutes');\n          const currentDate = (0, _moment.default)().startOf('day');\n          const endTimeForCancellation = tripDate.subtract(value, 'minutes');\n          const currentTime = (0, _moment.default)();\n          const cancelTripPanelDetails = {\n            lateCancelCutoffTime: lateCancelCutoffTime,\n            lateCancel: false,\n            displayName: 'Cancel Trip',\n            trip,\n            booking,\n            segment,\n            tripId\n          };\n\n          if (isScheduleDashboard && tripDate.date() <= currentDate.date() && (0, _moment.default)(endTimeForCancellation).isBefore(currentTime) && !isUnScheduledTrip && !isParaTransitTravelMode) {\n            cancelTripPanelDetails.lateCancel = true;\n            return this.showLateTripCancelBookingWarning(cancelTripPanelDetails);\n          } else if (tripDate.date() <= currentDate.date() && (0, _moment.default)(endTimeForCancellation).isBefore(currentTime)) {\n            cancelTripPanelDetails.lateCancel = true;\n            return this.showLateTripCancelBookingWarning(cancelTripPanelDetails);\n          }\n\n          this.get('workspace').pushState('cancelTripForm', cancelTripPanelDetails);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editAction', {\n        id: 'edit',\n        permIds: [_mappedPermIds.default.editFuture, _mappedPermIds.default.editPast, _mappedPermIds.default.editSameDay],\n        name: 'Edit',\n        action: async trip => {\n          if (!trip.get('pick.segmentStop.place.address.id') || !trip.get('drop.segmentStop.place.address.id')) {\n            const placeIdsInClause = [trip.get('pick.segmentStop.place.id'), trip.get('drop.segmentStop.place.id')].map(p => `'${p}'`).join(',');\n            const placesQuery = `in(id,(${placeIdsInClause}))&include=address,location`;\n            await this.get('store').query('place', {\n              filter: placesQuery\n            });\n          }\n\n          this.get('workspace').pushState('editTripWidget', {\n            trip\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('activityLogAction', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLog,\n        name: 'View Activity Log',\n        action: trip => {\n          const id = _environment.default.APP.avlmLite ? trip.get('externalId') : trip.get('tripId');\n          this.get('workspace').pushState('tripActivityLog', {\n            displayName: `Trip ${id} Activity Log`,\n            trip\n          });\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: false\n      });\n      this.set('autoRescheduleAction', {\n        id: 'autoReschedule',\n        permId: _mappedPermIds.default.autoReschedule,\n        name: 'Auto Reschedule',\n        action: trip => {\n          this.autoRescheduleTrip(trip);\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: true\n      });\n      this.set('autoRescheduleActionForWaitListedTrip', {\n        id: 'autoReschedule',\n        permId: _mappedPermIds.default.autoReschedule,\n        name: 'Auto Reschedule',\n        action: trip => {\n          this.autoRescheduleForWaitListedTrip(trip);\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: true\n      });\n      this.set('sendToTaxiAction', {\n        id: 'sendToTaxi',\n        permId: _mappedPermIds.default.autoReschedule,\n        name: 'Send to Taxi',\n        action: trip => {\n          this.sendToTaxiTrip(trip);\n        },\n        disableOnLocked: false,\n        disableOnLockedRoute: true\n      });\n      this.set('dispatchEditAction', {\n        id: 'edit',\n        permIds: [_mappedPermIds.default.editSameDay],\n        name: 'Edit',\n        action: async trip => {\n          if (!trip.get('pick.segmentStop.place.address.id') || !trip.get('drop.segmentStop.place.address.id')) {\n            //if place address is not we have to query\n            if (!trip.get('pick.segmentStop.place.id') || !trip.get('drop.segmentStop.place.id')) {\n              const segmentStopIds = [trip.get('pick.segmentStop.id'), trip.get('drop.segmentStop.id')].map(s => `'${s}'`).join(',');\n              await this.querySegmentStop(segmentStopIds);\n            }\n\n            const placeIdsInClause = [trip.get('pick.segmentStop.place.id'), trip.get('drop.segmentStop.place.id')].map(p => `'${p}'`).join(',');\n            const placesQuery = `in(id,(${placeIdsInClause}))&include=address,location`;\n            await this.get('store').query('place', {\n              filter: placesQuery\n            });\n          } //if riderId address is not we have to query\n\n\n          if (!trip.get('segment.leg.rider.riderId')) {\n            const riderId = trip.get('segment.leg.rider.id');\n            const riders = await this.queryRider(riderId);\n            trip.set('segment.leg.rider', riders.firstObject);\n          }\n\n          this.get('workspace').pushState('editTripWidget', {\n            trip\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n    },\n\n    rowGroup: Ember.computed('row', function () {\n      return this.get('table.rows');\n    }).readOnly(),\n    oneDayTimeline: Ember.computed('workspace.{startDate,endDate}', function () {\n      const startDate = (0, _moment.default)(this.get('workspace.startDate')).format('YYYY-MMM-D');\n      const endDate = (0, _moment.default)(this.get('workspace.endDate')).format('YYYY-MMM-D');\n      return startDate === endDate;\n    }),\n\n    dragOver(event) {\n      event.preventDefault();\n      if (this.get('dragCoordinator.widgetType') !== 'routes') return;\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drop onto widget's other elements.\n\n      if (Ember.isBlank(rowElement) || Ember.isBlank(rowElement.id)) return;\n      this.$(`#${rowElement.id}`).addClass('drag-target');\n    },\n\n    dragLeave(event) {\n      event.preventDefault();\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target);\n      if (Ember.isBlank(rowElement) || Ember.isBlank(rowElement.id)) return;\n      this.$(`#${rowElement.id}`).removeClass('drag-target');\n    },\n\n    drop(event) {\n      event.preventDefault();\n      event.stopPropagation();\n      if (this.get('dragCoordinator.widgetType') !== 'routes') return;\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target);\n      if (Ember.isBlank(rowElement) || Ember.isBlank(rowElement.id)) return;\n      this.$(`#${rowElement.id}`).removeClass('drag-target');\n      const sourceRowRecord = this.get('dragCoordinator').getSourceRow(event.dataTransfer.getData('text'));\n      if (Ember.isBlank(sourceRowRecord)) return;\n      const targetRowRecord = (0, _findRowRecord.findRowRecordByElement)(event.target, this.get('rowGroup'));\n      this.assignCluster(targetRowRecord, sourceRowRecord);\n    },\n\n    assignCluster(tripRow, routeRow) {\n      const tripRecord = tripRow.get('record');\n      const routeRecord = routeRow.get('record');\n\n      if (routeRecord.constructor.modelName !== 'route') {\n        return;\n      }\n\n      let cluster = routeRecord.get('clusters').firstObject;\n\n      if (Ember.isBlank(cluster)) {\n        cluster = this.get('store').createRecord('cluster', {\n          route: routeRecord\n        });\n        tripRecord.set('cluster', cluster);\n        cluster.save();\n      } else {\n        tripRecord.set('cluster', cluster);\n        tripRecord.save();\n      }\n    },\n\n    performDispatchWaitlist(tripId, dispatchRoute) {\n      const session = this.get('session');\n\n      const dispatchRouteVersion = _lodash.default.get(dispatchRoute, 'version', null);\n\n      const json = {};\n\n      if (dispatchRouteVersion) {\n        json.data = {\n          type: 'stopPoint',\n          relationships: {\n            dispatchRoute: {\n              data: {\n                type: 'dispatchRoute',\n                id: dispatchRoute.get('id')\n              }\n            }\n          }\n        };\n        json.included = [{\n          type: 'dispatchRoute',\n          id: dispatchRoute.get('id'),\n          attributes: {\n            version: dispatchRouteVersion\n          }\n        }];\n      }\n\n      return this.get('ajax').delete(_apiUrls.API.dispatchService.host + '/trip/' + tripId + '/waitlist', {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    performScheduleWaitlist: (0, _emberConcurrency.task)(function* (trip) {\n      const schedule = trip.get('route.schedule');\n      const tripId = parseInt(trip.get('id'), 10);\n      let result;\n\n      try {\n        const operationData = {\n          tripId\n        };\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, 'tripWaitlist', options);\n\n        if (!result) {\n          throw new Error('Unable to place trip on waitlist.');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    performWaitlist(model) {\n      if (this.get('isScheduleDashboard')) {\n        return this.performScheduleWaitlist.perform(model);\n      }\n\n      return this.performDispatchWaitlist(model.get('id'), model.get('dispatchRoute'));\n    },\n\n    updateTripSelection() {\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const tripId = selectedWidgetRecord._key;\n      const routeId = selectedWidgetRecord.routeId;\n\n      if (tripId && routeId && this.get('widgetService').isSelected('tripWidget', tripId) && this.get('widgetService').isSelected('routeWidget', routeId)) {\n        this.updateSelection(selectedWidgetRecord, false);\n      } else {\n        this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n      }\n    },\n\n    async waitlistTrip(model) {\n      const notifications = this.get('notifications');\n      const title = 'Waitlist Trip';\n      const tooltip = this.get('tooltip');\n      const dispatchRoute = model.get('dispatchRoute');\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      this.set('dispatchRouteToCheck', dispatchRoute);\n\n      try {\n        // Check dispatchRoute version first\n        if (this.get('isDispatchDashboard')) {\n          await this.get('versionCheckOperation').perform();\n          await lockRouteAction();\n        }\n\n        tooltip.pushConfirmation({\n          tip: `Are you sure you want to waitlist trip ${model.get('tripId')} ?`,\n          title,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await this.performWaitlist(model);\n              notifications.success(`Successfully Waitlisted Trip ${model.get('tripId')}`);\n              this.updateTripSelection();\n            } catch (e) {\n              let msg = `Failed to Waitlist Trip ${model.get('tripId')}`;\n              if (e.message && e.message.includes('failed due to a conflict')) msg = msg + ', the Trip`s Route has already been modified by another request';\n              notifications.warning(msg);\n            } finally {\n              await unlockRouteAction();\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            await unlockRouteAction();\n            return tooltip.reset();\n          },\n          closeAction: async () => {\n            await unlockRouteAction();\n          },\n          hasOverlay: true\n        });\n      } catch (e) {\n        if (this.get('isDispatchDashboard')) {\n          await unlockRouteAction();\n        }\n      }\n    },\n\n    /**\n     * NYAAR-19220: fetch query for route and trip model\n     * @param {Object} model\n     */\n    async routeTripFetchQuery(model) {\n      const routeId = model.get('route.id');\n\n      if (routeId) {\n        await this.get('booking').routeTripQuery(routeId);\n      }\n    },\n\n    performAutoReschedule: (0, _emberConcurrency.task)(function* (model, operationData, operationType) {\n      const schedule = this.getScheduleData(model);\n      let asyncResult;\n\n      try {\n        const options = {\n          operationData,\n          outputResult: true\n        };\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createScheduleAsyncOperation.perform(schedule, operationType, options);\n        asyncResult = isJobSuccess;\n\n        if (!isJobSuccess) {\n          const errMsg = 'Unable to reschedule trip in SES';\n\n          if (results.includes(errMsg)) {\n            throw new Error(errMsg);\n          }\n\n          throw new Error(`Trip ${model.get('tripId')} failed to reschedule`);\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      yield this.get('routeTripFetchQuery')(model);\n      return Promise.resolve(asyncResult);\n    }),\n\n    autoRescheduleTrip(model) {\n      const title = 'Auto Reschedule';\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const failureMsg = `Trip ${model.get('tripId')} failed to reschedule`;\n      const isWaitlistedTripScheduled = model.get('isWaitlisted');\n      const originalRouteId = model.get('route.id');\n      const originalRouteName = model.get('route.name');\n      const travelMode = model.get('segment.travelMode');\n      tooltip.pushConfirmation({\n        tip: `Are you sure you want to automatically reschedule trip  ${model.get('tripId')} ?`,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          const tripId = parseInt(model.get('id'), 10);\n          const currentRouteId = parseInt(model.get('route.id'), 10);\n          const operationData = {\n            tripId,\n            routes: [currentRouteId],\n            routeUsage: 1\n          };\n          let operationType = 'tripReschedule'; // Reg-NYAAR-20243 for Taxi Trip the operationType Should be 'scheduleTrip'\n\n          if (travelMode === _segment.TAXI_TYPE) {\n            delete operationData.routes;\n            delete operationData.routeUsage;\n            operationType = 'scheduleTrip';\n          }\n\n          return this.get('performAutoReschedule').perform(model, operationData, operationType).then(() => {\n            this.get('workspace').pushState('schedulingAutoReschedule', {\n              trip: model,\n              isWaitlistedTripScheduled: isWaitlistedTripScheduled,\n              status: 'success',\n              originalRouteId: originalRouteId,\n              originalRouteName: originalRouteName\n            });\n          }).catch(err => {\n            const errMsg = 'Unable to reschedule trip in SES';\n\n            if (err.message === errMsg) {\n              this.get('workspace').pushState('schedulingAutoReschedule', {\n                trip: model,\n                status: 'failure',\n                originalRouteId: originalRouteId,\n                originalRouteName: originalRouteName\n              });\n              return;\n            }\n\n            notifications.warning(failureMsg);\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => tooltip.reset(),\n        hasOverlay: true\n      });\n    },\n\n    autoRescheduleForWaitListedTrip(model) {\n      const title = 'Auto Reschedule';\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const failureMsg = `${model.get('tripId')} failed to reschedule`;\n      const isWaitlistedTripScheduled = model.get('isWaitlisted');\n      const isUnscheduledTripScheduled = model.get('isUnScheduledTrip');\n      const isTaxiTravelMode = model.get('segment.isTaxiTravelMode');\n      tooltip.pushConfirmation({\n        tip: `Are you sure you want to automatically reschedule trip  ${model.get('tripId')} ?`,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          const tripId = parseInt(model.get('id'), 10);\n          const operationData = {\n            tripId\n          };\n          const operationType = 'scheduleTrip';\n          return this.get('performAutoReschedule').perform(model, operationData, operationType).then(() => {\n            this.get('workspace').pushState('schedulingAutoReschedule', {\n              trip: model,\n              status: 'success',\n              isWaitlistedTripScheduled: isWaitlistedTripScheduled,\n              isUnscheduledTripScheduled: isUnscheduledTripScheduled,\n              isTaxiTravelMode: isTaxiTravelMode\n            });\n          }).catch(err => {\n            const errMsg = 'Unable to reschedule trip in SES';\n\n            if (err.message === errMsg) {\n              this.get('workspace').pushState('schedulingAutoReschedule', {\n                trip: model,\n                status: 'failure'\n              });\n              return;\n            }\n\n            notifications.warning(failureMsg);\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => tooltip.reset(),\n        hasOverlay: true\n      });\n    },\n\n    dynamicSingleActions: Ember.computed('table.rows.@each.{selected,computedStatus}', 'selectedWidgetRecord', 'isLoading', function () {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            return this._dynamicScheduleActions();\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            return this._dynamicDispatchActions();\n        }\n      }\n    }),\n\n    _dynamicScheduleActions() {\n      const tripTransferAction = this.get('tripTransferAction');\n      const noShowAction = this.get('noShowAction');\n      const waitlistAction = this.get('waitlistAction');\n      const activityLogAction = this.get('activityLogAction');\n      const approveNoShowRequestAction = this.get('approveNoShowRequestAction');\n      const denyNoShowRequestAction = this.get('denyNoShowRequestAction');\n      const unPerformNoShowAction = this.get('unPerformNoShowAction');\n      const autoRescheduleAction = this.get('autoRescheduleAction');\n      const autoRescheduleActionForWaitListedTrip = this.get('autoRescheduleActionForWaitListedTrip');\n      const editTrip = this.get('editAction');\n      const cancelTrip = this.get('cancelAction');\n      const row = this.getSelectedCoreModel();\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const isTaxiTravelMode = row.get('segment.isTaxiTravelMode');\n      const isBrokerEligible = row.get('segment.leg.brokerEligible');\n      if (!row) return [];\n      const isManualSchedulingMode = row.get('isManualSchedulingMode');\n      let tripStatus = selectedWidgetRecord.tripStatus;\n      tripStatus = tripStatus.charAt(0).toUpperCase() + tripStatus.substr(1);\n      const isBrokerProviderType = row.get('provider.isBrokerProviderType');\n      const isBrokerTravelMode = row.get('segment.isBrokerTravelMode');\n      const pickStopStatus = row.get('pickStopPoint.computedStatus');\n      const lastPerformedStopID = row.get('dispatchRoute.lastPerformedStop.trip.tripId');\n      const currentRowTripID = this.get('lastRowClicked.tripId');\n      const currentTime = new Date();\n      const noShowTimeThreshold = this.get('store').peekRecord('cs-config-item', 'config-Driving_Configuration/noShowTimeThreshold');\n      const promiseTime = row.get('promiseTime');\n      let noShowAvailableTime = (0, _moment.default)(promiseTime);\n      const isBusOrWalkTravelMode = row.get('segment.isBusOrWalkTravelMode'); //NYAAR-19151:No right-click context menu options for ITP trips\n\n      if (isBusOrWalkTravelMode) return [];\n      let options;\n\n      switch (tripStatus) {\n        case _trip.TRIP_SCHEDULED_STATUS:\n          if (isBrokerTravelMode) {\n            return [activityLogAction, tripTransferAction, editTrip, cancelTrip];\n          }\n\n          if (isTaxiTravelMode) {\n            if (isManualSchedulingMode) {\n              return [activityLogAction, cancelTrip, editTrip];\n            }\n\n            return [activityLogAction, autoRescheduleAction, cancelTrip, editTrip];\n          }\n\n          if (isManualSchedulingMode) {\n            return this.addWaitListAction([activityLogAction, tripTransferAction, editTrip, cancelTrip], isBrokerProviderType, waitlistAction);\n          }\n\n          return this.addWaitListAction([activityLogAction, tripTransferAction, autoRescheduleAction, editTrip, cancelTrip], isBrokerProviderType, waitlistAction);\n\n        case _trip.TRIP_DISPATCH_STATUS:\n          return this.addWaitListAction([activityLogAction, tripTransferAction], isBrokerProviderType, waitlistAction);\n\n        case _trip.TRIP_ENROUTE_STATUS:\n          if (pickStopStatus === _stopPoint.ARRIVE_STOP_STATUS) {\n            const actualArriveTime = row.get('actualArriveTime');\n            if (actualArriveTime) noShowAvailableTime = _moment.default.max((0, _moment.default)(actualArriveTime), noShowAvailableTime);\n\n            if (noShowTimeThreshold) {\n              row.get('pickStopPoint').set('noShowTimeThreshold', noShowTimeThreshold);\n              noShowAvailableTime.add(parseInt(noShowTimeThreshold.value, 10), noShowTimeThreshold.unit);\n            }\n\n            if ((0, _moment.default)(currentTime).isBefore(noShowAvailableTime)) {\n              return [activityLogAction];\n            }\n\n            return [activityLogAction, noShowAction];\n          }\n\n          if (noShowTimeThreshold) {\n            row.get('pickStopPoint').set('noShowTimeThreshold', noShowTimeThreshold);\n            noShowAvailableTime.add(parseInt(noShowTimeThreshold.value, 10), noShowTimeThreshold.unit);\n          }\n\n          if ((0, _moment.default)(currentTime).isBefore(noShowAvailableTime)) {\n            return this.addWaitListAction([activityLogAction, tripTransferAction], isBrokerProviderType, waitlistAction);\n          }\n\n          return this.addWaitListAction([activityLogAction, noShowAction, tripTransferAction], isBrokerProviderType, waitlistAction);\n\n        case _trip.TRIP_ACTIVE_STATUS:\n          return [activityLogAction];\n\n        case _trip.TRIP_WAITLIST_STATUS:\n          if (isBrokerTravelMode) {\n            options = [activityLogAction, editTrip];\n            return this.addTransferTripActionForNonBrokerEligibleTrips(options, isBrokerEligible, tripTransferAction);\n          }\n\n          if (isManualSchedulingMode) {\n            return [activityLogAction, tripTransferAction, editTrip, cancelTrip];\n          }\n\n          return [activityLogAction, editTrip, autoRescheduleActionForWaitListedTrip, cancelTrip];\n\n        case _trip.TRIP_ILLEGAL_STATUS:\n          return [activityLogAction, editTrip, cancelTrip];\n\n        case _trip.TRIP_NOSHOW_STATUS:\n          if (lastPerformedStopID === currentRowTripID) {\n            return [activityLogAction, unPerformNoShowAction];\n          }\n\n          return [activityLogAction];\n\n        case _trip.TRIP_NOSHOWREQUESTED_STATUS:\n          return [approveNoShowRequestAction, denyNoShowRequestAction, activityLogAction];\n\n        case _trip.TRIP_COMPLETED_STATUS:\n          return [activityLogAction];\n\n        case _trip.TRIP_CANCELED_STATUS:\n        case _trip.TRIP_LATE_CANCELED_STATUS:\n          return [activityLogAction];\n\n        case _trip.TRIP_REQUESTED_STATUS:\n          return [cancelTrip, activityLogAction, autoRescheduleAction];\n\n        case _trip.TRIP_UNSCHEDULED_STATUS:\n        case _trip.TRIP_CALLBACK_STATUS:\n          if (isBrokerTravelMode) {\n            return [activityLogAction, editTrip, cancelTrip];\n          }\n\n          if (isManualSchedulingMode) {\n            return [activityLogAction, tripTransferAction, editTrip, cancelTrip];\n          }\n\n          return [activityLogAction, editTrip, autoRescheduleActionForWaitListedTrip, cancelTrip];\n\n        default:\n          return [activityLogAction];\n      }\n    },\n\n    _dynamicDispatchActions() {\n      const tripTransferAction = this.get('tripTransferAction');\n      const noShowAction = this.get('noShowAction');\n      const waitlistAction = this.get('waitlistAction');\n      const activityLogAction = this.get('activityLogAction');\n      const approveNoShowRequestAction = this.get('approveNoShowRequestAction');\n      const denyNoShowRequestAction = this.get('denyNoShowRequestAction');\n      const unPerformNoShowAction = this.get('unPerformNoShowAction');\n      const autoRescheduleAction = this.get('autoRescheduleAction');\n      const cancelTrip = this.get('cancelAction');\n      const row = this.getSelectedCoreModel();\n      const selectedWidgetRecord = this.get('selectedWidgetRecord');\n      const isBrokerEligible = row.get('segment.leg.brokerEligible');\n      const dispatchEditAction = this.get('dispatchEditAction');\n      const isTaxiTravelMode = row.get('segment.isTaxiTravelMode');\n      if (!row) return [];\n      let tripStatus = selectedWidgetRecord.tripStatus;\n      tripStatus = tripStatus.charAt(0).toUpperCase() + tripStatus.substr(1);\n      const isBrokerProviderType = row.get('provider.isBrokerProviderType');\n      const isBrokerTravelMode = row.get('segment.isBrokerTravelMode');\n      const pickStopStatus = row.get('pickStopPoint.computedStatus');\n      const lastPerformedStopID = row.get('dispatchRoute.lastPerformedStop.trip.tripId');\n      const currentRowTripID = this.get('lastRowClicked.tripId');\n      const currentTime = new Date();\n      const noShowTimeThreshold = this.get('store').peekRecord('cs-config-item', 'config-Driving_Configuration/noShowTimeThreshold');\n      const promiseTime = row.get('promiseTime');\n      let noShowAvailableTime = (0, _moment.default)(promiseTime);\n      const isBusOrWalkTravelMode = row.get('segment.isBusOrWalkTravelMode');\n      if (isBusOrWalkTravelMode) return [];\n      let options;\n\n      switch (tripStatus) {\n        case _trip.TRIP_SCHEDULED_STATUS:\n          if (isTaxiTravelMode) return [activityLogAction, cancelTrip];\n          return this.addWaitListAction([activityLogAction, tripTransferAction, cancelTrip, dispatchEditAction], isBrokerProviderType, waitlistAction);\n\n        case _trip.TRIP_DISPATCH_STATUS:\n          if (isTaxiTravelMode) return [activityLogAction, cancelTrip];\n          return this.addWaitListAction([activityLogAction, tripTransferAction, cancelTrip, dispatchEditAction], isBrokerProviderType, waitlistAction);\n\n        case _trip.TRIP_ENROUTE_STATUS:\n          if (pickStopStatus === _stopPoint.ARRIVE_STOP_STATUS) {\n            const actualArriveTime = row.get('actualArriveTime');\n            if (actualArriveTime) noShowAvailableTime = _moment.default.max((0, _moment.default)(actualArriveTime), noShowAvailableTime);\n\n            if (noShowTimeThreshold) {\n              noShowAvailableTime.add(parseInt(noShowTimeThreshold.value, 10), noShowTimeThreshold.unit);\n            }\n\n            if ((0, _moment.default)(currentTime).isBefore(noShowAvailableTime)) {\n              return [activityLogAction, cancelTrip];\n            }\n\n            return [activityLogAction, noShowAction, cancelTrip];\n          }\n\n          if (noShowTimeThreshold) {\n            noShowAvailableTime.add(parseInt(noShowTimeThreshold.value, 10), noShowTimeThreshold.unit);\n          }\n\n          if ((0, _moment.default)(currentTime).isBefore(noShowAvailableTime)) {\n            if (isTaxiTravelMode) return [activityLogAction, cancelTrip];\n            return this.addWaitListAction([activityLogAction, tripTransferAction, cancelTrip], isBrokerProviderType, waitlistAction);\n          }\n\n          return this.addWaitListAction([activityLogAction, noShowAction, tripTransferAction, cancelTrip], isBrokerProviderType, waitlistAction);\n\n        case _trip.TRIP_ACTIVE_STATUS:\n          return [activityLogAction];\n\n        case _trip.TRIP_WAITLIST_STATUS:\n          if (isBrokerTravelMode) {\n            options = [activityLogAction];\n            if (isTaxiTravelMode) return this.addTransferTripActionForNonBrokerEligibleTrips(options, isBrokerEligible);\n            return this.addTransferTripActionForNonBrokerEligibleTrips(options, isBrokerEligible, tripTransferAction);\n          }\n\n          if (isTaxiTravelMode) return [activityLogAction, cancelTrip];\n          return [activityLogAction, tripTransferAction, cancelTrip, dispatchEditAction];\n\n        case _trip.TRIP_ILLEGAL_STATUS:\n          return [activityLogAction, cancelTrip, dispatchEditAction];\n\n        case _trip.TRIP_NOSHOW_STATUS:\n          if (lastPerformedStopID === currentRowTripID) {\n            return [activityLogAction, unPerformNoShowAction];\n          }\n\n          return [activityLogAction];\n\n        case _trip.TRIP_NOSHOWREQUESTED_STATUS:\n          return [approveNoShowRequestAction, denyNoShowRequestAction, activityLogAction];\n\n        case _trip.TRIP_COMPLETED_STATUS:\n          return [activityLogAction];\n\n        case _trip.TRIP_CANCELED_STATUS:\n        case _trip.TRIP_LATE_CANCELED_STATUS:\n          return [activityLogAction];\n\n        case _trip.TRIP_REQUESTED_STATUS:\n          return [cancelTrip, activityLogAction, autoRescheduleAction];\n\n        case _trip.TRIP_UNSCHEDULED_STATUS:\n        case _trip.TRIP_CALLBACK_STATUS:\n          return [activityLogAction, cancelTrip, dispatchEditAction];\n\n        default:\n          return [activityLogAction];\n      }\n    },\n\n    // Hiding WaitList action for the broker trips\n    addWaitListAction(actions, isBrokerProviderType, waitlistAction) {\n      if (isBrokerProviderType) {\n        return actions;\n      }\n\n      actions.unshift(waitlistAction);\n      return actions;\n    },\n\n    dynamicBulkActions: Ember.computed('selectedWidgetRecord', 'checkedItems.[]', function () {\n      const bulkTripTransferAction = this.get('bulkTripTransferAction');\n      const isDispatchDashboard = this.get('isDispatchDashboard');\n      const checkedRows = this.get('checkedItems') || [];\n\n      if (!checkedRows.length) {\n        return [];\n      }\n\n      const isScheduledRows = checkedRows.every(row => row.get('status') === 'scheduled');\n      const isStopPerformed = isDispatchDashboard && checkedRows.some(selectedTrip => selectedTrip.get('isStopPointPerformed'));\n      const isBrokerProviderType = checkedRows.some(row => row.get('provider.isBrokerProviderType'));\n      const isTaxiTravelMode = checkedRows.some(row => row.get('segment.isTaxiTravelMode'));\n      const isBusOrWalkTravelMode = checkedRows.some(row => row.get('segment.isBusOrWalkTravelMode')); // Check if all the selected trip belongs to same route\n\n      const isRouteNameSame = checkedRows.map(route => route.get('routeName')).uniq(); //User must select only Scheduled trips for bulk TripTransfer\n\n      if (isRouteNameSame.length > 1 || !isScheduledRows || isStopPerformed || isBrokerProviderType || isTaxiTravelMode || isBusOrWalkTravelMode) {\n        return [];\n      }\n\n      return bulkTripTransferAction;\n    }),\n\n    calculateTimeQuery() {\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const startTime = startDate.getTime();\n      const endTime = endDate.getTime();\n      const dateRangeFilterQuery = (0, _rqlGenerators.dateBetweenRQLUsingFormat)('promiseTime', [startTime, endTime], 'YYYY-MM-DDTHH:mm:ss.SSS');\n      return dateRangeFilterQuery;\n    },\n\n    rowStyleHandler(data, rowIndex, columnInfo, columnIndex, selectedRowIndex, selectedColumnIndex, columnValue, currRowData) {\n      let rowStyleHandler = '';\n\n      if (currRowData.isLocked) {\n        rowStyleHandler += ' is-locked';\n      }\n\n      if (columnIndex === 0) {\n        if (currRowData.otpStatus === 'Late') {\n          rowStyleHandler += ' otp-late-first-column';\n        }\n\n        if (currRowData.otpStatus === 'On Time') {\n          rowStyleHandler += ' otp-on-time-first-column';\n        }\n\n        if (currRowData.otpStatus === 'In Danger') {\n          rowStyleHandler += ' otp-in-danger-first-column';\n        }\n      }\n\n      return rowStyleHandler;\n    },\n\n    canFurtherSelectionAllowed() {\n      const gridConfig = this.get('config');\n      const maxLimitByRouteSelection = gridConfig.maxLimitByRouteSelection;\n      const maxLimitWithoutRouteAssociation = gridConfig.maxLimitWithoutRouteAssociation;\n      const selectedTripRecords = this.get('widgetService').getSelectedWidgetRecordsByModel('tripWidget');\n      const selectedRouteSet = new Set();\n      selectedTripRecords.forEach(data => {\n        if (data.routeId) {\n          selectedRouteSet.add(data.routeId);\n        }\n      });\n\n      if (selectedRouteSet.size >= maxLimitByRouteSelection || selectedTripRecords.length >= maxLimitWithoutRouteAssociation) {\n        return false;\n      }\n\n      return true;\n    },\n\n    applyStatusReasonDisplayTransformation(widgetRecord) {\n      if (widgetRecord.tripStatus === _trip.TRIP_NOSHOW_STATUS) {\n        const noShowReason = widgetRecord.statusReason;\n\n        if (Ember.isPresent(noShowReason)) {\n          const noShowReasonCategories = this.get('store').peekAll('no-show-reason-category');\n          const noShowCategory = noShowReasonCategories.findBy('name', noShowReason);\n\n          if (Ember.isPresent(noShowCategory)) {\n            widgetRecord.statusReasonDisplay = noShowCategory.get('displayName');\n          } else {\n            // If not found then set noShowReason directly\n            widgetRecord.statusReasonDisplay = noShowReason;\n          }\n        }\n      } else if (widgetRecord.tripStatus === _trip.TRIP_CANCELED_STATUS || widgetRecord.tripStatus === _trip.TRIP_LATE_CANCELED_STATUS) {\n        const reason = widgetRecord.statusReason;\n        const cancelTypes = this.get('store').peekAll('cancel-type');\n        const cancelType = cancelTypes.findBy('id', reason);\n\n        if (Ember.isPresent(cancelType)) {\n          widgetRecord.statusReasonDisplay = cancelType.get('displayName');\n        }\n      } else if (widgetRecord.tripStatus === _trip.TRIP_ILLEGAL_STATUS) {\n        widgetRecord.statusReasonDisplay = widgetRecord.statusReason;\n      }\n    },\n\n    applyServiceNeedsTransformation(widgetRecord) {\n      const store = this.get('store');\n      const serviceNeedTypes = store.peekAll('service-need-type');\n      const serviceNeeds = widgetRecord.serviceNeeds || [];\n      serviceNeeds.forEach(serviceNeed => {\n        const serviceNeedTypeName = serviceNeed.serviceNeedTypeName;\n        const serviceNeedType = serviceNeedTypes.findBy('id', serviceNeedTypeName);\n        serviceNeed.name = serviceNeedType.get('name');\n        serviceNeed.displayName = serviceNeedType.get('displayName');\n      });\n    },\n\n    applyFundingAgencyTransformation(widgetRecord) {\n      const store = this.get('store');\n      const fundingAgencies = store.peekAll('funding-agency');\n      const fundingAgencyName = widgetRecord.fundingAgencyName;\n      const fundingAgency = fundingAgencies.find(currFundingAgency => {\n        return currFundingAgency.get('name') === fundingAgencyName;\n      });\n\n      if (Ember.isPresent(fundingAgency)) {\n        widgetRecord.fundingAgencyDisplayName = fundingAgency.get('displayName');\n      }\n    },\n\n    applyRouteLockInfoTransformation(widgetRecord) {\n      if (widgetRecord.isLocked) {\n        this.getUserName(widgetRecord);\n      }\n    },\n\n    async getUserName(currRowData) {\n      const lock = currRowData.lock;\n      const store = this.get('store');\n      let ssoUser = store.peekRecord('sso-user', lock.user);\n\n      if (Ember.isNone(ssoUser)) {\n        ssoUser = await store.find('sso-user', lock.user).catch(error => {\n          const errorCode = Ember.isPresent(error.errors.get('firstObject').status) ? error.errors.get('firstObject').status : null; // This is a temporary hack because continuous otimization user key does not exist in sso\n          // must remove after a permanent solution is found in locking in continuous optimization\n\n          if (errorCode === '404') {\n            currRowData.lock.fullName = 'Continuous Optimization';\n\n            if (!store.hasRecordForId('sso-user', lock.user)) {\n              return store.createRecord('sso-user', {\n                id: lock.user,\n                userId: lock.user,\n                fullName: 'Continuous Optimization'\n              });\n            }\n          }\n\n          return null;\n        });\n      }\n\n      if (!Ember.isNone(ssoUser)) {\n        currRowData.lock.fullName = ssoUser.fullName;\n      }\n    },\n\n    applyTravelNeedsTransformation(widgetRecord) {\n      const store = this.get('store');\n      const travelNeedTypes = store.peekAll('travel-need-type');\n      const travelNeeds = widgetRecord.travelNeeds || [];\n      travelNeeds.forEach(travelNeed => {\n        const travelNeedTypeName = travelNeed.travelNeedTypeName;\n        const travelNeedType = travelNeedTypes.findBy('id', travelNeedTypeName);\n        travelNeed.displayName = travelNeedType ? travelNeedType.get('displayName') : '';\n      });\n    },\n\n    applyTransformationData(widgetRecords) {\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          this.applyOtpStatusTransformation(widgetRecord);\n          this.applyProviderTransformation(widgetRecord);\n          this.applyStatusReasonDisplayTransformation(widgetRecord);\n          this.applyServiceNeedsTransformation(widgetRecord);\n          this.applyRouteLockInfoTransformation(widgetRecord);\n          this.applyFundingAgencyTransformation(widgetRecord);\n          this.applyTravelNeedsTransformation(widgetRecord);\n\n          if (widgetRecord.hasOwnProperty('fare')) {\n            // Need to use _.round as .toFixed rounds 1.555 to 1.55 not 1.56\n            widgetRecord.fare = _lodash.default.round(widgetRecord.fare, 2).toFixed(2);\n          }\n\n          if (widgetRecord.hasOwnProperty('legNotes')) {\n            widgetRecord.driverNotes = widgetRecord.legNotes;\n          }\n\n          if (this.get('isScheduleDashboard')) {\n            this.applyRouteTransformation(widgetRecord);\n          }\n\n          widgetRecord._transformed = true;\n        }\n\n        if (isScheduleDashboard) {\n          this.applyServiceStartAndEndTimeTransformation(widgetRecord);\n        }\n      });\n      return widgetRecords;\n    },\n\n    /**\n     * do not show Trip in TripWidget whoes Route ID contains - (SUP-)\n     * @param widgetRecords\n     * @param header\n     * @param data\n     * @returns {string|void|*}\n     */\n    determineWidgetRecordAction(widgetRecords, header, data) {\n      if (data.isSupRoute) {\n        return 'DELETE';\n      }\n\n      if (data.status === 'Cancelled') {\n        return 'DELETE';\n      }\n\n      if (data.status === 'Removed') {\n        return 'DELETE';\n      }\n\n      return this._super(...arguments);\n    },\n\n    async applyRouteTransformation(widgetRecord) {\n      const {\n        originalRouteId,\n        originalRouteName,\n        tripStatus,\n        routeName,\n        routeId\n      } = widgetRecord;\n\n      if (tripStatus === _trip.TRIP_SCHEDULED_STATUS) {\n        widgetRecord.routeId = originalRouteId ? originalRouteId : routeId;\n        widgetRecord.routeName = originalRouteName ? originalRouteName : routeName;\n      }\n\n      if ([_trip.TRIP_ILLEGAL_STATUS, _trip.TRIP_WAITLIST_STATUS, _trip.TRIP_CANCELED_STATUS, _trip.TRIP_LATE_CANCELED_STATUS].includes(tripStatus) && routeName) {\n        widgetRecord.routeId = null;\n        widgetRecord.routeName = null;\n      }\n\n      if (!routeName && routeId && _trip.TRIP_SCHEDULED_STATUS) {\n        const route = await this.get('store').findRecord('route', widgetRecord.routeId);\n\n        if (route) {\n          widgetRecord.routeName = route.get('name');\n        }\n      }\n    },\n\n    applyProviderTransformation(widgetRecord) {\n      if (widgetRecord.provider === TRIP_UNASSIGNED) return;\n      const providersList = this.get('providersDict');\n      widgetRecord.provider = providersList[widgetRecord.provider];\n    },\n\n    showLateTripCancelBookingWarning(cancelTripPanelDetails) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Late Trip Cancel',\n        tip: this.get('lateTripCancelMessage').get('value'),\n        primaryActionText: 'Ok',\n        primaryAction: () => {\n          tooltip.reset();\n          this.get('workspace').pushState('cancelTripForm', cancelTripPanelDetails);\n        },\n        hasOverlay: true,\n        closeAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    sendToTaxiTrip(model) {\n      const title = 'Send to Taxi';\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const failureMsg = `Failed to send Trip ${model.get('tripId')}`;\n      tooltip.pushConfirmation({\n        tip: `Are you sure you want to send to taxi trip  ${model.get('tripId')} ?`,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          const tripId = parseInt(model.get('id'), 10);\n          const operationData = {\n            tripId\n          };\n          const operationType = 'taxiTransfer';\n          return this.get('performSendToTaxi').perform(model, operationData, operationType).then(() => {\n            notifications.success(`Trip ${model.get('tripId')} successfully sent to taxi`);\n          }).catch(() => {\n            notifications.warning(failureMsg);\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => tooltip.reset(),\n        hasOverlay: true\n      });\n    },\n\n    performSendToTaxi: (0, _emberConcurrency.task)(function* (model, operationData, operationType) {\n      let result;\n\n      try {\n        result = yield this.get('performAutoReschedule').perform(model, operationData, operationType);\n      } catch (e) {\n        throw e;\n      }\n\n      return Promise.resolve(result);\n    }),\n\n    /**\n     * NYAAR-18763 - Get schedule info for callback trip also..\n     * @param model = trip\n     * @returns schedule model{*}\n     */\n    getScheduleData(model) {\n      const tripSchedule = model.get('schedule');\n      const tripRouteSchedule = model.get('route.schedule');\n      return model.get('segment.isTaxiTravelMode') || model.get('isWaitlisted') || model.get('isUnScheduledTrip') || model.get('isCallback') || model.get('segment.isBrokerTravelMode') || model.get('segment.isParaTransitTravelMode') ? tripSchedule : tripRouteSchedule;\n    },\n\n    addTransferTripActionForNonBrokerEligibleTrips(options, isBrokerEligible, tripTransferAction) {\n      if (!isBrokerEligible) {\n        options.pushObject(tripTransferAction);\n      }\n\n      return options;\n    },\n\n    //for getting the segmentstop places\n    async querySegmentStop(segmentStopIds) {\n      const segmentStopsQuery = `in(id,(${segmentStopIds}))`;\n      await this.get('store').query('segment-stop', {\n        filter: segmentStopsQuery\n      });\n    },\n\n    //for getting the rider data\n    async queryRider(riderId) {\n      const riderQuery = `ilike('riderId','%${riderId}%')`;\n      const riders = await this.store.query('rider', {\n        filter: riderQuery\n      });\n      return riders.toArray();\n    },\n\n    //NYAAR-19787-in schedule workspace trips widget, future taxi trips service start and end time should be empty.\n    applyServiceStartAndEndTimeTransformation(widgetRecord) {\n      const serviceMode = widgetRecord.serviceMode;\n\n      if (serviceMode === _segment.TAXI_TYPE) {\n        widgetRecord.serviceStartTime = null;\n        widgetRecord.serviceEndTime = null;\n      } //NYAAR-20256- Start time and End time should not be blank for few Scheduled trips in Trip widget.\n\n\n      const startTime = widgetRecord.serviceStartTime;\n      const endTime = widgetRecord.serviceEndTime;\n\n      if (!startTime || !endTime) {\n        widgetRecord.serviceStartTime = 'GENERAL';\n        widgetRecord.serviceEndTime = 'GENERAL';\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/trips-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/trips-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'trip',\n    defaultSortId: 'name',\n    defaultSortAsc: false,\n    title: 'Trips',\n    // ember-react-widget properties\n    widgetName: 'tripWidget',\n    selectedRowLimit: 50,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    restrictSwapColumns: false,\n    columns: [{\n      id: 'name',\n      index: 3,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'tripId',\n      valuePreview: '1',\n      hidden: false,\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderFirstName',\n      index: 0,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      mapValuePath: 'rider.firstName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderLastName',\n      index: 1,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      mapValuePath: 'rider.lastName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderPhone',\n      type: 'enum',\n      index: 2,\n      label: 'Passenger Phone Number',\n      valuePath: 'legPhoneNumber',\n      mapValuePath: 'rider.formattedPhoneNumbers',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'externalId',\n      index: 11,\n      type: 'uuid',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      mapValuePath: 'rider.riderId',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'tripType',\n      index: 9,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'routeName',\n      index: 4,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      mapValuePath: 'currentRouteName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'status',\n      index: 5,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'tripStatus',\n      mapValuePath: 'computedStatus',\n      hidden: false,\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 75\n    }, {\n      id: 'statusReason',\n      index: 6,\n      type: 'text',\n      label: 'Status Reason',\n      valuePath: 'statusReasonDisplay',\n      customSortPath: 'statusReason',\n      hidden: false,\n      defaultWidth: 75,\n      cellItem: 'StatusReasonCell'\n    }, {\n      id: 'statusNotes',\n      index: 35,\n      type: 'text',\n      label: 'Status Notes',\n      valuePath: 'statusNotes',\n      hidden: true,\n      defaultWidth: 75\n    }, {\n      id: 'otpStatus',\n      index: 7,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      mapValuePath: 'otpLabel',\n      valuePreview: 'On Time',\n      hidden: false,\n      searchable: true,\n      highlightable: true,\n      cellItem: 'OTPValueCellItem'\n    }, {\n      id: 'otp',\n      index: 29,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otpWithSign',\n      mapValuePath: 'otpValueWithSign',\n      customSortPath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'promisedTime',\n      index: 8,\n      type: 'time',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      valuePreview: '09:00',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'requestedTime',\n      index: 10,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      mapValuePath: 'segment.leg.requestTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: false,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'anchorETA',\n      index: 12,\n      type: 'time',\n      label: 'Anchor ETA',\n      valuePath: 'anchorEta',\n      mapValuePath: 'anchorStop.stopPoint.etaNavStopPoint.eta',\n      valuePreview: '16',\n      hidden: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'noShowTime',\n      index: 40,\n      type: 'time',\n      label: 'No Show Time',\n      valuePath: 'noShowTime',\n      mapValuePath: 'pickStopPoint.noShowTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: false,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'loadTime',\n      index: 45,\n      type: 'number',\n      label: 'Load Time',\n      valuePath: 'loadTime',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'unloadTime',\n      index: 46,\n      type: 'number',\n      label: 'Unload Time',\n      valuePath: 'unloadTime',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'serviceStartTime',\n      index: 13,\n      type: 'time',\n      label: 'Service Start Time',\n      valuePath: 'serviceStartTime',\n      valuePreview: '?',\n      editable: true,\n      hidden: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'serviceEndTime',\n      index: 14,\n      type: 'time',\n      label: 'Service End Time',\n      valuePath: 'serviceEndTime',\n      valuePreview: '?',\n      editable: true,\n      hidden: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'anchor',\n      index: 15,\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'anchor',\n      mapValuePath: 'segment.leg.anchor',\n      valuePreview: 'Pick',\n      searchable: true,\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'pickupaddress',\n      index: 16,\n      type: 'text',\n      label: 'Pickup Address',\n      valuePath: 'pickAddress',\n      mapValuePath: 'segment.pick.place.address.simpleAddress',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupCity',\n      index: 17,\n      type: 'text',\n      label: 'Pickup City',\n      valuePath: 'pickCity',\n      mapValuePath: 'segment.pick.place.address.locality',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupCounty',\n      index: 18,\n      type: 'text',\n      label: 'Pickup County',\n      valuePath: 'pickCounty',\n      mapValuePath: 'segment.pick.place.address.subRegion',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupZone',\n      index: 19,\n      type: 'text',\n      label: 'Pickup Zone',\n      valuePath: 'pickZoneConf.nameToDisplay',\n      mapValuePath: 'segment.pick.place.address.zoneName.displayName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropaddress',\n      index: 20,\n      type: 'text',\n      label: 'Drop off Address',\n      valuePath: 'dropAddress',\n      mapValuePath: 'segment.drop.place.address.simpleAddress',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropCity',\n      index: 21,\n      type: 'text',\n      label: 'Drop off City',\n      valuePath: 'dropCity',\n      mapValuePath: 'segment.drop.place.address.locality',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropCounty',\n      index: 22,\n      type: 'text',\n      label: 'Drop off County',\n      valuePath: 'dropCounty',\n      mapValuePath: 'segment.drop.place.address.subRegion',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropoffZone',\n      index: 23,\n      type: 'text',\n      label: 'Drop off Zone',\n      valuePath: 'dropZoneConf.nameToDisplay',\n      mapValuePath: 'segment.drop.place.address.zoneName.displayName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'passengerNotes',\n      index: 24,\n      type: 'text',\n      label: 'Passenger Notes',\n      valuePath: 'passengerNotes',\n      mapValuePath: 'rider.notes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'notes',\n      index: 25,\n      type: 'text',\n      label: 'Driver Notes',\n      valuePath: 'legNotes',\n      mapValuePath: 'driver.notes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'travelNeeds',\n      index: 26,\n      type: 'enum',\n      label: 'Travel Needs',\n      valuePath: 'travelNeeds',\n      //This need to be special handled.\n      mapValuePath: 'formattedTravelNeeds',\n      cellDesc: 'Travel Needs',\n      editable: false,\n      hidden: true,\n      cellItem: 'TravelNeedsCell'\n    }, // STUB FOR AVA DEMO\n    {\n      id: 'plannedMiles',\n      index: 27,\n      type: 'number',\n      label: 'Planned Trip Miles',\n      valuePath: 'plannedTripMiles',\n      mapValuePath: 'plannedMiles',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'fare',\n      index: 28,\n      type: 'number',\n      label: 'Fare',\n      valuePath: 'fare',\n      mapValuePath: 'segment.fare',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'paymentType',\n      index: 30,\n      type: 'text',\n      label: 'Payment Type',\n      valuePath: 'paymentType',\n      mapValuePath: 'segment.fareType.name',\n      valuePreview: 'Single',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'purpose',\n      index: 31,\n      type: 'text',\n      label: 'Purpose',\n      valuePath: 'tripPurposeNameToDisplay',\n      mapValuePath: 'leg.tripPurpose.name',\n      valuePreview: 'Single',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'provider',\n      index: 32,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      mapValuePath: 'providerName',\n      valuePreview: 'MAG',\n      hidden: true,\n      searchable: true,\n      highlightable: true\n    }, {\n      id: 'serviceMode',\n      index: 33,\n      type: 'string',\n      label: 'Service Mode',\n      valuePath: 'serviceMode',\n      mapValuePath: 'segment.travelMode',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'previousRouteName',\n      index: 41,\n      type: 'uuid',\n      label: 'Previous Route Name',\n      valuePath: 'previousRouteName',\n      mapValuePath: 'previousRouteAssignment.route.name',\n      hidden: true,\n      highlightable: false,\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'mode',\n      index: 42,\n      type: 'text',\n      label: 'Scheduling Mode',\n      valuePath: 'schedulingMode',\n      //missing\n      mapValuePath: 'schedulingMode',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'brokerEligible',\n      index: 43,\n      type: 'boolean',\n      label: 'Broker Eligible',\n      valuePath: 'brokerEligible',\n      //missing\n      searchable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'bookingId',\n      index: 44,\n      type: 'uuid',\n      label: 'Booking ID',\n      valuePath: 'bookingId',\n      editable: true,\n      valuePreview: '1',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'ambSeats',\n      type: 'number',\n      label: 'Amb Seats',\n      valuePath: 'ambSeats',\n      mapValuePath: 'travelNeedCounts.ambulatory',\n      editable: false,\n      hidden: true,\n      defaultWidth: 66\n    }, {\n      id: 'wcSeats',\n      type: 'number',\n      label: 'WC Seats',\n      valuePath: 'wcSeats',\n      mapValuePath: 'travelNeedCounts.wheelchair',\n      editable: false,\n      hidden: true,\n      defaultWidth: 66\n    }, {\n      id: 'passenger',\n      type: 'number',\n      label: 'Passengers',\n      valuePath: 'passengers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 66\n    }, // // temporary remove these columns aiq-2640\n    // {\n    //   id: 'companion',\n    //   type: 'number',\n    //   label: 'Companions',\n    //   valuePath: 'companions',\n    //   editable: false,\n    //   hidden: true,\n    //   defaultWidth: 66\n    // },\n    // {\n    //   id: 'pca',\n    //   type: 'number',\n    //   label: 'PCA',\n    //   valuePath: 'pca',\n    //   editable: false,\n    //   hidden: true,\n    //   defaultWidth: 66\n    // },\n    {\n      id: 'rideShare',\n      type: 'text',\n      label: 'Rideshare',\n      valuePath: 'noSharingValue',\n      mapValuePath: 'segment.noSharingText',\n      editable: false,\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'serviceNeeds',\n      type: 'enum',\n      label: 'Service Needs',\n      valuePath: 'serviceNeeds',\n      mapValuePath: 'formattedServiceNeeds',\n      cellDesc: 'Service Needs',\n      editable: false,\n      hidden: true,\n      cellItem: 'ServiceNeedsCell',\n      arraySortPath: 'firstObject.name'\n    }, {\n      id: 'maxRideTime',\n      type: 'number',\n      label: 'Max Ride Time',\n      valuePath: 'maxRideTime',\n      mapValuePath: 'maxRideTime',\n      hidden: true,\n      defaultWidth: 66\n    }, {\n      id: 'fundingAgency',\n      type: 'text',\n      label: 'Funding Agency',\n      valuePath: 'fundingAgencyDisplayName',\n      mapValuePath: 'fundingAgencyDisplayName',\n      hidden: true,\n      highlightable: false,\n      searchable: true,\n      allowDisplayAttr: 'allowFundingAgency',\n      defaultWidth: 150\n    }],\n    traversal: {\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routeId',\n          valuePath: 'routeId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'vehicleId',\n          valuePath: 'id'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      riderWidget: {\n        links: [{\n          type: 'eq',\n          field: 'passengerPk',\n          valuePath: 'id'\n        }]\n      }\n    },\n    // TODO: fix implicit filter\n    implicit: {\n      conditions: [{\n        type: 'neRQL',\n        field: 'scheduleType',\n        value: ['booking']\n      }, {\n        type: 'neRQL',\n        field: 'pickStopPointId',\n        value: [null]\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/trips-widget/scheduleConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/trips-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'trip',\n    defaultSortId: 'name',\n    defaultSortAsc: false,\n    title: 'Trips',\n    // ember-react-widget properties\n    widgetName: 'tripWidget',\n    selectedRowLimit: 50,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    restrictSwapColumns: false,\n    columns: [{\n      id: 'name',\n      index: 3,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'tripId',\n      valuePreview: '1',\n      hidden: false,\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderFirstName',\n      index: 0,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFirstName',\n      mapValuePath: 'rider.firstName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderLastName',\n      index: 1,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLastName',\n      mapValuePath: 'rider.lastName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderPhone',\n      type: 'enum',\n      index: 2,\n      label: 'Passenger Phone Number',\n      valuePath: 'legPhoneNumber',\n      mapValuePath: 'rider.formattedPhoneNumbers',\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'externalId',\n      index: 11,\n      type: 'uuid',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      mapValuePath: 'rider.riderId',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'tripType',\n      index: 9,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      editable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'routeName',\n      index: 4,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      mapValuePath: 'currentRouteName',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'status',\n      index: 5,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'tripStatus',\n      mapValuePath: 'computedStatus',\n      hidden: false,\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 75\n    }, {\n      id: 'statusReason',\n      index: 6,\n      type: 'text',\n      label: 'Status Reason',\n      valuePath: 'statusReasonDisplay',\n      customSortPath: 'statusReason',\n      hidden: false,\n      defaultWidth: 75,\n      cellItem: 'StatusReasonCell'\n    }, {\n      id: 'statusNotes',\n      index: 34,\n      type: 'text',\n      label: 'Status Notes',\n      valuePath: 'statusNotes',\n      hidden: true,\n      defaultWidth: 75\n    }, {\n      id: 'otpStatus',\n      index: 7,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      mapValuePath: 'otpLabel',\n      valuePreview: 'On Time',\n      hidden: false,\n      searchable: true,\n      highlightable: true,\n      cellItem: 'OTPValueCellItem'\n    }, {\n      id: 'otp',\n      index: 33,\n      type: 'number',\n      label: 'OTP',\n      valuePath: 'otpWithSign',\n      mapValuePath: 'otpValueWithSign',\n      customSortPath: 'otp',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'promisedTime',\n      index: 8,\n      type: 'time',\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      valuePreview: '09:00',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'requestedTime',\n      index: 10,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'requestTime',\n      mapValuePath: 'segment.leg.requestTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: false,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'anchorETA',\n      index: 12,\n      type: 'time',\n      label: 'Anchor ETA',\n      valuePath: 'anchorEta',\n      mapValuePath: 'anchorStop.stopPoint.etaNavStopPoint.eta',\n      valuePreview: '16',\n      hidden: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'noShowTime',\n      index: 40,\n      type: 'time',\n      label: 'No Show Time',\n      valuePath: 'noShowTime',\n      mapValuePath: 'pickStopPoint.noShowTime',\n      valuePreview: '08:00',\n      editable: true,\n      hidden: false,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'loadTime',\n      index: 45,\n      type: 'number',\n      label: 'Load Time',\n      valuePath: 'loadTime',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'unloadTime',\n      index: 46,\n      type: 'number',\n      label: 'Unload Time',\n      valuePath: 'unloadTime',\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'serviceStartTime',\n      index: 13,\n      type: 'time',\n      label: 'Service Start Time',\n      valuePath: 'serviceStartTime',\n      valuePreview: '?',\n      editable: true,\n      hidden: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'serviceEndTime',\n      index: 14,\n      type: 'time',\n      label: 'Service End Time',\n      valuePath: 'serviceEndTime',\n      valuePreview: '?',\n      editable: true,\n      hidden: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'anchor',\n      index: 15,\n      type: 'text',\n      label: 'Anchor',\n      valuePath: 'anchor',\n      mapValuePath: 'segment.leg.anchor',\n      valuePreview: 'Pick',\n      searchable: true,\n      editable: true,\n      hidden: false,\n      defaultWidth: 60\n    }, {\n      id: 'pickupaddress',\n      index: 16,\n      type: 'text',\n      label: 'Pickup Address',\n      valuePath: 'pickAddress',\n      mapValuePath: 'segment.pick.place.address.simpleAddress',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupCity',\n      index: 17,\n      type: 'text',\n      label: 'Pickup City',\n      valuePath: 'pickCity',\n      mapValuePath: 'segment.pick.place.address.locality',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupCounty',\n      index: 18,\n      type: 'text',\n      label: 'Pickup County',\n      valuePath: 'pickCounty',\n      mapValuePath: 'segment.pick.place.address.subRegion',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'pickupZone',\n      index: 19,\n      type: 'text',\n      label: 'Pickup Zone',\n      valuePath: 'pickZoneConf.nameToDisplay',\n      mapValuePath: 'segment.pick.place.address.zoneName.displayName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropaddress',\n      index: 20,\n      type: 'text',\n      label: 'Drop off Address',\n      valuePath: 'dropAddress',\n      mapValuePath: 'segment.drop.place.address.simpleAddress',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropCity',\n      index: 21,\n      type: 'text',\n      label: 'Drop off City',\n      valuePath: 'dropCity',\n      mapValuePath: 'segment.drop.place.address.locality',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropCounty',\n      index: 22,\n      type: 'text',\n      label: 'Drop off County',\n      valuePath: 'dropCounty',\n      mapValuePath: 'segment.drop.place.address.subRegion',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'dropoffZone',\n      index: 23,\n      type: 'text',\n      label: 'Drop off Zone',\n      valuePath: 'dropZoneConf.nameToDisplay',\n      mapValuePath: 'segment.drop.place.address.zoneName.displayName',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'passengerNotes',\n      index: 24,\n      type: 'text',\n      label: 'Passenger Notes',\n      valuePath: 'passengerNotes',\n      mapValuePath: 'rider.notes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'notes',\n      index: 25,\n      type: 'text',\n      label: 'Driver Notes',\n      valuePath: 'driverNotes',\n      mapValuePath: 'driver.notes',\n      editable: true,\n      hidden: true,\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'travelNeeds',\n      index: 26,\n      type: 'enum',\n      label: 'Travel Needs',\n      valuePath: 'travelNeeds',\n      //This need to be special handled.\n      mapValuePath: 'formattedTravelNeeds',\n      cellDesc: 'Travel Needs',\n      editable: false,\n      hidden: true,\n      cellItem: 'TravelNeedsCell'\n    }, // STUB FOR AVA DEMO\n    {\n      id: 'plannedMiles',\n      index: 27,\n      type: 'number',\n      label: 'Planned Trip Miles',\n      valuePath: 'plannedTripMiles',\n      mapValuePath: 'plannedMiles',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'fare',\n      index: 28,\n      type: 'number',\n      label: 'Fare',\n      valuePath: 'fare',\n      mapValuePath: 'segment.fare',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'paymentType',\n      index: 29,\n      type: 'text',\n      label: 'Payment Type',\n      valuePath: 'paymentType',\n      mapValuePath: 'segment.fareType.name',\n      valuePreview: 'Single',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'purpose',\n      index: 30,\n      type: 'text',\n      label: 'Purpose',\n      valuePath: 'tripPurposeNameToDisplay',\n      mapValuePath: 'leg.tripPurpose.name',\n      valuePreview: 'Single',\n      editable: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'provider',\n      index: 31,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      mapValuePath: 'providerName',\n      valuePreview: 'MAG',\n      hidden: true,\n      searchable: true,\n      highlightable: true\n    }, {\n      id: 'serviceMode',\n      index: 32,\n      type: 'string',\n      label: 'Service Mode',\n      valuePath: 'serviceMode',\n      mapValuePath: 'segment.travelMode',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'previousRouteName',\n      index: 41,\n      type: 'uuid',\n      label: 'Previous Route Name',\n      valuePath: 'previousRouteName',\n      mapValuePath: 'previousRouteAssignment.route.name',\n      hidden: true,\n      highlightable: false,\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'mode',\n      index: 42,\n      type: 'text',\n      label: 'Scheduling Mode',\n      valuePath: 'schedulingMode',\n      //missing\n      mapValuePath: 'schedulingMode',\n      hidden: true,\n      searchable: false,\n      highlightable: false\n    }, {\n      id: 'brokerEligible',\n      index: 43,\n      type: 'boolean',\n      label: 'Broker Eligible',\n      valuePath: 'brokerEligible',\n      //missing\n      searchable: true,\n      hidden: true,\n      defaultWidth: 60\n    }, {\n      id: 'bookingId',\n      index: 44,\n      type: 'uuid',\n      label: 'Booking ID',\n      valuePath: 'bookingId',\n      editable: true,\n      valuePreview: '1',\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'ambSeats',\n      type: 'number',\n      label: 'Amb Seats',\n      valuePath: 'ambSeats',\n      mapValuePath: 'travelNeedCounts.ambulatory',\n      editable: false,\n      hidden: true,\n      defaultWidth: 66\n    }, {\n      id: 'wcSeats',\n      type: 'number',\n      label: 'WC Seats',\n      valuePath: 'wcSeats',\n      mapValuePath: 'travelNeedCounts.wheelchair',\n      editable: false,\n      hidden: true,\n      defaultWidth: 66\n    }, {\n      id: 'passenger',\n      type: 'number',\n      label: 'Passengers',\n      valuePath: 'passengers',\n      editable: false,\n      hidden: true,\n      defaultWidth: 66\n    }, // // temporary remove these columns aiq-2640\n    // {\n    //   id: 'companion',\n    //   type: 'number',\n    //   label: 'Companions',\n    //   valuePath: 'companions',\n    //   editable: false,\n    //   hidden: true,\n    //   defaultWidth: 66\n    // },\n    // {\n    //   id: 'pca',\n    //   type: 'number',\n    //   label: 'PCA',\n    //   valuePath: 'pca',\n    //   editable: false,\n    //   hidden: true,\n    //   defaultWidth: 66\n    // },\n    {\n      id: 'rideShare',\n      index: 50,\n      type: 'text',\n      label: 'Rideshare',\n      valuePath: 'noSharingValue',\n      mapValuePath: 'segment.noSharingText',\n      searchable: true,\n      hidden: true,\n      defaultWidth: 70\n    }, {\n      id: 'serviceNeeds',\n      type: 'enum',\n      label: 'Service Needs',\n      valuePath: 'serviceNeeds',\n      mapValuePath: 'formattedServiceNeeds',\n      cellDesc: 'Service Needs',\n      editable: false,\n      hidden: true,\n      cellItem: 'ServiceNeedsCell',\n      arraySortPath: 'firstObject.name'\n    }, {\n      id: 'maxRideTime',\n      type: 'number',\n      label: 'Max Ride Time',\n      valuePath: 'maxRideTime',\n      mapValuePath: 'maxRideTime',\n      hidden: true,\n      defaultWidth: 66\n    }, {\n      id: 'fundingAgency',\n      type: 'text',\n      label: 'Funding Agency',\n      valuePath: 'fundingAgencyDisplayName',\n      mapValuePath: 'fundingAgencyDisplayName',\n      hidden: true,\n      highlightable: false,\n      searchable: true,\n      allowDisplayAttr: 'allowFundingAgency',\n      defaultWidth: 150\n    }],\n    traversal: {\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routeId',\n          valuePath: 'routeId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      vehicleWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'tripPk'\n        }, {\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      riderWidget: {\n        links: [{\n          type: 'eq',\n          field: 'passengerPk',\n          valuePath: 'id'\n        }]\n      }\n    },\n    // TODO: fix implicit filter\n    implicit: {\n      conditions: [{\n        type: 'neRQL',\n        field: 'scheduleType',\n        value: ['booking']\n      }]\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/users-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/users-form-widget/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSectionsEdit,\n    editModal: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      const user = this.get('editableRecords');\n\n      if (user.firstObject.isNew) {\n        this.set('editableSections', _config.default.editableSectionsAdd);\n      }\n    },\n\n    validateRecords() {\n      const valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        record.set('roleNames', Ember.makeArray(record.roleNames));\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {\n        const lastUndoState = this.get('editModal.undoHistory').popObject();\n\n        if (lastUndoState === null) {\n          const records = this.get('editableRecords') || [];\n          records.forEach(record => {\n            record.set('isForceDirty', false);\n          });\n        } else {\n          lastUndoState.forEach(_ref => {\n            let {\n              record,\n              properties\n            } = _ref;\n            record.setProperties(properties);\n          });\n        }\n\n        this.set('isLastUndoStateCommitted', true);\n      },\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          this.get('service').apply();\n        }\n      },\n\n      onCloseClick() {\n        // destroy model that have not been saved\n        const editableRecords = this.get('editableRecords') || [];\n        editableRecords.forEach(currentRecord => {\n          if (currentRecord.isNew && Ember.isNone(currentRecord.get('userId'))) {\n            currentRecord.destroyRecord();\n          }\n        });\n\n        this._super(...arguments);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/users-form-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSectionsAdd: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }]\n    }, {\n      title: 'Add User',\n      fields: [{\n        id: 'firstName',\n        type: 'text',\n        label: 'First Name',\n        editable: true,\n        valuePath: 'firstName'\n      }, {\n        id: 'lastName',\n        type: 'text',\n        label: 'Last Name',\n        editable: true,\n        valuePath: 'lastName'\n      }, {\n        id: 'email',\n        type: 'text',\n        label: 'Email',\n        editable: true,\n        valuePath: 'email'\n      }, {\n        id: 'status',\n        type: 'enum',\n        label: 'Status',\n        valuePath: 'calculatedStatus',\n        extra: {\n          options: ['active', 'inactive']\n        }\n      }, {\n        id: 'role',\n        type: 'searchable-enum',\n        label: 'Role',\n        valuePath: 'roleNames',\n        editable: true,\n        extra: {\n          optionModelName: 'sso-role',\n          optionSearchPath: 'displayName',\n          optionSelectedPath: 'firstObject',\n          optionIncludes: '',\n          optionSearchEnabled: false\n        }\n      }]\n    }],\n    editableSectionsEdit: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'id',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'id',\n        editable: false\n      }]\n    }, {\n      title: 'Edit User',\n      fields: [{\n        id: 'firstName',\n        type: 'text',\n        label: 'First Name',\n        editable: false,\n        valuePath: 'firstName'\n      }, {\n        id: 'lastName',\n        type: 'text',\n        label: 'Last Name',\n        editable: false,\n        valuePath: 'lastName'\n      }, {\n        id: 'email',\n        type: 'text',\n        label: 'Email',\n        editable: false,\n        valuePath: 'email'\n      }, {\n        id: 'status',\n        type: 'enum',\n        label: 'Status',\n        valuePath: 'calculatedStatus',\n        extra: {\n          options: ['active', 'inactive']\n        }\n      }, {\n        id: 'role',\n        type: 'searchable-enum',\n        label: 'Role',\n        valuePath: 'roleNames',\n        editable: true,\n        extra: {\n          optionModelName: 'sso-role',\n          optionSearchPath: 'displayName',\n          optionSelectedPath: 'firstObject',\n          optionIncludes: '',\n          optionSearchEnabled: false\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/users-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/users-widget/config\", \"adept-iq/config/api-urls\", \"lodash\", \"adept-iq/config/mapped-permIds\"], function (_exports, _component, _config, _apiUrls, _lodash, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n\n  var _default = _component.default.extend({\n    classNames: ['users-widget'],\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    editComponent: 'iq-widgets/users-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n\n    // @TODO: saveRecordFunction shall be moved to a service later on\n    // This save is specific to saving drivers and all related models.\n    saveRecordFunction(records) {\n      // using custom api call because sso api is non standard\n      // and in-consistent.\n      const userAPICall = (method, data, url, dataType) => {\n        const session = this.get('session');\n        const ajax = this.get('ajax');\n        return ajax.request(_apiUrls.API.ssoService.host + url, {\n          dataType: 'text',\n          contentType: dataType,\n          method: method,\n          data: data,\n          headers: {\n            'Content-Type': dataType,\n            Accept: dataType,\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          }\n        });\n      };\n\n      const saveStatus = (userId, status) => {\n        return userAPICall('PUT', {\n          status: status\n        }, `/user/${userId}/status/${status}`, 'application/json');\n      };\n\n      const saveRoles = (userId, roles) => {\n        const idRoles = _lodash.default.map(roles, role => {\n          return role.roleName;\n        }) || [];\n        return userAPICall('GET', null, `/user/${userId}/roles`, 'text').then(currentRolesString => {\n          const currentRoles = JSON.parse(currentRolesString);\n          const removeRoles = _lodash.default.difference(currentRoles.roles, idRoles) || [];\n          const addRoles = _lodash.default.difference(idRoles, currentRoles.roles) || [];\n          return Promise.all(removeRoles.map(removeRole => {\n            return userAPICall('DELETE', null, `/user/${userId}/roles/${removeRole}`, 'text');\n          })).then(() => {\n            return Promise.all(addRoles.map(addRole => {\n              return userAPICall('PUT', null, `/user/${userId}/roles/${addRole}`, 'text');\n            }));\n          });\n        });\n      };\n\n      const addNewUser = record => {\n        const idRoles = _lodash.default.map(record.roleNames, role => {\n          return role.roleName;\n        }); // sendMail defaulted to false because of a bug in api\n\n\n        const data = {\n          firstName: record.firstName,\n          lastName: record.lastName,\n          email: record.email,\n          status: record.status,\n          roles: idRoles,\n          sendEmail: true\n        };\n        return userAPICall('POST', data, '/user', 'application/json');\n      };\n\n      this.set('editModal.errors', []);\n      return new Promise((resolve, reject) => {\n        if (!Ember.isEmpty(records)) {\n          records.forEach(record => {\n            if (record.isNew) {\n              addNewUser(record, this).then(() => {\n                record.destroyRecord();\n              }).catch(e => {\n                // error we get when user gets created but return 500 because\n                // of send email problem\n                if (e.status === 500) {\n                  record.destroyRecord();\n                }\n\n                reject(e);\n              });\n            } else {\n              saveStatus(record.id, record.status, this).then(() => {\n                saveRoles(record.id, record.roleNames, this).then(() => {\n                  record.reload().then(() => {\n                    record.set('isForceDirty', false);\n                    this.get('activeContext.topActiveContext').get('refreshTableContent').perform([this.get('config.modelName')]);\n                  });\n                });\n              }).catch(e => {\n                reject(e);\n              });\n            }\n          });\n        }\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('tableActions', [{\n        id: 'newUser',\n        permId: _mappedPermIds.default.newUser,\n        name: 'New User',\n        action: function () {\n          const newModel = this.get('store').createRecord(this.get('config.modelName'));\n          this.set('editModal.editableRecords', []);\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [newModel], this.get('saveRecordFunction').bind(this));\n        }.bind(this)\n      }]);\n      this.set('singleActions', [{\n        id: 'edit',\n        permId: _mappedPermIds.default.editUser,\n        name: 'Edit',\n        action: model => {\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [model], this.get('saveRecordFunction').bind(this));\n        }\n      }]);\n      this.set('bulkActions', [{\n        id: 'bulkEdit',\n        permId: _mappedPermIds.default.editUser,\n        name: 'Bulk Edit',\n        action: models => {\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, models, this.get('saveRecordFunction').bind(this));\n        }\n      }]);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/users-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/users-widget',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'sso-user',\n    title: 'Users',\n    columns: [{\n      id: 'id',\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      hidden: true,\n      searchable: true\n    }, {\n      id: 'email',\n      index: 4,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      searchable: true\n    }, {\n      id: 'firstName',\n      index: 0,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      defaultWidth: 45,\n      searchable: true\n    }, {\n      id: 'lastName',\n      index: 1,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      defaultWidth: 45,\n      searchable: true\n    }, {\n      id: 'roleNames',\n      index: 3,\n      type: 'text',\n      label: 'Role',\n      valuePath: 'roleNames.firstObject.displayName',\n      searchable: true\n    }, {\n      id: 'status',\n      index: 2,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'calculatedStatus',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/config\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/cs-config-model-category\", \"lodash\", \"moment\"], function (_exports, _emberConcurrency, _config, _unwrapProxy, _csConfigModelCategory, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PASSENGER_TYPE_PLACE_CATEGORY = 'passenger';\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-driver-manager-container'],\n    classNameBindings: ['dropDownClass'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    // its possible to have a singular table ref\n    // but let's keep it simple for now and singularly have a reference per each tab\n    tableRef: null,\n    disableEditing: true,\n    showValidations: false,\n    isEditing: false,\n    editAPI: null,\n    csConfigModelCategoryIdMap: null,\n    isLookupTabActive: Ember.computed.notEmpty('lookupComponentRef'),\n    selectedMenuTitle: Ember.computed('editAPI.selected', function () {\n      const selectedMenu = this.get('editAPI.selected');\n      return selectedMenu ? selectedMenu.toLowerCase() : '';\n    }),\n    selectedTab: _config.DRIVER_TAB,\n    dropDownClass: Ember.computed('selectedTab', function () {\n      const selectedTab = this.get('selectedTab');\n      return selectedTab !== _config.LOOKUP_TAB ? 'driver-vehicle-drop-down' : '';\n    }),\n    isVehicleTabSelected: Ember.computed.equal('selectedTab', _config.VEHICLE_TAB),\n\n    /**\n     * this observer used to disable the driver related\n     * driverEditOptions  screen buttons while delete the table records\n     */\n    disableBtnSettings: Ember.observer('editAPI.selectedDriverBelongsTableRef.checkedRows.[]', function () {\n      const editAPI = this.get('editAPI');\n      const selectedDriverBelongsTableRef = editAPI.get('selectedDriverBelongsTableRef');\n      const records = selectedDriverBelongsTableRef ? selectedDriverBelongsTableRef.get('records') : [];\n\n      if (_config.driverEditOptions.includes(editAPI.selected) && !records.length) {\n        Ember.run.later(() => {\n          editAPI.buttonSettings(true, false, true, true, true);\n        }, 500);\n      }\n    }),\n    disableUndoButton: Ember.computed('editAPI.isChangesHappened', function () {\n      return !this.get('editAPI.hasChanges')();\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n      this.set('editAPI', Ember.Object.create({\n        hasChanges: false,\n        buttonSettings: function () {\n          let deleteBtn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n          let newBtn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n          let editBtn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n          let undoBtn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n          let saveBtn = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n          this.setProperties({\n            deleteBtn,\n            editBtn,\n            saveBtn,\n            undoBtn,\n            newBtn\n          });\n        },\n        updateHasChanges: function () {\n          let update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n          this.set('hasChanges', update);\n        }\n      }));\n      this.setConfigModelCategoryIdMap(); // load vehicle related entities\n\n      store.findAll('route').then(this.buildRouteVehicleMap.bind(this));\n      store.query('place', {\n        filter: `ne(placeCategoryTypeName,${PASSENGER_TYPE_PLACE_CATEGORY})`\n      });\n      store.findAll('route-vehicle-driver');\n      store.findAll('driver-provider');\n      store.findAll('driver-health');\n      store.findAll('route-template-availability').then(this.buildRouteTemplateAvailabilities.bind(this));\n    },\n\n    didInsertElement() {\n      const selectedTab = this.get('selectedTab');\n      this.set('workspace.helpSelectedTab', selectedTab);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.set('workspace.helpSelectedTab', '');\n    },\n\n    buildRouteTemplateAvailabilities(data) {\n      const routeTemplateAvailabilityMap = (0, _lodash.groupBy)(data.toArray(), 'vehicleId');\n      this.set('routeTemplateAvailabilityMap', routeTemplateAvailabilityMap);\n    },\n\n    /**\n     *this method is used to build the future routes map\n     * @param data\n     */\n    buildRouteVehicleMap(routeData) {\n      const routes = routeData.toArray();\n      const schedules = this.get('store').peekAll('schedule');\n      const currentDate = new Date();\n      const futureSchedulesIds = schedules.filter(schedule => (0, _moment.default)(schedule.get('start')).isAfter(currentDate)).map(s => s.get('id'));\n      const futureRoutes = routes.filter(route => futureSchedulesIds.includes(route.get('schedule.id')));\n      const routeVehicleMap = (0, _lodash.groupBy)(futureRoutes, 'vehicleId');\n      this.set('editAPI.routeVehicleMap', routeVehicleMap);\n    },\n\n    setConfigModelCategoryIdMap() {\n      const csConfigModelCategoryIdMap = {};\n      Object.entries(_csConfigModelCategory.modelNameForCategory).forEach(_ref => {\n        let [key, val] = _ref;\n        csConfigModelCategoryIdMap[val] = key;\n      });\n      this.set('csConfigModelCategoryIdMap', csConfigModelCategoryIdMap);\n    },\n\n    resetEditAPI() {\n      const editAPI = this.get('editAPI');\n      editAPI.setProperties({\n        vehicleEditOptions: null,\n        driverEditOptions: null,\n        editAction: null,\n        newAction: null,\n        deleteAction: null,\n        undoAction: null,\n        saveAction: null,\n        saveBtn: false,\n        deleteBtn: false,\n        editBtn: false,\n        undoBtn: false,\n        newBtn: false,\n        hasChanges: false,\n        selectedDriverBelongsTableRef: null\n      });\n    },\n\n    newVehicleRecord() {\n      const title = 'New Vehicle';\n      const editAPI = this.get('editAPI');\n      let pendingVehicleRecord = this.get('pendingVehicleRecord'); // pending record is no longer new or doesn't exist\n\n      if (!pendingVehicleRecord || pendingVehicleRecord.get('id')) {\n        pendingVehicleRecord = this.get('store').createRecord('vehicle');\n        this.set('pendingVehicleRecord', pendingVehicleRecord);\n      } else {// reset vehicle record properties\n      }\n\n      this.toggleProperty('isEditing');\n      editAPI.setProperties({\n        options: _config.vehicleEditOptions,\n        selected: _config.vehicleEditOptions.firstObject,\n        selectedRecord: pendingVehicleRecord,\n        title: title\n      });\n    },\n\n    editVehicleRecord() {\n      // checked rows will be only one because it a radio type\n      const checkedRow = this.get('tableRef.checkedRows.firstObject');\n      if (!checkedRow) return;\n      const editAPI = this.get('editAPI');\n      this.toggleProperty('isEditing');\n      let title = '';\n      title = `Edit Vehicle ${checkedRow.get('name')}`;\n      editAPI.setProperties({\n        options: _config.vehicleEditOptions,\n        selected: _config.vehicleEditOptions.firstObject,\n        selectedRecord: checkedRow,\n        title: title\n      });\n    },\n\n    deleteVehicleRecord() {},\n\n    newDriverRecord() {\n      const store = this.get('store');\n      const editAPI = this.get('editAPI');\n      const title = 'New Driver';\n      const selectedDriverRow = this.get('tableRef.checkedRows.firstObject');\n      let pendingDriverRecord = this.get('pendingDriverRecord'); // pending record is no longer new or doesn't exist\n\n      if (!pendingDriverRecord || pendingDriverRecord.get('id')) {\n        pendingDriverRecord = store.createRecord('driver');\n        this.set('pendingDriverRecordRecord', pendingDriverRecord);\n      }\n\n      if (selectedDriverRow) selectedDriverRow.set('selected', false);\n      this.createDriverAssociations(pendingDriverRecord);\n      editAPI.setProperties({\n        options: _config.driverEditOptions,\n        selected: _config.driverEditOptions.firstObject,\n        selectedRecord: pendingDriverRecord,\n        title: title\n      });\n      this.toggleProperty('isEditing');\n    },\n\n    async editDriverRecord() {\n      // checked rows will be only one because it a radio type\n      const checkedRow = this.get('tableRef.checkedRows.firstObject');\n      const editAPI = this.get('editAPI');\n      if (!checkedRow) return;\n      await this.loadDriverAssociations(checkedRow);\n      this.createDriverAssociations(checkedRow);\n      const title = `Edit Driver ${checkedRow.get('driverId')} - ${checkedRow.get('fullName')}`;\n      editAPI.setProperties({\n        options: _config.driverEditOptions,\n        selected: _config.driverEditOptions.firstObject,\n        selectedRecord: checkedRow,\n        title: title\n      });\n      this.toggleProperty('isEditing');\n    },\n\n    createDriverAssociations(driverRecord) {\n      const store = this.get('store');\n      const driverAddress = (0, _unwrapProxy.unwrapProxy)(driverRecord.get('address'));\n      const driverPhones = (0, _unwrapProxy.unwrapProxy)(driverRecord.get('phoneNumbers'));\n      const emergencyContacts = (0, _unwrapProxy.unwrapProxy)(driverRecord.get('emergencyContacts'));\n      const driverLicense = (0, _unwrapProxy.unwrapProxy)(driverRecord.get('license'));\n\n      if (Ember.isEmpty(driverAddress)) {\n        driverRecord.set('address', store.createRecord('address'));\n      }\n\n      if (Ember.isEmpty(driverLicense)) {\n        driverRecord.set('license', store.createRecord('driver-license'));\n      }\n\n      if (Ember.isEmpty(driverPhones) || Ember.isEmpty(driverPhones.length)) {\n        driverRecord.set('phoneNumbers', [store.createRecord('driver-phone-number')]);\n      }\n\n      if (Ember.isEmpty(emergencyContacts) || Ember.isEmpty(emergencyContacts.length)) {\n        driverRecord.set('emergencyContacts', [store.createRecord('driver-emergency-contact')]);\n      }\n    },\n\n    loadDriverAssociations(driverRecord) {\n      const store = this.get('store');\n\n      if (driverRecord && !driverRecord.get('isNew')) {\n        return store.query('driver-health', {\n          filter: `eq(driverId,${driverRecord.get('id')})`\n        });\n      }\n    },\n\n    deleteRecord: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      const selectedTab = this.get('selectedTab');\n      const isVehicleTabSelected = this.get('isVehicleTabSelected');\n      const checkedRow = tableRef.get('checkedRows.firstObject');\n      const notifications = this.get('notifications');\n\n      if (Ember.isEmpty(checkedRow)) {\n        console.warn('Workflow shouldn\\'t reach this line'); // eslint-disable-line\n      }\n\n      const tooltip = this.get('tooltip');\n      if (!checkedRow) return;\n\n      if (isVehicleTabSelected && this.get('vehicleHaveActiveRoute').call(this, checkedRow)) {\n        return yield tooltip.pushConfirmation({\n          title: `Manage ${Ember.String.capitalize(selectedTab)}`,\n          tip: `Unable to delete vehicle ${checkedRow.get('name')}.\n        This vehicle is currently assigned  to either an active route in Dispatch or a route template in Route Master.`,\n          warning: true,\n          hasOverlay: true,\n          primaryActionText: 'OK',\n          primaryAction: async () => {\n            return tooltip.reset();\n          }\n        });\n      }\n\n      return yield tooltip.pushConfirmation({\n        title: `Manage ${Ember.String.capitalize(selectedTab)}`,\n        tip: 'Are you sure you want to delete this record?',\n        warning: true,\n        hasOverlay: true,\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          await checkedRow.destroyRecord();\n          tableRef.refreshData();\n\n          if (`${selectedTab}` !== 'vehicle') {\n            notifications.success(`${selectedTab} record successfully deleted.`);\n          } else {\n            notifications.success(`${checkedRow.get('name')} record successfully deleted.`);\n          }\n\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    //check the vehicle have a relationship with route or route-template-availability\n    vehicleHaveActiveRoute(checkedRow) {\n      const routeVehicleDrivers = checkedRow.get('routeVehicleDrivers');\n      const vehicleId = checkedRow.get('id');\n      const routeTemplateAvailabilityMap = this.get('routeTemplateAvailabilityMap');\n      const routeTemplateAvailabilities = routeTemplateAvailabilityMap[vehicleId];\n      return routeVehicleDrivers.length || routeTemplateAvailabilities;\n    },\n\n    deleteLookUpRecord: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      const tooltip = this.get('tooltip');\n      const store = this.get('store');\n      const csConfigModelCategoryIdMap = this.get('csConfigModelCategoryIdMap');\n      const notifications = this.get('notifications');\n      const checkedRow = tableRef.get('checkedRows.firstObject');\n      const editAPI = this.get('editAPI');\n      const hasRelationship = this.get('editAPI.hasRelationship');\n      const refreshTask = editAPI.get('refreshTask');\n      const csConfigModelId = `${csConfigModelCategoryIdMap[checkedRow.constructor.modelName]}/${checkedRow.get('id')}`;\n      const csConfigItemModel = store.peekRecord('cs-config-item', csConfigModelId);\n\n      if (Ember.isEmpty(checkedRow)) {\n        console.warn('Workflow shouldn\\'t reach this line'); // eslint-disable-line\n\n        return;\n      }\n\n      return yield tooltip.pushConfirmation({\n        title: 'Lookup',\n        tip: 'Are you sure you want to delete this record?',\n        warning: true,\n        hasOverlay: true,\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => tooltip.reset(),\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          //if the selected  look-up model has a relationship with any other model restrict to delete\n          if (hasRelationship()) {\n            return;\n          }\n\n          try {\n            //look-up models is built by config-item model deleting an look-up\n            //record remove the record only in look-up models, not in the cs-config-item model\n            //so below code removes record from the cs-config-item\n            await csConfigItemModel.destroyRecord().then(cs => {\n              store._removeFromIdMap(cs._internalModel);\n            }); //removes the look-up models record from ember store\n\n            await checkedRow.destroyRecord().then(emp => {\n              store._removeFromIdMap(emp._internalModel);\n            });\n            notifications.success('Lookup record successfully deleted.');\n            refreshTask.perform().then(() => {\n              Ember.run.later(() => {\n                tableRef.set('config.selectFirstRow', true);\n                tableRef.get('firstRowSelectedTask').perform();\n              }, 500);\n            });\n            return tooltip.reset();\n          } catch (e) {\n            notifications.warning('Lookup record failed to delete.');\n            console.warn(e); // eslint-disable-line\n\n            tooltip.reset();\n          }\n        }\n      });\n    }),\n    backTo: (0, _emberConcurrency.task)(function* () {\n      const editAPI = this.get('editAPI');\n      const tooltip = this.get('tooltip');\n      const selectedTab = this.get('selectedTab') === null ? 'Driver' : this.get('selectedTab');\n      const {\n        undoAction,\n        saveAction,\n        hasChanges\n      } = editAPI.getProperties('undoAction', 'saveAction', 'hasChanges');\n      const changesMade = hasChanges();\n\n      if (changesMade) {\n        return tooltip.pushConfirmation({\n          title: `Manage ${Ember.String.capitalize(selectedTab)}`,\n          tip: 'There are unsaved changes',\n          warning: true,\n          thirdActionText: 'Cancel',\n          thirdAction: () => {\n            return tooltip.reset();\n          },\n          secondaryActionText: 'Do Not Save',\n          secondaryAction: () => {\n            undoAction();\n            this.set('isEditing', false);\n            this.resetEditAPI();\n            return tooltip.reset();\n          },\n          primaryActionText: 'Save',\n          primaryAction: async () => {\n            const undoOnException = true;\n            const savedRecord = await saveAction.perform(undoOnException);\n\n            if (savedRecord.get('id')) {\n              this.set('isEditing', false);\n              this.resetEditAPI();\n              return tooltip.reset();\n            }\n          }\n        });\n      } // there going back to the edit screen, undo even though this shouldn't matter\n\n\n      yield undoAction();\n      this.set('isEditing', false);\n      this.resetEditAPI();\n    }),\n    onNavigationChange: (0, _emberConcurrency.task)(function* (currentStep, option) {\n      const editAPI = this.get('editAPI');\n      const tooltip = this.get('tooltip');\n      const {\n        onValidateAction,\n        undoAction,\n        saveAction,\n        hasChanges\n      } = editAPI.getProperties('onValidateAction', 'undoAction', 'saveAction', 'hasChanges');\n      const saveBtn = editAPI.get('saveBtn');\n      const newBtn = editAPI.get('newBtn');\n      const changesMade = hasChanges(); // enable popup for any user changes\n\n      if (changesMade) {\n        const isValid = onValidateAction ? yield onValidateAction.perform() : true;\n        if (!isValid) return;\n        return tooltip.pushConfirmation(this.getTooltipInfo(undoAction, tooltip, currentStep, editAPI, saveAction, option));\n      } // NYAAR-16312 when navigating to otherScreen after clicking new without changing any fields\n\n\n      if (newBtn) {\n        return tooltip.pushConfirmation(this.getTooltipInfo(undoAction, tooltip, currentStep, editAPI, saveAction, option, onValidateAction));\n      } // even if the user hasn't made changes if there are fields required, the user needs to fill them in\n\n\n      yield undoAction(); // otherwise if theres a table in the view, the user doesn't necessarily need to create / or edit and can move to a different view\n      // save btn disables the button so if its enabled it will be false\n\n      if (!saveBtn) {\n        let isValid = true;\n        isValid = yield onValidateAction.perform();\n\n        if (isValid) {\n          return editAPI.set('selected', option);\n        }\n\n        return;\n      }\n\n      return editAPI.set('selected', option);\n    }),\n\n    getTooltipInfo(undoAction, tooltip, currentStep, editAPI, saveAction, option, onValidateAction) {\n      const isNewRecord = editAPI.get('selectedRecord.isNew');\n      const selectedTab = this.get('selectedTab');\n      const tabs = [_config.VEHICLE_TAB, _config.DRIVER_TAB];\n      const tooltipInfo = {\n        title: `Manage ${Ember.String.capitalize(currentStep)}`,\n        tip: 'There are unsaved changes.',\n        warning: true,\n        thirdActionText: 'Cancel',\n        thirdAction: () => {\n          return tooltip.reset();\n        },\n        secondaryAction: async () => {\n          await undoAction();\n          tooltip.popConfirmation();\n          editAPI.set('selected', option);\n        },\n        secondaryActionText: 'Do Not Save',\n        primaryActionText: 'Save',\n        primaryAction: async () => {\n          const undoOnException = true;\n          const isValid = onValidateAction ? await onValidateAction.perform() : true;\n\n          if (isValid) {\n            return saveAction.perform(undoOnException).then(() => {\n              tooltip.reset();\n              editAPI.set('selected', option);\n            }).catch(() => {\n              tooltip.popConfirmation();\n            });\n          }\n        }\n      }; //NYAAR-17503 If vehicle or driver  record is not saved then the user is not able to navigate to the other vehicle or driver screen.\n\n      if (isNewRecord && tabs.includes(selectedTab)) {\n        tooltipInfo.secondaryActionText = 'Cancel';\n\n        tooltipInfo.secondaryAction = () => {\n          return tooltip.reset();\n        };\n\n        delete tooltipInfo.thirdActionText;\n        delete tooltipInfo.thirdAction;\n      }\n\n      return tooltipInfo;\n    },\n\n    onTabChange: (0, _emberConcurrency.task)(function* (options) {\n      const editAPI = this.get('editAPI');\n      const tooltip = this.get('tooltip');\n      const {\n        onValidateAction,\n        undoAction,\n        saveAction,\n        hasChanges\n      } = editAPI.getProperties('onValidateAction', 'undoAction', 'saveAction', 'hasChanges');\n      const {\n        curStep,\n        newStep,\n        w\n      } = options;\n      const changesMade = hasChanges();\n\n      if (changesMade) {\n        const isValid = onValidateAction ? yield onValidateAction.perform() : true;\n        if (!isValid) return;\n        return tooltip.pushConfirmation({\n          title: `${Ember.String.capitalize(curStep)} Management`,\n          tip: 'There are unsaved changes',\n          warning: true,\n          thirdActionText: 'Cancel',\n          thirdAction: () => {\n            return tooltip.reset();\n          },\n          secondaryActionText: 'Do Not Save',\n          secondaryAction: () => {\n            undoAction();\n            this.set('isEditing', false);\n            this.resetEditAPI();\n            w['transition-to'](newStep);\n            this.set('selectedTab', newStep);\n            this.set('workspace.helpSelectedTab', newStep);\n            return tooltip.reset();\n          },\n          primaryActionText: 'Save',\n          primaryAction: () => {\n            const undoOnException = true;\n            return saveAction.perform(undoOnException).then(() => {\n              w['transition-to'](newStep);\n              this.set('selectedTab', newStep);\n              this.set('workspace.helpSelectedTab', newStep);\n              tooltip.reset();\n              this.set('isEditing', false);\n              this.resetEditAPI();\n            }).catch(() => {\n              tooltip.popConfirmation();\n            });\n          }\n        });\n      } // there going back to the edit screen, undo even though this shouldn't matter\n\n\n      yield undoAction();\n      this.set('isEditing', false);\n      this.resetEditAPI();\n      w['transition-to'](newStep);\n      this.set('selectedTab', newStep);\n      this.set('workspace.helpSelectedTab', newStep);\n    }).drop(),\n    actions: {\n      newRecord(selectedTab) {\n        if (selectedTab === _config.DRIVER_TAB) {\n          this.newDriverRecord();\n        }\n\n        if (selectedTab === _config.VEHICLE_TAB) {\n          this.newVehicleRecord();\n        }\n      },\n\n      saveRecord() {},\n\n      editRecord(selectedTab) {\n        if (selectedTab === _config.VEHICLE_TAB) {\n          this.editVehicleRecord();\n        } else {\n          this.editDriverRecord();\n        }\n\n        this.set('disableEditing', false);\n      },\n\n      deleteRecord(selectedTab) {\n        this.set('selectedTab', selectedTab);\n        this.set('workspace.helpSelectedTab', selectedTab);\n        this.get('deleteRecord').perform();\n        this.set('disableEditing', false);\n      },\n\n      deleteLookUpRecord() {\n        this.get('deleteLookUpRecord').perform();\n        this.set('disableEditing', false);\n      },\n\n      editAPISaveAction() {\n        const editAPI = this.get('editAPI');\n\n        if (editAPI.saveAction) {\n          editAPI.saveAction.perform();\n        }\n      },\n\n      onSelectTableRow() {\n        Ember.run.scheduleOnce('afterRender', this, () => {\n          this.set('disableEditing', true);\n        });\n      },\n\n      onTabChange(options) {\n        const {\n          newStep,\n          w\n        } = options;\n\n        if (options.curStep === _config.LOOKUP_TAB) {\n          return this.onTabChange.perform(options);\n        }\n\n        w['transition-to'](newStep);\n        this.set('selectedTab', newStep);\n        this.set('workspace.helpSelectedTab', newStep);\n      },\n\n      onLookupTabClick(options) {\n        const editAPI = this.get('editAPI');\n        const {\n          newStep,\n          w\n        } = options;\n        editAPI.setProperties({\n          options: _config.lookupOptions,\n          selected: _config.lookupOptions[0].options[0]\n        });\n        w['transition-to'](newStep);\n        this.set('selectedTab', newStep);\n        this.set('workspace.helpSelectedTab', newStep);\n      },\n\n      editAPIUndoAction() {\n        const editAPI = this.get('editAPI');\n\n        if (editAPI.undoAction) {\n          editAPI.undoAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.vehicleEditOptions = _exports.lookupOptions = _exports.driverEditOptions = _exports.VEHICLE_TAB = _exports.LOOKUP_TAB = _exports.DRIVER_TAB = void 0;\n  const VEHICLE_TAB = 'vehicle';\n  _exports.VEHICLE_TAB = VEHICLE_TAB;\n  const DRIVER_TAB = 'driver';\n  _exports.DRIVER_TAB = DRIVER_TAB;\n  const LOOKUP_TAB = 'lookup';\n  _exports.LOOKUP_TAB = LOOKUP_TAB;\n  const driverEditOptions = ['Driver', //'Provider',  #hide as per AIQ-1054\n  '19A-Review', 'Log', 'Health', 'Violation', 'Suspension', 'Accident', 'Availability'];\n  _exports.driverEditOptions = driverEditOptions;\n  const vehicleEditOptions = ['Vehicle', 'Maintenance', 'DOT-Inspection', 'Road Call', 'Equipment', 'Availability'];\n  _exports.vehicleEditOptions = vehicleEditOptions;\n  const lookupOptions = [{\n    groupName: 'DRIVER LOOKUP',\n    options: [{\n      id: 'cdl-classification',\n      name: 'CDL Classification'\n    }, {\n      id: 'employment-status',\n      name: 'Employment Status'\n    }, {\n      id: 'position',\n      name: 'Position'\n    }, {\n      id: 'physical-type',\n      name: 'Physical Type'\n    }, {\n      id: 'termination-reason',\n      name: 'Termination Reason'\n    }]\n  }, {\n    groupName: 'VEHICLE LOOKUP',\n    options: [{\n      id: 'body',\n      name: 'Body'\n    }, {\n      id: 'body-width',\n      name: 'Body Width'\n    }, {\n      id: 'category',\n      name: 'Category'\n    }, {\n      id: 'chassis',\n      name: 'Chassis'\n    }, {\n      id: 'fuel-cap',\n      name: 'Fuel Cap'\n    }, {\n      id: 'fuel-type',\n      name: 'Fuel Type'\n    }, {\n      id: 'inspector',\n      name: 'Inspector'\n    }, {\n      id: 'lease-company',\n      name: 'Lease Company'\n    }, {\n      id: 'maint-location',\n      name: 'Maintenance Location'\n    }, {\n      id: 'maint-status',\n      name: 'Maintenance Status'\n    }, {\n      id: 'maint-type',\n      name: 'Maintenance Type'\n    }, {\n      id: 'manufacturer',\n      name: 'Manufacturer'\n    }, {\n      id: 'vehicle-model',\n      name: 'Model'\n    }, {\n      id: 'problem-identified',\n      name: 'Problem Identified'\n    }, {\n      id: 'rear-axel',\n      name: 'Rear Axle'\n    }, {\n      id: 'road-call-code',\n      name: 'Road Call Code'\n    }, {\n      id: 'status',\n      name: 'Status'\n    }, {\n      id: 'transmission',\n      name: 'Transmission'\n    }, {\n      id: 'tire-size',\n      name: 'Tire Size'\n    }, {\n      id: 'vehicle-type',\n      name: 'Vehicle Type'\n    }, {\n      id: 'vehicle-capacity-type',\n      name: 'Vehicle Capacity Type'\n    }, {\n      id: 'wheelbase',\n      name: 'Wheelbase'\n    }]\n  }];\n  _exports.lookupOptions = lookupOptions;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table/config\", \"lodash\"], function (_exports, _component, _config, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    filterEventTypeFuction: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.get('tableColumns').shift();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const filterEventTypeFuction = this.get('filterEventTypeFunction');\n      return this._super(...arguments).then(records => {\n        if (!filterEventTypeFuction) return records;\n        return records.filter(filterEventTypeFuction);\n      });\n    },\n\n    actions: {\n      onColumnClick(column) {\n        if (column.sorted) {\n          this.set('sortDirection', column.ascending ? 'asc' : 'desc');\n        }\n\n        const valuePath = column.get('valuePath');\n        const rowsToSort = (0, _lodash.orderBy)(this.get('table.rows'), row => {\n          return row.get(valuePath);\n        }, [this.get('sortDirection')]);\n        this.set('table.rows', rowsToSort);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: null,\n    modelName: 'event',\n    title: 'Activity',\n    defaultSortId: 'time',\n    defaultSortAsc: false,\n    queryModelData: true,\n    showSelectedRowLength: false,\n    columns: [{\n      id: 'activity',\n      index: 0,\n      type: 'text',\n      label: 'Activity',\n      defaultWidth: 90,\n      sortable: true,\n      valuePath: 'collectedEventLog.firstObject.activity',\n      searchable: true\n    }, {\n      id: 'time',\n      index: 1,\n      type: 'date',\n      label: 'Date / Time',\n      defaultWidth: 180,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'time',\n      searchable: true,\n      sortable: true\n    }, {\n      id: 'user',\n      index: 2,\n      type: 'text',\n      label: 'User',\n      defaultWidth: 180,\n      sortable: true,\n      searchable: true,\n      valuePath: 'user.emailOrFullName'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/validation\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _lodash, _validation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_19AREVIEW_TYPE_MAP = {\n    addDriver19AReview: true,\n    editDriver19AReview: true,\n    deleteDriver19AReview: true\n  };\n  const ACTIVE_STATUS = 'active';\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tableRef: null,\n    activityReviewtableRef: null,\n    disableForm: true,\n    pendingDriverReviewRecord: null,\n    selectedDriver: Ember.computed.alias('editAPI.selectedRecord'),\n    selectedRecord: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    review19AQueryParams: null,\n    providerOptions: Ember.computed('', function () {\n      return this.get('store').peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS;\n      });\n    }),\n    typeOfDateOptions: Ember.computed('', function () {\n      return this.get('store').peekAll('exam-type-name');\n    }),\n    driverReviewChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('driverReviewChangeSet.changes.length', function () {\n      const driverReviewChangeSet = this.get('driverReviewChangeSet');\n      const changes = driverReviewChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const driverReviewChangeSet = this.get('driverReviewChangeSet');\n\n      if (driverReviewChangeSet.get('isNew')) {\n        const pendingChanges = this.get('driverReviewChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? fields.every(field => field.includes('examDate')) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n      this.set('review19AQueryParams', {\n        filter: `eq(driverId,${driver.get('id')})`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const tableRef = this.get('tableRef'); // ember concurrency tasks\n\n      const onDeleteRecord = this.get('onDeleteRecord');\n      const onSaveRecord = this.get('onSaveRecord');\n      const onValidateAction = this.get('validateDriverReview'); // normal functions\n\n      const onUndoRecord = this.get('onUndoRecord').bind(this);\n      const onNewRecord = this.get('onNewRecord').bind(this);\n      const onEditRecord = this.get('onEditRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRecord,\n          newAction: onNewRecord,\n          deleteAction: onDeleteRecord,\n          editAction: onEditRecord,\n          undoAction: onUndoRecord,\n          selectedDriverBelongsTableRef: tableRef,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_19AREVIEW_TYPE_MAP[event.get('actionType')];\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const editAPI = this.get('editAPI');\n      let pendingDriverReviewRecord = this.get('pendingDriverReviewRecord');\n\n      if (record) {\n        pendingDriverReviewRecord = record;\n        this.resetForm();\n      } else if (!pendingDriverReviewRecord) {\n        pendingDriverReviewRecord = store.createRecord('driver-19-a-review');\n        this.set('pendingDriverReviewRecord', pendingDriverReviewRecord);\n      }\n\n      if (pendingDriverReviewRecord.get('isNew')) {\n        pendingDriverReviewRecord.setProperties({\n          provider: '',\n          examTypeName: '',\n          examDate: new Date(),\n          driver: editAPI.selectedRecord\n        });\n      }\n\n      return new _emberChangeset.default(pendingDriverReviewRecord, (0, _emberChangesetValidations.default)(_validation.DRIVER_REVIEW_VALIDATION), _validation.DRIVER_REVIEW_VALIDATION);\n    },\n\n    validateDriverReview: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverReviewChangeSet = this.get('driverReviewChangeSet');\n      yield driverReviewChangeSet.validate();\n\n      if (Ember.isEmpty(driverReviewChangeSet.get('provider.name'))) {\n        driverReviewChangeSet.addError('provider', {\n          value: driverReviewChangeSet.get('provider'),\n          validation: 'Provider is required..'\n        });\n      }\n\n      const errors = driverReviewChangeSet.errors;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverReview = this.get('selectedRecord');\n\n      if (selectedDriverReview) {\n        if (!selectedDriverReview.get('isNew') && !selectedDriverReview.get('isDeleted')) {\n          yield selectedDriverReview.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityReviewtableRef = this.get('activityReviewtableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityReviewtableRef) Ember.run.scheduleOnce('afterRender', activityReviewtableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    onSaveRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const pendingDriverReviewRecord = this.get('driverReviewChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverReview = yield this.validateDriverReview.perform();\n\n      if (isValidDriverReview) {\n        try {\n          yield pendingDriverReviewRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingDriverReviewRecord', null);\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            });\n          }, 1000);\n          return pendingDriverReviewRecord;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n    onDelete19AReviewRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('selectedRecord');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedRecord.destroyRecord();\n        this.set('pendingDriverReviewRecord', null);\n        notifications.success('Record successfully deleted');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            this.resetForm();\n          });\n        }, 1000);\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('selectedRecord');\n      const tooltip = this.get('tooltip');\n      if (!selectedRecord) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDelete19AReviewRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onUndoRecord() {\n      const driverReviewChangeSet = this.get('driverReviewChangeSet');\n\n      if (driverReviewChangeSet) {\n        driverReviewChangeSet.rollback();\n      }\n    },\n\n    onNewRecord() {\n      const selectedRow = this.get('selectedRow');\n      const editAPI = this.get('editAPI');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onEditRecord() {\n      const selectedRow = this.get('selectedRow');\n      const editAPI = this.get('editAPI');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveRecord() {\n        this.onSaveRecord.perform();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"j1E5c3lz\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"provider\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container driver-review\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/19a-review\\\",null,[[\\\"tableRef\\\",\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"queryParams\\\"],[[23,[\\\"tableRef\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validateDriverReview\\\"]],[23,[\\\"review19AQueryParams\\\"]]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper margin-top-10\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"provider-information-panel\\\",\\\"Provider\\\",false]],{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"driverReviewChangeSet\\\",\\\"error\\\",\\\"provider\\\"]],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row width-inherit\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 text-right\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"providerOptions\\\"]],\\\"name\\\",true,[23,[\\\"disableForm\\\"]],[23,[\\\"driverReviewChangeSet\\\",\\\"provider\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverReviewChangeSet\\\",\\\"provider\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Dates\\\",false]],{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"driverReviewChangeSet\\\",\\\"error\\\",\\\"examTypeName\\\"]],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row width-inherit\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 text-right\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Type of Date\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"typeOfDateOptions\\\"]],\\\"name\\\",true,[23,[\\\"disableForm\\\"]],[23,[\\\"driverReviewChangeSet\\\",\\\"examTypeName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverReviewChangeSet\\\",\\\"examTypeName\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group margin-top-10\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row width-inherit\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 text-right\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8\\\"],[9],[0,\\\"\\\\n                      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"value\\\",\\\"showCaret\\\",\\\"class\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"driverReviewChangeSet\\\",\\\"examDate\\\"]],false,[27,\\\"if\\\",[[23,[\\\"driverReviewChangeSet\\\",\\\"error\\\",\\\"examDate\\\"]],\\\"error\\\"],null],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverReviewChangeSet\\\",\\\"examDate\\\"]]],null]],null]]]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityReviewtableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/19a-review/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.DRIVER_REVIEW_VALIDATION = void 0;\n  const DRIVER_REVIEW_VALIDATION = {\n    provider: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Provider',\n      message: '{description} is required.'\n    })],\n    examTypeName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Type of Date',\n      message: '{description} is required.'\n    })],\n    examDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Date',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.DRIVER_REVIEW_VALIDATION = DRIVER_REVIEW_VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/validation\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/vehicle-search-config\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _lodash, _validation, _vehicleSearchConfig) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_ACCIDENT_TYPE_MAP = {\n    addDriverAccident: true,\n    editDriverAccident: true,\n    deleteDriverAccident: true\n  };\n  const ACCIDENT_FIELDS = ['notificationDate', 'accidentDate'];\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-accident-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tableRef: null,\n    activityAccidentTableRef: null,\n    disableForm: true,\n    // passed into view\n    editAPI: null,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedDriverAccident: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    accidentQueryParams: null,\n\n    async init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n      this.set('accidentQueryParams', {\n        filter: `eq(driverId,${driver.get('id')})`\n      });\n      this.get('refreshTask').perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const tableRef = this.get('tableRef'); // ember concurrency tasks\n\n      const onSaveDriverAccidentRecord = this.get('onSaveDriverAccidentRecord');\n      const onDeleteDriverAccidentRecord = this.get('onDeleteDriverAccidentRecord');\n      const onValidateAction = this.get('validateDriverAccident'); // normal functions\n\n      const onUndoDriverAccidentRecord = this.get('onUndoDriverAccidentRecord').bind(this);\n      const onNewDriverAccidentRecord = this.get('onNewDriverAccidentRecord').bind(this);\n      const onEditDriverAccidentRecord = this.get('onEditDriverAccidentRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverAccidentRecord,\n          newAction: onNewDriverAccidentRecord,\n          deleteAction: onDeleteDriverAccidentRecord,\n          editAction: onEditDriverAccidentRecord,\n          undoAction: onUndoDriverAccidentRecord,\n          selectedDriverBelongsTableRef: tableRef,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_ACCIDENT_TYPE_MAP[event.get('actionType')];\n    },\n\n    driverAccidentChangeSet: Ember.computed('selectedDriverAccident', function () {\n      const driverAccident = (0, _unwrapProxy.unwrapProxy)(this.get('selectedDriverAccident'));\n      return this.setDefaultProperties(driverAccident);\n    }),\n    hasPendingChanges: Ember.computed('driverAccidentChangeSet.changes.length', function () {\n      const driverAccidentChangeSet = this.get('driverAccidentChangeSet');\n      const changes = driverAccidentChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const driverAccidentChangeSet = this.get('driverAccidentChangeSet');\n\n      if (driverAccidentChangeSet.get('isNew')) {\n        const pendingChanges = this.get('driverAccidentChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => ACCIDENT_FIELDS.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      let pendingDriverAccidentRecord = this.get('pendingDriverAccidentRecord');\n\n      if (record) {\n        pendingDriverAccidentRecord = record;\n        this.resetForm();\n      } else if (!pendingDriverAccidentRecord) {\n        pendingDriverAccidentRecord = store.createRecord('driver-accident');\n        this.set('pendingDriverAccidentRecord', pendingDriverAccidentRecord);\n      }\n\n      if (pendingDriverAccidentRecord.get('isNew')) {\n        pendingDriverAccidentRecord.setProperties({\n          notification: false,\n          notificationDate: new Date(),\n          accidentDate: new Date(),\n          transitVehicleInvolved: false,\n          description: null,\n          vehicle: null,\n          driver: this.get('selectedDriver')\n        });\n      }\n\n      return new _emberChangeset.default(pendingDriverAccidentRecord, (0, _emberChangesetValidations.default)(_validation.VALIDATION), _validation.VALIDATION);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverAccident = this.get('selectedDriverAccident');\n\n      if (selectedDriverAccident) {\n        if (!selectedDriverAccident.get('isNew') && !selectedDriverAccident.get('isDeleted')) {\n          yield selectedDriverAccident.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityAccidentTableRef = this.get('activityAccidentTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityAccidentTableRef) Ember.run.scheduleOnce('afterRender', activityAccidentTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validateDriverAccident: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverAccidentChangeSet = this.get('driverAccidentChangeSet');\n      yield driverAccidentChangeSet.validate();\n      const errors = driverAccidentChangeSet.errors;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n    onSaveDriverAccidentRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const pendingDriverAccidentRecord = this.get('driverAccidentChangeSet');\n      const vehicle = (0, _unwrapProxy.unwrapProxy)(pendingDriverAccidentRecord.get('vehicle'));\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverAccident = yield this.validateDriverAccident.perform();\n\n      if (isValidDriverAccident) {\n        try {\n          if (Ember.isEmpty(vehicle)) {\n            pendingDriverAccidentRecord.set('transitVehicleInvolved', false);\n          } else {\n            pendingDriverAccidentRecord.set('transitVehicleInvolved', true);\n          }\n\n          yield pendingDriverAccidentRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingDriverAccidentRecord', null);\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            });\n          }, 1000);\n          return pendingDriverAccidentRecord;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverAccident = this.get('selectedDriverAccident');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedDriverAccident.destroyRecord();\n        notifications.success('Record successfully deleted');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          });\n        }, 1000);\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteDriverAccidentRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverAccident = this.get('selectedDriverAccident');\n      const tooltip = this.get('tooltip');\n      if (!selectedDriverAccident) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onUndoDriverAccidentRecord() {\n      const driverAccidentChangeSet = this.get('driverAccidentChangeSet');\n\n      if (driverAccidentChangeSet) {\n        driverAccidentChangeSet.rollback();\n      }\n    },\n\n    onNewDriverAccidentRecord() {\n      const selectedRow = this.get('selectedRow');\n      const driverAccidentChangeSet = this.get('driverAccidentChangeSet');\n      const defaultDate = new Date();\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      driverAccidentChangeSet.setProperties({\n        notificationDate: defaultDate,\n        accidentDate: defaultDate\n      });\n      this.set('disableForm', false);\n      this.get('editAPI').buttonSettings(true, true, true, false, false); //False to enable the button, TRUE to disable\n    },\n\n    onEditDriverAccidentRecord() {\n      const selectedRow = this.get('selectedRow');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.set('disableForm', false);\n      this.get('editAPI').buttonSettings(true, true, true, false, false);\n    },\n\n    onVehicleChange(vehicle) {\n      let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vehicle';\n      const driverAccidentChangeSet = this.get('driverAccidentChangeSet');\n      driverAccidentChangeSet.set(path, vehicle);\n    },\n\n    actions: {\n      onSaveRecord() {\n        return this.onSaveDriverAccidentRecord.perform();\n      },\n\n      openVehicleModal() {\n        const onVehicleChange = this.get('onVehicleChange').bind(this);\n        const searchVehicleObj = Ember.Object.create({\n          title: 'Vehicles',\n          hasOverlay: true,\n          config: _vehicleSearchConfig.default,\n          primaryActionText: 'Select',\n          className: 'vehicle-search-modal',\n          primaryAction: record => {\n            onVehicleChange(record);\n          }\n        });\n        this.set('modalAPI', searchVehicleObj);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"pKkosAWC\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-accident\\\",null,[[\\\"tableRef\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"isTaskRunning\\\",\\\"queryParams\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validateDriverAccident\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRecord\\\"],null],[23,[\\\"isTaskRunning\\\"]],[23,[\\\"accidentQueryParams\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Accident\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\"],[\\\"Vehicle ID\\\",[23,[\\\"driverAccidentChangeSet\\\",\\\"vehicle\\\",\\\"name\\\"]],true]]],false],[0,\\\"\\\\n                \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ml-1\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openVehicleModal\\\"],null]],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"showCaret\\\",\\\"disabled\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,[23,[\\\"disableForm\\\"]],false,\\\"m/d/Y\\\",[27,\\\"if\\\",[[23,[\\\"driverAccidentChangeSet\\\",\\\"accidentDate\\\"]],[23,[\\\"driverAccidentChangeSet\\\",\\\"accidentDate\\\"]],\\\"\\\"],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverAccidentChangeSet\\\",\\\"accidentDate\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Notification\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"name\\\",\\\"checked\\\",\\\"change\\\"],[\\\"checkbox\\\",[23,[\\\"disableForm\\\"]],\\\"notification\\\",[23,[\\\"driverAccidentChangeSet\\\",\\\"notification\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"changeset-set\\\",[[23,[\\\"driverAccidentChangeSet\\\"]],\\\"notification\\\"],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Notification Date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"showCaret\\\",\\\"disabled\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,[23,[\\\"disableForm\\\"]],\\\"m/d/Y\\\",[27,\\\"if\\\",[[23,[\\\"driverAccidentChangeSet\\\",\\\"notificationDate\\\"]],[23,[\\\"driverAccidentChangeSet\\\",\\\"notificationDate\\\"]],\\\"\\\"],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverAccidentChangeSet\\\",\\\"notificationDate\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"maxLength\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverAccidentChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],\\\"500\\\",[23,[\\\"driverAccidentChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverAccidentChangeSet\\\",\\\"description\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityAccidentTableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[1,[27,\\\"search-modal\\\",null,[[\\\"modalAPI\\\"],[[23,[\\\"modalAPI\\\"]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATION = void 0;\n  const VALIDATION = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.VALIDATION = VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/accident/vehicle-search-config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle',\n    title: 'Vehicle',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    fetchModelData: false,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'ID',\n      valuePath: 'name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'placeholder',\n      index: 1,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'placeholder',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'providerId',\n      index: 2,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'licensePlate',\n      index: 3,\n      type: 'text',\n      label: 'License Plate',\n      valuePath: 'licensePlate',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleStatus',\n      index: 4,\n      type: 'text',\n      label: 'Vehicle Status',\n      valuePath: 'vehicleStatusName.description',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'wheelChairLiftSerialNumber',\n      index: 5,\n      type: 'uuid',\n      label: 'Wheelchair Lift Serial Number',\n      valuePath: 'wheelChairLiftSerialNumber',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'leaseCompanyName',\n      index: 6,\n      type: 'text',\n      label: 'Lease Company',\n      valuePath: 'leaseCompanyName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'leaseEndDate',\n      index: 7,\n      type: 'Date',\n      label: 'Lease End Date',\n      valuePath: 'leaseEndDate',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'inService',\n      index: 8,\n      type: 'boolean',\n      label: 'In Service',\n      valuePath: 'inService',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'displayInManager',\n      index: 9,\n      type: 'boolean',\n      label: 'Display in Manager',\n      valuePath: 'displayInManager',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'displayInArchive',\n      index: 10,\n      type: 'boolean',\n      label: 'Display in Archive',\n      valuePath: 'displayInArchive',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleTypeName',\n      index: 11,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'vehicleTypeName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'manufacturerName',\n      index: 12,\n      type: 'boolean',\n      label: 'Manufacturer',\n      valuePath: 'manufacturerName.name',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'modelYear',\n      index: 13,\n      type: 'number',\n      label: 'Model Year',\n      valuePath: 'modelYear',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'comments',\n      index: 14,\n      type: 'text',\n      label: 'Comments',\n      valuePath: 'comments',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'engineType',\n      index: 15,\n      type: 'text',\n      label: 'Engine Type',\n      valuePath: 'engineType',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'siteDef',\n      index: 16,\n      type: 'text',\n      label: 'Site Def',\n      valuePath: 'siteDef',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'inServiceDate',\n      index: 17,\n      type: 'date',\n      label: 'In Service Date',\n      valuePath: 'inServiceDate',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'endServiceDate',\n      index: 18,\n      type: 'date',\n      label: 'End Service Date',\n      valuePath: 'endServiceDate',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'version',\n      index: 19,\n      type: 'number',\n      label: 'Version',\n      valuePath: 'version',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfAmbulatorySeats',\n      index: 20,\n      type: 'number',\n      label: 'Amb Seats',\n      valuePath: 'noOfAmbulatorySeats',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfWheelChairSeats',\n      index: 21,\n      type: 'number',\n      label: 'WC Seats',\n      valuePath: 'noOfWheelChairSeats',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'extraWideLift',\n      index: 22,\n      type: 'number',\n      label: 'XWide Lift',\n      valuePath: 'vehicleType.extraWideLift',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/availability/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"ember-changeset-cp-validations\", \"ember-changeset\"], function (_exports, _emberConcurrency, _lodash, _emberChangesetCpValidations, _emberChangeset) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_AVAILABILITY_TYPE_MAP = {\n    addDriverAvailability: true,\n    editDriverAvailability: true,\n    deleteDriverAvailability: true\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['availability'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    editAPI: null,\n    availabilities: null,\n    resetRecords: true,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    modelName: 'driver-availability',\n    // this observer used for undo enabled and disable in availability screen NYAAR-17165\n    onAvailabilityChange: Ember.observer('availabilities.@each.changes.length', function () {\n      const availabilities = this.get('availabilities');\n      const availabilitiesChanges = availabilities.reduce((acu, availability) => {\n        const changes = availability.get('changes') || [];\n        return acu + changes.length;\n      }, 0);\n\n      if (availabilitiesChanges > 0) {\n        const editAPI = this.get('editAPI');\n        editAPI.setProperties({\n          isChangesHappened: true\n        });\n      }\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const driverAvailabilities = this.get('editAPI.selectedRecord.driverAvailabilities') || [];\n      this.set('availabilities', this.configureDriverAvailabilities(driverAvailabilities));\n      const onSaveAvailabilityRecord = this.get('onSaveAvailabilityRecord');\n      const onUndoAvailabilityRecord = this.get('onUndoAvailabilityRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      const onValidateAction = this.get('validate');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveAvailabilityRecord,\n          undoAction: onUndoAvailabilityRecord,\n          undoBtn: true,\n          saveBtn: false,\n          newAction: false,\n          deleteAction: false,\n          editAction: false,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n    },\n\n    async refreshTask() {\n      const tableRef = this.get('tableRef');\n      const store = this.get('store');\n      const driver = this.get('selectedDriver');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      const driverAvailabilities = await store.query('driver-availability', {\n        filter: `eq('driverId','${driver.get('id')}')`\n      });\n      this.set('availabilities', this.configureDriverAvailabilities(driverAvailabilities));\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_AVAILABILITY_TYPE_MAP[event.get('actionType')];\n    },\n\n    configureDriverAvailabilities(availabilities) {\n      const changesets = availabilities.map(availability => {\n        const {\n          validateFn,\n          validationMap\n        } = (0, _emberChangesetCpValidations.buildChangeset)(availability);\n        return new _emberChangeset.default(availability, validateFn, validationMap);\n      });\n      return changesets;\n    },\n\n    hasPendingChanges: Ember.computed('availabilities.@each.changes.length', function () {\n      const availabilities = this.get('availabilities');\n      return availabilities.reduce((acu, availability) => {\n        const changes = availability.get('changes') || [];\n        return acu + changes.length;\n      }, 0);\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    onUndoAvailabilityRecord() {\n      const availabilities = this.get('editAPI.selectedRecord.driverAvailabilities') || [];\n      const editAPI = this.get('editAPI');\n      availabilities.forEach(availability => {\n        availability.rollbackAttributes();\n      });\n      const driverAvailabilities = this.get('editAPI.selectedRecord.driverAvailabilities') || [];\n      this.set('availabilities', this.configureDriverAvailabilities(driverAvailabilities));\n      editAPI.setProperties({\n        undoBtn: true\n      });\n      editAPI.setProperties({\n        isChangesHappened: false\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const availabilities = this.get('availabilities').filter(avail => !avail.get('hasDeleted')) || [];\n      let errors = [];\n      yield availabilities.reduce(async (acu, availability) => {\n        await availability.validate();\n        errors.push(...availability.errors);\n        return acu.then(() => Promise.resolve());\n      }, Promise.resolve());\n      errors = (0, _lodash.uniqBy)(errors, error => error.key);\n\n      if (errors.length) {\n        this.set('shouldDisplayValidations', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    getAvailabilities() {\n      const availabilities = this.get('availabilities');\n      return availabilities.filter(avail => {\n        if (avail.get('isNew')) return avail.get('isNew');\n        const availabilityChanges = avail.get('changes');\n        const filteredAvailabilityChanges = availabilityChanges.filter(availabilityChange => availabilityChange.key !== 'endTime' && availabilityChange.key !== 'startTime');\n\n        if (!Ember.isEmpty(filteredAvailabilityChanges)) {\n          return avail.data;\n        }\n      });\n    },\n\n    onSaveAvailabilityRecord: (0, _emberConcurrency.task)(function* () {\n      const validate = this.get('validate');\n      const isValid = yield validate.perform();\n      const notifications = this.get('notifications');\n      const selectedDriver = this.get('selectedDriver');\n      const changedAvailabilities = this.getAvailabilities() || [];\n      const editAPI = this.get('editAPI');\n      const tooltip = this.get('tooltip');\n      const deletedAvailabilities = this.get('availabilities').filter(avail => avail.get('hasDeleted')) || [];\n      deletedAvailabilities.forEach(avail => avail.data.deleteRecord());\n      const availabilities = changedAvailabilities.map(avail => {\n        avail.set('driver', selectedDriver);\n        if (!avail.data.isDeleted) avail.execute();\n        return avail.data;\n      }) || [];\n\n      if (isValid) {\n        try {\n          const newAvailability = yield availabilities.reduce((acu, availability) => {\n            const calcEndDate = availability.get('calcEndDate');\n            if (!availability.get('isDeleted')) availability.set('shiftEnd', calcEndDate);\n            return acu.then(() => availability.save());\n          }, Promise.resolve());\n          notifications.success('Record successfully saved.');\n          this.set('shouldDisplayValidations', false);\n          editAPI.setProperties({\n            undoBtn: true\n          });\n          Ember.run.later(async () => {\n            //NYAAR-18865 The undo button should not be enabled on removing the availability of driver after saving the changes on add/edit driver.\n            await this.refreshTask();\n            editAPI.setProperties({\n              isChangesHappened: false\n            });\n            tooltip.reset();\n          }, 1000);\n          return newAvailability;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/availability/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3Q1nqFnk\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[1,[27,\\\"generic-components/availabilities\\\",null,[[\\\"availabilities\\\",\\\"availabilityRef\\\",\\\"modelName\\\"],[[23,[\\\"availabilities\\\"]],[23,[\\\"availabilityRef\\\"]],[23,[\\\"modelName\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/availability/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"moment\", \"lodash\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/config\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/validation\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _moment, _lodash, _config, _validation, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DRIVER_FIELDS = ['startDateDs870', 'seniorityDate', 'birthDate', 'peDate1', 'peDate2'];\n  const CDL_FIELDS = ['issueDate', 'expiryDate'];\n  const ACTIVE_STATUS = 'active';\n  const EVENT_DRIVER_TYPE_MAP = {\n    addDriver: true,\n    editDriver: true,\n    deleteDriver: true\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    addressConfig: _config.addressConfig,\n    place: null,\n    classificationOptions: null,\n    providers: null,\n    providerList: null,\n    pendingDriverProvider: null,\n    selectedProvider: null,\n    // placeholders\n    FIRST_NAME_PLACEHOLDER: _placeholders.FIRST_NAME_PLACEHOLDER,\n    LAST_NAME_PLACEHOLDER: _placeholders.LAST_NAME_PLACEHOLDER,\n    MIDDLE_INITIAL_PLACEHOLDER: _placeholders.MIDDLE_INITIAL_PLACEHOLDER,\n    CDL_NUMBER_PLACEHOLDER: _placeholders.CDL_NUMBER_PLACEHOLDER,\n    PROVIDER_PLACEHOLDER: _placeholders.PROVIDER_PLACEHOLDER,\n    PHONE_NUMBER_EXT_PLACEHOLDER: _placeholders.PHONE_NUMBER_EXT_PLACEHOLDER,\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    SOCIAL_SECURITY_NUMBER_PLACEHOLDER: _placeholders.SOCIAL_SECURITY_NUMBER_PLACEHOLDER,\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    DRIVER_ID_PLACEHOLDER: _placeholders.DRIVER_ID_PLACEHOLDER,\n    // passed into view\n    editAPI: null,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    currentDate: (0, _moment.default)().startOf('day').toDate(),\n\n    async init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n      const driver = this.get('selectedDriver');\n      const driverId = driver.get('id');\n      const driverAddress = driver.get('address');\n      const location = store.createRecord('location');\n      const place = store.createRecord('place', {\n        address: driverAddress,\n        location\n      });\n      this.set('place', place);\n\n      if (Ember.isPresent(driverId)) {\n        this.set('activityQueryParams', {\n          driverId: `${driverId}`,\n          eventLog: true\n        });\n        this.set('providerQueryParams', {\n          filter: `eq(driverId,${driver.get('id')})`\n        });\n      } else {\n        // skip query of activity log if it is a new record\n        this.set('skipQuery', true);\n      }\n\n      this.get('refreshTask').perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onSaveDriverRecord = this.get('onSaveDriverRecord');\n      const onValidateAction = this.get('validateDriver'); // normal functions\n\n      const onUndoDriverRecord = this.get('onUndoDriverRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverRecord,\n          newAction: null,\n          deleteAction: null,\n          editAction: null,\n          undoAction: onUndoDriverRecord,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n        editAPI.buttonSettings(false, false, false, false, false);\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_DRIVER_TYPE_MAP[event.get('actionType')];\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      const place = (0, _unwrapProxy.unwrapProxy)(this.get('place'));\n      const location = (0, _unwrapProxy.unwrapProxy)(this.get('place.location'));\n      place.set('address', null);\n      if (location) location.rollbackAttributes();\n\n      if (place) {\n        place.rollbackAttributes();\n      }\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    driverSuspendedText: Ember.computed('driverChangeSet.driverSuspensions', function () {\n      const driverSuspensions = this.get('driverChangeSet.driverSuspensions') || [];\n      const suspensions = driverSuspensions.filter(suspension => suspension.get('isSuspended'));\n\n      if (suspensions.length > 0) {\n        return 'Driver IS suspended';\n      }\n\n      return 'Driver is NOT suspended';\n    }),\n    driverAmountOfViolationsText: Ember.computed('driverChangeSet.driverSuspensions', function () {\n      const driverSuspensions = this.get('driverChangeSet.driverSuspensions') || [];\n      const suspensions = driverSuspensions.filter(suspension => suspension.get('isSuspended'));\n      const violationPts = suspensions.reduce((acu, suspension) => {\n        const points = parseInt(suspension.get('driverViolation.points') || 0, 10);\n        const sum = acu + points;\n        return sum;\n      }, 0);\n      return `Driver has ${violationPts} points`;\n    }),\n    driverChangeSet: Ember.computed('selectedDriver', function () {\n      const driver = (0, _unwrapProxy.unwrapProxy)(this.get('selectedDriver'));\n      return this.setDefaultProperties(driver);\n    }),\n    fetchDriverProvider: (0, _emberConcurrency.task)(function* (driver) {\n      const store = this.get('store');\n      const selectedProviders = yield store.query('driver-provider', this.get('providerQueryParams'));\n      const selectedProvider = selectedProviders.firstObject;\n\n      if (selectedProvider) {\n        this.set('pendingDriverProvider', selectedProvider);\n      } else {\n        this.set('pendingDriverProvider', store.createRecord('driver-provider', {\n          driver\n        }));\n      }\n    }).keepLatest(),\n    driverPhoneChangeSet: Ember.computed('driverChangeSet', 'driverChangeSet.phoneNumbers.firstObject.areaCode', function () {\n      const driverChangeSet = this.get('driverChangeSet');\n      let driverPhone = (0, _unwrapProxy.unwrapProxy)(driverChangeSet.get('phoneNumbers.firstObject')); //fix NYAAR-18084 after destroying the driverPhone , we need to create a new driverPhone changeSet\n\n      if (!driverPhone) {\n        driverPhone = this.get('store').createRecord('driver-phone-number');\n      }\n\n      return new _emberChangeset.default(driverPhone, (0, _emberChangesetValidations.default)(_validation.DRIVER_PHONE_VALIDATION), _validation.DRIVER_PHONE_VALIDATION);\n    }),\n    driverEmergencyContactChangeSet: Ember.computed('driverChangeSet', function () {\n      const driverChangeSet = this.get('driverChangeSet');\n      const driverEmergencyContact = (0, _unwrapProxy.unwrapProxy)(driverChangeSet.get('emergencyContacts.firstObject'));\n      return new _emberChangeset.default(driverEmergencyContact, (0, _emberChangesetValidations.default)(_validation.DRIVER_EMERGENCY_CONTACT_VALIDATION, _validation.DRIVER_EMERGENCY_CONTACT_VALIDATION));\n    }),\n    driverLicenseChangeSet: Ember.computed('driverChangeSet', function () {\n      const driverChangeSet = this.get('driverChangeSet');\n      const driverLicense = (0, _unwrapProxy.unwrapProxy)(driverChangeSet.get('license'));\n      const defaulDate = new Date();\n\n      if (driverChangeSet.get('isNew')) {\n        driverLicense.setProperties({\n          issueDate: defaulDate,\n          expiryDate: defaulDate\n        });\n      }\n\n      const driverLicenseChangeSet = new _emberChangeset.default(driverLicense, (0, _emberChangesetValidations.default)(_validation.DRIVER_LICENSE_VALIDATION), _validation.DRIVER_LICENSE_VALIDATION);\n      return driverLicenseChangeSet;\n    }),\n    hasPendingChanges: Ember.computed('driverChangeSet.changes.length', 'driverEmergencyContactChangeSet.changes.length', 'driverPhoneChangeSet.changes.length', 'driverLicenseChangeSet.changes.length', function () {\n      const {\n        driverChangeSet,\n        driverEmergencyContactChangeSet,\n        driverPhoneChangeSet,\n        driverLicenseChangeSet\n      } = this.getProperties('driverChangeSet', 'driverEmergencyContactChangeSet', 'driverPhoneChangeSet', 'driverLicenseChangeSet');\n      return [driverChangeSet, driverEmergencyContactChangeSet, driverLicenseChangeSet, driverPhoneChangeSet].reduce((acu, changeset) => {\n        const changes = changeset.get('changes') || [];\n        acu.changes.push(changes);\n        acu.changeCount = acu.changeCount + changes.length;\n        return acu;\n      }, {\n        changes: [],\n        changeCount: 0\n      });\n    }),\n\n    hasChanges() {\n      const driverChangeSet = this.get('driverChangeSet');\n\n      if (driverChangeSet.get('isNew')) {\n        const totalFields = DRIVER_FIELDS.concat(CDL_FIELDS);\n        const pendingChanges = this.get('hasPendingChanges');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => totalFields.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges.changeCount');\n      }\n\n      return !!this.get('hasPendingChanges.changeCount');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges.changeCount');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      let pendingDriverRecord = this.get('pendingDriverRecord');\n      const defaultDate = new Date();\n      const birthDate = null;\n\n      if (record) {\n        pendingDriverRecord = record;\n        this.resetForm();\n      } else if (!pendingDriverRecord) {\n        pendingDriverRecord = store.createRecord('driver');\n        this.set('pendingDriverRecord', pendingDriverRecord);\n      }\n\n      if (pendingDriverRecord.get('isNew')) {\n        pendingDriverRecord.setProperties({\n          peDate1: defaultDate,\n          peDate2: defaultDate,\n          startDateDs870: defaultDate,\n          seniorityDate: defaultDate,\n          birthDate: birthDate\n        });\n      }\n\n      this.set('showValidations', false);\n      return new _emberChangeset.default(pendingDriverRecord, (0, _emberChangesetValidations.default)(_validation.DRIVER_VALIDATION), _validation.DRIVER_VALIDATION);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedDriver = this.get('selectedDriver');\n      const store = this.get('store');\n      const driverId = selectedDriver.get('driverId');\n      const classificationOptions = yield store.findAll('classification-name');\n      const providers = this.get('store').peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && (provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS || !provider.get('status'));\n      });\n      const providerList = providers.map(provider => provider.providerName);\n      const inspectCategories = yield store.findAll('inspection-category');\n      this.set('classificationOptions', classificationOptions);\n      this.set('providers', providers);\n      this.set('providerList', providerList);\n      this.set('inspectionCategories', inspectCategories);\n\n      if (!selectedDriver.get('isNew')) {\n        this.set('skipQuery', false);\n        yield selectedDriver.reload();\n      }\n\n      if (Ember.isPresent(driverId) && !selectedDriver.get('isNew')) {\n        this.set('activityQueryParams', {\n          driverId: `${driverId}`,\n          eventLog: true\n        });\n      }\n\n      const tableRef = this.get('tableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        editAPI.buttonSettings(false, false, false, false, false);\n      });\n    },\n\n    onSaveDriverRecord: (0, _emberConcurrency.task)(function* () {\n      let undoOnException = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      const notifications = this.get('notifications');\n      const pendingDriverRecord = this.get('driverChangeSet');\n      const driverAddress = (0, _unwrapProxy.unwrapProxy)(pendingDriverRecord.get('address'));\n      const driverPhoneChangeSet = this.get('driverPhoneChangeSet');\n      const emergencyContactChangeSet = this.get('driverEmergencyContactChangeSet');\n      const driverLicenseChangeSet = this.get('driverLicenseChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriver = yield this.validateDriver.perform();\n\n      if (isValidDriver) {\n        try {\n          yield pendingDriverRecord.save(); // save address if its present\n\n          if (driverAddress.get('address')) {\n            yield driverAddress.save();\n          }\n\n          if (driverPhoneChangeSet.get('isDirty') && driverPhoneChangeSet.get('isValid')) {\n            const driverChangeSet = this.get('driverChangeSet');\n            const driverPhones = (0, _unwrapProxy.unwrapProxy)(driverChangeSet.get('phoneNumbers'));\n            const driverPhone = (0, _unwrapProxy.unwrapProxy)(driverPhones.get('firstObject'));\n            const areaCode = driverPhoneChangeSet.get('areaCode'); // NYAAR-16005 - delete driver-phone-number for empty phone number instead of doing a patched because\n            // api requires area code to not be empty\n\n            if (Ember.isEmpty(areaCode)) {\n              yield driverPhone.destroyRecord();\n            } else {\n              yield driverPhoneChangeSet.save();\n            }\n          }\n\n          if (emergencyContactChangeSet.get('isDirty') && emergencyContactChangeSet.get('isValid')) {\n            yield emergencyContactChangeSet.save();\n          }\n\n          if (driverLicenseChangeSet.get('isDirty') && driverLicenseChangeSet.get('isValid')) {\n            yield driverLicenseChangeSet.save();\n          }\n\n          notifications.success('Record successfully saved.');\n          tooltip.reset();\n          this.resetForm();\n          Ember.run.later(() => {\n            this.get('refreshTask').perform();\n          }, 1000);\n          return pendingDriverRecord;\n        } catch (e) {\n          notifications.warning('Driver record failed to save');\n\n          if (undoOnException) {\n            const selectedDriver = this.get('selectedDriver');\n            const driverPhoneNumber = this.get('driverChangeSet.phoneNumbers.firstObject');\n            selectedDriver.rollbackAttributes();\n            driverPhoneNumber.rollbackAttributes();\n          }\n\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onUndoDriverRecord() {\n      const driverChangeSet = this.get('driverChangeSet');\n      const driverAddress = (0, _unwrapProxy.unwrapProxy)(driverChangeSet.get('address'));\n      const driverPhoneChangeSet = this.get('driverPhoneChangeSet');\n      const emergencyContactChangeSet = this.get('driverEmergencyContactChangeSet');\n      const driverLicenseChangeSet = this.get('driverLicenseChangeSet');\n\n      if (driverChangeSet) {\n        driverChangeSet.rollback();\n        driverPhoneChangeSet.rollback();\n        emergencyContactChangeSet.rollback();\n        driverLicenseChangeSet.rollback();\n      }\n\n      if (driverAddress.get('isNew')) {\n        driverAddress.setProperties({\n          streetNumber: null,\n          streetAddress: null,\n          locality: null,\n          region: null,\n          postalCode: null\n        });\n      } else {\n        driverAddress.rollbackAttributes();\n      }\n    },\n\n    validateDriver: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverChangeSet = this.get('driverChangeSet');\n      const driverPhoneChangeSet = this.get('driverPhoneChangeSet');\n      const emergencyContactChangeSet = this.get('driverEmergencyContactChangeSet');\n      const driverLicenseChangeSet = this.get('driverLicenseChangeSet');\n      yield driverChangeSet.validate();\n      yield driverPhoneChangeSet.validate();\n      yield emergencyContactChangeSet.validate();\n      yield driverLicenseChangeSet.validate();\n      const driverValid = driverChangeSet.errors;\n      const driverPhoneValid = driverPhoneChangeSet.errors;\n      const emergencyContactValid = emergencyContactChangeSet.errors;\n      const driverLicenseValid = driverLicenseChangeSet.errors;\n      const errors = (0, _lodash.compact)([].concat(driverValid, driverPhoneValid, emergencyContactValid, driverLicenseValid));\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n    actions: {\n      onPowerSelectChange(valuePath, selected) {\n        this.set(valuePath, selected);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onInputMaskValueChange(record, valuePath, useMaskVal, maskObj) {\n        if (useMaskVal) record.set(valuePath, maskObj.masked.replace(/_/im, ''));else record.set(valuePath, maskObj.unmasked);\n      },\n\n      onPhoneValueChange(record, maskObj) {\n        // match[0] = area code\n        // match[1] = first part of 3 digit phone number\n        // match[2] = second part of 4 digit phone number\n        // mask value is empty register all values empty\n        if (Ember.isEmpty(maskObj.masked)) {\n          record.set('areaCode', '');\n          record.set('phoneNumber', '');\n          record.set('phone', '');\n          record.set('unformattedPhoneNumber', maskObj.unmasked);\n          return;\n        }\n\n        const match = maskObj.masked.replace(/_/img, '').split('-');\n        record.set('areaCode', match[0]);\n        record.set('phoneNumber', match[1] + match[2]);\n        record.set('phone', match[1] + match[2]);\n        record.set('unformattedPhoneNumber', maskObj.unmasked);\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        const date = (0, _moment.default)(value).isValid() ? (0, _moment.default)(value).toDate() : null;\n        record.set(valuePath, date);\n      },\n\n      onCellValueChange(record, value, options) {\n        record.set(`${options.valuePath}`, value);\n      },\n\n      onProviderChange(selected) {\n        const providers = this.get('providers');\n        const provider = providers.find(p => p.providerName === selected);\n        this.set('driverChangeSet.provider', provider);\n      },\n\n      onCheckboxChange(record, valuePath, event) {\n        const checked = event.target.checked;\n        record.set(valuePath, checked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.addressConfig = void 0;\n  const addressConfig = {\n    valuePath: 'place',\n    modelName: 'place',\n    extra: {\n      aliasPath: 'address.content.alias',\n      notesPath: 'address.content.notes',\n      displayPath: 'address.content.address',\n      premisePath: 'address.content.premise',\n      streetNumberPath: 'address.content.streetNumber',\n      streetNamePath: 'address.content.streetName',\n      localityPath: 'address.content.locality',\n      regionPath: 'address.content.region',\n      subRegionPath: 'address.content.county',\n      postalCodePath: 'address.content.postalCode',\n      countryPath: 'address.content.country',\n      freeformAddressPath: 'address.content.freeformAddress',\n      tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.content.streetAddress',\n      locationsPath: 'address.locations.content.firstObject.latlng'\n    }\n  };\n  _exports.addressConfig = addressConfig;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"gwsgqIha\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"driver\\\",\\\"Driver\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"DRIVER_ID_PLACEHOLDER\\\"]],true,[23,[\\\"driverChangeSet\\\",\\\"driverId\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"driverId\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverChangeSet\\\",\\\"error\\\",\\\"firstName\\\"]],\\\"error\\\"],null],[23,[\\\"FIRST_NAME_PLACEHOLDER\\\"]],[23,[\\\"driverChangeSet\\\",\\\"firstName\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"20\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"firstName\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverChangeSet\\\",\\\"error\\\",\\\"lastName\\\"]],\\\"error\\\"],null],[23,[\\\"LAST_NAME_PLACEHOLDER\\\"]],[23,[\\\"driverChangeSet\\\",\\\"lastName\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"30\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"lastName\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"MI\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"onChange\\\",\\\"extra\\\"],[[23,[\\\"MIDDLE_INITIAL_PLACEHOLDER\\\"]],[23,[\\\"driverChangeSet\\\",\\\"middleName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"middleName\\\"],null],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"1\\\"]]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"place\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"value\\\",\\\"valuePath\\\",\\\"extra\\\",\\\"showPinButton\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"addressConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"addressConfig\\\",\\\"extra\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"place\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"phone-input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverPhoneChangeSet\\\",\\\"error\\\",\\\"unformattedPhoneNumber\\\"]],\\\"error\\\"],null],[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"driverPhoneChangeSet\\\",\\\"unformattedPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"driverPhoneChangeSet\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Ext\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[\\\"phone-ext-input limit-width\\\",[23,[\\\"PHONE_NUMBER_EXT_PLACEHOLDER\\\"]],[23,[\\\"driverPhoneChangeSet\\\",\\\"extension\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"6\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverPhoneChangeSet\\\"]],\\\"extension\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"suspension-text\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"p\\\"],[9],[1,[21,\\\"driverSuspendedText\\\"],false],[0,\\\". \\\"],[1,[21,\\\"driverAmountOfViolationsText\\\"],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"other mt-2\\\",\\\"Other\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Last Physical\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,\\\"Last Physical\\\",false,false,false,\\\"m/d/Y\\\",[23,[\\\"currentDate\\\"]],[23,[\\\"driverChangeSet\\\",\\\"lastPhysical\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"lastPhysical\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Transport Passenger\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Passenger\\\",[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"20\\\"]]],[23,[\\\"driverChangeSet\\\",\\\"transportPassenger\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"transportPassenger\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"P and E Date 1\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"currentDate\\\"]],[23,[\\\"driverChangeSet\\\",\\\"peDate1\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"peDate1\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"P and E Date 2\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"currentDate\\\"]],[23,[\\\"driverChangeSet\\\",\\\"peDate2\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"peDate2\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col ml-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"employment\\\",\\\"Employment\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"driverChangeSet\\\",\\\"error\\\",\\\"classificationName\\\"]],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"          \\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"providerList\\\"]],false,[23,[\\\"driverChangeSet\\\",\\\"provider\\\",\\\"providerName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start Date (DS870)\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"driverChangeSet\\\",\\\"startDateDs870\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"startDateDs870\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Seniority Date\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"currentDate\\\"]],[23,[\\\"driverChangeSet\\\",\\\"seniorityDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"seniorityDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Finger Print\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"driverChangeSet\\\",\\\"fingerprint\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"fingerprint\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"cdl mt-2\\\",\\\"CDL\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Number\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"class\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"CDL_NUMBER_PLACEHOLDER\\\"]],[27,\\\"if\\\",[[23,[\\\"driverLicenseChangeSet\\\",\\\"error\\\",\\\"license\\\"]],\\\"error\\\"],null],\\\"999-999-999\\\",[23,[\\\"driverLicenseChangeSet\\\",\\\"license\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputMaskValueChange\\\",[23,[\\\"driverLicenseChangeSet\\\"]],\\\"license\\\",true],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"driverLicenseChangeSet\\\",\\\"error\\\",\\\"classificationName\\\"]],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Classification\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"classificationOptions\\\"]],false,[23,[\\\"driverLicenseChangeSet\\\",\\\"classificationName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"driverLicenseChangeSet.classificationName\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Issue Date\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"driverLicenseChangeSet\\\",\\\"issueDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverLicenseChangeSet\\\"]],\\\"issueDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Expiry Date\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"currentDate\\\"]],[23,[\\\"driverLicenseChangeSet\\\",\\\"expiryDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverLicenseChangeSet\\\"]],\\\"expiryDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"personal mt-2\\\",\\\"Personal\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Social Security Number\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"class\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"SOCIAL_SECURITY_NUMBER_PLACEHOLDER\\\"]],[27,\\\"if\\\",[[23,[\\\"driverChangeSet\\\",\\\"error\\\",\\\"ssn\\\"]],\\\"error\\\"],null],\\\"999-99-9999\\\",[23,[\\\"driverChangeSet\\\",\\\"ssn\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputMaskValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"ssn\\\",true],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Date of Birth\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverChangeSet\\\",\\\"error\\\",\\\"birthDate\\\"]],\\\"error\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,false,\\\"m/d/Y\\\",[23,[\\\"driverChangeSet\\\",\\\"birthDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverChangeSet\\\"]],\\\"birthDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"emergency mt-2\\\",\\\"Emergency Contact\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"onChange\\\",\\\"extra\\\"],[\\\"Name\\\",[23,[\\\"driverEmergencyContactChangeSet\\\",\\\"name\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverEmergencyContactChangeSet\\\"]],\\\"name\\\"],null],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"50\\\"]]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverEmergencyContactChangeSet\\\",\\\"error\\\",\\\"unformattedPhoneNumber\\\"]],\\\"error\\\"],null],[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"driverEmergencyContactChangeSet\\\",\\\"unformattedPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"driverEmergencyContactChangeSet\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"skipQuery\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"skipQuery\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/driver/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.DRIVER_VALIDATION = _exports.DRIVER_PROVIDER_VALIDATION = _exports.DRIVER_PHONE_VALIDATION = _exports.DRIVER_LICENSE_VALIDATION = _exports.DRIVER_EMERGENCY_CONTACT_VALIDATION = void 0;\n  const DRIVER_VALIDATION = {\n    firstName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'First Name',\n      message: '{description} is required.'\n    })],\n    lastName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Last Name',\n      message: '{description} is required.'\n    })],\n    ssn: [(0, _validators.validateLength)({\n      is: 11,\n      allowBlank: true,\n      description: 'Social Security Number',\n      message: '{description} 9 digit is required.'\n    })]\n  };\n  _exports.DRIVER_VALIDATION = DRIVER_VALIDATION;\n  const DRIVER_PHONE_VALIDATION = {\n    unformattedPhoneNumber: [(0, _validators.validateLength)({\n      is: 10,\n      allowBlank: true,\n      description: 'Phone Number',\n      message: '{description} 10 digit is required.'\n    })]\n  };\n  _exports.DRIVER_PHONE_VALIDATION = DRIVER_PHONE_VALIDATION;\n  const DRIVER_LICENSE_VALIDATION = {\n    license: [(0, _validators.validateLength)({\n      is: 11,\n      allowBlank: true,\n      description: 'Number',\n      message: '{description} 9 digit is required.'\n    })]\n  };\n  _exports.DRIVER_LICENSE_VALIDATION = DRIVER_LICENSE_VALIDATION;\n  const DRIVER_EMERGENCY_CONTACT_VALIDATION = {\n    unformattedPhoneNumber: [(0, _validators.validateLength)({\n      is: 10,\n      allowBlank: true,\n      description: 'Phone Number',\n      message: '{description} 10 digit is required.'\n    })]\n  };\n  _exports.DRIVER_EMERGENCY_CONTACT_VALIDATION = DRIVER_EMERGENCY_CONTACT_VALIDATION;\n  const DRIVER_PROVIDER_VALIDATION = {\n    'provider': [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Provider',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.DRIVER_PROVIDER_VALIDATION = DRIVER_PROVIDER_VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/health/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"moment\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _emberChangeset, _moment, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_HEALTH_TYPE_MAP = {\n    addDriverHealth: true,\n    editDriverHealth: true,\n    deleteDriverHealth: true\n  };\n  const ACTIVE_STATUS = 'active';\n  const PushProvider = [];\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-health-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    driverHealthChangeSet: null,\n    // placeholders\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    NOTES_PLACEHOLDER: _placeholders.NOTES_PLACEHOLDER,\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    // passed into view\n    editAPI: null,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    isDriverHealthNew: Ember.computed.readOnly('driverHealthChangeSet.isNew'),\n    tableRef: null,\n    activityHealthTableRef: null,\n    activityQueryParams: null,\n    healthQueryParams: null,\n    disableOtherPanel: Ember.computed('driverHealthChangeSet.otherHealthCheck', function () {\n      const otherHealthCheckLen = this.get('driverHealthChangeSet.otherHealthCheck.length') || 0;\n\n      if (otherHealthCheckLen <= 0) {\n        this.clearOtherForm();\n      }\n\n      return otherHealthCheckLen <= 0;\n    }),\n    disableDiabetes: Ember.computed('driverHealthChangeSet.diabetes', function () {\n      const diabetes = !this.get('driverHealthChangeSet.diabetes');\n\n      if (diabetes) {\n        this.clearDiabetesForm();\n      }\n\n      return diabetes;\n    }),\n    // once a user un checks high blood pressure to clear fields / disable fields\n    disableHighBloodPressure: Ember.computed('driverHealthChangeSet.highBloodPressure', function () {\n      const highBloodPressure = !this.get('driverHealthChangeSet.highBloodPressure');\n\n      if (highBloodPressure) {\n        this.clearHighBloodForm();\n      }\n\n      return highBloodPressure;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const selectedDriver = this.get('selectedDriver');\n      const setProviderDropDowns = this.get('setProviderDropDowns').bind(this);\n      const driverHealth = selectedDriver.get('driverHealths.firstObject');\n      setProviderDropDowns();\n      this.get('setupDropDowns').perform();\n      this.set('activityQueryParams', {\n        driverId: `${selectedDriver.get('id')}`,\n        eventLog: true\n      });\n      this.set('driverQueryParams', {\n        filter: `eq(driverId,${selectedDriver.get('id')})`\n      });\n      this.set('driverHealthChangeSet', this.setDefaultProperties(driverHealth));\n      const defaulProviderName = this.get('driverHealthChangeSet.provider.id');\n      PushProvider.push(defaulProviderName);\n      this.get('refreshTask').perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onSaveDriverRecord = this.get('onSaveDriverHealthRecord');\n      const onValidateAction = this.get('validateDriverHealth'); // normal functions\n\n      const onUndoDriverRecord = this.get('onUndoDriverHealthRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverRecord,\n          undoAction: onUndoDriverRecord,\n          deleteAction: null,\n          editAction: null,\n          newAction: null,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n        editAPI.buttonSettings(false, false, false, false, false);\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_HEALTH_TYPE_MAP[event.get('actionType')];\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const selectedDriver = this.get('selectedDriver');\n      const providerOptions = this.get('providerOptions');\n\n      if (record === null) {\n        this.recordNull = true;\n      }\n\n      let pendingDriverHealth = record;\n\n      if (Ember.isEmpty(pendingDriverHealth)) {\n        pendingDriverHealth = store.createRecord('driver-health', {\n          driver: selectedDriver,\n          provider: providerOptions.firstObject\n        });\n      }\n\n      this.set('showValidations', false);\n      this.resetForm();\n      return new _emberChangeset.default(pendingDriverHealth);\n    },\n\n    hasPendingChanges: Ember.computed('driverHealthChangeSet.changes.length', function () {\n      const driverHealthChangeSet = this.get('driverHealthChangeSet');\n      const changes = driverHealthChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    // the only view to not have any required information to be entered\n    hasChanges() {\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const driverHealth = this.get('driverHealthChangeSet.data');\n\n      if (driverHealth) {\n        if (!driverHealth.get('isNew') && !driverHealth.get('isDeleted')) {\n          yield driverHealth.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityHealthTableRef = this.get('activityHealthTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityHealthTableRef) Ember.run.scheduleOnce('afterRender', activityHealthTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        editAPI.buttonSettings(false, false, false, false, false);\n      });\n    },\n\n    setupDropDowns: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const driverPhysicalTypeOptions = yield store.findAll('driver-physical-type-name');\n      this.set('driverPhysicalTypeOptions', driverPhysicalTypeOptions);\n    }),\n\n    setProviderDropDowns() {\n      const store = this.get('store');\n      const providerOptions = store.peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS;\n      });\n      this.set('providerOptions', providerOptions);\n    },\n\n    // Driver Provider CRUD OPERATIONS\n    onSaveDriverHealthRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const selectedDriver = this.get('selectedDriver');\n      const pendingDriverHealth = this.get('driverHealthChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverHealth = yield this.validateDriverHealth.perform();\n\n      if (isValidDriverHealth) {\n        pendingDriverHealth.set('driver', selectedDriver);\n\n        try {\n          yield pendingDriverHealth.save();\n          tooltip.reset();\n          notifications.success('Record successfully saved.');\n          Ember.run.later(() => {\n            this.get('refreshTask').perform();\n          }, 1000);\n          return pendingDriverHealth;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onUndoDriverHealthRecord() {\n      const driverHealthChangeSet = this.get('driverHealthChangeSet');\n      const providerOptions = this.get('providerOptions');\n\n      if (driverHealthChangeSet) {\n        if (this.ValueChange === true) {\n          this.ValueChange = false;\n          this.onAnyValueChangeToFalse();\n          driverHealthChangeSet.rollback();\n        } else {\n          const secondLastProvider = PushProvider[PushProvider.length - 2];\n          this.recordNull = false;\n          providerOptions.forEach(providerData => {\n            if (providerData.id === secondLastProvider) {\n              this.onProviderChange(providerData, 1);\n              PushProvider.push(providerData.id);\n            }\n          });\n        }\n      }\n    },\n\n    clearDiabetesForm() {\n      const driverHealthChangeSet = this.get('driverHealthChangeSet');\n      Ember.run.next(() => {\n        driverHealthChangeSet.setProperties({\n          prevDiabetesCheckDate: null,\n          lastDiabetesCheckDate: null,\n          nextDiabetesCheckDate: null\n        });\n      });\n    },\n\n    clearHighBloodForm() {\n      const driverHealthChangeSet = this.get('driverHealthChangeSet');\n      Ember.run.next(() => {\n        driverHealthChangeSet.setProperties({\n          bloodPressure: null,\n          prevBloodPressureDate: null,\n          lastBPDate: null,\n          nextBPDate: null\n        });\n      });\n    },\n\n    clearOtherForm() {\n      const driverHealthChangeSet = this.get('driverHealthChangeSet');\n      Ember.run.next(() => {\n        driverHealthChangeSet.setProperties({\n          otherHealthCheckNotes: null,\n          prevOtherHealthCheckDate: null,\n          lastOtherHealthCheckDate: null,\n          nextOtherHealthCheckDate: null\n        });\n      });\n    },\n\n    validateDriverHealth: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverHealthChangeSet = this.get('driverHealthChangeSet');\n      yield driverHealthChangeSet.validate();\n      const DriverHealthValid = driverHealthChangeSet.errors;\n      const errors = DriverHealthValid;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    onProviderChange(selectedProvider) {\n      let untoClick = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      let driverHealthChangeSet = this.get('driverHealthChangeSet');\n      const selectedDriver = this.get('selectedDriver');\n      const previousProviderName = this.get('driverHealthChangeSet.provider.name');\n\n      if (untoClick === 0) {\n        PushProvider.push(selectedProvider.id);\n      }\n\n      if (previousProviderName !== selectedProvider.name) {\n        const driverHealths = selectedDriver.get('driverHealths') || [];\n        const driverHealth = driverHealths.find(driverHealthInfo => driverHealthInfo.get('provider.name') === selectedProvider.name);\n        driverHealthChangeSet = this.setDefaultProperties(driverHealth);\n        this.set('driverHealthChangeSet', driverHealthChangeSet);\n      }\n\n      driverHealthChangeSet.set('provider', selectedProvider);\n    },\n\n    onAnyValueChange() {\n      this.ValueChange = true;\n    },\n\n    onAnyValueChangeToFalse() {\n      this.ValueChange = false;\n    },\n\n    actions: {\n      onPowerSelectChange(selected) {\n        this.onAnyValueChangeToFalse();\n        this.onProviderChange(selected);\n      },\n\n      onPhysicalSelectChange(valuePath, selected) {\n        if (this.recordNull !== true) {\n          this.onAnyValueChange();\n        }\n\n        this.set(valuePath, selected);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        if (this.recordNull !== true) {\n          this.onAnyValueChange();\n        }\n\n        record.set(valuePath, value);\n      },\n\n      onInputMaskValueChange(record, valuePath, useMaskVal, maskObj) {\n        if (this.recordNull !== true) {\n          this.onAnyValueChange();\n        }\n\n        if (useMaskVal) record.set(valuePath, maskObj.masked.replace(/_/im, ''));else record.set(valuePath, maskObj.unmasked);\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        if (this.recordNull !== true) {\n          this.onAnyValueChange();\n        }\n\n        const isoDate = (0, _moment.default)(value).toISOString();\n        record.set(valuePath, isoDate);\n      },\n\n      onCheckboxChange(record, valuePath, event) {\n        if (this.recordNull !== true) {\n          this.onAnyValueChange();\n        }\n\n        const checked = event.target.checked;\n        record.set(valuePath, checked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/health/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qywqdRAK\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-dds\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"provider-panel flex-grow\\\",\\\"Provider\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"provider\\\"]],\\\"error\\\",\\\"\\\"],null],[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"providerOptions\\\"]],false,[23,[\\\"driverHealthChangeSet\\\",\\\"provider\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-lg-4 col-md-12\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"physical-panel\\\",\\\"Physical\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Physical Type\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"driverPhysicalTypeName\\\"]],\\\"error\\\",\\\"\\\"],null],[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"driverPhysicalTypeOptions\\\"]],false,[23,[\\\"driverHealthChangeSet\\\",\\\"driverPhysicalTypeName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhysicalSelectChange\\\",\\\"driverHealthChangeSet.driverPhysicalTypeName\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Previous Physical\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"prevPhysicalDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"prevPhysicalDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"prevPhysicalDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Current Physical\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"lastPhysicalDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"lastPhysicalDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"lastPhysicalDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Next Physical\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"nextPhysicalDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"nextPhysicalDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"nextPhysicalDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Corrective Lenses\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"correctiveLenses\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"correctiveLenses\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-lg-4 col-md-12\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"diabetes-panel\\\",\\\"Diabetes\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Diabetes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"diabetes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"diabetes\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Previous Diabetes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"prevDiabetesCheckDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableDiabetes\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"prevDiabetesCheckDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"prevDiabetesCheckDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Current Diabetes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"lastDiabetesCheckDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableDiabetes\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"lastDiabetesCheckDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"lastDiabetesCheckDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Next Diabetes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"nextDiabetesCheckDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableDiabetes\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"nextDiabetesCheckDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"nextDiabetesCheckDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-lg-4 col-md-12\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"blood-pressure-panel \\\",\\\"Blood Pressure\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"High BP\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"highBloodPressure\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"highBloodPressure\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Blood Pressure\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"###/###\\\",\\\"999/99[9]\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"bloodPressure\\\"]],[23,[\\\"disableHighBloodPressure\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputMaskValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"bloodPressure\\\",true],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Previous Blood Pressure\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"prevBloodPressureDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableHighBloodPressure\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"prevBloodPressureDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"prevBloodPressureDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Current Blood Pressure\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"lastBPDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableHighBloodPressure\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"lastBPDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"lastBPDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Next Blood Pressure\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"nextBPDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableHighBloodPressure\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"nextBPDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"nextBPDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"other-panel\\\",\\\"Other\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Other\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[23,[\\\"driverHealthChangeSet\\\",\\\"otherHealthCheck\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"25\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"otherHealthCheck\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[23,[\\\"disableOtherPanel\\\"]],[23,[\\\"driverHealthChangeSet\\\",\\\"otherHealthCheckNotes\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"255\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"otherHealthCheckNotes\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Previous\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"prevOtherHealthCheckDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableOtherPanel\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"prevOtherHealthCheckDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"prevOtherHealthCheckDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Current\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"lastOtherHealthCheckDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableOtherPanel\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"lastOtherHealthCheckDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"lastOtherHealthCheckDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Next\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"disabled\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverHealthChangeSet\\\",\\\"error\\\",\\\"nextOtherHealthCheckDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[23,[\\\"disableOtherPanel\\\"]],false,\\\"m/d/Y\\\",[23,[\\\"driverHealthChangeSet\\\",\\\"nextOtherHealthCheckDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverHealthChangeSet\\\"]],\\\"nextOtherHealthCheckDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityHealthTableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/health/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/config/environment\", \"adept-iq/config/placeholders\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/validation\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _lodash, _environment, _placeholders, _validation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_LOG_TYPE_MAP = {\n    addDriverLog: true,\n    editDriverLog: true,\n    deleteDriverLog: true\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-log-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    activityLogtableRef: null,\n    disableForm: true,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedDriverLog: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    isNewLog: Ember.computed.readOnly('editAPI.newBtn'),\n    logQueryParams: null,\n    providerOptions: Ember.computed('', function () {\n      return this.get('store').peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider');\n      });\n    }),\n    driverLogChangeSet: Ember.computed('selectedDriverLog', function () {\n      const selectedDriverLog = (0, _unwrapProxy.unwrapProxy)(this.get('selectedDriverLog'));\n      return this.setDefaultProperties(selectedDriverLog);\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n      this.set('logQueryParams', {\n        filter: `eq(driverId,${driver.get('id')})`\n      });\n      this.get('refreshTask').perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const tableRef = this.get('tableRef'); // ember concurrency tasks\n\n      const onDeleteRecord = this.get('onDeleteRecord');\n      const onSaveRecord = this.get('onSaveRecord');\n      const onValidateAction = this.get('validateDriverLog'); // normal functions\n\n      const onUndoRecord = this.get('onUndoRecord').bind(this);\n      const onNewRecord = this.get('onNewRecord').bind(this);\n      const onEditRecord = this.get('onEditRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRecord,\n          newAction: onNewRecord,\n          deleteAction: onDeleteRecord,\n          editAction: onEditRecord,\n          undoAction: onUndoRecord,\n          selectedDriverBelongsTableRef: tableRef,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_LOG_TYPE_MAP[event.get('actionType')];\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const editAPI = this.get('editAPI');\n      const isNewLog = this.get('isNewLog');\n      const createDate = isNewLog ? new Date() : null;\n      let pendingDriverLogRecord = this.get('pendingDriverLogRecord');\n\n      if (record) {\n        pendingDriverLogRecord = record;\n        this.resetForm();\n      } else if (!pendingDriverLogRecord) {\n        pendingDriverLogRecord = store.createRecord('driver-log');\n        this.set('pendingDriverLogRecord', pendingDriverLogRecord);\n      }\n\n      if (pendingDriverLogRecord.get('isNew')) {\n        pendingDriverLogRecord.setProperties({\n          description: '',\n          provider: '',\n          driver: editAPI.selectedRecord,\n          createDate\n        });\n      }\n\n      return new _emberChangeset.default(pendingDriverLogRecord, (0, _emberChangesetValidations.default)(_validation.DRIVER_LOG_VALIDATION), _validation.DRIVER_LOG_VALIDATION);\n    },\n\n    hasPendingChanges: Ember.computed('driverLogChangeSet.changes.length', function () {\n      const driverLogChangeSet = this.get('driverLogChangeSet');\n      const changes = driverLogChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const driverLogChangeSet = this.get('driverLogChangeSet');\n\n      if (driverLogChangeSet.get('isNew')) {\n        const pendingChanges = this.get('driverLogChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? fields.every(field => field.includes('createDate')) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverLog = this.get('selectedDriverLog');\n\n      if (selectedDriverLog) {\n        if (!selectedDriverLog.get('isNew') && !selectedDriverLog.get('isDeleted')) {\n          yield selectedDriverLog.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityLogtableRef = this.get('activityLogtableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityLogtableRef) Ember.run.scheduleOnce('afterRender', activityLogtableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validateDriverLog: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverLogChangeSet = this.get('driverLogChangeSet');\n      yield driverLogChangeSet.validate();\n      const errors = driverLogChangeSet.errors;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n    onSaveRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const driverLogChangeSet = this.get('driverLogChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverLog = yield this.validateDriverLog.perform();\n\n      if (isValidDriverLog) {\n        try {\n          yield driverLogChangeSet.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingDriverLogRecord', null);\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            });\n          }, 1000);\n          return driverLogChangeSet;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n    onDeleteLogRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverLog = this.get('selectedDriverLog');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedDriverLog.destroyRecord();\n        notifications.success('Record successfully deleted');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          });\n        }, 1000);\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedDriverLog = this.get('selectedDriverLog');\n      const tooltip = this.get('tooltip');\n      if (!selectedDriverLog) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteLogRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onUndoRecord() {\n      const driverLogChangeSet = this.get('driverLogChangeSet');\n\n      if (driverLogChangeSet) {\n        driverLogChangeSet.rollback();\n      }\n\n      if (Ember.isEmpty(driverLogChangeSet.get('id'))) {\n        driverLogChangeSet.set('createDate', new Date());\n      }\n    },\n\n    onNewRecord() {\n      const selectedRow = this.get('selectedRow');\n      const editAPI = this.get('editAPI');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      const driverLogChangeSet = this.get('driverLogChangeSet');\n      driverLogChangeSet.set('createDate', new Date());\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onEditRecord() {\n      const selectedRow = this.get('selectedRow');\n      const editAPI = this.get('editAPI');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveRecord() {\n        return this.onSaveRecord.perform();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"N4iXxsOL\",\n    \"block\": \"{\\\"symbols\\\":[\\\"provider\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-log\\\",null,[[\\\"hasPendingChanges\\\",\\\"saveRecord\\\",\\\"validateRecord\\\",\\\"tableRef\\\",\\\"queryParams\\\"],[[23,[\\\"hasPendingChanges\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRecord\\\"],null],[23,[\\\"validateDriverLog\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"logQueryParams\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"provider-panel\\\",\\\"Provider\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row col-12\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3 text-right\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"providerOptions\\\"]],\\\"name\\\",true,[23,[\\\"disableForm\\\"]],[23,[\\\"driverLogChangeSet\\\",\\\"provider\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverLogChangeSet\\\",\\\"provider\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col ml-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"log-panel\\\",\\\"Log\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row col-12\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 text-right\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Create Date\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"value\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"format\\\",\\\"onChange\\\",\\\"showCaret\\\"],[[23,[\\\"driverLogChangeSet\\\",\\\"createDate\\\"]],[23,[\\\"disableForm\\\"]],\\\"MM/DD/YYYY\\\",[23,[\\\"dateTimeFormat\\\",\\\"dateFlatPickr\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverLogChangeSet\\\",\\\"createDate\\\"]]],null]],null],false]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-text-area\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row col-12\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 text-right\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-8\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"class\\\",\\\"maxLength\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"driverLogChangeSet\\\",\\\"description\\\"]],[27,\\\"if\\\",[[23,[\\\"driverLogChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],\\\"255\\\",[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"driverLogChangeSet\\\",\\\"description\\\"]]],null]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityLogtableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/log/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.DRIVER_LOG_VALIDATION = void 0;\n  const DRIVER_LOG_VALIDATION = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.DRIVER_LOG_VALIDATION = DRIVER_LOG_VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/validation\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _moment, _unwrapProxy, _lodash, _validation, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_PROVIDER_TYPE_MAP = {\n    addDriverProvider: true,\n    editDriverProvider: true,\n    deleteDriverProvider: true\n  };\n  const PROVIDER_FIELDS = ['classroomTrainingDate', 'refresherTrainingDate', 'sensitivityTrainingDate', 'pointsReductionTraining', 'firstAidTrainingDate', 'employmentStartDate', 'employmentEndDate'];\n  const ACTIVE_STATUS = 'active';\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-provider-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tableRef: null,\n    activityProviderTableRef: null,\n    providerNotesTableRef: null,\n    disableForm: true,\n    disableNoteForm: true,\n    disableProviderNoteAddBtn: false,\n    // placeholders\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    NOTES_PLACEHOLDER: _placeholders.NOTES_PLACEHOLDER,\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    // passed into view\n    editAPI: null,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedProvider: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    selectedProviderNote: Ember.computed.readOnly('providerNotesTableRef.checkedRows.firstObject'),\n    selectedRowNote: Ember.computed.alias('providerNotesTableRef.table.selectedRows.firstObject'),\n    isDriverProviderNew: Ember.computed.readOnly('driverProviderChangeSet.isNew'),\n    isNewProvider: Ember.computed.readOnly('editAPI.newBtn'),\n    noNotes: Ember.computed('selectedRowNote', function () {\n      const notes = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRowNote'));\n      if (notes) return false;\n      return true;\n    }),\n    isnewprovidernewnotes: Ember.computed('driverProviderChangeSet.data', function () {\n      const driverProvider = this.get('driverProviderChangeSet.data');\n      if (driverProvider && driverProvider.id) return false;\n      return true;\n    }),\n    isEdited: false,\n    isNewProviderNote: false,\n    newDriverProviderNotes: null,\n    deletedDriverProviderNotes: null,\n\n    async init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      this.set('providerQueryParams', {\n        filter: `eq(driverId,${driver.get('id')})`\n      });\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.refreshProviderNoteTable();\n        }, 1000);\n      });\n      this.get('setupDropDowns').perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onSaveDriverRecord = this.get('onSaveDriverProviderRecord');\n      const tableRef = this.get('tableRef');\n      const onDeleteDriverProviderRecord = this.get('onDeleteDriverProviderRecord');\n      const onValidateAction = this.get('validateDriverProvider'); // normal functions\n\n      const onUndoDriverRecordFun = this.get('onUndoDriverRecord').bind(this);\n      const onNewDriverProviderRecord = this.get('onNewDriverProviderRecord').bind(this);\n      const onEditDriverProviderRecord = this.get('onEditDriverProviderRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverRecord,\n          newAction: onNewDriverProviderRecord,\n          deleteAction: onDeleteDriverProviderRecord,\n          editAction: onEditDriverProviderRecord,\n          undoAction: onUndoDriverRecordFun,\n          selectedDriverBelongsTableRef: tableRef,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedProvider = this.get('selectedProvider');\n\n      if (selectedProvider) {\n        if (!selectedProvider.get('isNew') && !selectedProvider.get('isDeleted')) {\n          yield selectedProvider.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityProviderTableRef = this.get('activityProviderTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityProviderTableRef) Ember.run.scheduleOnce('afterRender', activityProviderTableRef, 'refreshData');\n    }),\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_PROVIDER_TYPE_MAP[event.get('actionType')];\n    },\n\n    driverProviderChangeSet: Ember.computed('selectedProvider', function () {\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('selectedProvider'));\n      const driverProviderChangeSet = this.setDefaultProperties(provider);\n      this.refreshProviderNoteTable();\n      return driverProviderChangeSet;\n    }),\n    hasOverallPendingChanges: Ember.computed('driverProviderNoteChangeSet.changes.length', 'driverProviderChangeSet.changes.length', 'newDriverProviderNotes.[]', function () {\n      const driverProviderChangeSet = this.get('driverProviderChangeSet');\n      const providerChanges = driverProviderChangeSet.get('changes') || [];\n      const noteChanges = this.get('driverProviderNoteChanges');\n      const newDriverProviderNotes = this.get('newDriverProviderNotes');\n      return noteChanges + providerChanges.length + newDriverProviderNotes.length;\n    }),\n    driverProviderNoteChanges: Ember.computed('driverProviderNoteChangeSet.changes.length', 'disableNoteForm', function () {\n      const driverProviderNoteChangeSet = this.get('driverProviderNoteChangeSet');\n      const noteChanges = driverProviderNoteChangeSet.get('changes') || [];\n      const disableNoteForm = this.get('disableNoteForm');\n      return !disableNoteForm && noteChanges.length;\n    }),\n\n    hasChanges() {\n      const driverProviderChangeSet = this.get('driverProviderChangeSet');\n\n      if (driverProviderChangeSet.get('isNew')) {\n        const pendingChanges = this.get('driverProviderChangeSet');\n        const noteChanges = this.get('driverProviderNoteChanges');\n        const newDriverProviderNotes = this.get('newDriverProviderNotes');\n        const driverProviderNoteChangeSet = this.get('driverProviderNoteChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n\n        if (noteChanges) {\n          const noteFields = (0, _lodash.flatten)(driverProviderNoteChangeSet.changes).map(change => change.key);\n          fields.push(...noteFields);\n        } else if (newDriverProviderNotes.length > 0) {\n          fields.push('notes');\n        }\n\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => PROVIDER_FIELDS.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasOverallPendingChanges');\n      }\n\n      return !!this.get('hasOverallPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasOverallPendingChanges = this.get('hasOverallPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasOverallPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    refreshProviderNoteTable() {\n      const providerNotesTableRef = this.get('providerNotesTableRef');\n      if (providerNotesTableRef) Ember.run.scheduleOnce('afterRender', providerNotesTableRef, 'refreshData');\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const driver = this.get('selectedDriver');\n      let pendingDriverProvider = this.get('pendingDriverProvider');\n      const isNewProvider = this.get('isNewProvider');\n      const defaultDate = isNewProvider ? new Date() : null;\n\n      if (record) {\n        pendingDriverProvider = record;\n        this.resetForm();\n      } else if (!pendingDriverProvider) {\n        pendingDriverProvider = store.createRecord('driver-provider', {\n          driver\n        });\n        this.set('pendingDriverProvider', pendingDriverProvider);\n      }\n\n      if (pendingDriverProvider.get('isNew')) {\n        pendingDriverProvider.setProperties({\n          provider: null,\n          employStatusName: null,\n          positionName: null,\n          classroomTrainingDate: defaultDate,\n          refresherTrainingDate: defaultDate,\n          sensitivityTrainingDate: defaultDate,\n          pointsReductionTraining: defaultDate,\n          firstAidTrainingDate: defaultDate,\n          employmentStartDate: defaultDate,\n          employmentEndDate: defaultDate\n        });\n        this.set('newDriverProviderNotes', []);\n        this.set('deletedDriverProviderNotes', []);\n      }\n\n      this.set('showValidations', false);\n      this.set('providerNoteQueryParams', {\n        filter: `eq(driverProviderId,${pendingDriverProvider.get('id')})`\n      });\n      return new _emberChangeset.default(pendingDriverProvider, (0, _emberChangesetValidations.default)(_validation.DRIVER_PROVIDER_VALIDATION), _validation.DRIVER_PROVIDER_VALIDATION);\n    },\n\n    driverProviderNoteChangeSet: Ember.computed('selectedProviderNote', 'isNewProviderNote', function () {\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('selectedProviderNote'));\n      return this.setProviderNoteDefaultProperties(provider);\n    }),\n\n    setProviderNoteDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      let pendingDriverProviderNote = this.get('pendingDriverProviderNote');\n\n      if (record) {\n        pendingDriverProviderNote = record;\n      } else if (!pendingDriverProviderNote) {\n        pendingDriverProviderNote = store.createRecord('driver-provider-note');\n        this.set('pendingDriverProviderNote', pendingDriverProviderNote);\n      }\n\n      if (pendingDriverProviderNote.get('isNew')) {\n        pendingDriverProviderNote.setProperties();\n      }\n\n      this.set('showValidations', false);\n      return new _emberChangeset.default(pendingDriverProviderNote, (0, _emberChangesetValidations.default)(_validation.DRIVER_PROVIDER_NOTES_VALIDATION), _validation.DRIVER_PROVIDER_NOTES_VALIDATION);\n    },\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    setupDropDowns: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const providerOptions = this.get('store').peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS;\n      });\n      this.set('providerOptions', providerOptions);\n      const driverPositionOptions = yield store.findAll('driver-position-name');\n      this.set('driverPositionOptions', driverPositionOptions);\n      const driverStatusOptions = yield store.findAll('employment-status-name');\n      this.set('driverStatusOptions', driverStatusOptions);\n      const driverTerminationOptions = yield store.findAll('termination-reason-name');\n      this.set('driverTerminationOptions', driverTerminationOptions);\n    }),\n    // Driver Provider CRUD OPERATIONS\n    onSaveDriverProviderRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const selectedDriver = this.get('selectedDriver');\n      const pendingDriverProvider = this.get('driverProviderChangeSet');\n      const pendingDriverProviderNote = this.get('driverProviderNoteChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverProvider = yield this.validateDriverProvider.perform();\n\n      if (isValidDriverProvider) {\n        pendingDriverProvider.set('driver', selectedDriver);\n\n        try {\n          yield pendingDriverProvider.save();\n          const driverProvider = this.get('driverProviderChangeSet.data');\n\n          if (driverProvider && driverProvider.id) {\n            const newDriverProviderNotes = this.get('newDriverProviderNotes');\n            const deletedDriverProviderNotes = this.get('deletedDriverProviderNotes');\n            newDriverProviderNotes.forEach(driverProviderNote => {\n              driverProviderNote.set('driverProvider', driverProvider);\n              driverProviderNote.save();\n            });\n            deletedDriverProviderNotes.forEach(driverProviderNote => {\n              driverProviderNote.save();\n            });\n          }\n\n          notifications.success('Record successfully saved.');\n          this.set('pendingDriverProvider', null);\n          this.resetPendingDriverProviderNote();\n          this.set('driverProviderNoteChangeSet.notes', null);\n          this.set('disableNoteForm', true);\n          this.set('newDriverProviderNotes', []);\n          this.set('deletedDriverProviderNotes', []);\n\n          if (pendingDriverProviderNote) {\n            pendingDriverProviderNote.rollback();\n          }\n\n          Ember.run.later(() => {\n            this.refreshProviderNoteTable();\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            });\n          }, 1000);\n          return pendingDriverProvider;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onUndoDriverProviderRecord() {\n      const driverProviderChangeSet = this.get('driverProviderChangeSet');\n\n      if (driverProviderChangeSet) {\n        driverProviderChangeSet.rollback();\n      }\n    },\n\n    onUndoDriverRecord() {\n      this.onUndoDriverProviderRecord();\n      this.onUndoDriverProviderNoteRecord();\n    },\n\n    onNewDriverProviderRecord() {\n      const selectedRow = this.get('selectedRow');\n      const defaultDate = new Date();\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.get('editAPI').buttonSettings(true, true, true, false, false); //False to enable the button, TRUE to disable\n\n      const driverLogChangeSet = this.get('driverProviderChangeSet');\n      driverLogChangeSet.setProperties({\n        classroomTrainingDate: defaultDate,\n        refresherTrainingDate: defaultDate,\n        sensitivityTrainingDate: defaultDate,\n        pointsReductionTraining: defaultDate,\n        firstAidTrainingDate: defaultDate,\n        employmentStartDate: defaultDate,\n        employmentEndDate: defaultDate\n      });\n      this.set('disableForm', false);\n      this.set('disableProviderNoteAddBtn', false);\n    },\n\n    onEditDriverProviderRecord() {\n      const selectedRow = this.get('selectedRow');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.set('disableForm', false);\n      this.set('disableProviderNoteAddBtn', false);\n      this.get('editAPI').buttonSettings(true, true, true, false, false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedProvider = this.get('selectedProvider');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedProvider.destroyRecord();\n        notifications.success('Record successfully deleted');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          });\n        }, 1000);\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteDriverProviderRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedProvider = this.get('selectedProvider');\n      const tooltip = this.get('tooltip');\n      if (!selectedProvider) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n    validateDriverProvider: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverProviderChangeSet = this.get('driverProviderChangeSet');\n      yield driverProviderChangeSet.validate();\n      const {\n        incidentDate,\n        licenseMonitorDate,\n        convictionDate,\n        convictionNotificationDate\n      } = driverProviderChangeSet.getProperties('incidentDate', 'licenseMonitorDate', 'convictionDate', 'convictionNotificationDate');\n\n      if (licenseMonitorDate && incidentDate) {\n        if ((0, _moment.default)(licenseMonitorDate).isSameOrBefore(incidentDate)) {\n          driverProviderChangeSet.addError('licenseMonitorDate', {\n            value: licenseMonitorDate,\n            validation: 'License Monitor Date must be on or after the Incident Date.'\n          });\n        }\n      }\n\n      if (convictionDate && incidentDate) {\n        if ((0, _moment.default)(convictionDate).isSameOrBefore(incidentDate)) {\n          driverProviderChangeSet.addError('convictionDate', {\n            value: convictionDate,\n            validation: 'The Conviction Date must be on or after the Incident Date.'\n          });\n        }\n      }\n\n      if (convictionNotificationDate && convictionDate) {\n        if ((0, _moment.default)(convictionNotificationDate).isSameOrBefore(convictionDate)) {\n          driverProviderChangeSet.addError('convictionNotificationDate', {\n            value: convictionNotificationDate,\n            validation: 'The Conviction Notification Date must be on or after the Conviction Date. '\n          });\n        }\n      }\n\n      const driverProviderValid = driverProviderChangeSet.errors;\n      const errors = driverProviderValid;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    // Driver Provider Note Operations\n    async onSaveProviderNotesRecord() {\n      const driverProviderNoteChangeSet = this.get('driverProviderNoteChangeSet');\n      const newDriverProviderNotes = this.get('newDriverProviderNotes');\n      const driverProviderNote = driverProviderNoteChangeSet.get('data');\n      const isValidDriverProviderNote = await this.validateDriverProviderNote.perform();\n      if (!isValidDriverProviderNote) return;\n      driverProviderNoteChangeSet.execute();\n      if (!newDriverProviderNotes.includes(driverProviderNote)) newDriverProviderNotes.pushObject(driverProviderNote);\n      this.set('isEdited', false);\n      this.set('isNewProviderNote', false);\n      this.resetPendingDriverProviderNote();\n      this.set('providerNotesTableRef.config.selectFirstRow', true);\n      this.set('disableNoteForm', true);\n      this.set('disableProviderNoteAddBtn', false);\n      this.refreshProviderNoteTable();\n    },\n\n    onUndoDriverProviderNoteRecord() {\n      const driverProviderNoteChangeSet = this.get('driverProviderNoteChangeSet');\n      const newDriverProviderNotes = this.get('newDriverProviderNotes');\n      const deletedDriverProviderNotes = this.get('deletedDriverProviderNotes');\n\n      if (driverProviderNoteChangeSet) {\n        driverProviderNoteChangeSet.rollback();\n      }\n\n      if (newDriverProviderNotes) {\n        const filterDriverProviderNotes = newDriverProviderNotes.filter(driverProvider => Ember.isPresent(driverProvider.get('id')));\n        this.set('newDriverProviderNotes', filterDriverProviderNotes);\n        deletedDriverProviderNotes.forEach(driverProvider => {\n          driverProvider.rollbackAttributes();\n        });\n        this.set('deletedDriverProviderNotes', []);\n        this.refreshProviderNoteTable();\n      }\n    },\n\n    onNewDriverProviderNoteRecord() {\n      const selectedRow = this.get('selectedRowNote');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('providerNotesTableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableNoteForm', false);\n      this.set('disableProviderNoteAddBtn', true);\n      this.set('isNewProviderNote', true);\n      this.resetPendingDriverProviderNote();\n      this.get('editAPI').buttonSettings(true, true, true, false, false); //False to enable the button, TRUE to disable\n    },\n\n    onEditDriverProviderNoteRecord() {\n      const selectedRow = this.get('selectedRowNote');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.set('isEdited', true);\n      this.set('disableNoteForm', false);\n      this.get('editAPI').buttonSettings(true, true, true, false, false);\n    },\n\n    onDeleteDriverProviderNoteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedProviderNote = this.get('selectedProviderNote');\n      const notifications = this.get('notifications');\n      const tooltip = this.get('tooltip');\n      const newDriverProviderNotes = this.get('newDriverProviderNotes');\n      const deletedDriverProviderNotes = this.get('deletedDriverProviderNotes');\n      const refreshProviderNoteTable = this.get('refreshProviderNoteTable').bind(this);\n      if (!selectedProviderNote) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n\n        async primaryAction() {\n          try {\n            await selectedProviderNote.deleteRecord();\n            const deletedNote = newDriverProviderNotes.find(note => note.get('notes') === selectedProviderNote.get('notes'));\n            newDriverProviderNotes.removeObject(deletedNote);\n            if (selectedProviderNote.get('id')) deletedDriverProviderNotes.pushObject(selectedProviderNote);\n            notifications.success('Record successfully deleted');\n            refreshProviderNoteTable();\n          } catch (e) {\n            notifications.warning('Record failed to delete');\n          }\n\n          return tooltip.reset();\n        }\n\n      });\n    }),\n\n    resetPendingDriverProviderNote() {\n      this.set('pendingDriverProviderNote', null);\n    },\n\n    validateDriverProviderNote: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverProviderNoteChangeSet = this.get('driverProviderNoteChangeSet');\n      yield driverProviderNoteChangeSet.validate();\n      const driverProviderValid = driverProviderNoteChangeSet.errors;\n      const errors = driverProviderValid;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n    actions: {\n      onSaveProviderRecord() {\n        return this.onSaveDriverProviderRecord.perform();\n      },\n\n      onPowerSelectChange(valuePath, selected) {\n        this.set(valuePath, selected);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        const isoDate = (0, _moment.default)(value).toISOString();\n        record.set(valuePath, isoDate);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"BoHAy0U2\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-providers\\\",null,[[\\\"queryParams\\\",\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"providerQueryParams\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveProviderRecord\\\"],null],[23,[\\\"hasOverallPendingChanges\\\"]],[23,[\\\"validateDriverProvider\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"provider-panel flex-grow\\\",\\\"Provider\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Site ID\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"extra\\\"],[[23,[\\\"driverProviderChangeSet\\\",\\\"siteId\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"siteId\\\"],null],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\",\\\"removeSpace\\\"],[\\\"12\\\",true,true]]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"provider\\\"]],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"providerOptions\\\"]],false,[23,[\\\"driverProviderChangeSet\\\",\\\"provider\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"driverProviderChangeSet.provider\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Position\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"driverPositionOptions\\\"]],false,[23,[\\\"driverProviderChangeSet\\\",\\\"driverPositionName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"driverProviderChangeSet.driverPositionName\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,3,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver Employment Status\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"driverStatusOptions\\\"]],false,[23,[\\\"driverProviderChangeSet\\\",\\\"employmentStatusName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"driverProviderChangeSet.employmentStatusName\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"employmentStartDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"employmentStartDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"employmentStartDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"employmentEndDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"employmentStartDate\\\"]],[23,[\\\"driverProviderChangeSet\\\",\\\"employmentEndDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"employmentEndDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Termination Reason\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"driverTerminationOptions\\\"]],false,[23,[\\\"driverProviderChangeSet\\\",\\\"terminationReasonName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"driverProviderChangeSet.terminationReasonName\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col ml-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"training-panel flex-grow\\\",\\\"Training\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Classroom Training Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"classroomTrainingDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"classroomTrainingDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"classroomTrainingDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Refresher Training Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"refresherTrainingDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"refresherTrainingDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"refresherTrainingDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Points Reduction Training Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"pointsReductionTraining\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"pointsReductionTraining\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"pointsReductionTraining\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Sensitivity Training Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"sensitivityTrainingDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"sensitivityTrainingDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"sensitivityTrainingDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"First Aid Training Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverProviderChangeSet\\\",\\\"error\\\",\\\"firstAidTrainingDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverProviderChangeSet\\\",\\\"firstAidTrainingDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverProviderChangeSet\\\"]],\\\"firstAidTrainingDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"disableHeaderActions\\\",\\\"onDeleteButtonClick\\\",\\\"onAddButtonClick\\\",\\\"onSaveButtonClick\\\",\\\"onEditButtonClick\\\",\\\"disableEditBtn\\\",\\\"disableDeleteBtn\\\",\\\"disableSaveBtn\\\",\\\"disableAddBtn\\\",\\\"isCollapsible\\\"],[\\\"notes-panel\\\",\\\"Notes\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onDeleteDriverProviderNoteRecord\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onNewDriverProviderNoteRecord\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onSaveProviderNotesRecord\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onEditDriverProviderNoteRecord\\\"]]],null],[23,[\\\"noNotes\\\"]],[23,[\\\"noNotes\\\"]],[23,[\\\"disableNoteForm\\\"]],[23,[\\\"disableProviderNoteAddBtn\\\"]],true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"maxLength\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"NOTES_PLACEHOLDER\\\"]],[23,[\\\"driverProviderNoteChangeSet\\\",\\\"notes\\\"]],\\\"255\\\",[23,[\\\"disableNoteForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverProviderNoteChangeSet\\\"]],\\\"notes\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-provider-notes\\\",null,[[\\\"queryParams\\\",\\\"tableRef\\\",\\\"hasPendingChanges\\\",\\\"saveRecord\\\",\\\"provider\\\",\\\"newDriverProviderNotes\\\",\\\"isTaskRunning\\\"],[[23,[\\\"providerNoteQueryParams\\\"]],[23,[\\\"providerNotesTableRef\\\"]],[23,[\\\"driverProviderNoteChanges\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onSaveProviderNotesRecord\\\"]]],null],[23,[\\\"driverProviderChangeSet\\\",\\\"data\\\"]],[23,[\\\"newDriverProviderNotes\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityProviderTableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/provider/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.DRIVER_PROVIDER_VALIDATION = _exports.DRIVER_PROVIDER_NOTES_VALIDATION = void 0;\n  const DRIVER_PROVIDER_VALIDATION = {\n    'provider': [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Provider',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.DRIVER_PROVIDER_VALIDATION = DRIVER_PROVIDER_VALIDATION;\n  const DRIVER_PROVIDER_NOTES_VALIDATION = {\n    'notes': [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Notes',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.DRIVER_PROVIDER_NOTES_VALIDATION = DRIVER_PROVIDER_NOTES_VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/validation\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/driver-violation-search-config\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _moment, _unwrapProxy, _lodash, _validation, _driverViolationSearchConfig, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_SUSPENSION_TYPE_MAP = {\n    addDriverSuspension: true,\n    editDriverSuspension: true,\n    deleteDriverSuspension: true\n  };\n  const SUSPENSION_FIELDS = ['startDate', 'endDate'];\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-suspension-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tableRef: null,\n    activitySuspensionTableRef: null,\n    disableForm: true,\n    // placeholders\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    NOTES_PLACEHOLDER: _placeholders.NOTES_PLACEHOLDER,\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    // passed into view\n    editAPI: null,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedSuspension: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    suspensionQueryParams: null,\n    endDate: Ember.computed('driverSuspensionChangeSet.{startDate,endDate}', function () {\n      const driverSuspensionChangeSet = this.get('driverSuspensionChangeSet');\n      const startDate = (0, _moment.default)(driverSuspensionChangeSet.get('startDate')).format('YYYY-MM-DD');\n      const endDate = (0, _moment.default)(driverSuspensionChangeSet.get('endDate')).format('YYYY-MM-DD');\n      return (0, _moment.default)(startDate).isAfter(endDate) ? null : driverSuspensionChangeSet.get('endDate');\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n      this.set('suspensionQueryParams', {\n        filter: `eq(driverId,${driver.get('id')})`\n      });\n      this.get('refreshTask').perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const tableRef = this.get('tableRef'); // ember concurrency tasks\n\n      const onSaveDriverRecord = this.get('onSaveDriverSuspensionRecord');\n      const onDeleteDriverSuspensionRecord = this.get('onDeleteDriverSuspensionRecord');\n      const onValidateAction = this.get('validateDriverSuspension'); // normal functions\n\n      const onUndoDriverRecord = this.get('onUndoDriverSuspensionRecord').bind(this);\n      const onNewDriverSuspensionRecord = this.get('onNewDriverSuspensionRecord').bind(this);\n      const onEditDriverSuspensionRecord = this.get('onEditDriverSuspensionRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverRecord,\n          newAction: onNewDriverSuspensionRecord,\n          deleteAction: onDeleteDriverSuspensionRecord,\n          editAction: onEditDriverSuspensionRecord,\n          selectedDriverBelongsTableRef: tableRef,\n          hasChanges,\n          undoAction: onUndoDriverRecord,\n          onValidateAction,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_SUSPENSION_TYPE_MAP[event.get('actionType')];\n    },\n\n    driverSuspensionChangeSet: Ember.computed('selectedSuspension', function () {\n      const suspension = (0, _unwrapProxy.unwrapProxy)(this.get('selectedSuspension'));\n      return this.setDefaultProperties(suspension);\n    }),\n    hasPendingChanges: Ember.computed('driverSuspensionChangeSet.changes.length', function () {\n      const driverSuspensionChangeSet = this.get('driverSuspensionChangeSet');\n      const changes = driverSuspensionChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const driverSuspensionChangeSet = this.get('driverSuspensionChangeSet');\n\n      if (driverSuspensionChangeSet.get('isNew')) {\n        const pendingChanges = this.get('driverSuspensionChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => SUSPENSION_FIELDS.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    driverViolationIncidentDate: Ember.computed('driverSuspensionChangeSet.driverViolation.incidentDate', function () {\n      const incidentDate = this.get('driverSuspensionChangeSet.driverViolation.incidentDate');\n      return incidentDate ? incidentDate : null;\n    }),\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const defaultDate = (0, _moment.default)(new Date());\n      let pendingDriverSuspensionRecord = this.get('pendingDriverSuspensionRecord');\n\n      if (record) {\n        pendingDriverSuspensionRecord = record;\n        this.resetForm();\n      } else if (!pendingDriverSuspensionRecord) {\n        pendingDriverSuspensionRecord = store.createRecord('driver-suspension');\n        this.set('pendingDriverSuspensionRecord', pendingDriverSuspensionRecord);\n      }\n\n      if (pendingDriverSuspensionRecord.get('isNew')) {\n        pendingDriverSuspensionRecord.setProperties({\n          startDate: defaultDate.startOf('day').toDate(),\n          endDate: defaultDate.endOf('day').toDate(),\n          description: null,\n          driverViolation: null,\n          notes: null\n        });\n      }\n\n      this.set('showValidations', false);\n      this.setMinDate(pendingDriverSuspensionRecord.get('startDate'));\n      return new _emberChangeset.default(pendingDriverSuspensionRecord, (0, _emberChangesetValidations.default)(_validation.DRIVER_SUSPENSION_VALIDATION), _validation.DRIVER_SUSPENSION_VALIDATION);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedSuspension = this.get('selectedSuspension');\n\n      if (selectedSuspension) {\n        if (!selectedSuspension.get('isNew') && !selectedSuspension.get('isDeleted')) {\n          yield selectedSuspension.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activitySuspensionTableRef = this.get('activitySuspensionTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activitySuspensionTableRef) Ember.run.scheduleOnce('afterRender', activitySuspensionTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    onSaveDriverSuspensionRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const selectedDriver = this.get('selectedDriver');\n      const pendingDriverSuspensionRecord = this.get('driverSuspensionChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverSuspension = yield this.validateDriverSuspension.perform();\n\n      if (isValidDriverSuspension) {\n        pendingDriverSuspensionRecord.set('driver', selectedDriver);\n\n        try {\n          yield pendingDriverSuspensionRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingDriverSuspensionRecord', null);\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            });\n          }, 1000);\n          return pendingDriverSuspensionRecord;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          const driverSuspensionRecord = this.get('pendingDriverSuspensionRecord');\n          const editDriverSuspensionRecord = this.get('selectedSuspension');\n          selectedDriver.rollbackAttributes();\n          if (editDriverSuspensionRecord) editDriverSuspensionRecord.rollbackAttributes();\n          driverSuspensionRecord.rollbackAttributes();\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onUndoDriverSuspensionRecord() {\n      const driverSuspensionChangeSet = this.get('driverSuspensionChangeSet');\n      const editDriverSuspensionRecord = this.get('selectedSuspension');\n\n      if (driverSuspensionChangeSet) {\n        driverSuspensionChangeSet.rollback();\n      }\n\n      if (editDriverSuspensionRecord) {\n        editDriverSuspensionRecord.rollbackAttributes();\n      }\n\n      this.setMinDate(driverSuspensionChangeSet.get('startDate'));\n    },\n\n    onNewDriverSuspensionRecord() {\n      const selectedRow = this.get('selectedRow');\n      const defaultDate = (0, _moment.default)().startOf('day').toDate();\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      this.setMinDate(defaultDate);\n      this.get('editAPI').buttonSettings(true, true, true, false, false); //False to enable the button, TRUE to disable\n    },\n\n    onEditDriverSuspensionRecord() {\n      const selectedRow = this.get('selectedRow');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.get('editAPI').buttonSettings(true, true, true, false, false);\n      this.set('disableForm', false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedSuspension = this.get('selectedSuspension');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedSuspension.destroyRecord();\n        notifications.success('Record successfully deleted');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.resetForm();\n          });\n        }, 1000);\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteDriverSuspensionRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedSuspension = this.get('selectedSuspension');\n      const tooltip = this.get('tooltip');\n      if (!selectedSuspension) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n    validateDriverSuspension: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverSuspensionChangeSet = this.get('driverSuspensionChangeSet');\n      const driverViolation = (0, _unwrapProxy.unwrapProxy)(driverSuspensionChangeSet.get('driverViolation'));\n      yield driverSuspensionChangeSet.validate();\n      const startDate = driverSuspensionChangeSet.get('startDate');\n      const endDate = driverSuspensionChangeSet.get('endDate');\n\n      if (startDate && endDate) {\n        if ((0, _moment.default)(endDate).isBefore((0, _moment.default)(startDate))) {\n          driverSuspensionChangeSet.addError('endDate', {\n            value: endDate,\n            validation: 'End Date must be after Start Date.'\n          });\n        }\n      }\n\n      if (driverViolation) {\n        const incidentDate = (0, _moment.default)(driverViolation.get('incidentDate')).startOf('day');\n        const momentStartDate = (0, _moment.default)(startDate).startOf('day');\n\n        if ((0, _moment.default)(momentStartDate).isBefore((0, _moment.default)(incidentDate))) {\n          driverSuspensionChangeSet.addError('startDate', {\n            value: startDate,\n            validation: 'The suspension\\'s Start Date must be equal to or after the associated violation\\'s Incident Date.'\n          });\n        }\n      }\n\n      const driverSuspensionValid = driverSuspensionChangeSet.errors;\n      const errors = driverSuspensionValid;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    async onViolationChange(violation) {\n      let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'driverViolation';\n      const driverSuspensionChangeSet = this.get('driverSuspensionChangeSet');\n      driverSuspensionChangeSet.set(path, violation);\n    },\n\n    setMinDate(minDate) {\n      const endDateInstance = this.get('endDateInstance');\n\n      if (endDateInstance) {\n        endDateInstance.set('minDate', minDate);\n      }\n    },\n\n    actions: {\n      onSaveRecord() {\n        return this.onSaveDriverSuspensionRecord.perform();\n      },\n\n      onDatePickerReady(valuPath, instance) {\n        this.set(valuPath, instance);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onStartDateValueChange(record, valuePath, value) {\n        if (value) {\n          const isoDate = (0, _moment.default)(value).startOf('day').toISOString();\n          record.set(valuePath, isoDate);\n          this.setMinDate(isoDate);\n        } else {\n          record.set(valuePath, value);\n        }\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        if (value) {\n          const isoDate = (0, _moment.default)(value).startOf('day').toISOString();\n          record.set(valuePath, isoDate);\n        } else {\n          record.set(valuePath, value);\n        }\n      },\n\n      async openViolationModal() {\n        const onVehicleChange = this.get('onViolationChange').bind(this);\n        const selectedDriver = this.get('selectedDriver');\n        const driverLicense = this.get('selectedDriver.license');\n        const store = this.get('store');\n        const queryParams = {\n          filter: `eq(driverLicenseId,${driverLicense.get('id')})`\n        };\n        const driverViolations = await store.query('driver-violation', queryParams);\n        const tooltip = this.get('tooltip');\n\n        if (Ember.isPresent(driverViolations)) {\n          const searchVehicleObj = Ember.Object.create({\n            title: `Driver ${selectedDriver.get('driverId')} Violations`,\n            queryParams,\n            hasOverlay: true,\n            config: _driverViolationSearchConfig.default,\n            primaryActionText: 'Select',\n            className: 'driver-violation-search',\n            primaryAction: record => {\n              onVehicleChange(record);\n            }\n          });\n          this.set('modalAPI', searchVehicleObj);\n        } else {\n          tooltip.pushConfirmation({\n            title: `Driver ${selectedDriver.get('driverId')} Violations`,\n            tip: 'No violations currently exist for the driver.',\n            primaryActionText: 'OK',\n\n            primaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/driver-violation-search-config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-violation',\n    title: 'Driver Violations',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    queryModelData: true,\n    columns: [{\n      id: 'driverCDLNumber',\n      index: 0,\n      type: 'text',\n      label: 'Driver CDL Number',\n      valuePath: 'driverLicense.license',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'incidentDate',\n      index: 1,\n      type: 'date',\n      label: 'Incident Date',\n      valuePath: 'incidentDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 2,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'points',\n      index: 3,\n      type: 'number',\n      label: 'Points',\n      valuePath: 'points',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'convictionDate',\n      index: 4,\n      type: 'date',\n      label: 'Conviction Date',\n      valuePath: 'convictionDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'convictionNotificationDate',\n      index: 5,\n      type: 'date',\n      label: 'Conviction Notification Date',\n      valuePath: 'convictionNotificationDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'incidentNotificationDate',\n      index: 6,\n      type: 'date',\n      label: 'Incident Notification Date',\n      valuePath: 'incidentNotificationDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'vehicleId',\n      index: 7,\n      type: 'uuid',\n      label: 'Vehicle ID',\n      valuePath: 'vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'placeholder',\n      index: 8,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'vehicle.placeholder',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"WSsvMbFb\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-suspensions\\\",null,[[\\\"source\\\",\\\"tableRef\\\",\\\"hasPendingChanges\\\",\\\"saveRecord\\\",\\\"isTaskRunning\\\",\\\"validateRecord\\\",\\\"queryParams\\\"],[[23,[\\\"selectedDriver\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"hasPendingChanges\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRecord\\\"],null],[23,[\\\"isTaskRunning\\\"]],[23,[\\\"validateDriverSuspension\\\"]],[23,[\\\"suspensionQueryParams\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"suspension-panel\\\",\\\"Suspension\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverSuspensionChangeSet\\\",\\\"error\\\",\\\"startDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverSuspensionChangeSet\\\",\\\"startDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onStartDateValueChange\\\",[23,[\\\"driverSuspensionChangeSet\\\"]],\\\"startDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\",\\\"onReady\\\"],[[27,\\\"if\\\",[[23,[\\\"driverSuspensionChangeSet\\\",\\\"error\\\",\\\"endDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"endDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverSuspensionChangeSet\\\"]],\\\"endDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDatePickerReady\\\",\\\"endDateInstance\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-text-area\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"maxLength\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverSuspensionChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],\\\"20\\\",[23,[\\\"driverSuspensionChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverSuspensionChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-text-area\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"maxLength\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"NOTES_PLACEHOLDER\\\"]],[23,[\\\"driverSuspensionChangeSet\\\",\\\"notes\\\"]],\\\"500\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverSuspensionChangeSet\\\"]],\\\"notes\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col ml-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"associated-violation-panel\\\",\\\"Optional Associated Violation\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Violation\\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openViolationModal\\\",[23,[\\\"driverSuspensionChangeSet\\\"]]],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Incident Date\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"format\\\",\\\"value\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],true,true,\\\"m/d/Y\\\",[23,[\\\"driverViolationIncidentDate\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-text-area\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"showHint\\\",\\\"value\\\"],[\\\"Description\\\",true,false,[23,[\\\"driverSuspensionChangeSet\\\",\\\"driverViolation\\\",\\\"description\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activitySuspensionTableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[1,[27,\\\"search-modal\\\",null,[[\\\"modalAPI\\\"],[[23,[\\\"modalAPI\\\"]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/suspension/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.DRIVER_SUSPENSION_VALIDATION = void 0;\n  const DRIVER_SUSPENSION_VALIDATION = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required.'\n    })],\n    startDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Start Date',\n      message: '{description} is required.'\n    })],\n    endDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'End Date',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.DRIVER_SUSPENSION_VALIDATION = DRIVER_SUSPENSION_VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/validation\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/vehicle-search-config\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _moment, _unwrapProxy, _lodash, _validation, _vehicleSearchConfig, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_VIOLATION_TYPE_MAP = {\n    addDriverViolation: true,\n    editDriverViolation: true,\n    deleteDriverViolation: true\n  };\n  const extraPointsLimitOptions = {\n    min: 1,\n    max: 3,\n    isFloat: false\n  }; //since current date is set as max date, default date(today) is not displayed in the Incident and Monitor date\n\n  const CURRENT_DATE = (0, _moment.default)(new Date()).endOf('day').toDate();\n  const VIOLATION_FIELDS = ['incidentDate', 'convictionDate', 'licenseMonitorDate', 'convictionNotificationDate'];\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-violation-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tableRef: null,\n    activityViolationTableRef: null,\n    disableForm: true,\n    CURRENT_DATE,\n    // placeholders\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    NOTES_PLACEHOLDER: _placeholders.NOTES_PLACEHOLDER,\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    // passed into view\n    editAPI: null,\n    selectedDriver: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedDriverLicense: Ember.computed.readOnly('selectedDriver.license'),\n    selectedViolation: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    extraPointsLimitOptions,\n\n    async init() {\n      this._super(...arguments);\n\n      const driver = this.get('selectedDriver');\n      const driverLicense = driver.get('license');\n      this.set('activityQueryParams', {\n        driverId: `${driver.get('id')}`,\n        eventLog: true\n      });\n      this.set('queryParams', {\n        filter: `eq(driverLicenseId,${driverLicense.get('id')})`\n      });\n      this.get('refreshTask').perform();\n      await this.buildDriverSuspensionMap(driver.get('id'));\n    },\n\n    async buildDriverSuspensionMap(driverId) {\n      const driverSuspensions = await this.get('store').query('driver-suspension', {\n        filter: `eq(driverId,${driverId})`\n      });\n      const driverSuspensionMap = (0, _lodash.groupBy)(driverSuspensions.toArray(), 'driverViolationId'); //key :driverViolationId ,value:driverSuspensions\n\n      this.set('driverSuspensionMap', driverSuspensionMap);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const tableRef = this.get('tableRef'); // ember concurrency tasks\n\n      const onSaveDriverRecord = this.get('onSaveDriverViolationRecord');\n      const onDeleteDriverViolationRecord = this.get('onDeleteDriverViolationRecord');\n      const onValidateAction = this.get('validateDriverViolation'); // normal functions\n\n      const onUndoDriverRecord = this.get('onUndoDriverViolationRecord').bind(this);\n      const onNewDriverViolationRecord = this.get('onNewDriverViolationRecord').bind(this);\n      const onEditDriverViolationRecord = this.get('onEditDriverViolationRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverRecord,\n          newAction: onNewDriverViolationRecord,\n          deleteAction: onDeleteDriverViolationRecord,\n          editAction: onEditDriverViolationRecord,\n          undoAction: onUndoDriverRecord,\n          selectedDriverBelongsTableRef: tableRef,\n          hasChanges,\n          onValidateAction,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_VIOLATION_TYPE_MAP[event.get('actionType')];\n    },\n\n    driverViolationChangeSet: Ember.computed('selectedViolation', function () {\n      const Violation = (0, _unwrapProxy.unwrapProxy)(this.get('selectedViolation'));\n      return this.setDefaultProperties(Violation);\n    }),\n    hasPendingChanges: Ember.computed('driverViolationChangeSet.changes.length', function () {\n      const driverViolationChangeSet = this.get('driverViolationChangeSet');\n      const changes = driverViolationChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const driverViolationChangeSet = this.get('driverViolationChangeSet');\n\n      if (driverViolationChangeSet.get('isNew')) {\n        const pendingChanges = this.get('driverViolationChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => VIOLATION_FIELDS.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const driverLicense = this.get('selectedDriverLicense');\n      const driver = this.get('selectedDriver');\n      let pendingDriverViolation = this.get('pendingDriverViolation');\n\n      if (record) {\n        pendingDriverViolation = record;\n        this.resetForm();\n      } else if (!pendingDriverViolation) {\n        pendingDriverViolation = store.createRecord('driver-violation', {\n          driverLicense,\n          driver\n        });\n        this.set('pendingDriverViolation', pendingDriverViolation);\n      }\n\n      if (pendingDriverViolation.get('isNew')) {\n        const defaultDate = (0, _moment.default)().startOf('day').toISOString();\n        pendingDriverViolation.setProperties({\n          incidentDate: defaultDate,\n          convictionDate: defaultDate,\n          licenseMonitorDate: defaultDate,\n          convictionNotificationDate: defaultDate,\n          description: null,\n          points: null,\n          vehicle: null\n        });\n      }\n\n      this.setMinDate(pendingDriverViolation.get('incidentDate'));\n      this.set('showValidations', false);\n      return new _emberChangeset.default(pendingDriverViolation, (0, _emberChangesetValidations.default)(_validation.VALIDATION), _validation.VALIDATION);\n    },\n\n    /**\n     * This method is used to set incident date as a min date to license monitorDate\n     * and conviction Date.If we set min date in template both date pikers are not display the past saved date\n     * @param minDate\n     */\n    setMinDate(minDate) {\n      const licenseMonitorDateInstance = this.get('licenseMonitorDateInstance');\n      const convictionDateInstance = this.get('convictionDateInstance');\n\n      if (licenseMonitorDateInstance) {\n        licenseMonitorDateInstance.set('minDate', minDate);\n      }\n\n      if (convictionDateInstance) {\n        convictionDateInstance.set('minDate', minDate);\n      }\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedViolation = this.get('selectedViolation');\n\n      if (selectedViolation) {\n        if (!selectedViolation.get('isNew') && !selectedViolation.get('isDeleted')) {\n          yield selectedViolation.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityViolationTableRef = this.get('activityViolationTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityViolationTableRef) Ember.run.scheduleOnce('afterRender', activityViolationTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    onSaveDriverViolationRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const selectedDriver = this.get('selectedDriver');\n      const pendingDriverViolation = this.get('driverViolationChangeSet');\n      const tooltip = this.get('tooltip'); // validation\n\n      const isValidDriverViolation = yield this.validateDriverViolation.perform();\n\n      if (isValidDriverViolation) {\n        pendingDriverViolation.set('driver', selectedDriver);\n\n        try {\n          yield pendingDriverViolation.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingDriverViolation', null);\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            });\n          }, 1000);\n          return pendingDriverViolation;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onUndoDriverViolationRecord() {\n      const driverViolationChangeSet = this.get('driverViolationChangeSet');\n\n      if (driverViolationChangeSet) {\n        driverViolationChangeSet.rollback();\n      }\n\n      this.setMinDate(driverViolationChangeSet.get('incidentDate'));\n    },\n\n    onNewDriverViolationRecord() {\n      const selectedRow = this.get('selectedRow');\n      const defaultDate = (0, _moment.default)().startOf('day').toDate();\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      this.setMinDate(defaultDate);\n      this.get('editAPI').buttonSettings(true, true, true, false, false); //False to enable the button, TRUE to disable\n    },\n\n    onEditDriverViolationRecord() {\n      const selectedRow = this.get('selectedRow');\n      if (Ember.isEmpty(selectedRow)) return;\n      this.set('disableForm', false);\n      this.get('editAPI').buttonSettings(true, true, true, false, false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedViolation = this.get('selectedViolation');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedViolation.destroyRecord();\n        notifications.success('Record successfully deleted');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          });\n        }, 1000);\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteDriverViolationRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedViolation = this.get('selectedViolation');\n      const tooltip = this.get('tooltip');\n      const driverSuspensionMap = this.get('driverSuspensionMap') || {};\n      const driverSuspensions = driverSuspensionMap[selectedViolation.get('id')];\n      if (!selectedViolation) return;\n\n      if (Ember.isPresent(driverSuspensions)) {\n        yield tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: 'This violation is associated with a suspension record. You must delete the suspension before deleting this violation.',\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return;\n      }\n\n      yield tooltip.pushConfirmation({\n        title: 'Manage Driver',\n        tip: 'Are you sure you want to delete this record?',\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n    validateDriverViolation: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverViolationChangeSet = this.get('driverViolationChangeSet');\n      yield driverViolationChangeSet.validate();\n      const {\n        incidentDate,\n        licenseMonitorDate,\n        convictionDate,\n        convictionNotificationDate\n      } = driverViolationChangeSet.getProperties('incidentDate', 'licenseMonitorDate', 'convictionDate', 'convictionNotificationDate');\n\n      if (convictionDate && incidentDate) {\n        if ((0, _moment.default)(convictionDate).isBefore((0, _moment.default)(incidentDate))) {\n          driverViolationChangeSet.addError('convictionDate', {\n            value: convictionDate,\n            validation: 'The Conviction Date must be on or after the Incident Date.'\n          });\n        }\n      }\n\n      if (licenseMonitorDate && incidentDate) {\n        if ((0, _moment.default)(licenseMonitorDate).isBefore((0, _moment.default)(incidentDate))) {\n          driverViolationChangeSet.addError('licenseMonitorDate', {\n            value: licenseMonitorDate,\n            validation: 'License Monitor Date must be on or after the Incident Date.'\n          });\n        }\n      }\n\n      if (convictionNotificationDate && convictionDate) {\n        if ((0, _moment.default)(convictionNotificationDate).isBefore((0, _moment.default)(convictionDate))) {\n          driverViolationChangeSet.addError('convictionNotificationDate', {\n            value: convictionNotificationDate,\n            validation: 'The Conviction Notification Date must be on or after the Conviction Date.'\n          });\n        }\n      }\n\n      const driverViolationValid = driverViolationChangeSet.errors;\n      const errors = driverViolationValid;\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    async onVehicleChange(vehicle) {\n      let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vehicle';\n      const driverViolationChangeSet = this.get('driverViolationChangeSet');\n      driverViolationChangeSet.set(path, vehicle);\n    },\n\n    actions: {\n      onSaveRecord() {\n        return this.onSaveDriverViolationRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onDatePickerReady(valuPath, instance) {\n        this.set(valuPath, instance);\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        const isoDate = (0, _moment.default)(value).startOf('day').toISOString();\n        record.set(valuePath, isoDate);\n      },\n\n      onIncidentDateValueChange(record, valuePath, value) {\n        const isoDate = (0, _moment.default)(value).startOf('day').toISOString();\n        record.set(valuePath, isoDate);\n        this.setMinDate(isoDate);\n      },\n\n      openVehicleModal() {\n        const onVehicleChange = this.get('onVehicleChange').bind(this);\n        const searchVehicleObj = Ember.Object.create({\n          title: 'Vehicles',\n          hasOverlay: true,\n          config: _vehicleSearchConfig.default,\n          primaryActionText: 'Select',\n          className: 'vehicle-search-modal',\n          primaryAction: record => {\n            onVehicleChange(record);\n          }\n        });\n        this.set('modalAPI', searchVehicleObj);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"QpwQReLW\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-violations\\\",null,[[\\\"queryParams\\\",\\\"tableRef\\\",\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"isTaskRunning\\\"],[[23,[\\\"queryParams\\\"]],[23,[\\\"tableRef\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validateDriverViolation\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"violation-panel\\\",\\\"Violation\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver CDL Number\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"disabled\\\"],[[23,[\\\"CDL_NUMBER_PLACEHOLDER\\\"]],\\\"***-***-***\\\",[23,[\\\"driverViolationChangeSet\\\",\\\"driverLicense\\\",\\\"license\\\"]],true]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Conviction Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\",\\\"onReady\\\"],[[27,\\\"if\\\",[[23,[\\\"driverViolationChangeSet\\\",\\\"error\\\",\\\"convictionDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,[23,[\\\"flase\\\"]],\\\"m/d/Y\\\",[23,[\\\"driverViolationChangeSet\\\",\\\"convictionDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverViolationChangeSet\\\"]],\\\"convictionDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDatePickerReady\\\",\\\"convictionDateInstance\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Incident Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"maxDate\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverViolationChangeSet\\\",\\\"error\\\",\\\"incidentDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"CURRENT_DATE\\\"]],[23,[\\\"driverViolationChangeSet\\\",\\\"incidentDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onIncidentDateValueChange\\\",[23,[\\\"driverViolationChangeSet\\\"]],\\\"incidentDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Conviction Notification Date\\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverViolationChangeSet\\\",\\\"error\\\",\\\"convictionNotificationDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverViolationChangeSet\\\",\\\"convictionNotificationDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverViolationChangeSet\\\"]],\\\"convictionNotificationDate\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"License Monitor Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\",\\\"onReady\\\"],[[27,\\\"if\\\",[[23,[\\\"driverViolationChangeSet\\\",\\\"error\\\",\\\"licenseMonitorDate\\\"]],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],false,false,\\\"m/d/Y\\\",[23,[\\\"driverViolationChangeSet\\\",\\\"licenseMonitorDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"driverViolationChangeSet\\\"]],\\\"licenseMonitorDate\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDatePickerReady\\\",\\\"licenseMonitorDateInstance\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Points\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"#\\\",[23,[\\\"disableForm\\\"]],[23,[\\\"extraPointsLimitOptions\\\"]],[23,[\\\"driverViolationChangeSet\\\",\\\"points\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverViolationChangeSet\\\"]],\\\"points\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"maxLength\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverViolationChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],\\\"500\\\",[23,[\\\"driverViolationChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverViolationChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\"],[\\\"Vehicle ID\\\",[23,[\\\"driverViolationChangeSet\\\",\\\"vehicle\\\",\\\"name\\\"]],true]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ml-1\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openVehicleModal\\\",[23,[\\\"driverViolationChangeSet\\\"]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityViolationTableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[1,[27,\\\"search-modal\\\",null,[[\\\"modalAPI\\\"],[[23,[\\\"modalAPI\\\"]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATION = void 0;\n  const VALIDATION = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required.'\n    })],\n    incidentDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Incident Date',\n      message: '{description} is required.'\n    })]\n  };\n  _exports.VALIDATION = VALIDATION;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/violation/vehicle-search-config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle',\n    title: 'Vehicle',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    fetchModelData: false,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'ID',\n      valuePath: 'name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'placeholder',\n      index: 1,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'placeholder',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'providerId',\n      index: 2,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'licensePlate',\n      index: 3,\n      type: 'text',\n      label: 'License Plate',\n      valuePath: 'licensePlate',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleStatus',\n      index: 4,\n      type: 'text',\n      label: 'Vehicle Status',\n      valuePath: 'vehicleStatusName.description',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'wheelChairLiftSerialNumber',\n      index: 5,\n      type: 'uuid',\n      label: 'Wheelchair Lift Serial Number',\n      valuePath: 'wheelChairLiftSerialNumber',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'leaseCompanyName',\n      index: 6,\n      type: 'text',\n      label: 'Lease Company',\n      valuePath: 'leaseCompanyName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'leaseEndDate',\n      index: 7,\n      type: 'date',\n      label: 'Lease End Date',\n      valuePath: 'leaseEndDate',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'inService',\n      index: 8,\n      type: 'boolean',\n      label: 'In Service',\n      valuePath: 'inService',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'displayInManager',\n      index: 9,\n      type: 'boolean',\n      label: 'Display in Manager',\n      valuePath: 'inService',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'displayInArchive',\n      index: 10,\n      type: 'boolean',\n      label: 'Display in Archive',\n      valuePath: 'displayInArchive',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleTypeName',\n      index: 11,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'vehicleTypeName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'manufacturerName',\n      index: 12,\n      type: 'boolean',\n      label: 'Manufacturer',\n      valuePath: 'manufacturerName.description',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'modelYear',\n      index: 13,\n      type: 'number',\n      label: 'Model Year',\n      valuePath: 'modelYear',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'comments',\n      index: 14,\n      type: 'text',\n      label: 'Comments',\n      valuePath: 'comments',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'engineType',\n      index: 15,\n      type: 'text',\n      label: 'Engine Type',\n      valuePath: 'engineType',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'siteDef',\n      index: 16,\n      type: 'text',\n      label: 'Site Def',\n      valuePath: 'siteDef',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'inServiceDate',\n      index: 17,\n      type: 'date',\n      label: 'In Service Date',\n      valuePath: 'inServiceDate',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'endServiceDate',\n      index: 18,\n      type: 'date',\n      label: 'End Service Date',\n      valuePath: 'endServiceDate',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'version',\n      index: 19,\n      type: 'number',\n      label: 'Version',\n      valuePath: 'version',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfAmbulatorySeats',\n      index: 20,\n      type: 'number',\n      label: 'Amb Seats',\n      valuePath: 'noOfAmbulatorySeats',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfWheelChairSeats',\n      index: 21,\n      type: 'number',\n      label: 'WC Seats',\n      valuePath: 'noOfWheelChairSeats',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'extraWideLift',\n      index: 22,\n      type: 'number',\n      label: 'XWide Lift',\n      valuePath: 'vehicleType.extraWideLift',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/19a-review/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/19a-review/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    enableWarningRowChangeAlert: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        const reviewRecords = records.filter(record => !record.get('isNew') && Ember.isEmpty(record.get('providerName'))); //NYAAR-16326 if 19a-review record provider was deleted set empty provider in the review record,\n        // to avoid multiple record select issue\n\n        for (const reviewRecord of reviewRecords) {\n          const provider = this.get('store').createRecord('provider');\n          reviewRecord.set('provider', provider);\n        }\n\n        return records.filter(record => !record.get('isNew'));\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/19a-review/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-19-a-review',\n    title: 'Dates',\n    defaultSortId: 'date',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Driver',\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'providerName',\n      defaultWidth: 90,\n      searchable: true\n    }, {\n      id: 'typeOfDate',\n      index: 1,\n      type: 'text',\n      label: 'Type of Date',\n      valuePath: 'examTypeName.displayName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'date',\n      index: 2,\n      type: 'date',\n      label: 'Date',\n      valuePath: 'examDate',\n      defaultWidth: 90,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-accident/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-accident/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-accident-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    enableWarningRowChangeAlert: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        return records.filter(record => !record.get('isNew'));\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-accident/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-accident',\n    title: 'Accidents',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Driver',\n    columns: [{\n      id: 'transitVehicleInvolved',\n      index: 1,\n      type: 'boolean',\n      label: 'Transit Vehicle Involved',\n      valuePath: 'transitVehicleInvolved',\n      defaultWidth: 120,\n      searchable: true\n    }, {\n      id: 'vehicleId',\n      index: 2,\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'accidentDate',\n      index: 3,\n      type: 'date',\n      label: 'Accident Date',\n      valuePath: 'accidentDate',\n      defaultWidth: 80,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'Notification',\n      index: 4,\n      type: 'boolean',\n      label: 'Notification',\n      valuePath: 'notification',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'notificationDate',\n      index: 5,\n      type: 'date',\n      label: 'Notification Date',\n      valuePath: 'notificationDate',\n      defaultWidth: 70,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 6,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 120,\n      searchable: true\n    }, {\n      id: 'placeholder',\n      index: 7,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'vehicle.placeholder',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-log/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-log/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-log-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    enableWarningRowChangeAlert: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        return records.filter(record => !record.get('isNew'));\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-log/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-log',\n    title: 'Dates',\n    defaultSortId: 'createDate',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Driver',\n    queryModelData: true,\n    columns: [{\n      id: 'createDate',\n      index: 2,\n      type: 'date',\n      label: 'Create Date',\n      valuePath: 'createDate',\n      defaultWidth: 90,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 3,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 90,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-provider-notes/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-provider-notes/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-provider-notes-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const store = this.get('store');\n      const queryParams = this.get('queryParams');\n      const newDriverProviderNotes = this.get('newDriverProviderNotes');\n      const activeData = await store.query(modelName, queryParams);\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      if (newDriverProviderNotes.length) newDriverProviderNotes.filter(pn => !filteredData.includes(pn)).forEach(dn => filteredData.pushObject(dn));\n      return filteredData.filter(model => !model.get('isDeleted'));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-provider-notes/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-provider-note',\n    title: 'Notes',\n    defaultSortId: 'updatedAt',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Driver',\n    columns: [{\n      id: 'notes',\n      index: 0,\n      type: 'text',\n      label: 'Note',\n      valuePath: 'notes',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-providers/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-providers/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-provider-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-providers/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-provider',\n    title: 'Providers',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Driver',\n    columns: [{\n      id: 'siteID',\n      index: 1,\n      type: 'text',\n      label: 'Site ID',\n      valuePath: 'siteId',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'provider',\n      index: 2,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'position',\n      index: 3,\n      type: 'text',\n      label: 'Position',\n      valuePath: 'driverPositionName.displayName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'driverEmploymentStatus',\n      index: 4,\n      type: 'text',\n      label: 'Driver Employment Status',\n      valuePath: 'employmentStatusName.displayName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'startDate',\n      index: 5,\n      type: 'date',\n      label: 'Start Date',\n      valuePath: 'employmentStartDate',\n      defaultWidth: 70,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'endDate',\n      index: 6,\n      type: 'date',\n      label: 'End Date',\n      valuePath: 'employmentEndDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'terminationReason',\n      index: 7,\n      type: 'text',\n      label: 'Termination Reason',\n      valuePath: 'terminationReasonName.description',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'classroomTrainingDate',\n      index: 8,\n      type: 'date',\n      label: 'Classroom Training Date',\n      valuePath: 'classroomTrainingDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'refresherTrainingDate',\n      index: 9,\n      type: 'date',\n      label: 'Refresher Training Date',\n      valuePath: 'refresherTrainingDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'pointsReductionTrainingDate',\n      index: 10,\n      type: 'date',\n      label: 'Points Reduction Training Date',\n      valuePath: 'pointsReductionTraining',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'sensitivityTrainingDate',\n      index: 11,\n      type: 'date',\n      label: 'Sensitivity Training Date',\n      valuePath: 'sensitivityTrainingDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'firstAidTrainingDate',\n      index: 12,\n      type: 'date',\n      label: 'First Aid Training Date',\n      valuePath: 'firstAidTrainingDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-suspensions/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-suspensions/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-suspension-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-suspensions/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-suspension',\n    title: 'Suspensions',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Driver',\n    queryModelData: true,\n    columns: [{\n      id: 'startDate',\n      index: 1,\n      type: 'date',\n      label: 'Start Date',\n      valuePath: 'startDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'endDate',\n      index: 2,\n      type: 'date',\n      label: 'End Date',\n      valuePath: 'endDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'description',\n      index: 3,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 4,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'associatedViolation',\n      index: 5,\n      type: 'boolean',\n      label: 'Associated Violation',\n      valuePath: 'hasViolation',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'violationId',\n      index: 6,\n      type: 'text',\n      label: 'Violation ID',\n      valuePath: 'driverViolation.id',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'incidentDate',\n      index: 7,\n      type: 'date',\n      label: 'Incident Date',\n      valuePath: 'driverViolation.incidentDate',\n      defaultWidth: 100,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'incidentDescription',\n      index: 8,\n      type: 'text',\n      label: 'Incident Description',\n      valuePath: 'driverViolation.description',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-violations/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-violations/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-suspension-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver-violations/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-violation',\n    title: 'Violations',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Driver',\n    columns: [{\n      id: 'driverCdlNumber',\n      index: 1,\n      type: 'string',\n      label: 'Driver CDL Number',\n      valuePath: 'driverLicense.license',\n      defaultWidth: 135,\n      searchable: true\n    }, {\n      id: 'incidentDate',\n      index: 2,\n      type: 'date',\n      label: 'Incident Date',\n      valuePath: 'incidentDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'licenseMonitorDate',\n      index: 3,\n      type: 'date',\n      label: 'License Monitor Date',\n      valuePath: 'licenseMonitorDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'description',\n      index: 4,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'convictionDate',\n      index: 5,\n      type: 'date',\n      label: 'Conviction Date',\n      valuePath: 'convictionDate',\n      defaultWidth: 70,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'convictionNotificationDate',\n      index: 6,\n      type: 'date',\n      label: 'Conviction Notification Date',\n      valuePath: 'convictionNotificationDate',\n      defaultWidth: 70,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'points',\n      index: 7,\n      type: 'number',\n      label: 'Points',\n      valuePath: 'points',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleId',\n      index: 8,\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['driver-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    hasPendingChanges: false,\n    enableWarningRowChangeAlert: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        return records.filter(record => !record.get('isNew'));\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver',\n    title: 'Driver Records',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'id',\n      index: 0,\n      type: 'uuid',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'providerID',\n      index: 1,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'lastName',\n      index: 2,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'firstName',\n      index: 3,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'middleInitial',\n      index: 4,\n      type: 'text',\n      label: 'MI',\n      valuePath: 'middleInitial',\n      defaultWidth: 100,\n      format: 'HH:mm',\n      searchable: true\n    }, {\n      id: 'driverCdlNumber',\n      index: 5,\n      type: 'string',\n      label: 'Driver CDL',\n      valuePath: 'license.license',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'startDate',\n      index: 6,\n      type: 'date',\n      label: 'Start Date',\n      valuePath: 'startDateDs870',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'phoneNumbers',\n      index: 7,\n      type: 'text',\n      label: 'Phone Number',\n      valuePath: 'phoneNumbers.firstObject.formattedPhoneNumber',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/body-width-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleBodyWidthChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleBodyWidthChangeSet.changes.length', function () {\n      const vehicleBodyWidthChangeSet = this.get('vehicleBodyWidthChangeSet');\n      const changes = vehicleBodyWidthChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleBodyWidthRecord = this.get('onSaveVehicleBodyWidthRecord');\n      const onNewVehicleBodyWidthRecord = this.get('onNewVehicleBodyWidthRecord').bind(this);\n      const onEditVehicleBodyWidthRecord = this.get('onEditVehicleBodyWidthRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleBodyWidthRecord = this.get('onUndoVehicleBodyWidthRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleBodyWidthRecord,\n          newAction: onNewVehicleBodyWidthRecord,\n          editAction: onEditVehicleBodyWidthRecord,\n          undoAction: onUndoVehicleBodyWidthRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleBodyWidthChangeSet.description') || '';\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleBodyWidth.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Vehicle Body Width description. You must either change the Vehicle Body Width description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Body Width description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleBodyWidthObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleBodyWidthObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_body_widths',\n          type: 'object'\n        };\n        vehicleBodyWidthObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleBodyWidthObj);\n      }\n\n      if (vehicleBodyWidthObj.get('isNew')) {\n        vehicleBodyWidthObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleBodyWidthObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleBodyWidthChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleBodyWidthRecord = this.get('vehicleBodyWidthChangeSet');\n      yield VehicleBodyWidthRecord.validate();\n      const errors = VehicleBodyWidthRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleBodyWidthRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleBodyWidthChangeSet.description') || '';\n      const value = {\n        description: description,\n        displayName: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      let vehicleBodyWidthRecord = this.get('vehicleBodyWidthChangeSet');\n      const vehicleBodyWidthChangeSet = this.get('vehicleBodyWidthChangeSet');\n\n      if (vehicleBodyWidthRecord.get('isNew')) {\n        vehicleBodyWidthRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleBodyWidthChangeSet'));\n        vehicleBodyWidthRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleBodyWidthChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_body_widths/${id}`;\n        vehicleBodyWidthRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleBodyWidthRecord.set('displayName', description);\n      vehicleBodyWidthRecord.set('description', description);\n      vehicleBodyWidthRecord.set('value', value);\n\n      try {\n        yield vehicleBodyWidthRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleBodyWidthChangeSet.execute();\n        vehicleBodyWidthChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleBodyWidthRecord.rollbackAttributes) {\n          vehicleBodyWidthRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleBodyWidthRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleBodyWidthRecord() {\n      const vehicleBodyWidthChangeSet = this.get('vehicleBodyWidthChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleBodyWidthChangeSet) {\n        vehicleBodyWidthChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleBodyWidthRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleBodyWidthRecord() {\n        return this.onSaveVehicleBodyWidthRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Body Width',\n    defaultSortId: 'description',\n    modelName: 'vehicle-body-width',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 1,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"e3vNEnVU\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleBodyWidthRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Body Width\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleBodyWidthChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleBodyWidthChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleBodyWidthChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body-width/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/body-type-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleBodyTypeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleBodyTypeRecord = this.get('onSaveVehicleBodyTypeRecord');\n      const onNewVehicleBodyTypeRecord = this.get('onNewVehicleBodyTypeRecord').bind(this);\n      const onEditVehicleBodyTypeRecord = this.get('onEditVehicleBodyTypeRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleBodyTypeRecord = this.get('onUndoVehicleBodyTypeRecord').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleBodyTypeRecord,\n          newAction: onNewVehicleBodyTypeRecord,\n          editAction: onEditVehicleBodyTypeRecord,\n          undoAction: onUndoVehicleBodyTypeRecord,\n          deleteAction: null,\n          hasChanges,\n          hasRelationship,\n          onValidateAction,\n          refreshTask\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasPendingChanges: Ember.computed('vehicleBodyTypeChangeSet.changes.length', function () {\n      const vehicleBodyTypeChangeSet = this.get('vehicleBodyTypeChangeSet');\n      const changes = vehicleBodyTypeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleBodyTypeChangeSet.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this BodyType\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleBodyType.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Vehicle Body Type description. You must either change the Vehicle Body Type description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Body Type description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleBodyTypeObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleBodyTypeObj = record;\n        this.resetForm();\n      } else if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_body_types',\n          type: 'object'\n        };\n        vehicleBodyTypeObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleBodyTypeObj);\n      }\n\n      if (vehicleBodyTypeObj.get('isNew')) {\n        vehicleBodyTypeObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleBodyTypeObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleBodyTypeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleBodyTypeRecord = this.get('vehicleBodyTypeChangeSet');\n      yield VehicleBodyTypeRecord.validate();\n      const errors = VehicleBodyTypeRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleBodyTypeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleBodyTypeChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleBodyTypeChangeSet = this.get('vehicleBodyTypeChangeSet');\n      let vehicleBodyTypeRecord = this.get('vehicleBodyTypeChangeSet');\n\n      if (vehicleBodyTypeRecord.get('isNew')) {\n        vehicleBodyTypeRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleBodyTypeChangeSet'));\n        vehicleBodyTypeRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleBodyTypeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_body_types/${id}`;\n        vehicleBodyTypeRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleBodyTypeRecord.set('displayName', description);\n      vehicleBodyTypeRecord.set('description', description);\n      vehicleBodyTypeRecord.set('value', value);\n\n      try {\n        yield vehicleBodyTypeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleBodyTypeChangeSet.execute();\n        vehicleBodyTypeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleBodyTypeRecord.rollbackAttributes) {\n          vehicleBodyTypeRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleBodyTypeRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleBodyTypeRecord() {\n      const vehicleBodyTypeChangeSet = this.get('vehicleBodyTypeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleBodyTypeChangeSet) {\n        vehicleBodyTypeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleBodyTypeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleBodyTypeRecord() {\n        return this.onSaveVehicleBodyTypeRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Body',\n    defaultSortId: 'description',\n    modelName: 'vehicle-body-type',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 1,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"gkkDfZZd\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleBodyTypeRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Body\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleBodyTypeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleBodyTypeChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleBodyTypeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/body/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/category-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleCategoryChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleCategoryRecord = this.get('onSaveVehicleCategoryRecord');\n      const onNewVehicleCategoryRecord = this.get('onNewVehicleCategoryRecord').bind(this);\n      const onEditVehicleCategoryRecord = this.get('onEditVehicleCategoryRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleCategoryRecord = this.get('onUndoVehicleCategoryRecord').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleCategoryRecord,\n          newAction: onNewVehicleCategoryRecord,\n          editAction: onEditVehicleCategoryRecord,\n          undoAction: onUndoVehicleCategoryRecord,\n          deleteAction: null,\n          hasChanges,\n          hasRelationship,\n          refreshTask,\n          onValidateAction\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasPendingChanges: Ember.computed('vehicleCategoryChangeSet.changes.length', function () {\n      const vehicleCategoryChangeSet = this.get('vehicleCategoryChangeSet');\n      const changes = vehicleCategoryChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleCategoryChangeSet.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this Category\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('vehicleInspectionCategory.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Category description. You must either change the Vehicle Category description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Category description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleCategoryObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleCategoryObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_inspector_categories',\n          type: 'object'\n        };\n        vehicleCategoryObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleCategoryObj);\n      }\n\n      if (vehicleCategoryObj.get('isNew')) {\n        vehicleCategoryObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleCategoryObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleCategoryChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleCategoryRecord = this.get('vehicleCategoryChangeSet');\n      yield VehicleCategoryRecord.validate();\n      const errors = VehicleCategoryRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleCategoryRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleCategoryChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleCategoryChangeSet = this.get('vehicleCategoryChangeSet');\n      let vehicleCategoryRecord = this.get('vehicleCategoryChangeSet');\n\n      if (vehicleCategoryRecord.get('isNew')) {\n        vehicleCategoryRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleCategoryChangeSet'));\n        vehicleCategoryRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleCategoryChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_inspector_categories/${id}`;\n        vehicleCategoryRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleCategoryRecord.set('displayName', description);\n      vehicleCategoryRecord.set('description', description);\n      vehicleCategoryRecord.set('value', value);\n\n      try {\n        yield vehicleCategoryRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleCategoryChangeSet.execute();\n        vehicleCategoryChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleCategoryRecord.rollbackAttributes) {\n          vehicleCategoryRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleCategoryRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleCategoryRecord() {\n      const vehicleCategoryChangeSet = this.get('vehicleCategoryChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleCategoryChangeSet) {\n        vehicleCategoryChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleCategoryRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleCategoryRecord() {\n        return this.onSaveVehicleCategoryRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Category',\n    defaultSortId: 'description',\n    modelName: 'inspection-category',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"+7ookAoJ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleCategoryRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Category\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleCategoryChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleCategoryChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleCategoryChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/category/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    driverCdlChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('driverCdlChangeSet.changes.length', function () {\n      const driverCdlChangeSet = this.get('driverCdlChangeSet');\n      const changes = driverCdlChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveDriverCdlRecord = this.get('onSaveDriverCdlRecord');\n      const onNewDriverCdlRecord = this.get('onNewDriverCdlRecord').bind(this);\n      const onEditDriverCdlRecord = this.get('onEditDriverCdlRecord').bind(this);\n      const onUndoDriverCdlRecord = this.get('onUndoDriverCdlRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      const refreshTask = this.get('refreshTask');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverCdlRecord,\n          newAction: onNewDriverCdlRecord,\n          editAction: onEditDriverCdlRecord,\n          undoAction: onUndoDriverCdlRecord,\n          deleteAction: null,\n          hasChanges,\n          hasRelationship,\n          onValidateAction,\n          refreshTask\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('driverCdlChangeSet.description') || '';\n      const driver = store.peekAll('driver').filter(record => record.get('license.classificationName.description') === description);\n\n      if (driver.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${driver.length} active Driver(s) with this Driver CDL Classification description. You must either change the Driver CDL Classification description on these Driver(s) or delete these Driver(s) prior to changing the Driver CDL Classification description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return driver.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let driverCdlObj = this.get('pendingRecord');\n\n      if (record) {\n        driverCdlObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-CDL_classifications',\n          type: 'object'\n        };\n        driverCdlObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', driverCdlObj);\n      }\n\n      if (driverCdlObj.get('isNew')) {\n        driverCdlObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(driverCdlObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('driverCdlChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverCdlRecord = this.get('driverCdlChangeSet');\n      yield driverCdlRecord.validate();\n      const errors = driverCdlRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveDriverCdlRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('driverCdlChangeSet.description') || '';\n      const value = {\n        displayName: description,\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const driverCdlChangeSet = this.get('driverCdlChangeSet');\n      let driverCdlRecord = this.get('driverCdlChangeSet');\n\n      if (driverCdlRecord.get('isNew')) {\n        driverCdlRecord = (0, _unwrapProxy.unwrapProxy)(this.get('driverCdlChangeSet'));\n        driverCdlRecord.set('name', name);\n      } else {\n        const id = this.get('driverCdlChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-CDL_classifications/${id}`;\n        driverCdlRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      driverCdlRecord.set('displayName', description);\n      driverCdlRecord.set('description', description);\n      driverCdlRecord.set('value', value);\n\n      try {\n        yield driverCdlRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        driverCdlChangeSet.execute();\n        driverCdlChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (driverCdlRecord.rollbackAttributes) {\n          driverCdlRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditDriverCdlRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoDriverCdlRecord() {\n      const driverCdlChangeSet = this.get('driverCdlChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (driverCdlChangeSet) {\n        driverCdlChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewDriverCdlRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveDriverCdlRecord() {\n        return this.onSaveDriverCdlRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['cdl-classification-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'CDL Classification',\n    defaultSortId: 'description',\n    modelName: 'classification-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3i7fNgv5\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveDriverCdlRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"CDL Classification\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverCdlChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"driverCdlChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverCdlChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/cdl-classification/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/chassis-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleChassisChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleChassisChangeSet.changes.length', function () {\n      const vehicleChassisChangeSet = this.get('vehicleChassisChangeSet');\n      const changes = vehicleChassisChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleChassisRecord = this.get('onSaveVehicleChassisRecord');\n      const onNewVehicleChassisRecord = this.get('onNewVehicleChassisRecord').bind(this);\n      const onEditVehicleChassisRecord = this.get('onEditVehicleChassisRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleChassisRecord = this.get('onUndoVehicleChassisRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleChassisRecord,\n          newAction: onNewVehicleChassisRecord,\n          editAction: onEditVehicleChassisRecord,\n          undoAction: onUndoVehicleChassisRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleChassisChangeSet.description') || '';\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleChassis.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Vehicle Chassis description. You must either change the Vehicle Chassis description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Chassis description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleChassisObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleChassisObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_chassis',\n          type: 'object'\n        };\n        vehicleChassisObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleChassisObj);\n      }\n\n      if (vehicleChassisObj.get('isNew')) {\n        vehicleChassisObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleChassisObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleChassisChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleChassisRecord = this.get('vehicleChassisChangeSet');\n      yield VehicleChassisRecord.validate();\n      const errors = VehicleChassisRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleChassisRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleChassisChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleChassisChangeSet = this.get('vehicleChassisChangeSet');\n      let vehicleChassisRecord = this.get('vehicleChassisChangeSet');\n\n      if (vehicleChassisRecord.get('isNew')) {\n        vehicleChassisRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleChassisChangeSet'));\n        vehicleChassisRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleChassisChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_chassis/${id}`;\n        vehicleChassisRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleChassisRecord.set('displayName', description);\n      vehicleChassisRecord.set('description', description);\n      vehicleChassisRecord.set('value', value);\n\n      try {\n        yield vehicleChassisRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleChassisChangeSet.execute();\n        vehicleChassisChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleChassisRecord.rollbackAttributes) {\n          vehicleChassisRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleChassisRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleChassisRecord() {\n      const vehicleChassisChangeSet = this.get('vehicleChassisChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleChassisChangeSet) {\n        vehicleChassisChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleChassisRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleChassisRecord() {\n        return this.onSaveVehicleChassisRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Chassis',\n    defaultSortId: 'description',\n    modelName: 'vehicle-chassis',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Imt+T/1i\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleChassisRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Chassis\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleChassisChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleChassisChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleChassisChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/chassis/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    driverEmploymentStatusChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('driverEmploymentStatusChangeSet.changes.length', function () {\n      const driverEmploymentStatusChangeSet = this.get('driverEmploymentStatusChangeSet');\n      const changes = driverEmploymentStatusChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveDriverEmploymentStatusRecord = this.get('onSaveDriverEmploymentStatusRecord');\n      const onNewDriverEmploymentStatusRecord = this.get('onNewDriverEmploymentStatusRecord').bind(this);\n      const onEditDriverEmploymentStatusRecord = this.get('onEditDriverEmploymentStatusRecord').bind(this);\n      const onUndoDriverEmploymentStatusRecord = this.get('onUndoDriverEmploymentStatusRecord').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const refreshTask = this.get('refreshTask');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverEmploymentStatusRecord,\n          newAction: onNewDriverEmploymentStatusRecord,\n          editAction: onEditDriverEmploymentStatusRecord,\n          undoAction: onUndoDriverEmploymentStatusRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('driverEmploymentStatusChangeSet.displayName') || '';\n      const driverProviders = store.peekAll('driver-provider').filter(record => record.get('employmentStatusName.displayName') === description);\n\n      if (driverProviders.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${driverProviders.length} active Driver(s) with this Driver Employment Status description. You must either change the Driver Employment Status description on these Driver(s) or delete these Driver(s) prior to changing the Driver Employment Status description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return driverProviders.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let driverEmploymentStatusObj = this.get('pendingRecord');\n\n      if (record) {\n        driverEmploymentStatusObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-driver_statuses',\n          type: 'object'\n        };\n        driverEmploymentStatusObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', driverEmploymentStatusObj);\n      }\n\n      if (driverEmploymentStatusObj.get('isNew')) {\n        driverEmploymentStatusObj.setProperties({\n          description: null,\n          displayName: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(driverEmploymentStatusObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('driverEmploymentStatusChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverEmploymentStatusRecord = this.get('driverEmploymentStatusChangeSet');\n      yield driverEmploymentStatusRecord.validate();\n      const errors = driverEmploymentStatusRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveDriverEmploymentStatusRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('driverEmploymentStatusChangeSet.displayName') || '';\n      const value = {\n        displayName: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const driverEmploymentStatusChangeSet = this.get('driverEmploymentStatusChangeSet');\n      let driverEmploymentStatusRecord = this.get('driverEmploymentStatusChangeSet');\n\n      if (driverEmploymentStatusRecord.get('isNew')) {\n        driverEmploymentStatusRecord = (0, _unwrapProxy.unwrapProxy)(this.get('driverEmploymentStatusChangeSet'));\n        driverEmploymentStatusRecord.set('name', name);\n      } else {\n        const id = this.get('driverEmploymentStatusChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-driver_statuses/${id}`;\n        driverEmploymentStatusRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      driverEmploymentStatusRecord.set('displayName', description);\n      driverEmploymentStatusRecord.set('description', description);\n      driverEmploymentStatusRecord.set('value', value);\n\n      try {\n        const isDuplicateDescription = this.hasDuplicateDescription(description, driverEmploymentStatusChangeSet);\n\n        if (isDuplicateDescription) {\n          yield driverEmploymentStatusRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n          // execute to change underlying object and rollback to remove internal changes list\n\n          driverEmploymentStatusChangeSet.execute();\n          driverEmploymentStatusChangeSet.rollback();\n          notifications.success('Lookup record successfully saved.');\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              tooltip.reset();\n            });\n          }, 500);\n        } else {\n          this.showDuplicateDescriptionWarning(tooltip);\n        }\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          this.showDuplicateDescriptionWarning(tooltip);\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditDriverEmploymentStatusRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoDriverEmploymentStatusRecord() {\n      const driverEmploymentStatusChangeSet = this.get('driverEmploymentStatusChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (driverEmploymentStatusChangeSet) {\n        driverEmploymentStatusChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewDriverEmploymentStatusRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    showDuplicateDescriptionWarning(tooltip) {\n      tooltip.pushConfirmation({\n        title: 'Manage Driver/Vehicle',\n        tip: 'Description cannot duplicate an existing Description.',\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n      this.onUndoDriverEmploymentStatusRecord();\n    },\n\n    hasDuplicateDescription(description, driverEmploymentStatusChangeSet) {\n      const id = driverEmploymentStatusChangeSet.get('id');\n      const driverEmploymentStatus = this.get('tableRef.records').filter(record => {\n        return id !== record.get('id') && record.get('displayName').toLowerCase() === description.toLowerCase();\n      });\n      return !(driverEmploymentStatus && driverEmploymentStatus.length > 0);\n    },\n\n    actions: {\n      onSaveDriverEmploymentStatusRecord() {\n        return this.onSaveDriverEmploymentStatusRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'employment-status-name',\n    title: 'Employee Status',\n    defaultSortId: 'displayName',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'displayName',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'displayName',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"R5k7Xw+4\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveDriverEmploymentStatusRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Employment Status\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverEmploymentStatusChangeSet\\\",\\\"error\\\",\\\"displayName\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"driverEmploymentStatusChangeSet\\\",\\\"displayName\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverEmploymentStatusChangeSet\\\"]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/employment-status/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    displayName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleFuelCapChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleFuelCapChangeSet.changes.length', function () {\n      const vehicleFuelCapChangeSet = this.get('vehicleFuelCapChangeSet');\n      const changes = vehicleFuelCapChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleFuelCapRecord = this.get('onSaveVehicleFuelCapRecord');\n      const onNewVehicleFuelCapRecord = this.get('onNewVehicleFuelCapRecord').bind(this);\n      const onEditVehicleFuelCapRecord = this.get('onEditVehicleFuelCapRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleFuelCapRecord = this.get('onUndoVehicleFuelCapRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleFuelCapRecord,\n          newAction: onNewVehicleFuelCapRecord,\n          editAction: onEditVehicleFuelCapRecord,\n          undoAction: onUndoVehicleFuelCapRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleFuelCapChangeSet.description') || '';\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleFuelCap.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Vehicle Fuel Cap description. You must either change the Vehicle Fuel Cap description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Fuel Cap description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleFuelCapObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleFuelCapObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_fuel_caps',\n          type: 'object'\n        };\n        vehicleFuelCapObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleFuelCapObj);\n      }\n\n      if (vehicleFuelCapObj.get('isNew')) {\n        vehicleFuelCapObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleFuelCapObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleFuelCapChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleFuelCapRecord = this.get('vehicleFuelCapChangeSet');\n      yield VehicleFuelCapRecord.validate();\n      const errors = VehicleFuelCapRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleFuelCapRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleFuelCapChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleFuelCapChangeSet = this.get('vehicleFuelCapChangeSet');\n      let vehicleFuelCapRecord = this.get('vehicleFuelCapChangeSet');\n\n      if (vehicleFuelCapRecord.get('isNew')) {\n        vehicleFuelCapRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleFuelCapChangeSet'));\n        vehicleFuelCapRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleFuelCapChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_fuel_caps/${id}`;\n        vehicleFuelCapRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleFuelCapRecord.set('displayName', description);\n      vehicleFuelCapRecord.set('description', description);\n      vehicleFuelCapRecord.set('value', value);\n\n      try {\n        yield vehicleFuelCapRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleFuelCapChangeSet.execute();\n        vehicleFuelCapChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            this.resetForm();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleFuelCapRecord.rollbackAttributes) {\n          vehicleFuelCapRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleFuelCapRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleFuelCapRecord() {\n      const vehicleFuelCapChangeSet = this.get('vehicleFuelCapChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleFuelCapChangeSet) {\n        vehicleFuelCapChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleFuelCapRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleFuelCapRecord() {\n        return this.onSaveVehicleFuelCapRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/fuel-cap-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Fuel Cap',\n    defaultSortId: 'description',\n    modelName: 'vehicle-fuel-cap',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"v4ei4pk/\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleFuelCapRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Fuel Cap\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleFuelCapChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleFuelCapChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleFuelCapChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-cap/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleFuelTypeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleFuelTypeChangeSet.changes.length', function () {\n      const vehicleFuelTypeChangeSet = this.get('vehicleFuelTypeChangeSet');\n      const changes = vehicleFuelTypeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleFuelTypeRecord = this.get('onSaveVehicleFuelTypeRecord');\n      const onNewVehicleFuelTypeRecord = this.get('onNewVehicleFuelTypeRecord').bind(this);\n      const onEditVehicleFuelTypeRecord = this.get('onEditVehicleFuelTypeRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleFuelTypeRecord = this.get('onUndoVehicleFuelTypeRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleFuelTypeRecord,\n          newAction: onNewVehicleFuelTypeRecord,\n          editAction: onEditVehicleFuelTypeRecord,\n          undoAction: onUndoVehicleFuelTypeRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleFuelTypeChangeSet.description') || '';\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleFuelType.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Vehicle Fuel Type description. You must either change the Vehicle Fuel Type description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Fuel Type description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleFuelTypeObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleFuelTypeObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_fuel_types',\n          type: 'object'\n        };\n        vehicleFuelTypeObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleFuelTypeObj);\n      }\n\n      if (vehicleFuelTypeObj.get('isNew')) {\n        vehicleFuelTypeObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleFuelTypeObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleFuelTypeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleFuelTypeRecord = this.get('vehicleFuelTypeChangeSet');\n      yield VehicleFuelTypeRecord.validate();\n      const errors = VehicleFuelTypeRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleFuelTypeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleFuelTypeChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleFuelTypeChangeSet = this.get('vehicleFuelTypeChangeSet');\n      let vehicleFuelTypeRecord = this.get('vehicleFuelTypeChangeSet');\n\n      if (vehicleFuelTypeRecord.get('isNew')) {\n        vehicleFuelTypeRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleFuelTypeChangeSet'));\n        vehicleFuelTypeRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleFuelTypeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_fuel_types/${id}`;\n        vehicleFuelTypeRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleFuelTypeRecord.set('displayName', description);\n      vehicleFuelTypeRecord.set('description', description);\n      vehicleFuelTypeRecord.set('value', value);\n\n      try {\n        yield vehicleFuelTypeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleFuelTypeChangeSet.execute();\n        vehicleFuelTypeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleFuelTypeRecord.rollbackAttributes) {\n          vehicleFuelTypeRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleFuelTypeRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleFuelTypeRecord() {\n      const vehicleFuelTypeChangeSet = this.get('vehicleFuelTypeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleFuelTypeChangeSet) {\n        vehicleFuelTypeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleFuelTypeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleFuelTypeRecord() {\n        return this.onSaveVehicleFuelTypeRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Fuel Type',\n    defaultSortId: 'description',\n    modelName: 'vehicle-fuel-type',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"l05HQk6F\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleFuelTypeRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Fuel Type\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleFuelTypeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleFuelTypeChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleFuelTypeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/fuel-type/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleInspectorChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleInspectorChangeSet.changes.length', function () {\n      const vehicleInspectorChangeSet = this.get('vehicleInspectorChangeSet');\n      const changes = vehicleInspectorChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleInspectorRecord = this.get('onSaveVehicleInspectorRecord');\n      const onNewVehicleInspectorRecord = this.get('onNewVehicleInspectorRecord').bind(this);\n      const onEditVehicleInspectorRecord = this.get('onEditVehicleInspectorRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleInspectorRecord = this.get('onUndoVehicleInspectorRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleInspectorRecord,\n          newAction: onNewVehicleInspectorRecord,\n          editAction: onEditVehicleInspectorRecord,\n          undoAction: onUndoVehicleInspectorRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleInspectorChangeSet.description') || '';\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('vehicleInspector.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Inspector description. You must either change the Vehicle Inspector description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Inspector description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleInspectorObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleInspectorObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_inspectors',\n          type: 'object'\n        };\n        vehicleInspectorObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleInspectorObj);\n      }\n\n      if (vehicleInspectorObj.get('isNew')) {\n        vehicleInspectorObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleInspectorObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleInspectorChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleInspectorRecord = this.get('vehicleInspectorChangeSet');\n      yield VehicleInspectorRecord.validate();\n      const errors = VehicleInspectorRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleInspectorRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleInspectorChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleInspectorChangeSet = this.get('vehicleInspectorChangeSet');\n      let vehicleInspectorRecord = this.get('vehicleInspectorChangeSet');\n\n      if (vehicleInspectorRecord.get('isNew')) {\n        vehicleInspectorRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleInspectorChangeSet'));\n        vehicleInspectorRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleInspectorChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_inspectors/${id}`;\n        vehicleInspectorRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleInspectorRecord.set('displayName', description);\n      vehicleInspectorRecord.set('description', description);\n      vehicleInspectorRecord.set('value', value);\n\n      try {\n        yield vehicleInspectorRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleInspectorChangeSet.execute();\n        vehicleInspectorChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleInspectorRecord.rollbackAttributes) {\n          vehicleInspectorRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleInspectorRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleInspectorRecord() {\n      const vehicleInspectorChangeSet = this.get('vehicleInspectorChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleInspectorChangeSet) {\n        vehicleInspectorChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleInspectorRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleInspectorRecord() {\n        return this.onSaveVehicleInspectorRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Inspector',\n    defaultSortId: 'description',\n    modelName: 'inspector-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 1,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"/O6So+Tv\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleInspectorRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Inspector\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleInspectorChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleInspectorChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleInspectorChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/inspector/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    CODE_PLACEHOLDER: _placeholders.CODE_PLACEHOLDER,\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    code: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleLeaseCompanyChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleLeaseCompanyChangeSet.changes.length', function () {\n      const vehicleLeaseCompanyChangeSet = this.get('vehicleLeaseCompanyChangeSet');\n      const changes = vehicleLeaseCompanyChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleLeaseCompanyRecord = this.get('onSaveVehicleLeaseCompanyRecord');\n      const onNewVehicleLeaseCompanyRecord = this.get('onNewVehicleLeaseCompanyRecord').bind(this);\n      const onEditVehicleLeaseCompanyRecord = this.get('onEditVehicleLeaseCompanyRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleLeaseCompanyRecord = this.get('onUndoVehicleLeaseCompanyRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleLeaseCompanyRecord,\n          newAction: onNewVehicleLeaseCompanyRecord,\n          editAction: onEditVehicleLeaseCompanyRecord,\n          undoAction: onUndoVehicleLeaseCompanyRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleLeaseCompanyChangeSet.description') || '';\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('leaseCompany.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Lease Company description. You must either change the Vehicle Lease Company description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Lease Company description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleLeaseCompanyObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleLeaseCompanyObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_lease_companies',\n          type: 'object'\n        };\n        vehicleLeaseCompanyObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleLeaseCompanyObj);\n      }\n\n      if (vehicleLeaseCompanyObj.get('isNew')) {\n        vehicleLeaseCompanyObj.setProperties({\n          code: null,\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleLeaseCompanyObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleLeaseCompanyChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleLeaseCompanyRecord = this.get('vehicleLeaseCompanyChangeSet');\n      yield VehicleLeaseCompanyRecord.validate();\n      const errors = VehicleLeaseCompanyRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleLeaseCompanyRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleLeaseCompanyChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleLeaseCompanyChangeSet = this.get('vehicleLeaseCompanyChangeSet');\n      let vehicleLeaseCompanyRecord = this.get('vehicleLeaseCompanyChangeSet');\n\n      if (vehicleLeaseCompanyRecord.get('isNew')) {\n        vehicleLeaseCompanyRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleLeaseCompanyChangeSet'));\n        vehicleLeaseCompanyRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleLeaseCompanyChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_lease_companies/${id}`;\n        vehicleLeaseCompanyRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleLeaseCompanyRecord.set('displayName', description);\n      vehicleLeaseCompanyRecord.set('description', description);\n      vehicleLeaseCompanyRecord.set('value', value);\n\n      try {\n        yield vehicleLeaseCompanyRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleLeaseCompanyChangeSet.execute();\n        vehicleLeaseCompanyChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleLeaseCompanyRecord.rollbackAttributes) {\n          vehicleLeaseCompanyRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleLeaseCompanyRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleLeaseCompanyRecord() {\n      const vehicleLeaseCompanyChangeSet = this.get('vehicleLeaseCompanyChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleLeaseCompanyChangeSet) {\n        vehicleLeaseCompanyChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleLeaseCompanyRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleLeaseCompanyRecord() {\n        return this.onSaveVehicleLeaseCompanyRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Lease Company',\n    defaultSortId: 'name',\n    modelName: 'lease-company',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"FP/OoLBs\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleLeaseCompanyRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2 vehicle-2col-lookup\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Lease Company\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleLeaseCompanyChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleLeaseCompanyChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleLeaseCompanyChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/lease-company/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleMaintLocationChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleMaintLocationChangeSet.changes.length', function () {\n      const vehicleMaintLocationChangeSet = this.get('vehicleMaintLocationChangeSet');\n      const changes = vehicleMaintLocationChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleMaintLocationRecord = this.get('onSaveVehicleMaintLocationRecord');\n      const onNewVehicleMaintLocationRecord = this.get('onNewVehicleMaintLocationRecord').bind(this);\n      const onEditVehicleMaintLocationRecord = this.get('onEditVehicleMaintLocationRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleMaintLocationRecord = this.get('onUndoVehicleMaintLocationRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleMaintLocationRecord,\n          newAction: onNewVehicleMaintLocationRecord,\n          editAction: onEditVehicleMaintLocationRecord,\n          undoAction: onUndoVehicleMaintLocationRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleMaintLocationRecord.description') || '';\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('vehicleMaintLocation.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Maintenance Location description. You must either change the Maintenance Location description on these vehicle(s) or delete these vehicle(s) prior to changing the Maintenance Location description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleMaintLocationObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleMaintLocationObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_maint_locations',\n          type: 'object'\n        };\n        vehicleMaintLocationObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleMaintLocationObj);\n      }\n\n      if (vehicleMaintLocationObj.get('isNew')) {\n        vehicleMaintLocationObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleMaintLocationObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleMaintLocationChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleMaintLocationRecord = this.get('vehicleMaintLocationChangeSet');\n      yield VehicleMaintLocationRecord.validate();\n      const errors = VehicleMaintLocationRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleMaintLocationRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleMaintLocationChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleMaintLocationChangeSet = this.get('vehicleMaintLocationChangeSet');\n      let vehicleMaintLocationRecord = this.get('vehicleMaintLocationChangeSet');\n\n      if (vehicleMaintLocationRecord.get('isNew')) {\n        vehicleMaintLocationRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleMaintLocationChangeSet'));\n        vehicleMaintLocationRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleMaintLocationChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_maint_locations/${id}`;\n        vehicleMaintLocationRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleMaintLocationRecord.set('displayName', description);\n      vehicleMaintLocationRecord.set('description', description);\n      vehicleMaintLocationRecord.set('value', value);\n\n      try {\n        yield vehicleMaintLocationRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleMaintLocationChangeSet.execute();\n        vehicleMaintLocationChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleMaintLocationRecord.rollbackAttributes) {\n          vehicleMaintLocationRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleMaintLocationRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleMaintLocationRecord() {\n      const vehicleMaintLocationChangeSet = this.get('vehicleMaintLocationChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleMaintLocationChangeSet) {\n        vehicleMaintLocationChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleMaintLocationRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleMaintLocationRecord() {\n        return this.onSaveVehicleMaintLocationRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Maintenance Location',\n    defaultSortId: 'description',\n    modelName: 'maintenance-location-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"x0qXyWLJ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleMaintLocationRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Maintenance Location\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleMaintLocationChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleMaintLocationChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleMaintLocationChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-location/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleMaintenanceStatusChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleMaintenanceStatusChangeSet.changes.length', function () {\n      const vehicleMaintenanceStatusChangeSet = this.get('vehicleMaintenanceStatusChangeSet');\n      const changes = vehicleMaintenanceStatusChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleMaintenanceStatusRecord = this.get('onSaveVehicleMaintenanceStatusRecord');\n      const onNewVehicleMaintenanceStatusRecord = this.get('onNewVehicleMaintenanceStatusRecord').bind(this);\n      const onEditVehicleMaintenanceStatusRecord = this.get('onEditVehicleMaintenanceStatusRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleMaintenanceStatusRecord = this.get('onUndoVehicleMaintenanceStatusRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleMaintenanceStatusRecord,\n          newAction: onNewVehicleMaintenanceStatusRecord,\n          editAction: onEditVehicleMaintenanceStatusRecord,\n          undoAction: onUndoVehicleMaintenanceStatusRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleMaintenanceStatusChangeSet.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this MaintenanceStatus\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('maintenanceStatus.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Maintenance Status description. You must either change the Vehicle Maintenance Status description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Maintenance Status description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleMaintenanceStatusObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleMaintenanceStatusObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_maint_statuses',\n          type: 'object'\n        };\n        vehicleMaintenanceStatusObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleMaintenanceStatusObj);\n      }\n\n      if (vehicleMaintenanceStatusObj.get('isNew')) {\n        vehicleMaintenanceStatusObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleMaintenanceStatusObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleMaintenanceStatusChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleMaintenanceStatusRecord = this.get('vehicleMaintenanceStatusChangeSet');\n      yield VehicleMaintenanceStatusRecord.validate();\n      const errors = VehicleMaintenanceStatusRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleMaintenanceStatusRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleMaintenanceStatusChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleMaintenanceStatusChangeSet = this.get('vehicleMaintenanceStatusChangeSet');\n      let vehicleMaintenanceStatusRecord = this.get('vehicleMaintenanceStatusChangeSet');\n\n      if (vehicleMaintenanceStatusRecord.get('isNew')) {\n        vehicleMaintenanceStatusRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleMaintenanceStatusChangeSet'));\n        vehicleMaintenanceStatusRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleMaintenanceStatusChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_maint_statuses/${id}`;\n        vehicleMaintenanceStatusRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleMaintenanceStatusRecord.set('displayName', description);\n      vehicleMaintenanceStatusRecord.set('description', description);\n      vehicleMaintenanceStatusRecord.set('value', value);\n\n      try {\n        yield vehicleMaintenanceStatusRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleMaintenanceStatusChangeSet.execute();\n        vehicleMaintenanceStatusChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleMaintenanceStatusRecord.rollbackAttributes) {\n          vehicleMaintenanceStatusRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleMaintenanceStatusRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleMaintenanceStatusRecord() {\n      const vehicleMaintenanceStatusChangeSet = this.get('vehicleMaintenanceStatusChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleMaintenanceStatusChangeSet) {\n        vehicleMaintenanceStatusChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleMaintenanceStatusRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleMaintenanceStatusRecord() {\n        return this.onSaveVehicleMaintenanceStatusRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Maintenance Status',\n    defaultSortId: 'description',\n    modelName: 'maintenance-status-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"c+qusF4V\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleMaintenanceStatusRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Maintenance Status\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleMaintenanceStatusChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleMaintenanceStatusChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleMaintenanceStatusChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-status/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleMaintTypeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleMaintTypeChangeSet.changes.length', function () {\n      const vehicleMaintTypeChangeSet = this.get('vehicleMaintTypeChangeSet');\n      const changes = vehicleMaintTypeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleMaintTypeNameRecord = this.get('onSaveVehicleMaintTypeNameRecord');\n      const onNewVehicleMaintTypeNameRecord = this.get('onNewVehicleMaintTypeNameRecord').bind(this);\n      const onEditVehicleMaintTypeNameRecord = this.get('onEditVehicleMaintTypeNameRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleMaintTypeNameRecord = this.get('onUndoVehicleMaintTypeNameRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleMaintTypeNameRecord,\n          newAction: onNewVehicleMaintTypeNameRecord,\n          editAction: onEditVehicleMaintTypeNameRecord,\n          undoAction: onUndoVehicleMaintTypeNameRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleMaintTypeChangeSet.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this maintTypeName\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('vehicleMaintTypeName.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Maintenance Type description. You must either change the Vehicle Maintenance Type description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Maintenance Type description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleMaintTypeNameObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleMaintTypeNameObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_maint_types',\n          type: 'object'\n        };\n        vehicleMaintTypeNameObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleMaintTypeNameObj);\n      }\n\n      if (vehicleMaintTypeNameObj.get('isNew')) {\n        vehicleMaintTypeNameObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleMaintTypeNameObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleMaintTypeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleMaintTypeNameRecord = this.get('vehicleMaintTypeChangeSet');\n      yield VehicleMaintTypeNameRecord.validate();\n      const errors = VehicleMaintTypeNameRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleMaintTypeNameRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleMaintTypeChangeSet.description') || '';\n      let scheduled = this.get('vehicleMaintTypeChangeSet.scheduled');\n\n      if (_lodash.default.isUndefined(scheduled)) {\n        scheduled = false;\n      }\n\n      const value = {\n        description: description,\n        scheduled: scheduled\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n\n      const name = _lodash.default.camelCase(nameGuidConverted);\n\n      const vehicleMaintTypeChangeSet = this.get('vehicleMaintTypeChangeSet');\n      let vehicleMaintTypeNameRecord = this.get('vehicleMaintTypeChangeSet');\n\n      if (vehicleMaintTypeNameRecord.get('isNew')) {\n        vehicleMaintTypeNameRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleMaintTypeChangeSet'));\n        vehicleMaintTypeNameRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleMaintTypeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_maint_types/${id}`;\n        vehicleMaintTypeNameRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleMaintTypeNameRecord.set('displayName', description);\n      vehicleMaintTypeNameRecord.set('description', description);\n      vehicleMaintTypeNameRecord.set('value', value);\n\n      try {\n        yield vehicleMaintTypeNameRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleMaintTypeChangeSet.execute();\n        vehicleMaintTypeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleMaintTypeNameRecord.rollbackAttributes) {\n          vehicleMaintTypeNameRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleMaintTypeNameRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleMaintTypeNameRecord() {\n      const vehicleMaintTypeChangeSet = this.get('vehicleMaintTypeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleMaintTypeChangeSet) {\n        vehicleMaintTypeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleMaintTypeNameRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleMaintTypeNameRecord() {\n        return this.onSaveVehicleMaintTypeNameRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Maintenance Type',\n    defaultSortId: 'description',\n    modelName: 'maintenance-type-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 300,\n      searchable: true\n    }, {\n      id: 'scheduled',\n      index: 1,\n      type: 'boolean',\n      label: 'Scheduled',\n      valuePath: 'scheduled',\n      defaultWidth: 150,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"kJjrZgM0\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleMaintTypeNameRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Maintenance Type\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleMaintTypeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleMaintTypeChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleMaintTypeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Scheduled\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"checkbox\\\",[23,[\\\"vehicleMaintTypeChangeSet\\\",\\\"scheduled\\\"]],[23,[\\\"disableForm\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/maint-type/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleManufacturerChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleManufacturerChangeSet.changes.length', function () {\n      const vehicleManufacturerChangeSet = this.get('vehicleManufacturerChangeSet');\n      const changes = vehicleManufacturerChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleManufacturerRecord = this.get('onSaveVehicleManufacturerRecord');\n      const onNewVehicleManufacturerRecord = this.get('onNewVehicleManufacturerRecord').bind(this);\n      const onEditVehicleManufacturerRecord = this.get('onEditVehicleManufacturerRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleManufacturerRecord = this.get('onUndoVehicleManufacturerRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleManufacturerRecord,\n          newAction: onNewVehicleManufacturerRecord,\n          editAction: onEditVehicleManufacturerRecord,\n          undoAction: onUndoVehicleManufacturerRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleManufacturerChangeSet.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this Manufacturer\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('manufacturerName.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Manufacturer description. You must either change the Vehicle Manufacturer description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Manufacturer description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleManufacturerObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleManufacturerObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_manufacturers',\n          type: 'object'\n        };\n        vehicleManufacturerObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleManufacturerObj);\n      }\n\n      if (vehicleManufacturerObj.get('isNew')) {\n        vehicleManufacturerObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleManufacturerObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleManufacturerChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleManufacturerRecord = this.get('vehicleManufacturerChangeSet');\n      yield VehicleManufacturerRecord.validate();\n      const errors = VehicleManufacturerRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleManufacturerRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleManufacturerChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleManufacturerChangeSet = this.get('vehicleManufacturerChangeSet');\n      let vehicleManufacturerRecord = this.get('vehicleManufacturerChangeSet');\n\n      if (vehicleManufacturerRecord.get('isNew')) {\n        vehicleManufacturerRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleManufacturerChangeSet'));\n        vehicleManufacturerRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleManufacturerChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_manufacturers/${id}`;\n        vehicleManufacturerRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleManufacturerRecord.set('displayName', description);\n      vehicleManufacturerRecord.set('description', description);\n      vehicleManufacturerRecord.set('value', value);\n\n      try {\n        yield vehicleManufacturerRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleManufacturerChangeSet.execute();\n        vehicleManufacturerChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleManufacturerRecord.rollbackAttributes) {\n          vehicleManufacturerRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleManufacturerRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleManufacturerRecord() {\n      const vehicleManufacturerChangeSet = this.get('vehicleManufacturerChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleManufacturerChangeSet) {\n        vehicleManufacturerChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleManufacturerRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleManufacturerRecord() {\n        return this.onSaveVehicleManufacturerRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Manufacturer',\n    defaultSortId: 'description',\n    modelName: 'manufacturer-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TjaYp/YB\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleManufacturerRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Manufacturer\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleManufacturerChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleManufacturerChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleManufacturerChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/manufacturer/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    driverPhysicalTypeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('driverPhysicalTypeChangeSet.changes.length', function () {\n      const driverPhysicalTypeChangeSet = this.get('driverPhysicalTypeChangeSet');\n      const changes = driverPhysicalTypeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveDriverPhysicalTypeRecord = this.get('onSaveDriverPhysicalTypeRecord');\n      const onNewDriverPhysicalTypeRecord = this.get('onNewDriverPhysicalTypeRecord').bind(this);\n      const onEditDriverPhysicalTypeRecord = this.get('onEditDriverPhysicalTypeRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoDriverPhysicalTypeRecord = this.get('onUndoDriverPhysicalTypeRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverPhysicalTypeRecord,\n          newAction: onNewDriverPhysicalTypeRecord,\n          refreshTask: refreshTask,\n          editAction: onEditDriverPhysicalTypeRecord,\n          undoAction: onUndoDriverPhysicalTypeRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('driverPhysicalTypeChangeSet.displayName') || '';\n      const driversHealth = store.peekAll('driver-health').filter(record => record.get('driverPhysicalTypeName.displayName') === description);\n\n      if (driversHealth.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${driversHealth.length} active Driver(s) with this Driver Physical Type description. You must either change the Driver Physical Type description on these Driver(s) or delete these Driver(s) prior to changing the Driver Physical Type description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return driversHealth.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let driverPhysicalTypeObj = this.get('pendingRecord');\n\n      if (record) {\n        driverPhysicalTypeObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-driver_physical_types',\n          type: 'object'\n        };\n        driverPhysicalTypeObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', driverPhysicalTypeObj);\n      }\n\n      if (driverPhysicalTypeObj.get('isNew')) {\n        driverPhysicalTypeObj.setProperties({\n          description: null,\n          displayName: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(driverPhysicalTypeObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('driverPhysicalTypeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverPhysicalTypeRecord = this.get('driverPhysicalTypeChangeSet');\n      yield driverPhysicalTypeRecord.validate();\n      const errors = driverPhysicalTypeRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveDriverPhysicalTypeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('driverPhysicalTypeChangeSet.displayName') || '';\n      const value = {\n        displayName: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const driverPhysicalTypeChangeSet = this.get('driverPhysicalTypeChangeSet');\n      let driverPhysicalTypeRecord = this.get('driverPhysicalTypeChangeSet');\n\n      if (driverPhysicalTypeRecord.get('isNew')) {\n        driverPhysicalTypeRecord = (0, _unwrapProxy.unwrapProxy)(this.get('driverPhysicalTypeChangeSet'));\n        driverPhysicalTypeRecord.set('name', name);\n      } else {\n        const id = this.get('driverPhysicalTypeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-driver_physical_types/${id}`;\n        driverPhysicalTypeRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      driverPhysicalTypeRecord.set('displayName', description);\n      driverPhysicalTypeRecord.set('description', description);\n      driverPhysicalTypeRecord.set('value', value);\n\n      try {\n        yield driverPhysicalTypeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        driverPhysicalTypeChangeSet.execute();\n        driverPhysicalTypeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (driverPhysicalTypeRecord.rollbackAttributes) {\n          driverPhysicalTypeRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditDriverPhysicalTypeRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoDriverPhysicalTypeRecord() {\n      const driverPhysicalTypeChangeSet = this.get('driverPhysicalTypeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (driverPhysicalTypeChangeSet) {\n        driverPhysicalTypeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewDriverPhysicalTypeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveDriverPhysicalTypeRecord() {\n        return this.onSaveDriverPhysicalTypeRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver-physical-type-name',\n    title: 'Physical Type',\n    defaultSortId: 'displayName',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'displayName',\n      index: 0,\n      type: 'text',\n      label: 'Physical',\n      valuePath: 'displayName',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"nZxS/LU3\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveDriverPhysicalTypeRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Physical Type\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverPhysicalTypeChangeSet\\\",\\\"error\\\",\\\"displayName\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"driverPhysicalTypeChangeSet\\\",\\\"displayName\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverPhysicalTypeChangeSet\\\"]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/physical-type/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    displayName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    driverPositionChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('driverPositionChangeSet.changes.length', function () {\n      const driverPositionChangeSet = this.get('driverPositionChangeSet');\n      const changes = driverPositionChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveDriverPositionRecord = this.get('onSaveDriverPositionRecord');\n      const onNewDriverPositionRecord = this.get('onNewDriverPositionRecord').bind(this);\n      const onEditDriverPositionRecord = this.get('onEditDriverPositionRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoDriverPositionRecord = this.get('onUndoDriverPositionRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverPositionRecord,\n          newAction: onNewDriverPositionRecord,\n          editAction: onEditDriverPositionRecord,\n          undoAction: onUndoDriverPositionRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          hasRelationship,\n          refreshTask\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('driverPositionChangeSet.displayName') || '';\n      const driverProviders = store.peekAll('driver-provider').filter(record => record.get('driverPositionName.displayName') === description);\n\n      if (driverProviders.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${driverProviders.length} active Driver(s) with this Driver Position description. You must either change the Driver Position description on these Driver(s) or delete these Driver(s) prior to changing the Driver Position description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return driverProviders.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let driverPositionObj = this.get('pendingRecord');\n\n      if (record) {\n        driverPositionObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-driver_positions',\n          type: 'object'\n        };\n        driverPositionObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', driverPositionObj);\n      }\n\n      if (driverPositionObj.get('isNew')) {\n        driverPositionObj.setProperties({\n          description: null,\n          displayName: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(driverPositionObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('driverPositionChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverPositionRecord = this.get('driverPositionChangeSet');\n      yield driverPositionRecord.validate();\n      const errors = driverPositionRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveDriverPositionRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('driverPositionChangeSet.displayName') || '';\n      const value = {\n        displayName: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const driverPositionChangeSet = this.get('driverPositionChangeSet');\n      let driverPositionRecord = this.get('driverPositionChangeSet');\n\n      if (driverPositionRecord.get('isNew')) {\n        driverPositionRecord = (0, _unwrapProxy.unwrapProxy)(this.get('driverPositionChangeSet'));\n        driverPositionRecord.set('name', name);\n      } else {\n        const id = this.get('driverPositionChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-driver_positions/${id}`;\n        driverPositionRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      driverPositionRecord.set('displayName', description);\n      driverPositionRecord.set('description', description);\n      driverPositionRecord.set('value', value);\n\n      try {\n        yield driverPositionRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        driverPositionChangeSet.execute();\n        driverPositionChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (driverPositionRecord.rollbackAttributes) {\n          driverPositionRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditDriverPositionRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoDriverPositionRecord() {\n      const driverPositionChangeSet = this.get('driverPositionChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (driverPositionChangeSet) {\n        driverPositionChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewDriverPositionRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveDriverPositionRecord() {\n        return this.onSaveDriverPositionRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Driver-Position',\n    defaultSortId: 'id',\n    modelName: 'driver-position-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'displayName',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'displayName',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Lvn1whPS\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveDriverPositionRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Position\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverPositionChangeSet\\\",\\\"error\\\",\\\"displayName\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"driverPositionChangeSet\\\",\\\"displayName\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverPositionChangeSet\\\"]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/position/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    displayName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"lodash\", \"adept-iq/config/placeholders\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/validation\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _lodash, _placeholders, _validation, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    problemIdentifiedRecord: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('problemIdentifiedRecord.changes.length', function () {\n      const problemIdentifiedRecord = this.get('problemIdentifiedRecord');\n      const changes = problemIdentifiedRecord.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveProblemIdentifiedRecord = this.get('onSaveProblemIdentifiedRecord');\n      const refreshTask = this.get('refreshTask');\n      const onNewProblemIdentifiedRecord = this.get('onNewProblemIdentifiedRecord').bind(this);\n      const onEditProblemIdentifiedRecord = this.get('onEditProblemIdentifiedRecord').bind(this);\n      const onUndoProblemIdentifiedRecord = this.get('onUndoProblemIdentifiedRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveProblemIdentifiedRecord,\n          newAction: onNewProblemIdentifiedRecord,\n          editAction: onEditProblemIdentifiedRecord,\n          undoAction: onUndoProblemIdentifiedRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        this.get('refreshTask').perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('problemIdentifiedRecord.description') || '';\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('problemIdentified.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasOverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Problem Identified description. You must either change the Problem Identified description on these vehicle(s) or delete these vehicle(s) prior to changing the Problem Identified description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let problemIdentifiedObj = this.get('pendingRecord');\n\n      if (record) {\n        problemIdentifiedObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_problem_identified',\n          type: 'object'\n        };\n        problemIdentifiedObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', problemIdentifiedObj);\n      }\n\n      if (problemIdentifiedObj.get('isNew')) {\n        problemIdentifiedObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(problemIdentifiedObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('problemIdentifiedRecord');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const problemIdentifiedRecord = this.get('problemIdentifiedRecord');\n      yield problemIdentifiedRecord.validate();\n      const errors = problemIdentifiedRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveProblemIdentifiedRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('problemIdentifiedRecord.description') || '';\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const value = {\n        description: description\n      };\n      const problemIdentifiedChangeSet = this.get('problemIdentifiedRecord');\n      let problemIdentifiedRecord = this.get('problemIdentifiedRecord');\n\n      if (problemIdentifiedRecord.get('isNew')) {\n        problemIdentifiedRecord = (0, _unwrapProxy.unwrapProxy)(this.get('problemIdentifiedRecord'));\n        problemIdentifiedRecord.set('name', name);\n      } else {\n        const id = this.get('problemIdentifiedRecord.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_problem_identified/${id}`;\n        problemIdentifiedRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      problemIdentifiedRecord.set('displayName', description);\n      problemIdentifiedRecord.set('description', description);\n      problemIdentifiedRecord.set('value', value);\n\n      try {\n        yield problemIdentifiedRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        problemIdentifiedChangeSet.execute();\n        problemIdentifiedChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditProblemIdentifiedRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoProblemIdentifiedRecord() {\n      const problemIdentifiedRecord = this.get('problemIdentifiedRecord');\n      const editAPI = this.get('editAPI');\n\n      if (problemIdentifiedRecord) {\n        problemIdentifiedRecord.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewProblemIdentifiedRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRecord');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveProblemIdentifiedRecord() {\n        return this.onSaveProblemIdentifiedRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Problem Identified',\n    defaultSortId: 'description',\n    modelName: 'problem-identified-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1TJZ7OeE\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveProblemIdentifiedRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Problem Identified\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"problemIdentifiedRecord\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"problemIdentifiedRecord\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"problemIdentifiedRecord\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/problem-identified/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    rearAxelChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('rearAxelChangeSet.changes.length', function () {\n      const rearAxelChangeSet = this.get('rearAxelChangeSet');\n      const changes = rearAxelChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleRearAxelNameRecord = this.get('onSaveVehicleRearAxelNameRecord');\n      const refreshTask = this.get('refreshTask');\n      const onNewVehicleRearAxelNameRecord = this.get('onNewVehicleRearAxelNameRecord').bind(this);\n      const onEditVehicleRearAxelNameRecord = this.get('onEditVehicleRearAxelNameRecord').bind(this);\n      const onUndoVehicleRearAxelNameRecord = this.get('onUndoVehicleRearAxelNameRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n\n      const hasRelationship = () => false;\n\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleRearAxelNameRecord,\n          newAction: onNewVehicleRearAxelNameRecord,\n          editAction: onEditVehicleRearAxelNameRecord,\n          undoAction: onUndoVehicleRearAxelNameRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          hasRelationship,\n          refreshTask\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let rearAxelObj = this.get('pendingRecord');\n\n      if (record) {\n        rearAxelObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_rear_axels',\n          type: 'object'\n        };\n        rearAxelObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', rearAxelObj);\n      }\n\n      if (rearAxelObj.get('isNew')) {\n        rearAxelObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(rearAxelObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('rearAxelChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleRearAxelNameRecord = this.get('rearAxelChangeSet');\n      yield vehicleRearAxelNameRecord.validate();\n      const errors = vehicleRearAxelNameRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleRearAxelNameRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('rearAxelChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const rearAxelChangeSet = this.get('rearAxelChangeSet');\n      let vehicleRearAxelNameRecord = this.get('rearAxelChangeSet');\n\n      if (vehicleRearAxelNameRecord.get('isNew')) {\n        vehicleRearAxelNameRecord = (0, _unwrapProxy.unwrapProxy)(this.get('rearAxelChangeSet'));\n        vehicleRearAxelNameRecord.set('name', name);\n      } else {\n        const id = this.get('rearAxelChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_rear_axels/${id}`;\n        vehicleRearAxelNameRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleRearAxelNameRecord.set('displayName', description);\n      vehicleRearAxelNameRecord.set('description', description);\n      vehicleRearAxelNameRecord.set('value', value);\n\n      try {\n        yield vehicleRearAxelNameRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        rearAxelChangeSet.execute();\n        rearAxelChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleRearAxelNameRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleRearAxelNameRecord() {\n      const rearAxelChangeSet = this.get('rearAxelChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (rearAxelChangeSet) {\n        rearAxelChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleRearAxelNameRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleRearAxelNameRecord() {\n        return this.onSaveVehicleRearAxelNameRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Rear Axle',\n    defaultSortId: 'description',\n    modelName: 'rear-axel-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"yI+e0ujN\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleRearAxelNameRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Rear Axle\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"rearAxelChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"rearAxelChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"rearAxelChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"                                                              \\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/rear-axel/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/validation\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    CODE_PLACEHOLDER: _placeholders.CODE_PLACEHOLDER,\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    code: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleRoadCallCodeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleRoadCallCodeChangeSet.changes.length', function () {\n      const vehicleRoadCallCodeChangeSet = this.get('vehicleRoadCallCodeChangeSet');\n      const changes = vehicleRoadCallCodeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleRoadCallCodeRecord = this.get('onSaveVehicleRoadCallCodeRecord');\n      const onNewVehicleRoadCallCodeRecord = this.get('onNewVehicleRoadCallCodeRecord').bind(this);\n      const onEditVehicleRoadCallCodeRecord = this.get('onEditVehicleRoadCallCodeRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleRoadCallCodeRecord = this.get('onUndoVehicleRoadCallCodeRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleRoadCallCodeRecord,\n          newAction: onNewVehicleRoadCallCodeRecord,\n          editAction: onEditVehicleRoadCallCodeRecord,\n          undoAction: onUndoVehicleRoadCallCodeRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleRoadCallCodeChangeSet.description') || '';\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('roadCallCode.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Road Call Code description. You must either change the Vehicle Road Call Code description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Road Call Code description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleRoadCallCodeNameObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleRoadCallCodeNameObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_road_call_codes',\n          type: 'object'\n        };\n        vehicleRoadCallCodeNameObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleRoadCallCodeNameObj);\n      }\n\n      if (vehicleRoadCallCodeNameObj.get('isNew')) {\n        vehicleRoadCallCodeNameObj.setProperties({\n          code: null,\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleRoadCallCodeNameObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleRoadCallCodeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleRoadCallCodeRecord = this.get('vehicleRoadCallCodeChangeSet');\n      yield VehicleRoadCallCodeRecord.validate();\n      const errors = VehicleRoadCallCodeRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleRoadCallCodeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const code = this.get('vehicleRoadCallCodeChangeSet.code') || '';\n      const description = this.get('vehicleRoadCallCodeChangeSet.description') || '';\n      const value = {\n        description: description,\n        code: code\n      };\n      const vehicleRoadCallCodeChangeSet = this.get('vehicleRoadCallCodeChangeSet');\n      let vehicleRoadCallCodeRecord = this.get('vehicleRoadCallCodeChangeSet');\n\n      if (vehicleRoadCallCodeRecord.get('isNew')) {\n        vehicleRoadCallCodeRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleRoadCallCodeChangeSet'));\n        vehicleRoadCallCodeRecord.set('name', code);\n      } else {\n        const id = this.get('vehicleRoadCallCodeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_road_call_codes/${id}`;\n        vehicleRoadCallCodeRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleRoadCallCodeRecord.set('description', description);\n      vehicleRoadCallCodeRecord.set('code', code);\n      vehicleRoadCallCodeRecord.set('value', value);\n\n      try {\n        yield vehicleRoadCallCodeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleRoadCallCodeChangeSet.execute();\n        vehicleRoadCallCodeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Code cannot duplicate an existing Code.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleRoadCallCodeRecord.rollbackAttributes) {\n          vehicleRoadCallCodeRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleRoadCallCodeRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleRoadCallCodeRecord() {\n      const vehicleRoadCallCodeChangeSet = this.get('vehicleRoadCallCodeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleRoadCallCodeChangeSet) {\n        vehicleRoadCallCodeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleRoadCallCodeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleRoadCallCodeRecord() {\n        return this.onSaveVehicleRoadCallCodeRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Road Call',\n    defaultSortId: 'code',\n    modelName: 'road-call-code-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'code',\n      index: 0,\n      type: 'text',\n      label: 'Code',\n      valuePath: 'code',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 1,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ykCuCDVl\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleRoadCallCodeRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2 vehicle-2col-lookup\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Road Call\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto col-1\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Code\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 col-5-description\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleRoadCallCodeChangeSet\\\",\\\"error\\\",\\\"code\\\"]],\\\"error\\\"],null],[23,[\\\"CODE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"25\\\"]]],[23,[\\\"vehicleRoadCallCodeChangeSet\\\",\\\"code\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRoadCallCodeChangeSet\\\"]],\\\"code\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto col-1\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleRoadCallCodeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleRoadCallCodeChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRoadCallCodeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/road-call-code/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    code: [(0, _validators.validatePresence)({\n      presence: true,\n      code: 'Code',\n      message: '{code} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Code cannot duplicate an existing Code.'\n    })],\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleStatusChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleStatusChangeSet.changes.length', function () {\n      const vehicleStatusChangeSet = this.get('vehicleStatusChangeSet');\n      const changes = vehicleStatusChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleStatusRecord = this.get('onSaveVehicleStatusRecord');\n      const onNewVehicleStatusRecord = this.get('onNewVehicleStatusRecord').bind(this);\n      const onEditVehicleStatusRecord = this.get('onEditVehicleStatusRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleStatusRecord = this.get('onUndoVehicleStatusRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleStatusRecord,\n          newAction: onNewVehicleStatusRecord,\n          editAction: onEditVehicleStatusRecord,\n          undoAction: onUndoVehicleStatusRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        this.get('refreshTask').perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleStatusChangeSet.description') || '';\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('vehicleStatusName.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Status description. You must either change the Status description on these vehicle(s) or delete these vehicle(s) prior to changing the Status description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleStatusObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleStatusObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_statuses',\n          type: 'object'\n        };\n        vehicleStatusObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleStatusObj);\n      }\n\n      if (vehicleStatusObj.get('isNew')) {\n        vehicleStatusObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleStatusObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleStatusChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleStatusRecord = this.get('vehicleStatusChangeSet');\n      yield VehicleStatusRecord.validate();\n      const errors = VehicleStatusRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleStatusRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleStatusChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleStatusChangeSet = this.get('vehicleStatusChangeSet');\n      let vehicleStatusRecord = this.get('vehicleStatusChangeSet');\n\n      if (vehicleStatusRecord.get('isNew')) {\n        vehicleStatusRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleStatusChangeSet'));\n        vehicleStatusRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleStatusChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_statuses/${id}`;\n        vehicleStatusRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleStatusRecord.set('displayName', description);\n      vehicleStatusRecord.set('description', description);\n      vehicleStatusRecord.set('value', value);\n\n      try {\n        yield vehicleStatusRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleStatusChangeSet.execute();\n        vehicleStatusChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleStatusRecord.rollbackAttributes) {\n          vehicleStatusRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleStatusRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleStatusRecord() {\n      const vehicleStatusChangeSet = this.get('vehicleStatusChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleStatusChangeSet) {\n        vehicleStatusChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleStatusRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleStatusRecord() {\n        return this.onSaveVehicleStatusRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Status',\n    defaultSortId: 'description',\n    modelName: 'vehicle-status-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"u6PA7XwT\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleStatusRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Status\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleStatusChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleStatusChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleStatusChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/status/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['driver-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    driverTerminationChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('driverTerminationChangeSet.changes.length', function () {\n      const driverTerminationChangeSet = this.get('driverTerminationChangeSet');\n      const changes = driverTerminationChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveDriverTerminationRecord = this.get('onSaveDriverTerminationRecord');\n      const onNewDriverTerminationRecord = this.get('onNewDriverTerminationRecord').bind(this);\n      const onEditDriverTerminationRecord = this.get('onEditDriverTerminationRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoDriverTerminationRecord = this.get('onUndoDriverTerminationRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDriverTerminationRecord,\n          newAction: onNewDriverTerminationRecord,\n          editAction: onEditDriverTerminationRecord,\n          undoAction: onUndoDriverTerminationRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        this.get('refreshTask').perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('driverTerminationChangeSet.description') || '';\n      const driverProviders = store.peekAll('driver-provider').filter(record => record.get('terminationReasonName.description') === description);\n\n      if (driverProviders.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${driverProviders.length} active Driver(s) with this Driver Termination description. You must either change the Driver Termination description on these Driver(s) or delete these Driver(s) prior to changing the Driver Termination description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return driverProviders.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let driverTerminationObj = this.get('pendingRecord');\n\n      if (record) {\n        driverTerminationObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-termination_reasons',\n          type: 'object'\n        };\n        driverTerminationObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', driverTerminationObj);\n      }\n\n      if (driverTerminationObj.get('isNew')) {\n        driverTerminationObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(driverTerminationObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('driverTerminationChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const driverTerminationRecord = this.get('driverTerminationChangeSet');\n      yield driverTerminationRecord.validate();\n      const errors = driverTerminationRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Driver',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveDriverTerminationRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('driverTerminationChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const driverTerminationChangeSet = this.get('driverTerminationChangeSet');\n      let driverTerminationRecord = this.get('driverTerminationChangeSet');\n\n      if (driverTerminationRecord.get('isNew')) {\n        driverTerminationRecord = (0, _unwrapProxy.unwrapProxy)(this.get('driverTerminationChangeSet'));\n        driverTerminationRecord.set('name', name);\n      } else {\n        const id = this.get('driverTerminationChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-termination_reasons/${id}`;\n        driverTerminationRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      driverTerminationRecord.set('displayName', description);\n      driverTerminationRecord.set('description', description);\n      driverTerminationRecord.set('value', value);\n\n      try {\n        yield driverTerminationRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        driverTerminationChangeSet.execute();\n        driverTerminationChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (driverTerminationRecord.rollbackAttributes) {\n          driverTerminationRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditDriverTerminationRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoDriverTerminationRecord() {\n      const driverTerminationChangeSet = this.get('driverTerminationChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (driverTerminationChangeSet) {\n        driverTerminationChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewDriverTerminationRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveDriverTerminationRecord() {\n        return this.onSaveDriverTerminationRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Termination-reason',\n    defaultSortId: 'description',\n    modelName: 'termination-reason-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"aDBJgqCK\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveDriverTerminationRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Termination Reason\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"driverTerminationChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"driverTerminationChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"driverTerminationChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/termination-reason/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleTireSizeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleTireSizeChangeSet.changes.length', function () {\n      const vehicleTireSizeChangeSet = this.get('vehicleTireSizeChangeSet');\n      const changes = vehicleTireSizeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleTireSizeRecord = this.get('onSaveVehicleTireSizeRecord');\n      const onNewVehicleTireSizeRecord = this.get('onNewVehicleTireSizeRecord').bind(this);\n      const onEditVehicleTireSizeRecord = this.get('onEditVehicleTireSizeRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleTireSizeRecord = this.get('onUndoVehicleTireSizeRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleTireSizeRecord,\n          newAction: onNewVehicleTireSizeRecord,\n          editAction: onEditVehicleTireSizeRecord,\n          undoAction: onUndoVehicleTireSizeRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        this.get('refreshTask').perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleTireSizeChangeSet.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this maintTypeName\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleTireSizeName.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Vehicle Tire Size description. You must either change the Vehicle Tire Size description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Tire Size description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleTireSizeObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleTireSizeObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_tire-sizes',\n          type: 'object'\n        };\n        vehicleTireSizeObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleTireSizeObj);\n      }\n\n      if (vehicleTireSizeObj.get('isNew')) {\n        vehicleTireSizeObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleTireSizeObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleTireSizeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleTireSizeRecord = this.get('vehicleTireSizeChangeSet');\n      yield VehicleTireSizeRecord.validate();\n      const errors = VehicleTireSizeRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleTireSizeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleTireSizeChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const vehicleTireSizeChangeSet = this.get('vehicleTireSizeChangeSet');\n      let vehicleTireSizeRecord = this.get('vehicleTireSizeChangeSet');\n\n      if (vehicleTireSizeRecord.get('isNew')) {\n        vehicleTireSizeRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleTireSizeChangeSet'));\n        vehicleTireSizeRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleTireSizeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_tire-sizes/${id}`;\n        vehicleTireSizeRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleTireSizeRecord.set('displayName', description);\n      vehicleTireSizeRecord.set('description', description);\n      vehicleTireSizeRecord.set('value', value);\n\n      try {\n        yield vehicleTireSizeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleTireSizeChangeSet.execute();\n        vehicleTireSizeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleTireSizeRecord.rollbackAttributes) {\n          vehicleTireSizeRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleTireSizeRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleTireSizeRecord() {\n      const vehicleTireSizeChangeSet = this.get('vehicleTireSizeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleTireSizeChangeSet) {\n        vehicleTireSizeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleTireSizeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleTireSizeRecord() {\n        return this.onSaveVehicleTireSizeRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Tire Size',\n    defaultSortId: 'description',\n    modelName: 'vehicle-tire-size',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"2cn1dmeM\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/table\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"tableRef\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleTireSizeRecord\\\"],null],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Tire Size\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleTireSizeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleTireSizeChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleTireSizeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/tire-size/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Global Placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleTransmissionChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleTransmissionChangeSet.changes.length', function () {\n      const vehicleTransmissionChangeSet = this.get('vehicleTransmissionChangeSet');\n      const changes = vehicleTransmissionChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleTransmissionRecord = this.get('onSaveVehicleTransmissionRecord');\n      const onNewVehicleTransmissionRecord = this.get('onNewVehicleTransmissionRecord').bind(this);\n      const onEditVehicleTransmissionRecord = this.get('onEditVehicleTransmissionRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleTransmissionRecord = this.get('onUndoVehicleTransmissionRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleTransmissionRecord,\n          newAction: onNewVehicleTransmissionRecord,\n          editAction: onEditVehicleTransmissionRecord,\n          undoAction: onUndoVehicleTransmissionRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          hasRelationship,\n          refreshTask\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleTransmissionChangeSet.description') || '';\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('vehicleTransmission.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle(s) with this Transmission Type description. You must either change the Transmission Type description on these vehicle(s) or delete these vehicle(s) prior to changing the Transmission Type description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let vehicleTransmissionObj = this.get('pendingRecord');\n\n      if (record) {\n        vehicleTransmissionObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_transmission_types',\n          type: 'object'\n        };\n        vehicleTransmissionObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', vehicleTransmissionObj);\n      }\n\n      if (vehicleTransmissionObj.get('isNew')) {\n        vehicleTransmissionObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(vehicleTransmissionObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleTransmissionChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const VehicleTransmissionRecord = this.get('vehicleTransmissionChangeSet');\n      yield VehicleTransmissionRecord.validate();\n      const errors = VehicleTransmissionRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleTransmissionRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('vehicleTransmissionChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const vehicleTransmissionChangeSet = this.get('vehicleTransmissionChangeSet');\n      let vehicleTransmissionRecord = this.get('vehicleTransmissionChangeSet');\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n\n      if (vehicleTransmissionRecord.get('isNew')) {\n        vehicleTransmissionRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleTransmissionChangeSet'));\n        vehicleTransmissionRecord.set('name', name);\n      } else {\n        const id = this.get('vehicleTransmissionChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_transmission_types/${id}`;\n        vehicleTransmissionRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleTransmissionRecord.set('displayName', description);\n      vehicleTransmissionRecord.set('description', description);\n      vehicleTransmissionRecord.set('value', value);\n\n      try {\n        yield vehicleTransmissionRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleTransmissionChangeSet.execute();\n        vehicleTransmissionChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleTransmissionRecord.rollbackAttributes) {\n          vehicleTransmissionRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleTransmissionRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleTransmissionRecord() {\n      const vehicleTransmissionChangeSet = this.get('vehicleTransmissionChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleTransmissionChangeSet) {\n        vehicleTransmissionChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleTransmissionRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleTransmissionRecord() {\n        return this.onSaveVehicleTransmissionRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Transmission',\n    defaultSortId: 'description',\n    modelName: 'vehicle-transmission',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vDvBeWZR\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleTransmissionRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Transmission\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleTransmissionChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleTransmissionChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleTransmissionChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/transmission/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/validation\", \"adept-iq/utils/generate-unique-id\", \"adept-iq/config/placeholders\", \"lodash\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _generateUniqueId, _placeholders, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_FACTORY_VALUES = ['Ambulatory', 'Wheelchair'];\n  const NAME_PLACEHOLDER = 'Name';\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-capacity-type-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    NUMBER_PERCENT_PLACEHOLDER: _placeholders.NUMBER_PERCENT_PLACEHOLDER,\n    NAME_PLACEHOLDER,\n    DISPLAY_NAME_PLACEHOLDER: _placeholders.DISPLAY_NAME_PLACEHOLDER,\n    // default factory values\n    DEFAULT_FACTORY_VALUES,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    disableNameField: true,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleCapacityTypeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    isFactoryDefaultValues: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      if (!record) return false;\n      return DEFAULT_FACTORY_VALUES.some(value => value === record.get('displayName'));\n    }),\n    isAmbulatory: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      if (!record) return false;\n      return record.get('displayName') === 'Ambulatory';\n    }),\n    hasPendingChanges: Ember.computed('vehicleCapacityTypeChangeSet.changes.length', function () {\n      const vehicleCapacityTypeChangeSet = this.get('vehicleCapacityTypeChangeSet');\n      const changes = vehicleCapacityTypeChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleCapacityTypeRecord = this.get('onSaveVehicleCapacityTypeRecord');\n      const onNewVehicleCapacityTypeRecord = this.get('onNewVehicleCapacityTypeRecord').bind(this);\n      const onEditVehicleCapacityTypeRecord = this.get('onEditVehicleCapacityTypeRecord').bind(this);\n      const onDeleteVehicleCapacityTypeRecord = this.get('onDeleteVehicleCapacityTypeRecord');\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleCapacityTypeRecord = this.get('onUndoVehicleCapacityTypeRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleCapacityTypeRecord,\n          newAction: onNewVehicleCapacityTypeRecord,\n          deleteAction: onDeleteVehicleCapacityTypeRecord,\n          editAction: onEditVehicleCapacityTypeRecord,\n          undoAction: onUndoVehicleCapacityTypeRecord,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('CapacityTypeRecord.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this maintTypeName\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('CapacityType.description') === description);\n\n      if (vehicle.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Maintenance Type description. You must either change the Vehicle Maintenance Type description on these vehicle(s) or delete these vehicle(s) prior to changing the Vehicle Maintenance Type description.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicle.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let CapacityTypeObj = this.get('pendingRecord');\n\n      if (record) {\n        CapacityTypeObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_capacity_types',\n          type: 'object'\n        };\n        CapacityTypeObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', CapacityTypeObj);\n      }\n\n      if (CapacityTypeObj.get('isNew')) {\n        CapacityTypeObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(CapacityTypeObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleCapacityTypeChangeSet');\n      const vehicleCapacityTypes = this.get('store').peekAll('vehicle-capacity-type');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      this.set('vehicleCapacityTypes', vehicleCapacityTypes);\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n\n      if (tableRef) {\n        Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n\n        if (tableRef.get('table.rows').length) {\n          this.get('tableRef.firstRowSelectedTask').perform();\n        }\n      }\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n\n        if (this.get('isFactoryDefaultValues')) {\n          editAPI.buttonSettings(true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleCapacityTypeRecord = this.get('vehicleCapacityTypeChangeSet');\n      yield vehicleCapacityTypeRecord.validate();\n      const errors = vehicleCapacityTypeRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    vehicleCapacityEngineIdHash: Ember.computed('vehicleCapacityTypes.@each.engineId', function () {\n      const vehicleCapacityTypes = this.get('vehicleCapacityTypes') || [];\n      return vehicleCapacityTypes.reduce((acu, capacity) => {\n        acu[capacity.get('engineId')] = true;\n        return acu;\n      }, {});\n    }),\n    onSaveVehicleCapacityTypeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const vehicleCapacityTypeChangeSet = this.get('vehicleCapacityTypeChangeSet');\n      const tooltip = this.get('tooltip');\n      if (!isValid) return;\n      let vehicleCapacityTypeRecord = this.get('vehicleCapacityTypeChangeSet');\n      const {\n        description,\n        displayName,\n        constrainedByLIFO,\n        dwellFactor\n      } = vehicleCapacityTypeRecord.getProperties('description', 'displayName', 'constrainedByLIFO', 'dwellFactor');\n      const notifications = this.get('notifications');\n      const usedChars = this.get('vehicleCapacityEngineIdHash'); // Passing the unique engineid\n\n      const engineId = vehicleCapacityTypeRecord.get('engineId') || (0, _generateUniqueId.uniqueId)(1, {\n        usedChars\n      }); // Dwell Factory Number\n\n      const parsedDwellFactor = !isNaN(parseInt(dwellFactor, 10)) ? parseInt(dwellFactor, 10) : 0;\n      const value = {\n        description,\n        engineId: engineId,\n        engineName: displayName.replace(/\\s/img, '').toLowerCase(),\n        displayName,\n        dwellFactor: parsedDwellFactor,\n        constrainedByLIFO: constrainedByLIFO || false\n      };\n\n      if (vehicleCapacityTypeRecord.get('isNew')) {\n        vehicleCapacityTypeRecord.set('name', (0, _lodash.camelCase)(displayName));\n      } else {\n        const id = this.get('vehicleCapacityTypeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_capacity_types/${id}`;\n        vehicleCapacityTypeRecord = store.peekRecord('cs-config-item', record);\n        vehicleCapacityTypeRecord.set('displayName', displayName);\n      }\n\n      vehicleCapacityTypeRecord.set('value', value);\n\n      try {\n        yield vehicleCapacityTypeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleCapacityTypeChangeSet.execute();\n        vehicleCapacityTypeChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        this.set('disableForm', true);\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleCapacityTypeRecord.rollbackAttributes) {\n          vehicleCapacityTypeRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n    deleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRow = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      const notifications = this.get('notifications');\n      const store = this.get('store');\n      const csConfigVehicleCapacityTypeId = `config-System_Configuration-vehicle_capacity_types/${selectedRow.get('id')}`;\n\n      if (selectedRow) {\n        try {\n          const csConfigVehicleCapacityType = store.peekRecord('cs-config-item', csConfigVehicleCapacityTypeId); // delete config-vehicle_capacity_types in cs-config-item\n\n          yield csConfigVehicleCapacityType.destroyRecord().then(cs => {\n            store._removeFromIdMap(cs._internalModel);\n          }); // delete vehicle capacity type record from store\n\n          yield selectedRow.destroyRecord().then(cs => {\n            store._removeFromIdMap(cs._internalModel);\n          });\n          notifications.success('Lookup record successfully deleted.');\n          this.get('refreshTask').perform().then(() => {\n            Ember.run.later(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n            }, 500);\n          });\n        } catch (e) {\n          notifications.warning('Lookup record failed to delete.');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }).drop(),\n    onDeleteVehicleCapacityTypeRecord: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const deleteRecord = this.get('deleteRecord');\n      yield tooltip.pushConfirmation({\n        title: 'Lookup',\n        hasOverlay: true,\n        tip: 'Are you sure you want to delete this record?',\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          const store = this.get('store');\n          const vehicleCapacityTypeName = this.get('vehicleCapacityTypeChangeSet.name') || null;\n          const configType = 'config-System_Configuration-vehicle_capacity_configs';\n\n          if (vehicleCapacityTypeName) {\n            const vehicleCapacityTypeRecords = store.peekAll('cs-config-item').filter(configItem => {\n              return configItem.category === configType;\n            });\n            const capacityConfigs = vehicleCapacityTypeRecords.filter(record => record.get('value').vehicleCapacityType === vehicleCapacityTypeName);\n\n            if (capacityConfigs.length) {\n              return tooltip.pushConfirmation({\n                title: 'Manage Vehicle Type',\n                hasOverlay: true,\n                tip: `There are ${capacityConfigs.length} active Vehicle Type(s)  with this Vehicle Capacity Type name. You must either change the Vehicle Capacity Type on these Vehicle Type(s)  or delete these Vehicle Type(s) prior to deleting the Vehicle Capacity Type.`,\n                primaryActionText: 'OK',\n\n                primaryAction() {\n                  tooltip.reset();\n                }\n\n              });\n            }\n\n            return deleteRecord.perform().then(() => {\n              tooltip.reset();\n            });\n          }\n        },\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        }\n\n      });\n    }).drop(),\n\n    onEditVehicleCapacityTypeRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleCapacityTypeRecord() {\n      const vehicleCapacityTypeChangeSet = this.get('vehicleCapacityTypeChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleCapacityTypeChangeSet) {\n        vehicleCapacityTypeChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleCapacityTypeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleCapacityTypeRecord() {\n        return this.onSaveVehicleCapacityTypeRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onInputMaskValueChange(record, valuePath, useMaskVal, maskObj) {\n        if (useMaskVal) return record.set(valuePath, maskObj.masked.replace(/_/im, ''));\n        return record.set(valuePath, maskObj.unmasked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Vehicle Capacity Type',\n    defaultSortId: 'description',\n    modelName: 'vehicle-capacity-type',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'displayName',\n      index: 2,\n      type: 'text',\n      label: 'Display Name',\n      valuePath: 'displayName',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'name',\n      index: 3,\n      type: 'text',\n      label: 'Name',\n      valuePath: 'name',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'constrainedLIFO',\n      index: 4,\n      type: 'boolean',\n      label: 'Constrained By LIFO',\n      valuePath: 'constrainedByLIFO',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'dwellFactor',\n      index: 5,\n      type: 'number',\n      label: 'Dwell Factor',\n      valuePath: 'dwellFactor',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 6,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"PHlSQFQb\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleCapacityTypeRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"vehicle-capacity-type-panel\\\",\\\"Vehicle Capacity Type\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Display Name\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"error\\\",\\\"displayName\\\"]],\\\"error\\\"],null],[23,[\\\"DISPLAY_NAME_PLACEHOLDER\\\"]],[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"displayName\\\"]],[27,\\\"or\\\",[[23,[\\\"disableForm\\\"]],[23,[\\\"isFactoryDefaultValues\\\"]]],null],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\"],[\\\"20\\\",false]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleCapacityTypeChangeSet\\\"]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\"],[[23,[\\\"NAME_PLACEHOLDER\\\"]],[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"name\\\"]],[23,[\\\"disableNameField\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Constrained by LIFO\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"checkbox\\\",[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"constrainedByLIFO\\\"]],[27,\\\"or\\\",[[23,[\\\"disableForm\\\"]],[23,[\\\"isAmbulatory\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Dwell Factor\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"options\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"error\\\",\\\"dwellFactor\\\"]],\\\"error\\\"],null],[23,[\\\"NUMBER_PERCENT_PLACEHOLDER\\\"]],\\\"9[9][9]%\\\",[27,\\\"hash\\\",null,[[\\\"showMaskOnHover\\\",\\\"showMaskOnFocus\\\"],[false,false]]],[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"dwellFactor\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputMaskValueChange\\\",[23,[\\\"vehicleCapacityTypeChangeSet\\\"]],\\\"dwellFactor\\\",false],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleCapacityTypeChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleCapacityTypeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-capacity-type/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })],\n    displayName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Display Name',\n      message: '{description} is required'\n    })],\n    dwellFactor: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Dwell Factor',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-capacity-type-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    description: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleModelChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleModelChangeSet.changes.length', function () {\n      const vehicleModelChangeSet = this.get('vehicleModelChangeSet');\n      const changes = vehicleModelChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleModelRecord = this.get('onSaveVehicleModelRecord');\n      const onNewVehicleModelRecord = this.get('onNewVehicleModelRecord').bind(this);\n      const onEditVehicleModelRecord = this.get('onEditVehicleModelRecord').bind(this);\n      const refreshTask = this.get('refreshTask');\n      const onUndoVehicleModelRecord = this.get('onUndoVehicleModelRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      const hasRelationship = this.get('hasRelationship').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleModelRecord,\n          newAction: onNewVehicleModelRecord,\n          editAction: onEditVehicleModelRecord,\n          undoAction: onUndoVehicleModelRecord,\n          deleteAction: null,\n          onValidateAction,\n          hasChanges,\n          refreshTask,\n          hasRelationship\n        });\n        refreshTask.perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    hasRelationship() {\n      const store = this.get('store');\n      const tooltip = this.get('tooltip');\n      const description = this.get('vehicleModelRecord.description') || ''; // in the future we should actually use an rql query to figure out which vehicles are using this maintTypeName\n      // and have the backend process it for us, currently and name field and description can be different though,\n      // so we might need to think about it this a bit more\n\n      const vehicleTypes = store.peekAll('vehicle-type').filter(record => record.get('active') && record.get('vehicleModel.description') === description);\n\n      if (vehicleTypes.length) {\n        tooltip.pushConfirmation({\n          title: 'Lookup',\n          hasoverlay: true,\n          tip: `There are ${vehicleTypes.length} active vehicle types with this Vehicle Model. You must either change the Vehicle Model description on these vehicle type(s) or delete these vehicle type(s) prior to changing the Vehicle Model.`,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n      return vehicleTypes.length;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let modelObj = this.get('pendingRecord');\n\n      if (record) {\n        modelObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_models',\n          type: 'object'\n        };\n        modelObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', modelObj);\n      }\n\n      if (modelObj.get('isNew')) {\n        modelObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(modelObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleModelChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleModelRecord = this.get('vehicleModelChangeSet');\n      yield vehicleModelRecord.validate();\n      const errors = vehicleModelRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Lookup',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleModelRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const vehicleModelChangeSet = this.get('vehicleModelChangeSet');\n      let vehicleModelRecord = this.get('vehicleModelChangeSet');\n      const description = vehicleModelRecord.get('description');\n      const notifications = this.get('notifications');\n      const value = {\n        description\n      };\n\n      if (vehicleModelRecord.get('isNew')) {\n        const nameGuidConverted = `${description}-${activityIdGuid}`;\n        const name = (0, _lodash.camelCase)(nameGuidConverted);\n        vehicleModelRecord.set('name', name);\n        value.name = (0, _lodash.camelCase)(name);\n      } else {\n        const id = this.get('vehicleModelChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_models/${id}`;\n        vehicleModelRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleModelRecord.set('value', value);\n\n      try {\n        yield vehicleModelRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        vehicleModelChangeSet.execute();\n        vehicleModelChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        this.set('disableForm', true);\n        this.set('pendingRecord', null);\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        if (vehicleModelRecord.rollbackAttributes) {\n          vehicleModelRecord.rollbackAttributes();\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditVehicleModelRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleModelRecord() {\n      const vehicleModelChangeSet = this.get('vehicleModelChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (vehicleModelChangeSet) {\n        vehicleModelChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewVehicleModelRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleModelRecord() {\n        return this.onSaveVehicleModelRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Vehicle Models',\n    defaultSortId: 'description',\n    modelName: 'vehicle-model-name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"V++984dV\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleModelRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"vehicle-capacity-type-panel\\\",\\\"Vehicle Model\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleModelChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleModelChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleModelChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-model/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-group-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-group-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = this.get('source') || [];\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(cap => cap.isSoftDeleted !== true);\n      return filteredData;\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-group-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Capacity Configuration Groups',\n    defaultSortId: 'details',\n    defaultSortAsc: true,\n    selectFirstConfigRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'group',\n      index: 0,\n      type: 'number',\n      label: 'Group',\n      valuePath: 'group',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'details',\n      index: 1,\n      type: 'enum',\n      label: 'Configuration',\n      valuePath: 'details',\n      mapValuePath: 'configurationSortKey',\n      defaultWidth: 200,\n      searchable: true,\n      cellDesc: 'Configurations'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/component\", [\"exports\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/validation\", \"ember-concurrency\"], function (_exports, _emberChangeset, _emberChangesetValidations, _validation, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DROPDOWN_MODELS = [{\n    optionName: 'vehicleCapacityTypeOptions',\n    modelName: 'vehicle-capacity-type'\n  }];\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    tableRef: null,\n    modalAPI: null,\n    group: null,\n    newCapacity: null,\n    newConfigurationAction: null,\n    disableConfigActions: false,\n    disableAdditionalBtn: false,\n    // capacityTypeSet: null,\n    capacities: Ember.computed.alias('modalAPI.selectedCapacityGroup.capacities'),\n    vehicleTypeChangeSet: Ember.computed.readOnly('modalAPI.vehicleTypeChangeSet'),\n    capacityGroupSet: Ember.computed.readOnly('modalAPI.capacityGroupSet'),\n    title: Ember.computed.readOnly('modalAPI.title'),\n    hasOverlay: Ember.computed.readOnly('modalAPI.hasOverlay'),\n    // covers interface so user must confirm or cancel\n    selectedCapacityConfig: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedCapacityRow: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    disableForm: true,\n    disableCount: true,\n    capacityConfigChangeSet: Ember.computed('selectedCapacityConfig', function () {\n      const selectedRecord = this.get('selectedCapacityConfig');\n      this.selectedConfigRowRecord(selectedRecord);\n      return this.setDefaultProperties(selectedRecord);\n    }),\n    capacityTypeSet: Ember.computed('capacities.[]', function () {\n      const capacityRows = this.get('capacities') || [];\n      return capacityRows.reduce((acu, capacity) => {\n        acu[capacity.get('vehicleCapacityType.id')] = true;\n        return acu;\n      }, {});\n    }),\n    filteredVehicleCapacityTypeOptions: Ember.computed('capacityTypeSet', function () {\n      const capacityTypeSet = this.get('capacityTypeSet');\n      const vehicleCapacityTypeOptions = this.get('vehicleCapacityTypeOptions');\n      const filteredCapacityTypes = vehicleCapacityTypeOptions.filter(capacity => !capacityTypeSet[capacity.get('id')]);\n      return filteredCapacityTypes;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const newConfigurationAction = {\n        id: 'newConfiguration',\n        name: 'New Configuration',\n        action: () => {\n          this.addNewConfiguration();\n        }\n      };\n      this.set('additionalTableActions', [newConfigurationAction]);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n      this.setupDropDownValues();\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      let capacityTypeRecord = this.get('pendingRecord');\n\n      if (record) {\n        capacityTypeRecord = record;\n        this.set('disableForm', true);\n        this.set('disableCount', true);\n      }\n\n      if (Ember.isEmpty(record)) {\n        capacityTypeRecord = store.createRecord('vehicle-capacity-config');\n        this.set('pendingRecord', capacityTypeRecord);\n      }\n      /*run.next(() => {\n        this.set('newCapacity', false);\n      }); */\n\n\n      return new _emberChangeset.default(capacityTypeRecord, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    setupDropDownValues() {\n      const store = this.get('store');\n      const dropDownModels = DROPDOWN_MODELS;\n      dropDownModels.forEach(dropdown => {\n        const records = store.peekAll(dropdown.modelName);\n        this.set(dropdown.optionName, records);\n      });\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      if (tableRef) yield Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    selectedConfigRowRecord(record) {\n      const selectedRecord = record;\n\n      if (Ember.isEmpty(selectedRecord)) {\n        this.set('disableConfigActions', true);\n      } else {\n        this.set('disableConfigActions', false);\n        this.set('disableAdditionalBtn', false);\n      }\n    },\n\n    reset() {\n      const modalAPI = this.get('modalAPI');\n      modalAPI.setProperties({\n        title: null,\n        hasOverlay: false,\n        capacities: [],\n        vehicleTypeChangeSet: null,\n        capacityGroupSet: null,\n        group: null,\n        selectedCapacityConfig: null,\n        selectedCapacityRow: null\n      });\n    },\n\n    addNewConfiguration() {\n      const selectedCapacityRow = this.get('selectedCapacityRow');\n      if (selectedCapacityRow) selectedCapacityRow.set('selected', false);\n      this.set('newCapacity', true);\n      this.set('disableForm', false);\n      this.set('disableConfigActions', true);\n      this.set('tableRef.config.selectFirstRow', false);\n    },\n\n    deleteConfiguration() {\n      const capacityConfigChangeSet = this.get('capacityConfigChangeSet');\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      const capacities = this.get('capacities');\n      const vehicleCapacityConfigs = vehicleTypeChangeSet.get('vehicleCapacityConfigs') || [];\n\n      if (capacityConfigChangeSet) {\n        vehicleCapacityConfigs.removeObject(capacityConfigChangeSet.data);\n        capacities.removeObject(capacityConfigChangeSet.data);\n        capacityConfigChangeSet.data.destroyRecord();\n      }\n\n      vehicleTypeChangeSet.set('vehicleCapacityConfigs', vehicleCapacityConfigs);\n      this.refreshTask.perform();\n      this.set('disableForm', true);\n      this.set('disableCount', true);\n      this.set('tableRef.config.selectFirstRow', true);\n    },\n\n    editConfiguration() {\n      const selectedCapacityRow = this.get('selectedCapacityRow');\n      const capacityConfigChangeSet = this.get('capacityConfigChangeSet');\n      if (Ember.isEmpty(selectedCapacityRow)) return;\n\n      if (!capacityConfigChangeSet.get('count') || capacityConfigChangeSet.get('count') === '0') {\n        this.set('disableCount', true);\n      } else {\n        this.set('disableCount', false);\n      }\n\n      this.set('disableForm', false);\n      this.set('newCapacity', false);\n      this.set('disableConfigActions', true);\n      this.set('disableAdditionalBtn', true);\n    },\n\n    async saveConfiguration() {\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      const capacityConfigChangeSet = this.get('capacityConfigChangeSet');\n      const capacities = this.get('capacities');\n      const group = this.get('group');\n      const newCapacity = this.get('newCapacity');\n      capacityConfigChangeSet.set('group', group);\n      const isValid = await this.get('validateConfiguration').perform();\n\n      if (isValid) {\n        capacityConfigChangeSet.execute();\n        const vehicleCapacityConfigs = vehicleTypeChangeSet.get('vehicleCapacityConfigs') || [];\n\n        if (newCapacity) {\n          vehicleCapacityConfigs.pushObject(capacityConfigChangeSet.data);\n          capacities.pushObject(capacityConfigChangeSet.data);\n          this.set('pendingRecord', null);\n        }\n\n        vehicleTypeChangeSet.set('vehicleCapacityConfigs', vehicleCapacityConfigs);\n        this.refreshTask.perform();\n        this.setProperties({\n          'disableForm': true,\n          'disableCount': true,\n          'disableConfigActions': false,\n          'disableAdditionalBtn': false,\n          'tableRef.config.selectFirstRow': true\n        });\n      }\n    },\n\n    validateConfiguration: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const capacityConfigChangeSet = this.get('capacityConfigChangeSet');\n      yield capacityConfigChangeSet.validate();\n      const group = this.get('modalAPI.group');\n      const capacityGroupSet = this.get('capacityGroupSet');\n\n      if (capacityGroupSet.has(group)) {\n        capacityConfigChangeSet.addError('group', {\n          value: group,\n          validation: 'Group already exists.'\n        });\n      }\n\n      if (!group) {\n        capacityConfigChangeSet.addError('group', {\n          value: group,\n          validation: 'Group is blank.'\n        });\n      }\n\n      const errors = capacityConfigChangeSet.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n\n    undoCapacities() {\n      const capacities = this.get('capacities') || [];\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      const vehicleCapacityConfigs = vehicleTypeChangeSet.get('vehicleCapacityConfigs') || [];\n      capacities.forEach(capacity => {\n        if (capacity.get('isNew')) {\n          vehicleCapacityConfigs.removeObject(capacity);\n        } else {\n          capacity.rollbackAttributes();\n        }\n      });\n      vehicleTypeChangeSet.set('vehicleCapacityConfigs', vehicleCapacityConfigs);\n    },\n\n    closingModalSaveFunction() {\n      const onCloseButtonClick = this.get('modalAPI.onCloseButtonClick');\n      const capacities = this.get('capacities');\n      const capacityConfigChangeSet = this.get('capacityConfigChangeSet');\n      const group = this.get('modalAPI.group');\n      const capacityGroupSet = this.get('capacityGroupSet');\n      const tooltip = this.get('tooltip');\n      let errors = [];\n\n      if (Ember.isEmpty(group) || capacityGroupSet.has(group)) {\n        const errorMessage = Ember.isEmpty(group) ? 'Group is required.' : 'Group already exists.';\n        capacityConfigChangeSet.addError('group', {\n          value: group,\n          validation: errorMessage\n        });\n        errors = capacityConfigChangeSet.errors;\n\n        if (errors) {\n          return tooltip.pushConfirmation({\n            title: 'Manage Vehicle',\n            tip: '',\n            errors,\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              this.set('showErrorMsg', true);\n              return tooltip.reset();\n            }\n          });\n        }\n      }\n\n      capacities.forEach(capacity => {\n        capacity.set('group', group);\n      });\n      if (onCloseButtonClick) onCloseButtonClick();\n      this.reset();\n    },\n\n    setVehicleProperties(vehicleCapacityType) {\n      const capacityConfigChangeSet = this.get('capacityConfigChangeSet');\n      const vehicleCapacityTypeDisplayName = vehicleCapacityType.get('displayName');\n      const vehicleCapacityTypeDisplayID = vehicleCapacityType.get('id');\n      const vehicleCapacityTypeRecord = this.store.peekRecord('vehicle-capacity-type', vehicleCapacityTypeDisplayID);\n      const filteredTravelNeedType = this.store.peekAll('cs-config-item').filter(configItem => configItem.category === 'config-System_Configuration-travel_need_types' && configItem.displayName === vehicleCapacityTypeDisplayName);\n      let vehicleCapacityTypeCount = '0';\n\n      if (filteredTravelNeedType.length > 0) {\n        vehicleCapacityTypeCount = filteredTravelNeedType.firstObject.value.vehicleCapacityCount === '' ? '0' : filteredTravelNeedType.firstObject.value.vehicleCapacityCount;\n      }\n\n      capacityConfigChangeSet.set('count', vehicleCapacityTypeCount);\n      capacityConfigChangeSet.set('vehicleCapacityType', vehicleCapacityTypeRecord);\n\n      if (capacityConfigChangeSet.get('count') !== '0') {\n        this.set('disableCount', false);\n      } else {\n        this.set('disableCount', true);\n      }\n    },\n\n    actions: {\n      onCloseModal() {\n        const closingModalSaveFunction = this.get('closingModalSaveFunction').bind(this);\n        const tooltip = this.get('tooltip');\n        const undoCapacities = this.get('undoCapacities').bind(this);\n        const isNewGroup = this.get('modalAPI.isNewGroup');\n\n        if (isNewGroup) {\n          return tooltip.pushConfirmation({\n            title: 'Manage Lookup',\n            tip: 'There are unsaved changes',\n            warning: false,\n            thirdActionText: 'Cancel',\n            thirdAction: () => {\n              return tooltip.reset();\n            },\n            secondaryActionText: 'Do Not Save',\n            secondaryAction: () => {\n              undoCapacities();\n              this.reset();\n              return tooltip.reset();\n            },\n            primaryActionText: 'Save',\n            primaryAction: async () => {\n              tooltip.reset();\n              return closingModalSaveFunction();\n            }\n          });\n        }\n\n        return closingModalSaveFunction();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onClickOverlayModal() {\n        const hasOverlay = this.get('hasOverlay');\n\n        if (hasOverlay) {\n          return false;\n        }\n\n        this.reset();\n      },\n\n      onVehicleCapacityTypeChange(record) {\n        this.setVehicleProperties(record);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['capacity-table'],\n    store: Ember.inject.service(),\n    config: _config.default,\n    paginationEnabled: true,\n    // passed in attributes\n    additionalTableActions: null,\n    enableWarningRowChangeAlert: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n      const tableActions = this.get('tableActions') || [];\n      this.set('tableActions', tableActions.concat(this.get('additionalTableActions')));\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = this.get('source') || [];\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Vehicle Capacity Types',\n    defaultSortId: 'vehicleCapacityType',\n    source: 'capacities',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'vehicleCapacityType',\n      index: 0,\n      type: 'text',\n      label: 'Vehicle Capacity Type',\n      valuePath: 'vehicleCapacityType.displayName',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'count',\n      index: 1,\n      type: 'number',\n      label: 'Count',\n      valuePath: 'count',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"youwZZhi\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"title\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"onClickOverlay\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickOverlayModal\\\"],null],\\\"capacity-modal-styles-overlay\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"capacity-modal \\\",[27,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"className\\\"]],[23,[\\\"modalAPI\\\",\\\"className\\\"]]],null]]]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"capacity-modal-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h5\\\"],[9],[1,[23,[\\\"modalAPI\\\",\\\"title\\\"]],false],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"capacity-modal-buttons\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times close\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null]],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"capacity-modal-body\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row justify-content-center\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Group\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"capacityConfigChangeSet\\\",\\\"error\\\",\\\"group\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],\\\"\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"25\\\"]]],[23,[\\\"modalAPI\\\",\\\"group\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"modalAPI\\\"]],\\\"group\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"capacity-table mt-2\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/table\\\",null,[[\\\"additionalTableActions\\\",\\\"onEditButtonClick\\\",\\\"onDeleteButtonClick\\\",\\\"disableEditBtn\\\",\\\"disableDeleteBtn\\\",\\\"disableAdditionalBtn\\\",\\\"tableRef\\\",\\\"source\\\"],[[23,[\\\"additionalTableActions\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"editConfiguration\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"deleteConfiguration\\\"]]],null],[23,[\\\"disableConfigActions\\\"]],[23,[\\\"disableConfigActions\\\"]],[23,[\\\"disableAdditionalBtn\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"capacities\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"onSaveButtonClick\\\",\\\"disableSaveBtn\\\",\\\"isCollapsible\\\"],[\\\"specification-panel\\\",\\\"Capacity Configuration\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"saveConfiguration\\\"]]],null],[23,[\\\"disableForm\\\"]],false]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle Capacity Type\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"capacityConfigChangeSet\\\",\\\"error\\\",\\\"vehicleCapacityType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"classNames\\\",\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"capacityConfigChangeSet\\\",\\\"error\\\",\\\"vehicleCapacityType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"capacityConfigChangeSet\\\",\\\"error\\\",\\\"vehicleCapacityType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"VEHICLE_TYPE_PLACEHOLDER\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"displayName\\\",[23,[\\\"filteredVehicleCapacityTypeOptions\\\"]],[23,[\\\"capacityConfigChangeSet\\\",\\\"vehicleCapacityType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onVehicleCapacityTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Count\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"capacityConfigChangeSet\\\",\\\"error\\\",\\\"count\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"VEHICLE_MODEL_YEAR_PLACEHOLDER\\\"]],[23,[\\\"capacityConfigChangeSet\\\",\\\"count\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[2]]],[23,[\\\"disableCount\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"capacityConfigChangeSet\\\"]],\\\"count\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    count: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Count',\n      message: '{description} is required'\n    })],\n    vehicleCapacityType: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Vehicle Capacity Type',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/validation\", \"adept-iq/utils/format-text-extension\", \"lodash\", \"adept-iq/config/placeholders\", \"moment\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _formatTextExtension, _lodash, _placeholders, _moment, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // third party libraries\n  const VEHICLE_TYPE_PROPS = ['description', 'displayName', 'rearAxel', 'inServiceDate', 'endServiceDate', 'vehicleWheelBaseType', 'vehicleTireSize', 'vehicleModel', 'vehicleChassis', 'vehicleBodyWidth', 'vehicleFuelType', 'vehicleBodyType', 'vehicleFuelCap', 'vehicleBodyLength', 'vehicleTransmission', 'notes', 'vehicleCapacityConfigs'];\n  const DROPDOWN_MODELS = [{\n    optionName: 'vehicleModelOptions',\n    modelName: 'vehicle-model-name'\n  }, {\n    optionName: 'vehicleBodyTypeOptions',\n    modelName: 'vehicle-body-type'\n  }, {\n    optionName: 'vehicleBodyWidthOptions',\n    modelName: 'vehicle-body-width'\n  }, {\n    optionName: 'vehicleRearAxelOptions',\n    modelName: 'rear-axel-name'\n  }, {\n    optionName: 'vehicleWheelBaseOptions',\n    modelName: 'vehicle-wheelbase-type'\n  }, {\n    optionName: 'vehicleTireSizeOptions',\n    modelName: 'vehicle-tire-size'\n  }, {\n    optionName: 'vehicleChassisOptions',\n    modelName: 'vehicle-chassis'\n  }, {\n    optionName: 'vehicleFuelTypeOptions',\n    modelName: 'vehicle-fuel-type'\n  }, {\n    optionName: 'vehicleFuelCapOptions',\n    modelName: 'vehicle-fuel-cap'\n  }, {\n    optionName: 'vehicleTransmissionOptions',\n    modelName: 'vehicle-transmission'\n  }];\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-type-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    DISPLAY_NAME_PLACEHOLDER: _placeholders.DISPLAY_NAME_PLACEHOLDER,\n    NOTES_PLACEHOLDER: _placeholders.NOTES_PLACEHOLDER,\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    VEHICLE_BODY_LENGTH_PLACEHOLDER: _placeholders.VEHICLE_BODY_LENGTH_PLACEHOLDER,\n    VEHICLE_BODY_WIDTH_PLACEHOLDER: _placeholders.VEHICLE_BODY_WIDTH_PLACEHOLDER,\n    VEHICLE_BODY_TYPE_PLACEHOLDER: _placeholders.VEHICLE_BODY_TYPE_PLACEHOLDER,\n    VEHICLE_CHASSIS_PLACEHOLDER: _placeholders.VEHICLE_CHASSIS_PLACEHOLDER,\n    VEHICLE_FUEL_TYPE_PLACEHOLDER: _placeholders.VEHICLE_FUEL_TYPE_PLACEHOLDER,\n    VEHICLE_FUEL_CAP_PLACEHOLDER: _placeholders.VEHICLE_FUEL_CAP_PLACEHOLDER,\n    VEHICLE_MODEL_PLACEHOLDER: _placeholders.VEHICLE_MODEL_PLACEHOLDER,\n    VEHICLE_REAR_AXEL_PLACEHOLDER: _placeholders.VEHICLE_REAR_AXEL_PLACEHOLDER,\n    VEHICLE_TIRE_SIZE_PLACEHOLDER: _placeholders.VEHICLE_TIRE_SIZE_PLACEHOLDER,\n    VEHICLE_TRANSMISSION_PLACEHOLDER: _placeholders.VEHICLE_TRANSMISSION_PLACEHOLDER,\n    VEHICLE_WHEELBASE_PLACEHOLDER: _placeholders.VEHICLE_WHEELBASE_PLACEHOLDER,\n    tableRef: null,\n    capacityGroupTableRef: null,\n    description: null,\n    modalAPI: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    radioFlag: false,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedCapacityGroup: Ember.computed.readOnly('capacityGroupTableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    selectedCapacityGroupRow: Ember.computed.readOnly('capacityGroupTableRef.table.selectedRows.firstObject'),\n    disableCapacityPanelBtns: Ember.computed.notEmpty('selectedCapacityRow'),\n    vehicleTypeChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      this.setPreviousCapacityConfigGroups();\n      return this.setDefaultProperties(record);\n    }),\n\n    setPreviousCapacityConfigGroups() {\n      const capacityConfigs = this.get('selectedRecord.vehicleCapacityConfigs') ? this.get('selectedRecord.vehicleCapacityConfigs').toArray() : [];\n      const previousCapacityConfigs = this.getVehicleCapacityConfigGroups(capacityConfigs);\n      this.set('previousCapacityConfigs', previousCapacityConfigs);\n    },\n\n    hasPendingChanges: Ember.computed('vehicleTypeChangeSet.changes.length', 'capacityGroups.@each.isSoftDeleted', 'previousCapacityConfigs', function () {\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      const changes = vehicleTypeChangeSet.get('changes') || [];\n      return changes.length || this.isCapacityGroupChanged();\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    capacityGroupChangeSets: Ember.computed('capacityGroups', function () {\n      const capacityGroups = this.get('capacityGroups');\n      return capacityGroups.map(capacityGroup => {\n        return new _emberChangeset.default(capacityGroup);\n      });\n    }),\n    hasCapacityGroupsChanges: Ember.computed('capacityGroupChangeSets.changes.length', function () {\n      const capacityGroupChangeSets = this.get('capacityGroupChangeSets');\n      const changes = capacityGroupChangeSets.get('changes') || [];\n      return changes.length;\n    }),\n    capacityGroups: Ember.computed('vehicleTypeChangeSet.vehicleCapacityConfigs.@each.{group,count,vehicleCapacityType}', function () {\n      const capacityConfigs = this.get('vehicleTypeChangeSet.vehicleCapacityConfigs') ? this.get('vehicleTypeChangeSet.vehicleCapacityConfigs').toArray() : [];\n      return this.getVehicleCapacityConfigGroups(capacityConfigs);\n    }),\n\n    getVehicleCapacityConfigGroups(capacityConfigList) {\n      const capacityConfigs = capacityConfigList.filter(capacityConfig => {\n        return Ember.isPresent(capacityConfig.get('name')) || !capacityConfig.get('isSavedNewRecord');\n      });\n      const sortedCapacityConfigs = (0, _lodash.sortBy)(capacityConfigs, ['vehicleCapacityTypeName', 'count']);\n      const groups = (0, _lodash.groupBy)(sortedCapacityConfigs, capacity => {\n        return capacity.get('group');\n      });\n      const capacityGroups = Object.entries(groups).map(_ref => {\n        let [group, capacities] = _ref;\n        const details = {\n          header: null,\n          values: capacities.map(cap => (0, _formatTextExtension.formatTextExtension)('valueItem', `${cap.get('count')} ${cap.get('vehicleCapacityType.displayName')}`))\n        };\n        const configurationSortKey = details.values.length > 1 ? `${details.values.length} Configurations` : details.values[0].value;\n        return Ember.Object.create({\n          group,\n          details,\n          capacities,\n          configurationSortKey\n        });\n      });\n      return capacityGroups;\n    },\n\n    capacityGroupSet: Ember.computed('vehicleTypeChangeSet.vehicleCapacityConfigs.@each.group', function () {\n      const capacityConfigs = this.get('vehicleTypeChangeSet.vehicleCapacityConfigs') ? this.get('vehicleTypeChangeSet.vehicleCapacityConfigs').toArray() : [];\n      const groupSet = new Set();\n      const groups = (0, _lodash.groupBy)(capacityConfigs, capacity => {\n        return capacity.get('group');\n      });\n      Object.entries(groups).forEach(_ref2 => {\n        let [group] = _ref2;\n        groupSet.add(group);\n      });\n      return groupSet;\n    }),\n    nextVehicleCapacityId: Ember.computed('vehicleCapacityConfigs.[]', function () {\n      const vehicleCapacityConfigs = this.get('vehicleCapacityConfigs') || [];\n      let max = 0;\n      vehicleCapacityConfigs.forEach(capacity => {\n        let id = parseInt(capacity.get('id'), 10);\n        if (isNaN(id)) id = 0;\n        max = Math.max(id, max);\n      });\n      return max;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('modalAPI', Ember.Object.create());\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleTypeRecord = this.get('onSaveVehicleTypeRecord');\n      const onNewVehicleTypeRecord = this.get('onNewVehicleTypeRecord').bind(this);\n      const onEditVehicleTypeRecord = this.get('onEditVehicleTypeRecord').bind(this);\n      const onDeleteVehicleTypeRecord = this.get('onDeleteVehicleTypeRecord');\n      const onUndoVehicleTypeRecord = this.get('onUndoVehicleTypeRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleTypeRecord,\n          newAction: onNewVehicleTypeRecord,\n          deleteAction: onDeleteVehicleTypeRecord,\n          editAction: onEditVehicleTypeRecord,\n          undoAction: onUndoVehicleTypeRecord,\n          onValidateAction,\n          hasChanges\n        });\n        this.get('refreshTask').perform();\n        this.setupDropDownValues();\n      });\n      this.set('onUndoVehicleTypeRecord', onUndoVehicleTypeRecord);\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let typeObj = this.get('pendingRecord');\n\n      if (record) {\n        typeObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_types',\n          type: 'object'\n        };\n        typeObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', typeObj);\n      }\n\n      if (typeObj.get('isNew')) {\n        typeObj.setProperties({\n          description: null,\n          displayName: null,\n          inServiceDate: new Date(),\n          endServiceDate: new Date(),\n          vehicleCapacityConfigs: [],\n          softDeletedCapacityRecords: [],\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      const capacityGroupTableRef = this.get('capacityGroupTableRef');\n      if (capacityGroupTableRef) Ember.run.scheduleOnce('afterRender', capacityGroupTableRef, 'refreshData');\n      return new _emberChangeset.default(typeObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('vehicleTypeChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const capacityGroupTableRef = this.get('capacityGroupTableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (capacityGroupTableRef) Ember.run.scheduleOnce('afterRender', capacityGroupTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    async setupDropDownValues() {\n      const store = this.get('store');\n      const dropDownModels = DROPDOWN_MODELS;\n      dropDownModels.forEach(dropdown => {\n        const records = store.peekAll(dropdown.modelName);\n        this.set(dropdown.optionName, records);\n      });\n      const vehicleCapacityConfigs = await this.get('store').findAll('vehicle-capacity-config');\n      this.set('vehicleCapacityConfigs', vehicleCapacityConfigs);\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleTypeRecord = this.get('vehicleTypeChangeSet');\n      const capacityGroups = this.get('capacityGroups').filter(capacityGroup => !capacityGroup.get('isSoftDeleted'));\n      if (!this.validCapacityGroups()) return false;\n      yield vehicleTypeRecord.validate();\n      const inServiceDate = vehicleTypeRecord.get('inServiceDate');\n      const endServiceDate = vehicleTypeRecord.get('endServiceDate');\n\n      if (inServiceDate && endServiceDate) {\n        if ((0, _moment.default)(endServiceDate).isSameOrBefore((0, _moment.default)(inServiceDate))) {\n          vehicleTypeRecord.addError('endServiceDate', {\n            value: endServiceDate,\n            validation: 'End-Service Date must be after In-Service Date'\n          });\n        }\n      } //check if display name exists\n\n\n      let displayName = vehicleTypeRecord.get('displayName');\n      const id = vehicleTypeRecord.get('id');\n\n      if (displayName) {\n        displayName = displayName.toLowerCase();\n        const tableRefRecords = this.get('tableRef.records') || [];\n        const nameExists = tableRefRecords.some(record => record.displayName.toLowerCase() === displayName && record.id !== id);\n\n        if (nameExists) {\n          vehicleTypeRecord.addError('displayName', {\n            value: vehicleTypeRecord.get('displayName'),\n            validation: 'The vehicle type\\'s Display Name duplicates an existing vehicle type\\'s Display Name.'\n          });\n        }\n      }\n\n      const errors = vehicleTypeRecord.errors;\n\n      if (!capacityGroups.length) {\n        errors.pushObject({\n          'validation': 'At least one Capacity Configuration Group is required.'\n        });\n      }\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n\n    validateVehicleType() {\n      const tooltip = this.get('tooltip');\n      const errors = [];\n      const vehicles = this.get('vehicleTypeChangeSet.vehicles');\n      const futureRoutes = this.getFutureRoute(vehicles);\n\n      if (futureRoutes.length) {\n        errors.pushObject({\n          'validation': 'Unable to delete. This vehicle type is used by vehicle(s) assigned to future' + ' routes. Unassign the vehicles using this vehicle type from future routes and try again.'\n        });\n      }\n\n      if (errors.length) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    },\n\n    validCapacityGroups() {\n      const tooltip = this.get('tooltip');\n      const errors = [];\n      const vehicles = this.get('vehicleTypeChangeSet.vehicles');\n      const futureRoutes = vehicles ? this.getFutureRoute(vehicles) : [];\n      if (!this.isCapacityGroupChanged() && !futureRoutes.length) return true;\n\n      if (futureRoutes.length) {\n        errors.pushObject({\n          'validation': 'Unable to save. This vehicle type is used by vehicle(s) assigned to future ' + 'routes. Unassign the vehicles using this vehicle type from future routes and try again.'\n        });\n      }\n\n      if (errors.length) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    },\n\n    getFutureRoute(vehicles) {\n      const routeVehicleMap = this.get('editAPI.routeVehicleMap');\n      const routes = [];\n      vehicles.forEach(vehicle => {\n        const routesList = routeVehicleMap[vehicle.get('id')];\n        if (routesList) routes.push(routesList);\n      });\n      const futureRoutes = (0, _lodash.flatten)(routes);\n      return futureRoutes;\n    },\n\n    isCapacityGroupChanged() {\n      const previousCapacityConfigs = this.get('previousCapacityConfigs');\n      const capacityGroups = this.get('capacityGroups');\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      const vehicles = this.get('vehicleTypeChangeSet.vehicles');\n      if (vehicleTypeChangeSet.get('isNew') || !vehicles) return false;\n      if (previousCapacityConfigs.length !== capacityGroups.length) return true;\n      return JSON.stringify(previousCapacityConfigs) !== JSON.stringify(capacityGroups);\n    },\n\n    onSaveVehicleTypeRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const softDeletedCapacityRecords = this.get('pendingRecord.softDeletedCapacityRecords');\n      const activityIdGuid = (0, _guid.guid)();\n\n      if (!isValid) {\n        this.set('showErrorMsg', true);\n        return;\n      }\n\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      let vehicleTypeRecord = this.get('vehicleTypeChangeSet');\n      const {\n        description,\n        displayName,\n        rearAxel,\n        inServiceDate,\n        endServiceDate,\n        vehicleWheelBaseType,\n        vehicleTireSize,\n        vehicleModel,\n        vehicleChassis,\n        vehicleBodyWidth,\n        vehicleFuelType,\n        vehicleBodyType,\n        vehicleFuelCap,\n        vehicleBodyLength,\n        vehicleTransmission,\n        notes,\n        vehicleCapacityConfigs\n      } = vehicleTypeRecord.getProperties(VEHICLE_TYPE_PROPS);\n      const notifications = this.get('notifications');\n      const capacityGroups = this.get('capacityGroups');\n      const vehicleWheelBaseTypeId = vehicleWheelBaseType ? vehicleWheelBaseType.get('id') : null;\n      const rearAxelId = rearAxel ? rearAxel.get('id') : null;\n      const vehicleTireSizeId = vehicleTireSize ? vehicleTireSize.get('id') : null;\n      const vehicleModelId = vehicleModel ? vehicleModel.get('id') : null;\n      const vehicleChassisId = vehicleChassis ? vehicleChassis.get('id') : null;\n      const vehicleBodyWidthId = vehicleBodyWidth ? vehicleBodyWidth.get('id') : null;\n      const vehicleFuelTypeId = vehicleFuelType ? vehicleFuelType.get('id') : null;\n      const vehicleBodyTypeId = vehicleBodyType ? vehicleBodyType.get('id') : null;\n      const vehicleFuelCapId = vehicleFuelCap ? vehicleFuelCap.get('id') : null;\n      const vehicleTransmissionId = vehicleTransmission ? vehicleTransmission.get('id') : null;\n      const value = {\n        description,\n        displayName,\n        rearAxelId,\n        inServiceDate,\n        endServiceDate,\n        vehicleBodyLength,\n        notes,\n        vehicleWheelBaseTypeId,\n        vehicleTireSizeId,\n        vehicleModelId,\n        vehicleChassisId,\n        vehicleBodyWidthId,\n        vehicleFuelCapId,\n        vehicleFuelTypeId,\n        vehicleBodyTypeId,\n        vehicleTransmissionId\n      };\n\n      if (vehicleTypeRecord.get('isNew')) {\n        const nameGuidConverted = `${description}-${activityIdGuid}`;\n        vehicleTypeRecord.set('name', (0, _lodash.camelCase)(nameGuidConverted));\n      } else {\n        const id = this.get('vehicleTypeChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_types/${id}`;\n        vehicleTypeRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      vehicleTypeRecord.set('displayName', displayName);\n      vehicleTypeRecord.set('value', value);\n\n      if (softDeletedCapacityRecords.length > 0) {\n        this.deleteConfigurationTask.perform(softDeletedCapacityRecords);\n        this.set('pendingRecord.softDeletedCapacityRecords', []);\n      }\n\n      if (capacityGroups.length > 0) {\n        this.onSaveVehicleConfigConfigurations.perform(capacityGroups, vehicleTypeRecord);\n      }\n\n      if (vehicleCapacityConfigs) {\n        try {\n          yield vehicleTypeRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n          // execute to change underlying object and rollback to remove internal changes list\n\n          vehicleTypeChangeSet.execute();\n          vehicleTypeChangeSet.rollback();\n          notifications.success('Record successfully saved.');\n          this.set('disableForm', true);\n          Ember.run.later(() => {\n            this.get('refreshTask').perform().then(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.setPreviousCapacityConfigGroups();\n              tooltip.reset();\n            });\n          }, 500);\n        } catch (response) {\n          if (response.errors[0].status === '409') {\n            tooltip.pushConfirmation({\n              title: 'Manage Vehicle',\n              tip: 'Description cannot duplicate an existing Description.',\n              primaryActionText: 'OK',\n              primaryAction: () => {\n                return tooltip.reset();\n              }\n            });\n          } else {\n            notifications.warning('Record failed to save.');\n          }\n\n          if (vehicleTypeRecord.rollbackAttributes) {\n            vehicleTypeRecord.rollbackAttributes();\n          }\n\n          console.warn(response); // eslint-disable-line\n        }\n      }\n    }).drop(),\n    onSaveVehicleConfigConfigurations: (0, _emberConcurrency.task)(function* () {\n      let capacityGroups = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      let vehicleTypeRecord = arguments.length > 1 ? arguments[1] : undefined;\n      const nextVehicleCapacityId = this.get('nextVehicleCapacityId');\n      const filteredVehicleCapacityConfigs = [];\n      const store = this.get('store');\n      capacityGroups.forEach(capacityGroup => {\n        if (!capacityGroup.get('isSoftDeleted')) {\n          filteredVehicleCapacityConfigs.push(...capacityGroup.get('capacities'));\n        }\n      });\n      yield filteredVehicleCapacityConfigs.reduce((acu, capacity, index) => {\n        const {\n          count,\n          group,\n          vehicleCapacityType\n        } = capacity.getProperties('count', 'group', 'vehicleCapacityType');\n        const value = {\n          count: parseInt(count, 10),\n          group,\n          vehicleCapacityType: vehicleCapacityType.get('id'),\n          vehicleType: vehicleTypeRecord.get('name')\n        };\n        let capacityToSave;\n\n        if (capacity.get('isNew')) {\n          const id = nextVehicleCapacityId + index + 1; // eslint-disable-next-line no-param-reassign\n\n          capacityToSave = store.createRecord('cs-config-item', {\n            category: 'config-System_Configuration-vehicle_capacity_configs',\n            type: 'object',\n            name: id\n          });\n        } else {\n          const id = capacity.get('id');\n          const record = `config-System_Configuration-vehicle_capacity_configs/${id}`; // eslint-disable-next-line no-param-reassign\n\n          capacityToSave = store.peekRecord('cs-config-item', record);\n        }\n\n        capacityToSave.set('value', value);\n        return acu.then(() => {\n          capacityToSave.save();\n          capacity.set('isSavedNewRecord', true);\n        });\n      }, Promise.resolve());\n    }).drop(),\n\n    onEditVehicleTypeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n      if (!selectedRow) return;\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoVehicleTypeRecord() {\n      const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n      const editAPI = this.get('editAPI');\n      const softDeletedCapacityRecords = this.get('pendingRecord.softDeletedCapacityRecords');\n      if (softDeletedCapacityRecords.length) this.set('pendingRecord.softDeletedCapacityRecords', []);\n\n      if (vehicleTypeChangeSet) {\n        vehicleTypeChangeSet.rollback();\n        this.undoCapacities(vehicleTypeChangeSet);\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    undoCapacities(vehicleTypeChangeSet) {\n      let vehicleCapacityConfigs = vehicleTypeChangeSet.get('vehicleCapacityConfigs') || [];\n      const capacityGroupTableRef = this.get('capacityGroupTableRef');\n      const selectedVehicleRecord = this.get('selectedRecord');\n\n      if (!this.get('radioFlag')) {\n        vehicleCapacityConfigs = vehicleCapacityConfigs.filter(capacity => !capacity.get('isNew'));\n      }\n\n      vehicleCapacityConfigs.forEach(capacity => capacity.rollbackAttributes());\n\n      if (Ember.isPresent(selectedVehicleRecord)) {\n        selectedVehicleRecord.set('vehicleCapacityConfigs', vehicleCapacityConfigs);\n        this.setPreviousCapacityConfigGroups();\n      }\n\n      if (capacityGroupTableRef) Ember.run.scheduleOnce('afterRender', capacityGroupTableRef, 'refreshData');\n    },\n\n    onNewVehicleTypeRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    deleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRow = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      const notifications = this.get('notifications');\n      const store = this.get('store');\n      const capacityGroups = this.get('capacityGroups') || [];\n      const csConfigVehicleTypeId = `config-System_Configuration-vehicle_types/${selectedRow.get('id')}`;\n\n      if (selectedRow) {\n        try {\n          const capacities = capacityGroups.reduce((acu, capacityGroup) => {\n            return [...acu, ...capacityGroup.capacities];\n          }, []);\n          const vehicleCapacityConfigs = capacities.map(cap => {\n            const id = cap.get('id');\n            const vehicleCapacityConfigId = `config-System_Configuration-vehicle_capacity_configs/${id}`;\n            return store.peekRecord('cs-config-item', vehicleCapacityConfigId);\n          });\n          const csConfigVehicleType = store.peekRecord('cs-config-item', csConfigVehicleTypeId); // delete vehicle_capacity_configs in cs-config-item\n\n          yield vehicleCapacityConfigs.reduce((acu, vehicleCapacityConfig) => {\n            return acu.then(() => {\n              return vehicleCapacityConfig.destroyRecord().then(cs => {\n                store._removeFromIdMap(cs._internalModel);\n              });\n            });\n          }, Promise.resolve()); // delete config-vehicle_types in cs-config-item\n\n          yield csConfigVehicleType.destroyRecord().then(cs => {\n            store._removeFromIdMap(cs._internalModel);\n          }); // remove capacities from store\n\n          yield capacities.reduce((acu, capacity) => {\n            return acu.then(() => {\n              capacity.destroyRecord().then(cs => {\n                store._removeFromIdMap(cs._internalModel);\n              });\n            });\n          }, Promise.resolve()); // delete vehicle type record from store\n\n          yield selectedRow.destroyRecord().then(cs => {\n            store._removeFromIdMap(cs._internalModel);\n          });\n          notifications.success('Record successfully deleted.');\n          this.get('refreshTask').perform().then(() => {\n            Ember.run.later(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n            }, 500);\n          });\n        } catch (e) {\n          notifications.warning('Record failed to delete.');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }).drop(),\n    onDeleteVehicleTypeRecord: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const deleteRecord = this.get('deleteRecord');\n      const isVehicleTypeValid = this.get('validateVehicleType').call(this);\n\n      if (!isVehicleTypeValid) {\n        return;\n      }\n\n      yield tooltip.pushConfirmation({\n        title: 'Manage Vehicle',\n        hasOverlay: true,\n        tip: 'Are you sure you want to delete this record?',\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          const store = this.get('store');\n          const vehicleTypeId = this.get('vehicleTypeChangeSet.id') || null;\n\n          if (vehicleTypeId) {\n            // in the future we should actually use an rql query to figure out which vehicles are using this maintTypeName\n            // and have the backend process it for us, currently and name field and description can be different though,\n            // so we might need to think about it this a bit more\n            const vehicle = store.peekAll('vehicle').filter(record => record.get('active') && record.get('vehicleType.id') === vehicleTypeId);\n\n            if (vehicle.length) {\n              return tooltip.pushConfirmation({\n                title: 'Manage Vehicle',\n                hasOverlay: true,\n                tip: `There are ${vehicle.length} active vehicle(s) with this Vehicle Type description. You must either change the Vehicle Type on these vehicle(s) or delete these vehicle(s) prior to deleting the Vehicle Type.`,\n                primaryActionText: 'OK',\n\n                primaryAction() {\n                  tooltip.reset();\n                }\n\n              });\n            }\n\n            return deleteRecord.perform().then(() => {\n              tooltip.reset();\n            });\n          }\n        },\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        }\n\n      });\n    }).drop(),\n    deleteConfigurationTask: (0, _emberConcurrency.task)(function* (configurationGroups) {\n      const notifications = this.get('notifications');\n      const store = this.get('store');\n      yield configurationGroups.forEach(async configurationGroup => {\n        const capacityGroups = configurationGroup.capacities || [];\n\n        if (configurationGroup) {\n          try {\n            const vehicleCapacityGroup = capacityGroups.map(cap => {\n              if (Ember.isPresent(cap)) {\n                const id = cap.get('id');\n                const vehicleCapacityGroupId = `config-System_Configuration-vehicle_capacity_configs/${id}`;\n                return store.peekRecord('cs-config-item', vehicleCapacityGroupId);\n              }\n            }); // delete vehicle_capacity_configs in cs-config-item\n\n            await vehicleCapacityGroup.reduce(async (acu, vehicleCapacityConfig) => {\n              if (Ember.isPresent(vehicleCapacityConfig)) {\n                return acu.then(() => {\n                  return vehicleCapacityConfig.destroyRecord().then(cs => {\n                    store._removeFromIdMap(cs._internalModel);\n                  });\n                });\n              }\n            }, Promise.resolve()); // remove capacities from store\n\n            await capacityGroups.reduce((acu, capacity) => {\n              if (Ember.isPresent(capacity)) {\n                return acu.then(() => {\n                  capacity.destroyRecord().then(cs => {\n                    store._removeFromIdMap(cs._internalModel);\n                  });\n                });\n              }\n            }, Promise.resolve());\n          } catch (e) {\n            let softDeletedCapacityRecords = this.get('pendingRecord.softDeletedCapacityRecords');\n\n            if (softDeletedCapacityRecords.length > 0) {\n              softDeletedCapacityRecords = [];\n            }\n\n            notifications.warning('Capacity Configuration Group failed to delete.');\n            console.warn(e); // eslint-disable-line\n          }\n        }\n      });\n    }).drop(),\n\n    onCloseCapacityModal() {\n      const capacityGroupTableRef = this.get('capacityGroupTableRef');\n      if (capacityGroupTableRef) Ember.run.scheduleOnce('afterRender', capacityGroupTableRef, 'refreshData');\n    },\n\n    actions: {\n      onSaveVehicleTypeRecord() {\n        return this.onSaveVehicleTypeRecord.perform();\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        const isoDate = (0, _moment.default)(value).toISOString();\n        record.set(valuePath, isoDate);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onDeleteConfiguration() {\n        const selectedCapacityGroup = this.get('selectedCapacityGroup');\n        const softDeletedCapacityRecords = this.get('pendingRecord.softDeletedCapacityRecords');\n        const selectedRow = this.get('selectedRow');\n        const capacityConfigs = this.get('vehicleTypeChangeSet.vehicleCapacityConfigs') ? this.get('vehicleTypeChangeSet.vehicleCapacityConfigs').toArray() : [];\n        let removedCapacityConfigs;\n        const self = this;\n        const tooltip = this.get('tooltip');\n        if (!selectedCapacityGroup) return;\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          hasOverlay: true,\n          tip: 'Delete capacity group?',\n          primaryActionText: 'Confirm',\n\n          primaryAction() {\n            try {\n              const capacityGroupTableRef = self.get('capacityGroupTableRef');\n              selectedCapacityGroup.set('isSoftDeleted', true);\n              softDeletedCapacityRecords.push(selectedCapacityGroup);\n\n              if (Ember.isEmpty(selectedRow)) {\n                removedCapacityConfigs = capacityConfigs.filter(cap => cap.get('group') !== selectedCapacityGroup.get('group'));\n                self.set('vehicleTypeChangeSet.vehicleCapacityConfigs', removedCapacityConfigs);\n              }\n\n              if (capacityGroupTableRef) Ember.run.scheduleOnce('afterRender', capacityGroupTableRef, 'refreshData');\n            } catch (e) {\n              console.warn(e); //eslint-disable-line\n            }\n\n            return tooltip.reset();\n          },\n\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      },\n\n      onAddConfiguration() {\n        const modalAPI = this.get('modalAPI');\n        const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n        const selectedCapacityGroupRow = this.get('selectedCapacityGroupRow');\n        const onCloseCapacityModal = this.get('onCloseCapacityModal').bind(this);\n        const capacityGroupSet = this.get('capacityGroupSet');\n        if (selectedCapacityGroupRow) selectedCapacityGroupRow.set('selected', false);\n        Ember.run.next(() => {\n          modalAPI.setProperties({\n            title: 'Add Capacity Configuration Group',\n            vehicleTypeChangeSet,\n            onCloseButtonClick: onCloseCapacityModal,\n            selectedCapacityGroup: {\n              capacities: []\n            },\n            group: null,\n            capacityGroupSet,\n            hasOverlay: true,\n            isNewGroup: true\n          });\n        });\n      },\n\n      onEditConfiguration() {\n        const modalAPI = this.get('modalAPI');\n        const vehicleTypeChangeSet = this.get('vehicleTypeChangeSet');\n        const selectedCapacityGroup = this.get('selectedCapacityGroup');\n        const onCloseCapacityModal = this.get('onCloseCapacityModal').bind(this);\n        const capacityGroupSet = this.get('capacityGroupSet');\n        if (!selectedCapacityGroup) return;\n        capacityGroupSet.delete(selectedCapacityGroup.group);\n        modalAPI.setProperties({\n          title: 'Edit Capacity Configuration Group',\n          vehicleTypeChangeSet,\n          selectedCapacityGroup,\n          onCloseButtonClick: onCloseCapacityModal,\n          capacityGroupSet,\n          group: selectedCapacityGroup.group,\n          hasOverlay: true,\n          isNewGroup: false\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    rollbackRecord() {\n      const onUndoVehicleTypeRecord = this.get('onUndoVehicleTypeRecord');\n      if (Ember.isPresent(onUndoVehicleTypeRecord)) onUndoVehicleTypeRecord();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Vehicle Type',\n    defaultSortId: 'description',\n    modelName: 'vehicle-type',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'displayName',\n      index: 0,\n      type: 'text',\n      label: 'Display Name',\n      valuePath: 'displayName',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 1,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'inServiceDate',\n      index: 3,\n      type: 'date',\n      label: 'In Service Date',\n      valuePath: 'inServiceDate',\n      defaultWidth: 200,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'endServiceDate',\n      index: 4,\n      type: 'date',\n      label: 'End Service Date',\n      valuePath: 'endServiceDate',\n      defaultWidth: 200,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'vehicleModelName',\n      index: 5,\n      type: 'text',\n      label: 'Model',\n      valuePath: 'vehicleModel.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleBodyType',\n      index: 6,\n      type: 'text',\n      label: 'Body',\n      valuePath: 'vehicleBodyType.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleBodyWidth',\n      index: 7,\n      type: 'text',\n      label: 'Body Width',\n      valuePath: 'vehicleBodyWidth.displayName',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleBodyLength',\n      index: 8,\n      type: 'text',\n      label: 'Body Length',\n      valuePath: 'vehicleBodyLength',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleRearAxel',\n      index: 9,\n      type: 'text',\n      label: 'Rear Axle',\n      valuePath: 'rearAxel.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleWheelBaseType',\n      index: 10,\n      type: 'text',\n      label: 'Wheelbase',\n      valuePath: 'vehicleWheelBaseType.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleTireSize',\n      index: 11,\n      type: 'text',\n      label: 'Tire Size',\n      valuePath: 'vehicleTireSize.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleChassis',\n      index: 12,\n      type: 'text',\n      label: 'Chassis',\n      valuePath: 'vehicleChassis.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleFuelType',\n      index: 13,\n      type: 'text',\n      label: 'Fuel Type',\n      valuePath: 'vehicleFuelType.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleFuelCap',\n      index: 14,\n      type: 'text',\n      label: 'Fuel Cap',\n      valuePath: 'vehicleFuelCap.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'vehicleTransmission',\n      index: 15,\n      type: 'text',\n      label: 'Transmission',\n      valuePath: 'vehicleTransmission.description',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'capacityConfig',\n      index: 16,\n      type: 'enum',\n      label: 'Capacity Config Group',\n      valuePath: 'capacityConfigGroup',\n      mapValuePath: 'capacityConfigGroupSortKey',\n      defaultWidth: 200,\n      searchable: true,\n      cellDesc: 'Groups'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"QPv0djwA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/table\\\",null,[[\\\"saveRecord\\\",\\\"onUndoVehicleTypeRecord\\\",\\\"hasPendingChanges\\\",\\\"tableRef\\\",\\\"validateRecord\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleTypeRecord\\\"],null],[23,[\\\"onUndoVehicleTypeRecord\\\"]],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"validate\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"specification-panel\\\",\\\"Specification\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Display Name\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"displayName\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"DISPLAY_NAME_PLACEHOLDER\\\"]],[23,[\\\"vehicleTypeChangeSet\\\",\\\"displayName\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\"],[\\\"20\\\",true]]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleTypeChangeSet\\\"]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Rear Axle\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"rearAxel\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_REAR_AXEL_PLACEHOLDER\\\"]],[23,[\\\"vehicleRearAxelOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"rearAxel\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"rearAxel\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,10,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[10]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"description\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"vehicleTypeChangeSet\\\",\\\"description\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\"],[\\\"20\\\",true]]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleTypeChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Wheelbase\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleWheelBaseType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_WHEELBASE_PLACEHOLDER\\\"]],[23,[\\\"vehicleWheelBaseOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleWheelBaseType\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleWheelBaseType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,9,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[9]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"In-Service Date\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"disabled\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"inServiceDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[23,[\\\"disableForm\\\"]],[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"inServiceDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleTypeChangeSet\\\"]],\\\"inServiceDate\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Tire Size\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleTireSize\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_TIRE_SIZE_PLACEHOLDER\\\"]],[23,[\\\"vehicleTireSizeOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleTireSize\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleTireSize\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,8,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"End-Service Date\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"minDate\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"endServiceDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],false,false,[23,[\\\"disableForm\\\"]],[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"inServiceDate\\\"]],[23,[\\\"vehicleTypeChangeSet\\\",\\\"endServiceDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleTypeChangeSet\\\"]],\\\"endServiceDate\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Chassis\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleChassis\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_CHASSIS_PLACEHOLDER\\\"]],[23,[\\\"vehicleChassisOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleChassis\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleChassis\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,7,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Body Width\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleBodyWidth\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_BODY_WIDTH_PLACEHOLDER\\\"]],[23,[\\\"vehicleBodyWidthOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"displayName\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleBodyWidth\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleBodyWidth\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,6,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Fuel Type\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleFuelType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_FUEL_TYPE_PLACEHOLDER\\\"]],[23,[\\\"vehicleFuelTypeOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleFuelType\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleFuelType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,5,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Body\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleBodyType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_BODY_TYPE_PLACEHOLDER\\\"]],[23,[\\\"vehicleBodyTypeOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleBodyType\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleBodyType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,4,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Fuel Cap\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleFuelCap\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_FUEL_CAP_PLACEHOLDER\\\"]],[23,[\\\"vehicleFuelCapOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleFuelCap\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleFuelCap\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Body Length\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"extra\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleBodyLength\\\"]],\\\"error\\\"],null],[23,[\\\"VEHICLE_BODY_LENGTH_PLACEHOLDER\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeCharacter\\\"],[\\\"5\\\",true]]],[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleBodyLength\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleTypeChangeSet\\\"]],\\\"vehicleBodyLength\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Transmission\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleTransmission\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_TRANSMISSION_PLACEHOLDER\\\"]],[23,[\\\"vehicleTransmissionOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleTransmission\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleTransmission\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,2,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Model\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-4 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"error\\\",\\\"vehicleModel\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_MODEL_PLACEHOLDER\\\"]],[23,[\\\"vehicleModelOptions\\\"]],[23,[\\\"disableForm\\\"]],true,\\\"description\\\",[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleModel\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleTypeChangeSet\\\",\\\"vehicleModel\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row align-items-flex-start\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-10\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"disabled\\\",\\\"maxLength\\\"],[[23,[\\\"vehicleTypeChangeSet\\\",\\\"notes\\\"]],[23,[\\\"NOTES_PLACEHOLDER\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleTypeChangeSet\\\"]],\\\"notes\\\"],null],true,[23,[\\\"disableForm\\\"]],\\\"500\\\"]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\",\\\"onDeleteButtonClick\\\",\\\"onAddButtonClick\\\",\\\"onEditButtonClick\\\",\\\"disableEditBtn\\\",\\\"disableDeleteBtn\\\",\\\"disableHeaderActions\\\"],[\\\"capacity-panel\\\",\\\"Capacity Configuration\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteConfiguration\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAddConfiguration\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onEditConfiguration\\\"],null],[23,[\\\"disableCapacityPanelBtns\\\"]],[23,[\\\"disableCapacityPanelBtns\\\"]],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-4\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-group-table\\\",null,[[\\\"hasPendingChanges\\\",\\\"source\\\",\\\"tableRef\\\"],[[23,[\\\"hasCapacityGroupsChanges\\\"]],[23,[\\\"capacityGroups\\\"]],[23,[\\\"capacityGroupTableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/capacity-modal\\\",null,[[\\\"modalAPI\\\"],[[23,[\\\"modalAPI\\\"]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/vehicle-type/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })],\n    displayName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Display Name',\n      message: '{description} is required'\n    })],\n    vehicleModel: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Model',\n      message: '{description} is required'\n    })],\n    rearAxel: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Rear Axle',\n      message: '{description} is required'\n    })],\n    vehicleChassis: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Chassis',\n      message: '{description} is required'\n    })],\n    vehicleBodyType: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Body',\n      message: '{description} is required'\n    })],\n    inServiceDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'In-Service Date',\n      message: '{description} is required'\n    })],\n    endServiceDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'End-Service Date',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _unwrapProxy, _emberChangeset, _emberChangesetValidations, _validation, _placeholders, _lodash, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['vehicle-lookup-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // placeholder\n    DESCRIPTION_PLACEHOLDER: _placeholders.DESCRIPTION_PLACEHOLDER,\n    tableRef: null,\n    editAPI: null,\n    disableForm: true,\n    showErrorMsg: false,\n    currentDisplayName: null,\n    selectedRecord: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    wheelBaseChangeSet: Ember.computed('selectedRecord', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('wheelBaseChangeSet.changes.length', function () {\n      const wheelBaseChangeSet = this.get('wheelBaseChangeSet');\n      const changes = wheelBaseChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveWheelBaseRecord = this.get('onSaveWheelBaseRecord');\n      const refreshTask = this.get('refreshTask');\n      const onNewWheelBaseRecord = this.get('onNewWheelBaseRecord').bind(this);\n      const onEditWheelBaseRecord = this.get('onEditWheelBaseRecord').bind(this);\n      const onUndoWheelBaseRecord = this.get('onUndoWheelBaseRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n\n      const hasRelationship = () => false;\n\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveWheelBaseRecord,\n          newAction: onNewWheelBaseRecord,\n          editAction: onEditWheelBaseRecord,\n          undoAction: onUndoWheelBaseRecord,\n          deleteAction: null,\n          hasChanges,\n          onValidateAction,\n          refreshTask,\n          hasRelationship\n        });\n        this.get('refreshTask').perform();\n      });\n    },\n\n    willDestroyElement() {\n      const records = this.get('tableRef.records') || [];\n      records.map(record => {\n        if (record.get('tableRef')) {\n          record.set('tableRef');\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      const tableRef = this.get('tableRef');\n      let wheelBaseRecordObj = this.get('pendingRecord');\n\n      if (record) {\n        wheelBaseRecordObj = record;\n        this.resetForm();\n      }\n\n      if (Ember.isEmpty(record)) {\n        const data = {\n          category: 'config-System_Configuration-vehicle_wheel_base_types',\n          type: 'object'\n        };\n        wheelBaseRecordObj = store.createRecord('cs-config-item', data);\n        this.set('pendingRecord', wheelBaseRecordObj);\n      }\n\n      if (wheelBaseRecordObj.get('isNew')) {\n        wheelBaseRecordObj.setProperties({\n          description: null,\n          tableRef: tableRef\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      const tableRefRecords = this.get('tableRef.records') || [];\n      tableRefRecords.map(tableRefRecord => {\n        if (!tableRefRecord.get('tableRef')) {\n          tableRefRecord.set('tableRef', tableRef);\n        }\n      });\n      return new _emberChangeset.default(wheelBaseRecordObj, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('wheelBaseChangeSet');\n\n      if (selectedRecord) {\n        if (!selectedRecord.get('isNew') && !selectedRecord.get('isDeleted')) {\n          yield selectedRecord.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      this.resetForm();\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        editAPI.buttonSettings();\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const wheelBaseRecord = this.get('wheelBaseChangeSet');\n      yield wheelBaseRecord.validate();\n      const errors = wheelBaseRecord.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveWheelBaseRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n      const activityIdGuid = (0, _guid.guid)();\n      if (!isValid) return;\n      const notifications = this.get('notifications');\n      const description = this.get('wheelBaseChangeSet.description') || '';\n      const value = {\n        description: description\n      };\n      const nameGuidConverted = `${description}-${activityIdGuid}`;\n      const name = (0, _lodash.camelCase)(nameGuidConverted);\n      const wheelBaseChangeSet = this.get('wheelBaseChangeSet');\n      let wheelBaseRecord = this.get('wheelBaseChangeSet');\n\n      if (wheelBaseRecord.get('isNew')) {\n        wheelBaseRecord = (0, _unwrapProxy.unwrapProxy)(this.get('wheelBaseChangeSet'));\n        wheelBaseRecord.set('name', name);\n      } else {\n        const id = this.get('wheelBaseChangeSet.id');\n        const store = this.get('store');\n        const record = `config-System_Configuration-vehicle_wheel_base_types/${id}`;\n        wheelBaseRecord = store.peekRecord('cs-config-item', record);\n      }\n\n      wheelBaseRecord.set('displayName', description);\n      wheelBaseRecord.set('description', description);\n      wheelBaseRecord.set('value', value);\n\n      try {\n        yield wheelBaseRecord.save(); // changeset holds changes, execute the changes due to lookups using unorthodox saving practice\n        // execute to change underlying object and rollback to remove internal changes list\n\n        wheelBaseChangeSet.execute();\n        wheelBaseChangeSet.rollback();\n        notifications.success('Lookup record successfully saved.');\n        this.set('disableForm', true);\n        Ember.run.later(() => {\n          this.get('refreshTask').perform().then(() => {\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n            tooltip.reset();\n          });\n        }, 500);\n      } catch (response) {\n        if (response.errors[0].status === '409') {\n          tooltip.pushConfirmation({\n            title: 'Manage Driver/Vehicle',\n            tip: 'Description cannot duplicate an existing Description.',\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          notifications.warning('Lookup record failed to save.');\n        }\n\n        console.warn(response); // eslint-disable-line\n      }\n    }).drop(),\n\n    onEditWheelBaseRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoWheelBaseRecord() {\n      const wheelBaseChangeSet = this.get('wheelBaseChangeSet');\n      const editAPI = this.get('editAPI');\n\n      if (wheelBaseChangeSet) {\n        wheelBaseChangeSet.rollback();\n      }\n\n      this.set('disableForm', true);\n      editAPI.buttonSettings(false, false, false, true, true);\n    },\n\n    onNewWheelBaseRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRecord');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveWheelBaseRecord() {\n        return this.onSaveWheelBaseRecord.perform();\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('currentDisplayName', value);\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Wheelbase',\n    defaultSortId: 'description',\n    modelName: 'vehicle-wheelbase-type',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    tooltipTitle: 'Manage Lookup',\n    columns: [{\n      id: 'description',\n      index: 0,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'description',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"y0E2Glr/\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/table\\\",null,[[\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSaveWheelBaseRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"maint-type-panel\\\",\\\"Wheel base\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\" Description\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"wheelBaseChangeSet\\\",\\\"error\\\",\\\"description\\\"]],\\\"error\\\"],null],[23,[\\\"DESCRIPTION_PLACEHOLDER\\\"]],[23,[\\\"wheelBaseChangeSet\\\",\\\"description\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"maxWithSpace\\\"],[\\\"32\\\"]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"wheelBaseChangeSet\\\"]],\\\"description\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/lookup/wheelbase/validation\", [\"exports\", \"ember-changeset-validations/validators\", \"adept-iq/validators/validate-duplicate-field\"], function (_exports, _validators, _validateDuplicateField) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    description: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Description',\n      message: '{description} is required'\n    }), (0, _validateDuplicateField.validateDuplicateField)({\n      message: 'Description cannot duplicate an existing Description.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/availability/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"ember-changeset-cp-validations\", \"ember-changeset\"], function (_exports, _emberConcurrency, _lodash, _emberChangesetCpValidations, _emberChangeset) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_AVAILABILITY_TYPE_MAP = {\n    addVehicleAvailability: true,\n    editVehicleAvailability: true,\n    deleteVehicleAvailability: true\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['availability'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    editAPI: null,\n    availabilities: null,\n    resetRecords: true,\n    selectedVehicle: Ember.computed.readOnly('editAPI.selectedRecord'),\n    modelName: 'vehicle-availability',\n    // this observer used for undo enabled and disable in availability screen NYAAR-17165\n    onAvailabilityChange: Ember.observer('availabilities.@each.changes.length', function () {\n      const availabilities = this.get('availabilities');\n      const availabilitiesChanges = availabilities.reduce((acu, availability) => {\n        const changes = availability.get('changes') || [];\n        return acu + changes.length;\n      }, 0);\n\n      if (availabilitiesChanges > 0) {\n        const editAPI = this.get('editAPI');\n        editAPI.setProperties({\n          isChangesHappened: true\n        });\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const vehicle = this.get('selectedVehicle');\n      this.set('activityQueryParams', {\n        vehicleId: `${vehicle.get('id')}`,\n        eventLog: true\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const vehicleId = this.get('selectedVehicle.id');\n      const onSaveAvailabilityRecord = this.get('onSaveAvailabilityRecord');\n      const onUndoAvailabilityRecord = this.get('onUndoAvailabilityRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      const onValidateAction = this.get('validate');\n      if (vehicleId) this.fetchVehicleAvailablities(vehicleId);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveAvailabilityRecord,\n          undoAction: onUndoAvailabilityRecord,\n          undoBtn: true,\n          saveBtn: false,\n          newAction: false,\n          deleteAction: false,\n          editAction: false,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n    },\n\n    async refreshTask() {\n      const tableRef = this.get('tableRef');\n      const vehicleId = this.get('selectedVehicle.id');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (vehicleId) this.fetchVehicleAvailablities(vehicleId);\n    },\n\n    async fetchVehicleAvailablities(vehicleId) {\n      const vehicleAvailabilities = await this.get('store').query('vehicle-availability', {\n        filter: `eq('vehicleId','${vehicleId}')`\n      });\n      this.set('availabilities', this.configureVehicleAvailabilities(vehicleAvailabilities));\n    },\n\n    configureVehicleAvailabilities(availabilities) {\n      const changesets = availabilities.map(availability => {\n        const {\n          validateFn,\n          validationMap\n        } = (0, _emberChangesetCpValidations.buildChangeset)(availability);\n        return new _emberChangeset.default(availability, validateFn, validationMap);\n      });\n      return changesets;\n    },\n\n    hasPendingChanges: Ember.computed('availabilities.@each.changes.length', function () {\n      const availabilities = this.get('availabilities') || [];\n      return availabilities.reduce((acu, availability) => {\n        const changes = availability.get('changes') || [];\n        return acu + changes.length;\n      }, 0);\n    }),\n\n    hasChanges() {\n      return this.get('hasPendingChanges');\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_AVAILABILITY_TYPE_MAP[event.get('actionType')];\n    },\n\n    onUndoAvailabilityRecord() {\n      const store = this.get('store');\n      const availabilities = store.peekAll(this.get('modelName')) || [];\n      const editAPI = this.get('editAPI');\n      availabilities.forEach(availability => {\n        availability.rollbackAttributes();\n      });\n      const vehicleAvailabilities = this.get('editAPI.selectedRecord.vehicleAvailabilities') || [];\n      this.set('availabilities', this.configureVehicleAvailabilities(vehicleAvailabilities));\n      editAPI.setProperties({\n        undoBtn: true\n      });\n      editAPI.setProperties({\n        isChangesHappened: false\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const availabilities = this.get('availabilities').filter(avail => !avail.get('hasDeleted')) || [];\n      let errors = [];\n      yield availabilities.reduce(async (acu, availability) => {\n        await availability.validate();\n        errors.push(...availability.errors);\n        return acu.then(() => Promise.resolve());\n      }, Promise.resolve());\n      errors = (0, _lodash.uniqBy)(errors, error => error.key);\n\n      if (errors.length) {\n        this.set('shouldDisplayValidations', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    getAvailabilities() {\n      const availabilities = this.get('availabilities');\n      return availabilities.filter(avail => {\n        if (avail.get('isNew')) return avail.get('isNew');\n        const availabilityChanges = avail.get('changes');\n        const filteredAvailabilityChanges = availabilityChanges.filter(availabilityChange => availabilityChange.key !== 'endTime' && availabilityChange.key !== 'startTime');\n\n        if (!Ember.isEmpty(filteredAvailabilityChanges)) {\n          return avail.data;\n        }\n      });\n    },\n\n    onSaveAvailabilityRecord: (0, _emberConcurrency.task)(function* () {\n      const validate = this.get('validate');\n      const isValid = yield validate.perform();\n      const selectedVehicle = this.get('selectedVehicle');\n      const notifications = this.get('notifications');\n      const changedAvailabilities = this.getAvailabilities() || [];\n      const editAPI = this.get('editAPI');\n      const tooltip = this.get('tooltip');\n      const deletedAvailabilities = this.get('availabilities').filter(avail => avail.get('hasDeleted')) || [];\n      deletedAvailabilities.forEach(avail => avail.data.deleteRecord());\n      const availabilities = changedAvailabilities.map(avail => {\n        avail.set('vehicle', selectedVehicle);\n        if (!avail.data.isDeleted) avail.execute();\n        return avail.data;\n      }) || [];\n\n      if (isValid) {\n        try {\n          const newAvailability = yield availabilities.reduce((acu, availability) => {\n            const calcEndDate = availability.get('calcEndDate');\n            if (!availability.get('isDeleted')) availability.set('shiftEnd', calcEndDate);\n            return acu.then(() => availability.save());\n          }, Promise.resolve());\n          notifications.success('Record successfully saved.');\n          editAPI.setProperties({\n            undoBtn: true\n          });\n          this.refreshTask();\n          this.set('shouldDisplayValidations', false);\n          tooltip.reset();\n          return newAvailability;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/availability/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1pKdVyEn\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[1,[27,\\\"generic-components/availabilities\\\",null,[[\\\"availabilities\\\",\\\"availabilityRef\\\",\\\"modelName\\\",\\\"shouldDisplayValidations\\\"],[[23,[\\\"availabilities\\\"]],[23,[\\\"availabilityRef\\\"]],[23,[\\\"modelName\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/availability/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/dot-inspection-validation\", \"adept-iq/config/placeholders\", \"lodash\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _dotInspectionValidation, _placeholders, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_DOT_TYPE_MAP = {\n    addVehicleDotInspection: true,\n    editVehicleDotInspection: true,\n    deleteVehicleDotInspection: true\n  };\n  const ACTIVE_STATUS = 'active';\n\n  var _default = Ember.Component.extend({\n    classNames: ['dot-inspection-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    showErrorMsg: false,\n    tableRef: null,\n    dotInspectionTableRef: null,\n    providerPlaceholder: _placeholders.PROVIDER_PLACEHOLDER,\n    categoryPlaceholder: _placeholders.INSPECTION_CATEGORY_PLACEHOLDER,\n    notesPlaceholder: _placeholders.NOTES_PLACEHOLDER,\n    failedDotPlaceholder: _placeholders.FAILEDDOT_PLACEHOLDER,\n    datePlaceholder: _placeholders.US_DATE_PLACEHOLDER,\n    mileagePlaceholder: _placeholders.MILEAGE_PLACEHOLDER,\n    // passed into view\n    editAPI: null,\n    selectedVehicle: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedDOTInspection: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedDotInspectionRow: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n\n    async init() {\n      const vehicle = this.get('selectedVehicle');\n\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n      this.set('activityQueryParams', {\n        vehicleId: `${vehicle.get('id')}`,\n        eventLog: true\n      });\n      this.set('dotQueryParams', {\n        filter: `eq(vehicleId,${vehicle.get('id')})`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveDotInspectionRecord = this.get('onSaveDotInspectionRecord');\n      const onNewDotInspectionRecord = this.get('onNewDotInspectionRecord').bind(this);\n      const onEditDotInspectionRecord = this.get('onEditDotInspectionRecord').bind(this);\n      const onDeleteDotInspectionRecord = this.get('onDeleteDotInspectionRecord');\n      const onUndoDotInspectionRecord = this.get('onUndoDotInspectionRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveDotInspectionRecord,\n          newAction: onNewDotInspectionRecord,\n          deleteAction: onDeleteDotInspectionRecord,\n          editAction: onEditDotInspectionRecord,\n          undoAction: onUndoDotInspectionRecord,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    dotInspectionChangeSet: Ember.computed('selectedDOTInspection', function () {\n      const dotInspection = (0, _unwrapProxy.unwrapProxy)(this.get('selectedDOTInspection'));\n      return this.setDefaultProperties(dotInspection);\n    }),\n    hasPendingChanges: Ember.computed('dotInspectionChangeSet.changes.length', function () {\n      const dotInspectionChangeSet = this.get('dotInspectionChangeSet');\n      const changes = dotInspectionChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const dotInspectionChangeSet = this.get('dotInspectionChangeSet');\n\n      if (dotInspectionChangeSet.get('isNew')) {\n        const pendingChanges = this.get('dotInspectionChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? fields.every(field => field.includes('inspectionDate')) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_DOT_TYPE_MAP[event.get('actionType')];\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const editAPI = this.get('editAPI');\n      const store = this.get('store');\n      let pendingDotInspectionRecord = this.get('pendingDotInspectionRecord');\n\n      if (record) {\n        pendingDotInspectionRecord = record;\n        this.resetForm();\n      } else if (!pendingDotInspectionRecord) {\n        pendingDotInspectionRecord = store.createRecord('vehicle-dot-inspection');\n        this.set('pendingDotInspectionRecord', pendingDotInspectionRecord);\n      }\n\n      if (pendingDotInspectionRecord.get('isNew')) {\n        const defaultDate = new Date();\n        pendingDotInspectionRecord.setProperties({\n          inspectionDate: defaultDate,\n          oosDate: null,\n          nextInspectionDate: null,\n          provider: null,\n          mileage: null,\n          inspectionCategory: null,\n          failedDot: null,\n          notes: null\n        });\n      } else {\n        Ember.run.scheduleOnce('afterRender', editAPI, 'buttonSettings');\n      }\n\n      this.set('showErrorMsg', false);\n      this.set('showValidations', false);\n      return new _emberChangeset.default(pendingDotInspectionRecord, (0, _emberChangesetValidations.default)(_dotInspectionValidation.VALIDATIONS), _dotInspectionValidation.VALIDATIONS);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedVehicle = this.get('selectedVehicle');\n      const store = this.get('store');\n      const providers = store.peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && provider.get('status') && provider.get('status').toLowerCase() === ACTIVE_STATUS;\n      });\n      this.set('providers', providers);\n      const inspectCategories = yield store.findAll('inspection-category');\n      this.set('inspectionCategories', inspectCategories);\n\n      if (!selectedVehicle.get('isNew')) {\n        yield selectedVehicle.reload();\n      }\n\n      const tableRef = this.get('tableRef');\n      const dotInspectionTableRef = this.get('dotInspectionTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (dotInspectionTableRef) Ember.run.scheduleOnce('afterRender', dotInspectionTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const dotInspectionChangeSet = this.get('dotInspectionChangeSet');\n      yield dotInspectionChangeSet.validate();\n      this.set('bothDateValiationError', false);\n      const nextInspectionDate = dotInspectionChangeSet.get('nextInspectionDate');\n      const oosDate = dotInspectionChangeSet.get('oosDate');\n\n      if (!nextInspectionDate && !oosDate) {\n        this.set('bothDateValiationError', true);\n        dotInspectionChangeSet.errors.pushObject({\n          validation: 'Either an OOS Date or a Next Inspection Date is required'\n        });\n      }\n\n      const errors = dotInspectionChangeSet.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveDotInspectionRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n\n      if (isValid) {\n        const notifications = this.get('notifications');\n        const pendingDotInspectionRecord = this.get('dotInspectionChangeSet');\n        const selectedVehicle = this.get('selectedVehicle');\n        pendingDotInspectionRecord.set('vehicle', selectedVehicle);\n\n        try {\n          yield pendingDotInspectionRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingDotInspectionRecord', null);\n          this.get('refreshTask').perform().then(() => {\n            Ember.run.later(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              return tooltip.reset();\n            }, 1000);\n            return pendingDotInspectionRecord;\n          });\n        } catch (e) {\n          notifications.warning('Failed to Save Vehicle DOT Inspection Record');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onNewDotInspectionRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedDotInspectionRow = this.get('selectedDotInspectionRow');\n\n      if (selectedDotInspectionRow) {\n        selectedDotInspectionRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.get('tableRef').refreshData(); //to refresh table data\n\n      editAPI.buttonSettings(true, true, true, false, false); //False to enable the button, TRUE to disable\n\n      this.set('disableForm', false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const selectedDOTInspection = this.get('selectedDOTInspection');\n\n      try {\n        yield selectedDOTInspection.destroyRecord();\n        notifications.success('Record successfully deleted');\n        this.get('refreshTask').perform().then(() => {\n          Ember.run.later(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          }, 1000);\n        });\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteDotInspectionRecord: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const selectedVehicle = this.get('selectedVehicle');\n      const selectedDOTInspection = this.get('selectedDOTInspection');\n      if (!selectedDOTInspection) return;\n      yield tooltip.pushConfirmation({\n        title: 'Vehicle Management',\n        tip: `Are you sure you want to delete inspection record for vehicle ${selectedVehicle.get('name')}?`,\n        warning: true,\n        hasOverlay: true,\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onEditDotInspectionRecord() {\n      const editAPI = this.get('editAPI');\n      editAPI.buttonSettings(true, true, true, false, false);\n      this.set('disableForm', false);\n    },\n\n    onUndoDotInspectionRecord() {\n      const dotInspectionChangeSet = this.get('dotInspectionChangeSet');\n\n      if (dotInspectionChangeSet) {\n        dotInspectionChangeSet.rollback();\n        this.set('bothDateValiationError', false);\n      }\n    },\n\n    actions: {\n      onPowerSelectChange(valuePath, selected) {\n        this.set(valuePath, selected);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onSaveDotInspectionRecord() {\n        return this.onSaveDotInspectionRecord.perform();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/dot-inspection-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    mileage: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Mileage',\n      message: '{description} is required'\n    })],\n    failedDot: [(0, _validators.validatePresence)({\n      presence: true,\n      on: 'oosDate',\n      description: 'Failed Dot',\n      message: '{description} is required if OOS Date is selected'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1anutHRU\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/dot-inspection\\\",null,[[\\\"tableRef\\\",\\\"queryParams\\\",\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"dotQueryParams\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveDotInspectionRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"details\\\",\\\"Details\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"providerPlaceholder\\\"]],[23,[\\\"providers\\\"]],false,[23,[\\\"dotInspectionChangeSet\\\",\\\"provider\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"dotInspectionChangeSet.provider\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"dotInspectionChangeSet\\\",\\\"error\\\",\\\"inspectionDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Inspection Date\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"datePlaceholder\\\"]],[23,[\\\"disableForm\\\"]],false,\\\"m/d/Y\\\",[23,[\\\"dotInspectionChangeSet\\\",\\\"inspectionDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"dotInspectionChangeSet\\\"]],\\\"inspectionDate\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"bothDateValiationError\\\"]],[27,\\\"and\\\",[[23,[\\\"dotInspectionChangeSet\\\",\\\"error\\\",\\\"nextInspectionDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Next Inspection Date\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"datePlaceholder\\\"]],[23,[\\\"disableForm\\\"]],false,\\\"m/d/Y\\\",[23,[\\\"dotInspectionChangeSet\\\",\\\"nextInspectionDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"dotInspectionChangeSet\\\"]],\\\"nextInspectionDate\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"dotInspectionChangeSet\\\",\\\"error\\\",\\\"mileage\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Mileage\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[23,[\\\"mileagePlaceholder\\\"]],[23,[\\\"disableForm\\\"]],[23,[\\\"dotInspectionChangeSet\\\",\\\"mileage\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[9]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"dotInspectionChangeSet\\\"]],\\\"mileage\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"bothDateValiationError\\\"]],[27,\\\"and\\\",[[23,[\\\"dotInspectionChangeSet\\\",\\\"error\\\",\\\"oosDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"OOS Date\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"datePlaceholder\\\"]],[23,[\\\"disableForm\\\"]],false,\\\"m/d/Y\\\",[23,[\\\"dotInspectionChangeSet\\\",\\\"oosDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"dotInspectionChangeSet\\\"]],\\\"oosDate\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle Inspection Category\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"categoryPlaceholder\\\"]],[23,[\\\"inspectionCategories\\\"]],[23,[\\\"dotInspectionChangeSet\\\",\\\"inspectionCategory\\\"]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"dotInspectionChangeSet.inspectionCategory\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"failed-dot\\\",\\\"Failed DOT\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"class\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"disabled\\\",\\\"maxLength\\\"],[[23,[\\\"dotInspectionChangeSet\\\",\\\"failedDot\\\"]],[23,[\\\"failedDotPlaceholder\\\"]],[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"dotInspectionChangeSet\\\",\\\"error\\\",\\\"failedDot\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"dotInspectionChangeSet\\\"]],\\\"failedDot\\\"],null],true,[23,[\\\"disableForm\\\"]],\\\"255\\\"]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"notes\\\",\\\"Notes\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"disabled\\\",\\\"maxLength\\\"],[[23,[\\\"dotInspectionChangeSet\\\",\\\"notes\\\"]],[23,[\\\"notesPlaceholder\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"dotInspectionChangeSet\\\"]],\\\"notes\\\"],null],true,[23,[\\\"disableForm\\\"]],\\\"500\\\"]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"dotInspectionTableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/dot-inspection/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/component\", [\"exports\", \"moment\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/equipment-validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/config/environment\"], function (_exports, _moment, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _equipmentValidation, _placeholders, _lodash, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_EQUIPMENT_TYPE_MAP = {\n    addVehicleEquipment: true,\n    editVehicleEquipment: true,\n    deleteVehicleEquipment: true\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['equipment'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Placeholders\n    MAINTENANCE_LOCATION_PLACEHOLDER: _placeholders.MAINTENANCE_LOCATION_PLACEHOLDER,\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    TYPE_PLACEHOLDER: _placeholders.TYPE_PLACEHOLDER,\n    disableBtns: null,\n    tableRef: null,\n    equipmentTableRef: null,\n    refreshRecord: true,\n    //To refresh on undoRecord and newRecord\n    isNewRecord: false,\n    disableForm: true,\n    deleteBtn: true,\n    showErrorMsg: false,\n    timeFormat: 'm/d/Y',\n    // passed into view\n    editAPI: null,\n    selectedVehicle: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedEquipmentRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    vehicleEquipment: Ember.computed('selectedRow', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRow'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleEquipment.changes.length', function () {\n      const vehicleEquipment = this.get('vehicleEquipment');\n      const changes = vehicleEquipment.get('changes') || [];\n      return changes.length;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const vehicle = this.get('selectedVehicle');\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.set('equipmentQueryParams', {\n        filter: `eq(vehicleId,${vehicle.get('id')})`\n      });\n      this.set('activityQueryParams', {\n        vehicleId: `${vehicle.get('id')}`,\n        eventLog: true\n      });\n      this.setupDropDownValues();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleEquipmentRecord = this.get('onSaveVehicleEquipmentRecord');\n      const onNewVehicleEquipmentRecord = this.get('onNewVehicleEquipmentRecord').bind(this);\n      const onEditVehicleEquipmentRecord = this.get('onEditVehicleEquipmentRecord').bind(this);\n      const onDeleteVehicleEquipmentRecord = this.get('onDeleteVehicleEquipmentRecord');\n      const onUndoVehicleEquipmentRecord = this.get('onUndoVehicleEquipmentRecord').bind(this);\n      const hasChanges = this.get('hasChanges').bind(this);\n      const onValidateAction = this.get('validate');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleEquipmentRecord,\n          newAction: onNewVehicleEquipmentRecord,\n          deleteAction: onDeleteVehicleEquipmentRecord,\n          editAction: onEditVehicleEquipmentRecord,\n          undoAction: onUndoVehicleEquipmentRecord,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    hasChanges() {\n      const vehicleEquipment = this.get('vehicleEquipment');\n\n      if (vehicleEquipment.get('isNew')) {\n        const pendingChanges = this.get('vehicleEquipment');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? fields.every(field => field.includes('installDate')) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      let equipmentRecord = record || this.get('pendingEquipmentRecord');\n      const selectedVehicle = this.get('selectedVehicle');\n\n      if (record) {\n        this.resetForm();\n      } else if (Ember.isEmpty(equipmentRecord)) {\n        const store = this.get('store');\n        equipmentRecord = store.createRecord('vehicle-equipment', {\n          vehicle: selectedVehicle\n        });\n        this.set('pendingEquipmentRecord', equipmentRecord);\n      }\n\n      if (equipmentRecord.get('isNew')) {\n        const today = (0, _moment.default)(new Date()).toISOString();\n        equipmentRecord.set('installDate', today);\n        equipmentRecord.setProperties({\n          installDate: today,\n          notes: null,\n          type: null,\n          specialized: false\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      return new _emberChangeset.default(equipmentRecord, (0, _emberChangesetValidations.default)(_equipmentValidation.VALIDATIONS), _equipmentValidation.VALIDATIONS);\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_EQUIPMENT_TYPE_MAP[event.get('actionType')];\n    },\n\n    setupDropDownValues() {\n      const store = this.get('store');\n      const dropDownModels = ['maintenance-location-name'];\n      dropDownModels.forEach(model => {\n        const records = store.peekAll(model);\n        this.set(model, records);\n      });\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const vehicleEquipment = this.get('vehicleEquipment');\n\n      if (vehicleEquipment) {\n        if (!vehicleEquipment.get('isNew') && !vehicleEquipment.get('isDeleted')) {\n          yield vehicleEquipment.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const equipmentTableRef = this.get('equipmentTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (equipmentTableRef) Ember.run.scheduleOnce('afterRender', equipmentTableRef, 'refreshData');\n    }),\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleEquipment = this.get('vehicleEquipment');\n      yield vehicleEquipment.validate();\n      const errors = vehicleEquipment.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleEquipmentRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n\n      if (isValid) {\n        const notifications = this.get('notifications');\n        const vehicleEquipmentRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleEquipment'));\n\n        try {\n          yield vehicleEquipmentRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingEquipmentRecord', null);\n          this.get('refreshTask').perform().then(() => {\n            Ember.run.later(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            }, 1000);\n          });\n          return vehicleEquipmentRecord;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onEditVehicleEquipmentRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRow = this.get('selectedRow');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedRow.destroyRecord();\n        notifications.success('Record successfully deleted');\n        this.get('refreshTask').perform().then(() => {\n          Ember.run.later(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          }, 1000);\n        });\n      } catch (e) {\n        notifications.warning('Record failed to delete');\n        console.warn(e); // eslint-disable-line\n      }\n    }),\n    onDeleteVehicleEquipmentRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRow = this.get('selectedRow');\n      const tooltip = this.get('tooltip');\n      const vehicleName = this.get('selectedVehicle.name');\n      if (!selectedRow) return;\n      yield tooltip.pushConfirmation({\n        title: 'Manage Vehicle',\n        tip: `Are you sure you want to delete equipment record for vehicle ${vehicleName}?`,\n        secondaryActionText: 'Cancel',\n\n        secondaryAction() {\n          return tooltip.reset();\n        },\n\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onUndoVehicleEquipmentRecord() {\n      const vehicleEquipment = this.get('vehicleEquipment');\n\n      if (vehicleEquipment) {\n        vehicleEquipment.rollback();\n      }\n    },\n\n    onNewVehicleEquipmentRecord() {\n      const selectedEquipmentRow = this.get('selectedEquipmentRow');\n      const editAPI = this.get('editAPI');\n\n      if (selectedEquipmentRow) {\n        selectedEquipmentRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleEquipmentRecord() {\n        return this.onSaveVehicleEquipmentRecord.perform();\n      },\n\n      onDeleteVehicleEquipmentRecord() {\n        return this.onDeleteVehicleEquipmentRecord.perform();\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/equipment-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    maintenanceLocationName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Maintenance Location',\n      message: '{description} is required'\n    })],\n    type: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Type',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"kZGffTSq\",\n    \"block\": \"{\\\"symbols\\\":[\\\"name\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/equipment\\\",null,[[\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"queryParams\\\",\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleEquipmentRecord\\\"],null],[23,[\\\"equipmentQueryParams\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"equipment-form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"details\\\",\\\"Details\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-checkbox\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Specialized\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"disabled\\\",\\\"checked\\\"],[\\\"input-checkbox\\\",\\\"specialized\\\",\\\"specialized\\\",\\\"checkbox\\\",[23,[\\\"disableForm\\\"]],[23,[\\\"vehicleEquipment\\\",\\\"specialized\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"general-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group input-date\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Install Date\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"disabled\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableForm\\\"]],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],[23,[\\\"timeFormat\\\"]],[23,[\\\"vehicleEquipment\\\",\\\"installDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleEquipment\\\"]],\\\"installDate\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleEquipment\\\",\\\"error\\\",\\\"maintenanceLocationName\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Maintenance Location\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"searchField\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"MAINTENANCE_LOCATION_PLACEHOLDER\\\"]],[23,[\\\"maintenance-location-name\\\"]],[23,[\\\"vehicleEquipment\\\",\\\"maintenanceLocationName\\\"]],\\\"description\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleEquipment\\\",\\\"maintenanceLocationName\\\"]]],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n         \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleEquipment\\\",\\\"error\\\",\\\"type\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"TYPE_PLACEHOLDER\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"12\\\"]]],[23,[\\\"disableForm\\\"]],[23,[\\\"vehicleEquipment\\\",\\\"type\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleEquipment\\\",\\\"type\\\"]]],null]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"notes\\\",\\\"Notes\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notes-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-notes\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"disabled\\\",\\\"maxLength\\\"],[[23,[\\\"vehicleEquipment\\\",\\\"notes\\\"]],\\\"\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleEquipment\\\",\\\"notes\\\"]]],null]],null],true,[23,[\\\"disableForm\\\"]],\\\"500\\\"]]],false],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"equipmentTableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/equipment/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/component\", [\"exports\", \"moment\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/maintenance-validation\", \"adept-iq/config/placeholders\", \"lodash\", \"adept-iq/config/environment\"], function (_exports, _moment, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _maintenanceValidation, _placeholders, _lodash, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DROPDOWN_MODELS = [{\n    optionName: 'maintTypeOptions',\n    modelName: 'maintenance-type-name'\n  }, {\n    optionName: 'maintStatusOptions',\n    modelName: 'maintenance-status-name'\n  }, {\n    optionName: 'maintLocationOptions',\n    modelName: 'maintenance-location-name'\n  }, {\n    optionName: 'problemIdentifiedOptions',\n    modelName: 'problem-identified-name'\n  }, {\n    optionName: 'inspectionProviderOptions',\n    modelName: 'inspector-name'\n  }];\n  const EVENT_MAINT_TYPE_MAP = {\n    addVehicleMaintenance: true,\n    editVehicleMaintenance: true,\n    deleteVehicleMaintenance: true\n  };\n  const MAINTENANCE_FIELDS = ['serviceDate', 'acceptedDate', 'maintenanceDate'];\n\n  var _default = Ember.Component.extend({\n    classNames: ['maintenance'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Placeholders\n    maintenanceTypePlaceholder: _placeholders.MAINTENANCE_TYPE_PLACEHOLDER,\n    maintenanceStatusPlaceholder: _placeholders.MAINTENANCE_STATUS_PLACEHOLDER,\n    maintenanceLocationPlaceholder: _placeholders.MAINTENANCE_LOCATION_PLACEHOLDER,\n    ProblemIdentifiedPlaceholder: _placeholders.PROBLEM_IDENTIFIED_PLACEHOLDER,\n    inspectionProviderNamePlaceholder: _placeholders.INSPECTION_PROVIDER_NAME_PLACEHOLDER,\n    mileagePlaceholder: _placeholders.MILEAGE_PLACEHOLDER,\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    disableBtns: null,\n    vehicleInspector: null,\n    maintenanceStatus: null,\n    maintenanceType: null,\n    maintenanceLocation: null,\n    ProblemIdentified: null,\n    selectedVal: null,\n    maxLength: null,\n    tableRef: null,\n    maintenanceTableRef: null,\n    disableForm: true,\n    deleteBtn: true,\n    showErrorMsg: false,\n    timeFormat: 'm/d/Y',\n    // passed into view\n    editAPI: null,\n    selectedVehicle: Ember.computed.readOnly('editAPI.selectedRecord'),\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedMaintenanceRow: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    vehicleMaintenance: Ember.computed('selectedRow', function () {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRow'));\n      return this.setDefaultProperties(record);\n    }),\n    hasPendingChanges: Ember.computed('vehicleMaintenance.changes.length', function () {\n      const vehicleMaintenance = this.get('vehicleMaintenance');\n      const changes = vehicleMaintenance.get('changes') || [];\n      return changes.length;\n    }),\n    saveBtn: Ember.computed('disableForm', 'hasPendingChanges', function () {\n      const disableForm = this.get('disableForm');\n      const hasTemplateChanged = this.get('hasTemplateChanged') || false;\n\n      if (disableForm) {\n        return true;\n      }\n\n      return !hasTemplateChanged;\n    }),\n    filteredMaintTypeOptions: Ember.computed('maintTypeOptions', 'vehicleMaintenance.scheduled', function () {\n      const maintTypeOptions = this.get('maintTypeOptions') || [];\n      const scheduled = this.get('vehicleMaintenance.scheduled');\n      return maintTypeOptions.filterBy('scheduled', scheduled);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const vehicle = this.get('selectedVehicle');\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.dateMoment);\n      this.setupDropDownValues();\n      this.set('scheduled', true);\n      this.set('maxLength', {\n        max: 9\n      });\n      this.set('maintQueryParams', {\n        filter: `eq(vehicleId,${vehicle.get('id')})`\n      });\n      this.set('activityQueryParams', {\n        vehicleId: `${vehicle.get('id')}`,\n        eventLog: true\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleMaintenanceRecord = this.get('onSaveVehicleMaintenanceRecord');\n      const onNewVehicleMaintenanceRecord = this.get('onNewVehicleMaintenanceRecord').bind(this);\n      const onEditVehicleMaintenanceRecord = this.get('onEditVehicleMaintenanceRecord').bind(this);\n      const onDeleteVehicleMaintenanceRecord = this.get('onDeleteVehicleMaintenanceRecord');\n      const onUndoVehicleMaintenanceRecord = this.get('onUndoVehicleMaintenanceRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleMaintenanceRecord,\n          newAction: onNewVehicleMaintenanceRecord,\n          deleteAction: onDeleteVehicleMaintenanceRecord,\n          editAction: onEditVehicleMaintenanceRecord,\n          undoAction: onUndoVehicleMaintenanceRecord,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    hasChanges() {\n      const vehicleMaintenance = this.get('vehicleMaintenance');\n\n      if (vehicleMaintenance.get('isNew')) {\n        const pendingChanges = this.get('vehicleMaintenance');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => MAINTENANCE_FIELDS.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const vehicleMaintenance = this.get('vehicleMaintenance');\n\n      if (vehicleMaintenance) {\n        if (!vehicleMaintenance.get('isNew') && !vehicleMaintenance.get('isDeleted')) {\n          yield vehicleMaintenance.data.reload();\n        }\n      }\n\n      const tableRef = this.get('tableRef');\n      const maintenanceTableRef = this.get('maintenanceTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (maintenanceTableRef) Ember.run.scheduleOnce('afterRender', maintenanceTableRef, 'refreshData');\n    }),\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_MAINT_TYPE_MAP[event.get('actionType')];\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      let vehicleMaintenanceRecord = this.get('pendingVehicleMaintenanceRecord');\n      const selectedVehicle = this.get('selectedVehicle');\n\n      if (record) {\n        vehicleMaintenanceRecord = record;\n        this.resetForm();\n      } else if (Ember.isEmpty(vehicleMaintenanceRecord)) {\n        const store = this.get('store');\n        vehicleMaintenanceRecord = store.createRecord('vehicle-maintenance', {\n          vehicle: selectedVehicle\n        });\n        this.set('pendingVehicleMaintenanceRecord', vehicleMaintenanceRecord);\n      }\n\n      if (vehicleMaintenanceRecord.get('isNew')) {\n        const today = new Date();\n        vehicleMaintenanceRecord.set('installDate', today);\n        vehicleMaintenanceRecord.setProperties({\n          scheduled: true,\n          mileage: null,\n          serviceDate: today,\n          accepted: false,\n          acceptedDate: today,\n          maintenanceDate: today,\n          notes: null,\n          comments: null\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      return new _emberChangeset.default(vehicleMaintenanceRecord, (0, _emberChangesetValidations.default)(_maintenanceValidation.VALIDATIONS), _maintenanceValidation.VALIDATIONS);\n    },\n\n    setupDropDownValues() {\n      const store = this.get('store');\n      const dropDownModels = DROPDOWN_MODELS;\n      dropDownModels.forEach(option => {\n        const records = store.peekAll(option.modelName);\n        this.set(option.optionName, records);\n      });\n    },\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleMaintenance = this.get('vehicleMaintenance');\n      yield vehicleMaintenance.validate();\n      const accepted = vehicleMaintenance.get('accepted');\n\n      if (accepted) {\n        const acceptedDateFormated = (0, _moment.default)(vehicleMaintenance.get('acceptedDate')).format('MM/DD/YYYY');\n        const serviceDateFormated = (0, _moment.default)(vehicleMaintenance.get('serviceDate')).format('MM/DD/YYYY');\n        const acceptedDate = (0, _moment.default)(acceptedDateFormated);\n        const serviceDate = (0, _moment.default)(serviceDateFormated);\n\n        if (acceptedDate.isBefore(serviceDate)) {\n          vehicleMaintenance.addError('acceptedDate', {\n            value: acceptedDate.toISOString(),\n            validation: 'The Fix Accepted Date must be equal to or after the Fix Date.'\n          });\n        }\n      }\n\n      const errors = vehicleMaintenance.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleMaintenanceRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n\n      if (isValid) {\n        const notifications = this.get('notifications');\n        const vehicleMaintenanceRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleMaintenance'));\n        const isNewRecord = this.get('isNewRecord');\n        const selectedVehicle = this.get('selectedVehicle');\n        const isScheduled = this.get('vehicleMaintenance.scheduled');\n\n        if (isNewRecord) {\n          vehicleMaintenanceRecord.set('vehicle', selectedVehicle);\n        }\n\n        if (isScheduled) {\n          vehicleMaintenanceRecord.set('accepted', null);\n          vehicleMaintenanceRecord.set('acceptedDate', null);\n          vehicleMaintenanceRecord.set('serviceDate', null);\n        }\n\n        try {\n          yield vehicleMaintenanceRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingVehicleMaintenanceRecord', null);\n          this.get('refreshTask').perform().then(() => {\n            Ember.run.later(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            }, 1000);\n          });\n          return vehicleMaintenanceRecord;\n        } catch (e) {\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onEditVehicleMaintenanceRecord() {\n      const editAPI = this.get('editAPI');\n      const selectedRow = this.get('selectedRow');\n      if (!selectedRow) return;\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRow = this.get('selectedRow');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedRow.destroyRecord();\n        notifications.success('Vehicle Maintenance Record successfully deleted');\n        this.get('refreshTask').perform().then(() => {\n          Ember.run.later(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          }, 1000);\n        });\n      } catch (e) {\n        notifications.warning('Vehicle Maintenance Record failed to delete');\n      }\n    }),\n    onDeleteVehicleMaintenanceRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRow = this.get('selectedRow');\n      const tooltip = this.get('tooltip');\n      const selectedVehicle = this.get('selectedVehicle');\n      if (!selectedRow) return;\n      yield tooltip.pushConfirmation({\n        title: 'Vehicle Management',\n        tip: `Are you sure you want to delete maintenance for vehicle ${selectedVehicle.get('name')}?`,\n        warning: true,\n        hasOverlay: true,\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onUndoVehicleMaintenanceRecord() {\n      const vehicleMaintenance = this.get('vehicleMaintenance');\n\n      if (vehicleMaintenance) {\n        vehicleMaintenance.rollback();\n      }\n    },\n\n    onNewVehicleMaintenanceRecord() {\n      const selectedMaintenanceRow = this.get('selectedMaintenanceRow');\n      const editAPI = this.get('editAPI');\n\n      if (selectedMaintenanceRow) {\n        selectedMaintenanceRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    actions: {\n      onSaveVehicleMaintenanceRecord() {\n        return this.onSaveVehicleMaintenanceRecord.perform();\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        const isoDate = (0, _moment.default)(value).toISOString();\n        record.set(valuePath, isoDate);\n      },\n\n      onRadioButtonClick(val) {\n        this.set('vehicleMaintenance.scheduled', val);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/maintenance-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    mileage: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Mileage',\n      message: '{description} is required.'\n    })],\n    maintenanceDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Date',\n      message: '{description} is required.'\n    })],\n    acceptedDate: [(0, _validators.validatePresence)({\n      presence: true,\n      on: 'accepted',\n      description: 'Fix Accepted Date',\n      message: '{description} is required when Fix Accepted is selected.'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"QtJgK7n/\",\n    \"block\": \"{\\\"symbols\\\":[\\\"name\\\",\\\"name\\\",\\\"name\\\",\\\"name\\\",\\\"name\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/maintenance\\\",null,[[\\\"tableRef\\\",\\\"queryParams\\\",\\\"saveRecord\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"maintQueryParams\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveVehicleMaintenanceRecord\\\"],null],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col mr-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"general\\\",\\\"General\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"disabled\\\",\\\"changed\\\",\\\"classNames\\\"],[true,[23,[\\\"vehicleMaintenance\\\",\\\"scheduled\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",true],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[9],[0,\\\"Scheduled\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-auto\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"disabled\\\",\\\"changed\\\",\\\"classNames\\\"],[false,[23,[\\\"vehicleMaintenance\\\",\\\"scheduled\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",false],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[9],[0,\\\"Unscheduled\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"error\\\",\\\"maintenanceDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null],[23,[\\\"disableForm\\\"]],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],[23,[\\\"timeFormat\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleMaintenance\\\"]],\\\"maintenanceDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Mileage\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"error\\\",\\\"mileage\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null],[23,[\\\"mileagePlaceholder\\\"]],[23,[\\\"disableForm\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"mileage\\\"]],[23,[\\\"maxLength\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"mileage\\\"]]],null]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Maintenance Type\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"maintenanceTypePlaceholder\\\"]],true,\\\"description\\\",[23,[\\\"filteredMaintTypeOptions\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceTypeName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceTypeName\\\"]]],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,5,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Maintenance Location\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchEnabled\\\",\\\"searchField\\\",\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[true,\\\"description\\\",[23,[\\\"maintenanceLocationPlaceholder\\\"]],[23,[\\\"maintLocationOptions\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceLocationName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceLocationName\\\"]]],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,4,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Problem Identified\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchEnabled\\\",\\\"searchField\\\",\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[true,\\\"description\\\",[23,[\\\"ProblemIdentifiedPlaceholder\\\"]],[23,[\\\"problemIdentifiedOptions\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"problemIdentifiedName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"problemIdentifiedName\\\"]]],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,3,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col flex-grow-1\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"notes flex-grow-1\\\",\\\"Notes\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"disabled\\\",\\\"maxLength\\\"],[[27,\\\"readonly\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"notes\\\"]]],null],\\\"\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"notes\\\"]]],null]],null],true,[23,[\\\"disableForm\\\"]],\\\"500\\\"]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"scheduled\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"un-scheduled-panel\\\",\\\"Unscheduled\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Maintenance status\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"maintenanceStatusPlaceholder\\\"]],true,\\\"description\\\",[23,[\\\"maintStatusOptions\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceStatusName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"maintenanceStatusName\\\"]]],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Inspector\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[[23,[\\\"inspectionProviderNamePlaceholder\\\"]],true,\\\"description\\\",[23,[\\\"inspectionProviderOptions\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"inspectorName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"inspectorName\\\"]]],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Fix Date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"disabled\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableForm\\\"]],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],[23,[\\\"timeFormat\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"serviceDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleMaintenance\\\"]],\\\"serviceDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Fix Accepted\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"disabled\\\",\\\"checked\\\"],[\\\"fixAccepted\\\",\\\"fixAccepted\\\",\\\"checkbox\\\",[23,[\\\"disableForm\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"accepted\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Fix Accepted Date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"or\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"error\\\",\\\"acceptedDate\\\"]],[23,[\\\"acceptedDateError\\\"]]],null],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null],[27,\\\"not\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleMaintenance\\\",\\\"accepted\\\"]],[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null]],null]],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],[23,[\\\"timeFormat\\\"]],[23,[\\\"vehicleMaintenance\\\",\\\"acceptedDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleMaintenance\\\"]],\\\"acceptedDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"maintenanceTableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/maintenance/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/component\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-validation\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-route-search-config\", \"adept-iq/config/api-urls\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-driver-search-config\", \"adept-iq/utils/workspace-availability\", \"moment\", \"lodash\", \"adept-iq/config/placeholders\"], function (_exports, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _roadCallValidation, _roadCallRouteSearchConfig, _apiUrls, _roadCallDriverSearchConfig, _workspaceAvailability, _moment, _lodash, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_ROAD_TYPE_MAP = {\n    addVehicleRoadCall: true,\n    editVehicleRoadCall: true,\n    deleteVehicleRoadCall: true\n  };\n  const TODAY = new Date();\n\n  var _default = Ember.Component.extend({\n    classNames: ['road-call-view'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    showErrorMsg: false,\n    oldCallDate: null,\n    disableForm: true,\n    newVehicleInput: false,\n    tableRef: null,\n    activityLogTableRef: null,\n    timeFormat: 'm/d/Y',\n    // vehicle Road Call Placeholders\n    callDatePlaceholder: _placeholders.US_DATE_PLACEHOLDER,\n    codePlaceholder: _placeholders.ROAD_CALL_CODE_PLACEHOLDER,\n    codeDescriptionPlaceholder: _placeholders.ROAD_CALL_CODE_DESCRIPTION_PLACEHOLDER,\n    driverIdPlaceholder: _placeholders.SELECT_DRIVER_ID_PLACEHOLDER,\n    driverLastNamePlaceholder: _placeholders.DRIVER_LAST_NAME_PLACEHOLDER,\n    driverFirstNamePlaceholder: _placeholders.DRIVER_FIRST_NAME_PLACEHOLDER,\n    driverCdlNumberPlaceholder: _placeholders.DRIVER_CDL_PLACEHOLDER,\n    routeIdPlaceholder: _placeholders.ROUTE_ID_PLACEHOLDER,\n    mileagePlaceholder: _placeholders.MILEAGE_PLACEHOLDER,\n    notesPlaceholder: _placeholders.NOTES_PLACEHOLDER,\n    newVehiclePlaceholder: _placeholders.ROAD_CALL_NEW_VEHICLE_PLACEHOLDER,\n    // Passed into the table view\n    editAPI: null,\n    selectedVehicle: Ember.computed.alias('editAPI.selectedRecord'),\n    selectedRoadCall: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRoadCallRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    onCallDateChange: Ember.observer('roadCallChangeSet.{callDate}', function () {\n      const roadCallChangeSet = this.get('roadCallChangeSet');\n      const callDate = this.get('roadCallChangeSet.callDate');\n      const RouteIdName = this.get('roadCallChangeSet.route.name');\n      const prevCallDate = this.get('oldCallDate');\n\n      if (!(0, _moment.default)(callDate).isSame((0, _moment.default)(prevCallDate), 'day')) {\n        this.set('oldCallDate', callDate);\n\n        if (RouteIdName) {\n          roadCallChangeSet.set('roadCallChangeSet.route', null);\n          roadCallChangeSet.set('roadCallChangeSet.route.name', null);\n        }\n      }\n    }),\n    maxDate: null,\n\n    async init() {\n      this._super(...arguments);\n\n      this.initializeQuery();\n      this.setupDropDownValues();\n      this.setMaxDate();\n    },\n\n    initializeQuery() {\n      const vehicle = this.get('selectedVehicle');\n      this.set('pendingRoadCallRecord');\n      this.set('activityQueryParams', {\n        vehicleId: `${vehicle.get('id')}`,\n        eventLog: true\n      });\n      this.set('roadCallQueryParams', {\n        filter: `eq(vehicleId,${vehicle.get('id')})`\n      });\n    },\n\n    setMaxDate() {\n      this.set('maxDate', TODAY);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveRoadCallRecord = this.get('onSaveRoadCallRecord');\n      const onNewRoadCallRecord = this.get('onNewRoadCallRecord').bind(this);\n      const onEditRoadCallRecord = this.get('onEditRoadCallRecord').bind(this);\n      const onDeleteRoadCallRecord = this.get('onDeleteRoadCallRecord');\n      const onUndoRoadCallRecord = this.get('onUndoRoadCallRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRoadCallRecord,\n          newAction: onNewRoadCallRecord,\n          deleteAction: onDeleteRoadCallRecord,\n          editAction: onEditRoadCallRecord,\n          undoAction: onUndoRoadCallRecord,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n      this.set('newVehicleInput', false);\n      this.get('refreshTask').perform().then(() => {\n        Ember.run.later(() => {\n          this.resetForm();\n        }, 1000);\n      });\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const selectedVehicle = this.get('selectedVehicle');\n\n      if (!selectedVehicle.get('isNew')) {\n        yield selectedVehicle.reload();\n      }\n\n      const tableRef = this.get('tableRef');\n      const activityLogTableRef = this.get('activityLogTableRef');\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      if (activityLogTableRef) Ember.run.scheduleOnce('afterRender', activityLogTableRef, 'refreshData');\n    }),\n    roadCallChangeSet: Ember.computed('selectedRoadCall', 'tableRef.records.[]', function () {\n      const roadCall = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRoadCall'));\n      return this.setDefaultProperties(roadCall);\n    }),\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_ROAD_TYPE_MAP[event.get('actionType')];\n    },\n\n    hasPendingChanges: Ember.computed('roadCallChangeSet.changes.length', function () {\n      const roadCallChangeSet = this.get('roadCallChangeSet');\n      const changes = roadCallChangeSet.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const roadCallChangeSet = this.get('roadCallChangeSet');\n\n      if (roadCallChangeSet.get('isNew')) {\n        const pendingChanges = this.get('roadCallChangeSet');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? fields.every(field => field.includes('callDate')) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    disableRouteButton: Ember.computed('roadCallChangeSet.{callDate}', function () {\n      const callDate = this.get('roadCallChangeSet.callDate');\n\n      if (Ember.isEmpty(callDate)) {\n        return true;\n      }\n    }),\n    disableNewRoadCallButton: Ember.computed('roadCallChangeSet.{newVehicleId}', function () {\n      const vehicleId = this.get('roadCallChangeSet.newVehicleId');\n\n      if (Ember.isEmpty(vehicleId)) {\n        return true;\n      }\n    }),\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      let roadCallRecord = record || this.get('pendingRoadCallRecord');\n      const selectedVehicle = this.get('selectedVehicle');\n\n      if (record) {\n        this.resetForm();\n      } else if (Ember.isEmpty(roadCallRecord)) {\n        const store = this.get('store');\n        roadCallRecord = store.createRecord('vehicle-road-call', {\n          vehicle: selectedVehicle\n        });\n        this.set('pendingRoadCallRecord', roadCallRecord);\n      }\n\n      if (roadCallRecord.get('isNew')) {\n        roadCallRecord.setProperties({\n          callDate: TODAY,\n          mileage: null,\n          notes: null,\n          roadCallCodeName: null,\n          provider: null,\n          route: null,\n          driver: null\n        });\n      }\n\n      this.set('showErrorMsg', false);\n      this.set('oldCallDate', roadCallRecord.get('callDate'));\n      return new _emberChangeset.default(roadCallRecord, (0, _emberChangesetValidations.default)(_roadCallValidation.VALIDATIONS), _roadCallValidation.VALIDATIONS);\n    },\n\n    setupDropDownValues() {\n      const store = this.get('store');\n      const dropDownModels = ['road-call-code-name'];\n      dropDownModels.forEach(model => {\n        const records = store.peekAll(model);\n        this.set(model, records);\n      });\n    },\n\n    resetForm() {\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        this.set('disableForm', true);\n        const records = this.get('tableRef.records');\n\n        if (!records.length) {\n          editAPI.buttonSettings(true, false, true, true, true);\n        } else {\n          editAPI.buttonSettings();\n        }\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const roadCallChangeSet = this.get('roadCallChangeSet');\n      yield roadCallChangeSet.validate();\n      const errors = roadCallChangeSet.errors;\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveRoadCallRecord: (0, _emberConcurrency.task)(function* () {\n      const roadCallChangeSet = this.get('roadCallChangeSet');\n      const tooltip = this.get('tooltip');\n      roadCallChangeSet.set('driverCdlNumber', roadCallChangeSet.get('driver.license.license')); // validation\n\n      const isValid = yield this.validate.perform();\n\n      if (isValid) {\n        const notifications = this.get('notifications');\n        const vehicleRoadCallRecord = (0, _unwrapProxy.unwrapProxy)(roadCallChangeSet);\n\n        try {\n          yield vehicleRoadCallRecord.save();\n          notifications.success('Record successfully saved.');\n          this.set('pendingRoadCallRecord', null);\n          this.get('refreshTask').perform().then(() => {\n            Ember.run.later(() => {\n              this.set('tableRef.config.selectFirstRow', true);\n              this.get('tableRef.firstRowSelectedTask').perform();\n              this.resetForm();\n              tooltip.reset();\n            }, 1000);\n          });\n          return vehicleRoadCallRecord;\n        } catch (e) {\n          notifications.warning('Failed to Save Vehicle Road Call Record');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    onNewRoadCallRecord() {\n      const selectedRoadCallRow = this.get('selectedRoadCallRow');\n      const editAPI = this.get('editAPI');\n\n      if (selectedRoadCallRow) {\n        selectedRoadCallRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onDeleteRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRoadCall = this.get('selectedRoadCall');\n      const notifications = this.get('notifications');\n\n      try {\n        yield selectedRoadCall.destroyRecord();\n        notifications.success('Vehicle Road Call Record successfully deleted');\n        this.get('refreshTask').perform().then(() => {\n          Ember.run.later(() => {\n            this.resetForm();\n            this.set('tableRef.config.selectFirstRow', true);\n            this.get('tableRef.firstRowSelectedTask').perform();\n          }, 1000);\n        });\n      } catch (e) {\n        notifications.warning('Vehicle Road Call Record failed to delete');\n      }\n    }),\n    onDeleteRoadCallRecord: (0, _emberConcurrency.task)(function* () {\n      const selectedRoadCall = this.get('selectedRoadCall');\n      const tooltip = this.get('tooltip');\n      const selectedVehicle = this.get('selectedVehicle');\n      if (!selectedRoadCall) return;\n      yield tooltip.pushConfirmation({\n        title: 'Vehicle Management',\n        tip: `Are you sure you want to delete road call record for vehicle ${selectedVehicle.get('name')}?`,\n        warning: true,\n        hasOverlay: true,\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => tooltip.reset(),\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.get('onDeleteRecord').perform();\n          return tooltip.reset();\n        }\n      });\n    }),\n\n    onEditRoadCallRecord() {\n      const editAPI = this.get('editAPI');\n      this.set('disableForm', false);\n      editAPI.buttonSettings(true, true, true, false, false);\n    },\n\n    onUndoRoadCallRecord() {\n      const roadCallChangeSet = this.get('roadCallChangeSet');\n\n      if (roadCallChangeSet) {\n        roadCallChangeSet.rollback();\n      }\n    },\n\n    async selectiveIdChange(roadCallChangeSet, route, path) {\n      roadCallChangeSet.set(path, route);\n    },\n\n    buildRouteParam(callDate) {\n      const shcedules = this.get('store').peekAll('schedule');\n      const momentDate = (0, _moment.default)(callDate);\n      const filteredSchedule = shcedules.find(schedule => (0, _workspaceAvailability.processTimeConstraints)(momentDate.startOf('day').toDate(), momentDate.endOf('day').toDate(), schedule.get('start'), schedule.get('end')));\n      return `eq(scheduleId,${filteredSchedule ? filteredSchedule.get('id') : -1})`;\n    },\n\n    actions: {\n      onSaveRoadCallRecord() {\n        return this.onSaveRoadCallRecord.perform();\n      },\n\n      onPowerSelectChange(valuePath, selected) {\n        this.set(valuePath, selected);\n      },\n\n      onInputValueChange(valuePath, value) {\n        this.set(valuePath, value);\n      },\n\n      findNewVehicleRoadCall() {\n        const notifications = this.get('notifications');\n        const roadCallChangeSet = this.get('roadCallChangeSet');\n        const newVehicleId = roadCallChangeSet.get('newVehicleId');\n        const session = this.get('session');\n        const self = this;\n        const store = this.get('store');\n        const refreshTask = this.get('refreshTask');\n        const tooltip = this.get('tooltip');\n        return this.get('ajax').post(`${_apiUrls.API.vehicleService.host}/vehicle?filter=eq(name,'${newVehicleId}')`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        }).then(response => {\n          if (response.data.length !== 0) {\n            const editAPI = self.get('editAPI');\n            const newVehicle = store.peekRecord('vehicle', response.data[0].id);\n            const newVehicleName = newVehicle.get('name');\n            const panelTitle = `Edit Vehicle ${newVehicleName}`;\n            editAPI.set('title', panelTitle);\n            editAPI.set('selectedRecord', (0, _unwrapProxy.unwrapProxy)(newVehicle));\n            this.initializeQuery();\n            refreshTask.perform().then(() => {\n              Ember.run.later(() => {\n                this.resetForm();\n              }, 1000);\n            });\n          } else {\n            tooltip.pushConfirmation({\n              title: 'Manage Vehicle',\n              tip: `Vehicle ${newVehicleId}  does not exist.`,\n              primaryActionText: 'OK',\n              primaryAction: () => {\n                return tooltip.reset();\n              }\n            });\n          }\n        }).catch(function (e) {\n          notifications.warning('Invalid Vehicle ID.');\n          console.warn(e); // eslint-disable-line\n        });\n      },\n\n      openRouteModal(roadCallDate) {\n        const selectiveIdChange = this.get('selectiveIdChange').bind(this);\n        const roadCallChangeSet = this.get('roadCallChangeSet');\n        const callDate = roadCallChangeSet.get('callDate');\n        const path = 'route';\n        const queryParam = this.get('buildRouteParam').call(this, callDate);\n        const routeIdObject = Ember.Object.create({\n          title: 'Find Route',\n          queryParams: {\n            filter: queryParam\n          },\n          hasOverlay: true,\n          config: _roadCallRouteSearchConfig.default,\n          primaryActionText: 'Select',\n          className: 'route-id',\n          primaryAction: record => {\n            selectiveIdChange(roadCallDate, record, path);\n          }\n        });\n        this.set('modalAPI', routeIdObject);\n      },\n\n      openDriverModal(roadCall) {\n        const selectiveIdChange = this.get('selectiveIdChange').bind(this);\n        const path = 'driver';\n        const routeIdObject = Ember.Object.create({\n          title: 'Find Driver',\n          hasOverlay: true,\n          config: _roadCallDriverSearchConfig.default,\n          primaryActionText: 'Select',\n          className: 'driver-id',\n          primaryAction: record => {\n            selectiveIdChange(roadCall, record, path);\n          }\n        });\n        this.set('modalAPI', routeIdObject);\n      },\n\n      onDateValueChange(valuePath, value) {\n        this.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-driver-search-config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver',\n    title: 'Find Driver',\n    defaultSortId: 'driverId',\n    defaultSortAsc: true,\n    fetchModelData: false,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    columns: [{\n      id: 'driverId',\n      index: 0,\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driverId',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'providerId',\n      index: 1,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'driverLastName',\n      index: 2,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      defaultWidth: 50,\n      readonlyCell: true,\n      editable: true,\n      searchable: true\n    }, {\n      id: 'driverFirstName',\n      index: 3,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      defaultWidth: 50,\n      readonlyCell: true,\n      editable: true,\n      searchable: true\n    }, {\n      id: 'driverMiddleName',\n      index: 4,\n      type: 'text',\n      label: 'MI',\n      valuePath: 'middleName',\n      defaultWidth: 50,\n      readonlyCell: true,\n      editable: true\n    }, {\n      id: 'placeholder',\n      index: 5,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'placeholder',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'dateOfBirth',\n      type: 'date',\n      index: 6,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      label: 'Date Of Birth',\n      defaultWidth: 50,\n      valuePath: 'birthDate'\n    }, {\n      id: 'employmentStartDate',\n      type: 'date',\n      index: 7,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      label: 'Start Date',\n      defaultWidth: 50,\n      valuePath: 'employmentStartDate'\n    }, {\n      id: 'employmentEndDate',\n      type: 'date',\n      index: 8,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      label: 'End Date',\n      defaultWidth: 50,\n      valuePath: 'employmentEndDate'\n    }, {\n      id: 'termination',\n      index: 9,\n      type: 'boolean',\n      label: 'Termination Reason',\n      valuePath: 'termination',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'fingerprint',\n      index: 10,\n      type: 'boolean',\n      label: 'Fingerprint',\n      valuePath: 'fingerprint',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'driverCdlNumber',\n      index: 11,\n      type: 'string',\n      label: 'CDL Number',\n      valuePath: 'license.license',\n      defaultWidth: 50,\n      searchable: false\n    }, {\n      id: 'classificationName',\n      index: 12,\n      type: 'text',\n      label: 'CDL Classification',\n      valuePath: 'license.classificationName.description',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'address',\n      index: 13,\n      type: 'text',\n      label: 'Address',\n      valuePath: 'address.address',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'phoneNumber',\n      index: 14,\n      type: 'text',\n      label: 'Phone Number',\n      valuePath: 'phoneNumbers.phoneNumber',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'ext',\n      index: 15,\n      type: 'text',\n      label: 'Ext',\n      valuePath: 'phoneNumbers.extension',\n      defaultWidth: 50,\n      searchable: true\n    }, {\n      id: 'socialSecurityNumber',\n      index: 16,\n      type: 'text',\n      label: 'Social Security Number',\n      valuePath: 'ssn',\n      defaultWidth: 50,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-route-search-config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'route',\n    title: 'Route ID',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    queryModelData: true,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'Route ID',\n      valuePath: 'name',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/road-call-validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    callDate: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Call Date',\n      message: '{description} is required'\n    })],\n    roadCallCodeName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Code',\n      message: '{description} is required'\n    })],\n    driverCdlNumber: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Driver CDL Number',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"i+EhtNiK\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/road-call\\\",null,[[\\\"tableRef\\\",\\\"queryParams\\\",\\\"hasPendingChanges\\\",\\\"validateRecord\\\",\\\"saveRecord\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"roadCallQueryParams\\\"]],[23,[\\\"hasPendingChanges\\\"]],[23,[\\\"validate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRoadCallRecord\\\"],null],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"road-call\\\",\\\"Road Call\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"roadCallChangeSet\\\",\\\"error\\\",\\\"callDate\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Call Date\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"placeholder\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"format\\\",\\\"maxDate\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"callDatePlaceholder\\\"]],false,false,[23,[\\\"disableForm\\\"]],false,\\\"m/d/Y\\\",[23,[\\\"maxDate\\\"]],[23,[\\\"roadCallChangeSet\\\",\\\"callDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",\\\"roadCallChangeSet.callDate\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"roadCallChangeSet\\\",\\\"error\\\",\\\"roadCallCodeName\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Code\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"codePlaceholder\\\"]],[23,[\\\"road-call-code-name\\\"]],false,[23,[\\\"roadCallChangeSet\\\",\\\"roadCallCodeName\\\"]],[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"roadCallChangeSet.roadCallCodeName\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"code\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Code Description\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"name\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"codeDescription\\\",[23,[\\\"codeDescriptionPlaceholder\\\"]],true,[23,[\\\"roadCallChangeSet\\\",\\\"roadCallCodeName\\\",\\\"description\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"value\\\"],[true,[23,[\\\"driverIdPlaceholder\\\"]],[23,[\\\"roadCallChangeSet\\\",\\\"driver\\\",\\\"driverId\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"search ml-1\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openDriverModal\\\",[23,[\\\"roadCallChangeSet\\\"]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver Last Name\\\"],[10],[0,\\\"\\\\n         \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"input-text\\\",[23,[\\\"driverLastNamePlaceholder\\\"]],true,[23,[\\\"roadCallChangeSet\\\",\\\"driver\\\",\\\"lastName\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver First Name\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"id\\\",\\\"name\\\",\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"input-text\\\",\\\"driverFirstName\\\",\\\"driverFirstName\\\",[23,[\\\"driverFirstNamePlaceholder\\\"]],\\\"text\\\",true,[23,[\\\"roadCallChangeSet\\\",\\\"driver\\\",\\\"firstName\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"roadCallChangeSet\\\",\\\"error\\\",\\\"driverCdlNumber\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver CDL Number\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"id\\\",\\\"name\\\",\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"input-text\\\",\\\"driverCdlNumber\\\",\\\"driverCdlNumber\\\",[23,[\\\"driverCdlNumberPlaceholder\\\"]],\\\"text\\\",true,[23,[\\\"roadCallChangeSet\\\",\\\"driver\\\",\\\"license\\\",\\\"license\\\"]]]]],false],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"placeholder\\\",\\\"value\\\"],[true,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"roadCallChangeSet\\\",\\\"callDate\\\"]]],null]],null],[23,[\\\"routeIdPlaceholder\\\"]],[23,[\\\"roadCallChangeSet\\\",\\\"route\\\",\\\"name\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"search ml-1\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openRouteModal\\\",[23,[\\\"roadCallChangeSet\\\"]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Mileage\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"extra\\\"],[[23,[\\\"mileagePlaceholder\\\"]],[23,[\\\"disableForm\\\"]],[23,[\\\"roadCallChangeSet\\\",\\\"mileage\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"roadCallChangeSet\\\",\\\"mileage\\\"]]],null]],null],true,[27,\\\"hash\\\",null,[[\\\"max\\\"],[9]]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"road-call-notes\\\",\\\"Notes\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"maxLength\\\"],[[23,[\\\"roadCallChangeSet\\\",\\\"notes\\\"]],\\\"Notes\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"roadCallChangeSet\\\",\\\"notes\\\"]]],null]],null],true,\\\"500\\\"]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"enter-multiple-vehicle\\\",\\\"Enter Multiple\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"road-call-vehicle\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Next Vehicle ID\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"class\\\",\\\"name\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[23,[\\\"newVehiclePlaceholder\\\"]],[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"new-vehicle-input\\\",\\\"newVehicleId\\\",[23,[\\\"roadCallChangeSet\\\",\\\"newVehicleId\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\"],[\\\"20\\\",true]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",\\\"roadCallChangeSet.newVehicleId\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"button-holder\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"new_road_call-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableNewRoadCallButton\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"findNewVehicleRoadCall\\\",[23,[\\\"roadCallChangeSet\\\"]],[23,[\\\"newVehicleId\\\"]]],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[9],[0,\\\"New Road Call\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table mt-1\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"activityLogTableRef\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[1,[27,\\\"search-modal\\\",null,[[\\\"modalAPI\\\"],[[23,[\\\"modalAPI\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/road-call/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/component\", [\"exports\", \"ember-changeset\", \"ember-changeset-validations\", \"ember-concurrency\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/validation\", \"adept-iq/utils/unwrapProxy\", \"moment\", \"lodash\", \"adept-iq/config/placeholders\"], function (_exports, _emberChangeset, _emberChangesetValidations, _emberConcurrency, _validation, _unwrapProxy, _moment, _lodash, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DROPDOWN_MODELS = [{\n    optionName: 'providerOptions',\n    modelName: 'provider'\n  }, {\n    optionName: 'vehicleStatusOptions',\n    modelName: 'vehicle-status-name'\n  }, {\n    optionName: 'vehicleManufacturerOptions',\n    modelName: 'manufacturer-name'\n  }, {\n    optionName: 'vehicleTypeOptions',\n    modelName: 'vehicle-type'\n  }, {\n    optionName: 'leaseCompanyOptions',\n    modelName: 'lease-company'\n  }];\n  const EVENT_VEHICLE_MAP = {\n    addVehicle: true,\n    editVehicle: true,\n    deleteVehicle: true\n  };\n  const VEHICLE_FIELDS = ['inServiceDate', 'endServiceDate', 'leaseEndDate', 'avlmInstallDate', 'avlmRemoveDate'];\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    classNames: ['vehicle-view'],\n    // placeholders\n    VEHICLE_ID_PLACEHOLDER: _placeholders.VEHICLE_ID_PLACEHOLDER,\n    VEHICLE_STATUS_PLACEHOLDER: _placeholders.VEHICLE_STATUS_PLACEHOLDER,\n    VEHICLE_TYPE_PLACEHOLDER: _placeholders.VEHICLE_TYPE_PLACEHOLDER,\n    PROVIDER_PLACEHOLDER: _placeholders.PROVIDER_PLACEHOLDER,\n    VEHICLE_MODEL_YEAR_PLACEHOLDER: _placeholders.VEHICLE_MODEL_YEAR_PLACEHOLDER,\n    VEHICLE_LICENCE_PLACEHOLDER: _placeholders.VEHICLE_LICENCE_PLACEHOLDER,\n    VEHICLE_START_GARAGE_PLACEHOLDER: _placeholders.VEHICLE_START_GARAGE_PLACEHOLDER,\n    VEHICLE_MANUFACTURER_PLACEHOLDER: _placeholders.VEHICLE_MANUFACTURER_PLACEHOLDER,\n    NOTES_PLACEHOLDER: _placeholders.NOTES_PLACEHOLDER,\n    VEHICLE_END_GARAGE_PLACEHOLDER: _placeholders.VEHICLE_END_GARAGE_PLACEHOLDER,\n    VEHICLE_LEASE_COMPANY_PLACEHOLDER: _placeholders.VEHICLE_LEASE_COMPANY_PLACEHOLDER,\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    VEHICLE_ENGINE_TYPE_PLACEHOLDER: _placeholders.VEHICLE_ENGINE_TYPE_PLACEHOLDER,\n    VEHICLE_SITE_DEF_PLACEHOLDER: _placeholders.VEHICLE_SITE_DEF_PLACEHOLDER,\n    VIN_PLACEHOLDER: _placeholders.VIN_PLACEHOLDER,\n    WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER: _placeholders.WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER,\n    VEHILCE_VOIP_ID: _placeholders.VEHILCE_VOIP_ID,\n    VEHILCE_VOIP_PASSCODE: _placeholders.VEHILCE_VOIP_PASSCODE,\n    vehicleChangeset: null,\n    places: null,\n    showErrorMsg: false,\n    vehicleRecord: Ember.computed('editAPI.selectedRecord', function () {\n      const selectedVehicle = this.get('editAPI.selectedRecord');\n      return this.setDefaultProperties(selectedVehicle);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const vehicleId = this.get('vehicleRecord.id'); // Reg- NYAAR-20163 for new vehicle, the vehicle id will be undefined so dont fetch event\n\n      if (vehicleId) {\n        this.set('activityQueryParams', {\n          vehicleId,\n          eventLog: true\n        });\n      } else {\n        // skip query of activity log if it is a new record\n        this.set('skipQuery', true);\n      }\n\n      this.setupDropDownValues();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const onSaveVehicleRecord = this.get('onSaveVehicleRecord');\n      const onUndoVehicleRecord = this.get('onUndoVehicleRecord').bind(this);\n      const onValidateAction = this.get('validate');\n      const hasChanges = this.get('hasChanges').bind(this);\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveVehicleRecord,\n          undoAction: onUndoVehicleRecord,\n          undoBtn: false,\n          saveBtn: false,\n          newAction: false,\n          deleteAction: false,\n          editAction: false,\n          onValidateAction,\n          hasChanges,\n          isChangesHappened: false\n        });\n      });\n      this.addObserver('hasPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      const vehicleRecord = this.get('vehicleRecord');\n\n      if (vehicleRecord) {\n        if (!vehicleRecord.get('isNew') && !vehicleRecord.get('isDeleted')) {\n          yield vehicleRecord.data.reload();\n        }\n      }\n\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n    hasPendingChanges: Ember.computed('vehicleRecord.changes.length', function () {\n      const vehicleRecord = this.get('vehicleRecord');\n      const changes = vehicleRecord.get('changes') || [];\n      return changes.length;\n    }),\n\n    hasChanges() {\n      const vehicleRecord = this.get('vehicleRecord');\n\n      if (vehicleRecord.get('isNew')) {\n        const pendingChanges = this.get('vehicleRecord');\n        const fields = (0, _lodash.flatten)(pendingChanges.changes).map(change => change.key);\n        const isEveyPrePoulatedFieldsChange = fields.length ? (0, _lodash.every)(fields, field => VEHICLE_FIELDS.includes(field)) : false;\n        if (isEveyPrePoulatedFieldsChange) return !isEveyPrePoulatedFieldsChange;\n        return !!this.get('hasPendingChanges');\n      }\n\n      return !!this.get('hasPendingChanges');\n    },\n\n    hasPendingChangesObserver() {\n      const editAPI = this.get('editAPI');\n      const hasPendingChanges = this.get('hasPendingChanges');\n      Ember.run.scheduleOnce('afterRender', () => {\n        editAPI.setProperties({\n          isChangesHappened: hasPendingChanges\n        });\n      });\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.removeObserver('hasOverallPendingChanges', this.hasPendingChangesObserver);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      this.set('showErrorMsg', false);\n      this.set('duplicateName', false);\n\n      if (record) {\n        const today = (0, _moment.default)().toISOString();\n        const {\n          inServiceDate,\n          endServiceDate,\n          leaseEndDate,\n          avlmInstallDate,\n          avlmRemoveDate\n        } = record.getProperties('inServiceDate', 'endServiceDate', 'leaseEndDate', 'avlmInstallDate', 'avlmRemoveDate');\n        if (Ember.isEmpty(inServiceDate)) record.set('inServiceDate', today);\n        if (Ember.isEmpty(endServiceDate)) record.set('endServiceDate', today);\n        if (Ember.isEmpty(leaseEndDate)) record.set('leaseEndDate', today);\n        if (Ember.isEmpty(avlmInstallDate)) record.set('avlmInstallDate', today);\n        if (Ember.isEmpty(avlmRemoveDate)) record.set('avlmRemoveDate', today);\n        return new _emberChangeset.default(record, (0, _emberChangesetValidations.default)(_validation.VALIDATIONS), _validation.VALIDATIONS);\n      }\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_VEHICLE_MAP[event.get('actionType')];\n    },\n\n    setupDropDownValues() {\n      const store = this.get('store');\n      const dropDownModels = DROPDOWN_MODELS;\n      const placeQueryParams = {\n        filter: 'eq(placeCategoryTypeName,garage)'\n      };\n      dropDownModels.forEach(dropdown => {\n        const records = store.peekAll(dropdown.modelName);\n\n        if (dropdown.modelName === 'provider') {\n          const activeProvider = records.filter(record => record.get('status').toLowerCase() === 'active');\n          this.set(dropdown.optionName, activeProvider);\n        } else {\n          this.set(dropdown.optionName, records);\n        }\n      });\n      store.query('place', placeQueryParams).then(data => {\n        this.set('places', data);\n      });\n    },\n\n    validate: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const vehicleRecord = this.get('vehicleRecord');\n      yield vehicleRecord.validate();\n      const errors = vehicleRecord.errors;\n      const name = vehicleRecord.get('name');\n      this.set('duplicateName', false);\n\n      if (vehicleRecord.get('isNew') && name) {\n        const params = {\n          filter: `eq('name','${name.trim()}')`\n        };\n        yield this.get('store').query('vehicle', params).then(records => {\n          if (records.length) {\n            this.set('duplicateName', true);\n            errors.pushObject({\n              validation: 'The Vehicle ID already exists. Please specify a different Vehicle ID.'\n            });\n          }\n        });\n      }\n\n      if (errors.length > 0) {\n        this.set('showErrorMsg', true);\n        tooltip.pushConfirmation({\n          title: 'Manage Vehicle',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('showErrorMsg', false);\n      return true;\n    }),\n    onSaveVehicleRecord: (0, _emberConcurrency.task)(function* () {\n      // validation\n      const isValid = yield this.validate.perform();\n      const tooltip = this.get('tooltip');\n\n      if (isValid) {\n        const notifications = this.get('notifications');\n        const vehicleRecord = (0, _unwrapProxy.unwrapProxy)(this.get('vehicleRecord'));\n        const isNewVehicleRecord = vehicleRecord.get('isNew');\n\n        try {\n          yield vehicleRecord.save();\n\n          if (isNewVehicleRecord) {\n            this.set('vehicleRecord.isNew', false);\n          }\n\n          this.set('activityQueryParams', {\n            vehicleId: `${vehicleRecord.get('id')}`,\n            eventLog: true\n          });\n          yield this.refreshTask.perform();\n          tooltip.reset();\n          notifications.success('Record successfully saved.');\n          return vehicleRecord;\n        } catch (e) {\n          vehicleRecord.data.rollbackAttributes();\n          notifications.warning('Record failed to save');\n          console.warn(e); // eslint-disable-line\n\n          return vehicleRecord;\n        }\n      }\n    }),\n\n    onUndoVehicleRecord() {\n      const vehicleRecord = this.get('vehicleRecord');\n      if (vehicleRecord) vehicleRecord.rollback();\n    },\n\n    actions: {\n      onDateValueChange(record, valuePath, value) {\n        const isoDate = (0, _moment.default)(value).toISOString();\n        record.set(valuePath, isoDate);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"luZDJesi\",\n    \"block\": \"{\\\"symbols\\\":[\\\"name\\\",\\\"option\\\",\\\"name\\\",\\\"option\\\",\\\"place\\\",\\\"place\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"vehicle\\\",\\\"General vehicle information\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container flex flex-col\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"vehicle-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"extra\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"or\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"name\\\"]],[23,[\\\"duplicateName\\\"]]],null],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"VEHICLE_ID_PLACEHOLDER\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\"],[\\\"20\\\",true]]],[27,\\\"not\\\",[[23,[\\\"vehicleRecord\\\",\\\"isNew\\\"]]],null],[23,[\\\"vehicleRecord\\\",\\\"name\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"name\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"PROVIDER_PLACEHOLDER\\\"]],[23,[\\\"providerOptions\\\"]],true,\\\"name\\\",[23,[\\\"vehicleRecord\\\",\\\"provider\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"provider\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start Garage\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"startGarage\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_START_GARAGE_PLACEHOLDER\\\"]],[23,[\\\"places\\\"]],true,\\\"address.aliasAddress\\\",[23,[\\\"vehicleRecord\\\",\\\"startGarage\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"startGarage\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,6,[\\\"address\\\",\\\"aliasAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"End Garage\\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"endGarage\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_END_GARAGE_PLACEHOLDER\\\"]],[23,[\\\"places\\\"]],true,\\\"address.aliasAddress\\\",[23,[\\\"vehicleRecord\\\",\\\"endGarage\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"endGarage\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,5,[\\\"address\\\",\\\"aliasAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle Status\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"vehicleStatusName\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_STATUS_PLACEHOLDER\\\"]],[23,[\\\"vehicleStatusOptions\\\"]],true,\\\"description\\\",[23,[\\\"vehicleRecord\\\",\\\"vehicleStatusName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"vehicleStatusName\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,4,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle Type\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"vehicleType\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_TYPE_PLACEHOLDER\\\"]],[23,[\\\"vehicleTypeOptions\\\"]],true,\\\"displayName\\\",[23,[\\\"vehicleRecord\\\",\\\"vehicleType\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"vehicleType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,3,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Year\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"modelYear\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"VEHICLE_MODEL_YEAR_PLACEHOLDER\\\"]],[23,[\\\"vehicleRecord\\\",\\\"modelYear\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[4]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"modelYear\\\"]]],null]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"License Plate\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"VEHICLE_LICENCE_PLACEHOLDER\\\"]],\\\"text\\\",[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"removeSpecialCharacter\\\"],[12,true]]],[23,[\\\"vehicleRecord\\\",\\\"licensePlate\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"licensePlate\\\"]]],null]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Manufacturer\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"manufacturerName\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_MANUFACTURER_PLACEHOLDER\\\"]],[23,[\\\"vehicleManufacturerOptions\\\"]],\\\"description\\\",true,[23,[\\\"vehicleRecord\\\",\\\"manufacturerName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"manufacturerName\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,2,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Placeholder\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"checked\\\"],[\\\"placeholder\\\",\\\"checkbox\\\",[23,[\\\"vehicleRecord\\\",\\\"placeholder\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"In Service\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"name\\\",\\\"type\\\",\\\"checked\\\"],[\\\"inService\\\",\\\"checkbox\\\",[23,[\\\"vehicleRecord\\\",\\\"inService\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Revenue\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[23,[\\\"vehicleRecord\\\",\\\"nonRevenueVehicle\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Display in Manager\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[23,[\\\"vehicleRecord\\\",\\\"displayInManager\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Display in Archive\\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\"],[\\\"checkbox\\\",[23,[\\\"vehicleRecord\\\",\\\"displayInArchive\\\"]]]]],false],[0,\\\"\\\\n\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col ml-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"leasing\\\",\\\"Leasing\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle Lease Company\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"VEHICLE_LEASE_COMPANY_PLACEHOLDER\\\"]],[23,[\\\"leaseCompanyOptions\\\"]],true,\\\"description\\\",[23,[\\\"vehicleRecord\\\",\\\"leaseCompany\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"leaseCompany\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,1,[\\\"description\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Vehicle Lease End Date\\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleRecord\\\",\\\"leaseEndDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"leaseEndDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"other mt-2\\\",\\\"Other\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Engine Type\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[[23,[\\\"VEHICLE_ENGINE_TYPE_PLACEHOLDER\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[10]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"engineType\\\"],null],[23,[\\\"vehicleRecord\\\",\\\"engineType\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Site Def\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[[23,[\\\"VEHICLE_SITE_DEF_PLACEHOLDER\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[10]]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"siteDef\\\"],null],[23,[\\\"vehicleRecord\\\",\\\"siteDef\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"In-service date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleRecord\\\",\\\"inServiceDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"inServiceDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"End service date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleRecord\\\",\\\"endServiceDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"endServiceDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"identification mt-2\\\",\\\"Identification\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"VIN\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"vehicleRecord\\\",\\\"error\\\",\\\"vin\\\"]],[23,[\\\"showErrorMsg\\\"]]],null],\\\"error\\\"],null],[23,[\\\"VIN_PLACEHOLDER\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"20\\\"]]],[23,[\\\"vehicleRecord\\\",\\\"vin\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"vin\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Wheel Chair Lift Serial Number\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"WHEELCHAIR_SERIAL_NUMBER_PLACEHOLDER\\\"]],\\\"text\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"20\\\"]]],[23,[\\\"vehicleRecord\\\",\\\"wheelChairLiftSerialNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"wheelChairLiftSerialNumber\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"notes mt-2\\\",\\\"Notes\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notes-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"maxLength\\\"],[[27,\\\"readonly\\\",[[23,[\\\"vehicleRecord\\\",\\\"comments\\\"]]],null],[23,[\\\"NOTES_PLACEHOLDER\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"vehicleRecord\\\",\\\"comments\\\"]]],null]],null],true,\\\"500\\\"]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col ml-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"avlm mt-2\\\",\\\"AVLM\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"AVLM Install Date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleRecord\\\",\\\"avlmInstallDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"avlmInstallDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"AVLM Remove Date\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],false,[27,\\\"not\\\",[[23,[\\\"disableForm\\\"]]],null],\\\"m/d/Y\\\",[23,[\\\"vehicleRecord\\\",\\\"avlmRemoveDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"avlmRemoveDate\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"VOIP ID\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"VEHILCE_VOIP_ID\\\"]],\\\"text\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"50\\\"]]],[23,[\\\"vehicleRecord\\\",\\\"voipId\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"voipId\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"VOIP PASSCODE\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"VEHILCE_VOIP_PASSCODE\\\"]],\\\"text\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"50\\\"]]],[23,[\\\"vehicleRecord\\\",\\\"voipPasscode\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"vehicleRecord\\\"]],\\\"voipPasscode\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"skipQuery\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"skipQuery\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/vehicle/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.VALIDATIONS = void 0;\n  const VALIDATIONS = {\n    name: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Vehicle ID',\n      message: '{description} is required'\n    })],\n    modelYear: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Year',\n      message: '{description} is required'\n    })],\n    vehicleType: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Vehicle Type',\n      message: '{description} is required'\n    })],\n    startGarage: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Start Garage',\n      message: '{description} is required'\n    })],\n    endGarage: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'End Garage',\n      message: '{description} is required'\n    })]\n  };\n  _exports.VALIDATIONS = VALIDATIONS;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/dot-inspection/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/dot-inspection/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['vehicle-dot-inspection-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/dot-inspection/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle-dot-inspection',\n    title: 'DOT Inspection',\n    defaultSortId: 'providerID',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Vehicle',\n    columns: [{\n      id: 'providerID',\n      index: 1,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'vehicleLicensePlate',\n      index: 2,\n      type: 'text',\n      label: 'Vehicle License Plate',\n      valuePath: 'vehicle.licensePlate',\n      defaultWidth: 125,\n      searchable: true\n    }, {\n      id: 'inspectionDate',\n      index: 3,\n      type: 'date',\n      label: 'Inspection Date',\n      valuePath: 'inspectionDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'mileage',\n      index: 4,\n      type: 'text',\n      label: 'Mileage',\n      valuePath: 'mileage',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'nextInspectionDate',\n      index: 5,\n      type: 'date',\n      label: 'Next Inspection Date',\n      valuePath: 'nextInspectionDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'notes',\n      index: 6,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'failedDOT',\n      index: 7,\n      type: 'text',\n      label: 'Failed DOT',\n      valuePath: 'failedDot',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'oosDate',\n      index: 8,\n      type: 'date',\n      label: 'OOS Date',\n      valuePath: 'oosDate',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'vehicleInspectionCategory',\n      index: 9,\n      type: 'text',\n      label: 'Vehicle Inspection Category',\n      valuePath: 'inspectionCategory.description',\n      defaultWidth: 70,\n      searchable: true,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/equipment/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/equipment/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['equipment-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    enableWarningRowChangeAlert: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/equipment/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle-equipment',\n    title: 'Equipment',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Vehicle',\n    columns: [{\n      id: 'specialized',\n      index: 1,\n      type: 'boolean',\n      label: 'Specialized',\n      valuePath: 'specialized',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'installDate',\n      index: 2,\n      type: 'date',\n      label: 'Install Date',\n      valuePath: 'installDate',\n      defaultWidth: 70,\n      valuePreview: '2020-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'maintenanceLocationName',\n      index: 3,\n      type: 'string',\n      label: 'Maintenance Location',\n      valuePath: 'maintenanceLocationName.description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'type',\n      index: 4,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 5,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/maintenance/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/maintenance/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['maintenance-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    enableWarningRowChangeAlert: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/maintenance/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle-maintenance',\n    title: 'Vehicle Maintenance',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Vehicle',\n    columns: [{\n      id: 'schedule',\n      index: 1,\n      type: 'boolean',\n      label: 'Scheduled',\n      valuePath: 'scheduled',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'mileage',\n      index: 2,\n      type: 'text',\n      label: 'Mileage',\n      valuePath: 'mileage',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'maintenanceTypeName',\n      index: 3,\n      type: 'string',\n      label: 'Maintenance Type',\n      valuePath: 'maintenanceTypeName.description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'maintenanceDate',\n      index: 4,\n      type: 'date',\n      label: 'Maintenance Date',\n      valuePath: 'maintenanceDate',\n      defaultWidth: 70,\n      valuePreview: '2020-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'maintenanceLocationName',\n      index: 5,\n      type: 'string',\n      label: 'Maintenance Location',\n      valuePath: 'maintenanceLocationName.description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'maintenanceStatusName',\n      index: 6,\n      type: 'string',\n      label: 'Maintenance Status',\n      valuePath: 'maintenanceStatusName.description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'problemIdentifiedName',\n      index: 7,\n      type: 'string',\n      label: 'Problem Identified',\n      valuePath: 'problemIdentifiedName.description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'inspectorName',\n      index: 8,\n      type: 'text',\n      label: 'Inspector',\n      valuePath: 'inspectorName.description',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 9,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'serviceDate',\n      index: 10,\n      type: 'date',\n      label: 'Fix Date',\n      valuePath: 'serviceDate',\n      defaultWidth: 70,\n      valuePreview: '2020-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'acceptedDate',\n      index: 11,\n      type: 'date',\n      label: 'Fix Accepted Date',\n      valuePath: 'acceptedDate',\n      defaultWidth: 70,\n      valuePreview: '2020-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'accepted',\n      index: 12,\n      type: 'boolean',\n      label: 'Fix Accepted',\n      valuePath: 'accepted',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/road-call/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/road-call/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['road-call-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/road-call/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicleRoadCall',\n    title: 'Road Call',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    tooltipTitle: 'Manage Vehicle',\n    columns: [{\n      id: 'callDate',\n      index: 1,\n      type: 'date',\n      label: 'Call Date',\n      valuePath: 'callDate',\n      defaultWidth: 120,\n      searchable: true,\n      valuePreview: '2020-05-15',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`\n    }, {\n      id: 'code',\n      index: 3,\n      type: 'string',\n      label: 'Code',\n      valuePath: 'roadCallCodeName.code',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'description',\n      index: 4,\n      type: 'text',\n      label: 'Code Description',\n      valuePath: 'roadCallCodeName.description',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'driverLastName',\n      index: 5,\n      type: 'text',\n      label: 'Driver Last Name',\n      valuePath: 'driver.lastName',\n      defaultWidth: 125,\n      readonlyCell: true,\n      editable: true,\n      searchable: true\n    }, {\n      id: 'driverFirstName',\n      index: 6,\n      type: 'text',\n      label: 'Driver First Name',\n      valuePath: 'driver.firstName',\n      defaultWidth: 125,\n      readonlyCell: true,\n      editable: true,\n      searchable: true\n    }, {\n      id: 'driverCdlNumber',\n      index: 7,\n      type: 'string',\n      label: 'Driver CDL Number',\n      valuePath: 'driver.license.license',\n      defaultWidth: 135,\n      searchable: true\n    }, {\n      id: 'routeId',\n      index: 8,\n      type: 'string',\n      label: 'Route ID',\n      valuePath: 'route.name',\n      defaultWidth: 90,\n      searchable: true\n    }, {\n      id: 'mileage',\n      index: 9,\n      type: 'number',\n      label: 'Mileage',\n      valuePath: 'mileage',\n      defaultWidth: 90,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 10,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      defaultWidth: 90,\n      searchable: true\n    }, {\n      id: 'driverId',\n      index: 11,\n      type: 'text',\n      label: 'Driver ID',\n      valuePath: 'driver.driverId',\n      defaultWidth: 90,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/vehicle/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/vehicle/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['vehicle-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    hasPendingChanges: false,\n    enableWarningRowChangeAlert: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    rollbackRecord(record) {\n      if (this.get('usingRadioRowComponent')) {\n        if (record) {\n          record.rollbackAttributes();\n          const availabilities = record.get('sortedAvailabilities') || [];\n          const shiftBreaks = availabilities.reduce((acu, availability) => {\n            const breaks = availability.get('shiftBreaks').toArray() || [];\n            acu.pushObjects(breaks);\n            return acu;\n          }, []);\n          availabilities.forEach(availability => {\n            if (!availability.get('isNew')) availability.rollbackAttributes();\n          });\n          shiftBreaks.forEach(shift => {\n            if (!shift.get('isNew')) shift.rollbackAttributes();\n          });\n        }\n      }\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        return records.filter(record => !record.get('isNew'));\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/vehicle/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle',\n    title: 'Vehicle Records',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'id',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'providerID',\n      index: 1,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'providerName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'placeholder',\n      index: 2,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'placeholder',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'inService',\n      index: 3,\n      type: 'boolean',\n      label: 'In Service',\n      valuePath: 'inService',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'licensePlate',\n      index: 4,\n      type: 'text',\n      label: 'License Plate',\n      valuePath: 'licensePlate',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'vehicleStatusName',\n      index: 5,\n      type: 'text',\n      label: 'Vehicle Status',\n      valuePath: 'vehicleStatusName.description',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleType',\n      index: 6,\n      type: 'text',\n      label: 'Vehicle Type',\n      valuePath: 'vehicleType.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'startGarage',\n      index: 7,\n      type: 'text',\n      label: 'Start Garage',\n      valuePath: 'startGarage.address.address.address.freeformAddress',\n      defaultWidth: 200,\n      searchable: true\n    }, {\n      id: 'endGarage',\n      index: 8,\n      type: 'text',\n      label: 'End Garage',\n      valuePath: 'endGarage.address.address.address.freeformAddress',\n      defaultWidth: 200,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TJG2Xd6t\",\n    \"block\": \"{\\\"symbols\\\":[\\\"w\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[2,\\\" Widget Header Component \\\"],[0,\\\"\\\\n\\\"],[4,\\\"step-manager\\\",null,null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"widget\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isLookupTabActive\\\"]]],null],[23,[\\\"isEditing\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row widget-header\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[2,\\\" edit toolbar use editAPI object \\\"],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 context\\\"],[9],[0,\\\"\\\\n      \\\"],[2,\\\" think of a better name other than backTo \\\"],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[9],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-long-arrow-left\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Back\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"backTo\\\"]]],null]]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[1,[23,[\\\"editAPI\\\",\\\"title\\\"]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-2\\\"],[9],[0,\\\"\\\\n      \\\"],[2,\\\" navigation dropdown \\\"],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"editAPI\\\",\\\"selected\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"editAPI\\\",\\\"options\\\"]]],null],false,[27,\\\"readonly\\\",[[23,[\\\"editAPI\\\",\\\"searchField\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"onNavigationChange\\\"]],[22,1,[\\\"currentStep\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 actions\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"deleteAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"deleteBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Delete\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"editAPI\\\",\\\"deleteAction\\\"]]],null]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"newAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"newBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"New\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"newAction\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"editAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"editBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Edit\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"editAction\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"undoAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableUndoButton\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Undo\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"editAPIUndoAction\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"saveAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"saveBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Save\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"editAPISaveAction\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row widget-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n    \\\"],[2,\\\" main toolbar, not sure if this the best way to do this, but let's keep it simple for now \\\"],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/tab-group\\\",null,[[\\\"onTransitionChange\\\"],[[27,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"backTo\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\",\\\"onTabClick\\\"],[\\\"Driver\\\",[22,1,[]],\\\"driver\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTabChange\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\",\\\"onTabClick\\\"],[\\\"Vehicle\\\",[22,1,[]],\\\"vehicle\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTabChange\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\",\\\"onTabClick\\\"],[\\\"Lookup\\\",[22,1,[]],\\\"lookup\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onLookupTabClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[2,\\\" lookup navigation dropdown \\\"],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"currentStep\\\"]],\\\"lookup\\\"],null]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"editAPI\\\",\\\"selected\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"editAPI\\\",\\\"options\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"onNavigationChange\\\"]],[22,1,[\\\"currentStep\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[2,\\\" vehicle & driver actions \\\"],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 actions\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"currentStep\\\"]],\\\"lookup\\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"deleteAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"deleteBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Delete\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"editAPI\\\",\\\"deleteAction\\\"]]],null]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"deleteBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Delete\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"deleteLookUpRecord\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"newAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"newBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"New\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"newAction\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"editAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"editBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Edit\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"editAction\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"undoAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"undoBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Undo\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"undoAction\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"saveAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"editAPI\\\",\\\"saveBtn\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Save\\\"],[10],[3,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"editAPI\\\",\\\"saveAction\\\"]]],null]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"Delete\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"deleteRecord\\\",[22,1,[\\\"currentStep\\\"]]]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"New\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"newRecord\\\",[22,1,[\\\"currentStep\\\"]]]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"Edit\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"editRecord\\\",[22,1,[\\\"currentStep\\\"]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"widget-body\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"selected-tab-section\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab-wrapper\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[2,\\\" different component views able to be selected and rendered \\\"],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/template.hbs' @ L130:C11) \\\"],null]],[[\\\"name\\\"],[\\\"driver\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isEditing\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/edit-views/\\\",[23,[\\\"selectedMenuTitle\\\"]]],null]],[[\\\"editAPI\\\"],[[23,[\\\"editAPI\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/driver/tables/driver\\\",null,[[\\\"tableRef\\\"],[[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/template.hbs' @ L143:C11) \\\"],null]],[[\\\"name\\\"],[\\\"vehicle\\\"]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isEditing\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/edit-views/\\\",[23,[\\\"lowercase\\\"]],[23,[\\\"editAPI\\\",\\\"selected\\\"]]],null]],[[\\\"editAPI\\\",\\\"currentStep\\\"],[[23,[\\\"editAPI\\\"]],[22,1,[\\\"currentStep\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"iq-widgets/vehicle-driver-manager-widget/tabs/vehicle/tables/vehicle\\\",null,[[\\\"tableRef\\\"],[[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/template.hbs' @ L156:C11) \\\"],null]],[[\\\"name\\\"],[\\\"lookup\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"iq-widgets/vehicle-driver-manager-widget/tabs/lookup/\\\",[23,[\\\"lowercase\\\"]],[23,[\\\"editAPI\\\",\\\"selected\\\",\\\"id\\\"]]],null]],[[\\\"disableEditing\\\",\\\"onSelectTableRow\\\",\\\"editAPI\\\",\\\"tableRef\\\"],[[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectTableRow\\\"],null],[23,[\\\"editAPI\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[2,\\\" Widget Body \\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/vehicle-driver-manager-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-event-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/vehicle-event-form-widget/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        if (record.get('odometer').length <= 0) {\n          this.get('editModal.errors').pushObject('Odometer cannot be empty');\n          valid = false;\n        }\n\n        if (record.get('odometer').length > 0 && Ember.typeOf(parseInt(record.get('odometer'), 10)) !== 'number') {\n          this.get('editModal.errors').pushObject('Odometer must be numeric');\n          valid = false;\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      // override undo because we will have to deal with undoing created\n      // models for addresses, travel needs, and eligibility later.\n      // IQUX-510\n      onUndoClick() {},\n\n      onApplyClick() {\n        if (this.validateRecords()) {\n          this.get('service').apply();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-event-form-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route Id',\n        valuePath: 'name',\n        editable: false\n      }, {\n        id: 'vehicle',\n        type: 'text',\n        label: 'Vehicle',\n        valuePath: 'assignedVehicle.id',\n        editable: false\n      }]\n    }, {\n      title: 'Editable',\n      fields: [{\n        id: 'timestamp',\n        type: 'datetimeflatpickr',\n        label: 'Date Time',\n        valuePath: 'timestamp',\n        editable: true,\n        hidden: false,\n        format: `${_environment.default.dateTimeFormat.dateTimeFlatPickr}`,\n        defaultWidth: 50\n      }, {\n        id: 'odometer',\n        type: 'text',\n        editable: true,\n        label: 'Odometer',\n        valuePath: 'odometer'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-events-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/vehicle-events-widget',\n    rowComponent: 'iq-widgets/vehicle-events-widget/stops-row',\n    modelName: 'avlm-vehicle-event',\n    defaultSortId: 'tripId',\n    defaultSortAsc: false,\n    title: 'Vehicle-event',\n    columns: [{\n      id: 'id',\n      index: 18,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      valuePreview: '1',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'time',\n      index: 0,\n      type: 'datetime',\n      label: 'Time',\n      valuePath: 'time',\n      editable: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'route',\n      index: 1,\n      type: 'text',\n      label: 'Route',\n      valuePath: 'route',\n      valuePreview: '40',\n      defaultWidth: 70,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'vehicleId',\n      index: 2,\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'lat',\n      index: 3,\n      type: 'number',\n      label: 'Latitude',\n      valuePath: 'lat',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'lng',\n      index: 4,\n      type: 'number',\n      label: 'Longitude',\n      valuePath: 'lng',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'passengerId',\n      index: 5,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'passengerFName',\n      index: 6,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'passengerLName',\n      index: 7,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'stopType',\n      index: 8,\n      type: 'text',\n      label: 'Stop Type',\n      valuePath: 'stopType',\n      valuePreview: 'Pick',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 50\n    }, {\n      id: 'stopAddress',\n      index: 9,\n      type: 'text',\n      label: 'Stop Address',\n      valuePath: 'stopAddress',\n      searchable: true,\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'speed',\n      index: 10,\n      type: 'number',\n      label: 'Vehicle Speed',\n      valuePath: 'speed',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-events-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/vehicle-events-widget/config\", \"adept-iq/pods/components/iq-widgets/vehicle-events-widget/avlmConfig\", \"adept-iq/pods/components/iq-widgets/vehicle-events-widget/scheduleConfig\", \"adept-iq/config/environment\", \"adept-iq/utils/find-row-record\", \"adept-iq/config/api-urls\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/config/mapped-permIds\", \"adept-iq/models/dispatch-route\", \"adept-iq/models/dashboard\"], function (_exports, _component, _config, _avlmConfig, _scheduleConfig, _environment, _findRowRecord, _apiUrls, _moment, _unwrapProxy, _mappedPermIds, _dispatchRoute, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = ['clusters', 'vehicleRoutes', 'vehicleRoutes.driverShifts', 'vehicleRoutes.vehicle', 'vehicleRoutes.driverShifts.driver', 'vehicleRoutes.vehicle.vehicleType', 'driverBreaks', 'driverBreaks.driverBreakEvents', 'vehicleRoutes.vehicle.vehicleEvents', 'clusters.trips', 'clusters.trips.stops'];\n\n  var _default = _component.default.extend({\n    classNames: ['stops-widget'],\n    classNameBindings: ['isReordering'],\n    editModal: Ember.inject.service(),\n    dragCoordinator: Ember.inject.service(),\n    stopsReorder: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    routeexecevent: Ember.inject.service(),\n    user: Ember.inject.service(),\n    editComponent: 'iq-widgets/stops-form-widget',\n    driverBreakEditComponent: 'iq-widgets/driver-breaks-form-widget',\n    vehicleEventComponent: 'iq-widgets/vehicle-event-form-widget',\n    noShowComponent: 'iq-widgets/noshow-event-stop-form-widget',\n    routesEndComponent: 'iq-widgets/routes-end-form-widget',\n    routesStartComponent: 'iq-widgets/routes-start-form-widget',\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    sourceRowId: null,\n    dragTarget: null,\n    isReordering: Ember.computed.alias('stopsReorder.reorderInProgress'),\n    onReorderChange: Ember.observer('stopsReorder.reorderInProgress', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n    }),\n    dynamicSingleActions: Ember.computed('table.rows.@each.{selected,status}', function () {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        return this._dynamicDispatchActions();\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            return this._dynamicScheduleActions();\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            return this._dynamicDispatchActions();\n        }\n      }\n    }),\n    dragRowGroup: Ember.computed('row', function () {\n      return this.get('table.rows');\n    }).readOnly(),\n    dragDirection: Ember.computed('dragTarget', 'sourceRowId', function () {\n      const targetRow = this.get('dragTarget');\n\n      if (targetRow) {\n        const rows = this.get('dragRowGroup');\n        const targetIdx = rows.indexOf((0, _findRowRecord.findRowRecordByElement)(targetRow, rows));\n        const sourceIdx = rows.indexOf(rows.findBy('rowId', this.get('sourceRowId')));\n        return sourceIdx - targetIdx;\n      }\n\n      return null;\n    }).readOnly(),\n    dragOverClass: Ember.computed('dragDirection', function () {\n      const direction = this.get('dragDirection') < 0 ? 'below' : 'above';\n      return ` drag-target-${direction} drag-target`;\n    }),\n\n    init() {\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this.set('config', _scheduleConfig.default);\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this.set('config', _config.default);\n            break;\n        }\n      }\n\n      this._super(...arguments);\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        // if it is a trip active context\n        // only include the pick and drop stops\n        if (this.get('activeContext.topActiveContext').tripActiveContext()) {\n          return records.filter(record => {\n            return ['pick', 'drop'].includes(record.get('stopType'));\n          });\n        }\n\n        return records;\n      });\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    saveCancelRecordFunction(records) {\n      /*eslint-disable */\n      const me = this;\n      /*eslint-enable */\n\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        if (!Ember.isEmpty(records)) {\n          records.forEach(record => {\n            const cancelData = this.get('routeexecevent').cancelData();\n            const prepareCancelData = this.get('routeexecevent').prepareTripCancelData(cancelData, record);\n            const json = JSON.stringify(prepareCancelData);\n            const session = this.get('session');\n            return this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking/' + record.get('id') + '/cancellation', {\n              method: 'POST',\n              contentType: 'application/json',\n              headers: {\n                'Authorization': `Bearer ${session.data.authenticated.token}`\n              },\n              data: json\n            }).then(() => {\n              record.set('isForceDirty', false); // record.set('id',response.data.id);\n\n              me.get('activeContext.topActiveContext').get('refreshTableContent').perform('route');\n              me.sendMessagesToVehicles(record, 'No Show');\n            }).catch(function (error) {\n              reject(error);\n            });\n          });\n        }\n      });\n    },\n\n    saveRouteStartRecordFunction(records) {\n      return Ember.RSVP.all(records.map(record => {\n        if (Ember.isNone(record.get('dispatchRoute.assignedDriver.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot start a route that does not have a driver.'));\n        }\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedVehicle.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot start a route that does not have a vehicle.'));\n        }\n\n        const routeStartData = this.get('routeexecevent').routeStartData();\n        const preparedRouteStartData = this.get('routeexecevent').prepareRouteStartData(routeStartData, record);\n        const json = JSON.stringify(preparedRouteStartData);\n        const session = this.get('session');\n        return this.get('ajax').post(_apiUrls.API.avlmService.host + '/route-exec-event', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        }).then(() => {\n          record.set('isForceDirty', false);\n          this.get('activeContext.topActiveContext').get('refreshTableContent').perform('route');\n          this.get('notifications').success('Start route successful');\n        }).catch(() => {\n          this.get('notifications').warning('Start route failed');\n        });\n      }));\n    },\n\n    saveRouteEndRecordFunction(records) {\n      return Ember.RSVP.all(records.map(record => {\n        if (Ember.isNone(record.get('dispatchRoute.assignedDriver.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot end a route that does not have a driver.'));\n        }\n\n        if (Ember.isNone(record.get('dispatchRoute.assignedVehicle.id'))) {\n          return Ember.RSVP.Promise.reject(new Error('You cannot end a route that does not have a vehicle.'));\n        }\n\n        const routeEndData = this.get('routeexecevent').routeEndData();\n        const preparedRouteEndData = this.get('routeexecevent').prepareRouteEndData(routeEndData, record);\n        const json = JSON.stringify(preparedRouteEndData);\n        const session = this.get('session');\n        return this.get('ajax').post(_apiUrls.API.avlmService.host + '/route-exec-event', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        }).then(() => {\n          record.set('isForceDirty', false);\n          this.get('activeContext.topActiveContext').get('refreshTableContent').perform('route');\n        });\n      }));\n    },\n\n    saveDriverBreakFunction(records) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const routeBreakAdapter = store.adapterFor('route-break');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n      this.set('editModal.errors', []);\n      return records.reduce(async (acu, record) => {\n        const requestTime = record.get('requestTime');\n        const projectedEndDate = record.get('projectedEndDate');\n        const place = (0, _unwrapProxy.unwrapProxy)(record.get('place'));\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        const locationExist = !Ember.isEmpty(location.get('lat'));\n        let placeResponse;\n        place.set('type', 'driverBreak');\n        place.set('schedule', (0, _unwrapProxy.unwrapProxy)(record.get('schedule')));\n        record.set('estimatedStart', requestTime);\n        record.set('estimatedEnd', projectedEndDate); // temporary assignment of zone type until we figure out how to deal with\n        // zone types\n\n        address.set('zoneName', store.peekAll('zone-type').get('firstObject')); // creating new driver break\n\n        if (record.get('isNew')) {\n          try {\n            if (locationExist) {\n              record.set('place', place);\n              const locationResponse = await locationAdapter.postLocation(location);\n              const addressResponse = await addressAdapter.postAddress(address);\n              await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n              placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n            }\n\n            const placeId = Ember.isNone(placeResponse) ? '' : placeResponse.data.id;\n            const routeBreak = await routeBreakAdapter.postRouteBreak(record, placeId);\n            return acu.then(() => dispatchRouteAdapter.createDriverBreak((0, _unwrapProxy.unwrapProxy)(record.get('route.dispatchRoute')), routeBreak.data.attributes.plannedRouteOrdinal, routeBreak.data.id)).then(() => {\n              this.get('notifications').success(`Successfully added driver break B${routeBreak.data.id} to route ${record.get('route.name')}`);\n              this.get('activeContext.topActiveContext').get('refreshTableContent').perform([this.get('modelName'), 'stop-point']);\n              return Ember.RSVP.Promise.resolve();\n            });\n          } catch (e) {\n            this.get('notifications').warning(`Failed to add driver break to route ${record.get('route.name')}`);\n            return Ember.RSVP.Promise.reject();\n          }\n        } // patching driver break\n\n\n        try {\n          let placeId;\n\n          if (locationExist) {\n            if (!Ember.isEmpty(place.id)) {\n              await place.save();\n              await location.save();\n              await address.save();\n              placeId = place.get('id');\n            } else {\n              const locationResponse = await locationAdapter.postLocation(location);\n              const addressResponse = await addressAdapter.postAddress(address);\n              await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n              placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n              placeId = Ember.isNone(placeResponse) ? '' : placeResponse.data.id;\n            }\n          }\n\n          return routeBreakAdapter.patchRouteBreak(record, placeId).then(() => {\n            this.get('notifications').success(`Successfully added driver break B${record.get('id')} to route ${record.get('route.name')}`);\n            return Ember.RSVP.Promise.resolve();\n          });\n        } catch (e) {\n          this.get('notifications').warning(`Failed to add driver break to route ${record.get('route.name')}`);\n          return Ember.RSVP.Promise.reject();\n        }\n      }, Ember.RSVP.Promise.resolve());\n    },\n\n    saveNoShowRecordFunction(records) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const tripNoShowAdapter = store.adapterFor('trip-noshow');\n      const notifications = this.get('notifications');\n      return records.reduce((acu, record) => {\n        const dsStop = (0, _unwrapProxy.unwrapProxy)(record);\n        const noshow = (0, _unwrapProxy.unwrapProxy)(dsStop.get('noShow'));\n        const noshowReason = (0, _unwrapProxy.unwrapProxy)(noshow.get('noShowReasonCode'));\n        const trip = (0, _unwrapProxy.unwrapProxy)(dsStop.get('trip'));\n        trip.set('noshowDetails', noshow.get('notes'));\n        return acu.then(() => routeExecEventAdapter.createStopNoShowEvent(record)).then(() => tripNoShowAdapter.createTripNoShow(trip, noshowReason)).then(() => {\n          notifications.success(`Successfully No Showed Trip ${dsStop.get('trip.tripId')}`);\n        }).catch(e => {\n          notifications.warning(`Failed to No Show Trip ${dsStop.get('trip.tripId')}`);\n          throw new Error(e);\n        });\n      }, Ember.RSVP.Promise.resolve());\n    },\n\n    reorderTripInRoute(routeId, tripId, pickOrdinal, dropOrdinal, sourceStop, targetStop) {\n      /*eslint-disable */\n      const me = this;\n      /*eslint-enable */\n\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        const session = this.get('session');\n        const reorderUrl = `/dispatch-route/${routeId}/tripTransfer/${tripId}?pickOrdinal=${pickOrdinal}&dropOrdinal=${dropOrdinal}`;\n        const targetStopType = targetStop.get('stopType');\n        const sourceStopType = sourceStop.get('stopType'); // change pointer to working so user knows\n\n        me.cursorWait();\n        return this.get('ajax').post(_apiUrls.API.dispatchService.host + reorderUrl, {\n          method: 'PUT',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        }).then(() => {\n          // switch pointer back to default\n          me.cursorDefault();\n          me.get('stopsReorder').stopReorder();\n\n          if (targetStopType === 'pullinGarage') {\n            me.get('notifications').success(`Successfully moved Trip ${sourceStop.get('trip.tripId')} ${sourceStopType} stop to the bottom`);\n          } else if (targetStopType === 'pulloutGarage') {\n            me.get('notifications').success(`Successfully moved Trip ${sourceStop.get('trip.tripId')} ${sourceStopType} stop to the top`);\n          } else {\n            me.get('notifications').success(`Successfully swapped Trip ${sourceStop.get('trip.tripId')} ${sourceStopType} stop with Trip ${targetStop.get('trip.tripId')} ${targetStopType} stop`);\n          }\n\n          me.get('activeContext').refreshTableContent('stop');\n        }).catch(function (error) {\n          let message = '';\n\n          if (!Ember.isNone(error) && !Ember.isNone(error.payload) && !Ember.isNone(error.payload.message)) {\n            message = error.payload.message;\n          } // switch pointer back to default\n\n\n          me.cursorDefault();\n          me.get('stopsReorder').stopReorder();\n          me.get('notifications').warning(`Failed to Reorder Trip. ${message}`);\n          reject(error);\n        });\n      });\n    },\n\n    reorderBreakInRoute(routeId, driverBreakId, breakOrdinal) {\n      // eslint-disable-next-line consistent-this\n      const me = this;\n      const session = this.get('session');\n      const reorderUrl = `/dispatch-route/${routeId}/break/${driverBreakId}?ordinal=${breakOrdinal}`; // change pointer to working so user knows\n\n      me.cursorWait();\n      return this.get('ajax').post(_apiUrls.API.dispatchService.host + reorderUrl, {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(() => {\n        // switch pointer back to default\n        me.cursorDefault();\n        me.get('stopsReorder').stopReorder();\n        me.get('notifications').success(`Successfully reordered Driver Break B${driverBreakId}`);\n        me.get('activeContext').refreshTableContent('stop');\n      }).catch(function (error) {\n        let message = '';\n\n        if (!Ember.isNone(error) && !Ember.isNone(error.payload) && !Ember.isNone(error.payload.message)) {\n          message = error.payload.message;\n        } // switch pointer back to default\n\n\n        me.cursorDefault();\n        me.get('stopsReorder').stopReorder();\n        me.get('notifications').warning(`Failed to Reorder Driver Break. ${message}`);\n      });\n    },\n\n    validateReorder(sourceType, sourceRowRecord, adjustedTargetRowRecord, pickOrdinal, dropOrdinal) {\n      if (!Ember.isNone(sourceRowRecord.get('status'))) {\n        this.get('notifications').warning('Cannot move stop because trip have already been started.');\n        return false;\n      }\n\n      if (sourceType === 'break' && !Ember.isNone(sourceRowRecord.get('status'))) {\n        this.get('notifications').warning('Cannot move break because it have already been started.');\n        return false;\n      }\n\n      if (!Ember.isNone(adjustedTargetRowRecord.get('status'))) {\n        this.get('notifications').warning('Cannot move stop before a trip that have already been started.');\n        return false;\n      }\n\n      if (adjustedTargetRowRecord.get('stopType') === 'break' && !Ember.isNone(adjustedTargetRowRecord.get('status'))) {\n        this.get('notifications').warning('Cannot move stop before a break that have already been started.');\n        return false;\n      }\n\n      if (sourceType !== 'break' && dropOrdinal <= pickOrdinal) {\n        this.get('notifications').warning('Drop-off cannot be before the Pickup');\n        return false;\n      }\n\n      return true;\n    },\n\n    doReorder(sourceRowRecord, targetRowRecord) {\n      const tooltip = this.get('tooltip'); // the next index on the ordered list\n\n      const orderedStopsWithBreaks = targetRowRecord.get('dispatchRoute.orderedStopsWithBreaks');\n      let adjustedTargetRowRecord = null;\n      const sourceType = sourceRowRecord.get('stopType');\n      const title = 'Reordering Stops';\n      let routeId = null;\n      let tripId = null;\n      let pickOrdinal = null;\n      let dropOrdinal = null;\n      let breakOrdinal = null;\n\n      if (sourceType === 'pulloutGarage' || sourceType === 'pullinGarage') {\n        return false;\n      } // collect data for validation\n\n\n      if (targetRowRecord.get('stopType') === 'pulloutGarage') {\n        // pullout should always be on top\n        adjustedTargetRowRecord = orderedStopsWithBreaks[0];\n      } else if (targetRowRecord.get('stopType') === 'pullinGarage') {\n        // pullout should always be on top\n        adjustedTargetRowRecord = orderedStopsWithBreaks[orderedStopsWithBreaks.length - 1];\n      } else {\n        adjustedTargetRowRecord = targetRowRecord;\n      }\n\n      if (sourceType === 'drop') {\n        routeId = sourceRowRecord.get('dispatchRoute.id');\n        tripId = sourceRowRecord.get('trip.id');\n        pickOrdinal = sourceRowRecord.get('trip.pick.stopPoint.routeOrdinal');\n\n        if (targetRowRecord.get('stopType') === 'pullinGarage') {\n          dropOrdinal = adjustedTargetRowRecord.get('routeOrdinal') + 1;\n        } else {\n          dropOrdinal = adjustedTargetRowRecord.get('routeOrdinal');\n        }\n      } else if (sourceType === 'pick') {\n        routeId = sourceRowRecord.get('dispatchRoute.id');\n        tripId = sourceRowRecord.get('trip.id');\n        pickOrdinal = adjustedTargetRowRecord.get('routeOrdinal');\n        dropOrdinal = sourceRowRecord.get('trip.drop.stopPoint.routeOrdinal');\n      } else if (sourceType === 'break') {\n        routeId = sourceRowRecord.get('dispatchRoute.id');\n\n        if (targetRowRecord.get('stopType') === 'pulloutGarage') {\n          breakOrdinal = 1;\n        } else {\n          breakOrdinal = parseInt(targetRowRecord.get('cluster.routeOrdinal'), 10);\n        }\n      } else {\n        this.get('notifications').warning('Invalid Source');\n        return false;\n      } // confirm\n\n\n      this.get('stopsReorder').toggleHiddenFlag();\n      tooltip.pushConfirmation({\n        tip: `Move stop Id ${sourceRowRecord.get('id')} to position ${adjustedTargetRowRecord.get('routeOrdinal')}`,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          if (!this.validateReorder(sourceType, sourceRowRecord, adjustedTargetRowRecord, pickOrdinal, dropOrdinal)) {\n            this.get('stopsReorder').stopReorder();\n            return false;\n          }\n\n          if (sourceType === 'break') {\n            this.reorderBreakInRoute(routeId, sourceRowRecord.get('routeBreak.id'), breakOrdinal);\n          } else {\n            this.reorderTripInRoute(routeId, tripId, pickOrdinal, dropOrdinal, (0, _unwrapProxy.unwrapProxy)(sourceRowRecord), (0, _unwrapProxy.unwrapProxy)(targetRowRecord));\n          }\n\n          this.get('stopsReorder').toggleHiddenFlag();\n          return true;\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          this.get('stopsReorder').toggleHiddenFlag();\n          tooltip.reset();\n        }\n      });\n    },\n\n    // generic function to append the stop type to an action label\n    appendStopTypeToActionLabel(action, stopPoint) {\n      switch (action.id) {\n        case 'unperform':\n          {\n            this.set('unPerformAction.name', 'Unperform');\n\n            if (stopPoint.get('isNoShow')) {\n              this.set('unPerformAction.name', 'Unperform No Show');\n            }\n\n            break;\n          }\n\n        default:\n      }\n    },\n\n    actions: {\n      onColumnClick() {\n        if (this.get('stopsReorder').reorderInProgress) return;\n\n        this._super(...arguments);\n      },\n\n      onSearchButtonClick() {\n        if (this.get('stopsReorder').reorderInProgress) return;\n\n        this._super(...arguments);\n      },\n\n      onFilterButtonClick() {\n        if (this.get('stopsReorder').reorderInProgress) return;\n\n        this._super(...arguments);\n      },\n\n      onRowRightClick() {\n        if (this.get('stopsReorder').reorderInProgress) return;\n\n        this._super(...arguments);\n      }\n\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const role = this.get('workspace.dashboardModel.role');\n\n      if (_environment.default.APP.avlmLite) {\n        this._initDispatchSingleActions();\n      }\n\n      if (!_environment.default.APP.avlmLite) {\n        switch (role) {\n          case _dashboard.SCHEDULE_ROLENAME:\n            this._initScheduleSingleActions();\n\n            break;\n\n          case _dashboard.DISPATCH_ROLENAME:\n          default:\n            this._initDispatchSingleActions();\n\n            break;\n        }\n      }\n    },\n\n    dragStart(event) {\n      const row = (0, _findRowRecord.findRowRecordByElement)(event.target, this.get('dragRowGroup'));\n      if (Ember.isBlank(row)) return;\n      this.set('sourceRowId', row.get('rowId'));\n      const dragId = Ember.guidFor(row);\n      this.get('dragCoordinator').setSourceRow(dragId, row, 'stops');\n      event.dataTransfer.setData('text', dragId);\n    },\n\n    dragOver(event) {\n      event.preventDefault();\n      if (this.get('dragCoordinator.widgetType') !== 'stops') return;\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drag over other widget elements.\n\n      if (Ember.isBlank(rowElement)) {\n        return;\n      }\n\n      this.set('dragTarget', rowElement);\n      this.$(`#${rowElement.id}`).addClass(this.get('dragOverClass'));\n    },\n\n    dragLeave(event) {\n      event.preventDefault();\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drag over other widget elements.\n\n      if (Ember.isBlank(rowElement)) {\n        return;\n      }\n\n      this.$(`#${rowElement.id}`).removeClass(['drag-target-above', 'drag-target-below', 'drag-target']);\n    },\n\n    drop(event) {\n      if (this.get('dragCoordinator.widgetType') !== 'stops') return;\n      const rowElement = (0, _findRowRecord.findRowElement)(event.target); // User might drop onto other widget elements.\n\n      if (Ember.isBlank(rowElement)) {\n        return;\n      }\n\n      this.$(`#${rowElement.id}`).removeClass(['drag-target-above', 'drag-target-below', 'drag-target']);\n      const table = this.get('table');\n      const rows = this.get('dragRowGroup'); // let sourceRowRecord = rows.findBy('rowId', this.get('sourceRowId'));\n      // // User might drop elements that are not Stops widget rows.\n      // if (isBlank(sourceRowRecord)) {\n      //   return;\n      // }\n\n      const sourceRowRecord = this.get('dragCoordinator').getSourceRow(event.dataTransfer.getData('text'));\n      if (Ember.isBlank(sourceRowRecord)) return;\n      const targetRowRecord = (0, _findRowRecord.findRowRecordByElement)(event.target, rows);\n\n      const _rows = rows.toArray();\n\n      const targetRowIdx = _rows.indexOf(targetRowRecord) + (this.get('dragDirection') < 0 ? 0 : 0);\n      event.dataTransfer.dropEffect = 'move';\n      event.preventDefault();\n      event.stopPropagation();\n      table.notifyPropertyChange('rows');\n\n      _rows.removeObject(sourceRowRecord);\n\n      _rows.insertAt(targetRowIdx, sourceRowRecord);\n\n      const result = this.doReorder(sourceRowRecord, targetRowRecord);\n\n      if (result) {\n        rows.setObjects(_rows);\n      }\n\n      table.notifyPropertyChange('rows');\n    },\n\n    dragEnd() {\n      this.set('sourceRowId', null);\n      this.set('dragTarget', null);\n      this.get('dragCoordinator').clearSourceRows();\n    },\n\n    _initDispatchSingleActions() {\n      this.set('noShowAction', {\n        id: 'noShow',\n        permId: _mappedPermIds.default.noShowTrip,\n        name: 'No Show',\n        action: model => {\n          const store = this.get('store');\n          const noShowReasonCodes = this.get('store').peekAll('no-show-reason-category');\n          model.set('noShow', store.createRecord('no-show', {\n            noShowReasonCode: noShowReasonCodes.firstObject\n          }));\n          model.set('timestamp', new Date());\n          const noShowComponent = this.get('noShowComponent');\n          this.get('editModal').open(noShowComponent, [model], this.get('saveNoShowRecordFunction').bind(this));\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('removeAction', {\n        id: 'remove',\n        name: 'Remove',\n        action: () => {},\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editAction', {\n        id: 'edit',\n        name: 'Edit',\n        action: () => {},\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('addDriverBreakAction', {\n        id: 'addDriverBreak',\n        permId: _mappedPermIds.default.addBreak,\n        name: 'Add Driver Break',\n        action: model => {\n          const store = this.get('store');\n          const route = (0, _unwrapProxy.unwrapProxy)(model.get('dispatchRoute.route'));\n\n          if (!Ember.isEmpty(route) || !Ember.isNone(route)) {\n            const lastStop = route.get('dispatchRoute.orderedStopsWithBreaks').lastObject;\n            const plannedStartTime = (0, _moment.default)(route.get('computedPlannedStartTime'));\n            const driverBreak = store.createRecord('route-break', {\n              estimatedStart: plannedStartTime.toDate(),\n              requestTime: plannedStartTime.toDate(),\n              route: route,\n              schedule: route.get('schedule'),\n              notes: 'Driver Break',\n              plannedRouteOrdinal: lastStop.get('routeOrdinal') + 1,\n              plannedDuration: 15,\n              state: 'planned',\n              status: 'unscheduled'\n            });\n\n            if (Ember.isNone(driverBreak.get('place.id'))) {\n              const locationModel = store.createRecord('location');\n              const addressModel = store.createRecord('address', {\n                locations: [locationModel]\n              });\n              const placeModel = store.createRecord('place', {\n                address: addressModel,\n                location: locationModel\n              });\n              driverBreak.set('place', placeModel);\n            }\n\n            this.get('records').pushObject(driverBreak);\n            const editComponent = this.get('driverBreakEditComponent');\n            this.get('editModal').open(editComponent, [driverBreak], this.get('saveDriverBreakFunction').bind(this));\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('delDriverBreakAction', {\n        id: 'deleteDriverBreak',\n        permId: _mappedPermIds.default.deleteBreak,\n        name: 'Remove Driver Break',\n        action: model => {\n          const dispatchRouteAdapter = this.get('store').adapterFor('dispatch-route');\n          const routeBreak = model.get('routeBreak');\n          const routeBreakId = routeBreak.get('id');\n          const dispatchRouteId = routeBreak.get('route.dispatchRoute.id');\n          dispatchRouteAdapter.removeDriverBreak(dispatchRouteId, routeBreakId).then(() => {\n            this.get('notifications').success(`Successfully removed driver break B${routeBreakId} from route ${routeBreak.get('route.name')}`);\n          }).catch(() => {\n            this.get('notifications').warning(`Failed to remove driver break B${routeBreakId}`);\n          });\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('editDriverBreakAction', {\n        id: 'editDriverBreak',\n        permId: _mappedPermIds.default.editBreak,\n        name: 'Edit',\n        action: model => {\n          const store = this.get('store');\n          const driverBreak = (0, _unwrapProxy.unwrapProxy)(model.get('routeBreak'));\n          const estimatedStart = (0, _moment.default)(Ember.get(driverBreak, 'estimatedStart'));\n          const estimatedEnd = (0, _moment.default)(Ember.get(driverBreak, 'estimatedEnd'));\n          driverBreak.set('plannedDuration', estimatedEnd.diff(estimatedStart, 'minutes'));\n\n          if (Ember.isNone(driverBreak.get('place.id'))) {\n            const locationModel = store.createRecord('location');\n            const addressModel = store.createRecord('address', {\n              locations: [locationModel]\n            });\n            const placeModel = store.createRecord('place', {\n              address: addressModel,\n              location: locationModel\n            });\n            driverBreak.set('place', placeModel);\n          }\n\n          this.get('records').pushObject(driverBreak);\n          const editComponent = this.get('driverBreakEditComponent');\n          this.get('editModal').open(editComponent, [driverBreak], this.get('saveDriverBreakFunction').bind(this));\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('reorderStopsAction', {\n        id: 'reorderStops',\n        permId: _mappedPermIds.default.reorderStops,\n        name: 'Reorder Stops',\n        action: () => {\n          const widget = this.get('widget');\n          const sortByStr = 'stopBreakOrd'; // route ordinal\n\n          this.get('stopsReorder').startReorder(widget, sortByStr);\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('navigateToAction', {\n        id: 'navigateTo',\n        permId: _mappedPermIds.default.navigateStop,\n        name: 'Navigate To',\n        action: model => {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Navigate To',\n            tip: 'Navigate To ' + model.place.fullAddress,\n            primaryActionText: 'Yes',\n            secondaryActionText: 'No',\n            secondaryAction: () => {\n              tooltip.reset();\n            },\n            primaryAction: () => {\n              tooltip.reset();\n              this.set('loading', true);\n              this.roadSupervisor.enter().finally(() => this.set('loading', false));\n              this.get('roadSupervisor').navigateToStop(model);\n            }\n          });\n        }\n      });\n      this.set('performAction', {\n        id: 'perform',\n        permIds: [_mappedPermIds.default.markStopArrived, _mappedPermIds.default.markStopDeparted],\n        name: 'Perform',\n        action: model => {\n          // Multi Stops is an R5.0 feature\n          // const dispatchRoute = model.get('dispatchRoute');\n          // const unperformedIQStops = dispatchRoute.findUnperformedStopsInSequence(model);\n          const unperformedIQStops = [];\n\n          switch (model.get('stopType')) {\n            case 'pick':\n              {\n                if (unperformedIQStops.length > 1) {\n                  this.get('workspace').pushState('performAllStop', {\n                    stopPoints: unperformedIQStops\n                  }, {\n                    replaceSelf: true\n                  });\n                  return;\n                }\n\n                this.get('workspace').pushState('performPickStop', {\n                  stopPoint: model\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'drop':\n              {\n                if (unperformedIQStops.length > 1) {\n                  this.get('workspace').pushState('performAllStop', {\n                    stopPoints: unperformedIQStops\n                  }, {\n                    replaceSelf: true\n                  });\n                  return;\n                }\n\n                this.get('workspace').pushState('performDropStop', {\n                  stopPoint: model\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'pulloutGarage':\n              {\n                const route = model.get('dispatchRoute.route');\n                const routesStartComponent = this.get('routesStartComponent');\n                route.set('odometer', '');\n                route.set('timestamp', new Date());\n                this.get('editModal').open(routesStartComponent, [route], this.get('saveRouteStartRecordFunction').bind(this));\n                break;\n              }\n\n            case 'pullinGarage':\n              {\n                const route = model.get('dispatchRoute.route');\n                const routesEndComponent = this.get('routesEndComponent');\n                route.set('odometer', '');\n                route.set('timestamp', new Date());\n                this.get('editModal').open(routesEndComponent, [route], this.get('saveRouteEndRecordFunction').bind(this));\n                break;\n              }\n\n            case 'break':\n              {\n                if (unperformedIQStops.length > 1) {\n                  this.get('workspace').pushState('performAllStop', {\n                    stopPoints: unperformedIQStops\n                  }, {\n                    replaceSelf: true\n                  });\n                  return;\n                }\n\n                this.get('workspace').pushState('performDriverBreak', {\n                  stopPoint: model\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            default:\n              break;\n          }\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n      this.set('unPerformAction', {\n        id: 'unperform',\n        permId: _mappedPermIds.default.unperformStop,\n        name: 'Unperform',\n        action: model => {\n          const workspace = this.get('workspace');\n          let stopType = model.get('stopType');\n\n          if (model.get('isNoShow')) {\n            const trip = (0, _unwrapProxy.unwrapProxy)(model.get('trip'));\n            stopType = trip.get('pickStopPoint.stopType'); // eslint-disable-next-line no-param-reassign\n\n            model = (0, _unwrapProxy.unwrapProxy)(trip.get('pickStopPoint'));\n          }\n\n          switch (stopType) {\n            case 'pick':\n              {\n                workspace.pushState('unPerformPickStop', {\n                  stopPoint: model\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            case 'drop':\n              {\n                workspace.pushState('unPerformDropStop', {\n                  stopPoint: model\n                }, {\n                  replaceSelf: true\n                });\n                break;\n              }\n\n            default:\n              break;\n          }\n        },\n        disableOnLockedRoute: true\n      });\n      this.set('bulkActions', [{\n        id: 'bulkEdit',\n        permId: _mappedPermIds.default.editStop,\n        name: 'Bulk Edit',\n        action: models => {\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, models);\n        }\n      }]);\n    },\n\n    _initScheduleSingleActions() {\n      this.set('cancelAction', {\n        id: 'cancelTrip',\n        permIds: [_mappedPermIds.default.cancelFuture, _mappedPermIds.default.cancelSameDay],\n        name: 'Cancel Trip',\n        action: model => {\n          const cancelTripComponent = this.get('cancelTripComponent');\n          const trip = (0, _unwrapProxy.unwrapProxy)(model.get('trip'));\n          const booking = (0, _unwrapProxy.unwrapProxy)(trip.get('booking'));\n          this.get('editModal').open(cancelTripComponent, [booking.get('legs.firstObject.segments.firstObject')], this.get('saveCancelRecordFunction').bind(this));\n        },\n        disableOnLocked: true,\n        disableOnLockedRoute: true\n      });\n    },\n\n    _dynamicDispatchActions() {\n      const noshowAction = this.get('noShowAction');\n      const breakEditAction = this.get('editDriverBreakAction');\n      const breakAddAction = this.get('addDriverBreakAction');\n      const breakDelAction = this.get('delDriverBreakAction');\n      const reorderAction = this.get('reorderStopsAction');\n      const navigateToAction = this.get('navigateToAction');\n      const performAction = this.get('performAction');\n      const unperformAction = this.get('unPerformAction');\n      const rows = this.get('table.rows') || [];\n      const row = rows.findBy('selected', true);\n      const record = row ? row.get('record') : null;\n      const stopType = row ? row.get('stopType') : null;\n      if (!row) return [];\n\n      if (this.get('stopsReorder.reorderInProgress')) {\n        return [];\n      }\n\n      this.appendStopTypeToActionLabel(unperformAction, record); // there's an off chance the avlm-route-exec event won't update the route status to started / in-progress to keep no-show available\n\n      let routeStarted = [_dispatchRoute.ROUTE_IN_PROGRESS_STATUS, _dispatchRoute.ROUTE_STARTED_STATUS, _dispatchRoute.ROUTE_AWAITING_STATUS].includes(row.get('dispatchRoute.computedStatus'));\n      let route = record.get('dispatchRoute') || record.get('avlmCluster.route');\n      let routeChecked = false;\n\n      if (route) {\n        const model = route;\n        routeChecked = this.get('activeContext.topActiveContext').isRecordChecked(model);\n      }\n\n      const multiRecordsChecked = this.get('activeContext.topActiveContext').isMultiRecordsChecked(route);\n      const isTimelineSpanMultipleDays = this.get('workspace.isTimelineSpanMultipleDays');\n      let reorderEligible = false;\n\n      if (routeChecked && !multiRecordsChecked && !isTimelineSpanMultipleDays) {\n        reorderEligible = true;\n      }\n\n      const isRoleSupervisor = this.user.isRoadSupEnable();\n\n      switch (stopType) {\n        case 'pick':\n          {\n            switch (row.get('status')) {\n              case 'Arrive':\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, noshowAction, performAction, navigateToAction];\n                  }\n\n                  return [breakAddAction, noshowAction, performAction];\n                }\n\n              case 'Depart':\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, navigateToAction, unperformAction];\n                  }\n\n                  return [breakAddAction, unperformAction];\n                }\n\n              case 'Scheduled':\n                {\n                  if (row.get('actualArrivalTime') === null || Ember.isNone(row.get('actualArrivalTime'))) {\n                    return [breakAddAction, noshowAction];\n                  }\n\n                  return [breakAddAction, noshowAction];\n                }\n\n              case 'Cancelled':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              case 'No Show':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [unperformAction];\n                }\n\n              case 'pending':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              default:\n                {\n                  const nextUnperformedStop = row.get('dispatchRoute.firstUnperformedStop');\n\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      if (nextUnperformedStop.get('id') === row.id) {\n                        return [breakAddAction, reorderAction, performAction, noshowAction];\n                      }\n\n                      return [breakAddAction, reorderAction, performAction];\n                    }\n\n                    if (nextUnperformedStop.get('id') === row.id) {\n                      return [performAction, noshowAction];\n                    }\n\n                    return [performAction, noshowAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (reorderEligible) {\n                      return [breakAddAction, reorderAction, performAction];\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return [breakAddAction, performAction];\n                  }\n\n                  return [performAction];\n                }\n            }\n          }\n\n        case 'drop':\n          {\n            switch (row.get('status')) {\n              case 'Arrive':\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, performAction, navigateToAction];\n                  }\n\n                  return [breakAddAction, performAction];\n                }\n\n              case 'Depart':\n                {\n                  if (isRoleSupervisor) {\n                    return [breakAddAction, navigateToAction];\n                  }\n\n                  return [breakAddAction, unperformAction];\n                }\n\n              case 'Cancelled':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              case 'No Show':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [unperformAction];\n                }\n\n              case 'pending':\n                {\n                  if (isRoleSupervisor) {\n                    return [navigateToAction];\n                  }\n\n                  return [];\n                }\n\n              default:\n                {\n                  if (routeStarted) {\n                    if (reorderEligible) {\n                      return [breakAddAction, reorderAction, performAction];\n                    }\n\n                    return [breakAddAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (reorderEligible) {\n                      return [breakAddAction, reorderAction, performAction];\n                    }\n\n                    if (isRoleSupervisor) {\n                      return [navigateToAction];\n                    }\n\n                    return [breakAddAction, performAction];\n                  }\n\n                  return [];\n                }\n            }\n          }\n\n        case 'break':\n          {\n            routeStarted = ['In Progress', 'Started'].includes(row.get('dispatchRoute.computedStatus'));\n            route = row.get('dispatchRoute');\n\n            switch (row.get('routeBreak.status')) {\n              case 'OnBreak':\n                return [breakAddAction, performAction];\n\n              case 'OffBreak':\n                return [breakAddAction];\n\n              default:\n                {\n                  if (routeStarted) {\n                    if (routeChecked && !multiRecordsChecked) {\n                      return [breakAddAction, breakDelAction, breakEditAction, reorderAction, performAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction, performAction];\n                  }\n\n                  if (!Ember.isNone(route)) {\n                    if (routeChecked && !multiRecordsChecked) {\n                      return [breakAddAction, breakDelAction, breakEditAction, reorderAction, performAction];\n                    }\n\n                    return [breakAddAction, breakDelAction, breakEditAction, performAction];\n                  }\n\n                  return [];\n                }\n            }\n          }\n\n        case 'pulloutGarage':\n          {\n            if (isRoleSupervisor) {\n              return [breakAddAction, navigateToAction];\n            }\n\n            return [breakAddAction];\n          }\n\n        case 'pullinGarage':\n          {\n            if (isRoleSupervisor) {\n              return [breakAddAction, navigateToAction];\n            }\n\n            return [breakAddAction];\n          }\n\n        default:\n          {\n            return [];\n          }\n      }\n    },\n\n    _dynamicScheduleActions() {\n      const cancelAction = this.get('cancelAction');\n      const rows = this.get('table.rows') || [];\n      const row = rows.findBy('selected', true);\n      const record = row ? row.get('record') : null;\n      const stopType = record ? record.get('type') : null;\n      const trip = (0, _unwrapProxy.unwrapProxy)(record.get('trip'));\n      if (!row) return [];\n\n      switch (stopType) {\n        case 'pick':\n          {\n            if (trip.get('isScheduled')) {\n              return [cancelAction];\n            }\n\n            return [];\n          }\n\n        case 'drop':\n          {\n            if (trip.get('isScheduled')) {\n              return [cancelAction];\n            }\n\n            return [];\n          }\n\n        case 'break':\n          {\n            return [];\n          }\n\n        default:\n          return [];\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-events-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/vehicle-events-widget',\n    rowComponent: 'iq-widgets/vehicle-events-widget/stops-row',\n    modelName: 'vehicle-event',\n    defaultSortId: 'tripId',\n    defaultSortAsc: false,\n    title: 'Vehicle-event',\n    columns: [{\n      id: 'id',\n      index: 18,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      valuePreview: '1',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'time',\n      index: 0,\n      type: 'datetime',\n      label: 'Time',\n      valuePath: 'time',\n      editable: true,\n      format: 'hh:mm A',\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'route',\n      index: 1,\n      type: 'text',\n      label: 'Route',\n      valuePath: 'route',\n      valuePreview: '40',\n      defaultWidth: 70,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'vehicleId',\n      index: 2,\n      type: 'text',\n      label: 'Vehicle ID',\n      valuePath: 'vehicleId',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'lat',\n      index: 3,\n      type: 'number',\n      label: 'Latitude',\n      valuePath: 'lat',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'lng',\n      index: 4,\n      type: 'number',\n      label: 'Longitude',\n      valuePath: 'lng',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'passengerId',\n      index: 5,\n      type: 'text',\n      label: 'Passenger ID',\n      valuePath: 'passengerId',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'passengerFName',\n      index: 6,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'passengerFName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'passengerLName',\n      index: 7,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'passengerLName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'stopType',\n      index: 8,\n      type: 'text',\n      label: 'Stop Type',\n      valuePath: 'stopType',\n      valuePreview: 'Pick',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 50\n    }, {\n      id: 'stopAddress',\n      index: 9,\n      type: 'text',\n      label: 'Stop Address',\n      valuePath: 'stopAddress',\n      searchable: true,\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'speed',\n      index: 10,\n      type: 'number',\n      label: 'Vehicle Speed',\n      valuePath: 'speed',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-events-widget/scheduleConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/stops-widget',\n    rowComponent: 'iq-widgets/stops-widget/stops-row',\n    modelName: ['route-break', 'trip-stop'],\n    defaultSortId: 'tripId',\n    defaultSortAsc: false,\n    title: 'Stops',\n    columns: [{\n      id: 'id',\n      index: 18,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      valuePreview: '1',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'type',\n      index: 0,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'segmentStop.type',\n      valuePreview: 'Pick',\n      searchable: true,\n      isMapLabelVisible: true,\n      hidden: true,\n      defaultWidth: 50\n    }, {\n      id: 'tripId',\n      index: 1,\n      type: 'uuid',\n      label: 'Trip ID',\n      valuePath: 'trip.tripId',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderLastName',\n      index: 2,\n      type: 'text',\n      label: 'Passenger Last Name',\n      valuePath: 'trip.segment.leg.rider.lastName',\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'riderFirstName',\n      index: 3,\n      type: 'text',\n      label: 'Passenger First Name',\n      valuePath: 'trip.segment.leg.rider.firstName',\n      searchable: true,\n      defaultWidth: 60\n    }, {\n      id: 'riderPhone',\n      index: 16,\n      type: 'enum',\n      label: 'Passenger Phone Number',\n      valuePath: 'trip.segment.leg.rider.formattedPhoneNumbers',\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'riderId',\n      index: 17,\n      type: 'uuid',\n      label: 'Passenger ID',\n      valuePath: 'trip.segment.leg.rider.riderId',\n      searchable: true,\n      defaultWidth: 60,\n      hidden: true\n    }, {\n      id: 'status',\n      index: 7,\n      type: 'text',\n      label: 'Status',\n      valuePath: '',\n      // non-exported stops don't have a status\n      valuePreview: 'Planned',\n      editable: false,\n      defaultWidth: 60,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'OTPstatus',\n      index: 4,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: '',\n      defaultWidth: 40,\n      highlightable: true,\n      searchable: true\n    }, {\n      id: 'ETA',\n      index: 5,\n      type: 'date',\n      label: 'ETA',\n      valuePath: '',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 40,\n      highlightable: true\n    }, {\n      id: 'promisedTime',\n      index: 13,\n      type: 'datetime',\n      label: 'Promise Time',\n      valuePath: 'trip.promiseTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'requestedTime',\n      index: 6,\n      type: 'time',\n      label: 'Request Time',\n      valuePath: 'trip.segment.leg.requestTime',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'actualArrivalTime',\n      index: 8,\n      type: 'time',\n      label: 'Actual Arrive Timestamp',\n      valuePath: '',\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 150\n    }, {\n      id: 'actualDepartTime',\n      index: 9,\n      type: 'time',\n      label: 'Actual Depart Timestamp',\n      valuePath: '',\n      editable: true,\n      hidden: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 150\n    }, {\n      id: 'plannedDepartTime',\n      index: 14,\n      type: 'datetime',\n      label: 'Planned Depart Time',\n      valuePath: '',\n      editable: true,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      defaultWidth: 130,\n      hidden: true\n    }, {\n      id: 'routeName',\n      index: 10,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'trip.route.name',\n      valuePreview: '40',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'notes',\n      index: 25,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'segmentStop.notes',\n      editable: true,\n      searchable: true,\n      defaultWidth: 100,\n      hidden: true\n    }, {\n      id: 'address',\n      index: 11,\n      type: 'text',\n      label: 'Address ',\n      valuePath: 'segmentStop.place.address.readableAddress',\n      searchable: true,\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'date',\n      index: 12,\n      type: 'date',\n      label: 'Date',\n      valuePath: 'trip.segment.leg.requestTime',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'city',\n      type: 'text',\n      label: 'City',\n      valuePath: 'place.address.locality',\n      editable: true,\n      searchable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'odometer',\n      index: 26,\n      type: 'number',\n      label: 'Odometer on Arrival',\n      valuePath: '',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'serviceWindow',\n      index: 15,\n      type: 'text',\n      label: 'Service Window',\n      valuePath: '',\n      editable: true,\n      hidden: true,\n      defaultWidth: 80\n    }, {\n      id: 'BreakStartTime',\n      index: 19,\n      type: 'time',\n      label: 'Planned Break Start Time',\n      valuePath: '',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'BreakEndTime',\n      index: 20,\n      type: 'time',\n      label: 'Planned Break End Time',\n      valuePath: '',\n      editable: true,\n      format: 'HH:mm',\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'BreakType',\n      index: 21,\n      type: 'text',\n      label: 'Break Type',\n      valuePath: '',\n      valuePreview: 'Floating',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'BreakCategory',\n      index: 22,\n      type: 'text',\n      label: 'Break Category',\n      valuePath: '',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'onboardCount',\n      index: 24,\n      type: 'number',\n      label: 'Onboard Count',\n      valuePath: 'segmentStop.onboardCount',\n      defaultWidth: 70,\n      hidden: true\n    }, {\n      id: 'stopBreakOrd',\n      type: 'number',\n      label: 'Stop Break Ord',\n      valuePath: 'plannedRouteOrdinal',\n      searchable: false,\n      editable: false,\n      defaultWidth: 50,\n      hidden: true\n    }, {\n      id: 'otp',\n      index: 27,\n      type: 'number',\n      label: 'OTP',\n      valuePath: '',\n      hidden: true,\n      highlightable: true\n    }, {\n      id: 'arriveLat',\n      index: 28,\n      type: 'string',\n      label: 'Actual Arrive Lat',\n      valuePath: '',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'arriveLng',\n      index: 29,\n      type: 'string',\n      label: 'Actual Arrive Lng',\n      valuePath: '',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLat',\n      index: 30,\n      type: 'string',\n      label: 'Actual Depart Lat',\n      valuePath: '',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'departLng',\n      index: 31,\n      type: 'string',\n      label: 'Actual Depart Lng',\n      valuePath: '',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'Slack Time',\n      index: 32,\n      type: 'string',\n      label: 'Slack',\n      valuePath: '',\n      editable: true,\n      defaultWidth: 50,\n      hidden: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicle-events-widget/stops-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/text-formatted-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    attributeBindings: ['draggable'],\n    draggable: 'true',\n    // TODO: delete or revise when API and/or model is updated.\n    otp: Ember.computed.alias('row.otp')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicles-breakdown-form-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/form-widget/component\", \"adept-iq/pods/components/iq-widgets/vehicles-breakdown-form-widget/config\", \"moment\", \"adept-iq/utils/zone-validation\", \"adept-iq/mixins/version-check\"], function (_exports, _component, _config, _moment, _zoneValidation, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_versionCheck.default, {\n    editableSections: _config.default.editableSections,\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    map: Ember.inject.service(),\n    classNames: ['vehicle-breakdown-form-widget', 'data-test-vehicle-breakdown-form-widget'],\n\n    validateRecords() {\n      let valid = true;\n      const records = this.get('editableRecords') || [];\n      const boundingBox = this.get('map.boundingBox');\n      this.set('editModal.errors', []);\n      records.forEach(record => {\n        const breakdownPlace = record.get('breakdownPlace');\n        const breakdownDate = (0, _moment.default)(record.get('breakdownTime'));\n        const breakdownType = record.get('breakdownType');\n        const currentDate = (0, _moment.default)();\n\n        if (Ember.isNone(breakdownPlace.get('address.address'))) {\n          this.get('editModal.errors').pushObject('Address must be valid');\n          valid = false;\n        }\n\n        if (Ember.isNone(breakdownPlace.get('location.lat')) || Ember.isNone(breakdownPlace.get('location.lng'))) {\n          this.get('editModal.errors').pushObject('Location cannot be empty');\n          valid = false;\n        }\n\n        if (!(0, _zoneValidation.insideZone)([breakdownPlace.get('location.lat'), breakdownPlace.get('location.lng')], boundingBox)) {\n          this.get('editModal.errors').pushObject('Location must be within the agency service boundary');\n          valid = false;\n        }\n\n        if (breakdownDate.isAfter(currentDate)) {\n          this.get('editModal.errors').pushObject('Breakdown time cannot be set in the future');\n          valid = false;\n        }\n\n        if (Ember.isNone(breakdownType)) {\n          this.get('editModal.errors').pushObject('Must have a breakdown reason');\n          valid = false;\n        }\n      });\n      return valid;\n    },\n\n    undoForBreakDown() {\n      const lastUndoState = this.get('editModal.undoHistory').popObject();\n      lastUndoState.forEach(_ref => {\n        let {\n          record,\n          properties\n        } = _ref;\n\n        if (record.location) {\n          record.location.set('lat', null);\n          record.location.set('lng', null);\n        }\n\n        if (properties.hasOwnProperty('breakdownType')) {\n          record.set('breakdownType', properties.breakdownType);\n          delete properties.breakdownType;\n        }\n\n        if (record.address && properties.hasOwnProperty('country')) {\n          record.address.setProperties(properties);\n        }\n\n        Object.keys(properties).forEach(propertyName => {\n          if (record.hasOwnProperty(propertyName)) {\n            record.set(propertyName, properties[propertyName]);\n          }\n        });\n      });\n      this.set('isLastUndoStateCommitted', true);\n      this.set('editModal.errors', []); // call geocode service to remove all points selected on map\n\n      this.get('geocode').deactivateGeocode();\n    },\n\n    undoAllForBreakDown() {\n      const undoHistory = this.get('editModal.undoHistory');\n      if (Ember.isPresent(undoHistory)) while (undoHistory.length > 0) this.undoForBreakDown();\n    },\n\n    actions: {\n      async onApplyClick() {\n        const vehicle = this.get('editableRecords.firstObject');\n        const dispatchRoute = vehicle ? vehicle.get('latestRouteVehicleDriver.dispatchRoute') : null;\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        const clearRouteLockTimeoutId = this.get('clearRouteLockTimeoutId').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        const closeCallback = () => {\n          this.send('onCloseClick');\n        };\n\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n        if (this.validateRecords()) {\n          try {\n            await lockRouteAction();\n            const title = this.get('title'); // don't send unlockRouteAction as callback, cause if report breakdown successfully, we don't unlock the route.\n\n            this.get('service').applyWithCallback(title, unlockRouteAction, clearRouteLockTimeoutId);\n          } catch (err) {\n            await unlockRouteAction(0);\n            return;\n          }\n        }\n      },\n\n      onUndoClick() {\n        this.undoAllForBreakDown();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicles-breakdown-form-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Read Only',\n      fields: [{\n        id: 'vehicleId',\n        type: 'text',\n        label: 'ID',\n        valuePath: 'name',\n        editable: false\n      }]\n    }, {\n      title: 'Detail',\n      fields: [{\n        id: 'breakdownPlace',\n        type: 'breakdown-location',\n        label: 'Location',\n        valuePath: 'breakdownPlace',\n        modelName: 'place',\n        isMultiType: true,\n        extra: {\n          aliasPath: 'address.content.alias',\n          notesPath: 'address.content.notes',\n          premisePath: 'address.content.premise',\n          streetNumberPath: 'address.content.streetNumber',\n          streetNamePath: 'address.content.streetName',\n          localityPath: 'address.content.locality',\n          regionPath: 'address.content.region',\n          subRegionPath: 'address.content.subRegion',\n          postalCodePath: 'address.content.postalCode',\n          countryPath: 'address.content.country',\n          freeformAddressPath: 'address.content.freeformAddress',\n          tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n          useOptionRecord: true,\n          streetAddressPath: 'address.content.streetAddress',\n          locationsPath: 'address.locations.content.firstObject.latlng'\n        }\n      }, {\n        id: 'breakdownTime',\n        type: 'timeflatpickr',\n        label: 'Breakdown Time',\n        readonlyCell: false,\n        valuePath: 'breakdownTime'\n      }, {\n        id: 'breakdownDate',\n        type: 'dateflatpickr',\n        label: 'Date',\n        valuePath: 'breakdownTime'\n      }]\n    }, {\n      title: 'Breakdown reasons',\n      fields: [{\n        id: 'breakdownType',\n        type: 'enum',\n        label: 'Reasons',\n        valuePath: 'breakdownType',\n        cellDesc: 'breakdownType',\n        editable: true,\n        hidden: false,\n        extra: {\n          optionModelName: 'breakdown-type',\n          optionSearchPath: 'name',\n          optionDisplayName: 'displayName'\n        }\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicles-widget/avlmConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/vehicles-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'avlm-vehicle',\n    title: 'Vehicles',\n    defaultSortId: 'otpStatus',\n    defaultSortAsc: false,\n    // performance table attributes\n    widgetName: 'vehicleWidget',\n    initialLimit: 5000,\n    paginationLimit: 100,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    selectedRowLimit: 20,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'ID',\n      valuePath: 'id',\n      valuePreview: '1',\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 75\n    }, {\n      id: 'typeName',\n      index: 1,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60,\n      unAvailable: true\n    }, {\n      id: 'availability',\n      index: 2,\n      type: 'enum',\n      label: 'Availabilities',\n      valuePath: 'vehicleAvailibities',\n      cellDesc: 'Availabilities',\n      isMapLabelVisible: true,\n      defaultWidth: 100,\n      unAvailable: true\n    }, {\n      id: 'breaks',\n      index: 3,\n      type: 'enum',\n      label: 'Breaks',\n      valuePath: 'formattedBreaks',\n      cellDesc: 'Breaks',\n      isMapLabelVisible: true,\n      defaultWidth: 100,\n      unAvailable: true\n    }, {\n      id: 'noOfAmbulatorySeats',\n      index: 4,\n      type: 'number',\n      label: 'Ambulatory seats',\n      valuePath: 'noOfAmbulatorySeats',\n      editable: true,\n      defaultWidth: 60,\n      highlightable: false,\n      unAvailable: true\n    }, {\n      id: 'noOfWheelChairSeats',\n      index: 5,\n      type: 'number',\n      label: 'Wheelchair spaces',\n      valuePath: 'noOfWheelChairSeats',\n      editable: true,\n      defaultWidth: 60,\n      highlightable: false,\n      unAvailable: true\n    }, {\n      id: 'active',\n      index: 6,\n      type: 'boolean',\n      label: 'Active',\n      valuePath: 'active',\n      editable: true,\n      defaultWidth: 45,\n      unAvailable: true\n    }, {\n      id: 'routeName',\n      index: 7,\n      type: 'text',\n      label: 'Route name',\n      valuePath: 'routeName',\n      mapValuePath: 'currentRoute.id',\n      editable: true,\n      hidden: true // unAvailable: true\n\n    }, {\n      id: 'driverId',\n      index: 8,\n      type: 'text',\n      label: 'Driver Id',\n      valuePath: 'driverId',\n      mapValuePath: 'currentDriver.driverId',\n      editable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 45,\n      hidden: true\n    }, {\n      id: 'driverName',\n      index: 9,\n      type: 'text',\n      label: 'Driver Name',\n      valuePath: 'driverName',\n      mapValuePath: 'driverFullName',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'garageStartAddress',\n      index: 10,\n      type: 'text',\n      label: 'Starting Garage',\n      valuePath: 'startingGarage',\n      editable: true,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'garageEndAddress',\n      index: 11,\n      type: 'text',\n      label: 'Ending Garage',\n      valuePath: 'endingGarage',\n      editable: true,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'driverAPPVersion',\n      index: 13,\n      type: 'text',\n      label: 'Driver App Version',\n      valuePath: 'driverAppVersion',\n      editable: true,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'cellularCarrier',\n      index: 16,\n      type: 'text',\n      label: 'Cellular Carrier',\n      valuePath: 'cellularCarrier',\n      editable: true,\n      unAvailable: true\n    }, {\n      id: 'otpStatus',\n      index: 18,\n      type: 'text',\n      label: 'OTP Status',\n      valuePath: 'otpStatus',\n      mapValuePath: 'otp',\n      highlightable: true\n    }, {\n      id: 'driverAppId',\n      index: 14,\n      type: 'text',\n      label: 'Driver  App Id',\n      valuePath: 'driverAppId',\n      editable: true,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'hardewareId',\n      index: 15,\n      type: 'text',\n      label: 'Hardware Id',\n      valuePath: 'hardwareId',\n      editable: true,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'cellularType',\n      index: 17,\n      type: 'text',\n      label: 'Cellular Type',\n      valuePath: 'cellularType',\n      editable: true,\n      hidden: true,\n      unAvailable: true\n    }, {\n      id: 'provider',\n      index: 19,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'provider',\n      mapValuePath: 'provider.name',\n      valuePreview: 'MAG',\n      hidden: true,\n      highlightable: false\n    }, {\n      id: 'vehicleStatus',\n      index: 20,\n      type: 'string',\n      label: 'Vehicle Status',\n      valuePath: 'status',\n      mapValuePath: 'vehicleStatus',\n      hidden: false,\n      highlightable: false,\n      isMapLabelVisible: true\n    }, {\n      id: 'gpsTimeStamp',\n      index: 21,\n      type: 'datetime',\n      label: 'Last GPS Ping Time',\n      valuePath: 'lastGpsPingTime',\n      mapValuePath: 'timestamp',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      cellItem: 'DateLocalCellItem',\n      valuePreview: '',\n      defaultWidth: 110,\n      hidden: false,\n      highlightable: false,\n      unAvailable: false\n    }, {\n      id: 'lat',\n      index: 22,\n      type: 'float',\n      label: 'Last GPS Ping Lat',\n      valuePath: 'lastGpsPingLat',\n      mapValuePath: 'lat',\n      valuePreview: '',\n      hidden: false,\n      highlightable: false,\n      unAvailable: false\n    }, {\n      id: 'lng',\n      index: 23,\n      type: 'float',\n      label: 'Last GPS Ping Lng',\n      valuePath: 'lastGpsPingLng',\n      mapValuePath: 'lng',\n      valuePreview: '',\n      hidden: false,\n      highlightable: false,\n      unAvailable: false\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'name'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routeName',\n          valuePath: 'routeName'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicles-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/ember-react-widget/component\", \"adept-iq/pods/components/iq-widgets/vehicles-widget/config\", \"adept-iq/pods/components/iq-widgets/vehicles-widget/scheduleConfig\", \"adept-iq/pods/components/iq-widgets/vehicles-widget/avlmConfig\", \"lodash\", \"adept-iq/config/api-urls\", \"adept-iq/config/environment\", \"adept-iq/models/avlm-emergency-message\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/vehicle-info\", \"adept-iq/utils/filters\", \"adept-iq/config/filter-types\", \"adept-iq/models/dashboard\", \"moment\"], function (_exports, _component, _config, _scheduleConfig, _avlmConfig, _lodash, _apiUrls, _environment, _avlmEmergencyMessage, _mappedPermIds, _vehicleInfo, _filters, _filterTypes, _dashboard, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INCLUDES = [];\n  const ROUTE_NAME = 'routeName';\n  const DRIVER = 'driverId';\n  const pathToModel = {\n    'type': 'vehicle-type'\n  };\n\n  var _default = _component.default.extend({\n    classNames: ['vehicles-widget'],\n    classNameBindings: ['isActiveClass'],\n    editModal: Ember.inject.service(),\n    breakdownComponent: 'iq-widgets/vehicles-breakdown-form-widget',\n    vehicleTypeDict: null,\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    user: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    config: _config.default,\n    defaultIncludes: INCLUDES,\n    isScheduleDashboard: Ember.computed.readOnly('workspace.isScheduleDashboard'),\n    loadVehicleTypes: function () {\n      const vehicleTypes = this.store.peekAll('vehicleType');\n      const vehicleTypeDict = {};\n      vehicleTypes.forEach(vehicleType => {\n        vehicleTypeDict[vehicleType.get('id')] = vehicleType;\n      });\n      this.set('vehicleTypeDict', vehicleTypeDict);\n    },\n    isActiveClass: Ember.computed('table.rows', 'table.columns.@each.{id}', function () {\n      if (this.user.isRoadSupEnable()) {\n        if (this.get('table.columns').isAny('id')) {\n          const columnArray = this.get('table.columns');\n          columnArray.filter(obj => {\n            if (obj.get('id') === 'name') {\n              obj.set('classNames', 'vehicle-widget-id-custom-class');\n            }\n          });\n          return ['vehicle-widget-gear-icon'];\n        }\n      }\n\n      return;\n    }),\n\n    init() {\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('config', _avlmConfig.default);\n      }\n\n      if (isScheduleDashboard) {\n        this.set('config', _scheduleConfig.default);\n      }\n\n      this._super(...arguments);\n    },\n\n    // 1. Create a new place in the Address service that represents the breakdown location, address and place\n    // 2. POST breakdown vehicle to vehicle service\n    async saveBreakdownVehicleFunction(records) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n      this.set('editModal.errors', []);\n\n      for (const record of records) {\n        let breakdownResult;\n        const breakdownPlace = record.get('breakdownPlace');\n        const breakdownTime = record.get('breakdownTime');\n        const route = record.get('latestRouteVehicleDriver.dispatchRoute.content');\n\n        try {\n          const locationResponse = await locationAdapter.postLocation(breakdownPlace.get('location'));\n          const address = await addressAdapter.postAddress(breakdownPlace.get('address'));\n          await addressAdapter.postAddressLocation(locationResponse, address);\n          const place = await placeAdapter.postPlace(breakdownPlace, address.data.id, locationResponse.data.id, 'ad_hoc');\n\n          if (route) {\n            breakdownResult = await dispatchRouteAdapter.postBreakdown(route, place.data.id, record);\n            this.get('notifications').success(`VEHICLE ${record.name} BREAKDOWN CONFIRMED`);\n          } else {\n            throw new Error(`dispatchRoute for vehicle ${record.name} was missing`);\n          }\n        } catch (error) {\n          let msg = `Vehicle ${record.name} breakdown confirmation failed`;\n          if (error.message && (error.message.includes('modified by another request') || error.message.includes('Unable to lock entities'))) msg = `Breakdown Failed, BECAUSE ITS ROUTE ${record.get('currentRouteName')} HAS BEEN MODIFIED BY ANOTHER REQUEST.`;\n          this.get('notifications').warning(msg);\n        } finally {\n          // We separate the breakdown report and rvd endtime update to avoid rvd endtime update throw breakdown report error.\n          if (breakdownResult) {\n            const rvd = record.get('latestRouteVehicleDriver');\n            const dispatchRouteId = rvd.get('dispatchRoute.id');\n            const newDispatchRoute = breakdownResult.included ? breakdownResult.included.find(includedItem => includedItem.type === 'dispatchRoute' && includedItem.id === dispatchRouteId) : null;\n\n            const newDispatchRouteVersion = _lodash.default.get(newDispatchRoute, 'attributes.version');\n\n            if ((0, _moment.default)(breakdownTime).isBefore((0, _moment.default)(rvd.get('startTime')))) {\n              let actualStartTime = (0, _moment.default)(route.get('route.actualStartTimestamp')).toDate();\n\n              if ((0, _moment.default)(breakdownTime).isBefore((0, _moment.default)(actualStartTime))) {\n                actualStartTime = breakdownTime;\n              }\n\n              rvd.set('startTime', actualStartTime);\n            }\n\n            rvd.set('endTime', breakdownTime); // set brokendown route to brakedown time\n\n            rvd.set('dispatchRouteVersion', newDispatchRouteVersion);\n            await rvd.save();\n          }\n        }\n      }\n    },\n\n    async removeBreakdownVehicleFunction(record) {\n      const notifications = this.get('notifications');\n      const title = 'Remove Breakdown';\n      const tooltip = this.get('tooltip');\n      const isRouteCompleted = !record.get('latestRoute') || record.get('latestRoute.isCompleted');\n      let confirmationMessage = `Are you sure you want to remove breakdown from vehicle ${record.get('name')} ?`;\n\n      if (!isRouteCompleted) {\n        confirmationMessage = `The vehicle's route is not Completed. ${confirmationMessage}`;\n      }\n\n      tooltip.pushConfirmation({\n        tip: confirmationMessage,\n        warning: !isRouteCompleted,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          try {\n            notifications.success(`Successfully removed breakdown status for Vehicle ${record.get('name')} `);\n            record.set('status', 'operational');\n            record.set('active', true);\n            await record.save();\n            this.createUserVehicleRemoveBreakdownLog(record);\n          } catch (e) {\n            notifications.warning(`Failed to remove breakdown status for Vehicle ${record.get('name')}`);\n          } finally {\n            tooltip.reset();\n          }\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: async () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    async createUserVehicleRemoveBreakdownLog(vehicle) {\n      const type = 'genericLogging';\n      const actualTime = (0, _moment.default)().toDate();\n      const userId = this.session.data.authenticated.userId;\n      const vehicleInfo = Ember.Object.create({\n        context: {\n          vehicle: vehicle\n        }\n      });\n      const userInfo = {\n        content: {\n          actualTime: actualTime,\n          type: type,\n          userId: userId\n        }\n      };\n      const userLogging = {\n        activity: 'Breakdown Remove',\n        loggingType: 'user',\n        details: `Removed breakdown status for vehicle ${vehicle.name}.`\n      };\n      const vehicleLogging = {\n        activity: 'Breakdown Removed',\n        loggingType: 'vehicle',\n        details: `Breakdown status removed for vehicle ${vehicle.name}.`\n      };\n      const actionKey = {\n        [type]: [userLogging, vehicleLogging]\n      };\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      activityLogAdapter.createUserVehicleActivity(userInfo, vehicleInfo, actionKey);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const role = this.get('workspace.dashboardModel.role');\n\n      switch (role) {\n        case _dashboard.SCHEDULE_ROLENAME:\n          this._initScheduleSingleActions();\n\n          break;\n\n        case _dashboard.DISPATCH_ROLENAME:\n        default:\n          this._initDispatchSingleActions();\n\n          break;\n      }\n    },\n\n    getVehicleModel(vehicleId) {\n      let model = 'vehicle';\n\n      if (_environment.default.APP.avlmLite) {\n        model = 'avlm-vehicle';\n      }\n\n      const vehicleData = this.get('store').peekRecord(model, vehicleId);\n      return vehicleData;\n    },\n\n    _initDispatchSingleActions() {\n      this.get('tableActions').push({\n        id: 'print',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Broadcast Message',\n        action: function () {\n          const vehicleRecords = this.get('store').peekAll('vehicle');\n          const vehicles = vehicleRecords.map(vehicleRecord => this.getVehicleModel(vehicleRecord.id));\n          this.sendMessagesToVehicles(vehicles, 'bulkMessage');\n        }.bind(this)\n      });\n      this.get('tableActions').unshiftObject({\n        id: 'newVehicle',\n        permId: _mappedPermIds.default.newVehicle,\n        name: 'New Vehicle',\n        action: function () {\n          const store = this.get('store');\n          const origin = store.createRecord('location');\n          const destination = store.createRecord('location');\n          const startAddress = store.createRecord('address');\n          const endAddress = store.createRecord('address');\n          const startPlace = store.createRecord('place', {\n            address: startAddress,\n            location: origin\n          });\n          const endPlace = store.createRecord('place', {\n            address: endAddress,\n            location: destination\n          });\n          const vehicleTypes = store.peekAll('vehicle-type');\n          const newModel = store.createRecord('vehicle');\n          newModel.set('startGarageCopy', startPlace);\n          newModel.set('endGarageCopy', endPlace);\n          newModel.set('shiftBreaks', []);\n          newModel.set('vehicleType', vehicleTypes.firstObject);\n          newModel.set('active', true);\n          this.get('records').pushObject(newModel);\n          this.set('editModal.editableRecords', []);\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [newModel], this.get('saveRecordFunction').bind(this), null, null, {\n            componentName: 'addVehicle'\n          });\n        }.bind(this)\n      });\n      this.set('sendMessageAction', {\n        id: 'sendMessage',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Send Message',\n        action: vehicle => {\n          this.sendMessagesToVehicles([vehicle], 'singleMessage');\n        }\n      });\n      this.set('vehicleBreakdown', {\n        id: 'vehicleBreakdown',\n        permId: _mappedPermIds.default.vehicleBreakdown,\n        name: 'Report Breakdown',\n        action: model => {\n          const store = this.get('store');\n          const dsVehicleModel = model;\n          const breakdownComponent = this.get('breakdownComponent'); // vehicle breakdown fields\n\n          const location = store.createRecord('location');\n          const address = store.createRecord('address'); // TODO: how does zone types fit in the address\n\n          address.set('zoneName', this.store.peekAll('zone-type').get('firstObject'));\n          const place = store.createRecord('place', {\n            address: address,\n            location: location\n          });\n\n          if (dsVehicleModel.get('lat') && dsVehicleModel.get('lng')) {\n            place.set('location.lat', dsVehicleModel.get('lat'));\n            place.set('location.lng', dsVehicleModel.get('lng'));\n          }\n\n          dsVehicleModel.set('breakdownPlace', place);\n          dsVehicleModel.set('breakdownTime', new Date());\n          dsVehicleModel.set('breakdownDescription', '');\n          dsVehicleModel.set('breakdownType', null);\n          this.get('editModal').open(breakdownComponent, [dsVehicleModel], this.get('saveBreakdownVehicleFunction').bind(this), null, null, {\n            componentName: 'vehicleBreakdown',\n            closeOnError: true\n          });\n        }\n      });\n      this.set('removeVehicleBreakdown', {\n        id: 'vehicleBreakdown',\n        permId: _mappedPermIds.default.accessDispatchWorkspace,\n        name: 'Remove Breakdown',\n        action: model => {\n          this.removeBreakdownVehicleFunction(model);\n        }\n      });\n      this.set('resetDeviceAction', {\n        id: 'resetDevice',\n        permId: _mappedPermIds.default.resetDeviceAction,\n        name: 'Reset device',\n        action: model => {\n          return new Promise((resolve, reject) => {\n            const vehicleInfo = (0, _vehicleInfo.vehicleInfoData)();\n            const prepareVehicleInfo = (0, _vehicleInfo.prepareVehicleInfoData)(vehicleInfo, model);\n            const notifications = this.get('notifications');\n            const title = 'Reset Device';\n            this.get('tooltip').pushConfirmation({\n              tip: 'This will disassociate the device ID from the vehicle.',\n              title,\n              primaryActionText: 'Proceed',\n              primaryAction: () => {\n                //sending PATCH to avlm/vehicle-info/{id} requires the payload id/ URL id to equal the avlm.vehicle.id\n                const session = this.get('session');\n                return this.get('ajax').request(_apiUrls.API.avlmService.host + `/vehicle-info/?callSign=${model.name}`, {\n                  method: 'GET',\n                  contentType: 'text',\n                  headers: {\n                    'Authorization': `Bearer ${session.data.authenticated.token}`\n                  }\n                }).then(response => {\n                  // if there is no device ID, inform the user and return\n                  if (!response.data[0].attributes.device || !response.data[0].attributes.device.hardwareId) {\n                    notifications.info('There is no device associated with this vehicle.');\n                    return;\n                  }\n\n                  prepareVehicleInfo.data.id = response.data[0].id;\n                  const json = JSON.stringify(prepareVehicleInfo);\n                  return this.get('ajax').request(_apiUrls.API.avlmService.host + `/vehicle-info/${response.data[0].id}`, {\n                    method: 'PATCH',\n                    contentType: 'text',\n                    headers: {\n                      'Authorization': `Bearer ${session.data.authenticated.token}`\n                    },\n                    data: json\n                  }).then(() => {\n                    notifications.success('RESET DEVICE SUCCESSFULL');\n                  });\n                }).then(() => {\n                  this.get('tooltip').reset();\n                }).catch(function (error) {\n                  notifications.warning('Error: Reset did not work correctly');\n                  this.get('tooltip').reset();\n                  reject(error);\n                });\n              },\n              secondaryActionText: 'Cancel',\n              secondaryAction: () => {\n                this.get('tooltip').reset();\n                return;\n              }\n            });\n          });\n        }\n      });\n      this.set('acknowledgeAction', {\n        id: 'emergencyAcknowledge',\n        permId: _mappedPermIds.default.emergencyAcknowledge,\n        name: 'Acknowledge Emergency',\n        action: vehicle => {\n          if (_environment.default.APP.avlmLite) {\n            this.emergencyAcknowledgeActionAvlmLite(vehicle);\n          } else {\n            this.emergencyAcknowledgeAction(vehicle);\n          }\n        }\n      });\n      this.set('cancelAction', {\n        id: 'emergencyCancel',\n        permId: _mappedPermIds.default.emergencyCancel,\n        name: 'Cancel Emergency',\n        action: vehicle => {\n          if (_environment.default.APP.avlmLite) {\n            this.emergencyCancelActionAvlmLite(vehicle);\n          } else {\n            this.emergencyCancelAction(vehicle);\n          }\n        }\n      });\n      this.set('resolveAction', {\n        id: 'emergencyResolve',\n        permId: _mappedPermIds.default.emergencyResolve,\n        name: 'Resolve Emergency',\n        action: vehicle => {\n          if (_environment.default.APP.avlmLite) {\n            this.emergencyResolveActionAvlmLite(vehicle);\n          } else {\n            this.emergencyResolveAction(vehicle);\n          }\n        }\n      });\n      this.set('navigateToAction', {\n        id: 'navigateTo',\n        permId: _mappedPermIds.default.navigateIntercept,\n        name: 'Navigate To',\n        action: vehicle => {\n          this.get('roadSupervisor').navigateToVehicle(vehicle);\n        }\n      });\n      this.set('bulkActions', [{\n        id: 'bulkMessage',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Bulk Message',\n        action: vehicles => {\n          this.sendMessagesToVehicles(vehicles, 'bulkMessage');\n        }\n      }]);\n      this.set('activityLogAction', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLogVehicle,\n        name: 'View Activity Log',\n        action: vehicle => {\n          const name = vehicle.get('name');\n          this.get('workspace').pushState('vehicleActivityLog', {\n            displayName: `Vehicle #${name} Activity Log`,\n            vehicle\n          });\n        },\n        disableOnLocked: false\n      });\n    },\n\n    _initScheduleSingleActions() {\n      this.get('tableActions').push({\n        id: 'print',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Broadcast Message',\n        action: function () {\n          const vehicleRecords = this.get('store').peekAll('vehicle');\n          const vehicles = vehicleRecords.map(vehicleRecord => this.getVehicleModel(vehicleRecord.id));\n          this.sendMessagesToVehicles(vehicles, 'bulkMessage');\n        }.bind(this)\n      });\n      this.get('tableActions').unshiftObject({\n        id: 'newVehicle',\n        permId: _mappedPermIds.default.newVehicle,\n        name: 'New Vehicle',\n        action: function () {\n          const store = this.get('store');\n          const origin = store.createRecord('location');\n          const destination = store.createRecord('location');\n          const startAddress = store.createRecord('address');\n          const endAddress = store.createRecord('address');\n          const startPlace = store.createRecord('place', {\n            address: startAddress,\n            location: origin\n          });\n          const endPlace = store.createRecord('place', {\n            address: endAddress,\n            location: destination\n          });\n          const vehicleTypes = store.peekAll('vehicle-type');\n          const newModel = store.createRecord('vehicle');\n          newModel.set('startGarageCopy', startPlace);\n          newModel.set('endGarageCopy', endPlace);\n          newModel.set('shiftBreaks', []);\n          newModel.set('vehicleType', vehicleTypes.firstObject);\n          newModel.set('active', true);\n          this.get('records').pushObject(newModel);\n          this.set('editModal.editableRecords', []);\n          const editComponent = this.get('editComponent');\n          this.get('editModal').open(editComponent, [newModel], this.get('saveRecordFunction').bind(this));\n        }.bind(this)\n      });\n      this.set('editAction', {\n        id: 'edit',\n        permId: _mappedPermIds.default.editVehicle,\n        name: 'Edit',\n        action: model => {\n          const store = this.get('store');\n          const vehicleModel = model;\n          const editComponent = this.get('editComponent');\n\n          if (!Ember.isNone(vehicleModel.get('startGarage.id'))) {\n            const origin = vehicleModel.get('startGarage');\n            origin.set('type', 'pick');\n            const location = store.createRecord('location', origin.get('location.content').toJSON());\n            const address = store.createRecord('address', origin.get('address.content').toJSON());\n            address.set('zoneName', origin.get('address.zoneName.content')); // user copy of place/address/location so it does not modify the other vehicle's garage places\n\n            const startPlaceCopy = store.createRecord('place', {\n              geocodingMethod: origin.get('geocodingMethod'),\n              address: address,\n              location: location\n            });\n            vehicleModel.set('startGarageCopy', startPlaceCopy);\n          } else {\n            const location = store.createRecord('location');\n            const address = store.createRecord('address');\n            address.set('zoneName', this.store.peekAll('zone-type').get('firstObject'));\n            const startPlaceCopy = store.createRecord('place', {\n              address: address,\n              location: location\n            });\n            vehicleModel.set('startGarageCopy', startPlaceCopy);\n          }\n\n          if (!Ember.isNone(vehicleModel.get('endGarage.id'))) {\n            const destination = vehicleModel.get('endGarage');\n            destination.set('type', 'pick');\n            const location = store.createRecord('location', destination.get('location.content').toJSON());\n            const address = store.createRecord('address', destination.get('address.content').toJSON());\n            address.set('zoneName', destination.get('address.zoneName')); // user copy of place/address/location so it does not modify the other vehicle's garage places\n\n            const endPlaceCopy = store.createRecord('place', {\n              geocodingMethod: destination.get('geocodingMethod'),\n              address: address,\n              location: location\n            });\n            vehicleModel.set('endGarageCopy', endPlaceCopy);\n          } else {\n            const location = store.createRecord('location');\n            const address = store.createRecord('address');\n            address.set('zoneName', this.store.peekAll('zone-type').get('firstObject'));\n            const endPlaceCopy = store.createRecord('place', {\n              address: address,\n              location: location\n            });\n            vehicleModel.set('endGarageCopy', endPlaceCopy);\n          } // shift break in scheduling not being sent with GET shift-break\n\n\n          if (Ember.isNone(vehicleModel.get('shiftBreaks.firstObject.location.tomtomFormattedAddress'))) {\n            const shiftBreaks = vehicleModel.get('shiftBreaks') || [];\n            shiftBreaks.forEach(shiftBreak => {\n              const fixedBreakLocation = this.get('store').createRecord('location');\n              shiftBreak.set('location', fixedBreakLocation);\n            });\n          }\n\n          this.get('editModal').open(editComponent, [vehicleModel], this.get('saveRecordFunction').bind(this));\n        }\n      });\n      this.set('vehicleBreakdown', {\n        id: 'vehicleBreakdown',\n        permId: _mappedPermIds.default.vehicleBreakdown,\n        name: 'Report Breakdown',\n        action: model => {\n          const store = this.get('store');\n          const dsVehicleModel = model;\n          const breakdownComponent = this.get('breakdownComponent'); // vehicle breakdown fields\n\n          const location = store.createRecord('location');\n          const address = store.createRecord('address'); // TODO: how does zone types fit in the address\n\n          address.set('zoneName', this.store.peekAll('zone-type').get('firstObject'));\n          const place = store.createRecord('place', {\n            address: address,\n            location: location\n          });\n\n          if (dsVehicleModel.get('lat') && dsVehicleModel.get('lng')) {\n            place.set('location.lat', dsVehicleModel.get('lat'));\n            place.set('location.lng', dsVehicleModel.get('lng'));\n          }\n\n          dsVehicleModel.set('breakdownPlace', place);\n          dsVehicleModel.set('breakdownTime', new Date());\n          dsVehicleModel.set('breakdownDescription', '');\n          dsVehicleModel.set('breakdownType', null);\n          this.get('editModal').open(breakdownComponent, [dsVehicleModel], this.get('saveBreakdownVehicleFunction').bind(this));\n        }\n      });\n      this.set('resetDeviceAction', {\n        id: 'resetDevice',\n        permId: _mappedPermIds.default.resetDeviceAction,\n        name: 'Reset device',\n        action: model => {\n          return new Promise((resolve, reject) => {\n            const vehicleInfo = (0, _vehicleInfo.vehicleInfoData)();\n            const prepareVehicleInfo = (0, _vehicleInfo.prepareVehicleInfoData)(vehicleInfo, model);\n            const notifications = this.get('notifications');\n            const title = 'Reset Device';\n            this.get('tooltip').pushConfirmation({\n              tip: 'This will disassociate the device ID from the vehicle.',\n              title,\n              primaryActionText: 'Proceed',\n              primaryAction: () => {\n                //sending PATCH to avlm/vehicle-info/{id} requires the payload id/ URL id to equal the avlm.vehicle.id\n                const session = this.get('session');\n                return this.get('ajax').request(_apiUrls.API.avlmService.host + `/vehicle-info/?callSign=${model.name}`, {\n                  method: 'GET',\n                  contentType: 'text',\n                  headers: {\n                    'Authorization': `Bearer ${session.data.authenticated.token}`\n                  }\n                }).then(response => {\n                  // if there is no device ID, inform the user and return\n                  if (!response.data[0].attributes.device || !response.data[0].attributes.device.hardwareId) {\n                    notifications.info('There is no device associated with this vehicle.');\n                    return;\n                  }\n\n                  prepareVehicleInfo.data.id = response.data[0].id;\n                  const json = JSON.stringify(prepareVehicleInfo);\n                  return this.get('ajax').request(_apiUrls.API.avlmService.host + `/vehicle-info/${response.data[0].id}`, {\n                    method: 'PATCH',\n                    contentType: 'text',\n                    headers: {\n                      'Authorization': `Bearer ${session.data.authenticated.token}`\n                    },\n                    data: json\n                  }).then(() => {\n                    notifications.success('RESET DEVICE SUCCESSFULL');\n                  });\n                }).then(() => {\n                  this.get('tooltip').reset();\n                }).catch(function (error) {\n                  notifications.warning('Error: Reset did not work correctly');\n                  this.get('tooltip').reset();\n                  reject(error);\n                });\n              },\n              secondaryActionText: 'Cancel',\n              secondaryAction: () => {\n                this.get('tooltip').reset();\n                return;\n              }\n            });\n          });\n        }\n      });\n      this.set('acknowledgeAction', {\n        id: 'emergencyAcknowledge',\n        permId: _mappedPermIds.default.emergencyAcknowledge,\n        name: 'Acknowledge Emergency',\n        action: vehicle => {\n          if (_environment.default.APP.avlmLite) {\n            this.emergencyAcknowledgeActionAvlmLite(vehicle);\n          } else {\n            this.emergencyAcknowledgeAction(vehicle);\n          }\n        }\n      });\n      this.set('cancelAction', {\n        id: 'emergencyCancel',\n        permId: _mappedPermIds.default.emergencyCancel,\n        name: 'Cancel Emergency',\n        action: vehicle => {\n          if (_environment.default.APP.avlmLite) {\n            this.emergencyCancelActionAvlmLite(vehicle);\n          } else {\n            this.emergencyCancelAction(vehicle);\n          }\n        }\n      });\n      this.set('resolveAction', {\n        id: 'emergencyResolve',\n        permId: _mappedPermIds.default.emergencyResolve,\n        name: 'Resolve Emergency',\n        action: vehicle => {\n          if (_environment.default.APP.avlmLite) {\n            this.emergencyResolveActionAvlmLite(vehicle);\n          } else {\n            this.emergencyResolveAction(vehicle);\n          }\n        }\n      });\n      this.set('navigateToAction', {\n        id: 'navigateTo',\n        permId: _mappedPermIds.default.navigateIntercept,\n        name: 'Navigate To',\n        action: vehicle => {\n          this.get('roadSupervisor').navigateToVehicle(vehicle);\n        }\n      });\n      this.set('bulkActions', [{\n        id: 'bulkMessage',\n        permId: [_mappedPermIds.default.cannedMessageToDriver, _mappedPermIds.default.freeTypeMessageToDriver],\n        name: 'Bulk Message',\n        action: vehicles => {\n          this.sendMessagesToVehicles(vehicles, 'bulkMessage');\n        }\n      }]);\n      this.set('activityLogAction', {\n        id: 'activityLog',\n        permId: _mappedPermIds.default.activityLogVehicle,\n        name: 'View Activity Log',\n        action: vehicle => {\n          const vehicleId = vehicle.get('name');\n          this.get('workspace').pushState('vehicleActivityLog', {\n            displayName: `Vehicle #${vehicleId} Activity Log`,\n            vehicle\n          });\n        },\n        disableOnLocked: false\n      });\n    },\n\n    avlmDriverApps: Ember.computed('table.rows.@each.avlmDriverApp', function () {\n      const tableRows = this.get('table.rows') || [];\n      const avlmDriverApps = tableRows.map(row => {\n        return row.get('record.avlmDriverApp.content');\n      });\n      return avlmDriverApps;\n    }),\n    dynamicSingleActions: Ember.computed('table.rows.@each.{selected}', 'avlmDriverApps.@each.deviceHardwareId', 'selectedWidgetRecord', function () {\n      const columns = Ember.get(this, 'config').columns;\n      const sendMessageAction = this.get('sendMessageAction');\n      const resetDeviceAction = this.get('resetDeviceAction');\n      const cancelAction = this.get('cancelAction');\n      const acknowledgeAction = this.get('acknowledgeAction');\n      const resolveAction = this.get('resolveAction');\n      const activityLogAction = this.get('activityLogAction');\n      const vehicleBreakdown = this.get('vehicleBreakdown');\n      const removeVehicleBreakdown = this.get('removeVehicleBreakdown');\n      const row = this.getSelectedCoreModel();\n      const actions = [activityLogAction];\n      const role = this.get('workspace.dashboardModel.role');\n      const isWidgetEmergencyRecAck = row.get('isWidgetEmergencyRecAck');\n      let isAssignedDriverRoute = false;\n\n      if (!Ember.isEmpty(row) && columns && columns.length !== 0) {\n        const routeName = columns.filter(column => column.id === ROUTE_NAME)[0];\n        const driver = columns.filter(column => column.id === DRIVER)[0];\n        if (row.get(routeName.mapValuePath) && row.get(driver.mapValuePath)) isAssignedDriverRoute = true;\n      } // Cannot run vehicle breakdown for the route already in breakdown\n\n\n      if (!row.get('isPlaceholder') && row.get('displayStatus') !== 'Breakdown' && row.get('routeStatus') !== 'breakdown' && row.get('inProgress') === true && row.get('latestRoute.hasStarted')) {\n        actions.push(vehicleBreakdown);\n      }\n\n      if (role === _dashboard.DISPATCH_ROLENAME && row.get('displayStatus') === 'Breakdown') {\n        actions.push(removeVehicleBreakdown);\n      }\n\n      if (!isWidgetEmergencyRecAck && isAssignedDriverRoute && role === _dashboard.DISPATCH_ROLENAME) {\n        actions.push(sendMessageAction);\n      }\n\n      if (!row) return []; // add Reset Device for all vehicle except placeholder vehicles\n\n      if (!row.get('isPlaceholder')) {\n        actions.push(resetDeviceAction);\n      } // add acknowledge, cancel actions for recent emergencies\n\n\n      if (row.get('isWidgetEmergency') && !row.get('isWidgetApprovedEmergency')) {\n        actions.push(acknowledgeAction, cancelAction);\n      } // add resolved, cancel actions for approved emergencies\n      else if (row.get('isWidgetApprovedEmergency')) {\n        actions.push(resolveAction, cancelAction);\n      } // navigation to moving vehicles is disabled until further notice\n      //\n      // const navigateToAction = this.get('navigateToAction');\n      // actions.push(navigateToAction);\n\n\n      return actions;\n    }),\n\n    async sendMessagesToVehicles(vehicles, messageType) {\n      const draftMessages = vehicles.map(vehicle => {\n        const trueVehicle = vehicle;\n        const vehicleId = trueVehicle.get('id');\n        const vehicleName = trueVehicle.get('name');\n        const isWidgetEmergencyRecAck = trueVehicle.get('isWidgetEmergencyRecAck');\n        const assignedDriver = trueVehicle.get('latestDriver');\n        const driverId = assignedDriver ? assignedDriver.get('id') : null;\n        let badgeNumber = null;\n\n        if (assignedDriver) {\n          if (trueVehicle.get('driverBadgeNumber')) {\n            badgeNumber = trueVehicle.get('driverBadgeNumber');\n          } else if (assignedDriver.get('badgeNumber')) {\n            badgeNumber = assignedDriver.get('badgeNumber');\n          } else {\n            badgeNumber = assignedDriver.get('driver.badgeNumber');\n          }\n        }\n\n        if (isWidgetEmergencyRecAck) {\n          this.get('notifications').warning(`Can not send message due to emergency on vehicle id = ${vehicleName}`);\n          return null;\n        }\n\n        if (messageType === 'singleMessage' && !badgeNumber) {\n          this.get('notifications').warning(`Can not send message due to missing driver id on vehicle id = ${vehicleName}`);\n          return null;\n        }\n\n        if (messageType === 'bulkMessage' && !badgeNumber) {\n          // if some vehicle missing driver just return null\n          return null;\n        }\n\n        trueVehicle.set('driver', {\n          id: driverId,\n          endPointType: 'recipient',\n          fullName: trueVehicle.get('latestDriver.fullName'),\n          badgeNumber: badgeNumber\n        });\n        trueVehicle.set('vehicle', {\n          id: vehicleId,\n          name: vehicleName\n        });\n        const routeId = trueVehicle.get('latestRouteVehicleDriver.route.id') || trueVehicle.get('currentRoutePk');\n        const routeName = trueVehicle.get('latestRouteVehicleDriver.dispatchRoute.route.name') || trueVehicle.get('currentRouteName');\n        trueVehicle.set('route', {\n          id: routeId,\n          name: routeName\n        });\n        trueVehicle.set('messageNr', '0');\n\n        if (_environment.default.APP.avlmLite) {\n          trueVehicle.set('avlmDriver', {\n            id: driverId,\n            endPointType: 'recipient'\n          });\n          trueVehicle.set('avlmVehicle', {\n            id: vehicleId\n          });\n        }\n\n        return trueVehicle;\n      }).filter(vehicle => !Ember.isNone(vehicle));\n\n      if (messageType === 'singleMessage' && draftMessages.firstObject) {\n        this.get('workspace').pushState('addNewMessage', {\n          draftMessages\n        });\n      } else if (messageType === 'bulkMessage') {\n        if (draftMessages.length < vehicles.length) {\n          this.get('notifications').warning('MESSAGE COULD NOT BE SENT TO SOME VEHICLES WHICH DO NOT HAVE DRIVER ASSOCIATED.');\n        }\n\n        if (!Ember.isEmpty(draftMessages)) {\n          this.get('workspace').pushState('addNewMessage', {\n            draftMessages\n          });\n        }\n      }\n    },\n\n    _sendEmergencyMessage(message, successNotification, errorNotification) {\n      const formatedMessage = {\n        data: {\n          type: 'cannedMessage',\n          attributes: {\n            messageNr: '0',\n            body: message.body,\n            createdTime: new Date(),\n            priority: message.priority,\n            responseType: {\n              statusCode: _avlmEmergencyMessage.CANNED_RESPONSE_TYPE_CODES[message.responseTypeText],\n              status: message.responseTypeText\n            },\n            type: 'D',\n            driver: {\n              id: message.driver.id,\n              endPointType: 'recipient'\n            },\n            vehicle: {\n              id: message.vehicleId\n            }\n          }\n        }\n      };\n\n      if (message.body === 'acknowledged' || message.body === 'canceled' || message.body === 'resolved') {\n        formatedMessage.data.attributes.replyToMsgId = message.replyToMsgId;\n      }\n\n      const json = JSON.stringify(formatedMessage);\n      const session = this.get('session');\n      return this.get('ajax').post(_apiUrls.API.avlmService.host + '/canned-message', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).then(() => {\n        this.get('notifications').success(successNotification);\n      }).catch(function\n        /*error*/\n      () {\n        this.get('notifications').warning(errorNotification);\n      });\n    },\n\n    async emergencyAcknowledgeAction(vehicle) {\n      const iqVehicle = vehicle;\n      const replyToMsgId = iqVehicle.get('widgetEmergencyReplyMsgId');\n      if (!replyToMsgId) return this.get('notifications').warning('Could not resolve emergency message due to missing reply id');\n      let driverId = iqVehicle.get('latestDriver.id');\n      driverId = driverId ? driverId : 0;\n      const tooltip = this.get('tooltip');\n      const newEmergencyMessage = {\n        // TODO: should this be `driver.driverId`? latest driver not found\n        driver: {\n          id: `${driverId}`,\n          firstName: `${iqVehicle.get('latestDriver.firstName')}`,\n          lastName: `${iqVehicle.get('latestDriver.lastName')}`,\n          endPointType: 'recipient'\n        },\n        messageNr: '0',\n        replyToMsgId: replyToMsgId,\n        driverEndPointType: 'recipient',\n        vehicleId: iqVehicle.get('id'),\n        routeId: iqVehicle.get('latestRouteVehicleDriver.route.id'),\n        body: 'acknowledged',\n        responseTypeText: 'acknowledged',\n        responseMessage: 'The message is for Acknowledged',\n        priority: 'emergency'\n      }; // Update URL with correct endpoint and post data\n      // Acknowledge Emergency Message\n\n      tooltip.reset();\n      return this._sendEmergencyMessage(newEmergencyMessage, 'Acknowledged Emergency Message Successfully', 'Acknowledge Emergency Message Failed');\n    },\n\n    async emergencyAcknowledgeActionAvlmLite(vehicle) {\n      const iqVehicle = vehicle;\n      const replyToMsgId = iqVehicle.get('latestReceivedEmergencyMessage') ? iqVehicle.get('latestReceivedEmergencyMessage').get('replyToMsgId') : null;\n      if (!replyToMsgId) return this.get('notifications').warning('Could not resolve emergency message due to missing reply id');\n      let driverId = iqVehicle.get('latestDriver.id');\n      driverId = driverId ? driverId : 0;\n      const tooltip = this.get('tooltip');\n      const newEmergencyMessage = {\n        // TODO: should this be `driver.driverId`? latest driver not found\n        driver: {\n          id: `${driverId}`,\n          firstName: `${iqVehicle.get('latestDriver.firstName')}`,\n          lastName: `${iqVehicle.get('latestDriver.lastName')}`,\n          endPointType: 'recipient'\n        },\n        messageNr: '0',\n        replyToMsgId: replyToMsgId,\n        driverEndPointType: 'recipient',\n        vehicleId: iqVehicle.get('id'),\n        routeId: iqVehicle.get('latestRouteVehicleDriver.route.id'),\n        body: 'acknowledged',\n        responseTypeText: 'acknowledged',\n        responseMessage: 'The message is for Acknowledged',\n        priority: 'emergency'\n      }; // Update URL with correct endpoint and post data\n      // Acknowledge Emergency Message\n\n      tooltip.reset();\n      return this._sendEmergencyMessage(newEmergencyMessage, 'Acknowledged Emergency Message Successfully', 'Acknowledge Emergency Message Failed');\n    },\n\n    async emergencyCancelAction(vehicle) {\n      const iqVehicle = vehicle;\n      const replyToMsgId = iqVehicle.get('widgetEmergencyReplyMsgId');\n      if (!replyToMsgId) return this.get('notifications').warning('Could not resolve emergency message due to missing reply id');\n      let driverId = iqVehicle.get('latestDriver.id');\n      driverId = driverId ? driverId : 0;\n      const newEmergencyMessage = {\n        // TODO: should this be `driver.driverId`? latest driver not found\n        driver: {\n          id: `${driverId}`,\n          firstName: `${iqVehicle.get('latestDriver.firstName')}`,\n          lastName: `${iqVehicle.get('latestDriver.lastName')}`,\n          endPointType: 'recipient'\n        },\n        messageNr: '0',\n        replyToMsgId: replyToMsgId,\n        driverEndPointType: 'recipient',\n        vehicleId: iqVehicle.get('id'),\n        routeId: iqVehicle.get('latestRouteVehicleDriver.route.id'),\n        body: 'canceled',\n        responseTypeText: 'canceled',\n        responseMessage: 'The message is for Resolved',\n        priority: 'emergency'\n      }; // Update URL with correct endpoint and post data\n      // Cancel Emergency Message\n\n      const tooltip = this.get('tooltip');\n      const tip = 'This will cancel the driver\\'s emergency message. Proceed?';\n      const title = 'Cancel Emergency';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          tooltip.reset();\n          return this._sendEmergencyMessage(newEmergencyMessage, 'Canceled Emergency Message Successfully', 'Canceled Emergency Message Failed');\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n          return;\n        }\n      });\n    },\n\n    async emergencyCancelActionAvlmLite(vehicle) {\n      const iqVehicle = vehicle;\n      const replyToMsgId = iqVehicle.get('latestReceivedEmergencyMessage') ? iqVehicle.get('latestReceivedEmergencyMessage').get('replyToMsgId') : null;\n      if (!replyToMsgId) return this.get('notifications').warning('Could not resolve emergency message due to missing reply id');\n      let driverId = iqVehicle.get('latestDriver.id');\n      driverId = driverId ? driverId : 0;\n      const newEmergencyMessage = {\n        // TODO: should this be `driver.driverId`? latest driver not found\n        driver: {\n          id: `${driverId}`,\n          firstName: `${iqVehicle.get('latestDriver.firstName')}`,\n          lastName: `${iqVehicle.get('latestDriver.lastName')}`,\n          endPointType: 'recipient'\n        },\n        messageNr: '0',\n        replyToMsgId: replyToMsgId,\n        driverEndPointType: 'recipient',\n        vehicleId: iqVehicle.get('id'),\n        routeId: iqVehicle.get('latestRouteVehicleDriver.route.id'),\n        body: 'canceled',\n        responseTypeText: 'canceled',\n        responseMessage: 'The message is for Resolved',\n        priority: 'emergency'\n      }; // Update URL with correct endpoint and post data\n      // Cancel Emergency Message\n\n      const tooltip = this.get('tooltip');\n      const self = this;\n      tooltip.pushConfirmation({\n        tip: 'This will cancel the driver\\'s emergency message. Proceed?',\n        primaryActionText: 'Yes',\n        secondaryActionText: 'No',\n\n        primaryAction() {\n          self._sendEmergencyMessage(newEmergencyMessage, 'Canceled Emergency Message Successfully', 'Canceled Emergency Message Failed');\n\n          tooltip.reset();\n          return;\n        },\n\n        secondaryAction: () => {\n          tooltip.reset();\n          return;\n        }\n      });\n    },\n\n    async emergencyResolveAction(vehicle) {\n      const iqVehicle = vehicle;\n      const replyToMsgId = iqVehicle.get('widgetEmergencyReplyMsgId');\n      if (!replyToMsgId) return this.get('notifications').warning('Could not resolve emergency message due to missing reply id');\n      let driverId = iqVehicle.get('latestDriver.id');\n      driverId = driverId ? driverId : 0;\n      const tooltip = this.get('tooltip');\n      const newEmergencyMessage = {\n        // TODO: should this be `driver.driverId`? latest driver not found\n        driver: {\n          id: `${driverId}`,\n          firstName: `${iqVehicle.get('latestDriver.firstName')}`,\n          lastName: `${iqVehicle.get('latestDriver.lastName')}`,\n          endPointType: 'recipient'\n        },\n        messageNr: '0',\n        replyToMsgId: replyToMsgId,\n        driverEndPointType: 'recipient',\n        vehicleId: iqVehicle.get('id'),\n        routeId: iqVehicle.get('latestRouteVehicleDriver.route.id'),\n        body: 'resolved',\n        responseTypeText: 'resolved',\n        responseMessage: 'The message is for Resolved',\n        priority: 'emergency'\n      }; // Update URL with correct endpoint and post data\n      // Acknowledge Emergency Message\n\n      tooltip.reset();\n      return this._sendEmergencyMessage(newEmergencyMessage, 'Resolved Emergency Message Successfully', 'Resolved Emergency Message Failed');\n    },\n\n    async emergencyResolveActionAvlmLite(vehicle) {\n      const iqVehicle = vehicle;\n      const replyToMsgId = iqVehicle.get('latestReceivedEmergencyMessage') ? iqVehicle.get('latestReceivedEmergencyMessage').get('replyToMsgId') : null;\n      if (!replyToMsgId) return this.get('notifications').warning('Could not resolve emergency message due to missing reply id');\n      let driverId = iqVehicle.get('latestDriver.id');\n      driverId = driverId ? driverId : 0;\n      const tooltip = this.get('tooltip');\n      const newEmergencyMessage = {\n        // TODO: should this be `driver.driverId`? latest driver not found\n        driver: {\n          id: `${driverId}`,\n          firstName: `${iqVehicle.get('latestDriver.firstName')}`,\n          lastName: `${iqVehicle.get('latestDriver.lastName')}`,\n          endPointType: 'recipient'\n        },\n        messageNr: '0',\n        replyToMsgId: replyToMsgId,\n        driverEndPointType: 'recipient',\n        vehicleId: iqVehicle.get('id'),\n        routeId: iqVehicle.get('latestRouteVehicleDriver.route.id'),\n        body: 'resolved',\n        responseTypeText: 'resolved',\n        responseMessage: 'The message is for Resolved',\n        priority: 'emergency'\n      }; // Update URL with correct endpoint and post data\n      // Acknowledge Emergency Message\n\n      tooltip.reset();\n      return this._sendEmergencyMessage(newEmergencyMessage, 'Resolved Emergency Message Successfully', 'Resolved Emergency Message Failed');\n    },\n\n    applyTransformationData(widgetRecords) {\n      widgetRecords.forEach(widgetRecord => {\n        if (!widgetRecord._transformed) {\n          if (!_environment.default.APP.avlmLite) {\n            this.applyVehicleTypeTransformation(widgetRecord);\n            this.applyOtpStatusTransformation(widgetRecord);\n            this.applyProviderTransformation(widgetRecord);\n            this.applyVehicleTypeNameTransformation(widgetRecord);\n          }\n\n          widgetRecord._transformed = true;\n        }\n      });\n      return widgetRecords;\n    },\n\n    applyVehicleTypeTransformation(widgetRecord) {\n      if (!this.get('vehicleTypeDict')) {\n        this.loadVehicleTypes();\n      }\n\n      const vehicleTypeDict = this.get('vehicleTypeDict');\n      const vehicleType = vehicleTypeDict[widgetRecord.type];\n\n      if (vehicleType) {\n        widgetRecord.noOfAmbulatorySeats = vehicleType.get('noOfAmbulatoryFlexSeats');\n        widgetRecord.noOfWheelChairSeats = vehicleType.get('noOfWheelChairFlexSeats');\n      }\n    },\n\n    applyProviderTransformation(widgetRecord) {\n      if (widgetRecord.provider) {\n        const provider = this.store.peekRecord('provider', widgetRecord.provider);\n        const providerName = provider ? provider.get('name') : widgetRecord.provider;\n        widgetRecord.providerNameString = providerName;\n      }\n    },\n\n    applyVehicleTypeNameTransformation(widgetRecord) {\n      if (widgetRecord.type) {\n        const type = this.store.peekRecord('vehicle-type', widgetRecord.type);\n        const name = type ? type.get('name') : widgetRecord.type;\n        widgetRecord.typeName = name;\n      }\n    },\n\n    applyFilterQueryConversion(filters) {\n      this._super(...arguments);\n\n      filters.forEach(filter => {\n        this.applyVehicleCapacityFilterConversion(filter);\n        this.applyVehicleTypeFilterConversion(filter);\n      });\n    },\n\n    applyVehicleTypeFilterConversion(filter) {\n      if (!filter || filter.local.path !== 'type') {\n        return;\n      }\n\n      const modelName = pathToModel[filter.local.path];\n      const modelTypeMapper = this.get('store').peekAll(modelName).map(record => {\n        return {\n          id: record.id,\n          idLowerCase: record.id.trim().toLowerCase(),\n          name: record.name\n        };\n      });\n      const newValues = (0, _filters.applyFilterByID)(filter.local.values, filter.type, modelTypeMapper);\n      filter.local.values = newValues;\n      filter.rql.values = newValues;\n    },\n\n    applyVehicleCapacityFilterConversion(filter) {\n      if (!filter || filter.local.path !== 'noOfAmbulatorySeats' && filter.local.path !== 'noOfWheelChairSeats') {\n        return;\n      }\n\n      const type = filter.local.path === 'noOfAmbulatorySeats' ? 'ambulatory' : 'wheelchair';\n      const vehicleTypeDict = this.get('vehicleTypeDict');\n\n      const compatibleVehicleTypes = _lodash.default.filter(vehicleTypeDict, vehicleType => {\n        return vehicleType.noOfFlexSeats.some(flexSeat => {\n          filter.local.path = type;\n          const filterFunction = (0, _filters.buildFilterFunction)(filter);\n          return filterFunction(flexSeat);\n        });\n      }).map(vehicle => vehicle.name);\n\n      if (compatibleVehicleTypes.length > 0) {\n        filter.type = _filterTypes.enumStringEq.id;\n        filter.local.path = 'type';\n        filter.rql.path = 'type';\n        filter.local.values = [compatibleVehicleTypes];\n        filter.rql.values = [compatibleVehicleTypes];\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicles-widget/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/vehicles-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'vehicle',\n    title: 'Vehicles',\n    defaultSortId: 'otp',\n    defaultSortAsc: false,\n    // ember-react-widget properties\n    widgetName: 'vehicleWidget',\n    initialLimit: 5000,\n    paginationLimit: 20,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    selectedRowLimit: 20,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'name',\n      valuePreview: '1',\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 45\n    }, {\n      id: 'typeName',\n      index: 1,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'typeNameToDisplay',\n      mapValuePath: 'vehicleTypeName',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60\n    }, {\n      id: 'availability',\n      index: 2,\n      type: 'enum-date',\n      label: 'Availabilities',\n      valuePath: 'availabilities',\n      mapValuePath: 'formattedAvailabilities',\n      cellDesc: 'Availabilities',\n      isMapLabelVisible: true,\n      defaultWidth: 100,\n      cellItem: 'AvailabilityCell'\n    }, {\n      id: 'noOfAmbulatorySeats',\n      index: 4,\n      type: 'number',\n      label: 'Ambulatory seats',\n      valuePath: 'noOfAmbulatorySeats',\n      //computed with config data\n      editable: true,\n      defaultWidth: 60,\n      highlightable: false\n    }, {\n      id: 'noOfWheelChairSeats',\n      index: 5,\n      type: 'number',\n      label: 'Wheelchair spaces',\n      valuePath: 'noOfWheelChairSeats',\n      //computed with config data\n      editable: true,\n      defaultWidth: 60,\n      highlightable: false\n    }, {\n      id: 'active',\n      index: 6,\n      type: 'boolean',\n      label: 'Active',\n      valuePath: 'active',\n      editable: true,\n      defaultWidth: 45\n    }, {\n      id: 'routeName',\n      index: 7,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      mapValuePath: 'currentRouteName',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'driverId',\n      index: 8,\n      type: 'text',\n      label: 'Driver Id',\n      valuePath: 'driverId',\n      mapValuePath: 'currentDriverId',\n      editable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 45,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'driverName',\n      index: 9,\n      type: 'text',\n      label: 'Driver Name',\n      valuePath: 'driverName',\n      mapValuePath: 'currentDriver.fullName',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'garageStartAddress',\n      index: 10,\n      type: 'text',\n      label: 'Starting Garage',\n      valuePath: 'startingGarage',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'garageEndAddress',\n      index: 11,\n      type: 'text',\n      label: 'Ending Garage',\n      valuePath: 'endingGarage',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'driverAPPVersion',\n      index: 13,\n      type: 'text',\n      label: 'Driver App Version',\n      valuePath: 'driverAppVersion',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'otp',\n      index: 18,\n      type: 'text',\n      label: 'OTP',\n      valuePath: 'otpStatus',\n      mapValuePath: 'otpLabel',\n      highlightable: true\n    }, {\n      id: 'provider',\n      index: 19,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'providerNameString',\n      alternateValuePath: 'provider',\n      mapValuePath: 'provider.name',\n      valuePreview: 'MAG',\n      hidden: true,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'vehicleStatus',\n      index: 20,\n      type: 'string',\n      label: 'Vehicle Status',\n      valuePath: 'status',\n      mapValuePath: 'vehicleStatus',\n      hidden: false,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'gpsTimeStamp',\n      index: 21,\n      type: 'datetime',\n      //missing\n      label: 'Last GPS Ping Time',\n      valuePath: 'lastGpsPingTime',\n      mapValuePath: 'timestamp',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      cellItem: 'DateLocalCellItem',\n      valuePreview: '',\n      defaultWidth: 110,\n      hidden: false,\n      highlightable: false,\n      unAvailable: false\n    }, {\n      id: 'lat',\n      index: 22,\n      type: 'float',\n      label: 'Last GPS Ping Lat',\n      valuePath: 'lastGpsPingLat',\n      mapValuePath: 'avlLocation.lat',\n      valuePreview: '',\n      hidden: false,\n      highlightable: false\n    }, {\n      id: 'lng',\n      index: 23,\n      type: 'float',\n      label: 'Last GPS Ping Lng',\n      valuePath: 'lastGpsPingLng',\n      mapValuePath: 'avlLocation.lng',\n      valuePreview: '',\n      hidden: false,\n      highlightable: false\n    }, {\n      id: 'Revenue',\n      index: 24,\n      type: 'boolean',\n      label: 'Revenue',\n      valuePath: 'revenue',\n      searchable: true,\n      hidden: false,\n      defaultWidth: 60\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routePk',\n          valuePath: 'routeId'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'in',\n          valuePath: 'vehicleId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routePk',\n          valuePath: 'routeId'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/vehicles-widget/scheduleConfig\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/vehicles-widget',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'vehicle',\n    title: 'Vehicles',\n    defaultSortId: 'name',\n    defaultSortAsc: false,\n    // ember-react-widget properties\n    widgetName: 'vehicleWidget',\n    initialLimit: 5000,\n    paginationLimit: 20,\n    maxLimitByRouteSelection: 5,\n    maxLimitWithoutRouteAssociation: 20,\n    selectedRowLimit: 20,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'name',\n      valuePreview: '1',\n      isMapLabelVisible: true,\n      searchable: true,\n      defaultWidth: 45\n    }, {\n      id: 'typeName',\n      index: 1,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'typeNameToDisplay',\n      mapValuePath: 'vehicleTypeName',\n      searchable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 60\n    }, {\n      id: 'availability',\n      index: 2,\n      type: 'enum-date',\n      label: 'Availabilities',\n      valuePath: 'availabilities',\n      mapValuePath: 'formattedAvailabilities',\n      cellDesc: 'Availabilities',\n      isMapLabelVisible: true,\n      defaultWidth: 100,\n      cellItem: 'AvailabilityCell'\n    }, {\n      id: 'noOfAmbulatorySeats',\n      index: 4,\n      type: 'number',\n      label: 'Ambulatory seats',\n      valuePath: 'noOfAmbulatorySeats',\n      //computed with config data\n      editable: true,\n      defaultWidth: 60,\n      highlightable: false\n    }, {\n      id: 'noOfWheelChairSeats',\n      index: 5,\n      type: 'number',\n      label: 'Wheelchair spaces',\n      valuePath: 'noOfWheelChairSeats',\n      //computed with config data\n      editable: true,\n      defaultWidth: 60,\n      highlightable: false\n    }, {\n      id: 'active',\n      index: 6,\n      type: 'boolean',\n      label: 'Active',\n      valuePath: 'active',\n      editable: true,\n      defaultWidth: 45\n    }, {\n      id: 'routeName',\n      index: 7,\n      type: 'uuid',\n      label: 'Route Name',\n      valuePath: 'routeName',\n      mapValuePath: 'currentRouteName',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'driverId',\n      index: 8,\n      type: 'text',\n      label: 'Driver Id',\n      valuePath: 'driverId',\n      mapValuePath: 'currentDriverId',\n      editable: true,\n      isMapLabelVisible: true,\n      defaultWidth: 45,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'driverName',\n      index: 9,\n      type: 'text',\n      label: 'Driver Name',\n      valuePath: 'driverName',\n      mapValuePath: 'currentDriver.fullName',\n      editable: true,\n      searchable: true,\n      hidden: true\n    }, {\n      id: 'garageStartAddress',\n      index: 10,\n      type: 'text',\n      label: 'Starting Garage',\n      valuePath: 'startingGarage',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'garageEndAddress',\n      index: 11,\n      type: 'text',\n      label: 'Ending Garage',\n      valuePath: 'endingGarage',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'driverAPPVersion',\n      index: 13,\n      type: 'text',\n      label: 'Driver App Version',\n      valuePath: 'driverAppVersion',\n      editable: true,\n      hidden: true\n    }, {\n      id: 'otp',\n      index: 18,\n      type: 'text',\n      label: 'OTP',\n      valuePath: 'scheduleOtpStatus',\n      mapValuePath: 'otpLabel',\n      highlightable: true\n    }, {\n      id: 'provider',\n      index: 19,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'providerNameString',\n      alternateValuePath: 'provider',\n      mapValuePath: 'provider.name',\n      valuePreview: 'MAG',\n      hidden: true,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'vehicleStatus',\n      index: 20,\n      type: 'string',\n      label: 'Vehicle Status',\n      valuePath: 'scheduleStatus',\n      hidden: false,\n      searchable: true,\n      highlightable: false\n    }, {\n      id: 'gpsTimeStamp',\n      index: 21,\n      type: 'datetime',\n      //missing\n      label: 'Last GPS Ping Time',\n      valuePath: 'lastGpsPingTime',\n      mapValuePath: 'timestamp',\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      cellItem: 'DateLocalCellItem',\n      valuePreview: '',\n      defaultWidth: 110,\n      hidden: false,\n      highlightable: false,\n      unAvailable: false\n    }, {\n      id: 'lat',\n      index: 22,\n      type: 'float',\n      label: 'Last GPS Ping Lat',\n      valuePath: 'lastGpsPingLat',\n      mapValuePath: 'avlLocation.lat',\n      valuePreview: '',\n      hidden: false,\n      highlightable: false\n    }, {\n      id: 'lng',\n      index: 23,\n      type: 'float',\n      label: 'Last GPS Ping Lng',\n      valuePath: 'lastGpsPingLng',\n      mapValuePath: 'avlLocation.lng',\n      valuePreview: '',\n      hidden: false,\n      highlightable: false\n    }, {\n      id: 'Revenue',\n      index: 24,\n      type: 'boolean',\n      label: 'Revenue',\n      valuePath: 'revenue',\n      searchable: true,\n      hidden: false,\n      defaultWidth: 60\n    }],\n    traversal: {\n      tripWidget: {\n        links: [{\n          type: 'stringEq',\n          field: 'routePk',\n          valuePath: 'routeId'\n        }]\n      },\n      routeWidget: {\n        links: [{\n          type: 'in',\n          valuePath: 'vehicleId'\n        }]\n      },\n      alertWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      },\n      stopWidget: {\n        links: [{\n          type: 'eq',\n          field: 'routePk',\n          valuePath: 'routeId'\n        }]\n      },\n      messageWidget: {\n        links: [{\n          type: 'eq',\n          field: 'id',\n          valuePath: 'vehicleId'\n        }]\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/component\", [\"exports\", \"moment\", \"adept-iq/config/itinerary-action\"], function (_exports, _moment, _itineraryAction) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ITP_TRAVEL_MODE = 'itp';\n  const TAXI_TRAVEL_MODE = 'taxi';\n  const BUS_TYPE = 'bus';\n  const PARATRANSIT_TRAVEL_MODE = 'paratransit';\n  const TIME_FORMAT = 'hh:mm A';\n  const DATE_FORMAT = 'ddd,MM/DD/YYYY';\n\n  var _default = Ember.Component.extend({\n    booking: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    tripDetails: null,\n    returnTripDetails: null,\n    returnTripDetailsVisible: false,\n    selectedTravelMode: null,\n    // eslint-disable-next-line ember/use-brace-expansion\n    tripLegsInBooking: Ember.computed('editableRecords.firstObject.legs.[]', 'editableRecords.firstObject.legs', function () {\n      const tripLegs = this.get('editableRecords.firstObject.legs').filterBy('purpose', 'trip');\n      return tripLegs.sortBy('legOrdinal');\n    }),\n    // eslint-disable-next-line ember/use-brace-expansion\n    returnTripLegsInBooking: Ember.computed('editableRecords.firstObject.legs.[]', 'editableRecords.firstObject.legs', function () {\n      const returnTripLegs = this.get('editableRecords.firstObject.legs').filterBy('purpose', 'return');\n      return returnTripLegs.sortBy('legOrdinal');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.getTripAndReturnTripDetails();\n\n      if (!Ember.isEmpty(this.get('returnTripLegsInBooking'))) {\n        this.set('returnTripDetailsVisible', true);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      Ember.$('.edit-widget-modal').height('0');\n    },\n\n    getItpSegmentsForLegs() {\n      const legs = this.get('editableRecords.firstObject.legs');\n      const itpRequestResult = legs.map((leg, legIndex) => {\n        return this.getItpSegmentResults(leg, legIndex);\n      });\n      return itpRequestResult;\n    },\n\n    /**\n     *\n     * @param {*} leg  (array of objects)\n     * @param {*} legIndex (number)\n     * @returns itp segments results for itp booking => action,description,etc\n     */\n    getItpSegmentResults(leg, legIndex) {\n      const segments = leg.get('segments').sortBy('id');\n      const itineraryLastIndex = segments.length - 1;\n      const itineraryFirstIndex = 0;\n      const itpSegmentResults = {\n        legIndex: legIndex,\n        result: {\n          segments: segments.map((segment, index) => {\n            const isParaTransitTravelMode = segment.get('isParaTransitTravelMode');\n            const segmentTrips = segment.get('trips').toArray();\n            const pickTripStop = segmentTrips.get('firstObject.pick');\n            const dropTripStop = segmentTrips.get('firstObject.drop');\n            const segmentPickStop = segment.get('pick');\n            const segmentDropStop = segment.get('drop');\n            const pickAddress = segmentPickStop.get('place.address');\n            const dropAddress = segmentDropStop.get('place.address');\n            const pickStop = segment.get('stops.firstObject');\n            const dropStop = segment.get('stops.firstObject');\n            const startPlannedEta = pickTripStop.get('plannedEta') || segmentPickStop.get('plannedEta');\n            const endPlannedEta = dropTripStop.get('plannedEta') || segmentDropStop.get('plannedEta');\n            const pickNotes = segment.get('pick.notes');\n            const dropNotes = segment.get('drop.notes');\n            const startAddress = pickNotes && !isParaTransitTravelMode && index !== itineraryFirstIndex ? pickNotes : pickAddress.get('simpleAddress');\n            const endAddress = dropNotes && !isParaTransitTravelMode && index !== itineraryLastIndex ? dropNotes : dropAddress.get('simpleAddress');\n            const busDescription = this.getBusDetails(segment.get('travelMode'));\n            return {\n              action: this.convertTravelModeToAction(segment.get('travelMode')),\n              description: busDescription,\n              end: {\n                coordinates: {\n                  lat: dropStop.get('lat'),\n                  lng: dropStop.get('lng')\n                },\n                description: dropNotes,\n                id: '',\n                time: endPlannedEta,\n                type: '',\n                address: endAddress\n              },\n              length: '',\n              start: {\n                coordinates: {\n                  lat: pickStop.get('lat'),\n                  lng: pickStop.get('lng')\n                },\n                description: pickNotes,\n                id: '',\n                time: startPlannedEta,\n                type: '',\n                address: startAddress\n              },\n              promiseTime: segment.get('trips.firstObject.promiseTime')\n            };\n          })\n        }\n      };\n      return itpSegmentResults;\n    },\n\n    convertTravelModeToAction(travelMode) {\n      let travelModeInUpperCase = travelMode.toUpperCase();\n      const isBusTravelMode = travelMode.match(BUS_TYPE);\n\n      if (isBusTravelMode) {\n        travelModeInUpperCase = BUS_TYPE.toUpperCase();\n      }\n\n      return parseInt(_itineraryAction.ITINERARY_TRAVEL_MODE[travelModeInUpperCase], 10);\n    },\n\n    /**\n     *\n     * @param segment model\n     * @returns string => 'itp' or  'taxi' or 'paratransit'\n     */\n    convertSegmentToTravelMode(segment) {\n      if (segment.isTaxiTravelMode) {\n        return TAXI_TRAVEL_MODE;\n      }\n\n      return PARATRANSIT_TRAVEL_MODE;\n    },\n\n    /**\n     *when booking the itp-booking,bus travel mode is saved with bus related information(bus number)\n     * @param {*} travelMode\n     * @returns string(bus number)\n     */\n    getBusDetails(travelMode) {\n      const isBusTravelMode = travelMode.match(BUS_TYPE); //bus travelmode is saved with bus number\n\n      if (isBusTravelMode) {\n        const busDescription = travelMode.split(' ')[1];\n        return busDescription;\n      }\n    },\n\n    /**\n      *\n      * @param {*} tripDetails(array of objects)\n      * @returns trip request details => tripdate,segments,address,etc\n      */\n    getTripAndReturnTripRequestDetails(tripDetails) {\n      const tripRequestDetails = tripDetails.map(tb => {\n        const reqTime = tb.get('requestTime');\n        const segments = tb.get('segments').sortBy('id');\n        const serviceMode = segments.length > 1 ? ITP_TRAVEL_MODE : this.convertSegmentToTravelMode(tb.get('segment'));\n        return {\n          tripDate: (0, _moment.default)(reqTime).format(DATE_FORMAT),\n          requestTime: reqTime,\n          formattedRequestTime: (0, _moment.default)(reqTime).format(TIME_FORMAT),\n          promiseTime: tb.get('sortedSegment.trips.firstObject.promiseTime'),\n          travelMode: tb.get('segment.travelMode'),\n          serviceMode: serviceMode,\n          segments: segments.map(segment => {\n            const pickAddress = segment.get('pick.place.address');\n            const dropAddress = segment.get('drop.place.address');\n            return {\n              pickAddress: pickAddress.get('fullAddress'),\n              dropAddress: dropAddress.get('fullAddress'),\n              tripRequestPickAddress: pickAddress.get('simpleAddress'),\n              tripRequestDropAddress: dropAddress.get('simpleAddress'),\n              promiseTime: (0, _moment.default)(segment.get('trips.firstObject.promiseTime')),\n              startTime: (0, _moment.default)(segment.get('tripStartTime')).format(TIME_FORMAT),\n              arriveTime: (0, _moment.default)(segment.get('tripEndTime')).format(TIME_FORMAT)\n            };\n          })\n        };\n      });\n      return tripRequestDetails;\n    },\n\n    getTripAndReturnTripDetails() {\n      const itpRequestResults = this.getItpSegmentsForLegs() || [];\n      const tripRequestDetails = this.getTripAndReturnTripRequestDetails(this.get('tripLegsInBooking'));\n      const returnTripDetails = this.getTripAndReturnTripRequestDetails(this.get('returnTripLegsInBooking'));\n      this.setItp([...tripRequestDetails, ...returnTripDetails], itpRequestResults);\n      this.set('tripDetails', tripRequestDetails);\n      this.set('returnTripDetails', returnTripDetails);\n    },\n\n    /**\n     * set itp results for trips and return trips\n     * @param {*} trips (trips and return trip)\n     * @param {*} itpRequestResults (itp results)\n     */\n    setItp(trips, itpRequestResults) {\n      const itpInfoMap = {};\n      itpRequestResults.forEach(itpInfo => {\n        itpInfoMap[itpInfo.legIndex] = itpInfo;\n      });\n      trips.forEach((trip, index) => {\n        const {\n          result: itpRequestResult\n        } = itpInfoMap[index] || {};\n        const itinerarySegments = itpRequestResult && itpRequestResult.segments || [];\n        trip.itinerarySegments = itinerarySegments;\n      });\n    },\n\n    actions: {\n      onOkClick() {\n        this.editModal.close();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ZmJQeN6q\",\n    \"block\": \"{\\\"symbols\\\":[\\\"returnTrip\\\",\\\"trip\\\",\\\"index\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"booking-detail-overlay\\\",\\\"booking-detail-container\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-details-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-heading mb-2 font-weight-bold\\\"],[9],[0,\\\"\\\\n        Booking details\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"tripDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"bd-body container-fluid \\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 col-sm-12 g-side-drawer-panel\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[]],0],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tr-header mb-4 mt-4\\\"],[9],[0,\\\"Trip Request Details\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tr-header mb-4 mt-4\\\"],[9],[0,\\\"Leg Trip Request Details\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[1,[27,\\\"iq-widgets/view-itinerary-modal/trip-request-details\\\",null,[[\\\"tripBooking\\\"],[[22,2,[]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body trip-alternative-container\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"iq-widgets/view-itinerary-modal/trip-alternative\\\",null,[[\\\"tripSegments\\\",\\\"itinerarySegments\\\",\\\"selectedTravelMode\\\",\\\"tripBooking\\\"],[[22,2,[\\\"segments\\\"]],[22,2,[\\\"itinerarySegments\\\"]],[22,2,[\\\"serviceMode\\\"]],[22,2,[]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"returnTripDetailsVisible\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"returnTripDetails\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"bd-body container-fluid \\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 col-sm-12 g-side-drawer-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tr-header mb-4 mt-4\\\"],[9],[0,\\\"Return Trip Request Details\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"iq-widgets/view-itinerary-modal/trip-request-details\\\",null,[[\\\"tripBooking\\\"],[[22,1,[]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body trip-alternative-container\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"iq-widgets/view-itinerary-modal/trip-alternative\\\",null,[[\\\"tripSegments\\\",\\\"itinerarySegments\\\",\\\"selectedTravelMode\\\",\\\"tripBooking\\\"],[[22,1,[\\\"segments\\\"]],[22,1,[\\\"itinerarySegments\\\"]],[22,1,[\\\"serviceMode\\\"]],[22,1,[]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"book-trip pl-5 mb-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-light elm v-btn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOkClick\\\"],null]],[9],[0,\\\"OK\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/view-itinerary-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/columnConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    columns: [{\n      valuePath: 'icon',\n      width: '55px',\n      sortable: false,\n      cellComponent: 'table/cells/icon-cell',\n      resizable: true\n    }, {\n      label: 'Action',\n      valuePath: 'action',\n      width: '100px',\n      sortable: false,\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'From',\n      valuePath: 'from',\n      width: '150px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'Start Time',\n      valuePath: 'startTime',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'To',\n      valuePath: 'to',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'Arrive Time',\n      valuePath: 'arriveTime',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }, {\n      label: 'Promise Time',\n      valuePath: 'promiseTime',\n      width: '100px',\n      cellComponent: 'table/cells/base-cell',\n      resizable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/component\", [\"exports\", \"ember-light-table\", \"moment\", \"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/columnConfig\", \"adept-iq/config/itinerary-action\", \"adept-iq/config/icon-paths\"], function (_exports, _emberLightTable, _moment, _columnConfig, _itineraryAction, _iconPaths) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ActionIconMap = {\n    'taxi': _iconPaths.default.requestdetails.taxiicon,\n    'paratransit': _iconPaths.default.requestdetails.paratransiticon\n  };\n  const ITP_TRAVEL_MODE = 'itp';\n  const BUS_TYPE = 'bus';\n\n  var _default = Ember.Component.extend({\n    classNames: ['trip-alternative'],\n    canShowHeader: true,\n    isSearchEnabled: false,\n    isCellEditAllowed: false,\n    model: Ember.computed('selectedTravelMode', function () {\n      const selectedTravelMode = this.get('selectedTravelMode');\n\n      if (selectedTravelMode === ITP_TRAVEL_MODE) {\n        return this.getItpSegments();\n      } // taxi or paratransist\n\n\n      const actionIcon = ActionIconMap[selectedTravelMode];\n      const firstSegment = this.get('tripSegments.firstObject');\n      const lastSegment = this.get('tripSegments.lastObject');\n      const promiseTime = this.get('tripBooking.promiseTime');\n      const formattedPromiseTime = promiseTime ? (0, _moment.default)(promiseTime).format('hh:mm A') : '';\n      const segment = {\n        'icon': actionIcon,\n        'action': selectedTravelMode,\n        'from': firstSegment.tripRequestPickAddress,\n        'startTime': formattedPromiseTime,\n        'to': lastSegment.tripRequestDropAddress,\n        'arriveTime': '',\n        'promiseTime': formattedPromiseTime\n      };\n      return [segment];\n    }),\n    table: Ember.computed('model', function () {\n      return new _emberLightTable.default(_columnConfig.default.columns, this.get('model'), {\n        enableSync: false\n      });\n    }),\n\n    /**\n    *\n    * @returns itp segments for itp booking\n    */\n    getItpSegments() {\n      return this.get('itinerarySegments').map(itinerarySegment => {\n        const startAddress = itinerarySegment.start.address;\n        const endAddress = itinerarySegment.end.address;\n        const {\n          action,\n          icon\n        } = _itineraryAction.ITINERARY_ACTION_MAP[itinerarySegment.action];\n        const description = itinerarySegment.description;\n        const promiseTime = itinerarySegment.promiseTime;\n        const formattedPromiseTime = (0, _moment.default)(promiseTime).format('hh:mm A');\n        return {\n          'icon': icon,\n          'action': action === BUS_TYPE ? `${action} ${description}` : action,\n          'from': startAddress,\n          'startTime': (0, _moment.default)(itinerarySegment.start.time).format('hh:mm A'),\n          'to': endAddress,\n          'arriveTime': (0, _moment.default)(itinerarySegment.end.time).format('hh:mm A'),\n          'promiseTime': promiseTime ? formattedPromiseTime : ''\n        };\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"kjDarboj\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"column-widget-title bd-table-title data-test-column-title\\\"],[9],[0,\\\"\\\\n        Trip Alternative\\\\n      \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-controls bd-table-controls\\\"],[9],[0,\\\"\\\\n\\\\t\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-alternative-body table\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"250px\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template.hbs' @ L15:C6) \\\"],null]],[[\\\"resizeOnDrag\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template.hbs' @ L19:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template.hbs' @ L21:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          Loading...\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template.hbs' @ L27:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          No details found.\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-alternative/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-request-details/component\", [\"exports\", \"lodash\", \"moment\"], function (_exports, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TIME_FORMAT = 'hh:mm A';\n\n  var _default = Ember.Component.extend({\n    startCasedServiceMode: Ember.computed('tripBooking.serviceMode', function () {\n      const serviceMode = this.get('tripBooking.serviceMode');\n      return (0, _lodash.startCase)(serviceMode);\n    }),\n    promiseTime: Ember.computed('tripBooking.{promiseTime,travelMode}', function () {\n      const promiseTime = this.get('tripBooking.promiseTime');\n      return promiseTime ? (0, _moment.default)(promiseTime).format(TIME_FORMAT) : '';\n    }),\n\n    init() {\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-request-details/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Fjy+8Wch\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Trip Date\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"tripDate\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Request Time\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"formattedRequestTime\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Pick Address\\\"],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"firstObject\\\",\\\"pickAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Drop Address\\\"],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"segments\\\",\\\"lastObject\\\",\\\"dropAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Promise Time\\\"],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"promiseTime\\\"]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-2 p-0\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 col-sm-12  ml-1 p-0\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"booking-model-label\\\"],[9],[0,\\\"Service Mode\\\"],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 col-sm-12  p-0\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"tripBooking\\\",\\\"serviceMode\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/iq-widgets/view-itinerary-modal/trip-request-details/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/zones-widget/avlmConfig\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/zones-widget',\n    rowComponent: 'table/rows/zonestat-formatted-row',\n    modelName: 'nyct-zone',\n    title: 'Zones',\n    defaultSortId: 'name',\n    defaultSortAsc: false,\n    columns: [{\n      index: 0,\n      id: 'name',\n      type: 'text',\n      label: 'Name',\n      valuePath: 'name',\n      hidden: false,\n      isMapLabelVisible: true,\n      searchable: true\n    }, {\n      index: 1,\n      id: 'type',\n      type: 'text',\n      label: 'Type',\n      valuePath: 'type',\n      isMapLabelVisible: true,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/zones-widget/component\", [\"exports\", \"adept-iq/pods/components/iq-widgets/column-widget/component\", \"adept-iq/pods/components/iq-widgets/zones-widget/config\", \"adept-iq/utils/filters\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _filters, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['zones-widget', 'data-test-zones-widget'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = store.peekAll(modelName) || [];\n      const currentSchedule = this.get('workspace.currentSchedule');\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n\n      if (Ember.isEmpty(currentSchedule)) {\n        return [];\n      } //NYAAR-19157-Sorting is not working for the Name column\n\n\n      if (!params.filter) {\n        const zoneData = await store.findAll('zone');\n        filteredData = zoneData.filter(filterFn).sort(compareFn);\n      }\n\n      return filteredData;\n    },\n\n    actions: {\n      //NYAAR-17671  widgets are not maximized and cross icon should also not display in this widgets.\n      onHeaderDoubleClick() {\n        const maximizer = this.get('maximizer');\n        maximizer.minimize();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/iq-widgets/zones-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'iq-widgets/zones-widget',\n    rowComponent: 'table/rows/zonestat-formatted-row',\n    modelName: 'zone',\n    title: 'Zones',\n    defaultSortId: 'name',\n    defaultSortAsc: false,\n    columns: [{\n      index: 0,\n      id: 'name',\n      type: 'text',\n      label: 'Name',\n      valuePath: 'displayName',\n      hidden: false,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/login-form/component\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    errors: null,\n    email: null,\n    password: null,\n    resetPasswordAllowed: false,\n    isChrome: null,\n    isValid: Ember.computed('email', 'password', function () {\n      const email = this.get('email');\n      const password = this.get('password');\n      return Ember.isPresent(email) && Ember.isPresent(password);\n    }),\n\n    checkBrowser() {\n      let operaAgent = false;\n      let safariAgent = false;\n      let chromeAgent = false;\n      let IExplorerAgent = false;\n      let edgeAgent = false;\n      let firefoxAgent = false;\n\n      if ((navigator.userAgent.indexOf('Opera') || navigator.userAgent.indexOf('OPR')) !== -1) {\n        operaAgent = true;\n      } else if (navigator.userAgent.indexOf('Edg') !== -1) {\n        edgeAgent = true;\n      } else if (navigator.userAgent.indexOf('Chrome') !== -1) {\n        chromeAgent = true;\n      } else if (navigator.userAgent.indexOf('Safari') !== -1) {\n        safariAgent = true;\n      } else if (navigator.userAgent.indexOf('Firefox') !== -1) {\n        firefoxAgent = true;\n      } else if (navigator.userAgent.indexOf('MSIE') !== -1 || !!document.documentMode === true) //IF IE > 10\n        {\n          IExplorerAgent = true;\n        }\n\n      return {\n        safariAgent,\n        edgeAgent,\n        chromeAgent,\n        IExplorerAgent,\n        operaAgent,\n        firefoxAgent\n      };\n    },\n\n    init() {\n      this._super(...arguments);\n\n      if (_environment.default.APP.avlmLite) {\n        this.set('resetPasswordAllowed', false);\n      }\n\n      this.set('browserWarning', 'Unable to sign on. You must use Chrome as your browser when working in ADEPT IQ.');\n      const {\n        chromeAgent\n      } = this.checkBrowser();\n\n      if (chromeAgent) {\n        this.set('isChrome', true);\n      } else {\n        this.set('isChrome', false);\n      }\n    },\n\n    clearPassword: function () {\n      setTimeout(() => {\n        this.$('input[type=text]').val('');\n        this.$('input[type=password]').val('');\n      }, 200);\n    },\n\n    didInsertElement() {\n      Ember.run.scheduleOnce('afterRender', this, this.clearPassword);\n    },\n\n    actions: {\n      onSubmit(email, password, e) {\n        e.preventDefault();\n        this.get('onSubmit')(email, password);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/login-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"l0WFR5LW\",\n    \"block\": \"{\\\"symbols\\\":[\\\"error\\\"],\\\"statements\\\":[[7,\\\"form\\\"],[12,\\\"onsubmit\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubmit\\\",[23,[\\\"email\\\"]],[23,[\\\"password\\\"]]],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Username\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"email\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isChrome\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"email\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"data-test-email-input\\\",\\\"\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"password\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isChrome\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"password\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"data-test-password-input\\\",\\\"\\\"],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"errors\\\"]],[27,\\\"not\\\",[[23,[\\\"isChrome\\\"]]],null]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"isChrome\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"li\\\"],[9],[1,[21,\\\"browserWarning\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"li\\\"],[9],[1,[22,1,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"resetPasswordAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[4,\\\"link-to\\\",[\\\"forgot-password\\\"],[[\\\"class\\\"],[\\\"data-test-forgot-password\\\"]],{\\\"statements\\\":[[0,\\\"Forgot Password?\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isValid\\\"]]],null]],[11,\\\"data-test-login-button\\\",\\\"\\\"],[11,\\\"type\\\",\\\"submit\\\"],[9],[0,\\\"\\\\n    Sign On\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/login-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/maximize-widget/component\", [\"exports\", \"adept-iq/config/widget-types\"], function (_exports, _widgetTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    maximizer: Ember.inject.service(),\n    widgetTypesHash: _widgetTypes.widgetTypesHash,\n    widget: Ember.computed.alias('maximizer.maximizedWidget'),\n\n    didInsertElement() {\n      this._super(...arguments); // set maximize widget content to size of the wrapper\n\n\n      if (this.get('widget')) {\n        const height = Ember.$('.dashboard-wrapper').height(); // if set min-hight will trigger widget resize infinitely\n\n        Ember.$('.maximized-widget-content').css('height', `${height}px`);\n        Ember.$('.maximized-widget-content').css('overflow', 'hidden');\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/maximize-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"5NtbKUiE\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"maximized-widget-content\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"get\\\",[[27,\\\"get\\\",[[23,[\\\"widgetTypesHash\\\"]],[23,[\\\"widget\\\",\\\"typeId\\\"]]],null],\\\"componentName\\\"],null]],[[\\\"widget\\\"],[[23,[\\\"widget\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/maximize-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/notification-bar/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    flashMessage: Ember.computed.readOnly('notifications.topFlashMessage'),\n    classNames: ['notification-bar'],\n    classNameBindings: ['navigationMode'],\n    navigationMode: Ember.computed.readOnly('workspace.isRoadSupervisorModeEnabled'),\n    actions: {\n      close() {\n        this.get('flash').destroyMessage();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/notification-bar/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"0sAmx+Rr\",\n    \"block\": \"{\\\"symbols\\\":[\\\"component\\\",\\\"flash\\\",\\\"close\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"flashMessage\\\"]]],null,{\\\"statements\\\":[[4,\\\"flash-message\\\",null,[[\\\"flash\\\"],[[23,[\\\"flashMessage\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"svg-jar\\\",[[27,\\\"concat\\\",[\\\"ic-\\\",[22,2,[\\\"type\\\"]]],null]],[[\\\"class\\\"],[[27,\\\"concat\\\",[\\\"alert-icon icon-\\\",[22,2,[\\\"type\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"alert-text\\\"],[9],[1,[22,2,[\\\"message\\\"]],false],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"alert-close\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"svg-jar\\\",[\\\"ic-close\\\"],[[\\\"class\\\"],[\\\"icon-block\\\"]]],false],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],[22,3,[]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2,3]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/notification-bar/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-column-editor/component\", [\"exports\", \"ember-light-table\", \"adept-iq/pods/components/reconcile-column-editor/config\", \"adept-iq/pods/components/reconcile-column-editor/stubs\"], function (_exports, _emberLightTable, _config, _stubs) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    classNames: ['reconcile-column-editor'],\n    layoutName: 'components/iq-widgets/reconcile-widget',\n    config: _config.default,\n    onSaveClick: null,\n    onCloseClick: null,\n    editableColumnList: null,\n    canSave: Ember.computed('editColumnTable.rows.@each.selected', function () {\n      const rows = Ember.get(this, 'editColumnTable.rows');\n      let isSaveEnable = false;\n      rows.map(row => {\n        const selectedElm = this.editableColumnList.filter(elm => {\n          return elm.label === row.content.fieldId && elm.isEditable === row.selected;\n        })[0];\n\n        if (!selectedElm) {\n          isSaveEnable = true;\n        }\n      });\n      return isSaveEnable;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const editColumnTable = new _emberLightTable.default(this.config.editColumnTableColumns);\n      this.set('editColumnTable', editColumnTable);\n      this.get('editColumnTable').setRows(_stubs.default.editColumnTableDate);\n    },\n\n    didInsertElement() {\n      const rows = this.get('editColumnTable.rows');\n\n      if (this.editableColumnList) {\n        this.editableColumnList.map(editableElm => {\n          rows.map(row => {\n            if (editableElm.label === row.content.fieldId) {\n              row.set('selected', editableElm.isEditable);\n              row.set('isChecked', editableElm.isEditable);\n            }\n          });\n        });\n      } else {\n        rows.map(row => {\n          row.set('selected', false);\n          row.set('isChecked', false);\n        });\n      }\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Column Editor',\n        tip: 'Would you like to commit your changes?',\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          this.send('confirm');\n          return tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    actions: {\n      confirm() {\n        const editColumnTable = this.get('editColumnTable');\n        const editColumnTableList = editColumnTable.get('rows') || [];\n        const columnEditRowList = [];\n        editColumnTableList.map(row => {\n          columnEditRowList.push({\n            label: row.content.fieldId,\n            isEditable: row.get('selected')\n          });\n        });\n        this.onSaveClick(columnEditRowList);\n        this.get('notifications').success('You have successfully changed the column editor settings');\n      },\n\n      onSaveButtonClick() {\n        this.showToolTip();\n      },\n\n      onCloseButtonClick() {\n        this.onCloseClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-column-editor/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    title: 'Reconcile',\n    editColumnTableColumns: [{\n      label: 'Field',\n      valuePath: 'fieldId',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      label: 'Editable',\n      resizable: false,\n      minResizeWidth: 50,\n      cellComponent: 'generic-components/table/cells/check-box'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-column-editor/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editColumnTableDate: [{\n      fieldId: 'Actual Arrival Time'\n    }, {\n      fieldId: 'Actual Depart Time'\n    }, {\n      fieldId: 'Load/Unload Mins'\n    }, {\n      fieldId: 'Odometer On Arrival'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-column-editor/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1CNWkcmL\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reconcile-column-editor \\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-editor-box\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center justify-content-between\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Column editor\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSave\\\"]]],null]],[11,\\\"class\\\",\\\"column-widget-button minimize-button mr-3\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSaveButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"btn-close\\\"],[9],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/icons/ic-close-line.svg\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-table-wrapper mt-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body editColum-settings\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body-columne-editor\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"editColumnTable\\\"]]],[[\\\"height\\\",\\\"estimatedRowHeight\\\",\\\"occlusion\\\"],[\\\"300px\\\",23,true]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/reconcile-column-editor/template.hbs' @ L24:C14) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/reconcile-column-editor/template.hbs' @ L28:C15) \\\"],null]],[[\\\"canSelect\\\"],[true]],{\\\"statements\\\":[],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reconcile-column-editor/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/active-passenger-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    init() {\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/active-passenger-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"H1KbpptQ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"value\\\"]],\\\"ACTIVE\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"active-dot\\\"],[9],[10],[0,\\\" Active\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"value\\\"]],\\\"PENDING\\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"active-dot\\\"],[9],[10],[0,\\\" Active\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"inactive-dot\\\"],[9],[10],[0,\\\" Inactive\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reconcile-search-passenger/active-passenger-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/component\", [\"exports\", \"ember-light-table\", \"adept-iq/pods/components/reconcile-search-passenger/config\", \"moment\", \"adept-iq/config/notifications\"], function (_exports, _emberLightTable, _config, _moment, _notifications) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_DEBOUNCE_TIME = 1200;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    classNames: ['reconcile-search-passenger'],\n    config: _config.default,\n    onCloseClick: null,\n    isEmptySearchTable: false,\n    contextMenuCallback: null,\n    activePassenger: 'Active',\n    inactivePassenger: 'Inactive',\n    showOnlyActiveExternalPassenger: true,\n    updateReconcileSearchedPassenger: Ember.observer('reconcileSearchedPassenger', function () {\n      this.set('isEmptySearchTable', false);\n      const searchedPassenger = Ember.get(this, 'reconcileSearchedPassenger');\n      this.set('searchedPassenger', searchedPassenger);\n      this.get('searchPassenger').setRows(searchedPassenger);\n\n      if (Ember.get(this, 'searchPassenger').isEmpty) {\n        this.set('isEmptySearchTable', true);\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.createSearchPassengerTable();\n      Ember.set(this, 'isDisabledSearch', true);\n      Ember.set(this, 'isDisabledAddNewTrip', true);\n      Ember.set(this, 'showOnlyActiveExternalPassenger', true);\n    },\n\n    createSearchPassengerTable() {\n      const searchPassengerTableColumn = this.config.searchPassengerColumns;\n      searchPassengerTableColumn.forEach(column => {\n        if (['date', 'datetime', 'time', 'datetimeflatpickr'].includes(column.dataType) && column.format && typeof column.format === 'string') {\n          const formatDate = column.format;\n\n          column.format = value => {\n            return Ember.isEmpty(value) ? value : (0, _moment.default)(value).format(formatDate);\n          };\n        }\n      });\n      const searchPassenger = new _emberLightTable.default(searchPassengerTableColumn);\n      this.set('searchPassenger', searchPassenger);\n    },\n\n    didInsertElement() {},\n\n    createContextMenuOptions() {},\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    onSearchPassenger: async function () {\n      const passengerId = this.get('passengerId');\n      const passengerFirstName = this.get('firstName');\n      const passengerLastName = this.get('lastName');\n      const passengerPhoneNumber = null;\n      const isShowActiveRider = this.get('showOnlyActiveExternalPassenger');\n\n      try {\n        let riders;\n\n        if (!Ember.isBlank(passengerId)) {\n          this.get('workspace').set('isGlobalSpinnerVisible', true);\n          riders = await this.store.find('rider-external', passengerId);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n        }\n\n        const params = {\n          firstName: passengerFirstName ? passengerFirstName : '',\n          lastName: passengerLastName ? passengerLastName : '',\n          phoneNumber: passengerPhoneNumber,\n          activeOnly: isShowActiveRider\n        };\n\n        if (passengerFirstName || passengerLastName) {\n          this.get('workspace').set('isGlobalSpinnerVisible', true);\n          riders = await this.store.query('rider-external', params);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n        }\n\n        if (Ember.isBlank(riders) || Ember.isEmpty(riders)) {\n          this.set('reconcileSearchedPassenger', []);\n          this.get('notifications').info(_notifications.default.BOOKING.NO_MATCHES);\n          return;\n        }\n\n        if (this.get('booking.hasMoreExternalRiders')) {\n          this.get('notifications').warning('Too many matching results were found. Displaying the first 300 results. Please refine the search parameters');\n          this.set('reconcileSearchedPassenger', riders.slice(0, 300));\n          return;\n        }\n\n        riders = riders.length ? riders : [riders];\n        this.set('reconcileSearchedPassenger', riders);\n      } catch (e) {\n        this.set('reconcileSearchedPassenger', []);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    buildPassengerDetail(res) {\n      return {\n        passengerId: res.id,\n        firstName: res.firstName,\n        lastName: res.lastName,\n        phoneNumber: res.formattedPhoneNumber,\n        address: res.places,\n        travelNeeds: res.travelNeeds,\n        serviceNeeds: res.serviceNeeds,\n        loadTime: res.loadTime,\n        UnloadTime: res.unloadTime,\n        middleName: res.middleName,\n        fullName: res.fullName\n      };\n    },\n\n    actions: {\n      onCloseButtonClick() {\n        this.onCloseClick();\n      },\n\n      onUndoButtonClick() {},\n\n      onSearchTextChange(type, valuePath) {\n        Ember.set(this, 'isDisableNamesField', false);\n        Ember.set(this, 'isDisablePassField', false);\n        Ember.set(this, 'isDisabledSearch', false);\n\n        if (!valuePath) {\n          this.get('searchPassenger').setRows([]);\n          Ember.set(this, 'selectedRow', null);\n          return;\n        }\n\n        switch (type) {\n          case _config.default.PASSENGER_ID:\n            Ember.set(this, 'passengerId', valuePath.trim());\n\n            if (valuePath) {\n              Ember.set(this, 'isDisableNamesField', true);\n              this.send('onPassengerSearch');\n            }\n\n            break;\n\n          case _config.default.FIRST_NAME:\n            Ember.set(this, 'firstName', valuePath.trim());\n\n            if (valuePath) {\n              Ember.set(this, 'passengerId', '');\n              Ember.set(this, 'isDisablePassField', true);\n              this.send('onPassengerSearch');\n            }\n\n            break;\n\n          case _config.default.LAST_NAME:\n            Ember.set(this, 'lastName', valuePath.trim());\n\n            if (valuePath) {\n              Ember.set(this, 'passengerId', '');\n              Ember.set(this, 'isDisablePassField', true);\n              this.send('onPassengerSearch');\n            }\n\n            break;\n\n          default:\n        }\n      },\n\n      async onRowClick(row) {\n        const passengerFirstName = this.get('firstName');\n        const passengerLastName = this.get('lastName');\n\n        if (passengerFirstName || passengerLastName) {\n          const riderById = await this.store.queryRecord('rider-external', row.get('id'));\n          const selectedRow = this.buildPassengerDetail(riderById);\n          Ember.set(this, 'selectedRow', selectedRow);\n        } else {\n          const selectedRow = this.buildPassengerDetail(row.content);\n          Ember.set(this, 'selectedRow', selectedRow);\n        }\n\n        Ember.set(this, 'isDisabledAddNewTrip', false);\n      },\n\n      onAddNewTrip() {\n        const selectedRow = this.get('selectedRow');\n\n        if (selectedRow) {\n          this.get('workspace').pushState('reconcileAddNewTrip', {\n            selectedRow,\n            action: this.contextMenuCallback\n          });\n          this.onCloseClick();\n        }\n      },\n\n      resetSearch() {\n        Ember.set(this, 'firstName', '');\n        Ember.set(this, 'lastName', '');\n        Ember.set(this, 'passengerId', '');\n        this.get('searchPassenger').setRows([]);\n        Ember.set(this, 'selectedRow', null);\n        Ember.set(this, 'isDisableNamesField', false);\n        Ember.set(this, 'isDisablePassField', false);\n        Ember.set(this, 'showOnlyActiveExternalPassenger', true);\n        Ember.set(this, 'isEmptySearchTable', false);\n      },\n\n      onCheckboxToggle(isChecked) {\n        Ember.set(this, 'selectedRow', null);\n        this.set('showOnlyActiveExternalPassenger', isChecked);\n        const firstName = Ember.get(this, 'firstName');\n        const lastName = Ember.get(this, 'lastName');\n\n        if (firstName) {\n          this.send('onSearchTextChange', _config.default.FIRST_NAME, firstName);\n        }\n\n        if (lastName) {\n          this.send('onSearchTextChange', _config.default.LAST_NAME, lastName);\n        }\n      },\n\n      onPassengerSearch() {\n        Ember.run.debounce(this, 'onSearchPassenger', DEFAULT_DEBOUNCE_TIME);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const componentTableHeader = 'reconcile-search-passenger/table-header';\n  const activeInactivePassengerDot = 'reconcile-search-passenger/active-passenger-cell';\n  var _default = {\n    title: 'searchPassenger',\n    PASSENGER_ID: 1,\n    FIRST_NAME: 2,\n    LAST_NAME: 3,\n    searchPassengerColumns: [{\n      width: '1px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button'\n    }, {\n      label: 'Status',\n      valuePath: 'status',\n      dataType: 'text',\n      resizable: true,\n      cellComponent: activeInactivePassengerDot,\n      component: componentTableHeader\n    }, {\n      label: 'Passenger ID',\n      valuePath: 'id',\n      dataType: 'number',\n      resizable: true,\n      component: componentTableHeader\n    }, {\n      label: 'First Name',\n      valuePath: 'firstName',\n      dataType: 'text',\n      resizable: true,\n      component: componentTableHeader\n    }, {\n      label: 'Last Name',\n      valuePath: 'lastName',\n      dataType: 'text',\n      resizable: true,\n      component: componentTableHeader\n    }, {\n      label: 'Phone Number',\n      valuePath: 'formattedPhoneNumber',\n      dataType: 'number',\n      resizable: true,\n      component: componentTableHeader\n    }, {\n      label: 'DOB',\n      valuePath: 'dateOfBirth',\n      dataType: 'date',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      resizable: true,\n      component: componentTableHeader\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/table-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['reconcile-table-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/table-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eCU7bERH\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reconcile-search-passenger/table-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-search-passenger/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"zB6eU69/\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dialog-box\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"confirm-dialog-unsuccessful\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center justify-content-between\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Search Passenger\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"btn-close\\\"],[9],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/icons/ic-close-line.svg\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-fields-group d-flex\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-date v-divider\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"passengerId\\\"]],[12,\\\"disabled\\\",[21,\\\"isDisablePassField\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\",[23,[\\\"config\\\",\\\"PASSENGER_ID\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"firstName\\\"]],[12,\\\"disabled\\\",[21,\\\"isDisableNamesField\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\",[23,[\\\"config\\\",\\\"FIRST_NAME\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"lastName\\\"]],[12,\\\"disabled\\\",[21,\\\"isDisableNamesField\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\",[23,[\\\"config\\\",\\\"LAST_NAME\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-check-input mt-0\\\"],[12,\\\"checked\\\",[21,\\\"showOnlyActiveExternalPassenger\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"form-check-label\\\"],[11,\\\"for\\\",\\\"defaultCheck1\\\"],[9],[0,\\\"\\\\n                Active status only\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isDisabledSearch\\\"]],[11,\\\"class\\\",\\\"btn-gray\\\"],[9],[0,\\\"New Search\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"resetSearch\\\"]],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-passenger-table-wrapper mt-4\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"searchPassenger\\\"]]],[[\\\"height\\\",\\\"extra\\\"],[\\\"300px\\\",[27,\\\"hash\\\",null,[[\\\"travelNeedCounts\\\"],[[23,[\\\"route\\\",\\\"travelNeedCounts\\\"]]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/reconcile-search-passenger/template.hbs' @ L47:C10) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/reconcile-search-passenger/template.hbs' @ L51:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"tableActions\\\"],[false,[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"searchPassenger\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/reconcile-search-passenger/template.hbs' @ L57:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isEmptySearchTable\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/reconcile-search-passenger/template.hbs' @ L64:C11) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n          No Results Found.\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mt-3 text-right\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isDisabledAddNewTrip\\\"]],[11,\\\"class\\\",\\\"btn-gray\\\"],[9],[0,\\\"Add New Trip\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAddNewTrip\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reconcile-search-passenger/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-unscheduled-trips/component\", [\"exports\", \"ember-light-table\", \"adept-iq/pods/components/reconcile-unscheduled-trips/config\", \"ember-concurrency\", \"moment\", \"adept-iq/utils/format-function\", \"adept-iq/config/mapped-permIds\"], function (_exports, _emberLightTable, _config, _emberConcurrency, _moment, _formatFunction, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    interaction: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    layoutName: 'components/iq-widgets/reconcile-widget',\n    config: _config.default,\n    contextMenuContainer: null,\n    contextMenuContainerPosition: null,\n    contextMenuOptions: null,\n    lastRowClicked: null,\n    onCloseClick: null,\n    isWaitlisted: true,\n    contextMenuCallback: null,\n    reconcileTripDate: Ember.computed.alias('reconcile.reconcileDate'),\n\n    init() {\n      this._super(...arguments);\n\n      const config = this.get('config');\n      const unschedulesTripTable = new _emberLightTable.default(config.tripTableColumnsUnscheduledTrips);\n      this.set('unschedulesTripTable', unschedulesTripTable);\n      Ember.get(this, 'fetchTripsTask').perform(config.WAITLISTED);\n      this.configurePermissions();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.createContextMenu();\n    },\n\n    configurePermissions() {\n      this.set('isScheduledTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.scheduleTripsRecon, null));\n      this.set('isTripActivityLogAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.activityLog, null));\n    },\n\n    isValidOption(optionId) {\n      switch (optionId) {\n        case 'reconcileScheduleUnscheduledTrip':\n          return this.isScheduledTripAllowed;\n\n        case 'reconcileTripLog':\n          return this.isTripActivityLogAllowed;\n\n        default:\n          break;\n      }\n\n      return false;\n    },\n\n    createContextMenu() {\n      this.set('contextMenuOptions', []);\n      this.get('config').contextMenuOptionsList.map(option => {\n        this.get('contextMenuOptions').push(this.createContextMenuOptions(option.id, option.caption, option.dialogId, option.dialogTitle));\n      });\n    },\n\n    createContextMenuOptions(optionId, optionCaption, dialogId, dialogTitle) {\n      const disable = !this.isValidOption(optionId);\n      let action = null;\n\n      if (!disable) {\n        action = trip => {\n          this.set('reconcile.reconcileSelectedTripId', null);\n\n          if (optionId === 'reconcileScheduleUnscheduledTrip') {\n            this.unloadSelectedTrip(trip.get('tripId'));\n          }\n\n          this.get('workspace').pushState(optionId, {\n            trip,\n            title: dialogTitle,\n            action: this.contextMenuCallback\n          });\n        };\n      }\n\n      return {\n        id: optionId,\n        name: optionCaption,\n        permId: dialogId,\n        disable,\n        action\n      };\n    },\n\n    updateTableOnSelection(type) {\n      const config = this.get('config');\n\n      switch (type) {\n        case config.WAITLISTED:\n          Ember.set(this, 'isWaitlisted', true);\n          break;\n\n        case config.WILLCALL:\n          Ember.set(this, 'isWillCall', true);\n          break;\n\n        case config.CALLBACK:\n          Ember.set(this, 'isCallBack', true);\n          break;\n\n        case config.CANCELLED:\n          Ember.set(this, 'isCancel', true);\n          break;\n\n        case config.FAILED:\n          Ember.set(this, 'isFailed', true);\n          break;\n\n        case config.ILLEGAL:\n          Ember.set(this, 'isIllegal', true);\n          break;\n\n        default:\n          break;\n      }\n    },\n\n    resetAllHeaderOtpions() {\n      this.setProperties({\n        isWaitlisted: false,\n        isWillCall: false,\n        isCallBack: false,\n        isCancel: false,\n        isFailed: false,\n        isIllegal: false\n      });\n    },\n\n    unloadSelectedTrip(tripId) {\n      const record = this.store.peekRecord('reconcile-trip', tripId);\n      this.store.unloadRecord(record);\n    },\n\n    fetchTripsTask: (0, _emberConcurrency.task)(function* (status) {\n      const dateRange = (0, _formatFunction.getDateRangeForSearch)(this.reconcileTripDate);\n      const queryString = {\n        status,\n        startDate: dateRange.startDate,\n        endDate: dateRange.endDate\n      };\n      const response = yield Ember.get(this, 'store').query(this.config.modelName, queryString);\n      response.map(trip => {\n        trip.set('promiseTime', trip.promiseTime ? (0, _moment.default)(trip.promiseTime).format('MM-DD-YYYY hh:mm A') : '');\n      });\n      Ember.set(this, 'tripsData', response);\n      const table = Ember.get(this, 'unschedulesTripTable');\n      if (table) table.setRows(response);\n    }).restartable(),\n    actions: {\n      onCloseButtonClick() {\n        this.onCloseClick();\n      },\n\n      setContextMenuContainer(dropdown) {\n        this.set('contextMenuContainer', dropdown);\n      },\n\n      onContextMenuRowClick(action) {\n        const model = this.get('lastRowClicked');\n        this.get('contextMenuContainer').actions.close();\n\n        if (action.action) {\n          action.action(model);\n          this.onCloseClick();\n        }\n      },\n\n      onRowClick(row) {\n        this.set('lastRowClicked', row.get('content'));\n        const rows = this.get('unschedulesTripTable.rows.content');\n        rows.forEach(_row => {\n          if (_row.get('id') === row.get('id')) {\n            _row.set('selected', true);\n          } else _row.set('selected', false);\n        });\n      },\n\n      onRowRightClick(row, event) {\n        const rows = this.get('unschedulesTripTable.rows.content');\n        this.set('contextMenuContainerPosition', () => {\n          return {\n            style: {\n              top: event.clientY,\n              left: event.clientX\n            }\n          };\n        });\n        this.set('lastRowClicked', row.get('content'));\n        rows.forEach(_row => {\n          if (_row.get('id') === row.get('id')) {\n            _row.set('selected', true);\n          } else _row.set('selected', false);\n        });\n        this.get('contextMenuContainer').actions.open();\n      },\n\n      onSelectList(type) {\n        this.resetAllHeaderOtpions();\n        this.updateTableOnSelection(type);\n        Ember.get(this, 'fetchTripsTask').perform(type);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-unscheduled-trips/config\", [\"exports\", \"adept-iq/config/mapped-permIds\"], function (_exports, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const componentTableHeader = 'reconcile-unscheduled-trips/table-header';\n  var _default = {\n    title: 'Unscheduled Trips',\n    WAITLISTED: 'waitlisted',\n    WILLCALL: 'willcall',\n    CALLBACK: 'callback',\n    CANCELLED: 'cancelled',\n    FAILED: 'failed',\n    ILLEGAL: 'illegal',\n    component: 'side-drawer/reconcile-schedule-unscheduled-trips',\n    rowComponent: 'table/rows/action-row',\n    modelName: 'reconcile-trip',\n    tripTableColumnsUnscheduledTrips: [{\n      width: '40px',\n      resizable: false,\n      cellComponent: 'table/cells/radio-button',\n      valuePath: 'none'\n    }, {\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      width: '100px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Client ID',\n      valuePath: 'passenger.id',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'First Name',\n      valuePath: 'passenger.firstName',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Last Name',\n      valuePath: 'passenger.lastName',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Anchor',\n      valuePath: 'anchor',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Request Time',\n      valuePath: 'promiseTime',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Pick Address1',\n      valuePath: 'stopDetails.pick.address.formattedAddress',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Pick Address 2',\n      valuePath: 'pickAddress2',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Pick City',\n      valuePath: 'pickStopFormattedCity',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Pick Directions',\n      valuePath: 'stopDetails.pick.direction',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Drop Address',\n      valuePath: 'stopDetails.drop.address.formattedAddress',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Drop Address2',\n      valuePath: 'dropAddress2',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Drop City',\n      valuePath: 'dropStopFormattedCity',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Drop Directions',\n      valuePath: 'stopDetails.drop.direction',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Amb Seats',\n      valuePath: 'travelRequirements.ambulatory',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'WC Seats',\n      valuePath: 'travelRequirements.wheelChair',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Companions',\n      valuePath: 'travelRequirements.companion',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Fare',\n      valuePath: 'price.fare',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Status',\n      valuePath: 'statusLabel',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'PCA',\n      valuePath: 'travelRequirements.pca',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Provider ID',\n      valuePath: 'route.providerName',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Trip Type',\n      valuePath: 'type',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Previous Route ID',\n      valuePath: 'route.routeId',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }, {\n      label: 'Travel Mode ID',\n      valuePath: 'route.mode',\n      width: '85px',\n      resizable: true,\n      minResizeWidth: 50,\n      component: componentTableHeader\n    }],\n    contextMenuOptionsList: [{\n      id: 'reconcileScheduleUnscheduledTrip',\n      caption: 'Schedule Trip to a Route',\n      dialogId: _mappedPermIds.default.transferTrip,\n      dialogTitle: 'Schedule Trip to a Route'\n    }, {\n      id: 'reconcileTripLog',\n      caption: 'Show Trip Log',\n      dialogId: _mappedPermIds.default.activityLogTrip,\n      dialogTitle: 'Show Trip Log'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-unscheduled-trips/table-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['reconcile-table-header-column'],\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-unscheduled-trips/table-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qBB3wkdy\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reconcile-unscheduled-trips/table-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reconcile-unscheduled-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1ws/MBVF\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\",\\\"index\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dialog-box unscheduled-trips-popup\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"confirm-dialog-unsuccessful\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center justify-content-between\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"#\\\"],[11,\\\"class\\\",\\\"btn-close\\\"],[9],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/icons/ic-close-line.svg\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"popup-footer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tabs-btns\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isWaitlisted\\\"]],\\\"active\\\",\\\"\\\"],null]],[9],[7,\\\"button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\" Waitlisted\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectList\\\",[23,[\\\"config\\\",\\\"WAITLISTED\\\"]]]],[10],[10],[0,\\\"\\\\n          \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isWillCall\\\"]],\\\"active\\\",\\\"\\\"],null]],[9],[7,\\\"button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\" Will Call\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectList\\\",[23,[\\\"config\\\",\\\"WILLCALL\\\"]]]],[10],[10],[0,\\\"\\\\n          \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isCallBack\\\"]],\\\"active\\\",\\\"\\\"],null]],[9],[7,\\\"button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\" Call Back\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectList\\\",[23,[\\\"config\\\",\\\"CALLBACK\\\"]]]],[10],[10],[0,\\\"\\\\n          \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isCancel\\\"]],\\\"active\\\",\\\"\\\"],null]],[9],[7,\\\"button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Cancelled\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectList\\\",[23,[\\\"config\\\",\\\"CANCELLED\\\"]]]],[10],[10],[0,\\\"\\\\n          \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isFailed\\\"]],\\\"active\\\",\\\"\\\"],null]],[9],[7,\\\"button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Failed\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectList\\\",[23,[\\\"config\\\",\\\"FAILED\\\"]]]],[10],[10],[0,\\\"\\\\n          \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isIllegal\\\"]],\\\"active\\\",\\\"\\\"],null]],[9],[7,\\\"button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Illegal\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSelectList\\\",[23,[\\\"config\\\",\\\"ILLEGAL\\\"]]]],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"verification-results mt-2\\\"],[9],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget reconcile-widget-table-body verify-route-popup-table\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"unschedulesTripTable\\\"]]],[[\\\"height\\\",\\\"class\\\"],[\\\"40vh\\\",\\\"overflow-hidden\\\"]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs' @ L28:C12) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs' @ L31:C13) \\\"],null]],[[\\\"canSelect\\\",\\\"onRowClick\\\",\\\"rowComponent\\\",\\\"tableActions\\\",\\\"extra\\\"],[false,[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]]],[27,\\\"hash\\\",null,[[\\\"onRightClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onRowRightClick\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchTripsTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs' @ L44:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"unschedulesTripTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs' @ L51:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            No trips found.\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"calculatePosition\\\",\\\"onInit\\\"],[[23,[\\\"contextMenuContainerPosition\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setContextMenuContainer\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs' @ L69:C5) \\\"],null]],[[\\\"class\\\"],[\\\"this-trigger\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs' @ L71:C5) \\\"],null]],[[\\\"isTouchDevice\\\",\\\"class\\\"],[false,\\\"widget-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"contextMenuOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"contextMenuOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null],[27,\\\"not-eq\\\",[[22,3,[]],0],null]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"hr\\\"],[11,\\\"class\\\",\\\"context-menu-separator\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[\\\"id\\\"]],\\\"line\\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[12,\\\"disabled\\\",[22,2,[\\\"disable\\\"]]],[11,\\\"class\\\",\\\"data-test-widget-actions\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onContextMenuRowClick\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reconcile-unscheduled-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/register-form/component\", [\"exports\", \"ember-cp-validations\"], function (_exports, _emberCpValidations) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const Validations = (0, _emberCpValidations.buildValidations)({\n    password: {\n      validators: [(0, _emberCpValidations.validator)('presence', true), (0, _emberCpValidations.validator)('confirmation', {\n        on: 'password'\n      })]\n    },\n    confirmPassword: (0, _emberCpValidations.validator)('confirmation', {\n      on: 'password',\n      message: 'Passwords do not match'\n    }),\n    acceptTerms: (0, _emberCpValidations.validator)(value => value === true)\n  }, {\n    debounce: 500\n  });\n\n  var _default = Ember.Component.extend(Validations, {\n    /*eslint-disable */\n    invitaton: undefined,\n    errors: undefined,\n    password: undefined,\n    confirmPassword: undefined,\n    acceptTerms: false,\n\n    /*eslint-enable */\n    isValid: Ember.computed.alias('validations.isValid'),\n    actions: {\n      onSubmit(email, password, e) {\n        e.preventDefault();\n        this.get('onSubmit')(email, password);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/register-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"H50+DcpS\",\n    \"block\": \"{\\\"symbols\\\":[\\\"error\\\"],\\\"statements\\\":[[7,\\\"form\\\"],[12,\\\"onsubmit\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubmit\\\",[23,[\\\"invitation\\\",\\\"email\\\"]],[23,[\\\"password\\\"]]],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Email\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"invitation\\\",\\\"email\\\"]]],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"type\\\",\\\"email\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"password\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"password\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Confirm Password\\\\n\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"confirmPassword\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"confirmPassword\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"validations\\\",\\\"attrs\\\",\\\"confirmPassword\\\",\\\"isDirty\\\"]],[23,[\\\"validations\\\",\\\"attrs\\\",\\\"confirmPassword\\\",\\\"isInvalid\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[23,[\\\"validations\\\",\\\"attrs\\\",\\\"confirmPassword\\\",\\\"message\\\"]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[21,\\\"acceptTerms\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"acceptTerms\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n    Accept \\\"],[4,\\\"link-to\\\",[\\\"terms-of-service\\\"],[[\\\"target\\\"],[\\\"_blank\\\"]],{\\\"statements\\\":[[0,\\\"Terms of Service\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"li\\\"],[9],[1,[22,1,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isValid\\\"]]],null]],[11,\\\"type\\\",\\\"submit\\\"],[9],[0,\\\"\\\\n    Register\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/register-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-inprogress/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    equal,\n    readOnly\n  } = Ember.computed;\n  const TIMEOUT_DELAY = 1000; // 10 second tries\n\n  var _default = Ember.Component.extend({\n    classNames: ['reoptimize-in-progress'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // Passed In Attributes\n    title: null,\n    description: null,\n    timeout: TIMEOUT_DELAY,\n    selectedVal: null,\n    isExported: readOnly('workspace.isExported'),\n    operationType: readOnly('workspace.operationType'),\n    isExporting: equal('operationType', 'export'),\n    isBrokerExporting: equal('operationType', 'brokerExport'),\n    inProgressTitle: Ember.computed('reoptimizeInProgress', 'isExported', 'isExporting', 'isBrokerExporting', function () {\n      const isExported = this.get('isExported');\n      const isExporting = this.get('isExporting');\n      const isBrokerExporting = this.get('isBrokerExporting');\n      if (isExported || isExporting || isBrokerExporting) return 'Release in Progress';\n      return 'Reoptimization in Progress';\n    }),\n    inProgressTip: Ember.computed('reoptimizeInProgress', 'isExported', 'isExporting', 'isBrokerExporting', function () {\n      const isExported = this.get('isExported');\n      const isExporting = this.get('isExporting');\n      const isBrokerExporting = this.get('isBrokerExporting');\n      if (isExported || isExporting || isBrokerExporting) return 'Another scheduler is currently releasing. Information is read-only at this time.';\n      return 'Another scheduler is currently reoptimizing. Information is read-only at this time.';\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const tooltip = this.get('tooltip');\n      const workspace = this.get('workspace');\n      const editModal = this.get('editModal');\n\n      if (!workspace.get('triggeredReoptimize')) {\n        const inProgressTip = this.get('inProgressTip');\n        const inProgressTitle = this.get('inProgressTitle');\n        tooltip.pushConfirmation({\n          title: inProgressTitle,\n          hasOverlay: true,\n          tip: inProgressTip,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            workspace.reset();\n            tooltip.reset();\n\n            if (editModal.get('isOpen')) {\n              editModal.close();\n            }\n          },\n\n          closeAction: () => {\n            workspace.reset();\n          }\n        });\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-inprogress/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"oTtfcz4G\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-inprogress/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['reoptimize'],\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tableRef: null,\n    currentComponentPath: null,\n    currentAPITask: null,\n    disableActions: Ember.computed.readOnly('currentAPITask.isRunning'),\n    // Passed In Attributes\n    currentSchedule: Ember.computed.readOnly('stackFrame.options.currentSchedule'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onXButtonClick() {\n        this.get('workspace').popState('reoptimize');\n      },\n\n      onItemSelect(model) {\n        const componentPath = model.get('componentPath');\n        this.set('currentComponentPath', componentPath);\n      },\n\n      onToggleDisableActions() {\n        this.toggleDisableActions();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-list/component\", [\"exports\", \"adept-iq/pods/components/reoptimize-modal/operation-list/config\"], function (_exports, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['operation-list'],\n    permissionLayer: Ember.inject.service(),\n    // passed from reoptimize-modal\n    onItemSelect: null,\n    currentSchedule: null,\n    models: null,\n    selectedModel: null,\n    disableList: null,\n\n    init() {\n      this._super(...arguments);\n\n      const models = _config.default.filter(model => {\n        if (Ember.isPresent(model.permId)) {\n          return this.get('permissionLayer').permInUserHash(model.permId, null);\n        }\n\n        return true;\n      });\n\n      if (models) {\n        models.forEach(model => {\n          model.set('currentSchedule', this.get('currentSchedule'));\n        });\n      }\n\n      if (!models || !models.length) {\n        this.set('models', []);\n      } else {\n        this.set('models', models);\n      }\n    },\n\n    actions: {\n      onItemSelect(model) {\n        if (!model) return;\n        this.set('selectedModel', model);\n        const onItemSelect = this.get('onItemSelect');\n\n        if (onItemSelect) {\n          onItemSelect(model);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-list/config\", [\"exports\", \"adept-iq/classes/vertical-menu-models/operation-list-model\", \"adept-iq/config/mapped-permIds\"], function (_exports, _operationListModel, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const reoptimizeItem = _operationListModel.default.create({\n    title: 'Reoptimize',\n    summary: 'The \"Reoptimize\" operation takes all the trips scheduled for a certain date, processes them, and places them on routes based on your company strategy.',\n    componentPath: _operationListModel.REOPTIMIZE_VIEW_PATH,\n    permId: _mappedPermIds.default.generateSchedule\n  });\n\n  const illegalToWaitlistItem = _operationListModel.default.create({\n    title: 'Illegal to Waitlist',\n    summary: 'The \"Illegal to Waitlist\" operation will find all trips with the status of \\'Illegal\\' and update selected trips\\' status to \\'Waitlist.\\'',\n    componentPath: 'illegal-to-waitlist'\n  });\n\n  const recoverScheduleItem = _operationListModel.default.create({\n    title: 'Recover Schedule',\n    summary: 'The \"Recover Schedule\" operation replaces the schedule in the strategy engine service with the current state of the schedule as saved in the database. This operation should only be used if data files have been corrupted in the database and with guidance from Stratagen Systems.',\n    componentPath: 'recover-schedule',\n    permId: _mappedPermIds.default.generateSchedule\n  });\n\n  const removeDriverBreakItem = _operationListModel.default.create({\n    title: 'Remove Driver Breaks',\n    summary: 'The \"Remove Driver Breaks\" operation automatically removes driver breaks from routes based on what is defined as a short route. The definition of a short route is set via the \"Remove Driver Break Length\" system configuration value.',\n    componentPath: 'remove-driver-break'\n  });\n\n  const adjustDriverBreakItem = _operationListModel.default.create({\n    title: 'Adjust Driver Breaks',\n    summary: 'The \"Adjust Driver Breaks\" operation shifts all driver breaks to the \"middle\" of the route. Currently, this is configured to be between 3 and 6 hours into the shift.',\n    componentPath: 'adjust-driver-break'\n  });\n\n  const trimSlackItem = _operationListModel.default.create({\n    title: 'Trim Slack',\n    summary: 'The \"Trim Slack\" operation removes slack time from the beginning and the end of tomorrow�s routes.',\n    componentPath: 'trim-slack'\n  });\n\n  const consolidateRouteItem = _operationListModel.default.create({\n    title: 'Consolidate Routes',\n    summary: 'The \"Consolidate Routes\" operation attempts to condense tomorrow\\'s trips onto fewer routes.',\n    summary1: 'Currently, this is configured to consider rescheduling trips from routes that have less than 3 trips as well as those routes that have less than 4.0 hours of total work.',\n    componentPath: 'consolidate-routes'\n  });\n\n  const openZonesItem = _operationListModel.default.create({\n    title: 'Open Zones',\n    summary: 'The \"Open Zones\" operation changes zone affinities for multiple routes at once.',\n    summary1: 'All routes for the selected provider that have a zone affinity of \"No Service\" for the selected zones(s) will have that zone affinity changed to \"Last Resort\" allowing the routes to travel to the selected zone(s).',\n    componentPath: 'open-zones',\n    permId: _mappedPermIds.default.openZones\n  });\n\n  const releaseRouteItem = _operationListModel.default.create({\n    title: 'Release Routes',\n    summary: 'Release Route enables dispatchers to work with tomorrow\\'s routes.',\n    componentPath: 'release-routes',\n    permId: _mappedPermIds.default.closeSchedule\n  });\n\n  const operationItems = [reoptimizeItem, illegalToWaitlistItem, recoverScheduleItem, removeDriverBreakItem, adjustDriverBreakItem, trimSlackItem, consolidateRouteItem, openZonesItem, releaseRouteItem];\n  var _default = operationItems;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-list/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"2kQpzNIq\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"generic-components/vertical-menu\\\",null,[[\\\"models\\\",\\\"selectedIndex\\\",\\\"disableList\\\",\\\"onItemSelect\\\"],[[23,[\\\"models\\\"]],0,[23,[\\\"disableList\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onItemSelect\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"operation-summary\\\"],[9],[0,\\\"\\\\n\\\"],[1,[23,[\\\"selectedModel\\\",\\\"summary\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"selectedModel\\\",\\\"summary1\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"operation-summary\\\"],[9],[0,\\\"\\\\n\\\"],[1,[23,[\\\"selectedModel\\\",\\\"summary1\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-list/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/adjust-driver-break-table/component\", [\"exports\", \"adept-iq/mixins/active-context-binding\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-tables/adjust-driver-break-table/config\"], function (_exports, _activeContextBinding, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_activeContextBinding.default, {\n    classNames: ['adjust-driver-break-table'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    config: _config.default,\n    currentSchedule: null,\n    queryParams: null,\n    defaultCheckboxRowSelected: true,\n    isTableLoadedForFirstTime: true,\n\n    init() {\n      this._super(...arguments);\n\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      this.set('queryParams', {\n        filter: `and(or(eq(optimizationFlags,1),eq(optimizationFlags,3)),eq(scheduleId,${currentScheduleId}))&include=trips`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.set('tableRef', null);\n    },\n\n    //To Override the onRemoveSearchClick method in the parent component\n    onRemoveSearchClick() {\n      this._super(...arguments); //NYAAR-19093:To set default CheckboxRow Selected\n\n\n      this.set('defaultCheckboxRowSelected', true);\n      this.set('isTableLoadedForFirstTime', false);\n    },\n\n    //NYAAR-20346: overriding the parent component function refreshData\n    refreshData() {\n      this._super(...arguments);\n\n      this.fetchCheckedRows();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/adjust-driver-break-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'route',\n    title: 'Adjust Driver Breaks',\n    defaultSortId: 'provider',\n    defaultSortAsc: true,\n    queryModelData: true,\n    rowSelectionType: 'checkbox',\n    // hideWidgetControls: true,\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'Route',\n      index: 1,\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Route Name',\n      valuePath: 'name',\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'shiftLength',\n      index: 2,\n      type: 'number',\n      label: 'Shift Length',\n      valuePath: 'shiftLength',\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'numberofTrips',\n      index: 3,\n      type: 'number',\n      label: 'Trips',\n      valuePath: 'noOfTrips',\n      searchable: true,\n      defaultWidth: 50\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/consolidate-routes-table/component\", [\"exports\", \"adept-iq/mixins/active-context-binding\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-tables/consolidate-routes-table/config\"], function (_exports, _activeContextBinding, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_activeContextBinding.default, {\n    classNames: ['consolidate-routes-table'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    config: _config.default,\n    currentSchedule: null,\n    queryParams: null,\n    defaultCheckboxRowSelected: true,\n    isTableLoadedForFirstTime: true,\n\n    init() {\n      this._super(...arguments);\n\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      this.set('queryParams', {\n        filter: `and(or(eq(optimizationFlags,2),eq(optimizationFlags,3)),eq(scheduleId,${currentScheduleId}))&include=trips`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.set('tableRef', null);\n    },\n\n    //To Override the onRemoveSearchClick method in the parent component\n    onRemoveSearchClick() {\n      this._super(...arguments); //NYAAR-19093:To set default CheckboxRow Selected\n\n\n      this.set('defaultCheckboxRowSelected', true);\n      this.set('isTableLoadedForFirstTime', false);\n    },\n\n    //NYAAR-20346: overriding the parent component function refreshData\n    refreshData() {\n      this._super(...arguments);\n\n      this.fetchCheckedRows();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/consolidate-routes-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'route',\n    title: 'Consolidate Routes',\n    defaultSortId: 'provider',\n    defaultSortAsc: true,\n    queryModelData: true,\n    rowSelectionType: 'checkbox',\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'Route',\n      index: 1,\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Route Name',\n      valuePath: 'name',\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'shiftLength',\n      index: 2,\n      type: 'number',\n      label: 'Shift Length',\n      valuePath: 'shiftLength',\n      searchable: true,\n      defaultWidth: 100\n    }, {\n      id: 'numberofTrips',\n      index: 3,\n      type: 'number',\n      label: 'Trips',\n      valuePath: 'noOfTrips',\n      searchable: true,\n      defaultWidth: 50\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-provider-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-provider-table/config\", \"adept-iq/utils/status-error-code\"], function (_exports, _component, _config, _statusErrorCode) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ILLEGAL_STATUS = 'illegal';\n\n  var _default = _component.default.extend({\n    classNames: ['release-routes-table', 'release-routes-provider-table'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    config: _config.default,\n    selectedProvider: null,\n    totalRecords: null,\n    providerName: Ember.observer('records', function () {\n      const recordLength = this.get('records.length');\n      const providerName = `Provider ${this.get('selectedProvider')} (${recordLength} Trips)`;\n      this.set('config.title', providerName);\n    }),\n    failedStatusRow: Ember.observer('records', function () {\n      const records = this.get('records');\n      records.forEach(trip => {\n        const statusCode = this.getStatusCode(trip);\n        const errorCode = this.getErrorCode(statusCode);\n        const errorDescription = this.getErrorDescription(statusCode, trip);\n        this.get('table.rows').forEach(row => {\n          row.set('statusCode', statusCode);\n          row.set('errorCode', errorCode);\n          row.set('errorDescription', errorDescription);\n        });\n      });\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('isSearchAllowed', false);\n      this.set('onCancelButtonEnable', true);\n      const scheduleId = this.get('failedScheduleId');\n      const selectedRow = this.get('selectedRow');\n      const failedProvider = selectedRow.map(row => row.get('provider.name')).firstObject;\n      this.set('selectedProvider', failedProvider);\n      await this.set('queryParams', {\n        filter: `and(eq(scheduleId,${scheduleId}),eq(currentProviderName,${failedProvider}),ne(status,${ILLEGAL_STATUS}))`\n      });\n    },\n\n    /**\n     * NYAAR-19295: returns status code (like: 400, 500,.etc)\n     * @param {*Object} trip\n     * @returns {*Number}\n     */\n    getStatusCode(trip) {\n      const isJSON = this.isJson(trip.get('failedStatus'));\n\n      if (isJSON) {\n        const statusCode = JSON.parse(trip.get('failedStatus')).statusCode;\n        return statusCode;\n      }\n\n      return null;\n    },\n\n    /**\n     * NYAAR-19295: return errorCode status\n     * @param {*Number} errorStatusCode\n     * @returns {*String}\n     */\n    getErrorCode(errorStatusCode) {\n      const statusCode = `${errorStatusCode}`;\n      return _statusErrorCode.default[statusCode];\n    },\n\n    /**\n     * NYAAR-19295: return errorDescription related to statusCode\n     * @param {*Number} statusCode\n     * @param {*Array} trip\n     * @returns {*String}\n     */\n    getErrorDescription(statusCode, trip) {\n      if (statusCode === 400) {\n        const failedStatus = JSON.parse(trip.get('failedStatus'));\n        const errorMessage = JSON.parse(failedStatus.message);\n        const errors = JSON.parse(errorMessage.errorMessage);\n        const errorDetails = JSON.parse(errors.errorMessage);\n        return errorDetails.errors.get('firstObject.technical_details.reason');\n      }\n\n      return '';\n    },\n\n    /**\n     * checks the given value is in JSON-format or not\n     * @param {*String} str\n     * @returns {*Boolean}\n     */\n    isJson(str) {\n      try {\n        JSON.parse(str);\n      } catch (e) {\n        return false;\n      }\n\n      return true;\n    },\n\n    actions: {\n      onCancelButtonClick() {\n        this.toggleProperty('isProviderTableShow');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-provider-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'trip',\n    defaultSortId: 'tripId',\n    showSelectedRowLength: false,\n    defaultSortAsc: false,\n    queryModelData: true,\n    columns: [{\n      index: 0,\n      id: 'tripId',\n      type: 'uuid',\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      hidden: false,\n      searchable: true\n    }, {\n      index: 1,\n      id: 'httpStatusCode',\n      type: 'number',\n      label: 'HTTP Status Code',\n      valuePath: 'statusCode',\n      hidden: false,\n      searchable: true\n    }, {\n      index: 2,\n      id: 'errorCode',\n      type: 'text',\n      label: 'Error Code',\n      valuePath: 'errorCode',\n      hidden: false,\n      searchable: true\n    }, {\n      index: 3,\n      id: 'errorDescription',\n      type: 'text',\n      label: 'Error Description',\n      valuePath: 'errorDescription',\n      hidden: false,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-table/config\", \"adept-iq/models/provider\"], function (_exports, _component, _config, _provider) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PROVIDER_CONFIG = [{\n    id: 'failedProvider',\n    index: 1,\n    type: 'text',\n    valuePath: 'provider.providerFailedReason',\n    searchable: true,\n    defaultWidth: 60\n  }, {\n    id: 'providerDetails',\n    index: 2,\n    type: 'text',\n    valuePath: 'provider.details',\n    searchable: true,\n    defaultWidth: 60\n  }];\n\n  var _default = _component.default.extend({\n    classNames: ['release-routes-table'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    config: _config.default,\n    currentSchedule: null,\n    configColumn: null,\n\n    init() {\n      this._super(...arguments);\n\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      this.set('configColumn', [..._config.default.columns]);\n      this.set('queryParams', {\n        filter: `eq(scheduleId,${currentScheduleId})`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n        this.set('checkAll', false);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.set('tableRef', null);\n      this.set('config.columns', this.get('configColumn'));\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        const uniqRecords = records.uniqBy('provider.id');\n        const filteredRecords = uniqRecords.filter(record => {\n          return record.get('provider.userCanAccessProvider') && record.get('provider.status').toLowerCase() === _provider.ACTIVE_STATUS_TYPE;\n        });\n        return filteredRecords;\n      });\n    },\n\n    errorTripProviders: Ember.observer('failedTripProviders', function () {\n      const failedTripProviders = this.get('failedTripProviders');\n      const parsedFailedTripCounts = JSON.parse(failedTripProviders);\n      const failedProviders = Object.keys(parsedFailedTripCounts);\n\n      if (!Ember.isEmpty(failedTripProviders)) {\n        const configColumn = this.get('config.columns');\n        PROVIDER_CONFIG.forEach(col => {\n          configColumn.pushObject(col);\n        });\n        failedProviders.forEach(provider => {\n          this.get('table.rows').forEach(row => {\n            if (row.get('provider.name') === provider) {\n              row.set('provider.providerFailedReason', `${parsedFailedTripCounts[provider].count} trips failed to release`);\n              row.set('provider.details', 'Details');\n            }\n          });\n        });\n      }\n    }),\n    actions: {\n      onRowClick(row) {\n        const isDetailsAvailable = row.get('provider.details');\n\n        if (isDetailsAvailable) {\n          this.set('selectedRow', [row]);\n          this.set('isProviderTableShow', true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/release-routes-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'route',\n    title: 'Release Routes',\n    showSelectedRowLength: false,\n    defaultSortId: 'provider',\n    defaultSortAsc: true,\n    queryModelData: true,\n    // hideWidgetControls: true,\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/remove-driver-break-table/component\", [\"exports\", \"adept-iq/mixins/active-context-binding\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-tables/remove-driver-break-table/config\"], function (_exports, _activeContextBinding, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_activeContextBinding.default, {\n    classNames: ['remove-driver-break-table'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    config: _config.default,\n    currentSchedule: null,\n    defaultCheckboxRowSelected: true,\n    isTableLoadedForFirstTime: true,\n\n    init() {\n      this._super(...arguments);\n\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      this.set('queryParams', {\n        filter: `eq(scheduleId,${currentScheduleId})`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.set('tableRef', null);\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        const filterRecords = records.filter(record => record.isDriverBreakRemoved === false && record.canShowRemoveDriverBreak === true);\n        return filterRecords;\n      });\n    },\n\n    //To Override the onRemoveSearchClick method in the parent component\n    onRemoveSearchClick() {\n      this._super(...arguments); //NYAAR-19093:To set default CheckboxRow Selected\n\n\n      this.set('defaultCheckboxRowSelected', true);\n      this.set('isTableLoadedForFirstTime', false);\n    },\n\n    //NYAAR-20346: overriding the parent component function refreshData\n    refreshData() {\n      this._super(...arguments);\n\n      this.fetchCheckedRows();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/remove-driver-break-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'route',\n    title: 'Remove Driver Breaks',\n    defaultSortId: 'provider',\n    defaultSortAsc: true,\n    rowSelectionType: 'checkbox',\n    queryModelData: true,\n    // hideWidgetControls: true,\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'name',\n      index: 1,\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Route Name',\n      valuePath: 'name',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'trimStart',\n      index: 2,\n      type: 'date',\n      label: 'Trim Start',\n      valuePath: 'adjustedStartTime',\n      format: 'HH:mm',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'trimEnd',\n      index: 3,\n      type: 'date',\n      label: 'Trim End',\n      valuePath: 'adjustedEndTime',\n      format: 'HH:mm',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'routeMinutes',\n      index: 4,\n      type: 'number',\n      label: 'Route Minutes',\n      valuePath: 'routeMinutes',\n      format: 'HH:mm',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'result',\n      index: 6,\n      type: 'text-break',\n      // make a new component\n      label: 'Result',\n      valuePath: 'result',\n      defaultWidth: 100,\n      searchable: true,\n      highlightable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/trim-slack-table/component\", [\"exports\", \"adept-iq/mixins/active-context-binding\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-tables/trim-slack-table/config\"], function (_exports, _activeContextBinding, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_activeContextBinding.default, {\n    classNames: ['trim-slack-table'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    config: _config.default,\n    currentSchedule: null,\n    defaultCheckboxRowSelected: true,\n    isTableLoadedForFirstTime: true,\n\n    init() {\n      this._super(...arguments);\n\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      this.set('queryParams', {\n        filter: `eq(scheduleId,${currentScheduleId})`\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.set('tableRef', null);\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        return records.filter(record => record.get('containsSlack') && !record.get('isTrimmed') && record.get('containsAdjustedTime'));\n      });\n    },\n\n    //To Override the onRemoveSearchClick method in the parent component\n    onRemoveSearchClick() {\n      this._super(...arguments); //NYAAR-19093:To set default CheckboxRow Selected\n\n\n      this.set('defaultCheckboxRowSelected', true);\n      this.set('isTableLoadedForFirstTime', false);\n    },\n\n    //NYAAR-20346: overriding the parent component function refreshData\n    refreshData() {\n      this._super(...arguments);\n\n      this.fetchCheckedRows();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-tables/trim-slack-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'route',\n    title: 'Trim Slack',\n    defaultSortId: 'provider',\n    defaultSortAsc: true,\n    rowSelectionType: 'checkbox',\n    queryModelData: true,\n    // hideWidgetControls: true,\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'name',\n      index: 1,\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'Route Name',\n      valuePath: 'name',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'origStart',\n      index: 2,\n      type: 'date',\n      label: 'Original Start Time',\n      valuePath: 'plannedStartTime',\n      format: 'HH:mm',\n      searchable: true,\n      defaultWidth: 70\n    }, {\n      id: 'newStart',\n      index: 3,\n      type: 'date',\n      label: 'New Start Time',\n      valuePath: 'adjustedStartTime',\n      format: 'HH:mm',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'origEnd',\n      index: 4,\n      type: 'date',\n      label: 'Original End Time',\n      valuePath: 'plannedEndTime',\n      format: 'HH:mm',\n      searchable: true,\n      defaultWidth: 50\n    }, {\n      id: 'newEnd',\n      index: 5,\n      type: 'date',\n      label: 'New End Time',\n      valuePath: 'adjustedEndTime',\n      format: 'HH:mm',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'result',\n      index: 6,\n      type: 'text',\n      label: 'Result',\n      valuePath: 'result',\n      defaultWidth: 100,\n      searchable: true,\n      highlightable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/adjust-driver-break/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/mixins/async-schedule-operation\"], function (_exports, _emberConcurrency, _asyncScheduleOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['adjust-driver-break'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    isTaskRunning: Ember.computed.alias('adjustDriverBreak.isRunning'),\n    // Passed In Attributes\n    title: null,\n    currentSchedule: null,\n    tableRef: null,\n    refreshData: null,\n    checkedRows: Ember.computed.alias('tableRef.checkedRows'),\n    disableAdjustDriverBreakButton: Ember.computed.lt('checkedRows.length', 1),\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    // be able to adjust from selected rows\n    adjustDriverBreak: (0, _emberConcurrency.task)(function* (routes) {\n      const currentSchedule = this.get('currentSchedule');\n      const routeIds = routes.map(route => parseInt(route.get('id'), 10));\n      let result;\n\n      try {\n        const options = {\n          operationData: {\n            'routes': routeIds\n          }\n        };\n        result = yield this.createScheduleAsyncOperation.perform(currentSchedule, 'adjustDriverBreaks', options);\n\n        if (result) {\n          this.get('notifications').success('Driver breaks successfully adjusted');\n          routes.forEach(record => {\n            record.set('isAdjusted', true);\n          });\n        } else {\n          this.get('notifications').warning('Driver breaks failed to be adjusted');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          this.get('notifications').warning('Driver breaks failed to be adjusted');\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n    actions: {\n      onAdjustDriverBreakClick() {\n        const routes = this.get('checkedRows') || [];\n        this.adjustDriverBreak.perform(routes);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/adjust-driver-break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"HwZoh/Z+\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"reoptimize-modal/operation-tables/adjust-driver-break-table\\\",null,[[\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"adjust-driver-break button-holder\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"adjust-driver-break-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableAdjustDriverBreakButton\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAdjustDriverBreakClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Adjust\\\"],[10],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/adjust-driver-break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/consolidate-routes/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/mixins/async-schedule-operation\"], function (_exports, _emberConcurrency, _moment, _asyncScheduleOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['consolidate-routes'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    isTaskRunning: Ember.computed.alias('consolidateRoutes.isRunning'),\n    // Passed In Attributes\n    title: null,\n    currentSchedule: null,\n    tableRef: null,\n    refreshData: null,\n    checkedRows: Ember.computed.alias('tableRef.checkedRows'),\n    disableConsolidateRoutesButton: Ember.computed.lt('checkedRows.length', 1),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    // be able to adjust from selected rows\n    consolidateRoutes: (0, _emberConcurrency.task)(function* (routes) {\n      const currentSchedule = this.get('currentSchedule');\n      const routeIds = routes.map(route => parseInt(route.get('id'), 10));\n      let result;\n\n      try {\n        const options = {\n          operationData: {\n            'routes': routeIds\n          }\n        };\n        result = yield this.createScheduleAsyncOperation.perform(currentSchedule, 'routeConsolidation', options);\n\n        if (result) {\n          this.get('notifications').success('Short routes successfully consolidated.');\n          return routes.forEach(async record => {\n            record.set('isAdjusted', true);\n\n            try {\n              const activityLogAdapter = this.get('store').adapterFor('activity-log');\n              const userInfo = {\n                content: {\n                  details: 'Route was consolidated as part of scheduling.',\n                  activity: 'Consolidate',\n                  userId: this.session.data.authenticated.userId,\n                  actualTime: (0, _moment.default)().toDate(),\n                  type: 'genericLogging'\n                }\n              };\n              const routeInfo = Ember.Object.create({\n                context: {\n                  route: {\n                    schedule: {\n                      id: currentSchedule.get('id')\n                    },\n                    id: record.get('id')\n                  }\n                }\n              });\n              await activityLogAdapter.createRouteActivity(userInfo, routeInfo);\n            } catch (err) {\n              return Promise.resolve();\n            }\n          });\n        }\n\n        this.get('notifications').warning('Short routes failed to be consolidated.');\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          this.get('notifications').warning('Short routes failed to be consolidated.');\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n    actions: {\n      onConsolidateRoutesClick() {\n        const routes = this.get('checkedRows') || [];\n        this.consolidateRoutes.perform(routes);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/consolidate-routes/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"mJM/RXII\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"reoptimize-modal/operation-tables/consolidate-routes-table\\\",null,[[\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"consolidate-routes button-holder\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"consolidate-routes-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableConsolidateRoutesButton\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onConsolidateRoutesClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Consolidate\\\"],[10],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/consolidate-routes/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/illegal-to-waitlist/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['illegal-to-waitlist'],\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    scheduling: Ember.inject.service(),\n    // Passed In Attributes\n    title: 'Illegal to Waitlist',\n    updating: false,\n    isTaskRunning: Ember.computed.alias('updating'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    /**\n     *update illegal trips to waitlisted trips\n     *\n     */\n    updateIllegalTripsToWaitlistTrips: (0, _emberConcurrency.task)(function* (scheduleId) {\n      try {\n        this.set('updating', true);\n        const success = yield this.get('scheduling').updateIllegalTripsToWaitlistTrips(scheduleId);\n\n        if (success) {\n          this.get('notifications').success('Successfully set the status of all illegal trips to waitlisted');\n        } else {\n          throw new Error();\n        }\n      } catch (e) {\n        this.get('notifications').warning('Failed to set the status of all illegal trips to waitlisted');\n        throw e;\n      } finally {\n        this.set('updating', false);\n      }\n    }).drop(),\n    actions: {\n      onUpdateClick() {\n        const currentScheduleId = this.get('workspace').get('currentSchedule.id');\n        this.updateIllegalTripsToWaitlistTrips.perform(currentScheduleId);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/illegal-to-waitlist/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"RLzpVrV9\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isTaskRunning\\\"]]],null,{\\\"statements\\\":[[1,[21,\\\"generic-components/ring-loader\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"illegal-to-waitlist-main\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"body-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h3\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"button-holder\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"illegal-to-waitlist-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableApplyButton\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onUpdateClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Update\\\"],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/illegal-to-waitlist/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/open-zones/component\", [\"exports\", \"adept-iq/config/api-urls\", \"adept-iq/models/zone\"], function (_exports, _apiUrls, _zone) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const IN_ACTIVE_STATUS = 'inactive';\n\n  var _default = Ember.Component.extend({\n    classNames: ['open-zones'],\n    workspaceContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    // Passed In Attributes\n    title: 'Open Zones',\n    currentSchedule: null,\n    selectedProvider: null,\n    zonesList: null,\n    currentlyProcessing: false,\n    isTaskRunning: Ember.computed.alias('currentlyProcessing'),\n\n    init() {\n      this._super(...arguments);\n\n      this.get('store').findAll('zone').then(zones => {\n        const sortedZones = zones.toArray().sort((a, b) => {\n          const aId = parseInt(a.id, 10);\n          const bId = parseInt(b.id, 10);\n          return aId - bId;\n        });\n        sortedZones.map(zone => {\n          zone.set('openZoneSelected', false);\n        });\n        this.set('zonesList', sortedZones);\n      });\n    },\n\n    providersList: Ember.computed('workspaceContext.providersList', function () {\n      const providers = this.get('workspaceContext.providersList');\n      const activeProviders = providers.filter(provider => {\n        return !(provider.get('status').toLowerCase() === IN_ACTIVE_STATUS);\n      });\n      return activeProviders;\n    }),\n    isDisabled: Ember.computed('selectedProvider', 'zonesList.@each.openZoneSelected', 'currentlyProcessing', function () {\n      const zonesList = this.get('zonesList');\n      return !Ember.isPresent(this.get('selectedProvider')) || !zonesList.any(zone => zone.openZoneSelected) || this.get('currentlyProcessing');\n    }),\n\n    async getCurrentScheduleProviderRoute(scheduleId, providerId) {\n      const session = this.get('session');\n      return this.get('ajax').post(`${_apiUrls.API.schedulingService.host}/route?filter=and(eq(scheduleId,'${scheduleId}'),eq(providerName,'${providerId}'))`, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(response => {\n        return response.data;\n      });\n    },\n\n    async patchScheduleRoute(scheduleRoute, affinities) {\n      const session = this.get('session');\n      const id = scheduleRoute.id;\n      const json = {\n        id,\n        type: 'route',\n        attributes: {\n          affinities\n        }\n      };\n      return this.get('ajax').patch(_apiUrls.API.schedulingService.host + '/route/' + id, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          data: json\n        }\n      }).then(response => {\n        return response;\n      }).catch(error => {\n        return error;\n      });\n    },\n\n    processAffinitiesToChange(affinitiesToChange, currentAffinities) {\n      const newAffinities = [];\n      let needsUpdate = false; // only change affinities that are in no service to last resort\n\n      affinitiesToChange.forEach((change, index) => {\n        const currentAffinity = Ember.isPresent(currentAffinities[index]) ? currentAffinities[index] : _zone.AFFINITY_NO_SERVICE.val;\n\n        if (change && currentAffinity === _zone.AFFINITY_NO_SERVICE.val) {\n          newAffinities.push(_zone.AFFINITY_LAST_RESORT.val);\n          needsUpdate = true;\n        } else {\n          newAffinities.push(currentAffinity);\n        }\n      });\n      return needsUpdate ? newAffinities : null;\n    },\n\n    async onOpenZoneBtnClick() {\n      this.set('currentlyProcessing', true);\n      const patchScheduleRoute = this.get('patchScheduleRoute').bind(this);\n      const processAffinitiesToChange = this.get('processAffinitiesToChange').bind(this);\n      const currentSchedule = this.get('currentSchedule');\n      const selectedProvider = this.get('selectedProvider');\n      const affinitiesToChange = this.get('zonesList').map(zone => zone.openZoneSelected);\n      const responseData = await this.getCurrentScheduleProviderRoute(currentSchedule.id, selectedProvider.id);\n      const results = await Ember.RSVP.Promise.all(responseData.map(async routeData => {\n        const currentAffinities = routeData.attributes.affinities;\n        const newAffinities = processAffinitiesToChange(affinitiesToChange, currentAffinities);\n\n        if (Ember.isPresent(newAffinities)) {\n          return await patchScheduleRoute(routeData, newAffinities);\n        }\n      }));\n      const failedResult = results.filter(result => Ember.isPresent(result));\n\n      if (failedResult.length > 0) {\n        this.get('notifications').warning(`FAILED TO OPEN ZONES FOR ${failedResult.length} ROUTE(S).`);\n      } else {\n        this.get('notifications').success('SUCCESSFULLY OPENED ZONES.');\n      }\n\n      this.set('currentlyProcessing', false);\n    },\n\n    actions: {\n      onXButtonClick() {\n        this.get('workspace').popState('reoptimize');\n      },\n\n      selectOneClick(zone, event) {\n        zone.set('openZoneSelected', event.srcElement.checked);\n      },\n\n      onProviderSelected(val) {\n        this.set('selectedProvider', val);\n      },\n\n      onOpenZonesClick() {\n        this.onOpenZoneBtnClick();\n      },\n\n      selectAllClick(event) {\n        const check = event.srcElement.checked;\n        const zonesList = this.get('zonesList');\n        zonesList.map(zone => zone.set('openZoneSelected', check));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/open-zones/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"2q2ACfWA\",\n    \"block\": \"{\\\"symbols\\\":[\\\"zone\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isTaskRunning\\\"]]],null,{\\\"statements\\\":[[1,[21,\\\"generic-components/ring-loader\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"open-zones-main\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"body-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h3\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"inputs\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"Select Provider\\\",[23,[\\\"providersList\\\"]],\\\"name\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedProvider\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderSelected\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"zones-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[0,\\\"Zones\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"open-zones-table-div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"open-zones-table\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"open-zones-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"open-zones-th\\\"],[9],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"open-zone-all\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"selectAllClick\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"open-zones-th\\\"],[9],[0,\\\"Select Zones(s)\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"zonesList\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"open-zones-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"open-zones-td\\\"],[9],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"open-zone-select\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"selectOneClick\\\",[22,1,[]]],null]],[12,\\\"checked\\\",[22,1,[\\\"openZoneSelected\\\"]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"open-zones-td\\\"],[9],[1,[22,1,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"button-holder\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"open-zones-button\\\"],[12,\\\"disabled\\\",[21,\\\"isDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpenZonesClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Open Zones\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/open-zones/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/recover-schedule/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/mixins/async-schedule-operation\"], function (_exports, _emberConcurrency, _asyncScheduleOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['recover-schedule'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // Passed In Attributes\n    title: 'Recover Schedule',\n    currentSchedule: null,\n    isTaskRunning: Ember.computed.oneWay('recoverSchedule.isRunning'),\n    recoverSchedule: (0, _emberConcurrency.task)(function* () {\n      const schedule = this.get('currentSchedule');\n      const notifications = this.get('notifications');\n      const workspace = this.get('workspace');\n\n      try {\n        workspace.set('reoptimizeInProgress', true);\n        workspace.set('triggeredReoptimize', true);\n        const isJobSuccess = yield this.createScheduleAsyncOperation.perform(schedule, 'recovery', {});\n\n        if (isJobSuccess) {\n          notifications.success('Schedule successfully recovered.');\n          workspace.popState('reoptimize');\n        } else {\n          notifications.warning('Failed to recover the schedule.');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          notifications.warning('Failed to recover the schedule.');\n          throw e;\n        }\n      } finally {\n        workspace.set('operationType', null);\n        workspace.set('reoptimizeInProgress', false);\n      }\n    }).drop(),\n    actions: {\n      onRecoverClick() {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Recover Schedule',\n          hasOverlay: true,\n          tip: 'Are you sure you want to recover the schedule? This action will recover the scheduling state from the database. This action is irreversible.',\n          primaryActionText: 'Recover',\n          primaryAction: () => {\n            tooltip.reset();\n            return this.recoverSchedule.perform();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/recover-schedule/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"4Tb29fo9\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isTaskRunning\\\"]]],null,{\\\"statements\\\":[[1,[21,\\\"generic-components/ring-loader\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"recover-schedule-main\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"body-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h3\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"button-holder\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"recover-schedule-button\\\"],[12,\\\"disabled\\\",[21,\\\"isTaskRunning\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRecoverClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Recover\\\"],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/recover-schedule/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/release-routes/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/config/api-urls\"], function (_exports, _emberConcurrency, _asyncScheduleOperation, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['release-routes'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    isTaskRunning: Ember.computed.oneWay('releaseRoutes.isRunning'),\n    // Passed In Attributes\n    title: null,\n    currentSchedule: null,\n    tableRef: null,\n    refreshData: null,\n    failedTripProviders: null,\n    isProviderTableShow: false,\n    failedScheduleId: null,\n    selectedRow: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    providerTableEnable: Ember.computed('isProviderTableShow', function () {\n      return this.get('isProviderTableShow');\n    }),\n    // be able to adjust from selected rows\n    releaseRoutes: (0, _emberConcurrency.task)(function* () {\n      const schedule = this.get('currentSchedule');\n      const notifications = this.get('notifications');\n      const workspace = this.get('workspace');\n\n      try {\n        workspace.set('reoptimizeInProgress', true);\n        workspace.set('triggeredReoptimize', true);\n        const {\n          isJobSuccess,\n          results,\n          jsonData\n        } = yield this.createScheduleAsyncOperation.perform(schedule, 'export', {\n          outputResult: true\n        });\n\n        if (isJobSuccess) {\n          notifications.success('Routes successfully released.');\n          workspace.popState('reoptimize');\n        } else {\n          const failedTripProviders = JSON.parse(results);\n          const relationships = jsonData.relationships;\n          this.set('failedScheduleId', relationships.schedule.data.id);\n          this.set('failedTripProviders', failedTripProviders.failedTripCounts);\n          notifications.warning('Routes failed to release.');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          // re-throw the non-cancelation error\n          notifications.warning('Routes failed to release.');\n          throw e;\n        }\n      } //after the releaseRoutes reset the  workspace operationType\n      finally {\n        workspace.set('operationType', null);\n      }\n    }).drop(),\n    actions: {\n      async onReleaseRoutesClick() {\n        const notifications = this.get('notifications');\n        const tooltip = this.get('tooltip');\n        const currentSchedule = this.get('currentSchedule');\n        const session = this.get('session');\n        const filter = `filter=and(eq(operationType,export),ne(state,rejected),eq(scheduleId,${currentSchedule.get('id')}))`;\n        const results = await this.get('ajax').request(_apiUrls.API.schedulingService.host + `/schedule-async-operation/?sort=id&${filter}`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n\n        if (results.data.length > 0) {\n          const lastResult = results.data[results.data.length - 1];\n\n          if (lastResult.attributes.state === 'success' || lastResult.attributes.state === 'in-progress') {\n            notifications.warning('Routes release is in progress. Try again later.');\n            return;\n          }\n        }\n\n        tooltip.pushConfirmation({\n          title: 'Release Routes',\n          hasOverlay: true,\n          tip: 'Are you sure you want to release the routes? Once released, the routes will be unavailable for editing in Scheduling and dispatchers will be allowed to work with the routes.',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            tooltip.reset();\n            return this.releaseRoutes.perform();\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/release-routes/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"LUSRG+M1\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"reoptimize-modal/operation-tables/release-routes-table\\\",null,[[\\\"tableRef\\\",\\\"failedTripProviders\\\",\\\"isTaskRunning\\\",\\\"isProviderTableShow\\\",\\\"failedScheduleId\\\",\\\"selectedRow\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"failedTripProviders\\\"]],[23,[\\\"isTaskRunning\\\"]],[23,[\\\"isProviderTableShow\\\"]],[23,[\\\"failedScheduleId\\\"]],[23,[\\\"selectedRow\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"release-routes button-holder\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"release-routes-button\\\"],[12,\\\"disabled\\\",[21,\\\"isTaskRunning\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReleaseRoutesClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Release\\\"],[10],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"providerTableEnable\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[\\\"driver-break-master-styles-overlay\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"reoptimize-modal/operation-tables/release-routes-provider-table\\\",null,[[\\\"failedScheduleId\\\",\\\"selectedRow\\\",\\\"isProviderTableShow\\\"],[[23,[\\\"failedScheduleId\\\"]],[23,[\\\"selectedRow\\\"]],[23,[\\\"isProviderTableShow\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/release-routes/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/remove-driver-break/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/mixins/async-schedule-operation\"], function (_exports, _emberConcurrency, _unwrapProxy, _asyncScheduleOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // Set the status of failed and success Driver break(s)\n  const SUCCESS_DRIVER_BREAK_FAILED = 'Success';\n  const REMOVE_DRIVER_BREAK_FAILED = 'Failed';\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['remove-driver-break'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // Passed In Attributes\n    title: null,\n    currentSchedule: null,\n    tableRef: null,\n    toggleDisableActions: null,\n    isTaskRunning: Ember.computed.or('removeSelectedRouteDriverBreaks.isRunning', 'hypoRemoveBreakTask.isRunning'),\n    checkedRows: Ember.computed.readOnly('tableRef.checkedRows'),\n    hasRowsSelected: Ember.computed.lt('checkedRows.length', 1),\n    disableApplyButton: Ember.computed.or('hasRowsSelected', 'isTaskRunning'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('currentAPITask', this.get('removeSelectedRouteDriverBreaks'));\n      this.hypoRemoveBreakTask.perform();\n    },\n\n    hypoRemoveBreakTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      const currentSchedule = this.get('currentSchedule');\n      const store = this.get('store');\n\n      try {\n        yield store.findAll('route-break');\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createScheduleAsyncOperation.perform(currentSchedule, 'routeRemoveBreaks', {\n          outputResult: true\n        });\n\n        if (isJobSuccess) {\n          const result = JSON.parse(results);\n          result.shortRoutes.forEach(shortRoute => {\n            const route = store.peekRecord('route', shortRoute.routeId);\n\n            if (route) {\n              route.setProperties({\n                adjustedStartTime: shortRoute.adjustedStartTime,\n                adjustedEndTime: shortRoute.adjustedEndTime\n              });\n            }\n          });\n          if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n        } else {\n          throw new Error(results);\n        }\n      } catch (e) {\n        this.get('notifications').warning('Failed to retrieve short routes');\n      }\n    }),\n\n    getRouteBreaks(routes) {\n      return routes.reduce((acu, route) => {\n        const breaks = route.get('routeBreaks') ? route.get('routeBreaks').toArray() : [];\n        acu.push(...breaks);\n        return acu;\n      }, []);\n    },\n\n    /**\n     *remove route-breaks to a selected routes\n     *\n     */\n    removeSelectedRouteDriverBreaks: (0, _emberConcurrency.task)(function* (routes) {\n      const tableRef = this.get('tableRef');\n      const currentSchedule = this.get('currentSchedule');\n      const routeBreaks = this.getRouteBreaks(routes);\n      let successRoueBreaksCount = 0;\n      let failedRouteBreaksCount = 0;\n      yield routeBreaks.reduce(async (previousPromise, driverBreak) => {\n        const routeBreakId = Number(driverBreak.get('id'));\n        const operationData = {\n          routeBreakId\n        };\n        const options = {\n          operationData,\n          outputResult: true\n        };\n\n        try {\n          const {\n            isJobSuccess\n          } = await this.createScheduleAsyncOperation.perform(currentSchedule, 'cancelRouteBreak', options);\n\n          if (!isJobSuccess) {\n            throw new Error();\n          } else {\n            // Check the status of successfully deleting Route break(s)\n            ++successRoueBreaksCount;\n            const route = (0, _unwrapProxy.unwrapProxy)(driverBreak.route);\n            route.set('result', SUCCESS_DRIVER_BREAK_FAILED);\n            return Promise.resolve();\n          }\n        } catch (e) {\n          // Check the status of failed delete Route break(s)\n          ++failedRouteBreaksCount;\n          const route = (0, _unwrapProxy.unwrapProxy)(driverBreak.route);\n          route.set('result', REMOVE_DRIVER_BREAK_FAILED);\n          return Promise.reject();\n        }\n      }, Promise.resolve()).then(() => {\n        this.get('notifications').success(`${successRoueBreaksCount} Driver Breaks Removed Successfully`);\n      }).catch(() => {\n        this.get('notifications').warning(`${failedRouteBreaksCount} Failed to remove Driver breaks`);\n      }).finally(() => {\n        routes.filter(r => r.result === 'Success').forEach(route => route.set('isDriverBreakRemoved', true));\n        tableRef.onUncheckAll();\n      });\n    }).drop(),\n    actions: {\n      onRemoveClick() {\n        const routes = this.get('checkedRows') || [];\n        this.removeSelectedRouteDriverBreaks.perform(routes);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/remove-driver-break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XpwrLpwX\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"reoptimize-modal/operation-tables/remove-driver-break-table\\\",null,[[\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"remove-driver-break button-holder\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"remove-driver-break-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableApplyButton\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Remove\\\"],[10],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/remove-driver-break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const UNASSIGNED_PROVIDER = 'UNASSIGNED';\n\n  var _default = Ember.Component.extend({\n    classNames: ['reoptimize-options'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    // Passed In Attributes\n    title: 'Reoptimize Options',\n    currentSchedule: null,\n    selectedVal: null,\n    conditionalReoptDisabled: Ember.computed.equal('currentSchedule.status', 'unscheduled'),\n    isWaitlistedGenerate: Ember.computed.equal('selectedVal', 'waitlist'),\n    selectedProvider: Ember.computed.readOnly('providerTableRef.table.selectedRows.firstObject.content'),\n    providersList: Ember.computed.alias('workspaceContext.providersList'),\n    isAttemptToWaitlistEnabled: Ember.computed('currentSchedule.isGenerated', function () {\n      return this.get('currentSchedule.isGenerated');\n    }),\n    allProvidersList: Ember.computed('workspaceContext.providersList', function () {\n      const providersList = this.get('workspaceContext.providersList');\n      const allList = [{\n        id: 'all',\n        display: 'All Providers'\n      }];\n      providersList.forEach(provider => {\n        if (provider.get('id') !== UNASSIGNED_PROVIDER) {\n          allList.push({\n            id: provider.get('id'),\n            display: provider.get('data.displayName')\n          });\n        }\n      });\n      return allList;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.onRadioButtonClick('reoptimize');\n    },\n\n    onRadioButtonClick(val) {\n      this.set('selectedVal', val);\n      const isWaitlistedGenerate = this.get('isWaitlistedGenerate');\n\n      if (isWaitlistedGenerate) {\n        this.get('providerTableRef.selectFirstRowTask').perform();\n      }\n    },\n\n    //to check the current schedule is generated(in-progess)\n    async fetchCurrentSchedule(currentSchedule) {\n      const store = this.get('store');\n      const workspace = this.get('workspace');\n      const schedules = await store.query('schedule', {\n        filter: `eq(id,${currentSchedule.get('id')})`\n      });\n      const isGenerated = schedules.firstObject.get('isGenerated');\n\n      if (isGenerated) {\n        workspace.set('reoptimizeInProgress', true);\n      }\n\n      return isGenerated;\n    },\n\n    async onReoptimizeBtnClick() {\n      const tooltip = this.get('tooltip');\n      const workspace = this.get('workspace');\n      const date = (0, _moment.default)(workspace.startDate).format(_environment.default.dateTimeFormat.dateMoment);\n      const currentSchedule = this.get('currentSchedule');\n      const selectedVal = this.get('selectedVal');\n      const selectedProvider = this.get('selectedProvider');\n      const tip = selectedProvider.id === 'all' ? `Are you sure you want to Optimize the schedule for ${date}?` : `Are you sure you want to optimize ${selectedProvider.display}'s routes for ${date}?`;\n\n      if (await this.fetchCurrentSchedule(currentSchedule)) {\n        return;\n      }\n\n      tooltip.pushConfirmation({\n        title: 'Reoptimization',\n        hasOverlay: true,\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          if (await this.fetchCurrentSchedule(currentSchedule)) {\n            return;\n          }\n\n          workspace.popState('reoptimize');\n          workspace.pushState('schedule-generate', {\n            currentSchedule,\n            radioValue: selectedVal,\n            provider: selectedProvider.id\n          });\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    actions: {\n      onXButtonClick() {\n        this.get('workspace').popState('reoptimize');\n      },\n\n      onRadioButtonClick(val) {\n        this.onRadioButtonClick(val);\n      },\n\n      onReoptimizeClick() {\n        this.onReoptimizeBtnClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/table/provider/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/table/provider/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['reoptimize-providers-table'],\n    config: _config.default,\n    paginationEnabled: false,\n    showTableHeaderRow: false,\n    showSelectedRowLength: false,\n    showTableActions: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query() {\n      return this.get('allProvidersList');\n    },\n\n    actions: {\n      onRowClick(row) {\n        const isWaitlistedGenerate = this.get('isWaitlistedGenerate');\n        if (isWaitlistedGenerate) return;\n\n        this._super(row);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/table/provider/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'provider',\n    title: 'Select Provider',\n    tooltipTitle: 'Select Provider',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'provider',\n      index: 1,\n      type: 'string',\n      label: 'Provider Name',\n      valuePath: 'display',\n      defaultWidth: 270,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"M3tV0f4W\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"body-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h3\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n  \\\"],[1,[27,\\\"reoptimize-modal/operation-views/reoptimize/table/provider\\\",null,[[\\\"isSearchAllowed\\\",\\\"disableDeleteBtn\\\",\\\"disableAdditionalBtn\\\",\\\"tableRef\\\",\\\"allProvidersList\\\",\\\"isTaskRunning\\\",\\\"isWaitlistedGenerate\\\",\\\"disabled\\\"],[false,true,true,[23,[\\\"providerTableRef\\\"]],[23,[\\\"allProvidersList\\\"]],[23,[\\\"isTaskRunning\\\"]],[23,[\\\"isWaitlistedGenerate\\\"]],[23,[\\\"conditionalReoptDisabled\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"inputs\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"reoptimize\\\",[23,[\\\"selectedVal\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"reoptimize\\\"],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Reoptimize\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"disabled\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"waitlist\\\",[23,[\\\"selectedVal\\\"]],[23,[\\\"isAttemptToWaitlistEnabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"waitlist\\\"],null],\\\"radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Schedule All Waitlist Trips\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"button-holder\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"conditionalReoptDisabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[9],[0,\\\"In order to reoptimize a specific provider, you must first reoptimize all providers.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"reoptimize-start-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReoptimizeClick\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[7,\\\"span\\\"],[9],[0,\\\"Start\\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/reoptimize/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/trim-slack/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/mixins/async-schedule-operation\"], function (_exports, _emberConcurrency, _moment, _asyncScheduleOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['trim-slack'],\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    isTaskRunning: Ember.computed.or('hypoTrimSlackTask.isRunning', 'applyTrimSlack.isRunning'),\n    // Passed In Attributes\n    title: null,\n    currentSchedule: null,\n    tableRef: null,\n    checkedRows: Ember.computed.alias('tableRef.checkedRows'),\n    hasRowsSelected: Ember.computed.lt('checkedRows.length', 1),\n    disableApplyButton: Ember.computed.or('hasRowsSelected', 'isTaskRunning'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('currentAPITask', this.get('applyTrimSlack'));\n      this.hypoTrimSlackTask.perform();\n    },\n\n    hypoTrimSlackTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      const currentSchedule = this.get('currentSchedule');\n      let response;\n\n      try {\n        const options = {\n          outputResult: true\n        };\n        response = yield this.createScheduleAsyncOperation.perform(currentSchedule, 'routeTrimSlack', options);\n        const {\n          isJobSuccess,\n          results\n        } = response;\n\n        if (isJobSuccess) {\n          const {\n            deductData\n          } = JSON.parse(results);\n          if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n          deductData.forEach(trim => {\n            const route = this.store.peekRecord('route', trim.routeId);\n\n            if (route) {\n              route.setProperties({\n                adjustedEndTime: trim.adjustedEndTime,\n                adjustedStartTime: trim.adjustedStartTime\n              });\n            }\n          });\n        } else {\n          this.get('notifications').warning('Failed to retrieve adjusted start and end times');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          this.get('notifications').warning('Failed to retrieve adjusted start and end times');\n          throw e;\n        }\n      }\n\n      return Promise.resolve(response);\n    }),\n    // be able to trim slack from selected rows\n    // In backend, for Trimslack action we need to create activity logs.\n    // Inorder to differentiate trim-slack actions from other, here we are passing 'trimSlack' as param to updateScheduleRoute\n    applyTrimSlack: (0, _emberConcurrency.task)(function* (routes) {\n      const tableRef = this.get('tableRef');\n      routes.forEach(route => {\n        const adjustedStartTime = (0, _moment.default)(route.get('adjustedStartTime')).toDate();\n        const adjustedEndTime = (0, _moment.default)(route.get('adjustedEndTime')).toDate();\n\n        if (typeof route.affinities === 'string') {\n          route.set('affinities', JSON.parse(route.get('affinities')));\n        }\n\n        if (adjustedStartTime && adjustedEndTime) {\n          route.set('plannedStartTime', adjustedStartTime);\n          route.set('plannedEndTime', adjustedEndTime);\n        }\n      });\n      let failureRoutes = 0;\n      const routeAdapter = this.store.adapterFor('route');\n      const actionType = 'trimSlack';\n\n      try {\n        yield routes.reduce(async (acu, route) => {\n          return acu.then(() => routeAdapter.updateScheduleRoute(route, actionType).then(() => route.set('isTrimmed', true)).catch(() => {\n            route.rollbackAttributes();\n            route.set('result', 'Failed');\n            failureRoutes++;\n          }));\n        }, Promise.resolve());\n      } catch (e) {\n        failureRoutes++;\n      }\n\n      if (failureRoutes) {\n        this.get('notifications').warning('Failed to trim slack');\n      } else {\n        this.get('notifications').success('Slack Successfully trimmed');\n      }\n\n      tableRef.refreshData(); // Trim slack route removed or failed re-fetch  the records\n\n      tableRef.onUncheckAll();\n    }).drop(),\n    actions: {\n      onTrimSlackClick() {\n        const routes = this.get('checkedRows');\n        this.applyTrimSlack.perform(routes); // log activity\n\n        const activityLogAdapter = this.get('store').adapterFor('activity-log');\n        const userInfo = {\n          content: {\n            details: 'Trimmed slack from routes as part of scheduling.',\n            activity: 'Trim Slack',\n            actualTime: (0, _moment.default)().toDate(),\n            type: 'genericLogging',\n            userId: this.session.data.authenticated.userId\n          }\n        };\n        activityLogAdapter.createUserRouteActivity(userInfo);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/operation-views/trim-slack/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"5tg0aQw7\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"reoptimize-modal/operation-tables/trim-slack-table\\\",null,[[\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trim-slack button-holder\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"trim-slack-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableApplyButton\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTrimSlackClick\\\"],null]],[9],[7,\\\"span\\\"],[9],[0,\\\"Trim\\\"],[10],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/operation-views/trim-slack/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reoptimize-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qEkC6ebr\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"disableXButtonClick\\\",\\\"isLoading\\\"],[\\\"Reoptimization\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null],[23,[\\\"disableActions\\\"]],false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reoptimize-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[2,\\\" operation list \\\"],[0,\\\"\\\\n    \\\"],[1,[27,\\\"reoptimize-modal/operation-list\\\",null,[[\\\"currentSchedule\\\",\\\"disableList\\\",\\\"onItemSelect\\\"],[[23,[\\\"currentSchedule\\\"]],[23,[\\\"disableActions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onItemSelect\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"operation-view-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"currentComponentPath\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"reoptimize-modal/operation-views/\\\",[23,[\\\"currentComponentPath\\\"]]],null]],[[\\\"currentSchedule\\\",\\\"tableRef\\\",\\\"currentAPITask\\\"],[[23,[\\\"currentSchedule\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"currentAPITask\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reoptimize-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reports-widget/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    dashboard: null,\n    widget: Ember.computed.alias('dashboard.widgets.firstObject')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reports-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1TPrM/Tr\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"report-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"maximized-widget-content\\\"],[11,\\\"style\\\",\\\"height: calc(100vh - 112px)\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"iq-widgets/reportlist-widget\\\",null,[[\\\"widget\\\"],[[23,[\\\"widget\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reports-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reset-form/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    /*eslint-disable */\n    errors: undefined,\n    success: undefined,\n    newPassword: undefined,\n    confirmPassword: undefined,\n\n    /*eslint-enable */\n    containsCaptial: Ember.computed('newPassword', function () {\n      const pass = this.get('newPassword');\n      if (!pass) return false;\n      return pass.match(/[A-Z]/);\n    }),\n    containsNumber: Ember.computed('newPassword', function () {\n      const pass = this.get('newPassword');\n      if (!pass) return false;\n      return pass.match(/[0-9]/);\n    }),\n    containsMoreThanEight: Ember.computed.gte('newPassword.length', 8),\n    matchPassword: Ember.computed('newPassword', 'confirmPassword', function () {\n      if (!this.get('newPassword')) return false;\n      return this.get('newPassword') === this.get('confirmPassword');\n    }),\n    containsSymbol: Ember.computed('newPassword', function () {\n      const pass = this.get('newPassword');\n      if (!pass) return false;\n      return pass.match(/[~!@#$%^&*()_\\-+={};:'\"|\\\\<>,.?/]/);\n    }),\n    isValid: Ember.computed.and('containsCaptial', 'containsNumber', 'containsMoreThanEight', 'matchPassword', 'containsSymbol'),\n    actions: {\n      onSubmit(newPassword, e) {\n        e.preventDefault();\n        this.get('onSubmit')(newPassword);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/reset-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ZB+pyb7z\",\n    \"block\": \"{\\\"symbols\\\":[\\\"error\\\"],\\\"statements\\\":[[7,\\\"form\\\"],[12,\\\"onsubmit\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSubmit\\\",[23,[\\\"newPassword\\\"]]],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    New Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"newPassword\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"newPassword\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n    Confirm Password\\\\n    \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"confirmPassword\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"confirmPassword\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"password\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"li\\\"],[9],[1,[22,1,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"success\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"success\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[1,[21,\\\"success\\\"],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isValid\\\"]]],null]],[11,\\\"type\\\",\\\"submit\\\"],[9],[0,\\\"\\\\n    Confirm\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"validation-container\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"validation-list\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsCaptial\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[9],[10],[0,\\\"Password contains at least 1 capital letter\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsSymbol\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[9],[10],[0,\\\"Password contains at least 1 symbol ([~!@#$%^&*()_-+={};:'\\\\\\\"|<>,.?/])\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsNumber\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[9],[10],[0,\\\"Password contains at least 1 number\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsMoreThanEight\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[9],[10],[0,\\\"Password contains at least 6 characters\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"matchPassword\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[9],[10],[0,\\\"Two password entries match\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/reset-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/activity-log/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/activity-log/table/config\", \"lodash\"], function (_exports, _component, _config, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    filterEventTypeFuction: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.get('tableColumns').shift();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const filterEventTypeFuction = this.get('filterEventTypeFunction');\n      return this._super(...arguments).then(records => {\n        if (!filterEventTypeFuction) return records;\n        return records.filter(filterEventTypeFuction);\n      });\n    },\n\n    actions: {\n      onColumnClick(column) {\n        if (column.sorted) {\n          this.set('sortDirection', column.ascending ? 'asc' : 'desc');\n        }\n\n        const valuePath = column.get('valuePath');\n        const rowsToSort = (0, _lodash.orderBy)(this.get('table.rows'), row => {\n          return row.get(valuePath);\n        }, [this.get('sortDirection')]);\n        this.set('table.rows', rowsToSort);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/activity-log/table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: null,\n    modelName: 'event',\n    title: 'Activity',\n    defaultSortId: 'time',\n    defaultSortAsc: false,\n    queryModelData: true,\n    showSelectedRowLength: false,\n    columns: [{\n      id: 'activity',\n      index: 0,\n      type: 'text',\n      label: 'Activity',\n      defaultWidth: 140,\n      sortable: true,\n      valuePath: 'collectedEventLog.firstObject.activity',\n      searchable: true\n    }, {\n      id: 'time',\n      index: 1,\n      type: 'date',\n      label: 'Date / Time',\n      defaultWidth: 160,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'time',\n      searchable: true,\n      sortable: true\n    }, {\n      id: 'detail',\n      index: 2,\n      type: 'text',\n      label: 'Text',\n      defaultWidth: 800,\n      sortable: true,\n      searchable: true,\n      valuePath: 'collectedEventLog.firstObject.details'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/component\", [\"exports\", \"adept-iq/config/placeholders\", \"adept-iq/pods/components/rider-management-widget/config\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/rider-management-widget/rider-contact-information/validation\", \"moment\", \"lodash\"], function (_exports, _placeholders, _config, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _validation, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const NO_OP = () => {};\n\n  var _default = Ember.Component.extend({\n    classNames: ['rider-management-container'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    riderService: Ember.inject.service('rider'),\n    report: Ember.inject.service(),\n    isActionButtonsDisabled: false,\n    isArchivedButtonsDisabled: false,\n    isEligibilityScreenDisabled: false,\n    isArchived: false,\n    status: null,\n    id: null,\n    selectedRider: null,\n    showRiderModal: false,\n    editAPI: null,\n    options: _config.riderScreenSelectOptions,\n    selectedRiderScreen: _config.riderScreenSelectOptions.firstObject,\n    US_DATE_PLACEHOLDER: _placeholders.US_DATE_PLACEHOLDER,\n    noRiderSelected: Ember.computed('riderService.lastAccessedRiderId', function () {\n      return !Ember.isPresent(this.get('riderService.lastAccessedRiderId'));\n    }),\n    riderServiceMode: Ember.computed('riderChangeSet.{riderServiceMode,riderServiceMode.[]}', function () {\n      return this.get('riderChangeSet.riderServiceMode.lastObject');\n    }),\n    riderStatusOptions: Ember.computed('riderChangeSet.status', function () {\n      const recordStatusOptions = ['Temporary', 'Approved', 'Archived', 'Denied'];\n      const existingRiderRecordStatus = this.get('riderChangeSet.status');\n      return recordStatusOptions.filter(status => {\n        return status.toLowerCase() !== existingRiderRecordStatus;\n      });\n    }),\n\n    async init() {\n      const queryParams = this.get('_target.target.currentState.routerJsState.fullQueryParams');\n      const riderId = queryParams.riderId;\n      const viewPage = queryParams.viewPage;\n\n      this._super(...arguments);\n\n      this.setSelectedRider = this.setSelectedRider.bind(this);\n      this.setLastSelectedRider = this.setLastSelectedRider.bind(this);\n      this.resetForm = this.resetForm.bind(this);\n      this.checkEligibility = this.checkEligibility.bind(this);\n      this.showPopUpForDeniedAndArchived = this.showPopUpForDeniedAndArchived.bind(this);\n      this.showPopUpForArchived = this.showPopUpForArchived.bind(this);\n      const resetForm = this.get('resetForm');\n      this.set('editAPI', Ember.Object.create({\n        saveAction: NO_OP,\n        newAction: NO_OP,\n        deleteAction: NO_OP,\n        editAction: NO_OP,\n        undoAction: NO_OP,\n        resetForm: resetForm,\n        isNewBtnDisabled: false,\n        isEditBtnDisabled: false,\n        isDeleteBtnDisabled: false,\n        isEditing: false\n      }) // the real actions are attached in the child components\n      );\n      await this.get('riderService').getConfigRiderActivityLogTypes();\n      this.setupPageFromParams(riderId, viewPage);\n    },\n\n    async setupPageFromParams(riderId, viewPage) {\n      const store = this.get('store');\n      if (Ember.isEmpty(riderId)) return;\n      const riderRecord = await store.findRecord('rider', riderId).catch(() => {\n        return;\n      });\n      if (Ember.isEmpty(riderRecord)) return;\n      await this.setSelectedRider(riderRecord);\n      if (Ember.isEmpty(viewPage)) return;\n      this.switchViewPage(viewPage);\n    },\n\n    riderChangeSet: Ember.computed('selectedRider', function () {\n      const rider = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRider'));\n      return this.setRiderChangeSet(rider);\n    }),\n\n    setRiderChangeSet() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      let riderRecord;\n\n      if (record) {\n        riderRecord = record;\n\n        if (riderRecord.status === 'Archived') {\n          this.set('isArchived', true);\n        } else {\n          this.set('isArchived', false);\n        }\n      } else if (!riderRecord) {\n        riderRecord = store.createRecord('rider');\n        riderRecord.set('dateOfBirth', null);\n        this.set('rider', riderRecord);\n      }\n\n      return new _emberChangeset.default(riderRecord, (0, _emberChangesetValidations.default)(_validation.RIDER_VALIDATION), _validation.RIDER_VALIDATION);\n    },\n\n    updateThumbnailImage(thumbnailImage) {\n      Ember.$('#thumbnailPreview').attr('src', thumbnailImage);\n    },\n\n    async setSelectedRider(selectedRider) {\n      const riderId = selectedRider.get('id');\n      const thumbnailImage = selectedRider.get('thumbnailImage');\n      this.get('riderService').setlastAccessedRiderId(riderId);\n      await this.setLastSelectedRider(riderId);\n      this.updateThumbnailImage(thumbnailImage);\n    },\n\n    resetForm() {\n      this.set('selectedRider', null);\n    },\n\n    async setLastSelectedRider(riderId) {\n      const store = this.get('store');\n      let zoneTypes = store.peekAll('zone-type');\n\n      if (zoneTypes.length === 0) {\n        zoneTypes = await this.get('store').findAll('zone');\n      }\n\n      const riderResponse = await this.get('riderService').fetchRiderInfoById(riderId); // sometimes do not have included so make sure we won't generate an error below\n\n      riderResponse.included = riderResponse.included || [];\n      (0, _lodash.remove)(riderResponse.included, function (ele) {\n        return ele.type === 'service-need-type';\n      }); // temporary. we will get rid of rider-with-subentity\n      // endpoint does not return a proper json object\n\n      const places = riderResponse.included.filter(obj => obj.type === 'place');\n      const addresses = [];\n      const locations = [];\n      places.forEach(place => {\n        const address = place.address;\n        const location = place.location;\n        const zoneName = Ember.isPresent(address) ? address.zoneName : null;\n        const zoneType = Ember.isPresent(zoneName) ? zoneTypes.find(zone => zone.id === zoneName.id) : zoneTypes.get('firstObject');\n        place.relationships = {};\n\n        if (Ember.isPresent(address)) {\n          place.relationships.address = {\n            data: {\n              id: address.id,\n              type: 'address'\n            }\n          };\n          addresses.push({\n            id: address.id,\n            type: 'address',\n            attributes: {\n              alias: address.alias,\n              locality: address.locality,\n              postalCode: address.postalCode,\n              region: address.region,\n              streetAddress: address.streetAddress,\n              streetNumber: address.streetNumber,\n              premise: address.premise,\n              notes: address.notes,\n              subLocality: address.subLocality,\n              zName: zoneType.id\n            },\n            relationships: {\n              place: {\n                data: {\n                  id: place.id,\n                  type: 'place'\n                }\n              },\n              zoneName: {\n                data: {\n                  id: zoneType.id,\n                  type: 'zone-type'\n                }\n              }\n            }\n          });\n        }\n\n        if (Ember.isPresent(location)) {\n          place.relationships.location = {\n            data: {\n              id: location.id,\n              type: 'location'\n            }\n          };\n          locations.push({\n            id: location.id,\n            type: 'location',\n            attributes: {\n              geoNode: location.geoNode,\n              lat: location.lat,\n              lng: location.lng\n            },\n            relationships: {\n              place: {\n                data: {\n                  id: place.id,\n                  type: 'place'\n                }\n              }\n            }\n          });\n        }\n      }); // override rider-eligibilities\n\n      const riderEligibilities = riderResponse.included.filter(obj => obj.type === 'rider-eligibility');\n      riderEligibilities.forEach(riderEligibility => {\n        riderEligibility.attributes.origEligCateName = Ember.isPresent(riderEligibility.relationships.eligibilityCategoryName) ? riderEligibility.relationships.eligibilityCategoryName.data.id : null;\n        riderEligibility.attributes.origEligCondName = Ember.isPresent(riderEligibility.relationships.eligibilityConditionName) ? riderEligibility.relationships.eligibilityConditionName.data.id : null;\n      });\n      riderResponse.included.push(...addresses);\n      riderResponse.included.push(...locations);\n      store.pushPayload(riderResponse);\n      const riderRecord = store.peekRecord('rider', riderId);\n      const thumbnailImage = riderRecord.get('thumbnailImage');\n      this.updateThumbnailImage(thumbnailImage);\n      this.set('selectedRider', riderRecord);\n    },\n\n    checkEligibility(riderEligibilities, tripDate) {\n      const formattedTripDate = (0, _moment.default)(tripDate).format('YYYY/MM/DD');\n      return riderEligibilities.some(riderEligibility => {\n        const formattedFromDate = (0, _moment.default)(riderEligibility.from).format('YYYY/MM/DD');\n        const formattedToDate = (0, _moment.default)(riderEligibility.to).format('YYYY/MM/DD');\n        const eligibilityEndsAfterTripDate = (0, _moment.default)(formattedToDate).isAfter(formattedTripDate);\n        const eligibilityEndOnSameDay = (0, _moment.default)(formattedToDate).isSame(formattedTripDate);\n        const eligibilityEndsNextDay = (0, _moment.default)(formattedToDate).diff(formattedTripDate, 'days') === 1;\n        const eligibilityStartsAfterCurrentDate = (0, _moment.default)(formattedFromDate).diff(formattedTripDate, 'days') > 1;\n        return eligibilityEndsAfterTripDate || eligibilityEndOnSameDay || eligibilityEndsNextDay || eligibilityStartsAfterCurrentDate;\n      });\n    },\n\n    showPopUpForDeniedAndArchived() {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: 'Unable to change record status. Rider has eligibility that is currently active or eligibility that will be active in the future.',\n        primaryActionText: 'OK',\n\n        primaryAction() {\n          tooltip.reset();\n        }\n\n      });\n    },\n\n    showPopUpForArchived(record, valuePath, value) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: 'Are you sure you want to set the record\\'s status to Archived? This will prevent any trips from being booked for the rider and set the record to view-only.',\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          record.set(valuePath, value);\n          this.set('isArchived', true);\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    switchViewPage(page) {\n      const tooltip = this.get('tooltip');\n      const riderId = this.get('riderService').getLastAccessedRiderId();\n\n      if (!this.get('editAPI.isNewBtnDisabled') && !this.get('editAPI.isEditing') && !riderId) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Please select a valid Rider.',\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n        return false;\n      } else if (this.get('editAPI.isNewBtnDisabled') && page === 'Notifications' || this.get('editAPI.isEditing')) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'You are currently editing data. Please save or undo before proceeding.',\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n        return false;\n      }\n\n      this.set('selectedRiderScreen', page);\n      const selectedRiderScreen = this.get('selectedRiderScreen');\n\n      if (selectedRiderScreen === 'Activity Log') {\n        this.set('isActionButtonsDisabled', true);\n      } else {\n        this.set('isActionButtonsDisabled', false);\n      }\n\n      if (selectedRiderScreen === 'Eligibility') {\n        this.set('isEligibilityScreenDisabled', true);\n      } else {\n        this.set('isEligibilityScreenDisabled', false);\n      }\n\n      if (this.get('isArchived')) {\n        if (selectedRiderScreen === 'Certification' || selectedRiderScreen === 'Travel Needs' || selectedRiderScreen === 'Suspension') {\n          this.set('isArchivedButtonsDisabled', true);\n        } else {\n          this.set('isArchivedButtonsDisabled', false);\n        }\n      } else {\n        this.set('isArchivedButtonsDisabled', false);\n      }\n    },\n\n    actions: {\n      onUndoClick() {\n        const tooltip = this.get('tooltip');\n        const undoAction = this.get('editAPI.undoAction');\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to undo these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            undoAction();\n            tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      },\n\n      async onRiderSearch() {\n        const tooltip = this.get('tooltip');\n\n        if (this.get('editAPI.isNewBtnDisabled') && this.get('selectedRiderScreen') !== 'Notifications' || this.get('editAPI.isEditing')) {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: 'You are currently editing data. Please save or undo before proceeding.',\n            primaryActionText: 'OK',\n\n            primaryAction() {\n              tooltip.reset();\n            }\n\n          });\n          return false;\n        }\n\n        this.set('showRiderModal', true);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      async onRiderStatusChange(record, valuePath, value) {\n        const riderChangeSet = this.get('riderChangeSet');\n        const riderEligibilities = riderChangeSet.get('riderEligibilities').toArray();\n\n        if (value === 'Temporary' || value === 'Approved') {\n          record.set(valuePath, value.toLowerCase());\n        }\n\n        if (value === 'Denied') {\n          if (riderEligibilities.length) {\n            const riderEligibility = this.get('checkEligibility')(riderEligibilities, new Date());\n\n            if (!riderEligibility) {\n              record.set(valuePath, value.toLowerCase());\n            } else {\n              this.get('showPopUpForDeniedAndArchived')();\n            }\n          } else {\n            record.set(valuePath, value.toLowerCase());\n          }\n        }\n\n        if (value === 'Archived') {\n          if (riderEligibilities.length) {\n            const riderEligibility = this.get('checkEligibility')(riderEligibilities, new Date());\n\n            if (!riderEligibility) {\n              this.get('showPopUpForArchived')(record, valuePath, value);\n            } else {\n              this.get('showPopUpForDeniedAndArchived')();\n            }\n          } else {\n            this.get('showPopUpForArchived')(record, valuePath, value);\n          }\n        }\n      },\n\n      onNavigationChange(option) {\n        this.switchViewPage(option);\n      },\n\n      onTripHistoryReportClick() {\n        const reportService = this.get('report');\n        const riderId = this.get('selectedRider.riderId');\n        reportService.openRiderTripHistoryReportPopup(riderId);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.riderScreenSelectOptions = void 0;\n  const riderScreenSelectOptions = ['Contact Information', 'Travel Needs', 'Eligibility', 'Certification', 'Suspension', 'Funding', 'Notifications', 'Activity Log'];\n  _exports.riderScreenSelectOptions = riderScreenSelectOptions;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/config/config-object-template\"], function (_exports, _component, _config, _sorts, _configObjectTemplate) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const RiderActivityLogTypeName = _configObjectTemplate.default['config-System_Configuration-Activity_Log_Types-rider'].fields.find(field => field.fieldName === 'Name');\n\n  const UPDATE_WAIT_TIME = 30000;\n  const EVENT_RIDER_MAP = {\n    'genericLogging': true\n  };\n  const LOGGING_TYPE_MAP = {\n    'riderGeneric': true,\n    'riderNotification': true\n  };\n\n  var _default = _component.default.extend({\n    classNames: ['rms-activity-log'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    updateRecords: true,\n\n    init() {\n      this._super(...arguments);\n\n      this.addRiderActivityLog = this.addRiderActivityLog.bind(this);\n      Ember.run.later(() => this.updateActivityLogView(), UPDATE_WAIT_TIME);\n    },\n\n    willDestroyElement() {\n      this.set('updateRecords');\n\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    updateActivityLogView() {\n      if (!this.get('updateRecords')) return;\n      this.refreshTask.perform();\n      Ember.run.later(() => this.updateActivityLogView(), UPDATE_WAIT_TIME);\n    },\n\n    filterActionTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_RIDER_MAP[event.get('actionType')];\n    },\n\n    filterActivityTypeFunction(event) {\n      if (!event) return false;\n      return LOGGING_TYPE_MAP[event.loggingType];\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n      const filterActivityTypeFunction = this.get('filterActivityTypeFunction');\n      const filterActionTypeFunction = this.get('filterActionTypeFunction');\n      const riderActivityLogTypes = this.get('store').peekAll('cs-config-item').filter(csItem => csItem.get('category') === 'config-System_Configuration-Activity_Log_Types-rider');\n      const sort = this.buildSortParam();\n\n      if (sort) {\n        params.sorts.push(sort);\n      }\n\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      return this._super(...arguments).then(records => {\n        const filteredActionRecords = records.filter(record => {\n          return filterActionTypeFunction(record);\n        });\n        const collectedEventLogs = filteredActionRecords.map(filteredActionRecord => {\n          const filteredRecords = filteredActionRecord.get('collectedEventLog');\n          return filteredRecords.map(filteredRecord => {\n            const activity = riderActivityLogTypes.find(riderActivityLogType => {\n              return riderActivityLogType.name === filteredRecord.activity;\n            });\n            filteredRecord.activity = Ember.isPresent(activity) ? activity.get('value')[RiderActivityLogTypeName.displayName] : filteredRecord.activity;\n            filteredRecord.time = filteredActionRecord.get('time');\n            filteredRecord.user = filteredActionRecord.get('user');\n            filteredRecord.createdAt = filteredActionRecord.get('createdAt');\n            return filteredRecord;\n          });\n        }).flat(Infinity);\n        return collectedEventLogs.filter(filterActivityTypeFunction).sort(compareFn);\n      });\n    },\n\n    addRiderActivityLog() {\n      this.set('canShowActivityLogFormModal', true);\n    },\n\n    actions: {\n      onPlusIconClick() {\n        this.get('addRiderActivityLog')();\n      },\n\n      onColumnClick(column) {\n        this.set('state', {\n          sortAsc: column.ascending,\n          sortId: column.get('id')\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    // component: 'rider-management-widget/rider-activity-log',\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: null,\n    modelName: 'event',\n    title: 'Activity Log',\n    defaultSortId: 'time',\n    defaultSortAsc: false,\n    queryModelData: true,\n    showSelectedRowLength: false,\n    hideCheckBox: true,\n    columns: [{\n      id: 'activity',\n      index: 0,\n      type: 'text',\n      label: 'Activity',\n      defaultWidth: 180,\n      sortable: true,\n      valuePath: 'activity',\n      searchable: true\n    }, {\n      id: 'time',\n      index: 1,\n      type: 'date',\n      label: 'Activity Time',\n      defaultWidth: 160,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'time',\n      searchable: true,\n      sortable: true\n    }, {\n      id: 'createdAt',\n      index: 2,\n      type: 'date',\n      label: 'Log Time',\n      defaultWidth: 160,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      valuePath: 'createdAt',\n      searchable: true,\n      sortable: true\n    }, {\n      id: 'detail',\n      index: 3,\n      type: 'text',\n      label: 'Details',\n      defaultWidth: 800,\n      sortable: true,\n      searchable: true,\n      valuePath: 'details'\n    }, {\n      id: 'user',\n      index: 4,\n      type: 'text',\n      label: 'User',\n      defaultWidth: 160,\n      sortable: true,\n      searchable: true,\n      valuePath: 'user.fullName'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VqLkMcnJ\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 p-0\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlusIconClick\\\"],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],true,[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/template.hbs' @ L30:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n        \\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/template.hbs' @ L42:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/template.hbs' @ L49:C11) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-activity-log/activity-log-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    canShowActivityLogFormModal: false,\n    riderId: null,\n    tableRef: null,\n\n    init() {\n      this._super(...arguments);\n\n      const editAPI = this.get('editAPI');\n      const id = this.get('riderChangeSet.id');\n      this.set('riderId', id);\n      this.set('activityQueryParams', {\n        riderId: `${id}`,\n        eventLog: true\n      });\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          newAction: null,\n          deleteAction: null,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: true,\n          isDeleteBtnDisabled: true,\n          isEditing: false\n        });\n      });\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      if (tableRef) yield Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      Ember.$('.vertical-collection').scrollTop(0);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/component\", [\"exports\", \"adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/config\"], function (_exports, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['rider-activity-log-form'],\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    config: _config.default,\n    details: null,\n    userActivitySelected: null,\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    validateRecords() {\n      let valid = true;\n      const notifications = this.get('notifications');\n      const activity = this.get('userActivitySelected');\n      const details = this.get('details');\n\n      if (Ember.isEmpty(activity)) {\n        valid = false;\n        notifications.warning('Must Select an Activity');\n      }\n\n      if (Ember.isEmpty(details)) {\n        notifications.warning('Must Enter Details');\n        valid = false;\n      }\n\n      return valid;\n    },\n\n    actions: {\n      closeContactInfoDialog() {\n        this.set('canShowActivityLogFormModal', false);\n      },\n\n      onValueChange(valuePath, options) {\n        let value = options;\n\n        if (typeof options === 'object') {\n          value = options.get('name');\n        }\n\n        this.set(valuePath, value);\n      },\n\n      onTick() {\n        if (!this.validateRecords()) return;\n        const activity = this.get('userActivitySelected');\n        const details = this.get('details');\n        const tooltip = this.get('tooltip');\n        const title = 'Activity Log';\n        const riderId = this.get('riderId');\n        const notifications = this.get('notifications');\n        const self = this;\n        const actions = [{\n          activity,\n          loggingType: 'riderGeneric',\n          details\n        }];\n        this.set('canShowActivityLogFormModal', false);\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          secondaryActionText: 'Cancel',\n          primaryAction: () => {\n            const activityLogAdapter = self.get('store').adapterFor('activity-log');\n            const createBookingActivity = activityLogAdapter.createGenericRiderActivity(riderId, actions);\n            return createBookingActivity.then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              self.refreshTask.perform();\n            }).catch(() => {\n              notifications.warning('Failed to add Activity Log');\n              tooltip.reset();\n            });\n          },\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = void 0;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'trip-activity-log-type',\n        optionSearchPath: 'displayName',\n        optionConfigCategoryName: 'config-System_Configuration-Activity_Log_Types-rider'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"kcHlG3Mt\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"activity-log-detail-overlay\\\",\\\"activity-log-detail-container\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-activity-log-detail-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-activity-log-detail-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-activity-log-title\\\"],[9],[0,\\\"Activity Log\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"actions\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTick\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"isContactInfoEdit\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeContactInfoDialog\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-activity-log-detail-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\",\\\"onConfirm\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null],[27,\\\"perform\\\",[[23,[\\\"refreshTask\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-activity-log/rider-log-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"OicwHdnd\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 p-0\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"activity-table\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"rider-management-widget/rider-activity-log/activity-log-table\\\",null,[[\\\"tableRef\\\",\\\"OnTableRowClick\\\",\\\"queryParams\\\",\\\"canShowActivityLogFormModal\\\",\\\"refreshTask\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"OnTableRowClick\\\"]],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"canShowActivityLogFormModal\\\"]],[23,[\\\"refreshTask\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowActivityLogFormModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"rider-management-widget/rider-activity-log/rider-log-form\\\",null,[[\\\"elementId\\\",\\\"canShowActivityLogFormModal\\\",\\\"riderContactRecord\\\",\\\"isContactInfoEdit\\\",\\\"onRiderContactsSave\\\",\\\"riderId\\\",\\\"tableRef\\\",\\\"refreshTask\\\"],[\\\"rider-log-form\\\",[23,[\\\"canShowActivityLogFormModal\\\"]],[23,[\\\"riderContactRecord\\\"]],[23,[\\\"isContactInfoEdit\\\"]],[23,[\\\"onRiderContactsSave\\\"]],[23,[\\\"riderId\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"refreshTask\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/appeal-process/component\", [\"exports\", \"adept-iq/config/placeholders\"], function (_exports, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    appealedDate: Ember.computed('riderCertificationRecord.appealedDate', function () {\n      const appealDate = this.get('riderCertificationRecord.appealedDate');\n      return appealDate ? appealDate : null;\n    }),\n    appealHearingDate: Ember.computed('riderCertificationRecord.appealHearingDate', function () {\n      const appealHearingDate = this.get('riderCertificationRecord.appealHearingDate');\n      return appealHearingDate ? appealHearingDate : null;\n    }),\n    appealDecisionDate: Ember.computed('riderCertificationRecord.appealDecisionDate', function () {\n      const appealDecisionDate = this.get('riderCertificationRecord.appealDecisionDate');\n      return appealDecisionDate ? appealDecisionDate : null;\n    }),\n    actions: {\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onPhoneValueChange(record, maskObj) {\n        // match[0] = area code\n        // match[1] = first part of 3 digit phone number\n        // match[2] = second part of 4 digit phone number\n        const match = maskObj.masked.replace(/_/, '').split('-');\n        const setPhoneNumber = record;\n        setPhoneNumber.set('appealPhone', match[0] + match[1] + match[2]);\n        setPhoneNumber.set('appealPhone', maskObj.unmasked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/appeal-process/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qRaNjNtS\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-certification-form-grid-div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Appeal Process\\\"],[10],[0,\\\"\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Appealed Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n\\\\n           \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"appealedDate\\\"],null],[23,[\\\"appealedDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Appeal Hearing Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n\\\\n         \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"appealHearingDate\\\"],null],[23,[\\\"appealHearingDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Appeal Decision Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"appealDecisionDate\\\"],null],[23,[\\\"appealDecisionDate\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Appeal Notes\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 appeal-process-textarea\\\"],[9],[0,\\\"\\\\n           \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"rows\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"showHint\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"6\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[23,[\\\"placeholder\\\"]],[23,[\\\"maxLength\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"appealNotes\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"appealNotes\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Appeal Location\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"appealLocation\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"appealLocation\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Phone\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]]],null],[23,[\\\"riderCertificationRecord\\\",\\\"appealPhone\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/appeal-process/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/approval-process/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['rider-reasonDenied-options-select'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    certificationDeniedReasons: null,\n    CertificationDeniedReasonOptions: null,\n\n    async init() {\n      this._super(...arguments);\n\n      const certificationDeniedReasons = await this.get('rider').getConfigCertificationDeniedReasons();\n      const CertificationDeniedReasonOptions = certificationDeniedReasons.map(Cdn => {\n        return {\n          displayName: Cdn.get('value.displayName'),\n          name: Cdn.get('name')\n        };\n      });\n      this.setProperties({\n        CertificationDeniedReasonOptions\n      });\n    },\n\n    approvedDate: Ember.computed('riderCertificationRecord.approvedDate', function () {\n      const approvedDate = this.get('riderCertificationRecord.approvedDate');\n      return approvedDate ? approvedDate : null;\n    }),\n    deniedDate: Ember.computed('riderCertificationRecord.deniedDate', function () {\n      const deniedDate = this.get('riderCertificationRecord.deniedDate');\n      return deniedDate ? deniedDate : null;\n    }),\n    selectedReasonDeniedObject: Ember.computed('riderCertificationRecord.reasonDenied', function () {\n      const CertificationDeniedReasonOptions = this.get('CertificationDeniedReasonOptions');\n      const reasonDenied = this.get('riderCertificationRecord.reasonDenied');\n      if (Ember.isEmpty(CertificationDeniedReasonOptions)) return null;\n      return CertificationDeniedReasonOptions.find(option => {\n        return option.name === reasonDenied;\n      });\n    }),\n    actions: {\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onRiderReasonDeniedChange(record, value) {\n        record.set('reasonDenied', value.name);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/approval-process/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"2e9lvx/6\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-certification-form-grid-div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Approval Process\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Approved Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"approvedDate\\\"],null],[23,[\\\"approvedDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Denied Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n             \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"deniedDate\\\"],null],[23,[\\\"deniedDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Denied By\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"deniedBy\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"deniedBy\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n   \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Reason Denied\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"selectedReasonDeniedObject\\\"]],[23,[\\\"CertificationDeniedReasonOptions\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onRiderReasonDeniedChange\\\",[23,[\\\"riderCertificationRecord\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n   \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-0 mt-2\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Approved/Denied comments\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0 notes rider-certification-form-border\\\"],[9],[0,\\\"\\\\n             \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"rows\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"showHint\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"6\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[23,[\\\"placeholder\\\"]],[23,[\\\"maxLength\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"approvalComments\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"approvalComments\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/approval-process/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/certification-process/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    init() {\n      this._super(...arguments);\n    },\n\n    appSentDate: Ember.computed('riderCertificationRecord.appSentDate', function () {\n      const appSentDate = this.get('riderCertificationRecord.appSentDate');\n      return appSentDate ? appSentDate : null;\n    }),\n    appReceivedDate: Ember.computed('riderCertificationRecord.appReceivedDate', function () {\n      const appReceivedDate = this.get('riderCertificationRecord.appReceivedDate');\n      return appReceivedDate ? appReceivedDate : null;\n    }),\n    sentToMDDate: Ember.computed('riderCertificationRecord.sentToMDDate', function () {\n      const sentToMDDate = this.get('riderCertificationRecord.sentToMDDate');\n      return sentToMDDate ? sentToMDDate : null;\n    }),\n    receivedFromMDDate: Ember.computed('riderCertificationRecord.receivedFromMDDate', function () {\n      const receivedFromMDDate = this.get('riderCertificationRecord.receivedFromMDDate');\n      return receivedFromMDDate ? receivedFromMDDate : null;\n    }),\n    actions: {\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/certification-process/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"41cBmhXk\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-certification-form-grid-div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Certification Process\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-7 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Application Sent Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n\\\\n                 \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"appSentDate\\\"],null],[23,[\\\"appSentDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-7 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Application Received Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"appReceivedDate\\\"],null],[23,[\\\"appReceivedDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-7 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Sent to MD Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n         \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"sentToMDDate\\\"],null],[23,[\\\"sentToMDDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-7 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Received from MD Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]],\\\"receivedFromMDDate\\\"],null],[23,[\\\"receivedFromMDDate\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/certification-process/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    rider: Ember.inject.service(),\n    recordSetter: Ember.observer('riderId', async function () {\n      const filteredData = await this.getRiderCertifications('rider-certification');\n      this.set('records', filteredData);\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async getRiderCertifications(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let activeData = store.peekAll(modelName) || [];\n      activeData = activeData.filter(certification => certification.get('rider.id') === this.get('riderId'));\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const filteredData = await this.getRiderCertifications(modelName, params);\n      return filteredData;\n    },\n\n    actions: {\n      onRowClick(currentRow, event) {\n        this._super(currentRow, event);\n\n        this.get('OnTableRowClick')(currentRow);\n        this.get('rider').setLastAccessedCertificationId(currentRow.get('id'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/certification-table',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider-certification',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    fetchModelData: true,\n    title: 'Certification',\n    columns: [{\n      id: 'appSentDate',\n      index: 0,\n      type: 'date',\n      label: 'App Sent Date',\n      valuePath: 'appSentDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'appReceivedDate',\n      index: 1,\n      type: 'date',\n      label: 'App Received Date',\n      valuePath: 'appReceivedDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'sentToMDDate',\n      index: 2,\n      type: 'date',\n      label: 'Sent To MD Date',\n      valuePath: 'sentToMDDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'receivedFromMDDate',\n      index: 3,\n      type: 'date',\n      label: 'Received From MD Date',\n      valuePath: 'receivedFromMDDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'assessmentDate',\n      index: 16,\n      type: 'date',\n      label: 'Assmt. Date',\n      valuePath: 'assessmentDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'assessmentHearingDate',\n      index: 17,\n      type: 'date',\n      label: 'Assmt. Hearing Date',\n      valuePath: 'assessmentHearingDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'assessmentDecisionDate',\n      index: 18,\n      type: 'date',\n      label: 'Assmt. Decision Date',\n      valuePath: 'assessmentDecisionDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'approvedDate',\n      index: 10,\n      type: 'date',\n      label: 'Approved Date',\n      valuePath: 'approvedDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'deniedDate',\n      index: 11,\n      type: 'date',\n      label: 'Denied Date',\n      valuePath: 'deniedDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'appealedDate',\n      index: 4,\n      type: 'date',\n      label: 'Appealed Date',\n      valuePath: 'appealedDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'appealHearingDate',\n      index: 5,\n      type: 'date',\n      label: 'Appeal Hearing Date',\n      valuePath: 'appealHearingDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'appealDecisionDate',\n      index: 6,\n      type: 'date',\n      label: 'Appeal Decision Date',\n      valuePath: 'appealDecisionDate',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"/Zn0U6eJ\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h4\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"dirtyCheck\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],[23,[\\\"disableRowSelection\\\"]],[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/template.hbs' @ L22:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/template.hbs' @ L31:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/template.hbs' @ L38:C11) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/certification-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/component\", [\"exports\", \"lodash\", \"ember-concurrency\", \"adept-iq/utils/validator\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _lodash, _emberConcurrency, _validator, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    riderCertificationRecord: null,\n    tableRef: null,\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    riderId: Ember.computed.readOnly('riderChangeSet.id'),\n\n    async init() {\n      this._super(...arguments);\n\n      this.onNewRiderCertificationRecord = this.onNewRiderCertificationRecord.bind(this);\n      this.createRiderCertificationRecord = this.createRiderCertificationRecord.bind(this);\n      this.onDeleteRiderCertificationRecord = this.onDeleteRiderCertificationRecord.bind(this);\n      this.onEditRiderCertificationRecord = this.onEditRiderCertificationRecord.bind(this);\n      this.onUndoRiderCertificationRecord = this.onUndoRiderCertificationRecord.bind(this);\n      this.OnTableRowClick = this.OnTableRowClick.bind(this);\n      const editAPI = this.get('editAPI');\n      const onNewRiderCertificationRecord = this.get('onNewRiderCertificationRecord');\n      const onSaveRiderCertificationsRecord = this.get('onSaveRiderCertificationsRecord');\n      const onDeleteRiderCertificationRecord = this.get('onDeleteRiderCertificationRecord');\n      const onEditRiderCertificationRecord = this.get('onEditRiderCertificationRecord');\n      const onUndoRiderCertificationRecord = this.get('onUndoRiderCertificationRecord');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderCertificationsRecord,\n          newAction: onNewRiderCertificationRecord,\n          deleteAction: onDeleteRiderCertificationRecord,\n          editAction: onEditRiderCertificationRecord,\n          undoAction: onUndoRiderCertificationRecord,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: true,\n          isDeleteBtnDisabled: true,\n          isEditing: false\n        });\n      });\n      await this.fetchCertifications();\n    },\n\n    onNewRiderCertificationRecord() {\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n      }\n\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n      this.createRiderCertificationRecord();\n    },\n\n    OnTableRowClick(selectedRiderCertification) {\n      this.get('onUndoRiderCertificationRecord')();\n      this.set('riderCertificationRecord', (0, _unwrapProxy.unwrapProxy)(selectedRiderCertification));\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditBtnDisabled', false);\n      this.set('editAPI.isDeleteBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n    },\n\n    createRiderCertificationRecord() {\n      const riderCertificationRecord = this.get('store').createRecord('rider-certification');\n      this.set('riderCertificationRecord', riderCertificationRecord);\n    },\n\n    onEditRiderCertificationRecord() {\n      const riderCertificationRecordToEdit = this.get('tableRef.checkedRows.firstObject');\n      this.set('riderCertificationRecord', riderCertificationRecordToEdit);\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    confirmRiderCertificationDeletion(tip, riderCertificationRecord) {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          await riderCertificationRecord.destroyRecord();\n          notifications.success('Rider CERTIFICATION Successfully Deleted');\n          this.get('tableRef').refreshData();\n          this.set('editAPI.isNewBtnDisabled', false);\n          this.set('editAPI.isEditBtnDisabled', true);\n          this.set('editAPI.isDeleteBtnDisabled', true);\n          this.set('editAPI.isEditing', false);\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    onDeleteRiderCertificationRecord() {\n      const riderCertificationRecord = this.get('tableRef.checkedRows.firstObject');\n      this.set('riderCertificationRecord', riderCertificationRecord);\n      const tip = 'Are you sure you want to delete this rider certification record?';\n      this.confirmRiderCertificationDeletion(tip, riderCertificationRecord);\n    },\n\n    onUndoRiderCertificationRecord() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderCertificationRecord = this.get('riderCertificationRecord');\n      let isNewRecord = false;\n\n      if (Ember.isPresent(riderCertificationRecord)) {\n        isNewRecord = riderCertificationRecord.isNew;\n        riderCertificationRecord.rollbackAttributes();\n      }\n\n      if (isNewRecord) {\n        this.set('editAPI.isEditBtnDisabled', true);\n        this.set('editAPI.isDeleteBtnDisabled', true);\n      } else {\n        this.set('editAPI.isEditBtnDisabled', false);\n        this.set('editAPI.isDeleteBtnDisabled', false);\n      }\n\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n      riderChangeSet.rollback();\n    },\n\n    async fetchCertifications() {\n      const riderId = this.get('riderChangeSet').get('_internalModel').id;\n      const certificationQuery = `in(id,(${riderId}))&include=certifications`;\n      await this.get('store').query('rider', {\n        filter: certificationQuery\n      });\n    },\n\n    isValidAppReceivedDate(riderCertificationRecord) {\n      return !_lodash.default.isNil(riderCertificationRecord.get('appReceivedDate'));\n    },\n\n    onSaveRiderCertificationsRecord: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const riderCertificationRecord = this.get('riderCertificationRecord');\n      const isValidAppReceivedDate = yield this.isValidAppReceivedDate(riderCertificationRecord);\n      const isNewRecord = riderCertificationRecord.get('isNew');\n      const doctorEmail = riderCertificationRecord.get('doctorEmail') || '';\n      const emailValid = Ember.isEmpty(doctorEmail) || (0, _validator.isEmailValid)(doctorEmail.trim());\n\n      if (!isValidAppReceivedDate) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Application Received Date is required.',\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      } else if (!emailValid) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: `\"${doctorEmail}\" is not a valid email.`,\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      } else {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              riderCertificationRecord.set('rider', rider);\n              const cResponse = await riderCertificationRecord.save();\n              const cId = cResponse.id;\n              this.get('rider').setLastAccessedCertificationId(cId);\n              const certQuery = `in(id,(${cId}))`;\n              await this.get('store').query('rider-certification', {\n                filter: certQuery\n              });\n\n              if (this.get('editAPI.isEditing')) {\n                notifications.success('RIDER CERTIFICATION SUCCESSFULLY EDITED');\n              }\n\n              this.get('tableRef').refreshData();\n              notifications.success('RIDER CERTIFICATION SUCCESSFULLY ADDED');\n\n              if (isNewRecord) {\n                this.set('editAPI.isNewBtnDisabled', false);\n                this.set('editAPI.isEditBtnDisabled', true);\n                this.set('editAPI.isDeleteBtnDisabled', true);\n                this.set('editAPI.isEditing', false);\n              } else {\n                this.set('editAPI.isNewBtnDisabled', false);\n                this.set('editAPI.isEditBtnDisabled', false);\n                this.set('editAPI.isDeleteBtnDisabled', false);\n                this.set('editAPI.isEditing', false);\n              }\n\n              tooltip.reset();\n            } catch (e) {\n              notifications.warning('Rider Certification Record failed to save');\n              tooltip.reset();\n              console.warn(e); // eslint-disable-line\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      }\n\n      yield Promise.resolve();\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/doctor-information/component\", [\"exports\", \"adept-iq/config/placeholders\"], function (_exports, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    actions: {\n      onPhoneValueChange(record, maskObj) {\n        // match[0] = area code\n        // match[1] = first part of 3 digit phone number\n        // match[2] = second part of 4 digit phone number\n        const match = maskObj.masked.replace(/_/, '').split('-');\n        const setPhoneNumber = record;\n        setPhoneNumber.set('doctorPhone', match[0] + match[1] + match[2]);\n        setPhoneNumber.set('doctorPhone', maskObj.unmasked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/doctor-information/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qtnVfSaB\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"doctor-infomation\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"heading\\\"],[9],[0,\\\"Doctor Information\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trim-slack-panel\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pr-0 pb-0 text-right\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 col-form-label col-form-label-sm pb-0\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"doctorName\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"doctorName\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pb-0 pr-0 text-right phone-stl\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm pb-0 phone-box\\\"],[9],[0,\\\"\\\\n                      \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[23,[\\\"riderCertificationRecord\\\",\\\"doctorPhone\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]]],null]]]],false],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-1 col-form-label col-form-label-sm pb-0 pl-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Ext\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-2 col-form-label col-form-label-sm pl-0 pb-0 text-right small-phone-box\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"doctorExtension\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"doctorExtension\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pb-0 pr-0 text-right\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Email\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 col-form-label pb-0 col-form-label-sm\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"doctorEmail\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"doctorEmail\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pr-0 text-right\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 col-form-label col-form-label-sm\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"doctorAddress\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"doctorAddress\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n     \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/doctor-information/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/functional-assessment/component\", [\"exports\", \"adept-iq/config/placeholders\"], function (_exports, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    assessmentDate: Ember.computed('riderCertificationRecord.assessmentDate', function () {\n      const assessmentDate = this.get('riderCertificationRecord.assessmentDate');\n      return assessmentDate ? assessmentDate : null;\n    }),\n    assessmentHearingDate: Ember.computed('riderCertificationRecord.assessmentHearingDate', function () {\n      const assessmentHearingDate = this.get('riderCertificationRecord.assessmentHearingDate');\n      return assessmentHearingDate ? assessmentHearingDate : null;\n    }),\n    assessmentDecisionDate: Ember.computed('riderCertificationRecord.assessmentDecisionDate', function () {\n      const assessmentDecisionDate = this.get('riderCertificationRecord.assessmentDecisionDate');\n      return assessmentDecisionDate ? assessmentDecisionDate : null;\n    }),\n    actions: {\n      onPhoneValueChange(record, maskObj) {\n        // match[0] = area code\n        // match[1] = first part of 3 digit phone number\n        // match[2] = second part of 4 digit phone number\n        const match = maskObj.masked.replace(/_/, '').split('-');\n        const setPhoneNumber = record;\n        setPhoneNumber.set('assessmentPhone', match[0] + match[1] + match[2]);\n        setPhoneNumber.set('assessmentPhone', maskObj.unmasked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/functional-assessment/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"y2NX0rbx\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"function-assessment\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h4\\\"],[11,\\\"class\\\",\\\"heading\\\"],[9],[0,\\\"Functional Assessment\\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pb-0 pr-0 text-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name-info\\\"],[9],[0,\\\"Assessment Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pb-0 input-box\\\"],[9],[0,\\\"\\\\n             \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"assessmentDate\\\"]]],null]],null],[23,[\\\"assessmentDate\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pr-0 pb-0 text-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\" Assessment Hearing Date \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm input-box pb-0\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"assessmentHearingDate\\\"]]],null]],null],[23,[\\\"assessmentHearingDate\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pr-0 pb-0 text-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"Assessment-decision-date\\\"],[9],[0,\\\"Assessment Decision Date\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pb-0 input-box\\\"],[9],[0,\\\"\\\\n\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"assessmentDecisionDate\\\"]]],null]],null],[23,[\\\"assessmentDecisionDate\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pr-0 pb-0 text-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"assessment-Location\\\"],[9],[0,\\\"Assessment Location\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pb-0 input-box\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"assessmentLocation\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"assessmentLocation\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm pr-0 text-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"phone\\\"],[9],[0,\\\"Phone\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm phone-box\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"riderCertificationRecord\\\",\\\"assessmentPhone\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"riderCertificationRecord\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pr-0 m-0 text-right\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"assessment-notes\\\"],[9],[0,\\\"Assessment Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 col-form-label col-form-label-sm content-box\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"placeholder\\\",\\\"maxLength\\\"],[[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],[23,[\\\"riderCertificationRecord\\\",\\\"assessmentNotes\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"assessmentNotes\\\"]]],null]],null],false,\\\"\\\",\\\"500\\\"]]],false],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/functional-assessment/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TpDE7FN7\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 p-0\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"first-row-certication\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"rider-management-widget/rider-certification/certification-table\\\",null,[[\\\"tableRef\\\",\\\"OnTableRowClick\\\",\\\"riderId\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"OnTableRowClick\\\"]],[23,[\\\"riderId\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"first-column-first-row-certication certification-box\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-certification/certification-process\\\",null,[[\\\"riderCertificationRecord\\\",\\\"isNewBtnDisabled\\\"],[[23,[\\\"riderCertificationRecord\\\"]],[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"first-column-second-row-certication certification-box\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-certification/verification\\\",null,[[\\\"riderCertificationRecord\\\",\\\"isNewBtnDisabled\\\"],[[23,[\\\"riderCertificationRecord\\\"]],[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4 p-0\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"second-row-certication certification-box\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-certification/approval-process\\\",null,[[\\\"riderCertificationRecord\\\",\\\"isNewBtnDisabled\\\"],[[23,[\\\"riderCertificationRecord\\\"]],[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"second-row-certication certification-box\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-certification/appeal-process\\\",null,[[\\\"riderCertificationRecord\\\",\\\"isNewBtnDisabled\\\"],[[23,[\\\"riderCertificationRecord\\\"]],[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"third-row-certication certification-box\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-certification/doctor-information\\\",null,[[\\\"elementId\\\",\\\"riderCertificationRecord\\\",\\\"isNewBtnDisabled\\\"],[\\\"doctor-information\\\",[23,[\\\"riderCertificationRecord\\\"]],[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-8 pl-0\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"third-row-certication certification-box\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-certification/functional-assessment\\\",null,[[\\\"elementId\\\",\\\"riderCertificationRecord\\\",\\\"isNewBtnDisabled\\\"],[\\\"functional-assessment\\\",[23,[\\\"riderCertificationRecord\\\"]],[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/verification/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['rider-relationship-options-select'],\n    store: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    verificationMethodOptions: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        verificationMethodOptions: ['By Mail', 'By Phone', 'By Email', 'In Person']\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-certification/verification/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7BX2qK8y\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-certification-form-grid-div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Verification\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Verification Method\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderCertificationRecord\\\",\\\"verificationMethod\\\"]],[23,[\\\"verificationMethodOptions\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"verificationMethod\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n   \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group rider-certification-form-div form-group mb-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm rider-certification-form-label\\\"],[9],[0,\\\"Verified By\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0 rider-certification-form-border\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"onChange\\\",\\\"value\\\",\\\"disabled\\\"],[[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderCertificationRecord\\\",\\\"verifiedBy\\\"]]],null]],null],[23,[\\\"riderCertificationRecord\\\",\\\"verifiedBy\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-certification/verification/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/component\", [\"exports\", \"adept-iq/utils/unwrapProxy\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/rql-generators\", \"adept-iq/utils/validator\"], function (_exports, _unwrapProxy, _emberConcurrency, _lodash, _rqlGenerators, _validator) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const NON_DELETABLE_PHONETYPES = ['main'];\n  const NON_DELETABLE_ADDRESSTYPE = 'primary';\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    isImageEditing: false,\n    isPhoneNUmberEdit: false,\n    isContactInfoEdit: false,\n    canShowRiderPhoneNumberModal: false,\n    isCreateNewPhoneNumber: true,\n    canShowNewAddressModal: false,\n    isCreatingNewAddress: false,\n    canShowRiderContactFormModal: false,\n    imageURL: null,\n    riderProfileRecord: null,\n    thumbnailData: null,\n    tableRiderPhoneRef: null,\n    tableRiderAddressRef: null,\n    tableRiderContactRef: null,\n    maxDateOfBirth: null,\n    minDateOfBirth: null,\n    currentAge: Ember.computed('riderChangeSet.dateOfBirth', function () {\n      const dateOfBirth = this.get('riderChangeSet.dateOfBirth');\n      if (Ember.isBlank(dateOfBirth)) return '';\n      const dob = moment(dateOfBirth, 'YYYY-MM-DD');\n      const now = moment();\n      return now.diff(dob, 'years');\n    }),\n    riderPhoneNumbers: Ember.computed('riderChangeSet.{riderPhoneNumbers,riderPhoneNumbers.[]}', function () {\n      return this.get('riderChangeSet.riderPhoneNumbers').toArray();\n    }),\n    riderPlaces: Ember.computed('riderChangeSet.{riderPlaces,riderPlaces.[]}', function () {\n      return this.get('riderChangeSet.riderPlaces').toArray();\n    }),\n    riderContacts: Ember.computed('riderChangeSet.{riderContacts,riderContacts.[]}', function () {\n      return this.get('riderChangeSet.riderContacts').toArray();\n    }),\n    isNewOrEditing: Ember.computed('editAPI.{isNewBtnDisabled,isEditBtnDisabled}', function () {\n      return this.get('editAPI.isNewBtnDisabled') || this.get('editAPI.isEditBtnDisabled');\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.onRiderPhoneNumberSave = this.onRiderPhoneNumberSave.bind(this);\n      this.createNewPhoneNumberRecord = this.createNewPhoneNumberRecord.bind(this);\n      this.deletePhoneRecord = this.deletePhoneRecord.bind(this);\n      this.editPhoneRecord = this.editPhoneRecord.bind(this);\n      this.createNewRiderPlaceRecord = this.createNewRiderPlaceRecord.bind(this);\n      this.createRiderContactsRecord = this.createRiderContactsRecord.bind(this);\n      this.onSaveNewPlace = this.onSaveNewPlace.bind(this);\n      this.onEditRiderPlace = this.onEditRiderPlace.bind(this);\n      this.onDeleteRiderPlace = this.onDeleteRiderPlace.bind(this);\n      this.onEditRiderContact = this.onEditRiderContact.bind(this);\n      this.onDeleteRiderContact = this.onDeleteRiderContact.bind(this);\n      this.savePlaceAddressAndLocation = this.savePlaceAddressAndLocation.bind(this);\n      this.onRiderContactsSave = this.onRiderContactsSave.bind(this);\n      this.onNewRiderRecord = this.onNewRiderRecord.bind(this);\n      this.onEditRiderRecord = this.onEditRiderRecord.bind(this);\n      this.onUndoRiderRecord = this.onUndoRiderRecord.bind(this);\n      this.previewImage = this.previewImage.bind(this);\n      await this.get('rider').getConfigRiderPhoneTypes(); // get phone types\n\n      const providerType = await this.get('rider').getConfigProviderTypes();\n      const riderAgeLimit = await this.get('rider').getConfigRiderAgeLimit();\n      const riderAgeMinMaxValue = riderAgeLimit.map(ageLimit => ageLimit.get('value'));\n      const providerTypeOption = providerType.map(provider => {\n        try {\n          const valueString = provider.get('valueString');\n          const valueJson = JSON.parse(valueString);\n          const isActive = valueJson.status === 'Active';\n\n          if (isActive) {\n            return provider.get('name');\n          }\n        } catch {\n          return null;\n        }\n\n        return null;\n      }).compact();\n      this.setProperties({\n        providerTypeOption,\n        riderAgeMinMaxValue\n      });\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onSaveRiderRecord = this.get('onSaveRiderRecord');\n      const onNewRiderRecord = this.get('onNewRiderRecord');\n      const onEditRiderRecord = this.get('onEditRiderRecord');\n      const onUndoRiderRecord = this.get('onUndoRiderRecord');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderRecord,\n          newAction: onNewRiderRecord,\n          deleteAction: null,\n          editAction: onEditRiderRecord,\n          undoAction: onUndoRiderRecord,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: false,\n          isDeleteBtnDisabled: false,\n          isEditing: false\n        });\n      });\n      this.updateThumbnailImage(this.get('riderChangeSet.thumbnailImage'));\n    },\n\n    onRiderPhoneNumberSave() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderPhoneNumberRecord = this.get('riderPhoneRecord');\n      riderChangeSet.get('riderPhoneNumbers').pushObject(riderPhoneNumberRecord);\n    },\n\n    createNewPhoneNumberRecord() {\n      this.set('canShowRiderPhoneNumberModal', true);\n      const phoneNumberRecord = this.get('store').createRecord('rider-phone-number', {\n        type: ''\n      });\n      this.set('riderPhoneRecord', phoneNumberRecord);\n      this.set('isPhoneNumberEdit', false);\n      this.set('isCreateNewPhoneNumber', true);\n    },\n\n    confirmPhoneNumberDeletion(tip, phoneRecord) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          const notifications = this.get('notifications');\n          notifications.success('Rider phone number successfully deleted');\n          phoneRecord.set('isSoftDeleted', true);\n          this.get('tableRiderPhoneRef').refreshData(); //to refresh table data\n\n          return tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    confirmRiderPlaceDeletion(tip, riderPlaceRecord) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          const notifications = this.get('notifications');\n          notifications.success('RIDER ADDRESS SUCCESSFULLY DELETED');\n          riderPlaceRecord.set('isSoftDeleted', true);\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    primaryAddressDeletionWarning(tip) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Ok',\n        primaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    showMainPhoneDeleteWarning(tip) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Ok',\n        primaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    editPhoneRecord(recordToEdit) {\n      if (recordToEdit) {\n        this.set('canShowRiderPhoneNumberModal', true);\n        this.set('isPhoneNumberEdit', true);\n        this.set('isCreateNewPhoneNumber', false);\n        this.set('riderPhoneRecord', recordToEdit);\n      }\n    },\n\n    deletePhoneRecord(recordToDelete) {\n      const cannotDelete = NON_DELETABLE_PHONETYPES.includes(recordToDelete.get('type'));\n\n      if (cannotDelete) {\n        this.showMainPhoneDeleteWarning('Main Phone Number cannot be deleted.');\n      } else {\n        this.confirmPhoneNumberDeletion('Are you sure you want to delete this phone number?', recordToDelete);\n      }\n    },\n\n    createNewRiderPlaceRecord() {\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const riderPlaceRecord = this.get('store').createRecord('rider-place');\n      const placeRecord = this.get('store').createRecord('place');\n      const addressRecord = this.get('store').createRecord('address');\n      const locationRecord = this.get('store').createRecord('location');\n      const placeCategoryType = this.get('store').peekRecord('place-category-type', 'passenger');\n      const riderPlaceType = this.get('store').peekRecord('rider-place-type', 'primary');\n      placeRecord.set('location', locationRecord);\n      placeRecord.set('address', addressRecord);\n      placeRecord.set('placeCategoryType', placeCategoryType);\n      riderPlaceRecord.set('place', placeRecord);\n      riderPlaceRecord.set('riderPlaceType', riderPlaceType);\n      this.set('riderPlaceRecord', riderPlaceRecord);\n      riderPlaceRecord.set('rider', rider);\n    },\n\n    async savePlaceAddressAndLocation() {\n      const riderPlaceRecord = this.get('riderPlaceRecord');\n      const placeRecord = riderPlaceRecord.get('place');\n      const addressRecord = placeRecord.get('address');\n      const locationRecord = placeRecord.get('location');\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      await (0, _unwrapProxy.unwrapProxy)(addressRecord).save();\n      await (0, _unwrapProxy.unwrapProxy)(locationRecord).save();\n      await (0, _unwrapProxy.unwrapProxy)(placeRecord).save();\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    async updatePlaceAddressAndLocation() {\n      const riderPlaceRecord = this.get('riderPlaceRecord');\n      const placeRecord = (0, _unwrapProxy.unwrapProxy)(riderPlaceRecord.get('place'));\n      const addressRecord = (0, _unwrapProxy.unwrapProxy)(placeRecord.get('address'));\n      const locationRecord = (0, _unwrapProxy.unwrapProxy)(placeRecord.get('location'));\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      await addressRecord.save();\n      await locationRecord.save();\n      await placeRecord.save();\n      await riderPlaceRecord.save();\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    async onSaveNewPlace() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderPlaceRecord = this.get('riderPlaceRecord');\n\n      if (Ember.isBlank(riderPlaceRecord.id)) {\n        await this.get('savePlaceAddressAndLocation')();\n        riderChangeSet.get('riderPlaces').pushObject(riderPlaceRecord);\n      } else {\n        await this.get('updatePlaceAddressAndLocation').bind(this)();\n      }\n    },\n\n    onEditRiderPlace(riderPlaceRecord) {\n      if (riderPlaceRecord) {\n        this.set('isCreatingNewAddress', false);\n        this.set('canShowNewAddressModal', true);\n        const rider = riderPlaceRecord.get('rider');\n        const placeCategoryType = this.get('store').peekRecord('place-category-type', 'passenger');\n        const zoneName = riderPlaceRecord.get('place.address.zoneName');\n        const placeJSON = (0, _unwrapProxy.unwrapProxy)(riderPlaceRecord.get('place')).toJSON();\n        const addressJSON = (0, _unwrapProxy.unwrapProxy)(riderPlaceRecord.get('place.address')).toJSON();\n        const locationJSON = (0, _unwrapProxy.unwrapProxy)(riderPlaceRecord.get('place.location')).toJSON();\n        const placeRecord = this.get('store').createRecord('place', placeJSON);\n        const addressRecord = this.get('store').createRecord('address', addressJSON);\n        const locationRecord = this.get('store').createRecord('location', locationJSON);\n        addressRecord.set('zoneName', zoneName);\n        placeRecord.set('location', locationRecord);\n        placeRecord.set('address', addressRecord);\n        placeRecord.set('placeCategoryType', placeCategoryType);\n        riderPlaceRecord.set('place', placeRecord);\n        this.set('riderPlaceRecord', riderPlaceRecord);\n        riderPlaceRecord.set('rider', rider);\n      }\n    },\n\n    onDeleteRiderPlace(riderPlaceRecord) {\n      if (riderPlaceRecord.riderPlaceTypeName === NON_DELETABLE_ADDRESSTYPE) {\n        this.primaryAddressDeletionWarning('Primary Address cannot be deleted.');\n      } else {\n        const tip = 'Are you sure you want to delete this address?';\n        this.confirmRiderPlaceDeletion(tip, riderPlaceRecord);\n      }\n    },\n\n    saveRiderPhoneNumbers(riderRecord, isNew) {\n      return new Promise((resolve, reject) => {\n        const riderPhoneNumbers = this.get('riderChangeSet.riderPhoneNumbers');\n        riderPhoneNumbers.forEach(rph => rph.set('rider', riderRecord));\n        const riderPhoneNumberPromises = riderPhoneNumbers.map(riderPhoneNumber => {\n          riderPhoneNumber.set('loggingMeta');\n\n          if (riderPhoneNumber.get('isSoftDeleted')) {\n            return riderPhoneNumber.destroyRecord();\n          }\n\n          if (isNew) {\n            riderPhoneNumber.set('loggingMeta', {\n              riderCreation: isNew\n            });\n          }\n\n          return riderPhoneNumber.save();\n        });\n        Promise.all(riderPhoneNumberPromises).then(() => {\n          resolve();\n        }).catch(e => reject(e));\n      });\n    },\n\n    saveRiderPlaces(savedRider, isNew) {\n      const ridePlaces = this.get('riderChangeSet.riderPlaces');\n      ridePlaces.forEach(rph => rph.set('rider', savedRider));\n      const riderPlacesPromises = ridePlaces.map(async rph => {\n        if (rph.get('isSoftDeleted')) {\n          return rph.destroyRecord();\n        }\n\n        rph.set('loggingMeta');\n        const placeRecord = rph.get('place');\n        const addressRecord = placeRecord.get('address');\n        const locationRecord = placeRecord.get('location');\n        await (0, _unwrapProxy.unwrapProxy)(addressRecord).save();\n        await (0, _unwrapProxy.unwrapProxy)(locationRecord).save();\n        await (0, _unwrapProxy.unwrapProxy)(placeRecord).save();\n\n        if (isNew) {\n          rph.set('loggingMeta', {\n            riderCreation: isNew\n          });\n        }\n\n        return rph.save();\n      });\n      return Promise.all(riderPlacesPromises);\n    },\n\n    async saveRiderDefaultTravelNeed(savedRider, isNew) {\n      const riderDefaultTravelNeedRecord = this.get('store').createRecord('rider-travel-need', {\n        count: 1,\n        passengerType: this.store.peekRecord('passenger-type', 'client')\n      });\n      const defaultTravelNeedName = 'ambulatory';\n      const travelNeedTypeRecord = this.get('store').peekRecord('travel-need-type', defaultTravelNeedName);\n      riderDefaultTravelNeedRecord.set('travelNeedType', travelNeedTypeRecord);\n      riderDefaultTravelNeedRecord.set('loadTime', travelNeedTypeRecord.get('loadTime'));\n      riderDefaultTravelNeedRecord.set('unloadTime', travelNeedTypeRecord.get('unloadTime'));\n      riderDefaultTravelNeedRecord.set('rider', savedRider);\n      riderDefaultTravelNeedRecord.set('loggingMeta');\n\n      if (isNew) {\n        riderDefaultTravelNeedRecord.set('loggingMeta', {\n          riderCreation: isNew\n        });\n      }\n\n      return riderDefaultTravelNeedRecord.save();\n    },\n\n    onNewRiderRecord() {\n      const riderChangeSet = this.get('riderChangeSet');\n      this.get('editAPI').resetForm();\n      riderChangeSet.set('status', 'temporary');\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n      this.updateThumbnailImage('');\n    },\n\n    onEditRiderRecord() {\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n      this.set('isImageEditing', true);\n    },\n\n    createRiderContactsRecord() {\n      const riderContactRecord = this.get('store').createRecord('rider-contact-info');\n      this.set('riderContactRecord', riderContactRecord);\n      this.set('isContactInfoEdit', false);\n    },\n\n    onRiderContactsSave() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderContactRecord = this.get('riderContactRecord');\n      riderChangeSet.get('riderContacts').pushObject(riderContactRecord);\n    },\n\n    onEditRiderContact(riderContactRecord) {\n      if (riderContactRecord) {\n        this.set('canShowRiderContactFormModal', true);\n        this.set('isContactInfoEdit', true);\n        this.set('riderContactRecord', riderContactRecord);\n      }\n    },\n\n    onDeleteRiderContact(riderContactRecord) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: 'Are you sure you want to delete this contact?',\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          riderContactRecord.set('isSoftDeleted', true);\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    saveRiderContacts(savedRider, isNew) {\n      return new Promise((resolve, reject) => {\n        const riderContacts = this.get('riderChangeSet.riderContacts');\n        riderContacts.forEach(rph => rph.set('rider', savedRider));\n        const riderContactsPromises = riderContacts.map(riderContact => {\n          riderContact.set('loggingMeta');\n\n          if (riderContact.get('isSoftDeleted')) {\n            riderContact.destroyRecord();\n          } else {\n            if (isNew) {\n              riderContact.set('loggingMeta', {\n                riderCreation: isNew\n              });\n            }\n\n            riderContact.save();\n          }\n        });\n        Promise.all(riderContactsPromises).then(() => {\n          resolve();\n        }).catch(e => reject(e));\n      });\n    },\n\n    async isExitingRider() {\n      let riders;\n      const query = this.buildExistingQuery();\n      const store = this.get('store');\n      const existingRider = await store.query('rider', {\n        filter: query\n      }); // eslint-disable-next-line prefer-const\n\n      riders = existingRider.toArray();\n\n      if (riders.length) {\n        return true;\n      }\n\n      return false;\n    },\n\n    async saveRiderAndNotify() {\n      const notifications = this.get('notifications');\n      const riderChangeSet = await this.get('riderChangeSet');\n      const isNew = riderChangeSet.get('isNew');\n      const tooltip = this.get('tooltip');\n\n      try {\n        if (riderChangeSet.get('isValid')) {\n          const savedRider = await riderChangeSet.save();\n          await this.saveRiderContacts(savedRider, isNew);\n          await this.saveRiderPhoneNumbers(savedRider, isNew);\n          await this.saveRiderPlaces(savedRider, isNew);\n\n          if (isNew) {\n            await this.saveRiderDefaultTravelNeed(savedRider, isNew);\n          }\n        }\n\n        if (this.get('editAPI.isEditing')) {\n          let notificationMsg = 'Rider contact information successfully edited.';\n\n          if (isNew) {\n            notificationMsg = 'Rider record successfully added';\n            tooltip.pushConfirmation({\n              title: 'Rider Management',\n              tip: 'The rider currently has no eligibility, so no trips can be booked for this rider.',\n              primaryActionText: 'Ok',\n              primaryAction: () => {\n                return tooltip.reset();\n              }\n            });\n          } else {\n            tooltip.reset();\n          }\n\n          notifications.success(notificationMsg);\n          this.set('editAPI.isEditing', false);\n          this.set('editAPI.isNewBtnDisabled', false);\n          this.set('editAPI.isEditBtnDisabled', false);\n          this.set('editAPI.isDeleteBtnDisabled', false);\n        } else {\n          notifications.success('Rider record successfully saved');\n          this.set('editAPI.isNewBtnDisabled', false);\n          this.set('editAPI.isEditBtnDisabled', false);\n          this.set('editAPI.isDeleteBtnDisabled', false);\n        }\n\n        this.set('isImageEditing', false);\n        const rider = await riderChangeSet.get('data');\n\n        if (isNew) {\n          this.get('setSelectedRider')(rider);\n        }\n      } catch (e) {\n        notifications.warning('Rider record failed to save');\n        tooltip.reset();\n        throw e;\n      }\n    },\n\n    showRiderSaveToolTip(message) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: message,\n        primaryActionText: 'Confirm',\n        primaryAction: this.saveRiderAndNotify.bind(this),\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    onSaveRiderRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderFirstName = riderChangeSet.get('firstName') || '';\n      const riderLastName = riderChangeSet.get('lastName') || '';\n      riderChangeSet.set('firstName', riderFirstName.trim());\n      riderChangeSet.set('lastName', riderLastName.trim()); // validation\n\n      const isValidRider = yield this.validateRider.perform();\n      const isNewRecord = this.get('riderChangeSet.isNew');\n      const isExitingRiderRecord = isNewRecord ? yield this.isExitingRider() : true;\n      let saveTip = 'Are you sure you want to save these changes?'; // Only for new created contact info\n\n      if (isExitingRiderRecord && isNewRecord) {\n        saveTip = 'A record with the same name already exists. Are you sure you want to proceed with creating this record?';\n      }\n\n      if (isValidRider) {\n        try {\n          this.showRiderSaveToolTip(saveTip);\n        } catch (e) {\n          notifications.warning('Rider record failed to save');\n          console.warn(e); // eslint-disable-line\n        }\n      }\n    }),\n\n    updateThumbnailImage(thumbnailImage) {\n      if (!Ember.isNone(thumbnailImage)) {\n        Ember.$('#thumbnailPreview').attr('src', thumbnailImage);\n      }\n    },\n\n    async onUndoRiderRecord() {\n      const riderId = this.get('rider').getLastAccessedRiderId();\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderPhoneNumbers = riderChangeSet.get('riderPhoneNumbers').toArray();\n      const riderPlaces = riderChangeSet.get('riderPlaces').toArray();\n      const riderContacts = riderChangeSet.get('riderContacts').toArray();\n      riderPhoneNumbers.forEach(async riderPhoneNumber => {\n        if (Ember.isBlank(riderPhoneNumber.id)) {\n          await riderPhoneNumber.destroyRecord();\n        } else {\n          riderPhoneNumber.rollbackAttributes();\n        }\n      });\n      this.get('tableRiderPhoneRef').refreshData(); //to refresh table data\n\n      riderPlaces.forEach(async riderPlace => {\n        if (Ember.isBlank(riderPlace.id)) {\n          await riderPlace.destroyRecord();\n        } else {\n          const placeRecord = riderPlace.get('place');\n          const addressRecord = placeRecord.get('address');\n          const locationRecord = placeRecord.get('location');\n          riderPlace.rollbackAttributes();\n          (0, _unwrapProxy.unwrapProxy)(addressRecord).rollbackAttributes();\n          (0, _unwrapProxy.unwrapProxy)(locationRecord).rollbackAttributes();\n          (0, _unwrapProxy.unwrapProxy)(placeRecord).rollbackAttributes();\n        }\n      });\n      riderContacts.forEach(async riderContact => {\n        if (Ember.isBlank(riderContact.id)) {\n          await riderContact.destroyRecord();\n        } else {\n          riderContact.rollbackAttributes();\n        }\n      }); // after an api call failure, the whole form needs to be reset\n\n      if (riderChangeSet.get('isNew')) {\n        this.get('editAPI').resetForm();\n        this.set('editAPI.isNewBtnDisabled', true);\n        this.set('editAPI.isEditing', true);\n      }\n\n      riderChangeSet.rollback();\n\n      if (!Ember.isNone(riderId)) {\n        this.get('setLastSelectedRider')(riderId);\n      }\n\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditBtnDisabled', false);\n      this.set('editAPI.isDeleteBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n      this.set('isImageEditing', false);\n    },\n\n    validateChangeSet() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const errors = [];\n      const mainPhoneNumber = riderChangeSet.get('mainPhoneNumber');\n      const primaryAddresses = riderChangeSet.get('primaryAddresses');\n      const mainEmail = riderChangeSet.get('email');\n\n      if (Ember.isBlank(mainPhoneNumber)) {\n        errors.push({\n          key: 'mainPhoneNumber',\n          validation: ['Main Phone Number is required']\n        });\n      }\n\n      if (!primaryAddresses.length) {\n        errors.push({\n          key: 'primaryAddresses',\n          validation: ['Primary Address is required']\n        });\n      }\n\n      if (mainEmail && !(0, _validator.isEmailValid)(mainEmail)) {\n        errors.push({\n          key: 'email',\n          validation: ['Email is invalid']\n        });\n      }\n\n      return errors;\n    },\n\n    calculateAge(dob) {\n      if (Ember.isBlank(dob)) return null;\n      const ageDifMs = Date.now() - dob.getTime();\n      const ageDate = new Date(ageDifMs); // miliseconds from epoch\n\n      if (ageDifMs < 0) return 0;\n      return Math.abs(ageDate.getUTCFullYear() - 1970);\n    },\n\n    validateRider: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const riderChangeSet = this.get('riderChangeSet');\n      yield riderChangeSet.validate();\n      const riderValid = riderChangeSet.errors;\n      const validateChangeSetErrors = this.validateChangeSet();\n      const errors = (0, _lodash.compact)([].concat(riderValid).concat(validateChangeSetErrors));\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    }),\n\n    buildExistingQuery() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderFirstName = riderChangeSet.get('firstName');\n      const riderLastName = riderChangeSet.get('lastName');\n      const searchTerms = [];\n\n      if (!Ember.isBlank(riderFirstName)) {\n        const rqlQuery = (0, _rqlGenerators.stringIeqRQL)('firstName', [riderFirstName]);\n        searchTerms.push(rqlQuery);\n      }\n\n      if (!Ember.isBlank(riderLastName)) {\n        const rqlQuery = (0, _rqlGenerators.stringIeqRQL)('lastName', [riderLastName]);\n        searchTerms.push(rqlQuery);\n      }\n\n      const queryString = searchTerms.reduce((prev, current) => {\n        return (0, _rqlGenerators.andRQL)(current, prev);\n      });\n      return queryString;\n    },\n\n    previewImage(input) {\n      const file = input.target.files[0];\n      const fr = new FileReader();\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderId = riderChangeSet.get('id');\n\n      fr.onload = readerEvent => {\n        if (file.size > 100000) {\n          const image = new Image();\n\n          image.onload = imageEvent => {\n            // Resize the image\n            const canvas = document.createElement('canvas');\n            const maxSize = 544;\n            let width = image.width;\n            let height = image.height;\n\n            if (width > height) {\n              if (width > maxSize) {\n                height *= maxSize / width;\n                width = maxSize;\n              }\n            } else if (height > maxSize) {\n              width *= maxSize / height;\n              height = maxSize;\n            }\n\n            canvas.width = width;\n            canvas.height = height;\n            canvas.getContext('2d').drawImage(image, 0, 0, width, height);\n            const dataUrl = canvas.toDataURL('image/jpeg');\n            Ember.$('#uploadPreview').attr('src', readerEvent.target.result);\n            const imageData = dataUrl;\n            const thumbnailData = {\n              riderId: riderId,\n              image: dataUrl\n            };\n            this.set('thumbnailData', thumbnailData);\n          };\n\n          image.src = readerEvent.target.result;\n        } else {\n          Ember.$('#uploadPreview').attr('src', readerEvent.target.result);\n          const imageData = fr.result;\n          const thumbnailData = {\n            riderId: riderId,\n            image: imageData\n          };\n          this.set('thumbnailData', thumbnailData);\n        }\n      };\n\n      fr.readAsDataURL(file);\n      this.set('canShowNewImageModal', true);\n      this.set('isThumbnailEditing', false);\n      input.target.value = '';\n    },\n\n    actions: {\n      onDatePickrOpen(record, valuePath, value) {\n        const riderAgeLimit = this.get('riderAgeMinMaxValue');\n        const minimumAge = riderAgeLimit[0].minimumAge || '2';\n        const maximumAge = riderAgeLimit[0].maximumAge || '150';\n        const maxDateYearRollback = parseInt(minimumAge, 10);\n        const minDateYearRollback = parseInt(maximumAge, 10);\n        this.set('maxDateOfBirth', moment().subtract(maxDateYearRollback, 'years').format('MM-DD-YYYY'));\n        this.set('minDateOfBirth', moment().subtract(minDateYearRollback, 'years').format('MM-DD-YYYY'));\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onPowerSelectChange(valuePath, selected) {\n        this.set(valuePath, selected);\n      },\n\n      onRiderImageUpload(event) {\n        const isImageEditing = this.get('isImageEditing');\n\n        if (isImageEditing) {\n          this.get('previewImage')(event);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/component\", [\"exports\", \"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/config\", \"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/states\", \"lodash\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _config, _states, _lodash, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ADDRESS_TYPE = {\n    primary: 'primary',\n    favorite: 'favorite'\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['add-rider-phone-detail-form'],\n    workspace: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    addressConfig: _config.addressConfig,\n    states: _states.states,\n    addressTypeOptions: null,\n    stateOptions: null,\n    state: null,\n\n    async init() {\n      this._super(...arguments);\n\n      const riderPlace = this.get('riderPlaceRecord.place');\n      this.set('place', riderPlace);\n      const addressTypeOptions = this.get('store').peekAll('rider-place-type').toArray();\n\n      const stateOptions = _states.states.map(state => state.abbreviation);\n\n      this.setProperties({\n        addressTypeOptions,\n        stateOptions\n      });\n\n      if (Ember.isPresent(riderPlace.get('location.lat'))) {\n        this.get('rider').setActivePlace(riderPlace);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('setZName', this.get('setZName').bind(this));\n      this.setState = this.setState.bind(this);\n    },\n\n    async setZName(placeRecord) {\n      const addressRecord = placeRecord.get('address'); //const notificationService = this.get('notifications');\n\n      if (!Ember.isEmpty(placeRecord.get('location.lat')) && !Ember.isEmpty(placeRecord.get('location.lng'))) {\n        const geoNode = await this.get('geocode').calculateZone(placeRecord.get('location.lat'), placeRecord.get('location.lng'));\n        const zoneName = this.store.peekRecord('zone-type', geoNode.zone.zoneName);\n        addressRecord.set('zName', zoneName.get('displayName'));\n        addressRecord.set('zoneName', zoneName);\n      }\n      /* if (isInsideAvailZones && !zoneName) {\n        notificationService.warning('Unknown Address. Please enter a valid address.');\n        return;\n      }\n      if (zoneName) {\n        addressRecord.set('zName', zoneName);\n      }\n      if (!addressRecord.get('zName')) {\n        notificationService.warning('Unknown Zone. Please enter a valid address.');\n        return;\n      } */\n\n    },\n\n    setState(placeRecord, benomadAddress) {\n      const addressRecord = placeRecord.get('address');\n\n      const state = _states.states.find(s => {\n        return s.name === benomadAddress.address.state;\n      });\n\n      if (state) {\n        addressRecord.set('region', state.abbreviation);\n      }\n    },\n\n    validateRiderPrimaryAndFavoriteAddress() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderPlaceRecord = this.get('riderPlaceRecord');\n      const address = (0, _unwrapProxy.unwrapProxy)(riderPlaceRecord.get('place.address'));\n      const addressId = riderPlaceRecord.get('place.address.id');\n      const errors = [];\n      const primaryAddresses = riderChangeSet.get('primaryAddresses');\n      const favoriteAddresses = riderChangeSet.get('favoriteAddresses');\n\n      if (Ember.isEmpty(address.get('freeformAddress')) && Ember.isEmpty(address.get('streetAddress')) && Ember.isEmpty(address.get('streetNumber'))) {\n        const key = riderPlaceRecord.riderPlaceTypeName === ADDRESS_TYPE.primary ? 'primaryAddresses' : 'favoriteAddresses';\n        errors.push({\n          key: key,\n          validation: ['Address cannot be empty']\n        });\n      } else if (!addressId && riderPlaceRecord.riderPlaceTypeName === ADDRESS_TYPE.primary && primaryAddresses.length > 1) {\n        errors.push({\n          key: 'primaryAddresses',\n          validation: ['More than one Primary Address cannot be added']\n        });\n      } else if (!addressId && riderPlaceRecord.riderPlaceTypeName === ADDRESS_TYPE.favorite && favoriteAddresses.length > 20) {\n        errors.push({\n          key: 'favoriteAddresses',\n          validation: ['More than 20 Favorite Address cannot be added']\n        });\n      } else if (Ember.isEmpty(address.get('zName'))) {\n        const key = riderPlaceRecord.riderPlaceTypeName === ADDRESS_TYPE.primary ? 'primaryAddresses' : 'favoriteAddresses';\n        errors.push({\n          key: key,\n          validation: ['Unable to save address. Location falls outside configured service zone(s).']\n        });\n      }\n\n      return errors;\n    },\n\n    undoAddressChange() {\n      const riderPlaceRecord = this.get('riderPlaceRecord');\n      const isCreatingNewAddress = this.get('isCreatingNewAddress');\n\n      if (riderPlaceRecord && isCreatingNewAddress) {\n        const placeRecord = (0, _unwrapProxy.unwrapProxy)(riderPlaceRecord.get('place'));\n        const addressRecord = (0, _unwrapProxy.unwrapProxy)(placeRecord.get('address'));\n        const locationRecord = (0, _unwrapProxy.unwrapProxy)(placeRecord.get('location'));\n        riderPlaceRecord.set('rider');\n        locationRecord.deleteRecord();\n        addressRecord.deleteRecord();\n        placeRecord.deleteRecord();\n        riderPlaceRecord.deleteRecord();\n      }\n    },\n\n    actions: {\n      onTypeChange(record, option) {\n        record.set('riderPlaceType', option);\n      },\n\n      closeAddressDialog() {\n        this.undoAddressChange();\n        this.set('canShowNewAddressModal', false);\n      },\n\n      onCellValueChange(record, value, options) {\n        record.set(`${options.valuePath}`, value);\n      },\n\n      onPlaceRecordChanged(record, benomadAddress) {\n        this.setZName(record);\n        this.setState(record, benomadAddress); //Addresses component use different values for region and locality. So we are setting it here.\n\n        record.set('address.locality', benomadAddress.address.city);\n        this.get('rider').setActivePlace(record);\n      },\n\n      onPickAddress(place) {\n        this.get('rider').setActiveDragRiderPlace(place);\n      },\n\n      onTick() {\n        const tooltip = this.get('tooltip');\n        const primaryAndFavoriteAddressesErrors = this.validateRiderPrimaryAndFavoriteAddress();\n        const errors = (0, _lodash.compact)([].concat(primaryAndFavoriteAddressesErrors));\n\n        if (errors.length > 0) {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: '',\n            errors,\n            primaryActionText: 'OK',\n\n            primaryAction() {\n              tooltip.popConfirmation();\n            }\n\n          });\n          return false;\n        }\n\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            this.set('isCreatingNewAddress', false);\n            this.set('canShowNewAddressModal', false);\n            tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.addressConfig = void 0;\n  const addressConfig = {\n    valuePath: 'place',\n    modelName: 'place',\n    extra: {\n      aliasPath: 'address.content.alias',\n      notesPath: 'address.content.notes',\n      displayPath: 'address.content.address',\n      premisePath: 'address.content.premise',\n      streetNumberPath: 'address.content.streetNumber',\n      streetNamePath: 'address.content.streetName',\n      localityPath: 'address.content.locality',\n      regionPath: 'address.content.region',\n      subRegionPath: 'address.content.county',\n      postalCodePath: 'address.content.postalCode',\n      countryPath: 'address.content.country',\n      freeformAddressPath: 'address.content.freeformAddress',\n      tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.content.streetAddress',\n      locationsPath: 'address.locations.content.firstObject.latlng'\n    }\n  };\n  _exports.addressConfig = addressConfig;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/states\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.states = void 0;\n  const states = [{\n    name: 'Alabama',\n    abbreviation: 'AL'\n  }, {\n    name: 'Alaska',\n    abbreviation: 'AK'\n  }, {\n    name: 'American Samoa',\n    abbreviation: 'AS'\n  }, {\n    name: 'Arizona',\n    abbreviation: 'AZ'\n  }, {\n    name: 'Arkansas',\n    abbreviation: 'AR'\n  }, {\n    name: 'California',\n    abbreviation: 'CA'\n  }, {\n    name: 'Colorado',\n    abbreviation: 'CO'\n  }, {\n    name: 'Connecticut',\n    abbreviation: 'CT'\n  }, {\n    name: 'Delaware',\n    abbreviation: 'DE'\n  }, {\n    name: 'District Of Columbia',\n    abbreviation: 'DC'\n  }, {\n    name: 'Federated States Of Micronesia',\n    abbreviation: 'FM'\n  }, {\n    name: 'Florida',\n    abbreviation: 'FL'\n  }, {\n    name: 'Georgia',\n    abbreviation: 'GA'\n  }, {\n    name: 'Guam',\n    abbreviation: 'GU'\n  }, {\n    name: 'Hawaii',\n    abbreviation: 'HI'\n  }, {\n    name: 'Idaho',\n    abbreviation: 'ID'\n  }, {\n    name: 'Illinois',\n    abbreviation: 'IL'\n  }, {\n    name: 'Indiana',\n    abbreviation: 'IN'\n  }, {\n    name: 'Iowa',\n    abbreviation: 'IA'\n  }, {\n    name: 'Kansas',\n    abbreviation: 'KS'\n  }, {\n    name: 'Kentucky',\n    abbreviation: 'KY'\n  }, {\n    name: 'Louisiana',\n    abbreviation: 'LA'\n  }, {\n    name: 'Maine',\n    abbreviation: 'ME'\n  }, {\n    name: 'Marshall Islands',\n    abbreviation: 'MH'\n  }, {\n    name: 'Maryland',\n    abbreviation: 'MD'\n  }, {\n    name: 'Massachusetts',\n    abbreviation: 'MA'\n  }, {\n    name: 'Michigan',\n    abbreviation: 'MI'\n  }, {\n    name: 'Minnesota',\n    abbreviation: 'MN'\n  }, {\n    name: 'Mississippi',\n    abbreviation: 'MS'\n  }, {\n    name: 'Missouri',\n    abbreviation: 'MO'\n  }, {\n    name: 'Montana',\n    abbreviation: 'MT'\n  }, {\n    name: 'Nebraska',\n    abbreviation: 'NE'\n  }, {\n    name: 'Nevada',\n    abbreviation: 'NV'\n  }, {\n    name: 'New Hampshire',\n    abbreviation: 'NH'\n  }, {\n    name: 'New Jersey',\n    abbreviation: 'NJ'\n  }, {\n    name: 'New Mexico',\n    abbreviation: 'NM'\n  }, {\n    name: 'New York',\n    abbreviation: 'NY'\n  }, {\n    name: 'North Carolina',\n    abbreviation: 'NC'\n  }, {\n    name: 'North Dakota',\n    abbreviation: 'ND'\n  }, {\n    name: 'Northern Mariana Islands',\n    abbreviation: 'MP'\n  }, {\n    name: 'Ohio',\n    abbreviation: 'OH'\n  }, {\n    name: 'Oklahoma',\n    abbreviation: 'OK'\n  }, {\n    name: 'Oregon',\n    abbreviation: 'OR'\n  }, {\n    name: 'Palau',\n    abbreviation: 'PW'\n  }, {\n    name: 'Pennsylvania',\n    abbreviation: 'PA'\n  }, {\n    name: 'Puerto Rico',\n    abbreviation: 'PR'\n  }, {\n    name: 'Rhode Island',\n    abbreviation: 'RI'\n  }, {\n    name: 'South Carolina',\n    abbreviation: 'SC'\n  }, {\n    name: 'South Dakota',\n    abbreviation: 'SD'\n  }, {\n    name: 'Tennessee',\n    abbreviation: 'TN'\n  }, {\n    name: 'Texas',\n    abbreviation: 'TX'\n  }, {\n    name: 'Utah',\n    abbreviation: 'UT'\n  }, {\n    name: 'Vermont',\n    abbreviation: 'VT'\n  }, {\n    name: 'Virgin Islands',\n    abbreviation: 'VI'\n  }, {\n    name: 'Virginia',\n    abbreviation: 'VA'\n  }, {\n    name: 'Washington',\n    abbreviation: 'WA'\n  }, {\n    name: 'West Virginia',\n    abbreviation: 'WV'\n  }, {\n    name: 'Wisconsin',\n    abbreviation: 'WI'\n  }, {\n    name: 'Wyoming',\n    abbreviation: 'WY'\n  }];\n  _exports.states = states;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EbVicBYR\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"address-detail-overlay\\\",\\\"address-detail-container\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-address-detail-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-address-detail-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-address-title\\\"],[9],[0,\\\" Add Address\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"actions\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTick\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCreatingNewAddress\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeAddressDialog\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-address-detail-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"form\\\"],[11,\\\"id\\\",\\\"form\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2 mt-3\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"type\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderPlaceRecord\\\",\\\"riderPlaceType\\\"]],[23,[\\\"addressTypeOptions\\\"]],false,[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onTypeChange\\\",[23,[\\\"riderPlaceRecord\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"id\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"name\\\",[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"20\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"alias\\\"]]],null]],null],[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"alias\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"streetAddress\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Street\\\\n                            Address\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 p-0 add-address-component\\\"],[9],[0,\\\"\\\\n                             \\\"],[1,[27,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"value\\\",\\\"valuePath\\\",\\\"extra\\\",\\\"showPinButton\\\",\\\"onRecordChanged\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"addressConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"addressConfig\\\",\\\"extra\\\"]]],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"onPlaceRecordChanged\\\",[23,[\\\"place\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"place\\\"]]],null]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"apartment\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Apartment,Suite,etc.\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"id\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"apartment\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"premise\\\"]]],null]],null],[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"premise\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"'lat'\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Lat\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"id\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"lat\\\",true,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]]],null]],null],[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"location\\\",\\\"lat\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"lng\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Lng\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0\\\"],[9],[0,\\\"\\\\n                             \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"id\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"lng\\\",true,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"location\\\",\\\"lng\\\"]]],null]],null],[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"location\\\",\\\"lng\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"zone\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Zone\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"id\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"zone\\\",true,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"zName\\\"]]],null]],null],[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"zoneName\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"notes\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Address Notes\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 p-0 mb-2 address-notes\\\"],[9],[0,\\\"\\\\n                          \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"maxlength\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"6\\\",\\\"255\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"notes\\\"]]],null]],null],[23,[\\\"riderPlaceRecord\\\",\\\"place\\\",\\\"address\\\",\\\"notes\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-8 pl-4 pr-0 py-0 address-map\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[21,\\\"rider-management-widget/rider-contact-information/new-address-map\\\"],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-dialog/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-address-map/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/map-widget/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.RecenterControl = void 0;\n  const pintPointIcon = {\n    icon: window.L.icon({\n      iconUrl: '/map-icons/icon-pinpoint.svg',\n      iconSize: [48, 48],\n      iconAnchor: [24, 48]\n    }),\n    keyboard: false,\n    interactive: false\n  };\n  const recenterControlOptions = {\n    position: 'topleft',\n    recenterAction: null\n  };\n  const defaultZoom = 12;\n  var RecenterControl = window.L.Control.extend({\n    options: recenterControlOptions,\n    onAdd: function\n      /* map */\n    () {\n      const name = 'leaflet-control-recenter';\n      const container = window.L.DomUtil.create('div', 'leaflet-control-recenter leaflet-bar');\n      this._recenterButton = this._createButton('<i class=\"fa fa-crosshairs fa-lg crosshairs-big\" aria-hidden=\"true\"></i>', 'Recenter', name, container, this._recenterMap);\n      return container;\n    },\n    _recenterMap: function () {\n      this.options.mapWidget.onRecenterClick();\n    },\n    _createButton: function (html, title, className, container, fn) {\n      var link = window.L.DomUtil.create('a', className, container);\n      link.innerHTML = html;\n      link.href = '#';\n      link.title = title;\n      /*\n       * Will force screen readers like VoiceOver to read this as 'Zoom in - button'\n       */\n\n      link.setAttribute('role', 'button');\n      link.setAttribute('aria-label', title);\n      window.L.DomEvent.disableClickPropagation(link);\n      window.L.DomEvent.on(link, 'click', window.L.DomEvent.stop);\n      window.L.DomEvent.on(link, 'click', fn, this);\n      window.L.DomEvent.on(link, 'click', this._refocusOnMap, this);\n      return link;\n    }\n  });\n  _exports.RecenterControl = RecenterControl;\n\n  var _default = _component.default.extend(Ember.Evented, {\n    rider: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    layerGroup: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        layerGroup: new window.L.LayerGroup()\n      });\n      this.get('rider.activePlace');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const map = this.get('map.native');\n      const locationControl = new RecenterControl({\n        mapWidget: this\n      });\n      locationControl.addTo(map);\n      this.set('locationControl', locationControl);\n      this.activeGeocode();\n      this.onChangeActivePlace();\n      this.recenterMap();\n    },\n\n    recenterMap() {\n      const map = this.get('map.native');\n      if (!map) return;\n      const mapService = this.get('mapService');\n      const center = [mapService.get('center.lat'), mapService.get('center.lon')];\n      map.setView(center, defaultZoom);\n    },\n\n    destroy() {\n      this._super(...arguments);\n\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      this.get('rider').setActivePlace(null);\n    },\n\n    async getGeoNodeForPickedLocation(lat, lng, beNomadAddress) {\n      const notificationService = this.get('notifications');\n\n      try {\n        const geoNode = await this.get('geocode').calculateZone(lat, lng);\n\n        if (Ember.isNone(geoNode)) {\n          notificationService.warning('Unknown Geonode. Please enter a valid address.');\n        }\n\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        return geoNode;\n      } catch (e) {\n        notificationService.error(`Error while getting genode for ${beNomadAddress}.`);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    drawMarker(lat, lng) {\n      const map = this.get('map.native');\n\n      if (!Ember.isPresent(map) || Ember.isNone(lat) || Ember.isNone(lng)) {\n        return;\n      }\n\n      this.get('layerGroup').clearLayers();\n      const marker = window.L.marker([lat, lng], pintPointIcon);\n      this.get('layerGroup').addLayer(marker).addTo(map);\n      map.setView(marker._latlng, map.getZoom());\n    },\n\n    activeGeocode: Ember.observer('geocode.activeGeo', function () {\n      const map = this.get('map.native');\n      const geocodeService = this.get('geocode');\n      const riderService = this.get('rider');\n      const activeGeocode = geocodeService.get('activeGeo');\n      if (!map) return;\n\n      if (activeGeocode) {\n        map.on('click', async function (event) {\n          await geocodeService.saveNewGeocode(event.latlng);\n          const place = geocodeService.get('currentRecord');\n          riderService.setActivePlace(place);\n        });\n      } else {\n        map.off('click');\n      }\n    }),\n\n    onRecenterClick() {\n      this.set('autoZoom', false);\n      return this.reCenterMapView(true);\n    },\n\n    onChangeActivePlace: Ember.observer('rider.activePlace.location.lng', function () {\n      const activePlace = this.get('rider.activePlace');\n\n      if (!Ember.isPresent(activePlace)) {\n        return;\n      }\n\n      const lat = activePlace.get('location.lat');\n      const lng = activePlace.get('location.lng');\n      this.drawMarker(lat, lng);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-image-dialog/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    isThumbnailEditing: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      closeImageDialog() {\n        this.set('canShowNewImageModal', false);\n      },\n\n      onRiderImageChange(event) {\n        const isImageEditing = this.get('isImageEditing');\n\n        if (isImageEditing) {\n          this.get('previewImage')(event);\n        }\n      },\n\n      async onRiderImageSave() {\n        this.set('canShowNewImageModal', false);\n        this.set('isThumbnailEditing', true);\n        const thumbnailData = this.get('thumbnailData');\n        const riderChangeSet = this.get('riderChangeSet');\n        const thumbnail = JSON.stringify(thumbnailData);\n        riderChangeSet.set('thumbnail', thumbnail);\n        Ember.$('#thumbnailPreview').attr('src', thumbnailData.image);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-image-dialog/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"6fxZX5pR\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"image-detail-overlay\\\",\\\"image-detail-container\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-image-detail-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-image-detail-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-image-title\\\"],[9],[0,\\\"Edit Rider Photo\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"actions\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeImageDialog\\\"],null]],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-image-detail-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 img-div\\\"],[9],[0,\\\"\\\\n                 \\\"],[7,\\\"img\\\"],[11,\\\"id\\\",\\\"uploadPreview\\\"],[11,\\\"class\\\",\\\"uploaded-image\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"image-detail-footer\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"image-detail-note\\\"],[9],[0,\\\"Image aspect ratio of 4x3 is recommended.\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"btn-div\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"riderImage\\\"],[11,\\\"class\\\",\\\"btn btn-default rider-photo-button\\\"],[9],[0,\\\"Change Image\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"riderImage\\\"],[11,\\\"multiple\\\",\\\"true\\\"],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRiderImageChange\\\"],null]],[11,\\\"class\\\",\\\"imageInputFile\\\"],[11,\\\"accept\\\",\\\"image/jpg,image/jpeg,image/gif,image/tif,image/png,image/pdf\\\"],[11,\\\"type\\\",\\\"file\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"btn btn-default rider-photo-button\\\"],[9],[0,\\\"Save\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRiderImageSave\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-image-dialog/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-phone-number-dialog/component\", [\"exports\", \"adept-iq/config/placeholders\"], function (_exports, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['add-rider-phone-detail-form'],\n    tooltip: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    store: Ember.inject.service(),\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    selectedType: null,\n    phoneTypeOptions: Ember.computed('configRiderPhoneTypes', 'riderPhoneNumbers.[]', async function () {\n      const configRiderPhoneTypes = this.get('configRiderPhoneTypes') || [];\n      const riderPhoneRecordType = this.get('riderPhoneNumbers') || [];\n      const savedRiderPhoneRecordType = riderPhoneRecordType.map(type => {\n        return type.get('type');\n      }); // ['main','home'']\n\n      const filterPhoneTypes = configRiderPhoneTypes.filter(phoneType => !savedRiderPhoneRecordType.includes(phoneType.get('name')));\n      return filterPhoneTypes;\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const configRiderPhoneTypes = await this.get('rider').getConfigRiderPhoneTypes();\n      const curRiderPhoneRecord = this.get('riderPhoneRecord');\n      const curPhoneTypeName = curRiderPhoneRecord.get('type');\n\n      if (curPhoneTypeName) {\n        const phoneType = configRiderPhoneTypes.find(record => record.get('name') === curPhoneTypeName);\n        this.set('selectedType', phoneType);\n      }\n\n      this.setProperties({\n        configRiderPhoneTypes\n      });\n    },\n\n    actions: {\n      onPhoneTypeChange(riderPhoneRecord, option) {\n        this.set('selectedType', option);\n        riderPhoneRecord.set('type', option.get('name'));\n      },\n\n      onPhoneValueChange(record, maskObj) {\n        // match[0] = area code\n        // match[1] = first part of 3 digit phone number\n        // match[2] = second part of 4 digit phone number\n        const match = maskObj.masked.replace(/_/, '').split('-');\n        const phone = record;\n        phone.set('areaCode', match[0]);\n        phone.set('phoneNumber', match[1] + match[2]);\n        phone.set('phone', match[1] + match[2]);\n      },\n\n      closePhoneDialog() {\n        this.set('canShowRiderPhoneNumberModal', false);\n        this.riderPhoneRecord.rollbackAttributes();\n      },\n\n      onTick() {\n        const tooltip = this.get('tooltip');\n        const phone = this.riderPhoneRecord.get('unformattedPhoneNumber');\n        const type = this.riderPhoneRecord.get('type');\n\n        if (!phone || phone.length !== 10) {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: 'Phone number is required.',\n            primaryActionText: 'Ok',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else if (!Ember.isPresent(type)) {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: 'Phone number must have a type.',\n            primaryActionText: 'Ok',\n            primaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        } else {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: 'Are you sure you want to save these changes?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              this.get('onRiderPhoneNumberSave')();\n              this.set('canShowRiderPhoneNumberModal', false);\n              return tooltip.reset();\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: () => {\n              return tooltip.reset();\n            }\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-phone-number-dialog/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"25CMgYT/\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"phone-number-detail-overlay\\\",\\\"phone-number-detail-container\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-phone-detail-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-phone-detail-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-phone-title\\\"],[9],[0,\\\" Add Phone\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"actions\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTick\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCreateNewPhoneNumber\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closePhoneDialog\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-phone-detail-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"form\\\"],[11,\\\"id\\\",\\\"form\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2 mt-3\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"type\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"onchange\\\"],[[23,[\\\"selectedType\\\"]],[23,[\\\"phoneTypeOptions\\\"]],false,[27,\\\"and\\\",[[27,\\\"eq\\\",[[23,[\\\"riderPhoneRecord\\\",\\\"type\\\"]],\\\"main\\\"],null],[23,[\\\"isPhoneNumberEdit\\\"]]],null],true,\\\"value.displayName\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneTypeChange\\\",[23,[\\\"riderPhoneRecord\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,1,[\\\"value\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"phoneNumber\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 p-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"riderPhoneRecord\\\",\\\"unformattedPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"riderPhoneRecord\\\"]]],null]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"ext\\\"],[11,\\\"class\\\",\\\"col-sm-1 col-form-label col-form-label-sm p-0\\\"],[9],[0,\\\"Ext\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-3\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/number\\\",null,[[\\\"id\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"ext\\\",[27,\\\"hash\\\",null,[[\\\"length\\\"],[\\\"8\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderPhoneRecord\\\",\\\"extension\\\"]]],null]],null],[23,[\\\"riderPhoneRecord\\\",\\\"extension\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/new-phone-number-dialog/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    isNewOrEditing: false,\n    recordSetter: Ember.observer('riderPlaces', 'riderPlaces.@each.isSoftDeleted', function () {\n      Ember.run.debounce(this, 'refreshTable', 500);\n    }),\n\n    refreshTable() {\n      this.clearData();\n      this.refreshData();\n    },\n\n    getRiderPlaces(modelName, params) {\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const riderId = this.get('riderChangeSet.id');\n      let activeData = store.peekAll(modelName) || [];\n      activeData = activeData.filter(riderPlace => riderPlace.get('rider.id') === riderId && !riderPlace.get('isSoftDeleted'));\n      return activeData.filter(filterFn).sort(compareFn);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const filteredData = this.getRiderPlaces(modelName, params);\n      return filteredData;\n    },\n\n    actions: {\n      onPlusIconClick() {\n        this.set('isCreatingNewAddress', true);\n        this.set('canShowNewAddressModal', true);\n        this.get('createNewRiderPlaceRecord')();\n      },\n\n      onEditIconClick() {\n        const riderPlaceRecord = this.get('checkedRows.firstObject');\n        this.get('onEditRiderPlace')(riderPlaceRecord);\n      },\n\n      onDeleteIconClick() {\n        const riderPlaceRecord = this.get('checkedRows.firstObject');\n        this.get('onDeleteRiderPlace')(riderPlaceRecord);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-address-table',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider-place',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    title: 'Addresses',\n    columns: [{\n      id: 'Type',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Type',\n      valuePath: 'riderPlaceTypeName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 90\n    }, {\n      id: 'Name',\n      index: 1,\n      type: 'text',\n      label: 'Name',\n      valuePath: 'place.address.alias',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 90,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Address',\n      index: 2,\n      type: 'text',\n      label: 'Address',\n      valuePath: 'place.address.simpleAddress',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 250\n    }, {\n      id: 'City',\n      index: 3,\n      type: 'text',\n      label: 'City',\n      valuePath: 'place.address.locality',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100\n    }, {\n      id: 'State',\n      index: 4,\n      type: 'text',\n      label: 'State',\n      valuePath: 'place.address.region',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 80\n    }, {\n      id: 'Zip',\n      index: 5,\n      type: 'text',\n      label: 'Zip',\n      valuePath: 'place.address.postalCode',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 70,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Lat',\n      index: 6,\n      type: 'text',\n      label: 'Lat',\n      valuePath: 'place.location.lat',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Lng',\n      index: 7,\n      type: 'text',\n      label: 'Lng',\n      valuePath: 'place.location.lng',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Zone',\n      index: 8,\n      type: 'text',\n      label: 'Zone',\n      valuePath: 'place.address.zoneName.displayName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 50,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"NpDPnQUs\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEditIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" \\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlusIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"dirtyCheck\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],[23,[\\\"disableRowSelection\\\"]],[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/template.hbs' @ L33:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/template.hbs' @ L44:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/template.hbs' @ L51:C11) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-address-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-form/component\", [\"exports\", \"adept-iq/config/placeholders\", \"adept-iq/utils/validator\"], function (_exports, _placeholders, _validator) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CONTACT_TYPE = {\n    emergency: 'emergency',\n    alternative: 'alternative'\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['rider-relationship-options-select'],\n    rider: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    PHONE_NUMBER_PLACEHOLDER: _placeholders.PHONE_NUMBER_PLACEHOLDER,\n    riderRelationshipOptions: null,\n    contactTypeOptions: null,\n    selectedContactType: null,\n    selectedReasonType: null,\n\n    async init() {\n      this._super(...arguments);\n\n      const riderRelationshipTypes = await this.get('rider').getConfigRelationshipTypes();\n      const riderRelationshipOptions = riderRelationshipTypes.map(r => r.get('name'));\n      const riderContactReasonTypes = await this.get('rider').getConfigContactReasonTypes();\n      const contactReasonTypeOptions = riderContactReasonTypes.toArray();\n      const riderContactRecord = this.get('riderContactRecord');\n      const reasonName = riderContactRecord.get('reason');\n\n      if (reasonName) {\n        const reasonType = riderContactReasonTypes.find(record => record.get('name') === reasonName);\n        this.set('selectedReasonType', reasonType);\n      }\n\n      this.setProperties({\n        riderRelationshipOptions,\n        contactTypeOptions: [CONTACT_TYPE.emergency, CONTACT_TYPE.alternative],\n        contactReasonTypeOptions\n      });\n    },\n\n    actions: {\n      closeContactInfoDialog() {\n        this.set('canShowRiderContactFormModal', false);\n      },\n\n      onPhoneValueChange(record, maskObj) {\n        // match[0] = area code\n        // match[1] = first part of 3 digit phone number\n        // match[2] = second part of 4 digit phone number\n        const match = maskObj.masked.replace(/_/, '').split('-');\n        const phone = record;\n        phone.set('phoneNumber', match[0] + match[1] + match[2]);\n        phone.set('phoneNumber', maskObj.unmasked);\n      },\n\n      onReasonValueChange(record, value) {\n        this.set('selectedReasonType', value);\n        record.set('reason', value.name);\n      },\n\n      onTick() {\n        const tooltip = this.get('tooltip');\n        const riderContactRecord = this.get('riderContactRecord');\n        const name = riderContactRecord.get('name').trim();\n        const relationship = riderContactRecord.get('relationship').trim();\n        const phone = riderContactRecord.get('phoneNumber');\n        const email = riderContactRecord.get('email').trim();\n        const emailValid = (0, _validator.isEmailValid)(email);\n        const errors = [];\n\n        if (Ember.isEmpty(name)) {\n          errors.push({\n            validation: 'Name is required'\n          });\n        }\n\n        if (Ember.isEmpty(relationship)) {\n          errors.push({\n            validation: 'Relationship is required'\n          });\n        }\n\n        if (!phone || phone.length !== 10) {\n          errors.push({\n            validation: 'Phone number is required'\n          });\n        }\n\n        if (!Ember.isBlank(email) && !emailValid) {\n          errors.push({\n            validation: `\"${email}\" is not a valid email.`\n          });\n        }\n\n        if (errors.length > 0) {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: '',\n            errors,\n            primaryActionText: 'OK',\n\n            primaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        } else {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: 'Are you sure you want to save these changes?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              const notifications = this.get('notifications');\n              const contactType = riderContactRecord.get('contactType');\n              const selectedContactType = contactType === CONTACT_TYPE.emergency ? CONTACT_TYPE.emergency : CONTACT_TYPE.alternative;\n              const editOrNewRecord = this.get('isContactInfoEdit') ? 'edited' : 'added';\n              notifications.success(`Rider ${selectedContactType} Contact successfully ${editOrNewRecord}`);\n              this.get('onRiderContactsSave')();\n              this.set('canShowRiderContactFormModal', false);\n              tooltip.reset();\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: () => {\n              tooltip.reset();\n            }\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vfL8J665\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"contact-info-detail-overlay\\\",\\\"contact-info-detail-container\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-contact-info-detail-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-contact-info-detail-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isContactInfoEdit\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-contact-info-title\\\"],[9],[0,\\\" Edit Contact\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-contact-info-title\\\"],[9],[0,\\\" Add Contact\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"actions\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTick\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"isContactInfoEdit\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeContactInfoDialog\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-contact-info-detail-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2 mt-3 \\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"type\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n\\\\n                            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderContactRecord\\\",\\\"contactType\\\"]],[23,[\\\"contactTypeOptions\\\"]],false,[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderContactRecord\\\",\\\"contactType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                                     \\\"],[1,[27,\\\"capitalize\\\",[[22,3,[]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                               \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"50\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderContactRecord\\\",\\\"name\\\"]]],null]],null],[23,[\\\"riderContactRecord\\\",\\\"name\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"relationship\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Relationship\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderContactRecord\\\",\\\"relationship\\\"]],[23,[\\\"riderRelationshipOptions\\\"]],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderContactRecord\\\",\\\"relationship\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                        \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"address\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"75\\\"]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderContactRecord\\\",\\\"address\\\"]]],null]],null],[23,[\\\"riderContactRecord\\\",\\\"address\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row mb-2\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"phoneNumber\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-4 p-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"riderContactRecord\\\",\\\"phoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"riderContactRecord\\\"]]],null]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"ext\\\"],[11,\\\"class\\\",\\\"col-sm-1 col-form-label col-form-label-sm p-0\\\"],[9],[0,\\\"Ext\\\"],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-3\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/number\\\",null,[[\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"hash\\\",null,[[\\\"length\\\"],[8]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderContactRecord\\\",\\\"extension\\\"]]],null]],null],[23,[\\\"riderContactRecord\\\",\\\"extension\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-contact\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"email\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Email\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"onChange\\\",\\\"value\\\"],[[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderContactRecord\\\",\\\"email\\\"]]],null]],null],[23,[\\\"riderContactRecord\\\",\\\"email\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-contact\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"reason\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Reason\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"selectedReasonType\\\"]],[23,[\\\"contactReasonTypeOptions\\\"]],false,[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onReasonValueChange\\\",[23,[\\\"riderContactRecord\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,1,[\\\"value\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                          \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  //import serviceWindow from '../../../../adapters/service-window';\n  var _default = _component.default.extend({\n    config: _config.default,\n    isNewOrEditing: false,\n    recordSetter: Ember.observer('riderContacts', 'riderContacts.@each.isSoftDeleted', function () {\n      Ember.run.debounce(this, 'refreshTable', 500);\n    }),\n\n    refreshTable() {\n      this.clearData();\n      this.refreshData();\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = store.peekAll(modelName) || [];\n      const riderId = this.get('riderChangeSet.id');\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        return data.get('rider.id') === riderId && !data.get('isSoftDeleted');\n      });\n      return filteredData;\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onPlusIconClick() {\n        this.set('canShowRiderContactFormModal', true);\n        this.get('createRiderContactsRecord')();\n      },\n\n      onDeleteIconClick() {\n        const contactRecord = this.get('checkedRows.firstObject');\n        this.get('onDeleteRiderContact')(contactRecord);\n      },\n\n      onEditIconClick() {\n        const contactRecord = this.get('checkedRows.firstObject');\n        this.get('onEditRiderContact')(contactRecord);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-contact-table',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider-contact-info',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    title: 'Contacts',\n    columns: [{\n      id: 'Type',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Type',\n      valuePath: 'displayContactType',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 150\n    }, {\n      id: 'Name',\n      index: 1,\n      type: 'text',\n      label: 'Name',\n      valuePath: 'name',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Relationship',\n      index: 2,\n      type: 'text',\n      label: 'Relationship',\n      valuePath: 'relationship',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Address',\n      index: 3,\n      type: 'text',\n      label: 'Address',\n      valuePath: 'address',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 300,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'PhoneNumber',\n      index: 4,\n      type: 'text',\n      label: 'PhoneNumber',\n      valuePath: 'formattedPhoneNumber',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 180,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Ext',\n      index: 5,\n      type: 'text',\n      label: 'Ext',\n      valuePath: 'extension',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 80,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Email',\n      index: 6,\n      type: 'text',\n      label: 'Email',\n      valuePath: 'email',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Reason',\n      index: 7,\n      type: 'text',\n      label: 'Reason',\n      valuePath: 'reasonDisplayName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Cio4GVq0\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteIconClick\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEditIconClick\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlusIconClick\\\"],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"dirtyCheck\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],[23,[\\\"disableRowSelection\\\"]],[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/template.hbs' @ L33:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/template.hbs' @ L44:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/template.hbs' @ L51:C11) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-contact-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  //import serviceWindow from '../../../../adapters/service-window';\n  var _default = _component.default.extend({\n    config: _config.default,\n    isNewOrEditing: false,\n    recordSetter: Ember.observer('riderPhoneNumbers', function () {\n      Ember.run.debounce(this, 'refreshTable', 500);\n    }),\n\n    refreshTable() {\n      this.clearData();\n      this.refreshData();\n    },\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = store.peekAll(modelName) || [];\n      const riderId = this.get('riderChangeSet.id');\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        return data.get('rider.id') === riderId && !data.get('isSoftDeleted');\n      });\n      return filteredData;\n    },\n\n    actions: {\n      onPlusIconClick() {\n        this.get('createNewPhoneNumberRecord')();\n      },\n\n      onDeleteIconClick() {\n        const phoneRecord = this.get('checkedRows.firstObject');\n        this.get('deletePhoneRecord')(phoneRecord);\n      },\n\n      onEditIconClick() {\n        const phoneRecord = this.get('checkedRows.firstObject');\n        this.get('editPhoneRecord')(phoneRecord);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-phone-table',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider-phone-number',\n    defaultSortAsc: true,\n    isFormControls: true,\n    title: 'Phone Numbers',\n    columns: [{\n      id: 'Type',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Type',\n      valuePath: 'typeDisplayName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 70\n    }, {\n      id: 'phoneNumber',\n      index: 1,\n      type: 'text',\n      label: 'Phone Number',\n      valuePath: 'formattedPhoneNumberNoExt',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 170,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Ext',\n      index: 2,\n      type: 'text',\n      label: 'Ext',\n      valuePath: 'extension',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 60,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YrYAc0+V\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEditIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlusIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"dirtyCheck\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],[23,[\\\"disableRowSelection\\\"]],[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/template.hbs' @ L33:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/template.hbs' @ L44:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/template.hbs' @ L51:C11) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/rider-phone-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"t4uW4KLR\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 p-0\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 first-row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"img-icon\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-user\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"img\\\"],[11,\\\"id\\\",\\\"thumbnailPreview\\\"],[11,\\\"class\\\",\\\"thumnailPreview rounded\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"riderImage\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default rider-photo-button btn-file \\\",[27,\\\"unless\\\",[[23,[\\\"isImageEditing\\\"]],\\\"hidden\\\"],null]]]],[9],[0,\\\"Upload Image\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"riderImage\\\"],[11,\\\"name\\\",\\\"avatar\\\"],[11,\\\"multiple\\\",\\\"true\\\"],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRiderImageUpload\\\"],null]],[11,\\\"class\\\",\\\"file-input\\\"],[11,\\\"accept\\\",\\\"image/jpg,image/jpeg,image/gif,image/tif,image/png,image/pdf\\\"],[11,\\\"type\\\",\\\"file\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n         \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 pl-md-0\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/rider-phone-table\\\",null,[[\\\"tableRef\\\",\\\"canShowRiderPhoneNumberModal\\\",\\\"riderPhoneNumbers\\\",\\\"createNewPhoneNumberRecord\\\",\\\"deletePhoneRecord\\\",\\\"editPhoneRecord\\\",\\\"isNewOrEditing\\\",\\\"riderChangeSet\\\"],[[23,[\\\"tableRiderPhoneRef\\\"]],[23,[\\\"canShowRiderPhoneNumberModal\\\"]],[23,[\\\"riderPhoneNumbers\\\"]],[23,[\\\"createNewPhoneNumberRecord\\\"]],[23,[\\\"deletePhoneRecord\\\"]],[23,[\\\"editPhoneRecord\\\"]],[23,[\\\"isNewOrEditing\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-7 pl-md-0\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/rider-address-table\\\",null,[[\\\"tableRef\\\",\\\"isCreatingNewAddress\\\",\\\"canShowNewAddressModal\\\",\\\"riderPlaces\\\",\\\"onEditRiderPlace\\\",\\\"onDeleteRiderPlace\\\",\\\"createNewRiderPlaceRecord\\\",\\\"isNewOrEditing\\\",\\\"riderChangeSet\\\"],[[23,[\\\"tableRiderAddressRef\\\"]],[23,[\\\"isCreatingNewAddress\\\"]],[23,[\\\"canShowNewAddressModal\\\"]],[23,[\\\"riderPlaces\\\"]],[23,[\\\"onEditRiderPlace\\\"]],[23,[\\\"onDeleteRiderPlace\\\"]],[23,[\\\"createNewRiderPlaceRecord\\\"]],[23,[\\\"isNewOrEditing\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 contact-second-row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/rider-contact-table\\\",null,[[\\\"tableRef\\\",\\\"canShowRiderContactFormModal\\\",\\\"riderContacts\\\",\\\"createRiderContactsRecord\\\",\\\"onEditRiderContact\\\",\\\"onDeleteRiderContact\\\",\\\"isNewOrEditing\\\",\\\"riderChangeSet\\\"],[[23,[\\\"tableRiderContactRef\\\"]],[23,[\\\"canShowRiderContactFormModal\\\"]],[23,[\\\"riderContacts\\\"]],[23,[\\\"createRiderContactsRecord\\\"]],[23,[\\\"onEditRiderContact\\\"]],[23,[\\\"onDeleteRiderContact\\\"]],[23,[\\\"isNewOrEditing\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 second-row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 dob-email-wrapper\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Email\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"email\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Email\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"if\\\",[[23,[\\\"riderChangeSet\\\",\\\"error\\\",\\\"email\\\"]],\\\"error\\\"],null],[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"email\\\"]]],null]],null],[23,[\\\"riderChangeSet\\\",\\\"email\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 pl-0 dob-email-wrapper\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Preferred Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"preferredProvider\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Preferred Provider\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"riderChangeSet\\\",\\\"provider\\\"]],[23,[\\\"providerTypeOption\\\"]],false,[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",\\\"riderChangeSet.provider\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 pl-0 dob-email-wrapper\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Date of Birth\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"dob\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"DOB\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/date\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"maxDate\\\",\\\"minDate\\\",\\\"format\\\",\\\"value\\\",\\\"defaultDate\\\",\\\"onOpen\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"riderChangeSet\\\",\\\"error\\\",\\\"dateOfBirth\\\"]],\\\"error\\\"],null],false,false,[23,[\\\"US_DATE_PLACEHOLDER\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null],false,true,[23,[\\\"maxDateOfBirth\\\"]],[23,[\\\"minDateOfBirth\\\"]],\\\"m/d/Y\\\",[23,[\\\"riderChangeSet\\\",\\\"dateOfBirth\\\"]],[23,[\\\"riderChangeSet\\\",\\\"dateOfBirth\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDatePickrOpen\\\",[23,[\\\"riderChangeSet\\\"]],\\\"dateOfBirth\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderChangeSet\\\"]],\\\"dateOfBirth\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"current-age-group form-group row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"dob\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Current Age\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-age-input col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"extra\\\",\\\"disabled\\\",\\\"value\\\"],[[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"10\\\"]]],true,[23,[\\\"currentAge\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 pl-0 dob-email-wrapper\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Passcode \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-exclamation-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"spacing\\\",\\\"text\\\"],[\\\"right\\\",\\\"10\\\",\\\"Maximum 10 characters in length. Can contain numbers, letters and special characters.\\\"]]],false],[0,\\\"\\\\n                          \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Passcode\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Passcode\\\\n        \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"10\\\"]]],[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"passcode\\\"]]],null]],null],[23,[\\\"riderChangeSet\\\",\\\"passcode\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 third-row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 notes\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Rider Notes\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"maxLength\\\"],[[23,[\\\"riderChangeSet\\\",\\\"notes\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"notes\\\"]]],null]],null],true,\\\"500\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 pl-md-0 notes\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Driver Notes\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"maxLength\\\"],[[23,[\\\"riderChangeSet\\\",\\\"driverNotes\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewOrEditing\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"driverNotes\\\"]]],null]],null],true,\\\"500\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowRiderPhoneNumberModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/new-phone-number-dialog\\\",null,[[\\\"elementId\\\",\\\"canShowRiderPhoneNumberModal\\\",\\\"isCreateNewPhoneNumber\\\",\\\"riderPhoneRecord\\\",\\\"riderPhoneNumbers\\\",\\\"isPhoneNumberEdit\\\",\\\"onRiderPhoneNumberSave\\\"],[\\\"new-phone-number-dialog\\\",[23,[\\\"canShowRiderPhoneNumberModal\\\"]],[23,[\\\"isCreateNewPhoneNumber\\\"]],[23,[\\\"riderPhoneRecord\\\"]],[23,[\\\"riderPhoneNumbers\\\"]],[23,[\\\"isPhoneNumberEdit\\\"]],[23,[\\\"onRiderPhoneNumberSave\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"canShowNewAddressModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/new-address-dialog\\\",null,[[\\\"elementId\\\",\\\"riderChangeSet\\\",\\\"riderPlaceRecord\\\",\\\"onSaveNewPlace\\\",\\\"isCreatingNewAddress\\\",\\\"canShowNewAddressModal\\\"],[\\\"new-address-dialog\\\",[23,[\\\"riderChangeSet\\\"]],[23,[\\\"riderPlaceRecord\\\"]],[23,[\\\"onSaveNewPlace\\\"]],[23,[\\\"isCreatingNewAddress\\\"]],[23,[\\\"canShowNewAddressModal\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"canShowRiderContactFormModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/rider-contact-form\\\",null,[[\\\"elementId\\\",\\\"canShowRiderContactFormModal\\\",\\\"riderContactRecord\\\",\\\"isContactInfoEdit\\\",\\\"onRiderContactsSave\\\"],[\\\"rider-contact-form\\\",[23,[\\\"canShowRiderContactFormModal\\\"]],[23,[\\\"riderContactRecord\\\"]],[23,[\\\"isContactInfoEdit\\\"]],[23,[\\\"onRiderContactsSave\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"canShowNewImageModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information/new-image-dialog\\\",null,[[\\\"elementId\\\",\\\"canShowNewImageModal\\\",\\\"isThumbnailEditing\\\",\\\"isImageEditing\\\",\\\"previewImage\\\",\\\"thumbnailData\\\",\\\"riderChangeSet\\\"],[\\\"new-image-dialog\\\",[23,[\\\"canShowNewImageModal\\\"]],[23,[\\\"isThumbnailEditing\\\"]],[23,[\\\"isImageEditing\\\"]],[23,[\\\"previewImage\\\"]],[23,[\\\"thumbnailData\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-contact-information/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-contact-information/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.RIDER_VALIDATION = _exports.RIDER_PHONE_VALIDATION = void 0;\n\n  /* eslint-disable no-unused-vars */\n  const RIDER_VALIDATION = {\n    firstName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'First Name',\n      message: '{description} is required'\n    })],\n    lastName: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Last Name',\n      message: '{description} is required'\n    })],\n    dateOfBirth: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Date of Birth',\n      message: '{description} is required'\n    })]\n  };\n  _exports.RIDER_VALIDATION = RIDER_VALIDATION;\n  const RIDER_PHONE_VALIDATION = {\n    unformattedPhoneNumber: [(0, _validators.validateLength)({\n      is: 10,\n      allowBlank: true,\n      description: 'Phone Number',\n      message: '{description} 10 digit is required'\n    })]\n  };\n  _exports.RIDER_PHONE_VALIDATION = RIDER_PHONE_VALIDATION;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/utils/guid\", \"lodash\"], function (_exports, _emberConcurrency, _moment, _guid, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    riderEligibilityRecord: null,\n    riderServiceNeedRecord: null,\n    prevEligibilityRecord: null,\n    curbToCurbRecord: null,\n    doorToDoorRecord: null,\n    visuallyAssuredEntryRecord: null,\n    tableRef: null,\n    isOpen: false,\n    canShowRiderEligibilityFormModal: false,\n    isCreatingNewEligibility: false,\n    title: null,\n    riderId: Ember.computed.readOnly('riderChangeSet.id'),\n    riderEligibilities: Ember.computed('riderChangeSet.{riderEligibilities,riderEligibilities.[]}', function () {\n      return this.get('riderChangeSet.riderEligibilities').toArray();\n    }),\n    isOpened: Ember.computed.oneWay('isOpen'),\n\n    setupServiceNeedsDropdown() {\n      const configServiceNeeds = this.store.peekAll('service-need-type').sortBy('displayName');\n\n      if (this.get('riderChangeSet.riderServiceNeeds').length) {\n        const riderServiceNeeds = this.get('riderChangeSet.riderServiceNeeds').filter(riderServiceNeed => !riderServiceNeed.get('isSoftDeleted')).toArray();\n        const configServiceNeedsMapper = {};\n        configServiceNeeds.forEach(configServiceNeed => {\n          const configServiceNeedName = configServiceNeed.get('id');\n          configServiceNeed.set('isChecked', false);\n          configServiceNeedsMapper[configServiceNeedName] = configServiceNeed;\n        });\n        riderServiceNeeds.forEach(riderServiceNeed => {\n          const serviceNeedId = riderServiceNeed.get('serviceNeedType.id');\n          const serviceNeedType = configServiceNeedsMapper[serviceNeedId];\n          serviceNeedType.set('isChecked', true);\n        });\n\n        if (riderServiceNeeds.length > 1) {\n          this.set('title', 'Multiple');\n        } else {\n          this.set('title', riderServiceNeeds.get('lastObject.serviceNeedType.displayName'));\n        }\n      } else {\n        this.set('title', '');\n        configServiceNeeds.forEach(configServiceNeed => {\n          configServiceNeed.set('isChecked', false);\n        });\n      }\n\n      this.setProperties({\n        configServiceNeeds\n      });\n    },\n\n    async init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n      this.createRiderReasonEligibilityRecord = this.createRiderReasonEligibilityRecord.bind(this);\n      this.onDeleteRiderReasonEligibility = this.onDeleteRiderReasonEligibility.bind(this);\n      this.onEditRiderReasonEligibility = this.onEditRiderReasonEligibility.bind(this);\n      this.onEditServiceModeEligibility = this.onEditServiceModeEligibility.bind(this);\n      this.onRiderReasonEligibilitySave = this.onRiderReasonEligibilitySave.bind(this);\n      this.onUndoServiceModeEligibility = this.onUndoServiceModeEligibility.bind(this);\n      const configFarecategory = await store.peekAll('fare-category');\n      const configFarecategoryTypes = configFarecategory.toArray();\n      this.setupServiceNeedsDropdown();\n      this.setProperties({\n        configFarecategoryTypes\n      });\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onEditServiceModeEligibility = this.get('onEditServiceModeEligibility');\n      const onSaveRiderServiceModeAndNeedRecord = this.get('onSaveRiderServiceModeAndNeedRecord');\n      const onUndoServiceModeEligibility = this.get('onUndoServiceModeEligibility');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderServiceModeAndNeedRecord,\n          newAction: null,\n          deleteAction: null,\n          editAction: onEditServiceModeEligibility,\n          undoAction: onUndoServiceModeEligibility,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: false,\n          isDeleteBtnDisabled: false,\n          isEditing: false\n        });\n      });\n    },\n\n    onEditServiceModeEligibility() {\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n    },\n\n    onUndoServiceModeEligibility() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderEligibilities = riderChangeSet.get('riderEligibilities');\n      const riderServiceNeeds = riderChangeSet.get('riderServiceNeeds');\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n      this.set('editAPI.isEditBtnDisabled', false);\n      riderEligibilities.forEach(riderEligibility => {\n        if (Ember.isBlank(riderEligibility.id)) {\n          riderEligibility.destroyRecord();\n        } else {\n          riderEligibility.rollbackAttributes();\n          const origEligCateName = riderEligibility.get('origEligCateName');\n          const origEligCondName = riderEligibility.get('origEligCondName');\n          const eligibilityCategoryRecord = origEligCateName ? this.store.peekRecord('eligibility-category', origEligCateName) : null;\n          const eligibilityConditionRecord = origEligCondName ? this.store.peekRecord('eligibility-condition', origEligCondName) : null;\n          riderEligibility.set('eligibilityCategory', eligibilityCategoryRecord);\n          riderEligibility.set('eligibilityCondition', eligibilityConditionRecord);\n        }\n      });\n      this.set('riderEligibilityRecord');\n\n      for (const riderServiceNeed of riderServiceNeeds.toArray()) {\n        if (Ember.isBlank(riderServiceNeed.get('id'))) {\n          riderServiceNeed.destroyRecord();\n        } else {\n          riderServiceNeed.rollbackAttributes();\n        }\n      }\n\n      riderChangeSet.rollback();\n      this.setupServiceNeedsDropdown();\n      this.get('tableRef').refreshData(); //to refresh table data\n    },\n\n    async onRiderReasonEligibilitySave() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const rider = riderChangeSet.get('_internalModel');\n      const riderServiceReasonEligibilityRecord = this.get('riderEligibilityRecord');\n      const allowOverlappingEligibilityDates = this.store.peekRecord('cs-config-item', 'config-System_Configuration/allowOverlappingEligibilityDates').value;\n      const isOverlap = allowOverlappingEligibilityDates ? false : this.overlapDates(riderServiceReasonEligibilityRecord, riderChangeSet.get('riderEligibilities'));\n\n      if (isOverlap) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: \"Unable to save. Date range overlaps an existing eligibility's date range.\",\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.popConfirmation();\n          }\n\n        });\n        return;\n      }\n\n      riderServiceReasonEligibilityRecord.set('rider', rider);\n      riderChangeSet.get('riderEligibilities').pushObject(riderServiceReasonEligibilityRecord);\n      this.get('tableRef').refreshData(); //to refresh table data\n\n      this.set('canShowRiderEligibilityFormModal', false);\n    },\n\n    onSaveRiderServiceReasonEligibilityRecord() {\n      const notifications = this.get('notifications');\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const riderServiceReasonEligibilityRecord = this.get('riderEligibilityRecord');\n\n      try {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            riderServiceReasonEligibilityRecord.set('rider', rider);\n            await riderServiceReasonEligibilityRecord.save();\n\n            if (this.get('editAPI.isEditing')) {\n              notifications.success('RIDER ELIGIBILTIY SUCCESSFULLY EDITED');\n              this.set('editAPI.isEditing', false);\n              this.set('editAPI.isEditBtnDisabled', false);\n            }\n\n            notifications.success('RIDER ELIGIBILTIY SUCCESSFULLY ADDED');\n            this.get('tableRef').refreshData(); //to refresh table data\n\n            this.set('canShowRiderEligibilityFormModal', false);\n            return tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      } catch (e) {\n        notifications.warning('Rider Eligibility Record failed to save');\n        console.warn(e); // eslint-disable-line\n      }\n    },\n\n    onDeleteRiderReasonEligibility(riderEligibilityRecord) {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: 'Are you sure you want to delete this rider eligibility?',\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          riderEligibilityRecord.set('isSoftDeleted', true);\n          this.get('tableRef').refreshData(); //to refresh table data\n\n          notifications.success('RIDER ELIGIBILITY SUCCESSFULLY DELETED');\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    onEditRiderReasonEligibility(riderEligibilityRecord) {\n      if (riderEligibilityRecord) {\n        this.setProperties({\n          prevEligibilityRecord: {\n            eligibilityCategory: riderEligibilityRecord.get('eligibilityCategory'),\n            eligibilityCondition: riderEligibilityRecord.get('eligibilityCondition'),\n            from: riderEligibilityRecord.get('from'),\n            to: riderEligibilityRecord.get('to')\n          }\n        });\n        this.set('canShowRiderEligibilityFormModal', true);\n        this.set('riderEligibilityRecord', riderEligibilityRecord);\n      }\n    },\n\n    createRiderReasonEligibilityRecord() {\n      const riderEligibilityRecord = this.get('store').createRecord('rider-eligibility');\n      const riderEligibilityType = this.get('store').createRecord('eligibility-type');\n      riderEligibilityRecord.set('eligibilityType', riderEligibilityType);\n      riderEligibilityRecord.set('tempId', (0, _guid.guid)()); // temporary unique id for comparing during validations\n\n      this.set('riderEligibilityRecord', riderEligibilityRecord);\n      this.setProperties({\n        prevEligibilityRecord: {\n          eligibilityCategory: riderEligibilityRecord.get('eligibilityCategory'),\n          eligibilityCondition: riderEligibilityRecord.get('eligibilityCondition'),\n          from: riderEligibilityRecord.get('from'),\n          to: riderEligibilityRecord.get('to')\n        }\n      });\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    overlapDates(eligibility, eligibilities) {\n      const currCategoryName = eligibility.get('eligibilityCategory.name');\n      const currConditionName = eligibility.get('origEligCondName');\n      const from = (0, _moment.default)(eligibility.get('from')).startOf('day');\n      const to = (0, _moment.default)(eligibility.get('to')).startOf('day');\n      const eligibilityTempId = eligibility.get('tempId');\n      const eligibilityId = eligibility.get('id');\n      const filteredCurrEligibilities = eligibilities.filter(currEligibility => {\n        if (currEligibility.get('isSoftDeleted')) return false;\n        return true;\n      });\n      let overlap = false; // same conditional category with different conditoin eligibility can have overlap dates\n\n      const groupedEligibilities = _lodash.default.groupBy(filteredCurrEligibilities, riderEligibility => {\n        return riderEligibility.get('eligibilityCategory.name');\n      });\n\n      const categoryNameOverlaps = _lodash.default.map(groupedEligibilities, (currEligibilities, typeName) => {\n        const result = currEligibilities.filter(currEligibility => {\n          const currEligibilityTempId = currEligibility.get('tempId');\n          const currEligibilityId = currEligibility.get('id');\n          if (Ember.isPresent(currEligibilityTempId) && Ember.isPresent(eligibilityTempId) && currEligibilityTempId === eligibilityTempId || Ember.isPresent(currEligibilityId) && Ember.isPresent(eligibilityId) && currEligibilityId === eligibilityId) return false;\n          if (currCategoryName === typeName && currEligibility.get('isConditional') && currConditionName !== currEligibility.get('origEligCondName')) return false;\n          const currFrom = (0, _moment.default)(currEligibility.get('from')).startOf('day');\n          const currTo = (0, _moment.default)(currEligibility.get('to')).startOf('day');\n\n          if (from.isSameOrAfter(currFrom) && from.isSameOrBefore(currTo) || to.isSameOrAfter(currFrom) && to.isSameOrBefore(currTo) || from.isSameOrBefore(currFrom) && to.isSameOrAfter(currTo)) {\n            return true;\n          }\n\n          return false;\n        });\n        return result.length > 0 ? typeName : null;\n      });\n\n      const categoryNameOverlapsClean = _lodash.default.compact(categoryNameOverlaps);\n\n      if (categoryNameOverlapsClean.length > 0) {\n        overlap = true;\n      }\n\n      return overlap;\n    },\n\n    onSaveRiderServiceModeAndNeedRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderServiceNeeds = riderChangeSet.get('riderServiceNeeds');\n      const riderEligibilities = riderChangeSet.get('riderEligibilities');\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: 'Are you sure you want to save these changes?',\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          try {\n            riderServiceNeeds.forEach(async riderServiceNeed => {\n              if (riderServiceNeed.get('isSoftDeleted')) {\n                await riderServiceNeed.destroyRecord();\n              } else {\n                await riderServiceNeed.save();\n              }\n            });\n            riderEligibilities.forEach(async riderEligibility => {\n              riderEligibility.set('to', (0, _moment.default)(riderEligibility.get('to')).toDate());\n              riderEligibility.set('from', (0, _moment.default)(riderEligibility.get('from')).toDate());\n\n              if (riderEligibility.get('isSoftDeleted')) {\n                await riderEligibility.destroyRecord();\n              } else {\n                await riderEligibility.save();\n              }\n            });\n            await riderChangeSet.save();\n            notifications.success('Rider eligibility information successfully saved');\n            this.set('editAPI.isNewBtnDisabled', false);\n            this.set('editAPI.isEditBtnDisabled', false);\n            this.set('editAPI.isEditing', false);\n            tooltip.reset();\n          } catch (e) {\n            notifications.warning('Rider eligibility record failed to save');\n            tooltip.reset();\n            console.warn(e); // eslint-disable-line\n          }\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n      yield Promise.resolve();\n    }),\n\n    createServiceNeed(event, configServiceNeedTypesOption) {\n      const riderServiceNeeds = this.get('riderChangeSet.riderServiceNeeds');\n      const serviceNeed = riderServiceNeeds.find(riderServiceNeed => {\n        return riderServiceNeed.get('serviceNeedType.id') === configServiceNeedTypesOption.get('id');\n      });\n      let record = serviceNeed;\n\n      if (event.target.checked) {\n        if (Ember.isPresent(record)) {\n          record.set('isSoftDeleted', false);\n        } else {\n          record = this.get('store').createRecord('rider-service-need', {\n            serviceNeedType: configServiceNeedTypesOption\n          });\n          const riderChangeSet = this.get('riderChangeSet');\n          riderChangeSet.get('riderServiceNeeds').pushObject(record);\n          const riderServiceNeedRecord = this.set('riderServiceNeedRecord', record);\n          const rider = this.get('riderChangeSet').get('_internalModel');\n          riderServiceNeedRecord.set('rider', rider);\n        }\n      } else {\n        serviceNeed.set('isSoftDeleted', true);\n      }\n    },\n\n    actions: {\n      onOpen() {\n        this.toggleSelect();\n      },\n\n      onClose() {\n        this.toggleSelect();\n      },\n\n      onClickCheckBox(configServiceNeedTypesOption, event) {\n        const checkBox = Ember.$('input[name=checkbox_configServiceNeedTypesOption]:checked');\n        const checkboxCheckedLength = checkBox.length;\n        const checkboxChecked = checkBox;\n        const multipleCheckboxChecked = 'Multiple';\n        const configServiceNeeds = this.get('configServiceNeeds');\n        const configServiceNeedTypes = configServiceNeeds.map(serviceNeedType => serviceNeedType.get('displayName'));\n        Ember.set(configServiceNeedTypesOption, 'isChecked', event.target.checked);\n\n        if (checkboxCheckedLength > 1) {\n          this.set('title', multipleCheckboxChecked);\n        } else if (checkboxCheckedLength === 0) {\n          this.set('title', '');\n        } else if (checkboxCheckedLength === 1) {\n          const selectedCheckboxName = checkboxChecked[0].id;\n          const selectedCheckboxId = selectedCheckboxName.split('checkbox_configServiceNeedTypesOption')[1];\n          this.set('title', configServiceNeedTypes.objectAt(selectedCheckboxId));\n        }\n\n        this.createServiceNeed(event, configServiceNeedTypesOption);\n      },\n\n      onPowerSelectChange(record, selected) {\n        record.set('fareCategory', selected);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-form-modal-dialog/component\", [\"exports\", \"moment\", \"lodash\"], function (_exports, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['rider-relationship-options-select'],\n    rider: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    riderEligibilityRecord: null,\n    prevEligibilityRecord: null,\n    riderEligibilityCategoryDescription: null,\n    riderEligibilityConditionDescription: null,\n    eligibilityCondition: null,\n    riderEligibilityCondition: null,\n    aboveDegree: null,\n    belowDegree: null,\n    minimumNumberFt: null,\n    headerTitle: null,\n    eligibilityCategoryOptions: Ember.computed('configEligibilityCategories', 'riderChangeSet.{riderEligibilities,riderEligibilities.[]}', function () {\n      const configEligibilityCategories = this.get('configEligibilityCategories') || [];\n      const existingRiderEligibilityCategories = this.get('riderChangeSet.riderEligibilities') || [];\n      const existingEligibilityCategoryIDs = existingRiderEligibilityCategories.map(ec => ec.get('eligibilityCategory.id'));\n\n      if (configEligibilityCategories) {\n        return configEligibilityCategories.filter(configCategory => {\n          return !existingEligibilityCategoryIDs.includes(configCategory.get('name'));\n        });\n      }\n\n      return [];\n    }),\n    eligibilityConditionOptions: Ember.computed('configEligibilityConditionsTypes', 'riderChangeSet.{riderEligibilities,riderEligibilities.[]}', function () {\n      const configEligibilityConditionsTypes = this.get('configEligibilityConditionsTypes') || [];\n      return configEligibilityConditionsTypes;\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.setEligibilityCategoryAttribute = this.setEligibilityCategoryAttribute.bind(this);\n      this.setEligibilityCategoryDescription = this.setEligibilityCategoryDescription.bind(this);\n      this.setEligibilityConditionAttribute = this.setEligibilityConditionAttribute.bind(this);\n      this.setEligibilityConditionDescription = this.setEligibilityConditionDescription.bind(this);\n      const configEligibilityCategories = await this.get('rider').getConfigEligibilityCategories();\n      const configEligibilityConditionsTypes = await this.get('rider').getConfigEligibilityConditionsTypes();\n      this.setProperties({\n        configEligibilityCategories,\n        configEligibilityConditionsTypes\n      });\n      this.set('headerTitle', this.get('isCreatingNewEligibility') ? 'Add Eligibility' : 'Edit Eligibility');\n\n      if (this.get('isEditing')) {\n        const eligibilityCategoryName = this.get('riderEligibilityRecord.eligibilityCategory.displayName');\n        const eligibilityCategoryOptions = this.get('eligibilityCategoryOptions');\n        const eligibilitySelectedCategory = eligibilityCategoryOptions.filter(ele => ele.displayName === eligibilityCategoryName);\n        const eligibilityCategoryTypeValue = eligibilitySelectedCategory.length > 0 ? eligibilitySelectedCategory[0].value : null;\n        const eligibilityConditionName = this.get('riderEligibilityRecord.eligibilityCondition.displayName');\n        const eligibilityConditionOptions = this.get('eligibilityConditionOptions');\n        const eligibilitySelectedConditionOptions = eligibilityConditionOptions.filter(ele => ele.displayName === eligibilityConditionName);\n\n        if (Ember.isPresent(eligibilityCategoryTypeValue) && eligibilityCategoryTypeValue.conditional.toUpperCase() === 'YES') {\n          this.set('riderEligibilityCondition', 'YES');\n          const eligibilityConditionTypeValue = eligibilitySelectedConditionOptions[0].value;\n          this.set('riderEligibilityCategoryDescription', Ember.isPresent(eligibilityCategoryTypeValue) ? eligibilityCategoryTypeValue.description : '');\n          this.set('riderEligibilityConditionDescription', eligibilityConditionTypeValue.description);\n          this.set('eligibilityCondition', eligibilityConditionTypeValue);\n\n          if (eligibilityConditionTypeValue.displayName.toLowerCase() === 'weather') {\n            this.set('eligibilityCondition.name', 'weather');\n            const AboveDegree = eligibilityConditionTypeValue['Above(°F)'];\n            const belowDegree = eligibilityConditionTypeValue['Below(°F)'];\n            this.set('riderEligibilityConditionDescription', eligibilitySelectedConditionOptions[0].description);\n            this.set('aboveDegree', AboveDegree);\n            this.set('belowDegree', belowDegree);\n          }\n\n          if (eligibilityConditionTypeValue.displayName.toLowerCase() === 'itp walking distance') {\n            this.set('eligibilityCondition.name', 'itp walking distance');\n            this.set('minimumNumberFt', eligibilityConditionTypeValue['Minimum Number(ft)']);\n            this.set('riderEligibilityConditionDescription', eligibilitySelectedConditionOptions[0].description);\n          }\n        } else {\n          this.set('riderEligibilityCategoryDescription', Ember.isPresent(eligibilityCategoryTypeValue) ? eligibilityCategoryTypeValue.description : '');\n        }\n      }\n    },\n\n    setEligibilityConditionAttribute(configEligibilityConditionType) {\n      let isCSType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const riderEligibilityRecord = this.get('riderEligibilityRecord');\n\n      if (isCSType) {\n        const configEligibilityConditionName = configEligibilityConditionType.get('name');\n        const eligibilityConditionRecord = this.get('store').peekRecord('eligibility-condition', configEligibilityConditionName);\n        riderEligibilityRecord.set('origEligCondName', configEligibilityConditionName);\n        riderEligibilityRecord.set('eligibilityCondition', eligibilityConditionRecord);\n      } else {\n        const configEligibilityConditionName = configEligibilityConditionType.get('id');\n        const eligibilityConditionRecord = configEligibilityConditionType;\n        riderEligibilityRecord.set('origEligCondName', configEligibilityConditionName);\n        riderEligibilityRecord.set('eligibilityCondition', eligibilityConditionRecord);\n      }\n\n      this.get('setEligibilityConditionDescription')(configEligibilityConditionType, isCSType);\n    },\n\n    setEligibilityConditionDescription(selectedEligibilityConditionType, isCSType) {\n      const configEligibilityConditionTypeValue = isCSType ? selectedEligibilityConditionType.get('value') : selectedEligibilityConditionType.get('data');\n      const description = configEligibilityConditionTypeValue ? configEligibilityConditionTypeValue.description : null;\n      const displayName = selectedEligibilityConditionType.get('displayName');\n      const displayNameLower = displayName ? displayName.toLowerCase() : '';\n      this.set('riderEligibilityConditionDescription', description);\n\n      if (displayNameLower === 'weather') {\n        const AboveDegree = configEligibilityConditionTypeValue['Above(°F)'];\n        const belowDegree = configEligibilityConditionTypeValue['Below(°F)'];\n        this.set('riderEligibilityConditionDescription', description);\n        this.set('aboveDegree', AboveDegree);\n        this.set('belowDegree', belowDegree);\n      }\n\n      if (displayNameLower === 'itp walking distance') {\n        this.set('minimumNumberFt', configEligibilityConditionTypeValue['Minimum Number(ft)']);\n        this.set('riderEligibilityConditionDescription', description);\n      }\n    },\n\n    setEligibilityCategoryDescription(selectedConfigEligibilityCategory, isCSType) {\n      const riderEligibilityRecord = this.get('riderEligibilityRecord');\n      const configEligibilityCategoryValue = isCSType ? selectedConfigEligibilityCategory.get('value') : selectedConfigEligibilityCategory.get('data');\n      this.set('riderEligibilityCategoryDescription', configEligibilityCategoryValue.description);\n      this.set('riderEligibilityCondition', configEligibilityCategoryValue.conditional.toUpperCase());\n\n      if (this.get('riderEligibilityCondition') === 'NO') {\n        this.set('riderEligibilityConditionDescription', '');\n        riderEligibilityRecord.set('origEligCondName');\n        riderEligibilityRecord.set('eligibilityCondition');\n      }\n    },\n\n    setEligibilityCategoryAttribute(configEligibilityCategory) {\n      let isCSType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const riderEligibilityRecord = this.get('riderEligibilityRecord');\n\n      if (isCSType) {\n        const configEligibilityCategoryName = configEligibilityCategory.get('name');\n        const eligibilityCategoryRecord = this.get('store').peekRecord('eligibility-category', configEligibilityCategoryName);\n        riderEligibilityRecord.set('origEligCateName', configEligibilityCategoryName);\n        riderEligibilityRecord.set('eligibilityCategory', eligibilityCategoryRecord);\n      } else {\n        const configEligibilityCategoryName = configEligibilityCategory.get('id');\n        const eligibilityCategoryRecord = configEligibilityCategory;\n        riderEligibilityRecord.set('origEligCateName', configEligibilityCategoryName);\n        riderEligibilityRecord.set('eligibilityCategory', eligibilityCategoryRecord);\n      }\n\n      this.get('setEligibilityCategoryDescription')(configEligibilityCategory, isCSType);\n    },\n\n    validateRiderEligibilityRequiredField(riderEligibilityRecord) {\n      const tooltip = this.get('tooltip');\n      const startAndEndDateErrors = this.validateStartAndEndDate(riderEligibilityRecord);\n      const categoryConditionalErrors = this.validateCategoryConditional(riderEligibilityRecord);\n      const errors = (0, _lodash.compact)([].concat(startAndEndDateErrors).concat(categoryConditionalErrors));\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    validateEligibilityDatesCannotOverlap(riderEligibilityRecord) {\n      const riderId = riderEligibilityRecord.get('rider.id');\n      const fromDate = (0, _moment.default)(riderEligibilityRecord.from).format('MM-DD-YYYY');\n      const toDate = (0, _moment.default)(riderEligibilityRecord.to).format('MM-DD-YYYY');\n      const eligibilityRecords = this.store.peekAll('rider-eligibility').toArray();\n      const matchedRecord = eligibilityRecords.some(record => {\n        if (record.id && record.get('rider.id') === riderId) {\n          const existingFromDate = (0, _moment.default)(record.from).format('MM-DD-YYYY');\n          const existingToDate = (0, _moment.default)(record.to).format('MM-DD-YYYY');\n\n          if (record.id !== riderEligibilityRecord.id) {\n            return existingFromDate === fromDate || existingToDate === toDate;\n          }\n        }\n      });\n\n      if (matchedRecord) {\n        return true;\n      }\n\n      return false;\n    },\n\n    validateStartAndEndDate(riderEligibilityRecord) {\n      const startDate = riderEligibilityRecord.get('from');\n      const endDate = riderEligibilityRecord.get('to');\n      const errors = [];\n\n      if (!startDate) {\n        errors.push({\n          key: 'from',\n          validation: ['Start Date is required']\n        });\n      }\n\n      if (!endDate) {\n        errors.push({\n          key: 'to',\n          validation: ['End Date is required']\n        });\n      }\n\n      return errors;\n    },\n\n    validateCategoryConditional(riderEligibilityRecord) {\n      const errors = [];\n      const eligibilityCategory = riderEligibilityRecord.get('eligibilityCategory');\n      const eligibilityCondition = riderEligibilityRecord.get('eligibilityCondition');\n      const categoryExist = Ember.isPresent(eligibilityCategory.get('id'));\n      const conditional = categoryExist && eligibilityCategory.get('data.conditional').toUpperCase() === 'YES';\n\n      if (!categoryExist) {\n        errors.push({\n          key: 'eligibilityCategory',\n          validation: ['Category is required']\n        });\n      }\n\n      if (categoryExist && conditional && !Ember.isPresent(eligibilityCondition.get('id'))) {\n        errors.push({\n          key: 'eligibilityCondition',\n          validation: ['Condition is required']\n        });\n      }\n\n      return errors;\n    },\n\n    validateEndDateGreaterThanStartDate(riderEligibilityRecord) {\n      const startDate = (0, _moment.default)(riderEligibilityRecord.from).toDate();\n      const endDate = (0, _moment.default)(riderEligibilityRecord.to).toDate();\n\n      if (startDate && endDate) {\n        const endDateValidate = (endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24);\n\n        if (endDateValidate < 0) {\n          return true;\n        }\n\n        return false;\n      }\n    },\n\n    showValidateToolTip(message) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: message,\n        primaryActionText: 'Ok',\n        primaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    undoEligibility() {\n      let rollbackNew = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      const riderEligibilityRecord = this.get('riderEligibilityRecord');\n      const prevEligibilityRecord = this.get('prevEligibilityRecord');\n\n      if (Ember.isPresent(prevEligibilityRecord.eligibilityCategory.get('content')) || Ember.isPresent(prevEligibilityRecord.eligibilityCondition.get('content')) || Ember.isPresent(prevEligibilityRecord.from) || Ember.isPresent(prevEligibilityRecord.to)) {\n        riderEligibilityRecord.set('eligibilityCategory', prevEligibilityRecord.eligibilityCategory);\n        riderEligibilityRecord.set('eligibilityCondition', prevEligibilityRecord.eligibilityCondition);\n        riderEligibilityRecord.set('from', prevEligibilityRecord.from);\n        riderEligibilityRecord.set('to', prevEligibilityRecord.to);\n        this.setEligibilityCategoryAttribute(riderEligibilityRecord.get('eligibilityCategory'), false);\n        this.setEligibilityConditionAttribute(riderEligibilityRecord.get('eligibilityCondition'), false);\n      } else if (riderEligibilityRecord.isNew && rollbackNew) {\n        riderEligibilityRecord.rollbackAttributes();\n      }\n    },\n\n    actions: {\n      closeEligibilityInfoDialog() {\n        this.undoEligibility(true);\n        this.set('canShowRiderEligibilityFormModal', false);\n      },\n\n      onEligibilityCategoryChange(configEligibilityCategory) {\n        this.setEligibilityCategoryAttribute(configEligibilityCategory, true);\n      },\n\n      onEligibilityConditionTypeChange(configEligibilityConditionType) {\n        this.setEligibilityConditionAttribute(configEligibilityConditionType, true);\n      },\n\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onUndoEligibility() {\n        this.undoEligibility(false);\n      },\n\n      onTick() {\n        const riderEligibilityRecord = this.get('riderEligibilityRecord');\n        const eligibilityRequiredFields = this.validateRiderEligibilityRequiredField(riderEligibilityRecord);\n        const endDateGreaterThanStartDate = this.validateEndDateGreaterThanStartDate(riderEligibilityRecord);\n\n        if (endDateGreaterThanStartDate) {\n          this.showValidateToolTip('End Date must be after Start Date');\n        } else if (eligibilityRequiredFields) {\n          this.get('onRiderReasonEligibilitySave')();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-form-modal-dialog/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"SYGhidei\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"rider-eligibility-info-detail-overlay\\\",\\\"eligibility-info-detail-container\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-eligibility-info-detail-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-rider-info-detail-header\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"add-eligibility-info-title\\\"],[9],[0,\\\" \\\"],[1,[21,\\\"headerTitle\\\"],false],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"actions\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"help-div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-question-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTick\\\"],null]],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeEligibilityInfoDialog\\\"],null]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-3 rider-eligibility-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 mb-3\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Category\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderEligibilityRecord\\\",\\\"eligibilityCategory\\\"]],[23,[\\\"eligibilityCategoryOptions\\\"]],false,false,[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityCategoryChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                          \\\"],[1,[22,2,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0 eligibility-category-list\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"3\\\",true,[23,[\\\"riderEligibilityCategoryDescription\\\"]]]]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Condition\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"riderEligibilityCondition\\\"]],\\\"YES\\\"],null]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderEligibilityRecord\\\",\\\"eligibilityCondition\\\"]],[23,[\\\"eligibilityConditionOptions\\\"]],false,false,[27,\\\"action\\\",[[22,0,[]],\\\"onEligibilityConditionTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\"],[true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"eligibility-condition-note\\\"],[9],[0,\\\"Only applies if working with the 'Conditional' category.\\\"],[10],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0 condition-desc\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"riderEligibilityConditionDescription\\\"]]]]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"class\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,\\\"eligibility-start-date\\\",false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderEligibilityRecord\\\"]],\\\"from\\\"],null],[23,[\\\"riderEligibilityRecord\\\",\\\"from\\\"]]]]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"class\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,\\\"eligibility-end-date\\\",false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderEligibilityRecord\\\"]],\\\"to\\\"],null],[23,[\\\"riderEligibilityRecord\\\",\\\"to\\\"]]]]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-eligibility\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"eligibilityCondition\\\",\\\"name\\\"]],\\\"weather\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Above(F)\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-2 pl-0\\\"],[9],[0,\\\"\\\\n                          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"aboveDegree\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-3 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Below(F)\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-2 pl-0\\\"],[9],[0,\\\"\\\\n                          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"belowDegree\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"weather eligibility is configured at above 89(F) and below\\\\n                            33(F)\\\\n                          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"eligibilityCondition\\\",\\\"name\\\"]],\\\"itp walking distance\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-5 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Number of\\\\n                          Feet(ft)\\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-7 pl-0\\\"],[9],[0,\\\"\\\\n                          \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"minimumNumberFt\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNewBtnDisabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"Walking Distance is configured at 350 feet\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-form-modal-dialog/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    store: Ember.inject.service(),\n    config: _config.default,\n    disableIcons: false,\n    editAPI: null,\n    disableIconsPlus: Ember.computed('disableIcons', 'editAPI.isEditBtnDisabled', function () {\n      return this.get('disableIcons') || !this.get('editAPI.isEditBtnDisabled');\n    }),\n    disableIconsEdit: Ember.computed('disableIcons', 'editAPI.isEditBtnDisabled', 'checkedRows.[]', function () {\n      return this.get('disableIcons') || !this.get('editAPI.isEditBtnDisabled') || !this.get('checkedRows.firstObject');\n    }),\n    recordSetter: Ember.observer('riderId', async function () {\n      const filteredData = await this.getRiderEligibilities('rider-eligibility');\n      this.set('records', filteredData);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('isSearchAllowed', false);\n      const riderChangeSet = this.get('riderChangeSet');\n\n      if (riderChangeSet.get('status') === 'Archived') {\n        this.set('disableIcons', true);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n\n      this.get('selectedRow');\n    },\n\n    async getRiderEligibilities(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const riderId = this.get('riderChangeSet.id');\n      let activeData = store.peekAll(modelName) || [];\n\n      if (Ember.isPresent(this.get('config.fetchModelData'))) {\n        activeData = (await store.findAll(modelName)) || [];\n      }\n\n      if (Ember.isPresent(this.get('config.queryModelData'))) {\n        const queryParams = this.get('queryParams') || {};\n        activeData = await store.query(modelName, queryParams);\n      }\n\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        return data.get('rider.id') === riderId && !data.get('isSoftDeleted');\n      });\n      return filteredData;\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const filteredData = await this.getRiderEligibilities(modelName, params);\n      return filteredData;\n    },\n\n    actions: {\n      onPlusIconClick() {\n        this.set('isCreatingNewEligibility', true);\n        this.set('canShowRiderEligibilityFormModal', true);\n        this.get('createRiderReasonEligibilityRecord')();\n      },\n\n      onDeleteIconClick() {\n        const eligibilityRecord = this.get('checkedRows.firstObject');\n        this.get('onDeleteRiderReasonEligibility')(eligibilityRecord);\n      },\n\n      onEditIconClick() {\n        const eligibilityRecord = this.get('checkedRows.firstObject');\n        this.set('isCreatingNewEligibility', false);\n        this.get('onEditRiderReasonEligibility')(eligibilityRecord);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-eligibility',\n    rowComponent: 'table/rows/text-formatted-row',\n    modelName: 'rider-eligibility',\n    rowSelectionType: 'radio',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    title: 'Service Reason Eligibility',\n    columns: [{\n      id: 'Type',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Eligibility Category',\n      valuePath: 'eligibilityCategory.displayName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 190\n    }, {\n      id: 'Condition',\n      index: 1,\n      type: 'text',\n      isKey: true,\n      label: 'Eligibility Condition',\n      valuePath: 'conditionDisplayName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 280\n    }, {\n      id: 'StartDate',\n      index: 2,\n      type: 'date',\n      label: 'StartDate',\n      valuePath: 'from',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'EndDate',\n      index: 3,\n      type: 'date',\n      label: 'EndDate',\n      valuePath: 'to',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VoBPLbVw\",\n    \"block\": \"{\\\"symbols\\\":[\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"table-component-title data-test-column-title\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"config\\\",\\\"title\\\"]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableIconsEdit\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableIconsEdit\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEditIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"table-component-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableIconsPlus\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlusIconClick\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-component-body\\\"],[12,\\\"onScroll\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScroll\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"extra\\\"],[false,true,23,[27,\\\"hash\\\",null,[[\\\"options\\\",\\\"checkAll\\\",\\\"uncheckAll\\\",\\\"dirtyCheck\\\",\\\"hasPendingChanges\\\",\\\"disableRowSelection\\\",\\\"enableWarningRowChangeAlert\\\"],[[23,[\\\"config\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hasPendingChanges\\\"],null],[23,[\\\"disableRowSelection\\\"]],[23,[\\\"enableWarningRowChangeAlert\\\"]]]]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showTableHeaderRow\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/template.hbs' @ L33:C8) \\\"],null]],[[\\\"onColumnClick\\\",\\\"onColumnResized\\\",\\\"iconSortable\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onColumnResize\\\"],null],\\\"fa fa-sort\\\",\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/template.hbs' @ L44:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\",\\\"onRowClick\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"config\\\",\\\"rowComponent\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/template.hbs' @ L51:C11) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[23,[\\\"fetchDataTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-eligibility/eligibility-table/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-eligibility/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"hKhDQpHY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"configServiceNeedTypesOption\\\",\\\"index\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 rider-eligibility-wrapper\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"rider-management-widget/rider-eligibility/eligibility-table\\\",null,[[\\\"tableRef\\\",\\\"editAPI\\\",\\\"isCreatingNewEligibility\\\",\\\"riderEligibilities\\\",\\\"riderChangeSet\\\",\\\"canShowRiderEligibilityFormModal\\\",\\\"createRiderReasonEligibilityRecord\\\",\\\"onDeleteRiderReasonEligibility\\\",\\\"onEditRiderReasonEligibility\\\",\\\"riderId\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"editAPI\\\"]],[23,[\\\"isCreatingNewEligibility\\\"]],[23,[\\\"riderEligibilities\\\"]],[23,[\\\"riderChangeSet\\\"]],[23,[\\\"canShowRiderEligibilityFormModal\\\"]],[23,[\\\"createRiderReasonEligibilityRecord\\\"]],[23,[\\\"onDeleteRiderReasonEligibility\\\"]],[23,[\\\"onEditRiderReasonEligibility\\\"]],[23,[\\\"riderId\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 pl-0 rider-eligibility-service-mode\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"p-2\\\"],[9],[0,\\\"Service Mode Eligibility\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-3\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-1 pl-4 pr-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"brokerEligible\\\"]]],null]],null],[23,[\\\"riderChangeSet\\\",\\\"brokerEligible\\\"]]]]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 p-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-form-label  p-0\\\"],[9],[0,\\\"Broker Eligible\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-3\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-1 pl-4 pr-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"taxiEligible\\\"]]],null]],null],[23,[\\\"riderChangeSet\\\",\\\"taxiEligible\\\"]]]]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 p-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-form-label p-0\\\"],[9],[0,\\\"Taxi Eligible\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-3\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-1 pl-4 pr-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"itpEligible\\\"]]],null]],null],[23,[\\\"riderChangeSet\\\",\\\"itpEligible\\\"]]]]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 p-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-form-label  p-0\\\"],[9],[0,\\\"ITP Eligible\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mb-3\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-5 col-form-label p-0 pr-2\\\"],[9],[0,\\\"\\\\n                    Walking speed -Minimum Miles per Hour\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-2 p-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"form-components/number\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\",\\\"value\\\"],[\\\"form-components-text\\\",[27,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]],[27,\\\"not\\\",[[23,[\\\"riderChangeSet\\\",\\\"itpEligible\\\"]]],null],\\\"disabled\\\"],null],[27,\\\"hash\\\",null,[[\\\"min\\\",\\\"isFloat\\\"],[0,false]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"walkingSpeed\\\"]]],null]],null],[23,[\\\"riderChangeSet\\\",\\\"walkingSpeed\\\"]]]]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pt-3\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Fare Category\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"dob\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pl-0\\\"],[9],[0,\\\"Fare Category\\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderChangeSet\\\",\\\"fareCategory\\\"]],[23,[\\\"configFarecategoryTypes\\\"]],false,[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onPowerSelectChange\\\",[23,[\\\"riderChangeSet\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                      \\\"],[1,[22,4,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 pl-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Service Needs\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"dob\\\"],[11,\\\"class\\\",\\\"col-sm-4 col-form-label col-form-label-sm pl-0\\\"],[9],[0,\\\"Service Needs\\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-8 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\",\\\"disabled\\\",\\\"renderInPlace\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]]],null],true]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/rider-management-widget/rider-eligibility/template.hbs' @ L117:C27) \\\"],null]],[[\\\"class\\\"],[\\\"serviceNeeds select\\\"]],{\\\"statements\\\":[[0,\\\"                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title\\\"],[12,\\\"title\\\",[28,[[21,\\\"title\\\"]]]],[9],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n                          \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n                          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/rider-management-widget/rider-eligibility/template.hbs' @ L124:C27) \\\"],null]],[[\\\"class\\\"],[\\\"serviceNeeds options\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"configServiceNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"option\\\"],[9],[0,\\\"\\\\n                                      \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"checkbox_configServiceNeedTypesOption\\\"],[12,\\\"id\\\",[28,[\\\"checkbox_configServiceNeedTypesOption\\\",[22,3,[]]]]],[12,\\\"checked\\\",[22,2,[\\\"isChecked\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickCheckBox\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n                                      \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_configServiceNeedTypesOption\\\",[22,3,[]]]]],[12,\\\"title\\\",[28,[[22,2,[\\\"displayName\\\"]]]]],[9],[1,[22,2,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n                                  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowRiderEligibilityFormModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"rider-management-widget/rider-eligibility/eligibility-form-modal-dialog\\\",null,[[\\\"elementId\\\",\\\"canShowRiderEligibilityFormModal\\\",\\\"riderEligibilityRecord\\\",\\\"prevEligibilityRecord\\\",\\\"onRiderReasonEligibilitySave\\\",\\\"isEditing\\\",\\\"isCreatingNewEligibility\\\"],[\\\"eligibility-form-modal-dialog\\\",[23,[\\\"canShowRiderEligibilityFormModal\\\"]],[23,[\\\"riderEligibilityRecord\\\"]],[23,[\\\"prevEligibilityRecord\\\"]],[23,[\\\"onRiderReasonEligibilitySave\\\"]],[23,[\\\"editAPI\\\",\\\"isEditing\\\"]],[23,[\\\"isCreatingNewEligibility\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-eligibility/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-funding/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"moment\"], function (_exports, _emberConcurrency, _lodash, _unwrapProxy, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    riderFundingRecord: null,\n    classNames: ['rider-reasonDenied-options-select'],\n    riderFundingNameOptions: null,\n    riderId: Ember.computed.readOnly('riderChangeSet.id'),\n    tableRef: null,\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    startDate: Ember.computed('riderFundingRecord.startDate', function () {\n      const startDate = this.get('riderFundingRecord.startDate');\n      return startDate ? startDate : null;\n    }),\n    endDate: Ember.computed('riderFundingRecord.endDate', function () {\n      const endDate = this.get('riderFundingRecord.endDate');\n      return endDate ? endDate : null;\n    }),\n    selectedFundingNameObject: Ember.computed('riderFundingRecord.fundingAgencyName', function () {\n      const riderFundingNameOptions = this.get('riderFundingNameOptions');\n      const fundingAgencyName = this.get('riderFundingRecord.fundingAgencyName');\n      if (Ember.isEmpty(riderFundingNameOptions)) return null;\n      return riderFundingNameOptions.find(option => {\n        return option.name === fundingAgencyName;\n      });\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.onNewRiderFundingRecord = this.onNewRiderFundingRecord.bind(this);\n      this.onEditRiderFundingRecord = this.onEditRiderFundingRecord.bind(this);\n      this.onDeleteRiderFundingRecord = this.onDeleteRiderFundingRecord.bind(this);\n      this.onUndoRiderFundingRecord = this.onUndoRiderFundingRecord.bind(this);\n      this.OnTableRowClick = this.OnTableRowClick.bind(this);\n      this.validateRiderFundingRequiredField = this.validateRiderFundingRequiredField.bind(this);\n      this.checkFundedFutureTripsAndBookings = this.checkFundedFutureTripsAndBookings.bind(this);\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onNewRiderFundingRecord = this.get('onNewRiderFundingRecord');\n      const onSaveRiderFundingRecord = this.get('onSaveRiderFundingRecord');\n      const onEditRiderFundingRecord = this.get('onEditRiderFundingRecord');\n      const onDeleteRiderFundingRecord = this.get('onDeleteRiderFundingRecord');\n      const onUndoRiderFundingRecord = this.get('onUndoRiderFundingRecord');\n      const riderFundingAgencies = await this.get('rider').getConfigFundingAgencies();\n      const riderFundingNameOptions = riderFundingAgencies.map(Rfr => {\n        return {\n          displayName: Rfr.get('value.displayName'),\n          name: Rfr.get('name')\n        };\n      });\n      this.setProperties({\n        riderFundingNameOptions\n      });\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderFundingRecord,\n          newAction: onNewRiderFundingRecord,\n          deleteAction: onDeleteRiderFundingRecord,\n          editAction: onEditRiderFundingRecord,\n          undoAction: onUndoRiderFundingRecord,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: true,\n          isDeleteBtnDisabled: true,\n          isEditing: false\n        });\n      });\n    },\n\n    OnTableRowClick(selectedRiderFunding) {\n      this.get('onUndoRiderFundingRecord')();\n      this.set('riderFundingRecord', (0, _unwrapProxy.unwrapProxy)(selectedRiderFunding));\n      this.set('editAPI.isEditBtnDisabled', false);\n      this.set('editAPI.isDeleteBtnDisabled', false);\n    },\n\n    actions: {\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onRiderNameChange(record, value) {\n        const riderFundingAgency = this.get('store').peekRecord('funding-agency', value.name);\n        record.set('fundingAgencyName', value.name);\n        record.set('fundingAgency', riderFundingAgency);\n      }\n\n    },\n\n    onNewRiderFundingRecord() {\n      const riderFundingRecord = this.get('store').createRecord('rider-funding');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n      }\n\n      this.set('riderFundingRecord', riderFundingRecord);\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    onEditRiderFundingRecord() {\n      const riderFundingRecordToEdit = this.get('tableRef.checkedRows.firstObject');\n      this.set('riderFundingRecord', riderFundingRecordToEdit);\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    confirmRiderFundingDeletion(canDelete, riderFundingRecord) {\n      const tip = canDelete ? 'Are you sure you want to delete this funding record?' : 'Unable to delete. Rider has active trips that use this funding agency.';\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n\n      if (canDelete) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: tip,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            await riderFundingRecord.destroyRecord();\n            this.get('tableRef').refreshData(); //to refresh table data\n\n            notifications.success('Funding information successfully deleted');\n            this.set('editAPI.isEditBtnDisabled', true);\n            this.set('editAPI.isDeleteBtnDisabled', true);\n            tooltip.reset();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      } else {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: tip,\n          warning: true,\n          hasOverlay: true,\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            tooltip.reset();\n          },\n          closeAction: () => {\n            tooltip.reset();\n          }\n        });\n      }\n    },\n\n    async checkFundedFutureTripsAndBookings(riderFundingRecord) {\n      const currentDate = (0, _moment.default)().format();\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const legFilter = `and(eq('riderId','${rider.id}'),eq('fundingAgencyName',${riderFundingRecord.get('fundingAgencyName')}),gt('requestTime',${currentDate}))`;\n      const futureBookingIds = await this.get('booking').getFutureBookingsByLeg(legFilter);\n      const tripFilter = `in(booking,('${futureBookingIds}'))`;\n      const futureTrips = await this.get('store').query('trip', {\n        filter: tripFilter\n      });\n      const subscriptionFilter = `and(eq('riderId','${rider.id}'),eq('fundingAgencyName',${riderFundingRecord.get('fundingAgencyName')}),lt('startDate',${currentDate}),gt('endDate',${currentDate}))`;\n      const subscriptionCandidates = await this.get('booking').getSubscriptions(subscriptionFilter);\n      const futureBookingOccurrences = subscriptionCandidates.find(subscription => subscription.get('remainingOccurrences') > 0);\n      return futureBookingIds.length < 1 && futureTrips.length < 1 && !futureBookingOccurrences;\n    },\n\n    async onDeleteRiderFundingRecord() {\n      const riderFundingRecordToDelete = this.get('tableRef.checkedRows.firstObject');\n      this.set('riderFundingRecord', riderFundingRecordToDelete);\n      const canDelete = await this.checkFundedFutureTripsAndBookings(riderFundingRecordToDelete);\n      return this.confirmRiderFundingDeletion(canDelete, riderFundingRecordToDelete);\n    },\n\n    async onUndoRiderFundingRecord() {\n      const riderFundingId = this.get('rider').setLastAccessedRiderFundingId();\n      const riderFundingRecord = this.get('riderFundingRecord');\n      const selectedRow = this.get('selectedRow');\n\n      if (riderFundingId !== null) {\n        this.set('editAPI.isEditBtnDisabled', false);\n        this.set('editAPI.isDeleteBtnDisabled', false);\n      }\n\n      if (Ember.isEmpty(selectedRow)) {\n        this.set('editAPI.isEditBtnDisabled', true);\n        this.set('editAPI.isDeleteBtnDisabled', true);\n      }\n\n      if (Ember.isPresent(riderFundingRecord)) {\n        riderFundingRecord.rollbackAttributes();\n        const fundingAgencyName = riderFundingRecord.get('fundingAgencyName');\n\n        if (Ember.isPresent(fundingAgencyName)) {\n          const riderFundingAgency = this.get('store').peekRecord('funding-agency', fundingAgencyName);\n          riderFundingRecord.set('fundingAgency', riderFundingAgency);\n        }\n      }\n\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n      this.set('templateErrors', {});\n    },\n\n    validateRiderFundingRequiredField(riderFundingRecord) {\n      const tooltip = this.get('tooltip');\n      const nameAndstartAndEndDateErrors = this.validateFundingStartAndEndDate(riderFundingRecord);\n      const errors = (0, _lodash.compact)([].concat(nameAndstartAndEndDateErrors));\n      const errorsObject = errors.reduce(function (result, item) {\n        const key = item.key;\n        result[key] = true;\n        return result;\n      }, {});\n      this.set('templateErrors', errorsObject);\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    validateFundingStartAndEndDate(riderFundingRecord) {\n      const fundingAgencyName = riderFundingRecord.get('fundingAgencyName');\n      const startDate = riderFundingRecord.get('startDate');\n      const endDate = riderFundingRecord.get('endDate');\n      const errors = [];\n\n      if (!fundingAgencyName) {\n        errors.push({\n          key: 'fundingAgencyName',\n          validation: ['Name is required']\n        });\n      }\n\n      if (!startDate) {\n        errors.push({\n          key: 'startDate',\n          validation: ['Start Date is required']\n        });\n      }\n\n      if (!endDate) {\n        errors.push({\n          key: 'endDate',\n          validation: ['End Date is required']\n        });\n      }\n\n      if (startDate && endDate) {\n        const startDateObj = new Date(riderFundingRecord.startDate);\n        const endDateObj = new Date(riderFundingRecord.endDate);\n        const endDateValidate = (endDateObj.getTime() - startDateObj.getTime()) / (1000 * 3600 * 24);\n\n        if (endDateValidate < 0) {\n          errors.push({\n            key: 'endDate',\n            validation: ['End Date must be after Start Date.']\n          });\n        }\n      }\n\n      return errors;\n    },\n\n    onSaveRiderFundingRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const riderFundingRecord = this.get('riderFundingRecord');\n      const isValidFundingRequiredField = this.validateRiderFundingRequiredField(riderFundingRecord);\n      const successMsg = 'Funding information successfully saved';\n      const selectedRow = this.get('selectedRow');\n\n      if (isValidFundingRequiredField) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              riderFundingRecord.set('rider', rider);\n              const rS = await riderFundingRecord.save();\n              this.get('rider').setLastAccessedRiderFundingId(rS.id);\n              this.get('tableRef').refreshData();\n\n              if (this.get('editAPI.isEditing')) {\n                notifications.success(successMsg);\n                this.set('editAPI.isEditing', false);\n                this.set('editAPI.isNewBtnDisabled', false);\n\n                if (Ember.isEmpty(selectedRow)) {\n                  this.set('editAPI.isEditBtnDisabled', true);\n                  this.set('editAPI.isDeleteBtnDisabled', true);\n                } else {\n                  this.set('editAPI.isEditBtnDisabled', false);\n                  this.set('editAPI.isDeleteBtnDisabled', false);\n                }\n              } else {\n                notifications.success(successMsg);\n                this.set('editAPI.isNewBtnDisabled', false);\n              }\n\n              tooltip.reset();\n            } catch (e) {\n              notifications.warning('Funding record failed to save');\n              tooltip.reset();\n              console.warn(e); // eslint-disable-line\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      }\n\n      yield Promise.resolve();\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-funding/funding-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-funding/funding-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    recordSetter: Ember.observer('riderId', async function () {\n      const filteredData = await this.getRiderFundings('rider-funding');\n      this.set('records', filteredData);\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async getRiderFundings(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let riderFundingAgencies = this.get('riderFundingAgencies');\n\n      if (Ember.isEmpty(riderFundingAgencies)) {\n        riderFundingAgencies = await this.get('rider').getConfigFundingAgencies();\n        this.set('riderFundingAgencies', riderFundingAgencies);\n      }\n\n      let activeData = store.peekAll(modelName) || [];\n      activeData = activeData.filter(funding => funding.get('rider.id') === this.get('riderId'));\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData;\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const filteredData = await this.getRiderFundings(modelName, params);\n      return filteredData;\n    },\n\n    actions: {\n      onRowClick(currentRow) {\n        this._super(currentRow);\n\n        this.get('OnTableRowClick')(currentRow);\n        this.get('rider').setLastAccessedRiderFundingId(currentRow.get('id'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-funding/funding-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-suspension/suspension-table',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider-funding',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    fetchModelData: true,\n    title: 'Funding Agencies',\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Name',\n      valuePath: 'fundingAgencyDisplayName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 250\n    }, {\n      id: 'startDate',\n      index: 1,\n      type: 'date',\n      label: 'Start Date',\n      valuePath: 'startDate',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'endDate',\n      index: 2,\n      type: 'date',\n      label: 'End Date',\n      valuePath: 'endDate',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'notes',\n      index: 3,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 600\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-funding/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7q2Om1cp\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 rider-funding-table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-funding/funding-table\\\",null,[[\\\"tableRef\\\",\\\"OnTableRowClick\\\",\\\"riderId\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"OnTableRowClick\\\"]],[23,[\\\"riderId\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mt-3 rider-funding-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Funding Agency\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-funding\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Reason\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-sm-6 pl-0 \\\",[27,\\\"if\\\",[[23,[\\\"templateErrors\\\",\\\"fundingAgencyName\\\"]],\\\"rm-field-error\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"selectedFundingNameObject\\\"]],[23,[\\\"riderFundingNameOptions\\\"]],[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onRiderNameChange\\\",[23,[\\\"riderFundingRecord\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-funding\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Start Date\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-sm-6 pl-0 \\\",[27,\\\"if\\\",[[23,[\\\"templateErrors\\\",\\\"startDate\\\"]],\\\"rm-field-error\\\"],null]]]],[9],[0,\\\"\\\\n                             \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderFundingRecord\\\"]],\\\"startDate\\\"],null],[23,[\\\"startDate\\\"]]]]],false],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-funding\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"End Date\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-sm-6 pl-0 \\\",[27,\\\"if\\\",[[23,[\\\"templateErrors\\\",\\\"endDate\\\"]],\\\"rm-field-error\\\"],null]]]],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"if\\\",[[23,[\\\"templateError\\\",\\\"endDate\\\"]],\\\"error\\\"],null],false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderFundingRecord\\\"]],\\\"endDate\\\"],null],[23,[\\\"endDate\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-funding\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Details\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\",\\\"placeholder\\\",\\\"maxLength\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderFundingRecord\\\",\\\"notes\\\"]]],null]],null],[23,[\\\"riderFundingRecord\\\",\\\"notes\\\"]],\\\"\\\",\\\"500\\\"]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-funding/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-modal-search/component\", [\"exports\", \"adept-iq/utils/rql-generators\", \"adept-iq/models/rider-phone-number\", \"moment\"], function (_exports, _rqlGenerators, _riderPhoneNumber, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const NUMBER_FORMAT = /^\\d*$/;\n  const REMOVE_TEXT_FORMAT = /[^0-9]+/g;\n  const REMOVE_SPECIAL_FORMAT = /[^a-zA-Z0-9]/g;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-time'],\n    rider: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    riderId: null,\n    selectableRiders: null,\n    riderFirstName: null,\n    riderLastName: null,\n    riderPhoneNumber: null,\n    riderDateOfBirth: null,\n    includeArchivedRecords: false,\n    selectedRider: null,\n    enableSearch: Ember.computed('riderId', 'riderFirstName', 'riderLastName', 'riderPhoneNumber', 'riderDateOfBirth', function () {\n      const riderId = this.get('riderId');\n      const riderFirstName = this.get('riderFirstName');\n      const riderLastName = this.get('riderLastName');\n      const riderPhoneNumber = this.get('riderPhoneNumber');\n      const riderDateOfBirth = this.get('riderDateOfBirth');\n\n      if (Ember.isPresent(riderId) || Ember.isPresent(riderFirstName) || Ember.isPresent(riderLastName) || Ember.isPresent(riderPhoneNumber) || Ember.isPresent(riderDateOfBirth)) {\n        return true;\n      }\n\n      return false;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('selectableRiders', []);\n      this.onRiderSelect = this.onRiderSelect.bind(this);\n    },\n\n    async onSearchRiderRecord() {\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        const queryString = this.buildSearchQuery();\n        const store = this.get('store');\n        const ridersResults = await store.query('rider', {\n          filter: queryString\n        });\n        const riders = ridersResults.toArray();\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.set('selectedRider', null);\n        this.set('selectableRiders', riders);\n      } catch (e) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n\n        if (Ember.isPresent(e) && Ember.isPresent(e.errors)) {\n          const errors = e.errors || [];\n\n          if (errors.firstObject.status === '504') {\n            this.get('notifications').warning('TOO MANY RESULTS FOUND. PLEASE PROVIDE ADDITIONAL SEARCH CRITERIA AND TRY AGAIN.');\n          }\n        }\n\n        console.log(e);\n      }\n    },\n\n    buildSearchQuery() {\n      const riderId = this.get('riderId');\n      const riderFirstName = this.get('riderFirstName');\n      const riderLastName = this.get('riderLastName');\n      const riderPhoneNumber = this.get('riderPhoneNumber');\n      const riderDateOfBirth = this.get('riderDateOfBirth');\n      const includeArchivedRecords = this.get('includeArchivedRecords');\n      const searchTerms = [];\n\n      if (Ember.isPresent(riderId)) {\n        const rqlQuery = (0, _rqlGenerators.stringLikeRQL)('riderId', [riderId]);\n        searchTerms.push(rqlQuery);\n      }\n\n      if (Ember.isPresent(riderFirstName)) {\n        const rqlQuery = (0, _rqlGenerators.stringLikeRQL)('firstName', [riderFirstName]);\n        searchTerms.push(rqlQuery);\n      }\n\n      if (Ember.isPresent(riderLastName)) {\n        const rqlQuery = (0, _rqlGenerators.stringLikeRQL)('lastName', [riderLastName]);\n        searchTerms.push(rqlQuery);\n      }\n\n      if (Ember.isPresent(riderPhoneNumber)) {\n        const regex = new RegExp('^\\\\d{10}$');\n\n        if (riderPhoneNumber !== null && riderPhoneNumber !== '' && !regex.test(riderPhoneNumber)) {\n          this.get('notifications').warning('A full 10-digit phone number is required in order to search.');\n        }\n\n        const areaCode = riderPhoneNumber.substring(0, 3);\n        const phone = riderPhoneNumber.substring(3, 10);\n        const rqlAreaCodeQuery = (0, _rqlGenerators.stringEqRQL)('phoneNumbers.areaCode', [`${areaCode}`]);\n        const rqlPhoneQuery = (0, _rqlGenerators.stringEqRQL)('phoneNumbers.phoneNumber', [`${phone}`]);\n        const rqlPhoneTypeQuery = (0, _rqlGenerators.stringEqRQL)('phoneNumbers.type', [`${_riderPhoneNumber.MAIN_PHONE_TYPE}`]);\n        searchTerms.push(rqlAreaCodeQuery, rqlPhoneQuery, rqlPhoneTypeQuery);\n      }\n\n      if (Ember.isPresent(riderDateOfBirth)) {\n        const rqlQuery = `eq(dateOfBirth,${(0, _moment.default)(riderDateOfBirth).format('L')})`;\n        searchTerms.push(rqlQuery);\n      }\n\n      if (!includeArchivedRecords) {\n        const rqlQuery = (0, _rqlGenerators.stringNeRQL)('status', ['Archived']);\n        searchTerms.push(rqlQuery);\n      }\n\n      const queryString = searchTerms.reduce((prev, current) => {\n        return (0, _rqlGenerators.andRQL)(current, prev);\n      });\n      return queryString;\n    },\n\n    onRiderSelect(selectedRider) {\n      this.set('selectedRider', selectedRider);\n    },\n\n    actions: {\n      closeDialog() {\n        this.set('showRiderModal', false);\n      },\n\n      onDateValueChange(value) {\n        this.set('riderDateOfBirth', value);\n\n        if (Ember.isPresent(value)) {\n          if (!this.get('disabledId')) this.set('disabledId', true);\n        } else if (this.get('disabledId')) this.set('disabledId', false);\n      },\n\n      async onSearch() {\n        await this.onSearchRiderRecord();\n      },\n\n      onClearAll() {\n        this.set('riderId', null);\n        this.set('riderFirstName', null);\n        this.set('riderLastName', null);\n        this.set('riderPhoneNumber', null);\n        this.set('riderDateOfBirth', null);\n        this.set('disabledId', false);\n        this.set('disabledFirstName', false);\n        this.set('disabledLastName', false);\n        this.set('disabledLastName', false);\n        this.set('disabledPhoneNumber', false);\n        this.set('disabledDateOfBirth', false);\n        this.set('includeArchivedRecords', false);\n        this.set('selectableRiders', []);\n        this.set('selectedRider', null);\n      },\n\n      onCancel() {\n        this.set('selectableRiders', []);\n        this.set('showRiderModal', false);\n      },\n\n      onSelectRider() {\n        this.set('showRiderModal', false);\n        this.get('setSelectedRider')(this.get('selectedRider'));\n      },\n\n      handleKeyUp() {\n        const riderId = this.get('riderId');\n        const riderFirstName = this.get('riderFirstName');\n        const riderLastName = this.get('riderLastName');\n        const riderPhoneNumber = this.get('riderPhoneNumber');\n        const fieldNames = ['disabledFirstName', 'disabledLastName', 'disabledPhoneNumber', 'disabledDateOfBirth'];\n\n        if (!Ember.isEmpty(riderId)) {\n          fieldNames.forEach(fieldName => {\n            this.set(fieldName, true);\n          });\n        } else {\n          fieldNames.forEach(fieldName => {\n            this.set(fieldName, false);\n          });\n        }\n\n        const riderFields = [riderFirstName, riderLastName, riderPhoneNumber];\n        const blankResult = riderFields.some(fieldName => Ember.isPresent(fieldName));\n\n        if (blankResult) {\n          this.set('disabledId', true);\n        } else {\n          this.set('disabledId', false);\n        }\n      },\n\n      onInputChange(value, valuePath) {\n        let finalValue;\n\n        if (!NUMBER_FORMAT.test(value)) {\n          finalValue = value.replace(REMOVE_SPECIAL_FORMAT, '');\n          finalValue = value.replace(REMOVE_TEXT_FORMAT, '');\n          this.set(valuePath, finalValue);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-modal-search/rider-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-modal-search/rider-table/config\", \"adept-iq/utils/sorts\"], function (_exports, _component, _config, _sorts) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('isSearchAllowed', false);\n    },\n\n    // this empty method is used to over-ride parent method as we dont need the functionality\n    refreshData() {\n      const params = {\n        sorts: []\n      };\n      const sort = this.buildSortParam();\n\n      if (sort && this.get('records.length') > 0) {\n        params.sorts.push(sort);\n        const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n        this.set('records', this.get('records').sort(compareFn)); // Same array sorting need extra trigger changes.\n\n        this.notifyPropertyChange('records');\n      }\n    },\n\n    actions: {\n      onRowClick(currentRow) {\n        this._super(currentRow);\n\n        this.get('onRiderSelect')(currentRow);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-modal-search/rider-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-modal-search',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider',\n    defaultSortAsc: true,\n    isFormControls: true,\n    title: 'Matching Riders',\n    columns: [{\n      id: 'ID',\n      index: 0,\n      type: 'number',\n      isKey: true,\n      label: 'ID',\n      valuePath: 'riderId',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 120\n    }, {\n      id: 'FirstName',\n      index: 1,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'lastName',\n      index: 2,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'MainPhone',\n      index: 3,\n      type: 'text',\n      label: 'Main Phone',\n      valuePath: 'mainPhoneNumber.formattedPhoneNumber',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'DOB',\n      index: 4,\n      type: 'date',\n      label: 'DOB',\n      valuePath: 'dateOfBirth',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-modal-search/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"+8juJS+B\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"showRiderModal\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"overlayClass\\\",\\\"containerClass\\\",\\\"translucentOverlay\\\"],[[23,[\\\"onClickOverlay\\\"]],\\\"center\\\",\\\"rider-detail-overlay\\\",\\\"rider-detail-container\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-search-wrapper\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-details-wrapper\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sp-heading mb-2 font-weight-bold\\\"],[9],[0,\\\"\\\\n            Find Rider\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"x-button mr-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"close\\\"],[11,\\\"aria-label\\\",\\\"Close\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"closeDialog\\\"],null]],[9],[0,\\\"×\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 modal-wrapper-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-9 p-0 pl-2\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"id\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"ID\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"id\\\",\\\"key-up\\\",\\\"enter\\\",\\\"escape-press\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"form-control form-control-sm\\\",\\\"id\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSearch\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClearAll\\\"],null],[23,[\\\"disabledId\\\"]],[23,[\\\"riderId\\\"]]]]],false],[0,\\\"\\\\n\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"firstName\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"id\\\",\\\"key-up\\\",\\\"enter\\\",\\\"escape-press\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"form-control form-control-sm\\\",\\\"firstName\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSearch\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClearAll\\\"],null],[23,[\\\"disabledFirstName\\\"]],[23,[\\\"riderFirstName\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"lastName\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"id\\\",\\\"key-up\\\",\\\"enter\\\",\\\"escape-press\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"form-control form-control-sm\\\",\\\"lastName\\\",[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSearch\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClearAll\\\"],null],[23,[\\\"disabledLastName\\\"]],[23,[\\\"riderLastName\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"mainPhone\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"Main Phone\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"id\\\",\\\"maxlength\\\",\\\"key-up\\\",\\\"enter\\\",\\\"escape-press\\\",\\\"input\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"form-control form-control-sm\\\",\\\"phoneNumber\\\",10,[27,\\\"action\\\",[[22,0,[]],\\\"handleKeyUp\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSearch\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClearAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",[23,[\\\"riderPhoneNumber\\\"]],\\\"riderPhoneNumber\\\"],null],[23,[\\\"disabledPhoneNumber\\\"]],[23,[\\\"riderPhoneNumber\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"DOB\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"DOB\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[false,false,[23,[\\\"disabledDateOfBirth\\\"]],false,true,\\\"m/d/Y\\\",[23,[\\\"riderDateOfBirth\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-3 p-0 pr-2 text-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"unless\\\",[[23,[\\\"enableSearch\\\"]],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearch\\\"],null]],[9],[0,\\\"Search\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"btn btn-default\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClearAll\\\"],null]],[9],[0,\\\"Clear All\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-9 p-2 pl-2\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-9 p-0 pl-2\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\"],[\\\"col-form-label\\\",\\\"checkbox\\\",[23,[\\\"includeArchivedRecords\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[11,\\\"style\\\",\\\"font-weight: 500\\\"],[9],[0,\\\"Include Archived Records\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\" \\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container rider-table\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"rider-management-widget/rider-modal-search/rider-table\\\",null,[[\\\"records\\\",\\\"onRiderSelect\\\"],[[23,[\\\"selectableRiders\\\"]],[23,[\\\"onRiderSelect\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 modal-wrapper-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 p-0 pr-2 text-right\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"a\\\"],[11,\\\"class\\\",\\\"btn btn-default\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCancel\\\"],null]],[9],[0,\\\"Cancel\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"unless\\\",[[23,[\\\"selectedRider\\\"]],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSelectRider\\\"],null]],[9],[0,\\\"Select\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-modal-search/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-notification/component\", [\"exports\", \"adept-iq/utils/validator\", \"ember-concurrency\", \"adept-iq/mixins/async-initiation-operation\"], function (_exports, _validator, _emberConcurrency, _asyncInitiationOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EVENT_RIDER_MAP = {\n    'genericLogging': true\n  };\n  const ACTIVITY_RIDER_MAP = {\n    'SMS Number Changed': true,\n    'SMS Send Failed': true,\n    'SMS Received': true,\n    'SMS Sent': true\n  };\n  const UPDATE_WAIT_TIME = 30000;\n\n  var _default = Ember.Component.extend(_asyncInitiationOperation.default, {\n    classNames: ['notifications-main'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    toggleValue: false,\n    isOpen: false,\n    isOpened: Ember.computed.oneWay('isOpen'),\n    title: null,\n    disableToggleSwitch: false,\n    skipQuery: false,\n    updateRecords: true,\n    phoneNumberOptions: Ember.computed('riderPhoneTypes', 'riderPhoneNumbers.[]', async function () {\n      const riderPhoneTypes = this.get('riderPhoneTypes.values') || [];\n      const filterPhoneTypes = riderPhoneTypes.filter(phoneType => phoneType);\n      return filterPhoneTypes.map(phoneType => phoneType.value.slice(0, 14).replace(/[\\\\(\\\\)']+/g, '').replace(' ', '-'));\n    }),\n    phoneNotification: Ember.computed('riderChangeSet.phoneNotification', function () {\n      const phoneNotification = this.get('riderChangeSet.phoneNotification');\n      const hyphenatedNumber = [phoneNotification.slice(0, 3), '-', phoneNotification.slice(3, 6), '-', phoneNotification.slice(6)].join('');\n      return hyphenatedNumber;\n    }),\n    isPhoneNotification: Ember.computed('riderChangeSet.phoneNotificationEnabled', function () {\n      return this.get('riderChangeSet.phoneNotificationEnabled');\n    }),\n    smsNotification: Ember.computed('riderChangeSet.smsNotification', function () {\n      const smsNotification = this.get('riderChangeSet.smsNotification');\n      const hyphenatedNumber = [smsNotification.slice(0, 3), '-', smsNotification.slice(3, 6), '-', smsNotification.slice(6)].join('');\n      return hyphenatedNumber;\n    }),\n    smsNotificationInValid: Ember.computed('riderChangeSet.smsNotification', function () {\n      const smsNotification = this.get('riderChangeSet.smsNotification').trim();\n      return smsNotification.length < 10;\n    }),\n    isSmsNotification: Ember.computed('riderChangeSet.smsNotificationEnabled', function () {\n      return this.get('riderChangeSet.smsNotificationEnabled');\n    }),\n    isSmsNotificationConsentNull: Ember.computed('riderChangeSet.data.smsNotificationConsent', function () {\n      if (Ember.isNone(this.get('riderChangeSet.smsNotificationConsent'))) return true;\n      return false;\n    }),\n    isSmsNotificationConsent: Ember.computed('riderChangeSet.data.smsNotificationConsent', function () {\n      const smsNotificationConsent = this.get('riderChangeSet.smsNotificationConsent');\n      if (Ember.isNone(smsNotificationConsent)) return false;\n      return smsNotificationConsent;\n    }),\n    emailNotification: Ember.computed('riderChangeSet.emailNotification', function () {\n      return this.get('riderChangeSet.emailNotification');\n    }),\n    isEmailNotification: Ember.computed('riderChangeSet.emailNotificationEnabled', function () {\n      return this.get('riderChangeSet.emailNotificationEnabled');\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      const riderRecord = this.get('riderChangeSet');\n      const id = riderRecord.get('id');\n      const riderPhoneTypes = riderRecord.get('formattedPhoneNumbers');\n      this.onEditRiderNotificationRecord = this.onEditRiderNotificationRecord.bind(this);\n      this.onUndoRiderNotificationRecord = this.onUndoRiderNotificationRecord.bind(this);\n      const onEditRiderNotificationRecord = this.get('onEditRiderNotificationRecord');\n      const onUndoRiderNotificationRecord = this.get('onUndoRiderNotificationRecord');\n      const onSaveRiderNotificationRecord = this.get('onSaveRiderNotificationRecord');\n      this.set('toggleValue', true);\n\n      if (riderRecord.get('status') === 'Archived') {\n        this.set('disableToggleSwitch', true);\n        this.set('toggleValue', false);\n      }\n\n      const riderMailPreferenceAddresses = this.setupMailPreferenceAddresses();\n      this.setProperties({\n        riderPhoneTypes,\n        riderMailPreferenceAddresses\n      });\n      const editAPI = this.get('editAPI');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderNotificationRecord,\n          newAction: null,\n          deleteAction: null,\n          editAction: onEditRiderNotificationRecord,\n          undoAction: onUndoRiderNotificationRecord,\n          isNewBtnDisabled: true,\n          isEditBtnDisabled: false,\n          isDeleteBtnDisabled: true,\n          isEditing: false\n        });\n      });\n\n      if (id) {\n        this.set('activityQueryParams', {\n          riderId: `${id}`,\n          eventLog: true\n        });\n        Ember.run.later(() => this.updateActivityLogView(), UPDATE_WAIT_TIME);\n      } else {\n        // skip query of activity log if it is a new record\n        this.set('skipQuery', true);\n      }\n    },\n\n    willDestroyElement() {\n      this.set('updateRecords');\n\n      this._super(...arguments);\n    },\n\n    updateActivityLogView() {\n      const id = this.get('riderChangeSet.id');\n      if (!this.get('updateRecords')) return;\n\n      if (id) {\n        this.set('activityQueryParams', {\n          riderId: `${id}`,\n          eventLog: true\n        });\n        this.refreshTask.perform();\n        this.store.findRecord('rider', id);\n      }\n\n      Ember.run.later(() => this.updateActivityLogView(), UPDATE_WAIT_TIME);\n    },\n\n    filterEventTypeFunction(event) {\n      if (!event) return false;\n      return EVENT_RIDER_MAP[event.get('actionType')] && ACTIVITY_RIDER_MAP[event.get('collectedEventLog.firstObject').activity];\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      if (tableRef) yield Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n    }),\n    onSaveRiderNotificationRecord: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const riderChangeSet = this.get('riderChangeSet');\n      const emailNotificationEnabled = riderChangeSet.get('emailNotificationEnabled');\n      const emailNotification = (riderChangeSet.get('emailNotification') ?? '').trim();\n      const emailValid = (0, _validator.isEmailValid)(emailNotification);\n      const phoneNotificationEnabled = riderChangeSet.get('phoneNotificationEnabled');\n      const phoneNotification = riderChangeSet.get('phoneNotification').trim();\n      const smsNotificationEnabled = riderChangeSet.get('smsNotificationEnabled');\n      const smsNotification = riderChangeSet.get('smsNotification').trim();\n      const errors = [];\n\n      if (phoneNotificationEnabled && Ember.isBlank(phoneNotification)) {\n        errors.push({\n          validation: 'Phone number is required.'\n        });\n      }\n\n      if (emailNotificationEnabled) {\n        if (Ember.isBlank(emailNotification)) {\n          errors.push({\n            validation: 'Email is required.'\n          });\n        } else if (!emailValid) {\n          errors.push({\n            validation: `\"${emailNotification}\" is not a valid email.`\n          });\n        }\n      } else if (!Ember.isBlank(emailNotification) && !emailValid) {\n        errors.push({\n          validation: `\"${emailNotification}\" is not a valid email.`\n        });\n      }\n\n      if (smsNotificationEnabled && Ember.isBlank(smsNotification)) {\n        errors.push({\n          validation: 'SMS number is required.'\n        });\n      }\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n      } else {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              await riderChangeSet.save();\n              const riderMailPreferenceAddresses = this.get('riderMailPreferenceAddresses');\n              riderMailPreferenceAddresses.map(async preferenceAddress => {\n                const model = preferenceAddress.model;\n\n                if (model.get('hasDirtyAttributes')) {\n                  await model.save();\n                }\n              });\n              notifications.success('Rider notification successfully edited');\n              this.set('editAPI.isEditBtnDisabled', false);\n              this.set('editAPI.isEditing', false);\n              tooltip.reset();\n            } catch (e) {\n              notifications.warning('Rider notification failed to save');\n              tooltip.reset();\n              console.warn(e); // eslint-disable-line\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        yield Promise.resolve();\n      }\n    }),\n\n    setupMailPreferenceAddresses() {\n      const riderMailPreferenceAddresses = [];\n      const riderChangeSet = this.get('riderChangeSet');\n      const primaryAddress = riderChangeSet.get('primaryAddresses.firstObject');\n      const riderContacts = riderChangeSet.get('riderContacts');\n      const emergencyContact = riderContacts.find(riderContact => riderContact.get('contactType') === 'emergency');\n      const alternativeContact = riderContacts.find(riderContact => riderContact.get('contactType') === 'alternative');\n\n      if (Ember.isPresent(primaryAddress)) {\n        riderMailPreferenceAddresses.push({\n          addressCategory: 'Primary Address',\n          addressSummary: primaryAddress.get('place.address.aliasPlaceAddress'),\n          enabled: primaryAddress.get('mailPreferenceEnabled'),\n          model: primaryAddress\n        });\n      }\n\n      if (Ember.isPresent(emergencyContact)) {\n        riderMailPreferenceAddresses.push({\n          addressCategory: 'Emergency Contact Address',\n          addressSummary: emergencyContact.get('address'),\n          enabled: emergencyContact.get('mailPreferenceEnabled'),\n          model: emergencyContact\n        });\n      }\n\n      if (Ember.isPresent(alternativeContact)) {\n        riderMailPreferenceAddresses.push({\n          addressCategory: 'Alternative Contact Address',\n          addressSummary: alternativeContact.get('address'),\n          enabled: alternativeContact.get('mailPreferenceEnabled'),\n          model: alternativeContact\n        });\n      }\n\n      let enabledMailPreferenceCount = 0;\n      this.set('title', '');\n      riderMailPreferenceAddresses.forEach(ele => {\n        if (ele.enabled) {\n          enabledMailPreferenceCount += 1;\n\n          if (enabledMailPreferenceCount === 1) {\n            this.set('title', ele.addressCategory);\n          }\n        }\n\n        if (enabledMailPreferenceCount > 1) {\n          this.set('title', 'Multiple Addresses');\n        }\n      });\n      return riderMailPreferenceAddresses;\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    onEditRiderNotificationRecord() {\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    onUndoRiderNotificationRecord() {\n      const riderChangeSet = this.get('riderChangeSet');\n      const riderMailPreferenceAddresses = this.get('riderMailPreferenceAddresses');\n      riderMailPreferenceAddresses.forEach(riderMailPreferenceAddress => {\n        riderMailPreferenceAddress.model.rollbackAttributes();\n      });\n      riderChangeSet.rollback();\n      this.set('riderMailPreferenceAddresses', this.setupMailPreferenceAddresses());\n      this.set('editAPI.isEditBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n    },\n\n    onSelectTableRow() {\n      Ember.run.scheduleOnce('afterRender', this, () => {\n        this.set('disableEditing', true);\n      });\n    },\n\n    performPostSetupSmsOptIn: (0, _emberConcurrency.task)(function* (riderId) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const options = {\n        outputResult: true\n      };\n      const template = 'setupTripNotifications';\n\n      try {\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createInitiationAsyncOperation.perform(null, riderId, template, 'smsToClient', [], options);\n        const response = JSON.parse(results);\n\n        if (isJobSuccess) {\n          const status = 'success';\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          this.get('notifications').success('Processing opt-in sms to client success.');\n          return {\n            status: status,\n            results: response\n          };\n        }\n\n        this.get('notifications').warning('Processing opt-in sms to client failed.');\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        return {\n          status: 'error',\n          results: response\n        };\n      } catch (error) {\n        console.log(error.message); // eslint-disable-line no-console\n\n        this.get('notifications').warning('Processing opt-in sms to client failed.');\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        return {\n          status: error.status,\n          results: null\n        };\n      }\n    }).drop(),\n    actions: {\n      onPhoneCheckboxChecked(event) {\n        const enabled = event.target.checked;\n        const riderChangeSet = this.get('riderChangeSet');\n        riderChangeSet.set('phoneNotificationEnabled', enabled);\n      },\n\n      onEmailCheckboxChecked(event) {\n        const enabled = event.target.checked;\n        const riderChangeSet = this.get('riderChangeSet');\n        const emailNotification = riderChangeSet.get('emailNotification');\n\n        if (Ember.isBlank(emailNotification)) {\n          riderChangeSet.set('emailNotification', riderChangeSet.get('email'));\n        }\n\n        riderChangeSet.set('emailNotificationEnabled', enabled);\n      },\n\n      onSmsCheckboxChecked(event) {\n        const enabled = event.target.checked;\n        const riderChangeSet = this.get('riderChangeSet');\n        riderChangeSet.set('smsNotificationEnabled', enabled);\n      },\n\n      async onSmsOptInClick() {\n        const id = this.get('riderChangeSet.id');\n        await this.performPostSetupSmsOptIn.perform(id);\n        this.set('activityQueryParams', {\n          riderId: `${id}`,\n          eventLog: true\n        });\n        this.refreshTask.perform();\n      },\n\n      async onPhoneTypeChange(selected) {\n        const riderChangeSet = this.get('riderChangeSet');\n        riderChangeSet.set('phoneNotification', selected.replaceAll('-', ''));\n      },\n\n      onSMSTypeChange(selected) {\n        const riderChangeSet = this.get('riderChangeSet');\n        const newNumber = selected.replaceAll('-', '');\n        riderChangeSet.set('smsNotification', newNumber);\n      },\n\n      createNewPhoneNumber(option) {\n        const riderChangeSet = this.get('riderChangeSet');\n        riderChangeSet.set('phoneNotification', option);\n      },\n\n      createNewSmsNumber(option) {\n        const riderChangeSet = this.get('riderChangeSet');\n        riderChangeSet.set('smsNotification', option);\n      },\n\n      toggle() {\n        const tooltip = this.get('tooltip');\n        const riderChangeSet = this.get('riderChangeSet');\n\n        if (this.get('selectedToggleButtonType') === 'after') {\n          this.set('toggleValue', true);\n          riderChangeSet.set('allowNotification', true);\n        } else {\n          this.set('toggleValue', false);\n          riderChangeSet.set('allowNotification', false);\n        }\n\n        if (!this.get('toggleValue')) {\n          tooltip.pushConfirmation({\n            title: 'Rider Management',\n            tip: 'Are you sure you want to stop sending notifications to rider?',\n            primaryActionText: 'OK',\n\n            primaryAction() {\n              tooltip.reset();\n            },\n\n            secondaryActionText: 'Cancel',\n            secondaryAction: () => {\n              this.set('selectedToggleButtonType', 'after');\n              this.set('toggleValue', true);\n              riderChangeSet.set('allowNotification', true);\n              tooltip.reset();\n              riderChangeSet.save();\n            }\n          });\n        }\n\n        riderChangeSet.save();\n      },\n\n      onOpen() {\n        this.toggleSelect();\n      },\n\n      onClose() {\n        this.toggleSelect();\n      },\n\n      onClickAddressCheckBox(addressTypeOptions, event) {\n        const checkboxCheckedLength = Ember.$('input[name=checkbox_addressTypeOptions]:checked').length;\n        const checkboxChecked = Ember.$('input[name=checkbox_addressTypeOptions]:checked');\n        const multipleCheckboxChecked = 'Multiple Addresses';\n        const riderNotificationAddresses = this.get('riderMailPreferenceAddresses');\n        const riderNotificationAddressesOptions = riderNotificationAddresses.map(notificationAddress => notificationAddress.addressCategory);\n        const enabled = event.target.checked;\n        const model = addressTypeOptions.model;\n\n        if (checkboxCheckedLength > 1) {\n          this.set('title', multipleCheckboxChecked);\n        } else if (checkboxCheckedLength === 0) {\n          this.set('title', '');\n        } else if (checkboxCheckedLength === 1) {\n          const selectedCheckboxName = checkboxChecked[0].id;\n          const selectedCheckboxId = selectedCheckboxName.split('checkbox_addressTypeOptions')[1];\n          this.set('title', riderNotificationAddressesOptions.objectAt(selectedCheckboxId));\n        }\n\n        if (enabled) {\n          Ember.set(addressTypeOptions, 'enabled', true);\n        } else {\n          Ember.set(addressTypeOptions, 'enabled', false);\n        }\n\n        model.set('mailPreferenceEnabled', enabled);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-notification/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"C0zU9khd\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"addressTypeOptions\\\",\\\"index\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget mt-2 m-10 mb-4 notifications\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Notifications\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-10 mt-3 ml-4\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"phone-notification\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-1 pl-5 p-0\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"\\\"],[12,\\\"checked\\\",[21,\\\"isPhoneNotification\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneCheckboxChecked\\\"],null]],[12,\\\"disabled\\\",[27,\\\"unless\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]],\\\"disabled\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"phone-notification-row1 pl-0\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0 pt-1\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-md-3 m-0 p-0\\\"],[9],[0,\\\"Phone\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"m-0 p-0\\\"],[9],[0,\\\"Select or enter phone number to receive calls\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pl-0 powerselect-box \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null,{\\\"statements\\\":[[4,\\\"power-select-with-create\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\",\\\"oncreate\\\"],[[23,[\\\"phoneNotification\\\"]],[23,[\\\"phoneNumberOptions\\\"]],false,true,[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneTypeChange\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"createNewPhoneNumber\\\"],null]]],{\\\"statements\\\":[[0,\\\"                      \\\"],[1,[22,5,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],[23,[\\\"phoneNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-1 pl-5 p-0\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"\\\"],[12,\\\"checked\\\",[21,\\\"isEmailNotification\\\"]],[12,\\\"disabled\\\",[27,\\\"unless\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]],\\\"disabled\\\"],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onEmailCheckboxChecked\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pl-0\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0 pt-1\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-md-3 m-0 p-0\\\"],[9],[0,\\\"Email\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\" m-0 p-0\\\"],[9],[0,\\\"Rider email is required for email notifications\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\" pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],[23,[\\\"riderChangeSet\\\",\\\"emailNotification\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderChangeSet\\\",\\\"emailNotification\\\"]]],null]],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-notification\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-1 pl-5 p-0\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"\\\"],[12,\\\"checked\\\",[21,\\\"isSmsNotification\\\"]],[12,\\\"disabled\\\",[27,\\\"unless\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]],\\\"disabled\\\"],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSmsCheckboxChecked\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-notification-row2 pl-0\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0 pt-1\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"col-md-3 m-0 p-0\\\"],[9],[0,\\\"SMS\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\" m-0 p-0\\\"],[9],[0,\\\"Select or enter phone number to receive texts\\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"pl-0 powerselect-box \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null,{\\\"statements\\\":[[4,\\\"power-select-with-create\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"closeOnSelect\\\",\\\"onchange\\\",\\\"oncreate\\\"],[[27,\\\"readonly\\\",[[23,[\\\"smsNotification\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"phoneNumberOptions\\\"]]],null],false,true,true,[27,\\\"action\\\",[[22,0,[]],\\\"onSMSTypeChange\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"createNewSmsNumber\\\"],null]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[22,4,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                      \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],[23,[\\\"smsNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-opt-in\\\"],[9],[0,\\\" \\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-send-opt-in-button\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]],[27,\\\"not\\\",[[23,[\\\"isSmsNotificationConsentNull\\\"]]],null],[23,[\\\"isSmsNotificationConsent\\\"]],[27,\\\"not\\\",[[23,[\\\"isSmsNotification\\\"]]],null],[23,[\\\"smsNotificationInValid\\\"]]],null],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSmsOptInClick\\\"],null]],[9],[0,\\\"Send\\\"],[10],[0,\\\"\\\\n                    \\\\n                    \\\"],[10],[0,\\\"   \\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-opt-in-btn-message\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\" m-0 p-0\\\"],[9],[0,\\\"Send opt-in message for trip-related notifications.\\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\" \\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\\n            \\\"],[10],[0,\\\"     \\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-3\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-consent-group \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isSmsNotificationConsentNull\\\"]]],null],[23,[\\\"isSmsNotificationConsent\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-consent-check\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-consent-message\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\" m-0 p-0\\\"],[9],[0,\\\"The rider has consented to receive trip notifications and opted in by SMS.\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-consent-check\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"                 \\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sms-consent-message\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\" m-0 p-0\\\"],[9],[0,\\\"The rider has NOT consented to receive trip notifications and has NOT opted in by SMS.\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget mt-2 m-10 mail-notifications\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Mail\\\",false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-10 mt-3 ml-4\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\" \\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0 pt-1\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"mail-notifications-row col-md-3 pl-20 pt-1 mb-0 ml-5\\\"],[9],[0,\\\"Mail\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row pb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container pl-0\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"mail-notifications-row  pl-20 pt-1 mb-0 ml-5\\\"],[9],[0,\\\"Select addresses to send mails\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mail-notifications-row col-md-7 pl-20 pt-1 mb-0 ml-5 powerselect-box \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\",\\\"renderInPlace\\\",\\\"disabled\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpen\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null],true,[23,[\\\"disableToggleSwitch\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/rider-management-widget/rider-notification/template.hbs' @ L208:C35) \\\"],null]],[[\\\"class\\\"],[\\\"mailNotification select\\\"]],{\\\"statements\\\":[[0,\\\"                                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title\\\"],[12,\\\"title\\\",[28,[[21,\\\"title\\\"]]]],[9],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n                                \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n                                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/rider-management-widget/rider-notification/template.hbs' @ L215:C27) \\\"],null]],[[\\\"class\\\"],[\\\"mailNotification options\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"riderMailPreferenceAddresses\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"option\\\"],[9],[0,\\\"\\\\n                                    \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"checkbox_addressTypeOptions\\\"],[12,\\\"id\\\",[28,[\\\"checkbox_addressTypeOptions\\\",[22,3,[]]]]],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null]],[12,\\\"checked\\\",[22,2,[\\\"enabled\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickAddressCheckBox\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n                                    \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_addressTypeOptions\\\",[22,3,[]]]]],[11,\\\"class\\\",\\\"pl-6 addressHeader\\\"],[12,\\\"title\\\",[28,[[22,2,[\\\"addressCategory\\\"]]]]],[9],[1,[22,2,[\\\"addressCategory\\\"]],false],[10],[0,\\\"\\\\n                                    \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_addressTypeOptions\\\",[22,3,[]]]]],[11,\\\"class\\\",\\\"pl-6\\\"],[12,\\\"title\\\",[28,[[22,2,[\\\"addressSummary\\\"]]]]],[9],[1,[22,2,[\\\"addressSummary\\\"]],false],[10],[0,\\\"\\\\n                                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget mt-2 m-10 mail-notifications\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"rider-management-widget/activity-log/table\\\",null,[[\\\"filterEventTypeFunction\\\",\\\"queryParams\\\",\\\"skipQuery\\\",\\\"tableRef\\\"],[[27,\\\"action\\\",[[22,0,[]],[23,[\\\"filterEventTypeFunction\\\"]]],null],[23,[\\\"activityQueryParams\\\"]],[23,[\\\"skipQuery\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-notification/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-suspension/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"moment\"], function (_exports, _emberConcurrency, _lodash, _unwrapProxy, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    riderSuspensionRecord: null,\n    classNames: ['rider-reasonDenied-options-select'],\n    riderSuspensionReasons: null,\n    riderSuspensionReasonOptions: null,\n    riderId: Ember.computed.readOnly('riderChangeSet.id'),\n    tableRef: null,\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    startDate: Ember.computed('riderSuspensionRecord.startDate', function () {\n      const startDate = this.get('riderSuspensionRecord.startDate');\n      return startDate ? startDate : null;\n    }),\n    endDate: Ember.computed('riderSuspensionRecord.endDate', function () {\n      const endDate = this.get('riderSuspensionRecord.endDate');\n      return endDate ? endDate : null;\n    }),\n    selectedReasonObject: Ember.computed('riderSuspensionRecord.reason', function () {\n      const riderSuspensionReasonOptions = this.get('riderSuspensionReasonOptions');\n      const reason = this.get('riderSuspensionRecord.reason');\n      if (Ember.isEmpty(riderSuspensionReasonOptions)) return null;\n      return riderSuspensionReasonOptions.find(option => {\n        return option.name === reason;\n      });\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.onNewRiderSuspensionRecord = this.onNewRiderSuspensionRecord.bind(this);\n      this.onEditRiderSuspensionRecord = this.onEditRiderSuspensionRecord.bind(this);\n      this.onDeleteRiderSuspensionRecord = this.onDeleteRiderSuspensionRecord.bind(this);\n      this.onUndoRiderSuspensionRecord = this.onUndoRiderSuspensionRecord.bind(this);\n      this.OnTableRowClick = this.OnTableRowClick.bind(this);\n      this.validateRiderSuspensionRequiredField = this.validateRiderSuspensionRequiredField.bind(this);\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onNewRiderSuspensionRecord = this.get('onNewRiderSuspensionRecord');\n      const onSaveRiderSuspensionRecord = this.get('onSaveRiderSuspensionRecord');\n      const onEditRiderSuspensionRecord = this.get('onEditRiderSuspensionRecord');\n      const onDeleteRiderSuspensionRecord = this.get('onDeleteRiderSuspensionRecord');\n      const onUndoRiderSuspensionRecord = this.get('onUndoRiderSuspensionRecord');\n      const riderSuspensionReasons = await this.get('rider').getConfigSuspensionReasons();\n      const riderSuspensionReasonOptions = riderSuspensionReasons.map(Rsr => {\n        return {\n          displayName: Rsr.get('value.displayName'),\n          name: Rsr.get('name')\n        };\n      });\n      this.setProperties({\n        riderSuspensionReasons,\n        riderSuspensionReasonOptions\n      });\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderSuspensionRecord,\n          newAction: onNewRiderSuspensionRecord,\n          deleteAction: onDeleteRiderSuspensionRecord,\n          editAction: onEditRiderSuspensionRecord,\n          undoAction: onUndoRiderSuspensionRecord,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: true,\n          isDeleteBtnDisabled: true,\n          isEditing: false\n        });\n      });\n    },\n\n    OnTableRowClick(selectedRiderSuspension) {\n      this.get('onUndoRiderSuspensionRecord')();\n      this.set('riderSuspensionRecord', (0, _unwrapProxy.unwrapProxy)(selectedRiderSuspension));\n      this.set('editAPI.isEditBtnDisabled', false);\n      this.set('editAPI.isDeleteBtnDisabled', false);\n    },\n\n    actions: {\n      onDateValueChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onRiderReasonChange(record, value) {\n        const riderSuspensionReasons = this.get('riderSuspensionReasons');\n        const riderSuspensionReason = riderSuspensionReasons.find(reason => reason.name === value.name);\n        const suspensionReasonLength = riderSuspensionReason.get('value.length(days)');\n        const startDate = (0, _moment.default)();\n        const endDate = (0, _moment.default)().add(suspensionReasonLength, 'd');\n        record.set('startDate', startDate.toDate());\n        record.set('endDate', endDate.toDate());\n        record.set('reason', value.name);\n      }\n\n    },\n\n    onNewRiderSuspensionRecord() {\n      const riderSuspensionRecord = this.get('store').createRecord('rider-suspension');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n      }\n\n      this.set('riderSuspensionRecord', riderSuspensionRecord);\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    onEditRiderSuspensionRecord() {\n      const riderSuspensionRecordToEdit = this.get('tableRef.checkedRows.firstObject');\n      this.set('riderSuspensionRecord', riderSuspensionRecordToEdit);\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    confirmRiderSuspensionDeletion(tip, riderSuspensionRecord) {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          await riderSuspensionRecord.destroyRecord();\n          this.get('tableRef').refreshData(); //to refresh table data\n\n          notifications.success('Suspension record successfully deleted');\n          this.set('editAPI.isEditBtnDisabled', true);\n          this.set('editAPI.isDeleteBtnDisabled', true);\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    onDeleteRiderSuspensionRecord() {\n      const riderSuspensionRecordToDelete = this.get('tableRef.checkedRows.firstObject');\n      this.set('riderSuspensionRecord', riderSuspensionRecordToDelete);\n      const tip = 'Are you sure you want to delete this suspension record?';\n      this.confirmRiderSuspensionDeletion(tip, riderSuspensionRecordToDelete);\n    },\n\n    async onUndoRiderSuspensionRecord() {\n      const riderSuspensionId = this.get('rider').getLastAccessedRiderSuspensionId();\n      const riderSuspensionRecord = this.get('riderSuspensionRecord');\n      const selectedRow = this.get('selectedRow');\n\n      if (riderSuspensionId !== null) {\n        this.set('editAPI.isEditBtnDisabled', false);\n        this.set('editAPI.isDeleteBtnDisabled', false);\n      }\n\n      if (Ember.isEmpty(selectedRow)) {\n        this.set('editAPI.isEditBtnDisabled', true);\n        this.set('editAPI.isDeleteBtnDisabled', true);\n      }\n\n      if (Ember.isPresent(riderSuspensionRecord)) {\n        riderSuspensionRecord.rollbackAttributes();\n      }\n\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n    },\n\n    validateEndDateGreaterThanStartDate(riderSuspensionRecord) {\n      const startDate = new Date(riderSuspensionRecord.startDate);\n      const endDate = new Date(riderSuspensionRecord.endDate);\n      const endDateValidate = (endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24);\n\n      if (endDateValidate < 0) {\n        return true;\n      }\n\n      return false;\n    },\n\n    showValidateToolTip(message) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: message,\n        primaryActionText: 'Ok',\n        primaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    validateRiderSuspensionRequiredField(riderSuspensionRecord) {\n      const tooltip = this.get('tooltip');\n      const ReasonAndstartAndEndDateErrors = this.validateReasonStartAndEndDate(riderSuspensionRecord);\n      const errors = (0, _lodash.compact)([].concat(ReasonAndstartAndEndDateErrors));\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            tooltip.popConfirmation();\n          }\n\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    validateReasonStartAndEndDate(riderSuspensionRecord) {\n      const reason = riderSuspensionRecord.get('reason');\n      const startDate = riderSuspensionRecord.get('startDate');\n      const endDate = riderSuspensionRecord.get('endDate');\n      const errors = [];\n\n      if (!reason) {\n        errors.push({\n          key: 'reason',\n          validation: ['Reason is required']\n        });\n      }\n\n      if (!startDate) {\n        errors.push({\n          key: 'startDate',\n          validation: ['Start Date is required']\n        });\n      }\n\n      if (!endDate) {\n        errors.push({\n          key: 'endDate',\n          validation: ['End Date is required']\n        });\n      }\n\n      return errors;\n    },\n\n    onSaveRiderSuspensionRecord: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const riderSuspensionRecord = this.get('riderSuspensionRecord');\n      const isValidStarDateEndDate = this.validateEndDateGreaterThanStartDate(riderSuspensionRecord);\n      const isValidSuspensionRequiredField = this.validateRiderSuspensionRequiredField(riderSuspensionRecord);\n      const selectedRow = this.get('selectedRow');\n\n      if (isValidStarDateEndDate) {\n        this.showValidateToolTip('End Date must be after Start Date');\n      } else if (isValidSuspensionRequiredField) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              riderSuspensionRecord.set('rider', rider);\n              const rS = await riderSuspensionRecord.save();\n              this.get('rider').setLastAccessedRiderSuspensionId(rS.id);\n              this.get('tableRef').refreshData();\n\n              if (this.get('editAPI.isEditing')) {\n                notifications.success('Rider Suspension Record successfully edited');\n                this.set('editAPI.isEditing', false);\n                this.set('editAPI.isNewBtnDisabled', false);\n\n                if (Ember.isEmpty(selectedRow)) {\n                  this.set('editAPI.isEditBtnDisabled', true);\n                  this.set('editAPI.isDeleteBtnDisabled', true);\n                } else {\n                  this.set('editAPI.isEditBtnDisabled', false);\n                  this.set('editAPI.isDeleteBtnDisabled', false);\n                }\n              } else {\n                notifications.success('Rider SuspensionRecord successfully saved');\n                this.set('editAPI.isNewBtnDisabled', false);\n              }\n\n              tooltip.reset();\n            } catch (e) {\n              notifications.warning('Rider Suspension Record failed to save');\n              tooltip.reset();\n              console.warn(e); // eslint-disable-line\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      }\n\n      yield Promise.resolve();\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-suspension/suspension-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-suspension/suspension-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    store: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    recordSetter: Ember.observer('riderId', async function () {\n      const filteredData = await this.getRiderSuspensions('rider-suspension');\n      this.set('records', filteredData);\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async getRiderSuspensions(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let suspensionReasons = this.get('suspensionReasons');\n\n      if (Ember.isEmpty(suspensionReasons)) {\n        suspensionReasons = await this.get('rider').getConfigSuspensionReasons();\n        this.set('suspensionReasons', suspensionReasons);\n      }\n\n      let activeData = store.peekAll(modelName) || [];\n      activeData = activeData.filter(suspension => suspension.get('rider.id') === this.get('riderId'));\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData.map(data => {\n        const suspensionReason = suspensionReasons.find(rfa => rfa.name === data.reason);\n\n        if (Ember.isPresent(suspensionReason)) {\n          data.set('reasonDisplayName', suspensionReason.get('value.displayName'));\n        }\n      });\n      return filteredData;\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const filteredData = await this.getRiderSuspensions(modelName, params);\n      return filteredData;\n    },\n\n    actions: {\n      onRowClick(currentRow) {\n        this._super(currentRow);\n\n        this.get('OnTableRowClick')(currentRow);\n        this.get('rider').setLastAccessedRiderSuspensionId(currentRow.get('id'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-suspension/suspension-table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-suspension/suspension-table',\n    rowComponent: 'table/rows/text-formatted-row',\n    rowSelectionType: 'radio',\n    modelName: 'rider-suspension',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    fetchModelData: true,\n    title: 'Suspensions',\n    columns: [{\n      id: 'Reason',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Reason',\n      valuePath: 'reasonDisplayName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 250\n    }, {\n      id: 'Details',\n      index: 1,\n      type: 'text',\n      label: 'Details',\n      valuePath: 'details',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 120,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'StartDate',\n      index: 2,\n      type: 'date',\n      label: 'StartDate',\n      valuePath: 'startDate',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }, {\n      id: 'EndDate',\n      index: 3,\n      type: 'date',\n      label: 'EndDate',\n      valuePath: 'endDate',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      validation: {\n        type: 'date',\n        minValue: '1900-01-01',\n        maxValue: 'now'\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-suspension/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"dj/J3Ypz\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 rider-suspension-table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-suspension/suspension-table\\\",null,[[\\\"tableRef\\\",\\\"OnTableRowClick\\\",\\\"riderId\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"OnTableRowClick\\\"]],[23,[\\\"riderId\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mt-3 rider-suspension-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Suspension\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-suspension\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Reason\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Reason\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"selectedReasonObject\\\"]],[23,[\\\"riderSuspensionReasonOptions\\\"]],[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onRiderReasonChange\\\",[23,[\\\"riderSuspensionRecord\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,1,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-suspension\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Details\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Details\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\",\\\"placeholder\\\",\\\"maxLength\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderSuspensionRecord\\\",\\\"details\\\"]]],null]],null],[23,[\\\"riderSuspensionRecord\\\",\\\"details\\\"]],\\\"\\\",\\\"500\\\"]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-suspension\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"Start Date\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"\\\\n                             \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderSuspensionRecord\\\"]],\\\"startDate\\\"],null],[23,[\\\"startDate\\\"]]]]],false],[0,\\\"\\\\n\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-suspension\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"End Date\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-6 pl-0\\\"],[9],[0,\\\"\\\\n                            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"readonlyCell\\\",\\\"showClearButton\\\",\\\"format\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[false,false,\\\"MM/DD/YYYY\\\",false,false,\\\"m/d/Y\\\",[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateValueChange\\\",[23,[\\\"riderSuspensionRecord\\\"]],\\\"endDate\\\"],null],[23,[\\\"endDate\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-suspension/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-travel-needs/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _emberConcurrency, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PCA = 'pca';\n  const COMPANION = 'companion';\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    riderTravelNeedRecord: null,\n    tableRef: null,\n    configTravelNeeds: null,\n    vehicleCapacityType: null,\n    vehicleCapacityCount: null,\n    selectedRow: Ember.computed.alias('tableRef.table.selectedRows.firstObject'),\n    origSelectedTravelNeedTypeName: null,\n    riderTravelNeeds: Ember.computed('riderChangeSet.{riderTravelNeeds,riderTravelNeeds.[]}', function () {\n      return this.get('riderChangeSet.riderTravelNeeds').toArray();\n    }),\n    maxLoadTime: Ember.computed('riderTravelNeeds.@each.loadTime', function () {\n      return this.get('riderTravelNeeds').reduce((acc, rtn) => {\n        const loadTime = parseInt(rtn.loadTime, 10);\n        let maxTime = acc;\n        maxTime = loadTime > maxTime ? loadTime : maxTime;\n        return maxTime;\n      }, 0);\n    }),\n    maxUnloadTime: Ember.computed('riderTravelNeeds.@each.unloadTime', function () {\n      return this.get('riderTravelNeeds').reduce((acc, rtn) => {\n        const unloadTime = parseInt(rtn.unloadTime, 10);\n        let maxTime = acc;\n        maxTime = unloadTime > maxTime ? unloadTime : maxTime;\n        return maxTime;\n      }, 0);\n    }),\n    travelNeedTypeOptions: Ember.computed('configTravelNeeds', 'riderChangeSet.{riderTravelNeeds,riderTravelNeeds.[]}', function () {\n      const configTravelNeeds = this.get('configTravelNeeds');\n      const existingRiderTravelNeeds = this.get('riderChangeSet.riderTravelNeeds');\n      const existingTravelNeedIDs = existingRiderTravelNeeds.map(rtn => rtn.get('travelNeedType.id'));\n\n      if (configTravelNeeds) {\n        return configTravelNeeds.filter(ctnd => {\n          return !existingTravelNeedIDs.includes(ctnd.get('name'));\n        });\n      }\n\n      return [];\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.setTravelNeedTypeLoadTimeAndVehicleAttributes = this.setTravelNeedTypeLoadTimeAndVehicleAttributes.bind(this);\n      this.setVehicleProperties = this.setVehicleProperties.bind(this);\n      this.onNewRiderTravelNeedRecord = this.onNewRiderTravelNeedRecord.bind(this);\n      this.onEditRiderTravelNeedRecord = this.onEditRiderTravelNeedRecord.bind(this);\n      this.onDeleteRiderTravelNeedRecord = this.onDeleteRiderTravelNeedRecord.bind(this);\n      this.resetForm = this.resetForm.bind(this);\n      this.onUndoRiderTravelNeedsRecord = this.onUndoRiderTravelNeedsRecord.bind(this);\n      this.OnTableRowClick = this.OnTableRowClick.bind(this);\n      const configTravelNeeds = await this.get('rider').getConfigTravelNeedTypes();\n      this.setProperties({\n        configTravelNeeds\n      });\n      const editAPI = this.get('editAPI'); // ember concurrency tasks\n\n      const onSaveRiderTravelNeedsRecord = this.get('onSaveRiderTravelNeedsRecord');\n      const onNewRiderTravelNeedRecord = this.get('onNewRiderTravelNeedRecord');\n      const onDeleteRiderTravelNeedRecord = this.get('onDeleteRiderTravelNeedRecord');\n      const onEditRiderTravelNeedRecord = this.get('onEditRiderTravelNeedRecord');\n      const onUndoRiderTravelNeedsRecord = this.get('onUndoRiderTravelNeedsRecord');\n      Ember.run.next(() => {\n        editAPI.setProperties({\n          saveAction: onSaveRiderTravelNeedsRecord,\n          newAction: onNewRiderTravelNeedRecord,\n          deleteAction: onDeleteRiderTravelNeedRecord,\n          editAction: onEditRiderTravelNeedRecord,\n          undoAction: onUndoRiderTravelNeedsRecord,\n          isNewBtnDisabled: false,\n          isEditBtnDisabled: true,\n          isDeleteBtnDisabled: true,\n          isEditing: false\n        });\n      });\n    },\n\n    async OnTableRowClick(selectedRiderTavelNeed) {\n      await this.get('onUndoRiderTravelNeedsRecord')();\n      this.set('riderTravelNeedRecord', (0, _unwrapProxy.unwrapProxy)(selectedRiderTavelNeed));\n      const configTravelNeed = this.get('configTravelNeeds').find(cftnd => {\n        return cftnd.get('name') === selectedRiderTavelNeed.get('travelNeedType.id');\n      });\n      this.get('setVehicleProperties')(configTravelNeed);\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditBtnDisabled', false);\n      this.set('editAPI.isDeleteBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n    },\n\n    onEditRiderTravelNeedRecord() {\n      const riderTravelNeedRecordToEdit = this.get('tableRef.checkedRows.firstObject');\n      const configTravelNeed = this.get('configTravelNeeds').find(cftnd => {\n        return cftnd.get('name') === riderTravelNeedRecordToEdit.get('travelNeedType.id');\n      });\n      this.set('riderTravelNeedRecord', riderTravelNeedRecordToEdit);\n      this.set('origSelectedTravelNeedTypeName', riderTravelNeedRecordToEdit.get('travelNeedTypeName'));\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n      this.get('setVehicleProperties')(configTravelNeed);\n    },\n\n    confirmRiderTravelNeedDeletion(tip, riderTravelNeedRecord) {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        tip: tip,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          this.get('resetForm')();\n          await riderTravelNeedRecord.destroyRecord();\n          notifications.success('Rider Travel Need Successfully Deleted');\n          this.set('editAPI.isNewBtnDisabled', false);\n          this.set('editAPI.isEditBtnDisabled', true);\n          this.set('editAPI.isDeleteBtnDisabled', true);\n          this.set('editAPI.isEditing', false);\n          tooltip.reset();\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    isLastConsumableTravelNeed() {\n      const riderTravelNeeds = this.get('riderTravelNeeds') || [];\n      const riderTravelNeedToDelete = this.get('tableRef.checkedRows.firstObject');\n      const hasConsumableRemains = riderTravelNeeds.filter(travelNeed => travelNeed.get('id') !== riderTravelNeedToDelete.get('id')).find(travelNeed => travelNeed.get('travelNeedType.isConsumable') && travelNeed.get('count') > 0);\n      if (!hasConsumableRemains) return true;\n      return false;\n    },\n\n    showDeleteLastConsumableTravelNeedsWarningMessage() {\n      const tooltip = this.get('tooltip');\n      const message = 'Unable to delete. The rider must have at least one travel need with a Count value of 1 or more. This ensures trips booked for the rider indicate appropriate capacity.';\n      tooltip.pushConfirmation({\n        title: 'Rider Management',\n        hasOverlay: true,\n        tip: message,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    onDeleteRiderTravelNeedRecord() {\n      const riderTravelNeedRecord = this.get('tableRef.checkedRows.firstObject');\n\n      if (this.isLastConsumableTravelNeed()) {\n        this.showDeleteLastConsumableTravelNeedsWarningMessage();\n        return;\n      }\n\n      this.set('riderTravelNeedRecord', riderTravelNeedRecord);\n      const tip = 'Are you sure you want to delete this travel need?';\n      this.confirmRiderTravelNeedDeletion(tip, riderTravelNeedRecord);\n    },\n\n    async onUndoRiderTravelNeedsRecord() {\n      const riderTravelNeedId = this.get('rider').getLastAccessedRiderTravelNeedId();\n      const riderTravelNeedRecord = this.get('riderTravelNeedRecord');\n      let isNewRecord = false;\n\n      if (Ember.isPresent(riderTravelNeedId)) {\n        await this.store.findRecord('rider-travel-need', riderTravelNeedId);\n      }\n\n      if (Ember.isPresent(riderTravelNeedRecord)) {\n        const origVehicleCapacity = this.get('configTravelNeeds').find(travelNeed => travelNeed.get('name') === this.get('origSelectedTravelNeedTypeName'));\n        isNewRecord = riderTravelNeedRecord.isNew;\n        this.get('setVehicleProperties')(origVehicleCapacity);\n        await riderTravelNeedRecord.rollbackAttributes();\n\n        if (!Ember.isPresent(origVehicleCapacity)) {\n          this.set('vehicleCapacityCount', '');\n          this.set('vehicleCapacityType', '');\n        }\n      } else {\n        this.get('resetForm')();\n      }\n\n      if (isNewRecord) {\n        this.set('editAPI.isEditBtnDisabled', true);\n        this.set('editAPI.isDeleteBtnDisabled', true);\n      } else {\n        this.set('editAPI.isEditBtnDisabled', false);\n        this.set('editAPI.isDeleteBtnDisabled', false);\n      }\n\n      this.set('editAPI.isNewBtnDisabled', false);\n      this.set('editAPI.isEditing', false);\n    },\n\n    onNewRiderTravelNeedRecord() {\n      const riderTravelNeedRecord = this.get('store').createRecord('rider-travel-need', {\n        count: 1,\n        passengerType: this.store.peekRecord('passenger-type', 'client')\n      });\n      const riderTravelNeedType = this.get('store').createRecord('travel-need-type');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow) {\n        selectedRow.set('selected', false);\n        this.set('tableRef.config.selectFirstRow', false);\n      }\n\n      this.set('origSelectedTravelNeedTypeName', null);\n      riderTravelNeedRecord.set('travelNeedType', riderTravelNeedType);\n      this.set('riderTravelNeedRecord', riderTravelNeedRecord);\n      this.get('resetForm')();\n      this.set('editAPI.isNewBtnDisabled', true);\n      this.set('editAPI.isEditBtnDisabled', true);\n      this.set('editAPI.isDeleteBtnDisabled', true);\n      this.set('editAPI.isEditing', true);\n    },\n\n    validateRiderTravelNeed(riderTravelNeedRecord) {\n      const riderTravelNeedTypeName = riderTravelNeedRecord.get('travelNeedTypeName');\n      const loadTime = riderTravelNeedRecord.get('loadTime');\n      const unloadTime = riderTravelNeedRecord.get('unloadTime');\n\n      if (riderTravelNeedTypeName && !Ember.isEmpty(loadTime) && !Ember.isEmpty(unloadTime)) {\n        return true;\n      }\n\n      return false;\n    },\n\n    onSaveRiderTravelNeedsRecord: (0, _emberConcurrency.task)(function* () {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const rider = this.get('riderChangeSet').get('_internalModel');\n      const riderTravelNeedRecord = this.get('riderTravelNeedRecord');\n      const isNewRecord = riderTravelNeedRecord.get('isNew');\n      const isRTNValid = yield this.validateRiderTravelNeed(riderTravelNeedRecord);\n\n      if (!isRTNValid) {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'TravelNeed Name, Load Time and Unload Time are required.',\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      } else {\n        tooltip.pushConfirmation({\n          title: 'Rider Management',\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              riderTravelNeedRecord.set('rider', rider);\n              const editOrNewRecord = riderTravelNeedRecord.get('isNew') ? 'added' : 'edited';\n              const rTN = await riderTravelNeedRecord.save();\n              notifications.success(`Rider Travel Need successfully ${editOrNewRecord}`);\n              this.get('rider').setLastAccessedRiderTravelNeedId(rTN.id);\n\n              if (isNewRecord) {\n                this.set('editAPI.isNewBtnDisabled', false);\n                this.set('editAPI.isEditBtnDisabled', true);\n                this.set('editAPI.isDeleteBtnDisabled', true);\n                this.set('editAPI.isEditing', false);\n              } else {\n                this.set('editAPI.isNewBtnDisabled', false);\n                this.set('editAPI.isEditBtnDisabled', false);\n                this.set('editAPI.isDeleteBtnDisabled', false);\n                this.set('editAPI.isEditing', false);\n              }\n\n              tooltip.reset();\n            } catch (e) {\n              notifications.warning('Rider Travel Need failed to save');\n              tooltip.reset();\n              console.warn(e); // eslint-disable-line\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      }\n    }),\n\n    resetForm() {\n      const riderTravelNeedRecord = this.get('riderTravelNeedRecord');\n\n      if (riderTravelNeedRecord) {\n        riderTravelNeedRecord.set('travelNeedType', null);\n        riderTravelNeedRecord.set('loadTime', '');\n        riderTravelNeedRecord.set('unloadTime', '');\n      }\n\n      this.set('vehicleCapacityType', '');\n      this.set('vehicleCapacityCount', '');\n    },\n\n    setVehicleProperties(configTravelNeed) {\n      if (configTravelNeed) {\n        const configTravelNeedValue = configTravelNeed.get('value');\n        this.set('vehicleCapacityCount', configTravelNeedValue.vehicleCapacityCount);\n        this.set('vehicleCapacityType', configTravelNeedValue.vehicleCapacityType);\n      }\n    },\n\n    setTravelNeedTypeLoadTimeAndVehicleAttributes(selectedConfigTravelNeed) {\n      const riderTravelNeedRecord = this.get('riderTravelNeedRecord');\n      const configTravelNeedName = selectedConfigTravelNeed.get('name');\n      const travelNeedTypeRecord = this.get('store').peekRecord('travel-need-type', configTravelNeedName);\n      riderTravelNeedRecord.set('travelNeedType', travelNeedTypeRecord);\n      riderTravelNeedRecord.set('loadTime', travelNeedTypeRecord.get('loadTime'));\n      riderTravelNeedRecord.set('unloadTime', travelNeedTypeRecord.get('unloadTime'));\n\n      if (configTravelNeedName === PCA || configTravelNeedName === COMPANION) {\n        const passengerTypeRecord = this.get('store').peekRecord('passenger-type', configTravelNeedName);\n\n        if (Ember.isPresent(passengerTypeRecord)) {\n          riderTravelNeedRecord.set('passengerType', passengerTypeRecord);\n        }\n      }\n\n      this.get('setVehicleProperties')(selectedConfigTravelNeed);\n    },\n\n    actions: {\n      onTravelNeedTypeChange(selectedConfigTravelNeed) {\n        this.setTravelNeedTypeLoadTimeAndVehicleAttributes(selectedConfigTravelNeed);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-travel-needs/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/rider-management-widget/rider-travel-needs/table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    config: _config.default,\n    rider: Ember.inject.service(),\n    recordSetter: Ember.observer('riderTravelNeeds', function () {\n      const filteredData = this.getRiderTravelNeeds('rider-travel-need');\n      this.set('records', filteredData);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('isSearchAllowed', false);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    getRiderTravelNeeds(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const riderTravelNeed = this.get('riderTravelNeeds.firstObject');\n      const activeData = store.peekAll(modelName) || [];\n      const riderId = Ember.isPresent(riderTravelNeed) ? riderTravelNeed.get('rider.id') : null;\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        return data.get('rider.id') === riderId;\n      });\n      return filteredData;\n    },\n\n    query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const filteredData = this.getRiderTravelNeeds(modelName, params);\n      return filteredData;\n    },\n\n    actions: {\n      onRowClick(currentRow) {\n        this._super(currentRow);\n\n        this.get('OnTableRowClick')(currentRow);\n        this.get('rider').setLastAccessedRiderTravelNeedId(currentRow.get('id'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-travel-needs/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    component: 'rider-management-widget/rider-modal-search',\n    rowComponent: 'generic-components/table/rows/row',\n    modelName: 'rider-travel-need',\n    defaultSortAsc: false,\n    checkBoxColumn: false,\n    isFormControls: true,\n    title: 'Travel Needs',\n    rowSelectionType: 'radio',\n    columns: [{\n      id: 'Name',\n      index: 0,\n      type: 'text',\n      isKey: true,\n      label: 'Name',\n      valuePath: 'travelNeedType.value.displayName',\n      editable: false,\n      searchable: true,\n      hidden: false,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Description',\n      index: 1,\n      type: 'text',\n      label: 'Description',\n      valuePath: 'travelNeedType.value.description',\n      editable: false,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 200,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 100\n      }\n    }, {\n      id: 'Load Time',\n      index: 2,\n      type: 'text',\n      label: 'Load Time',\n      valuePath: 'loadTime',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }, {\n      id: 'Unload Time',\n      index: 3,\n      type: 'text',\n      label: 'Unload Time',\n      valuePath: 'unloadTime',\n      editable: true,\n      hidden: false,\n      searchable: true,\n      defaultWidth: 150,\n      validation: {\n        type: 'text',\n        minValue: 1,\n        maxValue: 30\n      }\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/rider-travel-needs/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"PvZDeZ0G\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 rider-travel-need-table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"table-container\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"rider-management-widget/rider-travel-needs/table\\\",null,[[\\\"tableRef\\\",\\\"OnTableRowClick\\\",\\\"riderTravelNeeds\\\",\\\"riderId\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"OnTableRowClick\\\"]],[23,[\\\"riderTravelNeeds\\\"]],[23,[\\\"riderId\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mt-3 rider-travel-need-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Travel Needs\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"name\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderTravelNeedRecord\\\",\\\"travelNeedType\\\"]],[23,[\\\"travelNeedTypeOptions\\\"]],[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,1,[\\\"value\\\",\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"description\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Description\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"riderTravelNeedRecord\\\",\\\"travelNeedType\\\",\\\"value\\\",\\\"description\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"loadTime\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Load Time (mins)\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/number\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderTravelNeedRecord\\\",\\\"loadTime\\\"]]],null]],null],[23,[\\\"riderTravelNeedRecord\\\",\\\"loadTime\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"unloadTime\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Unload Time(mins)\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/number\\\",null,[[\\\"disabled\\\",\\\"onChange\\\",\\\"value\\\"],[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"riderTravelNeedRecord\\\",\\\"unloadTime\\\"]]],null]],null],[23,[\\\"riderTravelNeedRecord\\\",\\\"unloadTime\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"vehicleCapacityType\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Vehicle Capacity Type\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-3 p-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"vehicleCapacityType\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"count\\\"],[11,\\\"class\\\",\\\"col-sm-1 col-form-label col-form-label-sm p-0\\\"],[9],[0,\\\"Count\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-1\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"vehicleCapacityCount\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-6 mb-3\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget card\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Maximum Load/Unload Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"loadTime\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Load Time (mins)\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"maxLoadTime\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row rider-travel-need\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"unloadTime\\\"],[11,\\\"class\\\",\\\"col-sm-6 col-form-label col-form-label-sm\\\"],[9],[0,\\\"Unload Time(mins)\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-sm-5 pl-0\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"maxUnloadTime\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/rider-travel-needs/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/rider-management-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XiOlX2VF\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 mb-3 rider-wrapper-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-12 px-1\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"rider-detail\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group row m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"status\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"Status\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mr-2 status\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"riderChangeSet\\\",\\\"status\\\"]],[23,[\\\"riderStatusOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onRiderStatusChange\\\",[23,[\\\"riderChangeSet\\\"]],\\\"status\\\"],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[27,\\\"capitalize\\\",[[22,2,[]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[true,[23,[\\\"riderChangeSet\\\",\\\"displayStatus\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"id\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mr-2\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[true,[23,[\\\"riderChangeSet\\\",\\\"riderId\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"riderChangeSet\\\"]],\\\"riderId\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"firstName\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields mr-2\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"riderChangeSet\\\",\\\"error\\\",\\\"firstName\\\"]],\\\"error\\\"],null],[23,[\\\"riderChangeSet\\\",\\\"firstName\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"20\\\"]]],[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"riderChangeSet\\\"]],\\\"firstName\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"lastName\\\"],[11,\\\"class\\\",\\\"col-form-label col-form-label-sm\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"riderChangeSet\\\",\\\"error\\\",\\\"lastName\\\"]],\\\"error\\\"],null],[23,[\\\"riderChangeSet\\\",\\\"lastName\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[\\\"30\\\"]]],[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],[27,\\\"not\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"riderChangeSet\\\"]],\\\"lastName\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search mx-2\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRiderSearch\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selectedRiderScreen\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],true,[23,[\\\"noRiderSelected\\\"]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onNavigationChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"editAPI\\\",\\\"isNewBtnDisabled\\\"]],[23,[\\\"isActionButtonsDisabled\\\"]],[23,[\\\"isArchivedButtonsDisabled\\\"]],[23,[\\\"isEligibilityScreenDisabled\\\"]]],null],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"newAction\\\"]]],null]],[9],[0,\\\"New\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"editAPI\\\",\\\"isEditBtnDisabled\\\"]],[23,[\\\"isActionButtonsDisabled\\\"]],[23,[\\\"isArchived\\\"]],[23,[\\\"noRiderSelected\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[0,\\\"Edit\\\"],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"editAction\\\"]]]],[10],[0,\\\"\\\\n            \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"editAPI\\\",\\\"isDeleteBtnDisabled\\\"]],[23,[\\\"isActionButtonsDisabled\\\"]],[23,[\\\"isEligibilityScreenDisabled\\\"]],[23,[\\\"isArchived\\\"]],[23,[\\\"noRiderSelected\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[0,\\\"Delete\\\"],[3,\\\"action\\\",[[22,0,[]],[23,[\\\"editAPI\\\",\\\"deleteAction\\\"]]]],[10],[0,\\\"\\\\n            \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"unless\\\",[[27,\\\"or\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[0,\\\"Undo\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"]],[10],[0,\\\"\\\\n            \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-default \\\",[27,\\\"unless\\\",[[27,\\\"or\\\",[[23,[\\\"editAPI\\\",\\\"isEditing\\\"]]],null],\\\"disabled\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"perform\\\",[[23,[\\\"editAPI\\\",\\\"saveAction\\\"]]],null]],null]],[9],[0,\\\"Save\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"btn btn-wide btn-default \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isActionButtonsDisabled\\\"]],[23,[\\\"noRiderSelected\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[0,\\\"Trip History Report \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-share-square-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[11,\\\"style\\\",\\\"color: currentcolor; padding: 0px; margin: 0px\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onTripHistoryReportClick\\\"]],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0 rider-wrapper-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Contact Information\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-contact-information\\\",null,[[\\\"riderChangeSet\\\",\\\"editAPI\\\",\\\"status\\\",\\\"setSelectedRider\\\",\\\"setLastSelectedRider\\\"],[[23,[\\\"riderChangeSet\\\"]],[23,[\\\"editAPI\\\"]],[23,[\\\"status\\\"]],[23,[\\\"setSelectedRider\\\"]],[23,[\\\"setLastSelectedRider\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Travel Needs\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-travel-needs\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Suspension\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-suspension\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Funding\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-funding\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Eligibility\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-eligibility\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\",\\\"riderServiceModeRecord\\\",\\\"fareCategory\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]],[23,[\\\"riderServiceMode\\\"]],[23,[\\\"riderChangeSet\\\",\\\"fareCategory\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Certification\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-certification\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Notifications\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-notification\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRiderScreen\\\"]],\\\"Activity Log\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"rider-management-widget/rider-activity-log\\\",null,[[\\\"editAPI\\\",\\\"riderChangeSet\\\"],[[23,[\\\"editAPI\\\"]],[23,[\\\"riderChangeSet\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showRiderModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"rider-management-widget/rider-modal-search\\\",null,[[\\\"elementId\\\",\\\"setSelectedRider\\\",\\\"showRiderModal\\\"],[\\\"rider-modal-search\\\",[23,[\\\"setSelectedRider\\\"]],[23,[\\\"showRiderModal\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/rider-management-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/road-supervisor-modal/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['road-supervisor-modal'],\n    roadSupervisor: Ember.inject.service(),\n    isWaived: false,\n    instance: Ember.computed.readOnly('roadSupervisor.instance'),\n    address: Ember.computed.alias('roadSupervisor.address'),\n    actions: {\n      onAgreeButtonClick() {\n        this.set('isWaived', true);\n        this.set('loading', true);\n        this.roadSupervisor.enter().finally(() => this.set('loading', false));\n      },\n\n      onExitButtonClick() {\n        this.roadSupervisor.set('isNavigating', false);\n        this.roadSupervisor.exit();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/road-supervisor-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"OibkqdQD\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/navigation-widget\\\",null,[[\\\"onExitButtonClick\\\",\\\"location\\\",\\\"bearing\\\",\\\"navigationPolyline\\\",\\\"isAtDestination\\\",\\\"isOffRoute\\\",\\\"navigationPolylineLocation\\\",\\\"destination\\\",\\\"guidance\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onExitButtonClick\\\"],null],[23,[\\\"instance\\\",\\\"location\\\"]],[23,[\\\"instance\\\",\\\"bearing\\\"]],[23,[\\\"instance\\\",\\\"navigationPolyline\\\"]],[23,[\\\"instance\\\",\\\"isAtDestination\\\"]],[23,[\\\"instance\\\",\\\"isOffRoute\\\"]],[23,[\\\"instance\\\",\\\"navigationPolylineLocation\\\"]],[23,[\\\"instance\\\",\\\"destination\\\"]],[23,[\\\"instance\\\",\\\"guidanceMessage\\\"]]]]],false],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"loading\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[21,\\\"global-spinner\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"road-supervisor-title-container\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"road-supervisor-title\\\"],[9],[0,\\\"\\\\n    Navigation To \\\"],[1,[21,\\\"address\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-primary btn-close-road-supervisor\\\"],[9],[0,\\\"\\\\n    Exit\\\\n  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onExitButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/road-supervisor-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/schedule-generate-modal/component\", [\"exports\", \"lodash\", \"ember-concurrency\", \"adept-iq/mixins/async-schedule-operation\"], function (_exports, _lodash, _emberConcurrency, _asyncScheduleOperation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly,\n    equal\n  } = Ember.computed;\n  const TIMEOUT_DELAY = 10000; // 10 second tries\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    timeout: TIMEOUT_DELAY,\n    // passed in from stackFrame\n    currentSchedule: readOnly('stackFrame.options.currentSchedule'),\n    radioValue: readOnly('stackFrame.options.radioValue'),\n    provider: readOnly('stackFrame.options.provider'),\n    isReoptimized: equal('radioValue', 'reoptimize'),\n    isWaitlisted: equal('radioValue', 'waitlist'),\n    title: 'Reoptimization',\n    description: Ember.computed('isWaitlisted', function () {\n      const isWaitlisted = this.get('isWaitlisted');\n      return isWaitlisted && 'Attempting to waitlist trips in progress';\n    }),\n    progress: 0,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.onLoadTask.perform();\n    },\n\n    didRender() {\n      this._super(...arguments);\n    },\n\n    onReset() {\n      this.get('workspace').popState('schedule-generate');\n    },\n\n    onLoadTask: (0, _emberConcurrency.task)(function* () {\n      const isReoptimized = this.get('isReoptimized');\n      const onGenerateSchedule = this.onGenerateSchedule;\n      const attemptToWaitlistTrips = this.attemptToWaitlistTrips;\n\n      try {\n        if (isReoptimized) {\n          this.set('workspace.triggeredReoptimize', true);\n          this.set('workspace.reoptimizeInProgress', true);\n          yield onGenerateSchedule.perform();\n        } else yield attemptToWaitlistTrips.perform();\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          // re-throw the non-cancelation error\n          console.error(e); // eslint-disable-line no-console\n        }\n      } finally {\n        yield (0, _emberConcurrency.timeout)(2000);\n        this.set('workspace.triggeredReoptimize', false);\n        this.set('workspace.reoptimizeInProgress', false);\n        this.onReset();\n      }\n    }),\n    onGenerateSchedule: (0, _emberConcurrency.task)(function* () {\n      const schedule = this.get('currentSchedule');\n      const provider = this.get('provider');\n      const options = {};\n      let operationType = 'generate';\n      let res = null;\n\n      if (provider !== 'all') {\n        operationType = 'reoptimizeWithConditions';\n        options.operationData = {\n          conditions: {\n            provider: provider\n          }\n        };\n      }\n\n      try {\n        res = yield this.createScheduleAsyncOperation.perform(schedule, operationType, options);\n\n        if (res) {\n          this.get('notifications').success('SCHEDULE SUCCESSFULLY REOPTIMIZED');\n        } else {\n          this.get('notifications').warning('SCHEDULE FAILED TO REOPTIMIZE');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          // re-throw the non-cancelation error\n          this.get('notifications').warning('SCHEDULE FAILED TO REOPTIMIZE');\n          console.warn(e); // eslint-disable-line no-console\n\n          throw e;\n        }\n      }\n\n      return Promise.resolve(res);\n    }),\n    attemptToWaitlistTrips: (0, _emberConcurrency.task)(function* () {\n      const schedule = this.get('currentSchedule');\n      const progress = this.get('progress');\n      let res = null;\n      let resSuccess = false;\n\n      try {\n        res = yield this.createScheduleAsyncOperation.perform(schedule, 'scheduleWaitlist', {\n          outputResult: true\n        });\n        resSuccess = res.state === 'success';\n\n        if (!resSuccess) {\n          const resResults = _lodash.default.get(res, 'results', '');\n\n          const scheduleId = _lodash.default.get(res, 'jsonData.relationships.schedule.data.id', '');\n\n          const successError = `Error: Schedule ${scheduleId} does not contain any trips with statuses: waitlisted`;\n          resSuccess = resResults.startsWith(successError);\n        }\n\n        if (resSuccess) {\n          if (Ember.isPresent(progress)) this.set('progress', 100);\n          this.get('notifications').success('SUCCESSFULLY ATTEMPTED TO SCHEDULE ALL WAITLIST TRIPS');\n        } else {\n          this.get('notifications').warning('FAILED ATTEMPT TO SCHEDULE ALL WAITLIST TRIPS');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          // re-throw the non-cancelation error\n          this.get('notifications').warning('FAILED ATTEMPT TO SCHEDULE ALL WAITLIST TRIPS');\n          throw e;\n        }\n      }\n\n      return Promise.resolve(resSuccess);\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/schedule-generate-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"4MJbw1wf\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isWaitlisted\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[\\\"loading-modal-styles-overlay\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-header\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-text\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"p\\\"],[9],[1,[21,\\\"description\\\"],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spinner\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-spinner fa-pulse\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"progress\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"progress-bar progress-bar-striped progress-bar-animated\\\"],[11,\\\"role\\\",\\\"progressbar\\\"],[12,\\\"aria-valuenow\\\",[28,[[21,\\\"progress\\\"]]]],[11,\\\"aria-valuemin\\\",\\\"0\\\"],[11,\\\"aria-valuemax\\\",\\\"100\\\"],[12,\\\"style\\\",[28,[\\\"width: \\\",[21,\\\"progress\\\"],\\\"%\\\"]]],[9],[1,[21,\\\"progress\\\"],false],[0,\\\"%\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/schedule-generate-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/search-modal/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tableRef: null,\n    searchText: null,\n    isSearchEnabled: false,\n    warning: false,\n    modalAPI: null,\n    queryParams: Ember.computed.readOnly('modalAPI.queryParams'),\n    title: Ember.computed.readOnly('modalAPI.title'),\n    config: Ember.computed.readOnly('modalAPI.config'),\n    primaryActionText: Ember.computed.readOnly('modalAPI.primaryActionText'),\n    primaryAction: Ember.computed.readOnly('modalAPI.primaryAction'),\n    hasOverlay: Ember.computed.readOnly('modalAPI.hasOverlay'),\n    // covers interface so user must confirm or cancel\n    selectedRecord: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    isRunning: Ember.computed.or('primaryActionTask.isRunning'),\n    // `drop()` might be better than `enqueue()` here, but this ensures that\n    // tasks won't be cancelled by accident during messy transitions\n    primaryActionTask: (0, _emberConcurrency.task)(function* (record) {\n      const primaryAction = this.get('primaryAction');\n\n      if (primaryAction) {\n        try {\n          yield primaryAction(record);\n          this.reset();\n        } catch (e) {\n          // TODO: allow user to try again without reset\n          this.reset();\n          throw new Error(e);\n        }\n      }\n    }).enqueue(),\n    secondaryActionTask: (0, _emberConcurrency.task)(function* () {\n      const secondaryAction = this.get('secondaryAction');\n\n      if (secondaryAction) {\n        yield secondaryAction();\n      }\n\n      this.reset();\n    }).enqueue(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('dropdownActions', [{\n        id: 'print',\n        name: 'Download',\n        action: () => {\n          const tableRef = this.get('tableRef');\n          tableRef.exportData();\n        }\n      }]);\n    },\n\n    didRender() {\n      this._super(...arguments);\n    },\n\n    onCloseModal() {\n      this.reset();\n      this.resetSearchInfo();\n    },\n\n    reset() {\n      const modalAPI = this.get('modalAPI');\n      modalAPI.setProperties({\n        title: null,\n        primaryActionText: null,\n        secondaryActionText: null,\n        primaryAction: null,\n        secondaryAction: null,\n        hasOverlay: false,\n        warning: false,\n        config: null\n      });\n    },\n\n    resetSearchInfo() {\n      this.onClearSearchText();\n      this.set('isSearchEnabled', false);\n    },\n\n    onClearSearchText() {\n      this.set('searchText', '');\n      const tableRef = this.get('tableRef');\n\n      if (!tableRef) {\n        return;\n      }\n\n      tableRef.onClearSearchText();\n    },\n\n    actions: {\n      onPrimaryActionButtonClick() {\n        const selectedRecord = this.get('selectedRecord');\n\n        if (selectedRecord) {\n          this.get('primaryActionTask').perform(selectedRecord).then(() => {\n            this.onCloseModal();\n          });\n        }\n      },\n\n      onCloseModal() {\n        this.onCloseModal();\n      },\n\n      onClickOverlayModal() {\n        const hasOverlay = this.get('modalAPI.hasOverlay');\n\n        if (hasOverlay) {\n          return false;\n        }\n\n        this.reset();\n      },\n\n      onHelp() {},\n\n      toggleSearchInput() {\n        this.toggleProperty('isSearchEnabled');\n      },\n\n      onSearchTextChange(event) {\n        const previousSearchText = this.get('searchText');\n        const searchTextElement = event ? event.target : null;\n        const searchText = searchTextElement ? searchTextElement.value : '';\n\n        if (searchText === previousSearchText) {\n          return;\n        }\n\n        const tableRef = this.get('tableRef');\n\n        if (!tableRef) {\n          return;\n        }\n\n        this.set('searchText', searchText);\n        tableRef.onSearchTextChange(event);\n      },\n\n      onClearSearchText() {\n        this.onClearSearchText();\n      },\n\n      onDropDownActionClick(action, dropdown) {\n        dropdown.actions.close();\n        if (action.action) action.action();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/search-modal/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['route-master-table'],\n    store: Ember.inject.service(),\n    config: null,\n    showHeader: false,\n    paginationEnabled: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const noneRecord = this.get('noneRecord');\n      return this._super(...arguments).then(records => {\n        if (noneRecord) {\n          records.unshift(noneRecord);\n        }\n\n        return records;\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/search-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Ghfw239t\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"event\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"title\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"onClickOverlay\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickOverlayModal\\\"],null],\\\"search-modal-styles-overlay\\\",true]],{\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"search-modal \\\",[27,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"className\\\"]],[23,[\\\"modalAPI\\\",\\\"className\\\"]]],null]]]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-modal-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h5\\\"],[9],[1,[23,[\\\"modalAPI\\\",\\\"title\\\"]],false],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-modal-buttons\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleSearchInput\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"renderInPlace\\\"],[\\\"right\\\",true]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/search-modal/template.hbs' @ L18:C9) \\\"],null]],[[\\\"class\\\"],[\\\"data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/search-modal/template.hbs' @ L22:C9) \\\"],null]],[[\\\"class\\\"],[\\\"table-component-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dropdownActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDropDownActionClick\\\",[22,2,[]],[22,1,[]]],null]],[9],[0,\\\"\\\\n        \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times close\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null]],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-modal-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-input\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"searchText\\\",\\\"length\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"clear-button data-test-clear-button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onClearSearchText\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-table\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"search-modal/table\\\",null,[[\\\"tableRef\\\",\\\"config\\\",\\\"queryParams\\\",\\\"noneRecord\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"config\\\"]],[23,[\\\"queryParams\\\"]],[23,[\\\"noneRecord\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-modal-button\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"primaryActionText\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"cancel\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null]],[9],[0,\\\"Cancel\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"data-test-primary \\\",[27,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"isRunning\\\"]],\\\"modalAPI-running\\\",\\\"\\\"],null]]]],[12,\\\"disabled\\\",[23,[\\\"modalAPI\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"modalAPI\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[23,[\\\"modalAPI\\\",\\\"primaryActionText\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onPrimaryActionButtonClick\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/search-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/secondary-window/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['secondary-window'],\n    title: null,\n    isLoading: false,\n    isCenterTitleAlign: false,\n    onXButtonClick: null,\n    disableXButtonClick: false,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('afterRender', this, 'onKeyDown', event);\n      };\n\n      this.$().on('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      this.$().off('keydown', this._onKeyDown);\n      this._onKeyDown = null;\n\n      this._super(...arguments);\n    },\n\n    /*eslint-disable */\n    onKeyDown(event) {\n      switch (event.key) {\n        case 'Escape':\n          {\n            event.preventDefault();\n            return this.get('onXButtonClick')();\n          }\n\n        default:\n          break;\n      }\n    },\n\n    /*eslint-enable */\n    actions: {\n      onXButtonClick() {\n        this.get('onXButtonClick')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/secondary-window/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ob96EC0p\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"secondary-window-modal\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"secondary-window-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isCenterTitleAlign\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[1,[21,\\\"title\\\"],false],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"close-button\\\"],[12,\\\"disabled\\\",[21,\\\"disableXButtonClick\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\"],null]],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"secondary-window-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"loading-spinner\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[14,1],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/secondary-window/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer-container/component\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const RESIZE_CURSOR_OFFSET = -2;\n  const SIDE_DRAWER_SHRUNKEN_WIDTH = 20;\n  const AUTO_CLOSE_MODAL_WIDTH = 213; //sideDrawerComponent that exists in this array will be prevented to create more than once\n\n  const PREVENT_DUPLICATE_DRAWERS = ['side-drawer/system-config'];\n\n  var _default = Ember.Component.extend({\n    // NOTE: actual styling classes are applied to the modal in template;\n    // it's element is not a child of this component's element\n    classNames: ['side-drawer-container'],\n    workspace: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    lastModalWidth: null,\n    currentStateHash: null,\n    currentState: Ember.computed('currentStateHash', 'sideDrawerComponent', {\n      get() {\n        const currentStateHash = this.get('currentStateHash');\n        const sideDrawerComponent = this.get('sideDrawerComponent');\n\n        if (sideDrawerComponent) {\n          return currentStateHash[sideDrawerComponent];\n        }\n\n        return null;\n      },\n\n      set(key, value) {\n        const currentStateHash = this.get('currentStateHash');\n        const sideDrawerComponent = this.get('sideDrawerComponent');\n\n        if (sideDrawerComponent) {\n          const _currentStateHash = { ...currentStateHash,\n            [sideDrawerComponent]: value\n          };\n          this.set('currentStateHash', _currentStateHash);\n        }\n\n        return value;\n      }\n\n    }),\n    showRightPanel: Ember.computed.readOnly('systemConfig.showRightPanel'),\n    sideDrawerTitle: Ember.computed.alias('workspace.topStateDisplayName'),\n    isShrunken: Ember.computed.alias('workspace.isDrawerShrunken'),\n    sideDrawerComponents: null,\n    sideDrawers: Ember.computed.alias('sideDrawerComponents.[]'),\n    targetAttachment: Ember.computed('systemConfig.targetAttachment', function () {\n      const targetAttachment = this.get('systemConfig.targetAttachment');\n      if ((0, _lodash.isEmpty)(targetAttachment)) return 'left';\n      return targetAttachment;\n    }),\n    containerClassNames: Ember.computed('workspace.topOptions', 'showRightPanel', 'isShrunken', function () {\n      let classes;\n      const isShrunken = this.get('isShrunken');\n\n      if (isShrunken) {\n        classes = ['side-drawer-modal', 'side-drawer-shrunken'];\n      } else {\n        classes = ['ember-modal-dialog', 'side-drawer-modal'];\n        const topOptions = this.get('workspace.topOptions');\n        const additionalClasses = topOptions.classNames || [];\n        const showRightPanel = this.get('showRightPanel');\n\n        if (showRightPanel) {\n          classes.push('show-right-panel');\n        }\n\n        classes = classes.concat(additionalClasses);\n      }\n\n      return classes;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      Ember.$(window).on('resize', Ember.run.bind(this, this.handleWindowResize));\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      Ember.$(window).off('resize');\n    },\n\n    addSideDrawerComponent() {\n      //Adding each side drawer to first of sideDrawerComponents array so that multiple sidedrawer could\n      // open at the same time without loosing their changes.\n      // in case of closing sidedrawer the first opened drawer would pop out and next one would be shown.\n      const sideDrawerComponent = this.get('sideDrawerComponent');\n      const sideDrawerStackFrame = this.get('workspace.stack').lastObject;\n      let sideDrawerComponents = this.get('sideDrawerComponents');\n      let bringToFront = false;\n      let bringToFrontIndex = null;\n      let sideDrawerWidth = '600px'; //default SideDrawer Width\n\n      let sideDrawerMinWidth = '600px';\n      if ((0, _lodash.isNull)(sideDrawerComponents)) sideDrawerComponents = [];\n      sideDrawerComponents.map((item, index) => {\n        //if drawer is unique and should not have duplicate instances we just bring it to front instead of adding new one.\n        if (PREVENT_DUPLICATE_DRAWERS.includes(item.name) && sideDrawerComponent === item.name) {\n          bringToFront = true;\n          bringToFrontIndex = index;\n        }\n      });\n      const drawerExists = sideDrawerComponents && sideDrawerComponents.length > 0 && sideDrawerStackFrame.activityId === sideDrawerComponents[0].activityId;\n\n      if (!drawerExists || bringToFront) {\n        sideDrawerComponents.forEach((item, i) => {\n          this.setSideDrawerVisibility(i, 'hidden');\n        });\n\n        if (bringToFront) {\n          if (sideDrawerComponents.length > 1) {\n            //move the existing drawer to the top\n            sideDrawerComponents.unshiftObject(sideDrawerComponents.splice(bringToFrontIndex, 1)[0]);\n          }\n        } else {\n          sideDrawerComponents.unshiftObject({\n            name: sideDrawerComponent,\n            visibility: 'visible',\n            activityId: sideDrawerStackFrame.activityId,\n            stackFrame: sideDrawerStackFrame,\n            currentState: sideDrawerStackFrame.currentState,\n            drawerWidth: sideDrawerWidth,\n            drawerMinWidth: sideDrawerMinWidth\n          });\n        }\n      }\n\n      sideDrawerWidth = sideDrawerComponents[0].drawerWidth;\n      sideDrawerMinWidth = sideDrawerComponents[0].drawerMinWidth;\n      this.set('sideDrawerComponents', sideDrawerComponents);\n      this.setSideDrawerVisibility(0, 'visible');\n      Ember.$('.side-drawer-modal').css('width', sideDrawerWidth);\n      Ember.$('.side-drawer-modal').css('min-width', sideDrawerMinWidth);\n      Ember.$('.side-drawer-modal').css('right', '');\n    },\n\n    setSideDrawerVisibility(sideDrawerIndex, visibility) {\n      const sideDrawerComponents = this.get('sideDrawerComponents');\n      const drawer = !(0, _lodash.isEmpty)(sideDrawerComponents) ? sideDrawerComponents.objectAt(sideDrawerIndex) : null;\n\n      if (drawer) {\n        Ember.set(drawer, 'visibility', visibility);\n        this.set('sideDrawerComponents', sideDrawerComponents);\n      }\n    },\n\n    removeSideDrawerComponent() {\n      const sideDrawerComponents = this.get('sideDrawerComponents');\n      sideDrawerComponents.shiftObject();\n      this.setSideDrawerVisibility(0, 'hidden');\n    },\n\n    didReceiveAttrs() {\n      this.addSideDrawerComponent();\n    },\n\n    handleWindowResize() {\n      const windowWidth = Ember.$(window).width();\n      const sideDrawerComponents = this.get('sideDrawerComponents');\n      const size = windowWidth - 10;\n\n      if (windowWidth < sideDrawerComponents[0].drawerWidth) {\n        Ember.$('.side-drawer-modal').css('width', size);\n      }\n\n      sideDrawerComponents.map(sideDrawerComponent => {\n        if (windowWidth < sideDrawerComponent.drawerWidth) {\n          Ember.set(sideDrawerComponent, 'drawerWidth', windowWidth - 10);\n        }\n      });\n      this.set('sideDrawerComponents', sideDrawerComponents);\n    },\n\n    updateSideDrawerWidth(size) {\n      let initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const sideDrawerComponents = this.get('sideDrawerComponents');\n      const stack = sideDrawerComponents[0];\n      if (stack && stack.drawerWidth) Ember.set(stack, 'drawerWidth', size);\n      Ember.$('.side-drawer-modal').width(size);\n\n      if (stack && stack.drawerMinWidth && initial && size !== 'auto') {\n        Ember.set(stack, 'drawerMinWidth', size);\n        Ember.$('.side-drawer-modal').css('min-width', size);\n      }\n\n      this.set('sideDrawerComponents', sideDrawerComponents);\n    },\n\n    actions: {\n      setSideDrawerWidth(size) {\n        this.updateSideDrawerWidth(size);\n      },\n\n      resizeModal(position) {\n        if (this.get('isShrunken')) {\n          return;\n        }\n\n        const windowWidth = Ember.$(window).width(); // Resize cursor offset ensures cursor is centered on handle.\n\n        const modalRight = windowWidth - position.x + RESIZE_CURSOR_OFFSET;\n        const modalWidth = windowWidth - modalRight;\n\n        if (modalRight > 10) {\n          Ember.run.scheduleOnce('afterRender', () => {\n            if (windowWidth - modalRight > AUTO_CLOSE_MODAL_WIDTH) {\n              Ember.$('.side-drawer-modal').css('right', `${modalRight}px`);\n              this.updateSideDrawerWidth(modalWidth, false);\n            } else {\n              let preventShrink = this.get('systemConfig.sideDrawerPreventCollapse');\n              if ((0, _lodash.isNull)(preventShrink)) preventShrink = false;\n\n              if (!preventShrink) {\n                this.send('onShrinkClick');\n              }\n            }\n          });\n        }\n      },\n\n      onCloseClick() {\n        const options = this.get('workspace.topOptions');\n        this.get('geocode').deactivateGeocode();\n        this.get('workspace').popState();\n        this.removeSideDrawerComponent();\n\n        if (options && options.action) {\n          options.action();\n        }\n      },\n\n      onShrinkClick() {\n        const isShrunken = this.get('isShrunken');\n\n        if (isShrunken) {\n          // Let's restore the old modal width\n          const modalWidth = this.get('lastModalWidth');\n          Ember.$('.side-drawer').css('right', `${modalWidth}px`);\n          Ember.$('.side-drawer').css('left', '0px');\n          this.setSideDrawerVisibility(0, 'visible');\n        } else {\n          // Shrink the modal and save the old minWidth\n          const currentModalWidth = parseInt(Ember.$('.side-drawer').css('right'), 10);\n          this.set('lastModalWidth', currentModalWidth);\n          const windowWidth = Ember.$(window).width();\n          const rightPosition = windowWidth - SIDE_DRAWER_SHRUNKEN_WIDTH; // this has to be the former modal width, minus the side drawer side\n\n          const leftPosition = 0 - parseInt(currentModalWidth, 10) + SIDE_DRAWER_SHRUNKEN_WIDTH;\n          Ember.$('.side-drawer').css('right', `${rightPosition}px`);\n          Ember.$('.side-drawer').css('left', `${leftPosition}px`);\n          this.setSideDrawerVisibility(0, 'hidden');\n        }\n\n        this.toggleProperty('isShrunken');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer-container/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YCw3d1AH\",\n    \"block\": \"{\\\"symbols\\\":[\\\"sideDrawer\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"containerClassNames\\\",\\\"overlayClass\\\",\\\"targetAttachment\\\",\\\"hasOverlay\\\"],[[23,[\\\"containerClassNames\\\"]],\\\"edit-widget-overlay\\\",[23,[\\\"targetAttachment\\\"]],false]],{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"showRightPanel\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"dashboard/modals/edit-form/resize-handle\\\",null,[[\\\"onResizeModal\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"resizeModal\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"     \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-buttons btn-toolbar justify-content-between side-drawer-shrink-btn\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"side-drawer-button\\\"],[11,\\\"data-test-toggle-side-drawer\\\",\\\"\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-angle-double-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"sideDrawers\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[12,\\\"style\\\",[28,[\\\"height:inherit;  visibility:\\\",[22,1,[\\\"visibility\\\"]]]]],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[22,1,[\\\"name\\\"]]],[[\\\"stackFrame\\\",\\\"currentState\\\",\\\"setSideDrawerWidth\\\",\\\"onCloseClick\\\",\\\"onShrinkClick\\\"],[[22,1,[\\\"stackFrame\\\"]],[22,1,[\\\"currentState\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setSideDrawerWidth\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer-container/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", [\"exports\", \"ember-light-table\"], function (_exports, _emberLightTable) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // eslint-disable-next-line no-unused-vars\n  let mockedUserEntries = null;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    events: null,\n    eventsChanged: false,\n    componentName: 'activityLogs',\n    onFilteredEventsChange: Ember.observer('filteredEvents', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableRows');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const currColumns = this.get('columns');\n      const table = new _emberLightTable.default(currColumns);\n      this.set('table', table);\n      mockedUserEntries = [];\n      this.set('events', []); // initialize key observer\n\n      this.onFilteredEventsChange();\n      this.get('fetchEventsTask').perform();\n    },\n\n    filteredSections: Ember.computed('editableSections', function () {\n      const sections = Ember.copy(this.get('editableSections'), true) || [];\n      return sections.map(section => {\n        return section;\n      }).filter(section => section.fields.length > 0);\n    }),\n    filteredEvents: Ember.computed('eventsChanged', function () {\n      let events = this.get('events') || []; // sort reverse-chronologically while we're at it\n\n      events = events.sortBy('date');\n      events.reverse();\n      return events;\n    }),\n\n    updateTableRows() {\n      const table = this.get('table');\n      const filteredEvents = this.get('filteredEvents');\n      table.setRows(filteredEvents);\n    },\n\n    async buildUserInfo(eventInfo) {\n      const driverId = eventInfo.driver ? eventInfo.driver.get('driverId') : null;\n      const vehicleId = eventInfo.vehicle ? eventInfo.vehicle.get('callSign') : null;\n      let driverInfo = '';\n\n      if (driverId) {\n        driverInfo = `Driver ${driverId}`;\n      } else if (vehicleId) {\n        driverInfo = `Vehicle ${vehicleId}`;\n      }\n\n      if (!Ember.isEmpty(eventInfo.userId) && eventInfo.userId !== '0') {\n        let userModel = await this.store.peekRecord('sso-user', eventInfo.userId);\n\n        if (Ember.isEmpty(userModel)) {\n          userModel = await this.store.findRecord('sso-user', eventInfo.userId).catch(() => {\n            return '';\n          });\n        }\n\n        if (!Ember.isEmpty(userModel)) {\n          const firstName = userModel.get('firstName');\n\n          if (firstName === 'Driver') {\n            return driverInfo;\n          }\n\n          return `${userModel.get('fullName')}`;\n        }\n      }\n\n      return driverInfo;\n    },\n\n    processActivityLogs(activityLogs, loggingType) {\n      const events = this.get('events');\n      activityLogs.data.map(async activityLog => {\n        const eventTime = activityLog.attributes.time;\n        const logTime = activityLog.attributes.createdAt;\n        const userInfo = await this.buildUserInfo(activityLog.attributes);\n        const eventLog = activityLog.attributes.eventLog;\n\n        for (const key in eventLog) {\n          if (eventLog.hasOwnProperty(key)) {\n            const eventLogType = eventLog[key];\n            eventLogType.map(event => {\n              if (event.loggingType === loggingType) {\n                event.date = eventTime;\n                event.user = userInfo;\n                event.logTime = logTime;\n                events.push(event);\n              }\n            });\n          }\n        }\n\n        this.toggleProperty('eventsChanged');\n      });\n    },\n\n    validateRecords() {\n      let valid = true;\n      const addActivityLog = this.get('addActivityLog');\n      const activity = this.get('userActivitySelected');\n      const details = this.get('details');\n      this.set('errors', []);\n\n      if (!addActivityLog) {\n        this.get('errors').pushObject('Please Open Activity Entry Form through Plus Icon before Approving');\n        return false;\n      }\n\n      if (Ember.isEmpty(activity)) {\n        valid = false;\n        this.get('errors').pushObject('Must Select an Activity');\n      }\n\n      if (Ember.isEmpty(details)) {\n        valid = false;\n        this.get('errors').pushObject('Must Enter Details');\n      }\n\n      return valid;\n    },\n\n    actions: {\n      onValueChange(valuePath, options) {\n        let value = options;\n\n        if (typeof options === 'object') {\n          value = options.get('name');\n        }\n\n        this.set(valuePath, value);\n      },\n\n      onAddClick() {\n        this.set('errors', null);\n        this.toggleProperty('addActivityLog');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/config\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _config, _component, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const BOOKING_LOGGING_TYPE = 'booking';\n  const NO_SHOW_ACTION_TYPE = 'noShow';\n\n  var _default = _component.default.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    columns: _config.columns,\n    table: null,\n    userActivitySelected: null,\n    errors: null,\n    details: null,\n    mockedUserEntries: null,\n    addActivityLog: false,\n    config: _config.default,\n    isAvlmLite: _environment.default.APP.avlmLite,\n    booking: Ember.computed.readOnly('stackFrame.options.booking'),\n    bookingId: Ember.computed.readOnly('booking.id'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    isPlayback: Ember.computed.alias('workspace.isPlaybackWorkspace'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    startDate: Ember.computed.alias('workspace.startDate'),\n    endDate: Ember.computed.alias('workspace.endDate'),\n    title: Ember.computed.alias('displayName'),\n    isShrinkState: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('userActivitySelected', currentState.userActivity);\n        this.set('details', currentState.details);\n        this.set('isShrinkState', currentState.isShrinkState);\n        this.set('addActivityLog', currentState.addActivityLog);\n        this.set('errors', currentState.errors);\n      }\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.setCurrentStateInfo();\n    },\n\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.store;\n      const bookingId = this.get('booking.id');\n      const adaptor = this.get('booking.adaptor') ? this.get('booking.adaptor') : 'activity-log';\n      const activityLogAdapter = this.get('store').adapterFor(adaptor);\n\n      function fetchFullRecords(activityLogs) {\n        let driverDetails = null;\n        return Promise.all(activityLogs.data.map(activityLog => {\n          const driver = store.peekRecord('driver', activityLog.attributes.driverId);\n          const vehicle = store.peekRecord('vehicle', activityLog.attributes.vehicleId);\n\n          if (driver) {\n            activityLog.attributes.driver = driver;\n            driverDetails = driver;\n          } else if (activityLog.attributes.driverId && parseInt(activityLog.attributes.driverId, 10) > 0) {\n            store.findRecord('driver', activityLog.attributes.driverId).then(driverModel => {\n              activityLog.attributes.driver = driverModel;\n              driverDetails = driver;\n            });\n          }\n\n          if (activityLog.attributes.actionType === NO_SHOW_ACTION_TYPE && driverDetails) {\n            activityLog.attributes.driver = driverDetails;\n          }\n\n          if (vehicle) {\n            activityLog.attributes.vehicle = vehicle;\n          } else if (activityLog.attributes.vehicleId && parseInt(activityLog.attributes.vehicleId, 10) > 0) {\n            store.findRecord('vehicle', activityLog.attributes.vehicleId).then(vehicleModel => {\n              activityLog.attributes.vehicle = vehicleModel;\n            });\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      } // clear events table\n\n\n      this.set('events', []);\n      yield activityLogAdapter.getActivityLogs({\n        bookingId,\n        eventLog: true\n      }).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        this.processActivityLogs(activityLogs, BOOKING_LOGGING_TYPE);\n      });\n    }).drop(),\n\n    setCurrentStateInfo() {\n      const userActivity = this.get('userActivitySelected');\n      const details = this.get('details');\n      let currentState = this.get('currentState');\n      this.set('isShrinkState', true);\n      const isShrinkState = this.get('isShrinkState');\n      const addActivityLog = this.get('addActivityLog');\n      const errors = this.get('errors');\n      currentState = {\n        userActivity,\n        details,\n        isShrinkState,\n        addActivityLog,\n        errors\n      };\n      this.set('currentState', currentState);\n    },\n\n    actions: {\n      onSaveClick() {\n        if (!this.validateRecords()) return;\n        this.set('errors', null);\n        const activity = this.get('userActivitySelected');\n        const details = this.get('details');\n        const tooltip = this.get('tooltip');\n        const title = this.get('title');\n        const bookingId = this.get('fetchEventsTask.context.bookingId');\n        const notifications = this.get('notifications');\n        const self = this;\n        const actions = [{\n          activity,\n          loggingType: 'booking',\n          details\n        }];\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          secondaryActionText: 'Cancel',\n          primaryAction: () => {\n            const activityLogAdapter = self.get('store').adapterFor('activity-log');\n            const createBookingActivity = activityLogAdapter.createGenericBookingActivity(bookingId, actions);\n            return createBookingActivity.then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              self.toggleProperty('addActivityLog');\n              self.fetchEventsTask.perform();\n              self.set('userActivitySelected', '');\n              self.set('details', '');\n            }).catch(() => {\n              notifications.warning('Failed to add Activity Log');\n              tooltip.reset();\n            });\n          },\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      },\n\n      onAddClick() {\n        this.set('errors', null);\n        this.set('userActivitySelected', null);\n        this.set('details', null);\n        this.set('isShrinkState', false);\n        this.toggleProperty('addActivityLog');\n      },\n\n      onShrinkClick() {\n        this.setCurrentStateInfo();\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Activity Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Log Time',\n    valuePath: 'logTime',\n    format: logTime => (0, _moment.default)(logTime).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'booking-activity-log-type',\n        optionSearchPath: 'name',\n        optionConfigCategoryName: 'config-System_Configuration-Activity_Log_Types-booking'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"5zm23ypL\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log booking-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onAddClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isAvlmLite\\\"]],[23,[\\\"isPlayback\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],\\\"onAddClick\\\"],null]],null],[27,\\\"if\\\",[[23,[\\\"isPlayback\\\"]],null,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs' @ L22:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs' @ L40:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs' @ L42:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs' @ L48:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs' @ L55:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"addActivityLog\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\",\\\"onConfirm\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null],[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/activity-log/booking-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/route-activity-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/activity-log/route-activity-log/config\", \"moment\", \"lodash\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _config, _moment, _lodash, _component, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROUTE_LOGGING_TYPE = 'route';\n  const avlmEventMockedEntry = {\n    id: '9',\n    type: 'routeExecEvent',\n    routeId: '1',\n    content: {\n      type: 'userAddedEntry',\n      details: 'User Entry PlaceHolder',\n      activity: 'activity placeholder',\n      userId: 'User ID PlaceHolder',\n      actualTime: null\n    },\n    attributes: {\n      routeId: '1',\n      source: {\n        type: 'webApp'\n      },\n      driver: {\n        id: '1',\n        badgeNr: '1',\n        name: 'Arthur Rojas'\n      },\n      vehicle: {\n        id: '10',\n        callsign: '10',\n        odo: 1000,\n        location: {\n          coord: {\n            lat: 50,\n            lng: 50\n          },\n          time: (0, _moment.default)().toDate()\n        }\n      }\n    }\n  };\n\n  var _default = _component.default.extend({\n    tagName: '',\n    classNames: ['route-activity-log'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    config: _config.default,\n    userActivitySelected: null,\n    errors: null,\n    details: null,\n    columns: _config.columns,\n    table: null,\n    addActivityLog: false,\n    isAvlmLite: _environment.default.APP.avlmLite,\n    route: Ember.computed.readOnly('stackFrame.options.route'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    title: Ember.computed.alias('displayName'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    startDate: Ember.computed.alias('workspace.startDate'),\n    endDate: Ember.computed.alias('workspace.endDate'),\n    isPlayback: Ember.computed.alias('workspace.isPlaybackDashboard'),\n    isReconcile: Ember.computed.alias('workspace.isReconcileDashboard'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('userActivitySelected', currentState.userActivity);\n        this.set('details', currentState.details);\n        this.set('addActivityLog', currentState.addActivityLog);\n      }\n    },\n\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.store;\n      const defaultAdaptor = this.get('isReconcile') ? 'archived-activity-log' : 'activity-log';\n      const routeId = this.get('route.id');\n      const adaptor = this.get('route.adaptor') ? this.get('route.adaptor') : defaultAdaptor;\n      const activityLogAdapter = this.get('store').adapterFor(adaptor);\n\n      function fetchFullRecords(activityLogs) {\n        let driverDetails = null;\n        return Promise.all(activityLogs.data.map(activityLog => {\n          const driver = activityLog.attributes.driverId ? store.peekRecord('driver', activityLog.attributes.driverId) : null;\n          const vehicle = activityLog.attributes.vehicleId ? store.peekRecord('vehicle', activityLog.attributes.vehicleId) : null;\n\n          if (driver) {\n            activityLog.attributes.driver = driver;\n            driverDetails = driver;\n          } else if (activityLog.attributes.driverId && parseInt(activityLog.attributes.driverId, 10) > 0) {\n            store.findRecord('driver', activityLog.attributes.driverId).then(driverModel => {\n              activityLog.attributes.driver = driverModel;\n              driverDetails = driver;\n            });\n          }\n\n          if (activityLog.attributes.actionType === 'noShow' && driverDetails) {\n            activityLog.attributes.driver = driverDetails;\n          }\n\n          if (vehicle) {\n            activityLog.attributes.vehicle = vehicle;\n          } else if (activityLog.attributes.vehicleId && parseInt(activityLog.attributes.vehicleId, 10) > 0) {\n            store.findRecord('vehicle', activityLog.attributes.vehicleId).then(vehicleModel => {\n              activityLog.attributes.vehicle = vehicleModel;\n            });\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      } // clear events table\n\n\n      this.set('events', []);\n      const queryOptions = this.get('isReconcile') ? {\n        routeId,\n        type: 'route',\n        startDate: this.get('dwhService.reconcileDateMinusOne'),\n        endDate: this.get('dwhService.reconcileDatePlusOne')\n      } : {\n        routeId,\n        eventLog: true,\n        type: 'route'\n      };\n      yield activityLogAdapter.getActivityLogs(queryOptions).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        this.processActivityLogs(activityLogs, ROUTE_LOGGING_TYPE);\n      });\n    }).drop(),\n    actions: {\n      onSaveClick() {\n        if (!this.validateRecords()) return;\n        this.set('errors', null);\n        const activity = this.get('userActivitySelected');\n        const details = this.get('details');\n        const tooltip = this.get('tooltip');\n        const currentUser = this.session.data.authenticated.userId;\n        const title = this.get('title');\n        avlmEventMockedEntry.content.details = details;\n        avlmEventMockedEntry.content.activity = activity;\n        avlmEventMockedEntry.content.userId = currentUser;\n        avlmEventMockedEntry.content.actualTime = (0, _moment.default)().toDate();\n        const newEntry = (0, _lodash.cloneDeep)(avlmEventMockedEntry);\n        const fetchEventsTask = this.get('fetchEventsTask');\n        const notifications = this.get('notifications');\n        const self = this;\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          secondaryActionText: 'Cancel',\n\n          primaryAction() {\n            const activityLogAdapter = self.get('store').adapterFor('activity-log');\n            const createRouteActivity = activityLogAdapter.createUserRouteActivity(newEntry, fetchEventsTask, 'route');\n            return createRouteActivity.then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              self.toggleProperty('addActivityLog');\n              self.fetchEventsTask.perform();\n              self.set('userActivitySelected', '');\n              self.set('details', '');\n            }).catch(() => {\n              notifications.warning('Failed to add Activity Log');\n              tooltip.reset();\n            });\n          },\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      },\n\n      onAddClick() {\n        this.set('errors', null);\n        this.set('userActivitySelected', null);\n        this.set('details', null);\n        this.toggleProperty('addActivityLog');\n      },\n\n      onShrinkClick() {\n        const userActivity = this.get('userActivitySelected');\n        const details = this.get('details');\n        let currentState = this.get('currentState');\n        const addActivityLog = this.get('addActivityLog');\n        currentState = {\n          userActivity,\n          details,\n          addActivityLog\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/route-activity-log/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Activity Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Log Time',\n    valuePath: 'logTime',\n    format: logTime => (0, _moment.default)(logTime).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'route-activity-log-type',\n        optionSearchPath: 'displayName',\n        optionConfigCategoryName: 'config-System_Configuration-Activity_Log_Types-route'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"GDsqhNap\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log route-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onAddClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isAvlmLite\\\"]],[23,[\\\"isPlayback\\\"]],[23,[\\\"isReconcile\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],\\\"onAddClick\\\"],null]],null],[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isPlayback\\\"]],[23,[\\\"isReconcile\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs' @ L23:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs' @ L41:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs' @ L43:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs' @ L49:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs' @ L56:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"addActivityLog\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/activity-log/route-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/config\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/environment\", \"moment\", \"lodash\"], function (_exports, _emberConcurrency, _config, _component, _environment, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SUBSCRIPTION_LOGGING_TYPE = 'subscription';\n  const NO_SHOW_ACTION_TYPE = 'noShow';\n  const avlmEventMockedEntry = {\n    id: '9',\n    type: 'routeExecEvent',\n    routeId: '1',\n    content: {\n      type: 'userEntry',\n      details: 'User Entry PlaceHolder',\n      activity: 'activity placeholder',\n      userId: 'User ID PlaceHolder',\n      actualTime: null\n    },\n    attributes: {\n      routeId: '1',\n      source: {\n        type: 'webApp'\n      },\n      driver: {\n        id: '1',\n        badgeNr: '1',\n        name: 'Arthur Rojas'\n      },\n      vehicle: {\n        id: '10',\n        callsign: '10',\n        odo: 1000,\n        location: {\n          coord: {\n            lat: 50,\n            lng: 50\n          },\n          time: (0, _moment.default)().toDate()\n        }\n      }\n    }\n  };\n\n  var _default = _component.default.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    columns: _config.columns,\n    table: null,\n    userActivitySelected: null,\n    errors: null,\n    details: null,\n    mockedUserEntries: null,\n    addActivityLog: false,\n    config: _config.default,\n    isAvlmLite: _environment.default.APP.avlmLite,\n    subscription: Ember.computed.readOnly('stackFrame.options.subscription'),\n    subscriptionId: Ember.computed.readOnly('subscription.id'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    isPlayback: Ember.computed.alias('workspace.isPlaybackWorkspace'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    startDate: Ember.computed.alias('workspace.startDate'),\n    endDate: Ember.computed.alias('workspace.endDate'),\n    title: Ember.computed.alias('displayName'),\n    isDrawerShrunken: Ember.computed.alias('workspace.isDrawerShrunken'),\n    isShrinkState: false,\n    onDrawerShrinkChange: Ember.observer('isDrawerShrunken', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'onDrawerShrinkChanges');\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('userActivitySelected', currentState.userActivity);\n        this.set('details', currentState.details);\n        this.set('isShrinkState', currentState.isShrinkState);\n        this.set('addActivityLog', currentState.addActivityLog);\n      }\n    },\n\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.store;\n      const subscriptionId = this.get('subscription.id');\n      const adaptor = this.get('subscription.adaptor') ? this.get('subscription.adaptor') : 'activity-log';\n      const activityLogAdapter = this.get('store').adapterFor(adaptor);\n\n      function fetchFullRecords(activityLogs) {\n        let driverDetails = null;\n        return Promise.all(activityLogs.data.map(activityLog => {\n          const driver = store.peekRecord('driver', activityLog.attributes.driverId);\n          const vehicle = store.peekRecord('vehicle', activityLog.attributes.vehicleId);\n\n          if (driver) {\n            activityLog.attributes.driver = driver;\n            driverDetails = driver;\n          } else if (activityLog.attributes.driverId && parseInt(activityLog.attributes.driverId, 10) > 0) {\n            store.findRecord('driver', activityLog.attributes.driverId).then(driverModel => {\n              activityLog.attributes.driver = driverModel;\n              driverDetails = driver;\n            });\n          }\n\n          if (activityLog.attributes.actionType === NO_SHOW_ACTION_TYPE && driverDetails) {\n            activityLog.attributes.driver = driverDetails;\n          }\n\n          if (vehicle) {\n            activityLog.attributes.vehicle = vehicle;\n          } else if (activityLog.attributes.vehicleId && parseInt(activityLog.attributes.vehicleId, 10) > 0) {\n            store.findRecord('vehicle', activityLog.attributes.vehicleId).then(vehicleModel => {\n              activityLog.attributes.vehicle = vehicleModel;\n            });\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      } // clear events table\n\n\n      this.set('events', []);\n      yield activityLogAdapter.getActivityLogs({\n        subscriptionId,\n        eventLog: true\n      }).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        this.processActivityLogs(activityLogs, SUBSCRIPTION_LOGGING_TYPE);\n      });\n    }).drop(),\n\n    /* Reg - NYAAR-20225\n     */\n    onDrawerShrinkChanges() {\n      const isDrawerShrunken = this.get('isDrawerShrunken');\n\n      if (isDrawerShrunken) {\n        const userActivity = this.get('userActivitySelected');\n        const details = this.get('details');\n        const isShrinkState = this.get('isShrinkState');\n        const addActivityLog = this.get('addActivityLog');\n        this.setCurrentState(userActivity, details, isShrinkState, addActivityLog);\n      }\n    },\n\n    setCurrentState(userActivity, details, isShrinkState, addActivityLog) {\n      let currentState = this.get('currentState');\n      currentState = {\n        userActivity,\n        details,\n        isShrinkState,\n        addActivityLog\n      };\n      this.set('currentState', currentState);\n    },\n\n    actions: {\n      onSaveClick() {\n        if (!this.validateRecords()) return;\n        this.set('errors', null);\n        const activity = this.get('userActivitySelected');\n        const details = this.get('details');\n        const tooltip = this.get('tooltip');\n        const currentUser = this.session.data.authenticated.userId;\n        const title = this.get('title');\n        avlmEventMockedEntry.content.details = details;\n        avlmEventMockedEntry.content.activity = activity;\n        avlmEventMockedEntry.content.userId = currentUser;\n        avlmEventMockedEntry.content.actualTime = (0, _moment.default)().toDate();\n        const newEntry = (0, _lodash.cloneDeep)(avlmEventMockedEntry);\n        const fetchEventsTask = this.get('fetchEventsTask');\n        const notifications = this.get('notifications');\n        const self = this;\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          secondaryActionText: 'Cancel',\n\n          primaryAction() {\n            const activityLogAdapter = self.get('store').adapterFor('activity-log');\n            const createSubscriptionActivity = activityLogAdapter.createUserSubscriptionActivity(newEntry, fetchEventsTask);\n            return createSubscriptionActivity.then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              self.toggleProperty('addActivityLog');\n              self.fetchEventsTask.perform();\n              self.set('userActivitySelected', '');\n              self.set('details', '');\n            }).catch(() => {\n              notifications.warning('Failed to add Activity Log');\n              tooltip.reset();\n            });\n          },\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      },\n\n      onAddClick() {\n        this.set('errors', null);\n        this.set('userActivitySelected', null);\n        this.set('details', null);\n        this.set('isShrinkState', false);\n        this.toggleProperty('addActivityLog');\n      },\n\n      onShrinkClick() {\n        const userActivity = this.get('userActivitySelected');\n        const details = this.get('details');\n        this.set('isShrinkState', true);\n        const isShrinkState = this.get('isShrinkState');\n        const addActivityLog = this.get('addActivityLog');\n        this.setCurrentState(userActivity, details, isShrinkState, addActivityLog);\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Date/Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'subscription-activity-log-type',\n        optionSearchPath: 'name',\n        optionConfigCategoryName: 'config-System_Configuration-Activity_Log_Types-subscription'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"cuwQF6c0\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log subscription-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onAddClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isAvlmLite\\\"]],[23,[\\\"isPlayback\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],\\\"onAddClick\\\"],null]],null],[27,\\\"if\\\",[[23,[\\\"isPlayback\\\"]],null,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs' @ L22:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs' @ L40:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs' @ L42:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs' @ L48:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs' @ L55:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"addActivityLog\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\",\\\"onConfirm\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null],[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/activity-log/subscription-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/config\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/environment\", \"moment\", \"lodash\"], function (_exports, _emberConcurrency, _config, _component, _environment, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TRIP_LOGGING_TYPE = 'trip';\n  const avlmEventMockedEntry = {\n    id: '9',\n    type: 'routeExecEvent',\n    routeId: '1',\n    content: {\n      type: 'userAddedEntry',\n      details: 'User Entry PlaceHolder',\n      activity: 'activity placeholder',\n      userId: 'User ID PlaceHolder',\n      actualTime: null\n    },\n    attributes: {\n      routeId: '1',\n      source: {\n        type: 'webApp'\n      },\n      driver: {\n        id: '1',\n        badgeNr: '1',\n        name: 'Arthur Rojas'\n      },\n      vehicle: {\n        id: '10',\n        callsign: '10',\n        odo: 1000,\n        location: {\n          coord: {\n            lat: 50,\n            lng: 50\n          },\n          time: (0, _moment.default)().toDate()\n        }\n      }\n    }\n  };\n\n  var _default = _component.default.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    columns: _config.columns,\n    table: null,\n    userActivitySelected: null,\n    errors: null,\n    details: null,\n    mockedUserEntries: null,\n    addActivityLog: false,\n    config: _config.default,\n    isAvlmLite: _environment.default.APP.avlmLite,\n    trip: Ember.computed.readOnly('stackFrame.options.trip'),\n    tripId: Ember.computed.readOnly(_environment.default.APP.avlmLite ? 'trip.externalId' : 'trip.tripId'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    isPlayback: Ember.computed.alias('workspace.isPlaybackWorkspace'),\n    isReconcile: Ember.computed.alias('workspace.isReconcileDashboard'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    startDate: Ember.computed.alias('workspace.startDate'),\n    endDate: Ember.computed.alias('workspace.endDate'),\n    title: Ember.computed.alias('displayName'),\n    isShrinkState: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('userActivitySelected', currentState.userActivity);\n        this.set('details', currentState.details);\n        this.set('isShrinkState', currentState.isShrinkState);\n        this.set('addActivityLog', currentState.addActivityLog);\n      }\n    },\n\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.store;\n      const tripId = this.get('trip.id');\n      const defaultAdaptor = this.get('isReconcile') ? 'archived-activity-log' : 'activity-log';\n      const adaptor = this.get('trip.adaptor') ? this.get('trip.adaptor') : defaultAdaptor;\n      const activityLogAdapter = this.get('store').adapterFor(adaptor);\n\n      function fetchFullRecords(activityLogs) {\n        let driverDetails = null;\n        return Promise.all(activityLogs.data.map(activityLog => {\n          const driver = activityLog.attributes.driverId ? store.peekRecord('driver', activityLog.attributes.driverId) : null;\n          const vehicle = activityLog.attributes.vehicleId ? store.peekRecord('vehicle', activityLog.attributes.vehicleId) : null;\n\n          if (driver) {\n            activityLog.attributes.driver = driver;\n            driverDetails = driver;\n          } else if (activityLog.attributes.driverId && parseInt(activityLog.attributes.driverId, 10) > 0) {\n            store.findRecord('driver', activityLog.attributes.driverId).then(driverModel => {\n              activityLog.attributes.driver = driverModel;\n              driverDetails = driver;\n            });\n          }\n\n          if (activityLog.attributes.actionType === 'noShow' && driverDetails) {\n            activityLog.attributes.driver = driverDetails;\n          }\n\n          if (vehicle) {\n            activityLog.attributes.vehicle = vehicle;\n          } else if (activityLog.attributes.vehicleId && parseInt(activityLog.attributes.vehicleId, 10) > 0) {\n            store.findRecord('vehicle', activityLog.attributes.vehicleId).then(vehicleModel => {\n              activityLog.attributes.vehicle = vehicleModel;\n            });\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      } // clear events table\n\n\n      this.set('events', []);\n      const queryOptions = this.get('isReconcile') ? {\n        tripId,\n        type: 'trip',\n        startDate: this.get('dwhService.reconcileDateMinusOne'),\n        endDate: this.get('dwhService.reconcileDatePlusOne')\n      } : {\n        tripId,\n        eventLog: true,\n        type: 'trip'\n      };\n      yield activityLogAdapter.getActivityLogs(queryOptions).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        this.processActivityLogs(activityLogs, TRIP_LOGGING_TYPE);\n      });\n    }).drop(),\n    actions: {\n      onSaveClick() {\n        if (!this.validateRecords()) return;\n        this.set('errors', null);\n        const activity = this.get('userActivitySelected');\n        const details = this.get('details');\n        const tooltip = this.get('tooltip');\n        const currentUser = this.session.data.authenticated.userId;\n        const title = this.get('title');\n        avlmEventMockedEntry.content.details = details;\n        avlmEventMockedEntry.content.activity = activity;\n        avlmEventMockedEntry.content.userId = currentUser;\n        avlmEventMockedEntry.content.actualTime = (0, _moment.default)().toDate();\n        const newEntry = (0, _lodash.cloneDeep)(avlmEventMockedEntry);\n        const fetchEventsTask = this.get('fetchEventsTask');\n        const notifications = this.get('notifications');\n        const self = this;\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          secondaryActionText: 'Cancel',\n\n          primaryAction() {\n            const activityLogAdapter = self.get('store').adapterFor('activity-log');\n            const createTripActivity = activityLogAdapter.createUserTripActivity(newEntry, fetchEventsTask);\n            return createTripActivity.then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              self.toggleProperty('addActivityLog');\n              self.fetchEventsTask.perform();\n              self.set('userActivitySelected', '');\n              self.set('details', '');\n            }).catch(() => {\n              notifications.warning('Failed to add Activity Log');\n              tooltip.reset();\n            });\n          },\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      },\n\n      onAddClick() {\n        this.set('errors', null);\n        this.set('userActivitySelected', null);\n        this.set('details', null);\n        this.set('isShrinkState', false);\n        this.toggleProperty('addActivityLog');\n      },\n\n      onShrinkClick() {\n        const userActivity = this.get('userActivitySelected');\n        const details = this.get('details');\n        let currentState = this.get('currentState');\n        this.set('isShrinkState', true);\n        const isShrinkState = this.get('isShrinkState');\n        const addActivityLog = this.get('addActivityLog');\n        currentState = {\n          userActivity,\n          details,\n          isShrinkState,\n          addActivityLog\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Activity Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Log Time',\n    valuePath: 'logTime',\n    format: logTime => (0, _moment.default)(logTime).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'trip-activity-log-type',\n        optionSearchPath: 'displayName',\n        optionConfigCategoryName: 'config-System_Configuration-Activity_Log_Types-trip'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8ehPoItn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log trip-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onAddClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isAvlmLite\\\"]],[23,[\\\"isPlayback\\\"]],[23,[\\\"isReconcile\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],\\\"onAddClick\\\"],null]],null],[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isPlayback\\\"]],[23,[\\\"isReconcile\\\"]]],null],null,[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs' @ L22:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs' @ L40:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs' @ L42:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs' @ L48:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs' @ L55:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"addActivityLog\\\"]]],null,{\\\"statements\\\":[[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\",\\\"onConfirm\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null],[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/activity-log/trip-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/user-activity-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/pods/components/side-drawer/activity-log/user-activity-log/config\"], function (_exports, _emberConcurrency, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const USER_LOGGING_TYPE = 'user';\n\n  var _default = _component.default.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    table: null,\n    user: Ember.computed.readOnly('stackFrame.options.user'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    startDate: Ember.computed.alias('workspace.startDate'),\n    endDate: Ember.computed.alias('workspace.endDate'),\n    title: Ember.computed.alias('displayName'),\n    config: _config.default,\n    columns: _config.columns,\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.store;\n      const userId = this.get('user.userId');\n      const adaptor = this.get('perm-user.adaptor') ? this.get('perm-user.adaptor') : 'activity-log';\n      const activityLogAdapter = this.get('store').adapterFor(adaptor);\n\n      function fetchFullRecords(activityLogs) {\n        let driverDetails = null;\n        return Promise.all(activityLogs.data.map(activityLog => {\n          const driver = store.peekRecord('driver', activityLog.attributes.driverId);\n          const vehicle = store.peekRecord('vehicle', activityLog.attributes.vehicleId);\n\n          if (driver) {\n            activityLog.attributes.driver = driver;\n            driverDetails = driver;\n          } else if (activityLog.attributes.driverId && parseInt(activityLog.attributes.driverId, 10) > 0) {\n            store.findRecord('driver', activityLog.attributes.driverId).then(driverModel => {\n              activityLog.attributes.driver = driverModel;\n              driverDetails = driver;\n            });\n          }\n\n          if (activityLog.attributes.actionType === 'noShow' && driverDetails) {\n            activityLog.attributes.driver = driverDetails;\n          }\n\n          if (vehicle) {\n            activityLog.attributes.vehicle = vehicle;\n          } else if (activityLog.attributes.vehicleId && parseInt(activityLog.attributes.vehicleId, 10) > 0) {\n            store.findRecord('vehicle', activityLog.attributes.vehicleId).then(vehicleModel => {\n              activityLog.attributes.vehicle = vehicleModel;\n            });\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      } // clear events table\n\n\n      this.set('events', []);\n      yield activityLogAdapter.getActivityLogs({\n        userId,\n        eventLog: true,\n        type: 'user'\n      }).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        this.processActivityLogs(activityLogs, USER_LOGGING_TYPE);\n      });\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/user-activity-log/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Activity Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Log Time',\n    valuePath: 'logTime',\n    format: logTime => (0, _moment.default)(logTime).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"F+eAFqAV\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log trip-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs' @ L20:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs' @ L38:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs' @ L40:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs' @ L46:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs' @ L53:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/activity-log/user-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/config\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _config, _component, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const VEHICLE_LOGGING_TYPE = 'vehicle';\n\n  var _default = _component.default.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    columns: _config.columns,\n    vehicle: Ember.computed.readOnly('stackFrame.options.vehicle'),\n    route: Ember.computed.readOnly(_environment.default.APP.avlmLite ? 'vehicle.latestRoute' : 'vehicle.latestDsRoute.route'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    title: Ember.computed.alias('displayName'),\n    table: null,\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    startDate: Ember.computed.alias('workspace.startDate'),\n    endDate: Ember.computed.alias('workspace.endDate'),\n    onFilteredEventsChange: Ember.observer('filteredEvents', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'updateTableRows');\n    }),\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.store;\n      const vehicleId = this.get('vehicle.id');\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n\n      function fetchFullRecords(activityLogs) {\n        return Promise.all(activityLogs.data.map(activityLog => {\n          const driver = store.peekRecord('driver', activityLog.attributes.driverId);\n          const vehicle = store.peekRecord('vehicle', activityLog.attributes.vehicleId);\n\n          if (driver) {\n            activityLog.attributes.driver = driver;\n          } else if (activityLog.attributes.driverId && parseInt(activityLog.attributes.driverId, 10) > 0) {\n            store.findRecord('driver', activityLog.attributes.driverId).then(driverModel => {\n              activityLog.attributes.driver = driverModel;\n            });\n          }\n\n          if (vehicle) {\n            activityLog.attributes.vehicle = vehicle;\n          } else if (activityLog.attributes.vehicleId && parseInt(activityLog.attributes.vehicleId, 10) > 0) {\n            store.findRecord('vehicle', activityLog.attributes.vehicleId).then(vehicleModel => {\n              activityLog.attributes.vehicle = vehicleModel;\n            });\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      } // clear events table\n\n\n      this.set('events', []);\n      yield activityLogAdapter.getActivityLogs({\n        vehicleId,\n        eventLog: true\n      }).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        this.processActivityLogs(activityLogs, VEHICLE_LOGGING_TYPE);\n      });\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/config\", [\"exports\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Activity Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Log Time',\n    valuePath: 'logTime',\n    format: logTime => (0, _moment.default)(logTime).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n});","define(\"adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"SiNT+Xj8\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log vehicle-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs' @ L21:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"height\\\"],[\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs' @ L39:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs' @ L41:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs' @ L47:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs' @ L54:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/activity-log/vehicle-activity-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-break/component\", [\"exports\", \"ember-light-table\", \"adept-iq/utils/unwrapProxy\", \"moment\", \"ember-concurrency\", \"lodash\", \"adept-iq/pods/components/side-drawer/add-break/config\", \"adept-iq/utils/save-records\", \"adept-iq/models/break-type\", \"adept-iq/classes/impact-stop\", \"adept-iq/mixins/version-check\", \"adept-iq/config/environment\"], function (_exports, _emberLightTable, _unwrapProxy, _moment, _emberConcurrency, _lodash, _config, _saveRecords, _breakType, _impactStop, _versionCheck, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['add-break-side-drawer'],\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    canSave: false,\n    onShrinkClick: null,\n    onCloseClick: null,\n    onSolutionRowClick: null,\n    usePlaceHolderTask: true,\n    dispatchSchedule: null,\n    stopsTable: null,\n    currentState: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    timeFormat: _environment.default.dateTimeFormat.dateTimeFlatPickr,\n    selectedImpactPeriod: 'before',\n    rowComponent: 'table/rows/colored-row',\n    driverBreak: Ember.computed.readOnly('stackFrame.options.driverBreak'),\n    trips: Ember.computed.readOnly('stackFrame.options.trips'),\n    saveRecordFunction: Ember.computed.readOnly('stackFrame.options.saveDriverBreakFunction'),\n    minDate: null,\n    isError: Ember.computed.alias('getAddBreakRecords.last.isError'),\n    isFloatingBreakType: Ember.computed.equal('driverBreak.breakType.id', _breakType.FLOATING_BREAK),\n    isFixedBreakType: Ember.computed.equal('driverBreak.breakType.id', _breakType.FIXED_BREAK),\n    isAfterTable: Ember.computed.equal('selectedImpactPeriod', 'after'),\n    componentName: 'addBreak',\n    requestTime: null,\n    value: null,\n    addressOptions: null,\n    breakTypes: null,\n    errorText: null,\n    selectedBreakTypeId: null,\n    collapseState: 'collapsed',\n    viewImpactButton: false,\n    disabled: false,\n    invalidRequestTime: false,\n    errorClass: false,\n    fields: _config.fields,\n    isViewImpactButton: Ember.computed('driverBreak.{breakType,place,requestTime,plannedDuration}', function () {\n      if (Ember.isEmpty(this.get('driverBreak.breakType')) || Ember.isEmpty(this.get('driverBreak.plannedDuration')) || Ember.isEmpty(this.get('driverBreak.requestTime')) || Ember.isEmpty(this.get('driverBreak.place.address'))) {\n        return false;\n      }\n\n      return true;\n    }),\n    projectedEndDate: Ember.computed('driverBreak.{plannedDuration,requestTime}', function () {\n      const plannedDuration = this.get('driverBreak.plannedDuration') ? this.get('driverBreak.plannedDuration') : '0';\n      const requestTime = this.get('driverBreak.requestTime');\n      if (!requestTime) return;\n      const requestTimeMoment = (0, _moment.default)(requestTime);\n      const estimatedEndMoment = requestTimeMoment.clone();\n      return estimatedEndMoment.add(parseInt(plannedDuration, 10), 'minutes').toDate();\n    }),\n    observeSelectImpactPeriod: Ember.observer('selectedImpactPeriod', function () {\n      const period = this.get('selectedImpactPeriod'); // TODO: Can the table rows be updated without an observer?\n\n      if (period === 'before') {\n        this.setBeforeTableRecords();\n        return false;\n      }\n\n      this.get('stopsTable').setRows(this.get(`impact.${period}.stops`));\n    }),\n    fieldChangeObserver: Ember.observer('driverBreak.{breakType,place,requestTime,plannedDuration}', function () {\n      this.validateRecords();\n      this.set('collapseState', 'collapsed');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const stopsTable = new _emberLightTable.default(_config.stopColumns);\n      const breakTypes = this.get('store').peekAll('break-type');\n      this.set('minDate', this.get('driverBreak.route.computedPlannedStartTime')); // eslint-disable-next-line new-cap\n\n      this.set('solutions', Ember.A([]));\n      this.set('stopsTable', stopsTable);\n      this.set('driverBreak.notes', '');\n      this.set('breakTypes', breakTypes);\n      this.setBeforeTableRecords();\n      this.setDefaultDriverBreak();\n      this.initialValidation();\n      this.availableBreakSlots(this.get('driverBreak.route.dispatchRoute'));\n    },\n\n    initialValidation() {\n      const requestTime = this.get('driverBreak.requestTime');\n      const duration = parseInt(this.get('driverBreak.plannedDuration'), 10);\n\n      if (duration && duration !== 'NaN' && !Ember.isNone(requestTime)) {\n        this.set('canSave', true);\n      }\n    },\n\n    //set floatingBreak as a default driverrbreak\n    setDefaultDriverBreak() {\n      const breakTypes = this.get('breakTypes');\n      const floatingBreak = breakTypes.find(breakType => breakType.id === _breakType.FLOATING_BREAK);\n      this.onbreakTypeChange(floatingBreak);\n    },\n\n    didInsertElement() {\n      this.loadCurrentState(); // side panel width for add-break\n\n      this.setSideDrawerWidth('600px');\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n      const currentDate = new Date();\n\n      if (currentState) {\n        const savePlace = currentState.savePlace;\n        this.set('selectedBreakTypeId', currentState.selectedBreakTypeId);\n        this.set('driverBreak.breakType', currentState.selectedBreakType);\n        this.set('driverBreak.requestTime', currentDate.toISOString());\n        this.set('driverBreak.plannedDuration', currentState.duration);\n        this.set('driverBreak.place.address.alias', savePlace.address.premise);\n        this.set('driverBreak.place.address.premise', savePlace.address.alias);\n        this.set('driverBreak.place.address.streetNumber', savePlace.address.streetNumber);\n        this.set('driverBreak.place.address.streetAddress', savePlace.address.streetAddress);\n        this.set('driverBreak.place.address.locality', savePlace.address.locality);\n        this.set('driverBreak.place.address.subRegion', savePlace.address.subRegion);\n        this.set('driverBreak.place.address.postalCode', savePlace.address.postalCode);\n        this.set('driverBreak.place.address.country', savePlace.address.country);\n        this.set('driverBreak.place.address.county', savePlace.address.county);\n        this.set('driverBreak.place.address.freeformAddress', savePlace.address.freeformAddress);\n        this.set('driverBreak.place.location.lat', savePlace.location.lat);\n        this.set('driverBreak.place.location.lng', savePlace.location.lng);\n        this.set('driverBreak.place.location.geoNode', savePlace.location.geoNode);\n        this.set('driverBreak.place.location.lat', savePlace.location.lat);\n      }\n    },\n\n    setBeforeTableRecords() {\n      const store = this.get('store'); // `orderedStopsWithBreaks` is built from the route's clusters, which do not hold the\n      // garage stops, so use the garage aware list instead. Otherwise the before table is\n      // missing the pullout / pullin garage stops that the after table (impact solution)\n      // does list. Waitlisted trip stops are dropped, as `orderedStopsWithBreaks` does,\n      // because they are not always cleared by socket updates.\n\n      const currentRouteStops = (this.get('driverBreak.route.dispatchRoute.orderedStopsWithGaragesAndBreaks') || []).filter(stop => !stop.get('trip.isWaitlisted'));\n      const stopPoints = currentRouteStops.reduce((impactStops, stop) => {\n        const stopId = stop.get('id').replace(/(B)/img, '');\n        const stopPoint = store.peekRecord('stop-point', stopId);\n\n        if (!stopPoint) {\n          // eslint-disable-next-line no-console\n          console.log('Is the record Empty');\n          return impactStops;\n        }\n\n        impactStops.push(_impactStop.default.create({\n          id: stop.get('id'),\n          eta: stopPoint.get('eta'),\n          otp: stop.get('otp'),\n          promiseTime: stop.get('promisedTime'),\n          otpValue: stop.get('otpValue'),\n          polyline: null,\n          mrt: null,\n          routeOrdinal: stopPoint.get('routeOrdinal'),\n          stopPoint: stopPoint\n        }));\n        return impactStops;\n      }, []);\n      this.get('stopsTable').setRows(stopPoints);\n    },\n\n    getRouteImpact(solutions) {\n      const store = this.get('store');\n      const currentSolution = solutions || {};\n      const currentStops = solutions.stops || [];\n      let routeOrdinal = 1; // @TODO we should refactor to make it more flexible for map context\n\n      const impact = Ember.Object.create({\n        routeOtp: currentSolution.otp,\n        otpDelta: currentSolution.otp.deltaValue,\n        after: {\n          otp: currentSolution.otp.newStatus,\n          stops: currentStops.map(stop => {\n            const stopId = stop.id;\n            let stopPoint = null;\n            let isNew = false;\n\n            if (stopId.includes('B')) {\n              const id = stop.id.replace(/(B)/img, '');\n              const record = store.peekRecord('route-break', id) || (0, _unwrapProxy.unwrapProxy)(this.get('driverBreak.stopPoint'));\n              isNew = record.isNew;\n              stopPoint = record.get('stopPoint') || record;\n              stopPoint.set('stopType', 'break');\n            } else {\n              stopPoint = store.peekRecord('stop-point', stopId) || (0, _unwrapProxy.unwrapProxy)(this.get('driverBreak.stopPoint'));\n            }\n\n            return _impactStop.default.create({\n              id: stop.id,\n              eta: stop.eta.newValue,\n              otp: stop.otp.newStatus,\n              otpValue: stop.otp,\n              mrt: stop.otp.delta,\n              promiseTime: stop.promiseTime,\n              polyline: stop.polyline,\n              routeOrdinal: routeOrdinal++,\n              stopPoint,\n              coloredRow: isNew\n            });\n          })\n        }\n      });\n      return impact;\n    },\n\n    getAddBreakRecords: (0, _emberConcurrency.task)(function* () {\n      const continousOptRouteBreakAdapter = this.get('store').adapterFor('continous-opt-route-break');\n      const dispatchScheduleId = this.get('driverBreak.route.dispatchRoute.dispatchSchedule.id');\n      const destinationRouteId = this.get('driverBreak.route.id');\n      const plannedDuration = this.get('driverBreak.plannedDurationSeconds'); //Payload request is passed in seconds\n\n      const breakType = this.get('driverBreak.breakType.id');\n      const requestTime = this.get('driverBreak.requestTime');\n      let breakStop = {};\n\n      if (breakType === _breakType.FIXED_BREAK) {\n        const position = this.get('driverBreak.place.address.position');\n        const geoNode = this.get('driverBreak.place.address.places.firstObject.location.geoNode');\n        breakStop = {\n          xyCoord: {\n            x: position.lat,\n            y: position.lng\n          },\n          geoNode\n        };\n      }\n\n      const payload = {\n        dispatchScheduleId,\n        destinationRouteId,\n        break: {\n          requestTime,\n          plannedDuration,\n          breakStop\n        }\n      };\n\n      if (breakType === _breakType.FLOATING_BREAK) {\n        delete payload.break.breakStop;\n      } // reset stops table data\n\n\n      this.set('stopsTable.rows', []);\n      const {\n        data: {\n          attributes: {\n            destinationRoutes: solutions\n          }\n        }\n      } = yield continousOptRouteBreakAdapter.createAddBreakAsyncOperation.perform(payload);\n      return solutions;\n    }).restartable(),\n    addBreak: function () {\n      const valid = this.validateRecords();\n\n      if (valid) {\n        const period = 'after';\n        this.set('selectedImpactPeriod', period);\n        this.get('getAddBreakRecords').perform().then(solutions => {\n          if (!Ember.isEmpty(solutions)) {\n            const impact = this.getRouteImpact(solutions[0]);\n            this.set('impact', impact);\n            this.get('stopsTable').setRows(impact[period].stops);\n          }\n        }).catch(() => {\n          this.set('errorText', 'Cannot add break when riders are onboard.');\n        });\n      }\n    },\n\n    validateRecords() {\n      let errorText = '';\n      const record = this.get('driverBreak') || [];\n      this.set('errorText', errorText);\n      const routeBreakType = this.get('selectedBreakTypeId');\n      const route = (0, _unwrapProxy.unwrapProxy)(record.get('route'));\n      const estimatedStartMoment = (0, _moment.default)(record.get('requestTime'));\n      const estimatedEndMoment = (0, _moment.default)(record.get('projectedEndDate'));\n      const routePlannedStartTime = (0, _moment.default)(route.get('computedPlannedStartTime'));\n      const routeOrdinal = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute')).findNewBreakRoutePosition(record);\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n\n      const plannedDuration = parseInt(record.get('plannedDuration'), 10);\n      this.availableBreakSlots(this.get('driverBreak.route.dispatchRoute'));\n\n      if (routeOrdinal === -1) {\n        errorText = 'Cannot add break when riders are onboard.';\n      } else if (routeOrdinal === -2) {\n        errorText = 'Cannot find a route position for the break start time.';\n      }\n\n      record.set('plannedRouteOrdinal', routeOrdinal);\n\n      if (Ember.isNone(routeBreakType)) {\n        errorText = 'Must select a break type';\n      }\n\n      if (routeBreakType === _breakType.FIXED_BREAK && Ember.isEmpty(record.get('place.location.lat'))) {\n        errorText = 'Fixed break type must have an address.';\n      }\n\n      if (estimatedStartMoment.isSameOrAfter(estimatedEndMoment)) {\n        errorText = 'Break start time must be before Break end time.';\n      }\n\n      if (!plannedDuration || plannedDuration === 'NaN') {\n        errorText = 'Break duration cannot be empty';\n      }\n\n      if (estimatedStartMoment.isBefore(routePlannedStartTime)) {\n        errorText = \"Break start time must be after the route's planned start time.\";\n      }\n\n      if (plannedDuration > routeMaxExtension) {\n        errorText = `Duration exceeds the route end time beyond max route extension (${routeMaxExtension})`;\n      }\n\n      record.set('estimatedStart', estimatedStartMoment.toDate());\n      record.set('estimatedEnd', estimatedEndMoment.toDate());\n      const valid = errorText === '';\n      this.set('errorText', errorText);\n      this.set('canSave', valid);\n      return valid;\n    },\n\n    commit() {\n      const records = [];\n      const saveRecordFunction = this.get('saveRecordFunction');\n      const driverBreak = this.get('driverBreak');\n      const routeId = driverBreak.get('route.id');\n      records.push(driverBreak);\n\n      if (!(0, _lodash.isUndefined)(saveRecordFunction) && saveRecordFunction !== null) {\n        return saveRecordFunction(records).then(() => {\n          this.onCloseClick();\n          const coreEntityPopulator = this.get('coreEntityPopulator');\n          Ember.run.later(this, function () {\n            coreEntityPopulator.populateRtsRoute(routeId);\n            Ember.run.later(this, function () {\n              this.get('workspaceContext').manualReloadContext();\n            }, 3000);\n          }, 3000);\n        }).catch(e => {\n          // we should handle these errors in the console for developers i.e adapter failures, network failure details\n          // let form / widgets components handle error messages for end users to help ease user feedback\n          // most of these errors are not percivable by the user anyways and are for developers\n          console.warn(e.message, e); // eslint-disable-line no-console\n        });\n      }\n\n      return (0, _saveRecords.default)(records).then(() => {\n        this.onCloseClick();\n      }).catch(e => {\n        // we should handle these errors in the console for developers i.e adapter failures, network failure details\n        // let form / widgets components handle error messages for end users to help ease user feedback\n        // most of these errors are not percivable by the user anyways and are for developers\n        console.warn(e.message, e); // eslint-disable-line no-console\n      });\n    },\n\n    resetSelections() {\n      const driverBreak = this.get('driverBreak');\n      const currentDate = (0, _moment.default)();\n      const routePlannedStartTime = (0, _moment.default)(driverBreak.get('route.plannedStartTime'));\n      const requestTime = currentDate.isBefore(routePlannedStartTime) ? routePlannedStartTime : currentDate;\n      driverBreak.set('requestTime', requestTime.toISOString());\n      driverBreak.set('breakType', null);\n      driverBreak.set('plannedDuration', 15);\n      driverBreak.set('notes', null);\n      this.setDefaultDriverBreak();\n      this.set('errorText', ''); //clear error text\n\n      this.set('viewImpactButton', false);\n      this.set('canSave', false);\n      this.initialValidation();\n    },\n\n    rollback(model) {\n      const changedAttributeModel = model.changedAttributes();\n\n      if (changedAttributeModel) {\n        (0, _lodash.forEach)(changedAttributeModel, function (attributevalues, attributeName) {\n          model.set(attributeName, attributevalues[0]);\n        });\n      }\n    },\n\n    validateBreakTime() {\n      const tooltip = this.get('tooltip');\n      const record = this.get('driverBreak');\n      const workspace = this.get('workspace');\n      const route = (0, _unwrapProxy.unwrapProxy)(record.get('route'));\n      const trips = route.get('dispatchRoute.trips').map(t => t).sort((a, b) => a.get('dropStopPoint.eta') - b.get('dropStopPoint.eta'));\n      const breakStartTime = (0, _moment.default)(record.get('requestTime'));\n      const isBreakInMiddleOfTrip = workspace.get('isBreakInMiddleOfTrip').bind(workspace);\n      const isValidBreakTime = workspace.get('isValidBreakTime').bind(workspace);\n      const isFloatingBreakType = this.get('isFloatingBreakType');\n      const breakEndTime = (0, _moment.default)(this.get('projectedEndDate'));\n      const routeplannedEndTime = (0, _moment.default)(route.get('computedPlannedEndTime'));\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      const routePlannedStartTime = (0, _moment.default)(route.get('computedPlannedStartTime'));\n      const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n\n      const breakTripObj = {\n        trips: trips,\n        breakTime: breakStartTime,\n        pickKey: 'pickStopPoint',\n        dropKey: 'dropStopPoint',\n        plannedEta: 'eta'\n      };\n      this.set('invalidRequestTime', false);\n\n      if (isBreakInMiddleOfTrip(breakTripObj)) {\n        tooltip.pushConfirmation({\n          tip: 'Unable to save. Adding the break will place the break in the middle of a trip.',\n          title: 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      const breakTimeInfo = {\n        trips: trips,\n        breakEndTime,\n        pickKey: 'pickStopPoint',\n        dropKey: 'dropStopPoint',\n        plannedEta: 'arrivalTime',\n        nextTravelTime: 'etaNavStopPoint.minutesToNext'\n      };\n\n      if (isFloatingBreakType && !isValidBreakTime(breakTimeInfo)) {\n        tooltip.pushConfirmation({\n          tip: 'Unable to save. Adding the break results in not enough time to travel from break to the next stop.',\n          title: 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      breakTripObj.breakTime = breakEndTime;\n\n      if (isBreakInMiddleOfTrip(breakTripObj)) {\n        tooltip.pushConfirmation({\n          tip: 'Unable to save. The break\\'s end time will extend past the ETA of the stop after the break',\n          title: 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      const routeActiveMinutes = routeplannedEndTime.diff(routePlannedStartTime, 'minutes');\n      let remainingExtension = 0;\n\n      if (routeActiveMinutes < routeMaxExtension) {\n        remainingExtension = routeMaxExtension - routeActiveMinutes;\n      }\n\n      const routeMaxEndTime = (0, _moment.default)(routeplannedEndTime).add(remainingExtension, 'minute'); // the break end time must not exceed the maximum possible route end time.\n\n      if (routeMaxEndTime.isBefore(breakEndTime)) {\n        this.set('errorClass', true);\n        tooltip.pushConfirmation({\n          tip: 'Unable to save. Adding the break will extend the route past its allowed end time.',\n          title: 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            this.set('errorClass', false);\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      return true;\n    },\n\n    async validateBreakPlace() {\n      const workspace = this.get('workspace');\n      const tooltip = this.get('tooltip');\n      const record = this.get('driverBreak');\n      const route = (0, _unwrapProxy.unwrapProxy)(record.get('route'));\n      const trips = route.get('trips').map(t => t).sort((a, b) => a.get('drop.plannedEta') - b.get('drop.plannedEta'));\n      const breakEndTime = (0, _moment.default)(this.get('projectedEndDate'));\n      const validaBreakPlace = workspace.get('validaBreakPlace').bind(workspace);\n      const breakPlace = record.get('place');\n      const breakTimeInfo = {\n        trips: trips,\n        breakEndTime,\n        pickKey: 'pickStopPoint',\n        dropKey: 'dropStopPoint',\n        plannedEta: 'arrivalTime',\n        breakPlace\n      };\n      const isValidBreakPlace = await validaBreakPlace(breakTimeInfo);\n      this.set('invalidRequestTime', false);\n\n      if (!isValidBreakPlace) {\n        tooltip.pushConfirmation({\n          tip: 'Unable to save. Adding the break results in not enough time to travel from break to the next stop.',\n          title: 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      return true;\n    },\n\n    onViewImpactPanelClick() {\n      const isValid = this.get('isViewImpactButton');\n      const collapseState = this.get('collapseState');\n      const isValidRecords = this.validateRecords();\n\n      if (!isValid) {\n        if (collapseState === 'expanded') {\n          this.set('collapseState', 'collapsed');\n        } else {\n          this.set('collapseState', 'expanded');\n        }\n      }\n\n      if (isValid && isValidRecords) {\n        if (collapseState === 'collapsed') {\n          return;\n        }\n\n        this.addBreak();\n        this.set('canSave', true);\n      }\n    },\n\n    onbreakTypeChange(breakType) {\n      const record = this.get('driverBreak');\n      this.set('selectedBreakTypeId', breakType.name);\n      record.set('breakType', breakType);\n      const routeBreakType = this.get('selectedBreakTypeId');\n\n      if (routeBreakType === _breakType.FLOATING_BREAK) {\n        this.rollback((0, _unwrapProxy.unwrapProxy)(record.get('place.address')));\n        this.rollback((0, _unwrapProxy.unwrapProxy)(record.get('place.location')));\n      }\n    },\n\n    availableBreakSlots(record) {\n      const orderedStops = !Ember.isEmpty(record.get('orderedStops')) ? record.get('orderedStops') : record.get('orderedStopsWithGarages');\n      const stops = !Ember.isNone(orderedStops) ? [...orderedStops] : null; // clone so it does not clobber computed property orderedStops\n\n      let breakTime = [];\n\n      if (Ember.isEmpty(stops)) {\n        this.set('breakTimeSlots', breakTime);\n        return;\n      }\n\n      const lastPerformedStop = record.get('lastPerformedStop') ? record.get('lastPerformedStop') : null;\n      const stopIndexTobeIncluded = lastPerformedStop && lastPerformedStop.get('stopType') === 'pick' ? 1 : 0;\n      const lastStopIndex = lastPerformedStop && lastPerformedStop.get('routeOrdinal') ? lastPerformedStop.get('routeOrdinal') - stopIndexTobeIncluded : 0;\n      const lastStopIndexSplice = lastStopIndex > 0 ? 1 : 0;\n      const remainingStops = stops.splice(lastStopIndex - lastStopIndexSplice); // must include last performed Stop for calculations\n\n      remainingStops.reduce((acc, curr) => {\n        const eta = !Ember.isEmpty(curr.get('availableTimeBeforeStop')) ? new Date(curr.get('availableTimeBeforeStop')) : new Date(curr.get('arrivalTime'));\n\n        if (eta instanceof Date && isNaN(eta)) {\n          return acc;\n        }\n\n        const tripId = curr.get('trip.id');\n        const stopType = curr.get('stopType');\n\n        if (stopType === 'pick') {\n          if (!Ember.isEmpty(breakTime)) {\n            if (breakTime.length - 1 >= 0 && Object.keys(acc).length === 0) {\n              breakTime[breakTime.length - 1].to = eta;\n            }\n          }\n\n          acc[tripId] = curr;\n        } else if (stopType === 'drop') {\n          const time = {\n            from: eta\n          }; // eslint-disable-next-line no-unused-vars\n\n          const {\n            [tripId]: rcrd,\n            ...rest\n          } = acc;\n\n          if (Object.keys(acc).includes(tripId)) {\n            if (Object.keys(rest).length === 0) {\n              breakTime.push(time);\n            }\n\n            return rest;\n          }\n\n          breakTime = [time];\n        }\n\n        return acc;\n      }, {});\n\n      if (!Ember.isEmpty(breakTime)) {\n        const routeEndTime = new Date(record.get('route.computedPlannedEndTime'));\n        breakTime[breakTime.length - 1].to = routeEndTime;\n      }\n\n      if (!lastPerformedStop) {\n        const eta = !Ember.isEmpty(remainingStops[0].get('availableTimeBeforeStop')) ? remainingStops[0].get('availableTimeBeforeStop') : remainingStops[0].get('arrivalTime');\n        const time = {\n          from: new Date(record.get('route.computedPlannedStartTime')),\n          to: new Date(eta)\n        };\n        breakTime.push(time);\n      }\n\n      this.set('breakTimeSlots', breakTime);\n    },\n\n    actions: {\n      onbreakTypeChange(val) {\n        this.onbreakTypeChange(val);\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        const record = this.get('driverBreak');\n        this.validateRecords();\n        record.set(valuePath, momentTime.toDate());\n      },\n\n      onRefreshButtonClick() {\n        this.resetSelections();\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        record.set(`${valuePath}.${options.valuePath}`, value);\n        this.validateRecords();\n      },\n\n      async onSaveClick() {\n        const isValidRecords = this.validateRecords();\n        const validateBreakTime = this.get('validateBreakTime').call(this);\n        const validateBreakPlace = this.get('validateBreakPlace').bind(this);\n        const isValidateBreakPlace = this.get('isFixedBreakType') ? await validateBreakPlace() : true;\n        const commitAction = this.commit.bind(this);\n        const tooltip = this.get('tooltip');\n        const dispatchRoute = this.get('driverBreak.route.dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        const closeCallback = () => {\n          this.send('onCloseClick');\n        }; // Check dispatchRoute version first\n\n\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n        if (isValidRecords && validateBreakTime && isValidateBreakPlace) {\n          try {\n            await lockRouteAction();\n            tooltip.pushConfirmation({\n              tip: 'Would you like to Commit your changes',\n              title: 'Add Driver Break',\n              primaryActionText: 'Confirm',\n              primaryAction: async () => {\n                if (this.get('isError')) {\n                  this.get('notifications').warning(`Failed to add driver break to route ${this.get('driverBreak.route.name')}`);\n                  this.onCloseClick();\n                  tooltip.reset();\n                  await unlockRouteAction(0);\n                  return false;\n                }\n\n                try {\n                  await commitAction();\n                } catch (err) {\n                  return;\n                } finally {\n                  await unlockRouteAction(0);\n                  tooltip.reset();\n                }\n              },\n              secondaryActionText: 'Cancel',\n              secondaryAction: async () => {\n                await unlockRouteAction(0);\n                tooltip.reset();\n                return;\n              },\n              closeAction: async () => {\n                await unlockRouteAction(0);\n              }\n            });\n          } catch (err) {\n            await unlockRouteAction(0);\n          }\n        }\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const selectedBreakType = this.get('driverBreak.breakType');\n        const requestTime = this.get('driverBreak.requestTime');\n        const duration = this.get('driverBreak.plannedDuration');\n        const selectedBreakTypeId = this.get('selectedBreakTypeId');\n        const place = this.get('driverBreak.place');\n        const savePlace = {\n          address: {\n            alias: place.get('address.alias'),\n            premise: place.get('address.premise'),\n            streetNumber: place.get('address.streetNumber'),\n            streetAddress: place.get('address.streetAddress'),\n            locality: place.get('address.locality'),\n            sublocality: place.get('address.sublocality'),\n            subRegion: place.get('address.subRegion'),\n            postalCode: place.get('address.postalCode'),\n            country: place.get('address.country'),\n            county: place.get('address.county'),\n            freeformAddress: place.get('address.freeformAddress')\n          },\n          location: {\n            lat: place.get('location.lat'),\n            lng: place.get('location.lng'),\n            geoNode: place.get('location.geoNode')\n          }\n        }; // save current manual settings\n\n        currentState = {\n          selectedBreakType,\n          requestTime,\n          duration,\n          selectedBreakTypeId,\n          savePlace\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onViewImpactButtonClick() {\n        this.set('viewImpactButton', true);\n        this.addBreak();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-break/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stopColumns = _exports.fields = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const stopColumns = [{\n    label: 'Trip ID',\n    valuePath: 'stopPoint.trip.tripId',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '80px'\n  }, {\n    label: 'Last Name',\n    valuePath: 'stopPoint.trip.rider.lastName',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true\n  }, {\n    label: 'Address',\n    valuePath: 'stopPoint.place.address.simpleAddress',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true\n  }, {\n    label: 'City',\n    valuePath: 'stopPoint.place.address.locality',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true\n  }, {\n    label: 'Stop',\n    valuePath: 'stopPoint.stopType',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true\n  }, {\n    label: 'ETA',\n    valuePath: 'eta',\n    cellComponent: 'table/cells/trip-eta',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true\n  }, {\n    label: 'Promise Time',\n    valuePath: 'stopPoint.computedPromiseTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    format: 'HH:mm'\n  }, {\n    label: 'Appt Time',\n    valuePath: 'stopPoint.computedApptTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    format: 'HH:mm'\n  }, {\n    label: 'Stop Break Ord',\n    valuePath: 'routeOrdinal',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true\n  }];\n  _exports.stopColumns = stopColumns;\n  const fields = {\n    id: 'location',\n    type: 'addresses',\n    label: '',\n    valuePath: 'place',\n    modelName: 'place',\n    addressType: 'originlocations',\n    isMultiType: true,\n    extra: {\n      displayPath: 'address.address',\n      premisePath: 'address.premise',\n      streetNumberPath: 'address.streetNumber',\n      streetNamePath: 'address.streetName',\n      localityPath: 'address.locality',\n      regionPath: 'address.region',\n      subRegionPath: 'address.county',\n      postalCodePath: 'address.postalCode',\n      countryPath: 'address.country',\n      freeformAddressPath: 'address.freeformAddress',\n      tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.streetAddress',\n      aliasPath: 'address.alias',\n      lat: 'location.lat',\n      lng: 'location.lng',\n      geoNode: 'location.geoNode'\n    }\n  };\n  _exports.fields = fields;\n});","define(\"adept-iq/pods/components/side-drawer/add-break/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.currentRouteImpactDataStub = void 0;\n  const currentRouteImpactDataStub = [{\n    'id': '8',\n    'otp': {\n      'originalStatus': 'O',\n      'originalValue': 0,\n      'newStatus': 'L',\n      'newValue': 5139,\n      'deltaValue': 5139\n    },\n    'stops': [{\n      'id': '85',\n      'tripId': 14,\n      'ordinal': 1,\n      'promiseTime': '2020-06-19T04:28:00-07:00',\n      'requestTime': null,\n      'otp': {\n        'originalStatus': 'O',\n        'originalValue': 0,\n        'newStatus': 'L',\n        'newValue': 5139,\n        'deltaValue': 5139\n      },\n      'eta': {\n        'originalValue': '2020-06-19T04:29:00-07:00',\n        'newValue': '2020-06-22T19:06:29-07:00',\n        'deltaValue': 5197\n      },\n      'polyline': null\n    }, {\n      'id': '88',\n      'tripId': 14,\n      'ordinal': 2,\n      'promiseTime': null,\n      'requestTime': '2020-06-19T05:30:00-07:00',\n      'otp': {\n        'originalStatus': 'O',\n        'originalValue': 0,\n        'newStatus': 'L',\n        'newValue': 5158,\n        'deltaValue': 5158\n      },\n      'eta': {\n        'originalValue': '2020-06-19T04:58:00-07:00',\n        'newValue': '2020-06-22T18:41:42-07:00',\n        'deltaValue': 5143\n      },\n      'polyline': null\n    }, {\n      'id': 'B101',\n      'tripId': 101,\n      'ordinal': 3,\n      'promiseTime': '2020-06-19T08:13:00-07:00',\n      'requestTime': null,\n      'otp': {\n        'originalStatus': null,\n        'originalValue': null,\n        'newStatus': null,\n        'newValue': null,\n        'deltaValue': null\n      },\n      'eta': {\n        'originalValue': null,\n        'newValue': '2020-06-22T18:33:23-07:00',\n        'deltaValue': null\n      },\n      'polyline': null\n    }, {\n      'id': 'B99',\n      'tripId': 99,\n      'ordinal': 5,\n      'promiseTime': '2020-06-19T08:30:00-07:00',\n      'requestTime': null,\n      'otp': {\n        'originalStatus': null,\n        'originalValue': null,\n        'newStatus': null,\n        'newValue': null,\n        'deltaValue': null\n      },\n      'eta': {\n        'originalValue': '2020-06-19T08:30:00-07:00',\n        'newValue': '2020-06-22T18:03:23-07:00',\n        'deltaValue': 4893\n      },\n      'polyline': null\n    }]\n  }];\n  _exports.currentRouteImpactDataStub = currentRouteImpactDataStub;\n});","define(\"adept-iq/pods/components/side-drawer/add-break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qskPFaWr\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"add-break-side-drawer\\\"]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L7:C2) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"canSave\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Add Driver Break\\\",[23,[\\\"componentName\\\"]],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L17:C3) \\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-break-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L19:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Break Information\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Name:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Last Name:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"dispatchRoute\\\",\\\"assignedDriver\\\",\\\"lastName\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver First Name:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"dispatchRoute\\\",\\\"assignedDriver\\\",\\\"firstName\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Planned start time:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"computedPlannedStartTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Planned End time:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"computedPlannedEndTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L50:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Break\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"options\\\",\\\"selected\\\",\\\"disabled\\\",\\\"onchange\\\"],[\\\"id\\\",[23,[\\\"breakTypes\\\"]],[23,[\\\"driverBreak\\\",\\\"breakType\\\"]],[23,[\\\"getAddBreakRecords\\\",\\\"isRunning\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onbreakTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFloatingBreakType\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\"],[\\\"text\\\",\\\"true\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"driverBreak\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"fields\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"readonlyCell\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"date\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,true,true,[23,[\\\"timeFormat\\\"]],[23,[\\\"minDate\\\"]],[23,[\\\"driverBreak\\\",\\\"requestTime\\\"]],[23,[\\\"getAddBreakRecords\\\",\\\"isRunning\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"requestTime\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\" Duration\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\",\\\"class\\\"],[\\\"number\\\",[23,[\\\"getAddBreakRecords\\\",\\\"isRunning\\\"]],[23,[\\\"driverBreak\\\",\\\"plannedDuration\\\"]],[27,\\\"if\\\",[[23,[\\\"errorClass\\\"]],\\\"error\\\"],null]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"Optional\\\",[23,[\\\"getAddBreakRecords\\\",\\\"isRunning\\\"]],[23,[\\\"driverBreak\\\",\\\"notes\\\"]]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isViewImpactButton\\\"]]],null]],[11,\\\"class\\\",\\\"mt-1 float-right\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"View Impact\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onViewImpactButtonClick\\\"]],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"viewImpactButton\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L124:C5) \\\"],null]],[[\\\"title\\\",\\\"onPanelHeaderClick\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onViewImpactPanelClick\\\"]]],null],true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"p\\\"],[9],[0,\\\"Alternate between before and after to see how adding break affects the route\\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L129:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"  Route ID: \\\"],[1,[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-break-impact-bar\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"toggle-switch\\\",null,[[\\\"toggleProperty\\\",\\\"offValue\\\",\\\"offLabel\\\",\\\"onValue\\\",\\\"onLabel\\\",\\\"disabled\\\"],[[23,[\\\"selectedImpactPeriod\\\"]],\\\"before\\\",\\\"Before\\\",\\\"after\\\",\\\"After\\\",[23,[\\\"disableToggleSwitch\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"impact\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"impactScore\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"impact-text\\\"],[9],[0,\\\"\\\\n        Impact:\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[12,\\\"class\\\",[28,[\\\"impact-score \\\",[21,\\\"impactScoreType\\\"]]]],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"stopsTable\\\"]]],[[\\\"height\\\"],[\\\"160px\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L157:C6) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L161:C7) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"rowComponent\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"getAddBreakRecords\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L168:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"isError\\\"]],[23,[\\\"isAfterTable\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L175:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n      System error. Failed to insert driver break.\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"stopsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/add-break/template.hbs' @ L181:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"p\\\"],[9],[0,\\\"Note: Before/After toggle is enabled if continuous optimization successfully calculated impact of adding the break.\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"p\\\"],[9],[0,\\\"Inserting the driver break will result in the route \\\"],[1,[23,[\\\"driverBreak\\\",\\\"route\\\",\\\"name\\\"]],false],[0,\\\" gaining a total of\\\\n      \\\"],[1,[23,[\\\"driverBreak\\\",\\\"plannedDuration\\\"]],false],[0,\\\" minutes\\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/component\", [\"exports\", \"lodash\", \"moment\", \"ember-light-table\", \"adept-iq/config/environment\", \"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/config\"], function (_exports, _lodash, _moment, _emberLightTable, _environment, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    notificationInitiation: Ember.inject.service(),\n    rider: Ember.inject.service(),\n    // services\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    // env format\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // passed by side drawer container\n    onShrinkClick: null,\n    onCloseClick: null,\n    onRefreshClick: null,\n    onSaveClick: null,\n    // component properties\n    recipientsTable: null,\n    // drawer setup\n    title: 'AdHoc Notification',\n    componentName: 'adhoc-notification',\n    // data and task flags\n    isNotificationTaskRunning: false,\n    currentState: null,\n    isDispatchDashboard: Ember.computed.readOnly('workspace.isDispatchDashboard'),\n    // notification schedule flags\n    ridersFromTripWidget: Ember.computed.readOnly('stackFrame.options.currentSelectedRiders'),\n    tripTimeByRiderId: null,\n    notificationScheduleOptions: null,\n    selectedNotificationSchedule: null,\n    notificationScheduleType: 'immediate',\n    messageSubject: null,\n    messageBody: null,\n    requestDateOnly: null,\n    requestTimeOnly: null,\n    requestTime: null,\n    selectedRiders: null,\n    minDate: null,\n    tripWarnLeadTime: null,\n    // UI task like sorting\n    lastSortedColumn: null,\n    lastSortedAscending: false,\n    isFutureNotificationSchedule: false,\n    // computed flags\n    canShrink: Ember.computed.not('isNotificationTaskRunning'),\n    canSave: Ember.computed('selectedNotificationSchedule', 'messageSubject', 'messageBody', 'recipientsTable.rows.@each.isChecked', function () {\n      const selected = this.get('selectedNotificationSchedule');\n      const subject = this.get('messageSubject')?.trim();\n      const body = this.get('messageBody')?.trim();\n      const rows = this.get('recipientsTable.rows') || [];\n      const selectedRows = rows.filter(row => row.get('isChecked'));\n      const isNew = !selected || selected.id === 'create-new';\n      return isNew && subject && body && selectedRows.length > 0;\n    }),\n    isShrunken: Ember.computed.alias('workspace.isDrawerShrunken'),\n    maxDate: Ember.computed('recipientsTable.rows.@each.isChecked', function () {\n      const rows = this.get('recipientsTable.rows') || [];\n      const tripMap = this.get('tripTimeByRiderId') || {};\n      const selectedTimes = rows.filter(row => row.get('isChecked')).map(row => tripMap[row.get('id')].earliestTripTime).filter(Boolean).map(t => new Date(t));\n      return _lodash.default.min(selectedTimes);\n    }),\n    isScheduleControlsDisabled: Ember.computed('notificationScheduleType', 'isFutureNotificationSchedule', function () {\n      // Disable all schedule controls if user is viewing a created future notification\n      return this.get('isFutureNotificationSchedule');\n    }),\n    isRefreshResendDisabled: Ember.computed('selectedNotificationSchedule', function () {\n      const selected = this.get('selectedNotificationSchedule');\n      if (!selected || selected.id === 'create-new') return true;\n      const status = selected.attributes?.status;\n      return status === 'created'; // disable resend if not yet sent\n    }),\n    isRecipientEmpty: Ember.computed('recipientsTable.rows.@each.isChecked', function () {\n      const rows = this.get('recipientsTable.rows') || [];\n      const selectedRows = rows.filter(row => row.get('isChecked'));\n      return selectedRows.length === 0;\n    }),\n    showScheduleNotificationSection: Ember.computed('selectedNotificationSchedule', 'notificationScheduleType', 'isFutureNotificationSchedule', function () {\n      if (!this.get('selectedNotificationSchedule')) {\n        // Creating new notification\n        return true;\n      }\n\n      const type = this.get('notificationScheduleType');\n      const isFuture = this.get('isFutureNotificationSchedule'); // Only show for future \"scheduled\" notifications\n\n      return type === 'scheduled' && isFuture;\n    }),\n    canDeleteScheduledNotification: Ember.computed('selectedNotificationSchedule', function () {\n      const selected = this.get('selectedNotificationSchedule');\n\n      if (!selected || selected.id === 'create-new') {\n        return false;\n      }\n\n      const type = selected.attributes.type;\n      const status = selected.attributes.status;\n      return type === 'scheduled' && status === 'created';\n    }),\n\n    async setSelectedNotificationSchedule(selected) {\n      const notificationScheduleId = selected.id;\n      const now = new Date();\n      this.get('recipientsTable').set('isCreateNewAdHoc', notificationScheduleId === 'create-new');\n\n      if (notificationScheduleId === 'create-new') {\n        this.setProperties({\n          selectedNotificationSchedule: null,\n          messageSubject: '',\n          messageBody: '',\n          notificationScheduleType: 'immediate',\n          requestTime: now,\n          requestDateOnly: new Date(now),\n          requestTimeOnly: new Date(now),\n          isFutureNotificationSchedule: false\n        });\n        const ridersFromTripWidget = this.get('ridersFromTripWidget') || [];\n\n        const riderIds = _lodash.default.map(ridersFromTripWidget, riderFromTrip => riderFromTrip.get('id'));\n\n        const latestRidersInfo = await this.get('rider').fetchRiderNotificationInfoByIds(riderIds);\n        const latestRiders = latestRidersInfo.data.map(rider => {\n          return Ember.Object.create({\n            id: rider.id,\n            ...rider.attributes,\n            isChecked: true\n          });\n        });\n        this.set('selectedRiders', latestRiders);\n        this.get('recipientsTable').setRows(latestRiders);\n        return;\n      }\n\n      const nsDetails = await this.get('notificationInitiation').getSingleNotificationScheduleDetails(notificationScheduleId);\n      const notificationScheduleInfo = nsDetails.attributes;\n      this.set('selectedNotificationSchedule', nsDetails);\n      this.set('messageSubject', notificationScheduleInfo.payload.message.subject);\n      this.set('messageBody', notificationScheduleInfo.payload.message.body);\n      this.set('notificationScheduleType', notificationScheduleInfo.type);\n      this.set('isFutureNotificationSchedule', notificationScheduleInfo.type === 'scheduled' && notificationScheduleInfo.status === 'created');\n      this.set('requestTime', notificationScheduleInfo.requestTime); // get response statuses\n\n      const initiatedNotifications = nsDetails.attributes.initiatedNotifications || [];\n      const statusMapByRider = {};\n      initiatedNotifications.forEach(notif => {\n        const sourceId = notif.sourceId; // \"notificationScheduleId:9:riderId:1416\"\n\n        const riderId = sourceId.split('riderId:')[1];\n        notif.notificationResponses.forEach(resp => {\n          const destType = resp.destinationType; // 'email', 'sms', 'textToSpeech'\n\n          const statusCode = resp.statusCode;\n\n          if (!statusMapByRider[riderId]) {\n            statusMapByRider[riderId] = {};\n          }\n\n          const normalizedDestType = destType === 'textToSpeech' ? 'phone' : destType;\n          statusMapByRider[riderId][`${normalizedDestType}NotificationStatus`] = statusCode;\n        });\n      });\n      const riderMeta = notificationScheduleInfo.payload.riderMeta || {};\n      const riderInteralIds = notificationScheduleInfo.payload.riderIds || [];\n      const relatedRiders = riderInteralIds.map(riderInteralId => {\n        const meta = riderMeta[riderInteralId] || {};\n        return Ember.Object.create({\n          id: riderInteralId,\n          ...meta,\n          isChecked: true\n        });\n      });\n      this.set('selectedRiders', relatedRiders); // Update recipientsTable rows\n\n      const newRows = (relatedRiders || []).map(rider => {\n        const riderId = rider.id;\n        const statusMap = statusMapByRider[riderId] || {};\n        return Ember.Object.create({ ...rider,\n          riderId: rider.riderId,\n          isChecked: true,\n          ...statusMap\n        });\n      });\n      this.get('recipientsTable').setRows(newRows);\n    },\n\n    confirmSaveClick: async function () {\n      const notificationType = 'adHoc';\n      const type = this.get('notificationScheduleType');\n      const isDispatchDashboard = this.get('isDispatchDashboard');\n      let requestTime = this.get('requestTime');\n\n      if (type === 'immediate') {\n        requestTime = new Date();\n      }\n\n      const message = {\n        subject: this.get('messageSubject') || '',\n        body: this.get('messageBody') || ''\n      };\n      const riderIds = (this.get('recipientsTable.rows') || []).filter(row => row.get('isChecked')).map(row => row.get('id'));\n      const tripTimeByRiderId = this.get('tripTimeByRiderId');\n      const riderMeta = (this.get('recipientsTable.rows') || []).reduce((acc, row) => {\n        const riderId = row.get('id');\n        const tripData = tripTimeByRiderId[riderId] || {};\n        acc[riderId] = {\n          riderId: row.get('riderId'),\n          firstName: row.get('firstName'),\n          lastName: row.get('lastName'),\n          phoneNotification: row.get('phoneNotification'),\n          smsNotification: row.get('smsNotification'),\n          emailNotification: row.get('emailNotification'),\n          phoneNotificationEnabled: row.get('phoneNotificationEnabled'),\n          smsNotificationEnabled: row.get('smsNotificationEnabled'),\n          emailNotificationEnabled: row.get('emailNotificationEnabled'),\n          tripIds: tripData.tripIds\n        };\n        return acc;\n      }, {});\n      const scheduleId = isDispatchDashboard ? 'dispatchSchedule' : this.get('workspace.currentSchedule.id');\n\n      try {\n        const result = await this.get('notificationInitiation').createNotificationSchedule(type, requestTime, notificationType, riderIds, scheduleId, message, riderMeta);\n\n        if (result) {\n          const options = this.get('notificationScheduleOptions') || [];\n          const createNewOption = options.find(opt => opt.id === 'create-new');\n          const existingSchedules = options.filter(opt => opt.id !== 'create-new'); // Insert the newly created one\n\n          const sortedSchedules = [result, ...existingSchedules].sort((a, b) => {\n            const timeA = new Date(a.attributes.requestTime).getTime();\n            const timeB = new Date(b.attributes.requestTime).getTime();\n            return timeB - timeA; // DESC\n          });\n          this.set('notificationScheduleOptions', [createNewOption, ...sortedSchedules]); // Select the newly created schedule\n\n          await this.setSelectedNotificationSchedule(result);\n          this.get('notifications').success('Notification schedule created and added.');\n          this.get('tooltip').reset();\n        }\n      } catch (err) {\n        this.get('notifications').warning(`Failed to create notification schedule. ${err.payload.message}`);\n        this.get('tooltip').reset();\n      }\n    },\n    confirmDeleteScheduledNotification: async function () {\n      const selected = this.get('selectedNotificationSchedule');\n\n      if (!selected || selected.id === 'create-new') {\n        this.get('notifications').warning('No scheduled notification selected.');\n        return;\n      }\n\n      try {\n        const nsid = selected.id;\n        await this.get('notificationInitiation').deleteNotificationSchedule(nsid);\n        let options = this.get('notificationScheduleOptions') || [];\n        options = options.filter(opt => opt.id !== nsid); // Remove the deleted one\n\n        this.set('notificationScheduleOptions', options); // Reset to \"Create New\"\n\n        const createNewOption = options.find(opt => opt.id === 'create-new');\n        this.set('selectedNotificationSchedule', createNewOption);\n        await this.setSelectedNotificationSchedule(createNewOption);\n        this.get('notifications').success('Scheduled notification deleted successfully.');\n        this.get('tooltip').reset();\n      } catch (err) {\n        this.get('notifications').warning('Failed to delete scheduled notification.');\n      }\n    },\n    refreshDropDownOptions: async function () {\n      const isDispatchDashboard = this.get('isDispatchDashboard');\n      const scheduleId = isDispatchDashboard ? 'dispatchSchedule' : this.get('workspace.currentSchedule.id');\n      const updatedSchedules = await this.get('notificationInitiation').getAllNotificationSchedules(scheduleId);\n      const createNewOption = {\n        id: 'create-new',\n        attributes: {\n          requestTime: 'Create New',\n          type: 'createNew'\n        }\n      }; // Insert the newly created one\n\n      const sortedSchedules = updatedSchedules.sort((a, b) => {\n        const timeA = new Date(a.attributes.requestTime).getTime();\n        const timeB = new Date(b.attributes.requestTime).getTime();\n        return timeB - timeA; // DESC\n      });\n      this.set('notificationScheduleOptions', [createNewOption, ...sortedSchedules]);\n    },\n\n    init() {\n      this._super(...arguments); // initializing recipient table\n\n\n      const recipientsTable = new _emberLightTable.default(_config.recipientColumns, [], {\n        isCreateNewAdHoc: true\n      });\n      this.set('recipientsTable', recipientsTable); // load notification schedule options order by requestTime\n\n      const now = new Date();\n      const allSchedulesRaw = this.get('stackFrame.options.allNotificationSchedules') || [];\n      const allSchedules = allSchedulesRaw.slice().sort((a, b) => {\n        const timeA = new Date(a.attributes.requestTime).getTime();\n        const timeB = new Date(b.attributes.requestTime).getTime();\n        return timeB - timeA; // DESC order\n      });\n      const createNewOption = {\n        id: 'create-new',\n        attributes: {\n          selectedNotificationSchedule: null,\n          messageSubject: '',\n          messageBody: '',\n          notificationScheduleType: 'immediate',\n          requestTime: now,\n          requestDateOnly: new Date(now),\n          requestTimeOnly: new Date(now),\n          isFutureNotificationSchedule: false\n        }\n      };\n      this.set('notificationScheduleOptions', [createNewOption, ...allSchedules]);\n      const selectedNotificationSchedule = this.get('stackFrame.options.scheduledFutureNotification') || createNewOption;\n      this.setSelectedNotificationSchedule(selectedNotificationSchedule); // set the future ad hoc warning lead time\n\n      const tripWarningLeadTimeConfig = this.get('store').peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-System_Configuration-notifications-ad_hoc';\n      });\n      const leadTime = tripWarningLeadTimeConfig.firstObject.get('value');\n      this.set('tripWarnLeadTime', parseInt(leadTime, 10)); // set date time picker restrictions for future schedule\n\n      this.set('minDate', now);\n      this.set('tripTimeByRiderId', this.get('stackFrame.options.tripTimeByRiderId') || {});\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('900px');\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    destroy() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      async onExportRecipientsToCSV() {\n        const rows = this.get('recipientsTable.rows') || [];\n\n        if (!rows.length) {\n          this.get('notifications').warning('No recipients to export.');\n          return;\n        }\n\n        this.set('isNotificationTaskRunning', true);\n\n        try {\n          const headers = ['ID', 'First Name', 'Last Name', 'Email', 'Email Status', 'Phone', 'Phone Status', 'SMS', 'SMS Status'];\n          const csvData = rows.map(row => [row.get('riderId') || '', row.get('firstName') || '', row.get('lastName') || '', row.get('emailNotification') || '', row.get('emailNotificationStatus') || '', row.get('phoneNotification') || '', row.get('phoneNotificationStatus') || '', row.get('smsNotification') || '', row.get('smsNotificationStatus') || '']);\n          const csvContent = [headers.join(','), ...csvData.map(row => row.map(value => `\"${String(value).replace(/\"/g, '\"\"')}\"`).join(','))].join('\\n');\n          const blob = new Blob([csvContent], {\n            type: 'text/csv;charset=utf-8;'\n          });\n          const url = URL.createObjectURL(blob);\n          const link = document.createElement('a');\n          link.href = url;\n          link.setAttribute('download', 'recipients_export.csv');\n          document.body.appendChild(link);\n          link.click();\n          document.body.removeChild(link);\n        } catch (err) {\n          this.get('notifications').warning('Export failed.');\n        } finally {\n          this.set('isNotificationTaskRunning', false);\n        }\n      },\n\n      onNotificationResponseRefresh: async function () {\n        const selectedNotificationSchedule = this.get('selectedNotificationSchedule');\n\n        try {\n          this.set('isNotificationTaskRunning', true);\n          await this.setSelectedNotificationSchedule(selectedNotificationSchedule);\n          await this.refreshDropDownOptions();\n          this.get('notifications').success('Scheduled notification refreshed.');\n          this.set('isNotificationTaskRunning', false);\n        } catch {\n          this.get('notifications').warning('Scheduled notification refresh failed.');\n        }\n      },\n      onNotificationResponseResend: async function () {\n        const selectedNotificationSchedule = this.get('selectedNotificationSchedule');\n\n        try {\n          this.set('isNotificationTaskRunning', true);\n          await this.get('notificationInitiation').retryNotificationSchedule(selectedNotificationSchedule.id);\n          this.get('notifications').success('Scheduled notification retry triggerred.');\n          this.set('isNotificationTaskRunning', false);\n        } catch {\n          this.get('notifications').warning('Scheduled notification retry failed.');\n        }\n      },\n      onDeleteScheduledNotificationClick: function () {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Delete Scheduled Notification',\n          tip: 'Are you sure you want to delete this scheduled notification?',\n          primaryActionText: 'Delete',\n          primaryAction: () => this.confirmDeleteScheduledNotification(),\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => tooltip.reset(),\n          closeAction: () => tooltip.reset(),\n          hasOverlay: true\n        });\n      },\n\n      onScheduleTypeChange(type) {\n        this.set('notificationScheduleType', type);\n      },\n\n      onMessageBodyInput(event) {\n        let value = event.target.value;\n\n        if (value.length > 250) {\n          value = value.substring(0, 250);\n          event.target.value = value; // <-- this is critical to actually revert the DOM\n        }\n\n        this.set('messageBody', value);\n      },\n\n      onMessageSubjectInput(event) {\n        this.set('messageSubject', event.target.value);\n      },\n\n      onChangeNotificationSchedule(selected) {\n        this.setSelectedNotificationSchedule(selected);\n      },\n\n      onRefreshClick: async function () {\n        try {\n          this.set('isNotificationTaskRunning', true);\n          await this.refreshDropDownOptions();\n          this.set('isNotificationTaskRunning', false);\n          this.get('notifications').success('Notification schedules refreshed.');\n        } catch (err) {\n          this.get('notifications').warning('Failed to refresh notification schedules.');\n        }\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const ridersFromTripWidget = this.get('ridersFromTripWidget');\n        const notificationScheduleOptions = this.get('notificationScheduleOptions');\n        const selectedNotificationSchedule = this.get('selectedNotificationSchedule');\n        const notificationScheduleType = this.get('notificationScheduleType');\n        const messageSubject = this.get('messageSubject');\n        const messageBody = this.get('messageBody');\n        const isFutureNotificationSchedule = this.get('isFutureNotificationSchedule');\n        const requestDateOnly = this.get('requestDateOnly');\n        const requestTimeOnly = this.get('requestTimeOnly');\n        const requestTime = this.get('requestTime');\n        const selectedRiders = this.get('selectedRiders');\n        const lastSortedColumn = this.get('lastSortedColumn');\n        const lastSortedAscending = this.get('lastSortedAscending'); // save current manual settings\n\n        currentState = {\n          ridersFromTripWidget,\n          notificationScheduleOptions,\n          selectedNotificationSchedule,\n          notificationScheduleType,\n          messageSubject,\n          messageBody,\n          isFutureNotificationSchedule,\n          requestDateOnly,\n          requestTimeOnly,\n          requestTime,\n          selectedRiders,\n          lastSortedColumn,\n          lastSortedAscending\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onSaveClick: function () {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Ad Hoc Message',\n          tip: 'Are you sure you want to send or schedule this notification?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => this.confirmSaveClick(),\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => tooltip.reset(),\n          closeAction: () => tooltip.reset(),\n          hasOverlay: true\n        });\n      },\n\n      onDateChange(value) {\n        const selectedDate = (0, _moment.default)(value[0]);\n        const timePart = (0, _moment.default)(this.get('requestTimeOnly'));\n        selectedDate.hour(timePart.hour());\n        selectedDate.minute(timePart.minute());\n        selectedDate.second(timePart.second());\n        const combined = selectedDate.toDate();\n        const maxDate = this.get('maxDate');\n        const tripWarnLeadTime = this.get('tripWarnLeadTime');\n        const latestAllowed = (0, _moment.default)(maxDate).subtract(tripWarnLeadTime, 'minutes');\n        this.set('requestDateOnly', value[0]);\n        this.set('requestTime', combined);\n\n        if (maxDate && combined > latestAllowed) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Ad Hoc Message',\n            tip: `Please pick a time at least ${tripWarnLeadTime} minutes before the earliest trip start time (${maxDate.toString()}).`,\n            primaryActionText: 'OK',\n            primaryAction: () => tooltip.reset(),\n            hasOverlay: true\n          });\n        }\n      },\n\n      onTimeChange(value) {\n        const selectedTime = (0, _moment.default)(value);\n        const datePart = (0, _moment.default)(this.get('requestDateOnly'));\n        datePart.hour(selectedTime.hour());\n        datePart.minute(selectedTime.minute());\n        datePart.second(selectedTime.second());\n        const combined = datePart.toDate();\n        const maxDate = this.get('maxDate');\n        const tripWarnLeadTime = this.get('tripWarnLeadTime');\n        const latestAllowed = (0, _moment.default)(maxDate).subtract(tripWarnLeadTime, 'minutes');\n\n        if (maxDate && combined > latestAllowed) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Ad Hoc Message',\n            tip: `Please pick a time at least ${tripWarnLeadTime} minutes before the earliest trip start time (${maxDate.toString()}).`,\n            primaryActionText: 'OK',\n            primaryAction: () => tooltip.reset(),\n            hasOverlay: true\n          });\n          return;\n        }\n\n        this.set('requestTimeOnly', value);\n        this.set('requestTime', combined);\n      },\n\n      onColumnRecipientsClick(column) {\n        if (!column.sortable) {\n          return;\n        }\n\n        const valuePath = column.get('valuePath');\n        const lastSortedColumn = this.get('lastSortedColumn');\n        const lastSortedAscending = this.get('lastSortedAscending');\n        const sortAscending = valuePath === lastSortedColumn ? !lastSortedAscending : true;\n        const rows = this.recipientsTable.get('rows').toArray();\n        rows.sort((a, b) => {\n          const aValue = a.get(valuePath);\n          const bValue = b.get(valuePath);\n          if (aValue === null && bValue !== null) return sortAscending ? -1 : 1;\n          if (aValue !== null && bValue === null) return sortAscending ? 1 : -1;\n          if (aValue === null && bValue === null) return 0;\n\n          if (typeof aValue === 'string' && typeof bValue === 'string') {\n            const compare = aValue.localeCompare(bValue);\n            return sortAscending ? compare : -compare;\n          }\n\n          if (aValue < bValue) return sortAscending ? -1 : 1;\n          if (aValue > bValue) return sortAscending ? 1 : -1;\n          return 0;\n        }); // Apply new rows\n\n        this.recipientsTable.setRows(rows);\n        this.set('lastSortedColumn', valuePath);\n        this.set('lastSortedAscending', sortAscending);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.recipientColumns = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const recipientColumns = [{\n    label: '',\n    valuePath: 'isChecked',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/check-box',\n    width: '20px',\n    sortable: false,\n    resizable: false\n  }, {\n    label: 'ID',\n    sortType: 'number',\n    valuePath: 'riderId',\n    cellComponent: 'table/cells/base-cell',\n    width: '50px',\n    sortable: true,\n    resizable: false\n  }, {\n    label: 'First Name',\n    sortType: 'text',\n    valuePath: 'firstName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Last Name',\n    sortType: 'text',\n    valuePath: 'lastName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Email',\n    sortType: 'text',\n    valuePath: 'emailNotification',\n    enabledFlagPath: 'emailNotificationEnabled',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    defaultText: 'No',\n    onCreateShowDefault: true\n  }, {\n    label: 'Status',\n    valuePath: 'emailNotificationStatus',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    defaultText: 'Unavailable',\n    capitalized: true\n  }, {\n    label: 'Phone',\n    sortType: 'text',\n    valuePath: 'phoneNotification',\n    enabledFlagPath: 'phoneNotificationEnabled',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    defaultText: 'No',\n    onCreateShowDefault: true\n  }, {\n    label: 'Status',\n    valuePath: 'phoneNotificationStatus',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    defaultText: 'Unavailable',\n    capitalized: true\n  }, {\n    label: 'SMS',\n    sortType: 'text',\n    valuePath: 'smsNotification',\n    enabledFlagPath: 'smsNotificationEnabled',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    defaultText: 'No',\n    onCreateShowDefault: true\n  }, {\n    label: 'Status',\n    valuePath: 'smsNotificationStatus',\n    cellComponent: 'side-drawer/add-edit-ad-hoc-notification/table/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    defaultText: 'Unavailable',\n    capitalized: true\n  }];\n  _exports.recipientColumns = recipientColumns;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNameBindings: ['overrideClassName'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    columns: Ember.computed('table.allColumns', function () {\n      const tableColumns = this.get('table.allColumns');\n      return tableColumns;\n    }),\n    overrideClassName: Ember.computed('config', function () {\n      const tableColumn = this.get('columns');\n      const found = tableColumn.find(tc => tc.id === 'description');\n      const baseClassTestName = 'data-test-table-base-cell';\n\n      if (!Ember.isPresent(found)) {\n        return [`table-base-cell  ${baseClassTestName}`];\n      }\n\n      return [`table-base-cell-white-space ${baseClassTestName}`];\n    }),\n    tooltipText: Ember.computed('row.isLocked', function () {\n      const isLocked = this.get('row.isLocked');\n\n      if (Ember.isNone(isLocked)) {\n        return null;\n      }\n\n      if (isLocked) {\n        return `Locked by ${this.get('row.lockedBy')}`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'row.isLocked', function () {\n      const tooltipText = this.get('tooltipText');\n      const isLocked = this.get('row.isLocked');\n      return Ember.isPresent(tooltipText) && isLocked;\n    }),\n    tabindex: 0,\n    enabledFlagValue: Ember.computed('column.enabledFlagPath', 'row.content', function () {\n      const path = this.get('column.enabledFlagPath');\n      const row = this.get('row.content');\n      if (!path || !row) return null;\n      return row.get(path);\n    }),\n    isCreateNewAdHoc: Ember.computed.readOnly('table.isCreateNewAdHoc')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"bVyZM1fq\",\n    \"block\": \"{\\\"symbols\\\":[\\\"@column\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"enabledFlagValue\\\"]],false],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"text-muted\\\"],[9],[1,[22,1,[\\\"defaultText\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"eq\\\",[[23,[\\\"value\\\"]],null],null],[27,\\\"eq\\\",[[23,[\\\"value\\\"]],[26]],null],[27,\\\"eq\\\",[[23,[\\\"value\\\"]],\\\"\\\"],null]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"isCreateNewAdHoc\\\"]]],null],[22,1,[\\\"onCreateShowDefault\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"text-muted\\\"],[9],[1,[22,1,[\\\"defaultText\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,1,[\\\"capitalized\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"capitalize\\\",[[23,[\\\"value\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"duration\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",500,3000,\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/check-box/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    activeContext: Ember.inject.service(),\n    isChecked: Ember.computed.alias('row.isChecked'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"0tqZqju0\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/table/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"pNxER2iZ\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"template\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"ad-hoc-notification-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L5:C2) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"canShrink\\\",\\\"onShrinkClick\\\",\\\"canRefresh\\\",\\\"onRefreshClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Ad Hoc Notifications\\\",\\\"adhoc-notification\\\",[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"not\\\",[[23,[\\\"isNotificationTaskRunning\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ad-hoc-notification-layout \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L17:C3) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"notificationScheduleOptions\\\"]],false,false,[23,[\\\"selectedNotificationSchedule\\\"]],\\\"Create New\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeNotificationSchedule\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,4,[\\\"id\\\"]],\\\"create-new\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            Create New\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"moment-format\\\",[[22,4,[\\\"attributes\\\",\\\"requestTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[0,\\\" - \\\"],[1,[27,\\\"capitalize\\\",[[22,4,[\\\"attributes\\\",\\\"type\\\"]]],null],false],[0,\\\": \\\"],[1,[27,\\\"capitalize\\\",[[22,4,[\\\"attributes\\\",\\\"status\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L41:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Instructions\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"instructions p-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"ol\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[9],[0,\\\"In 'Message Body', type the notification text. If your agency supports email notifications, enter the email\\\\n          'Subject Line'; otherwise leave blank.\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[9],[0,\\\"Recipients listed are based on trips filtered in the Trips widget. Select riders who will receive the\\\\n          notification. The rider must have notifications enabled in their rider record in order to receive the\\\\n          notification. Users may deselect riders they do not wish to include.\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[9],[0,\\\"Select 'Send Notification Now' to send the notification immediately. Select 'Schedule Notification' and set\\\\n          date/time to send the notification in the future. Rider will not be sent the notification if the notification\\\\n          scheduled time is after the rider's trip's scheduled date and time.\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[9],[0,\\\"After notifications are scheduled or sent the side panel will remain open and you can use the 'refresh' button\\\\n          on the recipients pane to check the sending status. You can close the side panel or push it aside to resume other\\\\n          work.\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L59:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Message\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"p-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group d-flex align-items-center mb-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"mr-3 mb-0\\\"],[11,\\\"style\\\",\\\"width: 200px;\\\"],[9],[0,\\\"Subject Line (email only)\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control bg-light\\\"],[11,\\\"placeholder\\\",\\\"Subject\\\"],[11,\\\"style\\\",\\\"flex: 1;\\\"],[12,\\\"value\\\",[21,\\\"messageSubject\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onMessageSubjectInput\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group d-flex align-items-start\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"mr-3 mb-0\\\"],[11,\\\"style\\\",\\\"width: 200px;\\\"],[9],[0,\\\"Message Body\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"flex: 1;\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"textarea\\\"],[11,\\\"class\\\",\\\"form-control bg-light\\\"],[11,\\\"placeholder\\\",\\\"Message\\\"],[11,\\\"rows\\\",\\\"4\\\"],[12,\\\"value\\\",[21,\\\"messageBody\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onMessageBodyInput\\\"],null]],[9],[10],[0,\\\"          \\\"],[7,\\\"small\\\"],[11,\\\"class\\\",\\\"text-muted\\\"],[9],[1,[23,[\\\"messageBody\\\",\\\"length\\\"]],false],[0,\\\"/250\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L89:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Recipients\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-panel-subheader-actions\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[10],[0,\\\" \\\"],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ad-hoc-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNotificationResponseRefresh\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isRefreshResendDisabled\\\"]],[9],[0,\\\"Refresh\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ad-hoc-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNotificationResponseResend\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isRefreshResendDisabled\\\"]],[9],[0,\\\"Resend\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ad-hoc-button\\\"],[11,\\\"title\\\",\\\"Export Recipients to CSV\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isRecipientEmpty\\\"]],[23,[\\\"isNotificationTaskRunning\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onExportRecipientsToCSV\\\"],null]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNotificationTaskRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-spinner fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Exporting...\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            Download CSV\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container recipient-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNotificationTaskRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"recipient-table-overlay\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-spinner fa-spin fa-lg text-muted\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"recipientsTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L121:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnRecipientsClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L128:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\"],[true,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"recipientsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L134:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"No recipients selected.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showScheduleNotificationSection\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs' @ L144:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Schedule Notification\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-panel-subheader-actions\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ad-hoc-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canDeleteScheduledNotification\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDeleteScheduledNotificationClick\\\"],null]],[9],[0,\\\"\\\\n              Delete Scheduled Notification\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notification-schedule-options\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-check\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-check-input\\\"],[11,\\\"id\\\",\\\"send-now\\\"],[11,\\\"name\\\",\\\"notificationTime\\\"],[11,\\\"value\\\",\\\"immediate\\\"],[12,\\\"checked\\\",[27,\\\"eq\\\",[[23,[\\\"notificationScheduleType\\\"]],\\\"immediate\\\"],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScheduleTypeChange\\\",\\\"immediate\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isScheduleControlsDisabled\\\"]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"form-check-label\\\"],[11,\\\"for\\\",\\\"send-now\\\"],[9],[0,\\\"Send Notification Now\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-check\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-check-input\\\"],[11,\\\"id\\\",\\\"schedule-later\\\"],[11,\\\"name\\\",\\\"notificationTime\\\"],[11,\\\"value\\\",\\\"scheduled\\\"],[12,\\\"checked\\\",[27,\\\"eq\\\",[[23,[\\\"notificationScheduleType\\\"]],\\\"scheduled\\\"],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onScheduleTypeChange\\\",\\\"scheduled\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isScheduleControlsDisabled\\\"]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"form-check-label\\\"],[11,\\\"for\\\",\\\"schedule-later\\\"],[9],[0,\\\"Schedule Notification\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-inline\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 pr-1\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"icon-parent-div\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"defaultDate\\\",\\\"onChange\\\",\\\"minDate\\\",\\\"altFormat\\\",\\\"altInput\\\",\\\"time_24hr\\\",\\\"disabled\\\",\\\"date\\\",\\\"getFlatpickrRef\\\"],[\\\"en\\\",[23,[\\\"requestTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\"],null],[23,[\\\"minDate\\\"]],\\\"D, M j\\\",true,true,[23,[\\\"isScheduleControlsDisabled\\\"]],[23,[\\\"requestTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"calflatpickrRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"icon-parent-div\\\"],[12,\\\"disabled\\\",[21,\\\"isFieldDisabled\\\"]],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/timeflatpickr\\\",null,[[\\\"isFieldDisabled\\\",\\\"onChange\\\",\\\"value\\\",\\\"getFlatpickrRef\\\"],[[23,[\\\"isScheduleControlsDisabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\"],null],[23,[\\\"requestTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"timeflatpickrRef\\\"]]],null]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-edit-ad-hoc-notification/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\", \"adept-iq/mixins/version-check\", \"adept-iq/config/environment\", \"adept-iq/models/route-template\", \"adept-iq/models/zone\"], function (_exports, _emberConcurrency, _lodash, _moment, _unwrapProxy, _fetchAssignableVehicleDrivers, _versionCheck, _environment, _routeTemplate, _zone) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const NUMBER_FORMAT = /^\\d*$/;\n  const IN_ACTIVE_STATUS = 'inactive';\n  const extraTripLimitOptions = {\n    min: 1,\n    max: 1\n  };\n  const extraDistanceLimitOptions = {\n    min: 1,\n    max: 2\n  };\n\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, _versionCheck.default, {\n    tagName: '',\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    drivers: null,\n    vehicles: null,\n    providers: null,\n    schedules: null,\n    componentName: 'createRoute',\n    selectedVehicle: null,\n    selectedDriver: null,\n    selectedSchedule: null,\n    scheduleOption: null,\n    onShrinkClick: null,\n    onCloseClick: null,\n    usePlaceHolderTask: true,\n    // used by fetchVehicle Mixin\n    dispatchSchedule: null,\n    selectedDateTime: null,\n    extraDistanceLimitOptions,\n    extraTripLimitOptions,\n    displayName: Ember.computed.alias('stackFrame.options.displayName'),\n    route: Ember.computed.alias('stackFrame.options.routeModel'),\n    dispatchRoute: Ember.computed.alias('route.dispatchRoute'),\n    routeVehicleDriver: Ember.computed.alias('dispatchRoute.latestRouteVehicleDriver'),\n    _rvdStartTime: Ember.computed.alias('dispatchRoute.latestRouteVehicleDriver.startTime'),\n    _rvdEndTime: Ember.computed.alias('dispatchRoute.latestRouteVehicleDriver.endTime'),\n    _routeStartTime: Ember.computed.alias('route.plannedStartTime'),\n    _routeEndTime: Ember.computed.alias('route.plannedEndTime'),\n    startTime: Ember.computed('routeVehicleDriver', '_routeStartTime', '_rvdStartTime', {\n      get() {\n        const startTime = this.get('routeVehicleDriver') ? this.get('_rvdStartTime') : this.get('_routeStartTime');\n        return startTime;\n      },\n\n      set(key, value) {\n        if (this.get('routeVehicleDriver')) {\n          this.set('_rvdStartTime', value);\n        }\n\n        this.set('_routeStartTime', value);\n        return value;\n      }\n\n    }),\n    endTime: Ember.computed('routeVehicleDriver', '_routeEndTime', '_rvdEndTime', {\n      get() {\n        const endTime = this.get('routeVehicleDriver') ? this.get('_rvdEndTime') : this.get('_routeEndTime');\n        return endTime;\n      },\n\n      set(key, value) {\n        if (this.get('routeVehicleDriver')) {\n          this.set('_rvdEndTime', value);\n        }\n\n        this.set('_routeEndTime', value);\n        return value;\n      }\n\n    }),\n    plannedStartTime: Ember.computed.readOnly('startTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('endTime'),\n    //used in fetch vehicle driver mixin\n    routeName: Ember.computed.alias('route.name'),\n    schedulingMode: Ember.computed.alias('dispatchRoute.schedulingMode'),\n    availableVehicles: Ember.computed.readOnly('vehicles'),\n    availableDrivers: Ember.computed.readOnly('drivers'),\n    provider: Ember.computed.readOnly('selectedProvider'),\n    // used by fetchVehicle Mixin\n    affinities: Ember.computed.alias('dispatchRoute.affinities'),\n    tripLimit: Ember.computed.alias('dispatchRoute.tripLimit'),\n    distanceLimit: Ember.computed.alias('dispatchRoute.distanceLimit'),\n    isEditMode: Ember.computed.notEmpty('route.id'),\n    isNewRoute: Ember.computed.empty('route.id'),\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    noneDriverModel: null,\n    zoneTableRef: null,\n    hasAllSelectedValues: Ember.computed('routeName', 'tripLimit', 'distanceLimit', 'selectedProvider', 'selectedSchedule', 'selectedVehicle', 'dispatchRoute.schedulingMode', 'startTime', 'endTime', 'hasZones', 'hasRouteChanged', function () {\n      const {\n        routeName,\n        tripLimit,\n        distanceLimit,\n        selectedProvider,\n        selectedSchedule,\n        selectedVehicle,\n        startTime,\n        endTime,\n        hasZones,\n        hasRouteChanged\n      } = this.getProperties('routeName', 'tripLimit', 'distanceLimit', 'selectedProvider', 'selectedSchedule', 'selectedVehicle', 'startTime', 'endTime', 'hasZones', 'hasRouteChanged');\n      const schedulingMode = this.get('dispatchRoute.schedulingMode');\n      return routeName && tripLimit && distanceLimit && selectedProvider && selectedSchedule && selectedVehicle && schedulingMode && startTime && endTime && hasZones && hasRouteChanged;\n    }),\n    allAvailableDrivers: Ember.computed('availableDrivers', 'noneDriverModel', function () {\n      const availableDrivers = this.get('availableDrivers') || [];\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isPresent(noneDriverModel)) {\n        return (0, _lodash.concat)([noneDriverModel], availableDrivers);\n      }\n\n      return availableDrivers;\n    }),\n    selectedProvider: Ember.computed({\n      set(key, value) {\n        this.set('selectedDriver');\n        this.set('selectedVehicle');\n        return value;\n      }\n\n    }),\n    availabilityEndTime: Ember.computed('endTime', 'schedule.end', 'startTime', function () {\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n      const plannedEndTime = this.get('endTime') || this.get('schedule.end') || plannedStart.clone().endOf('day');\n      return plannedEndTime;\n    }),\n    availableSchedules: Ember.computed('schedules.[]', 'startTime', 'endTime', function () {\n      let schedules = this.get('schedules');\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n      const plannedEnd = (0, _moment.default)(this.get('endTime'));\n      const minDate = this.get('stackFrame.options.minDate');\n      const date = (0, _moment.default)(minDate);\n      if (!schedules) return null; // only exported schedules\n\n      schedules = schedules.filter(schedule => {\n        const dsSchedule = (0, _unwrapProxy.unwrapProxy)(schedule.get('dispatchSchedule'));\n        return Ember.isPresent(dsSchedule);\n      }); // make sure any existing schedule fits new route planned times\n\n      const sortedSchedules = schedules.filter(schedule => {\n        const start = (0, _moment.default)(schedule.get('start'));\n        const end = (0, _moment.default)(schedule.get('end'));\n\n        if (plannedStart.isValid() && plannedEnd.isValid()) {\n          return start.isSameOrBefore(plannedStart) && end.isSameOrAfter(plannedEnd);\n        } // list all schedules having end later than current.\n\n\n        return end.isAfter(date);\n      }).sortBy('name');\n      return sortedSchedules;\n    }),\n    hasRouteChanged: Ember.computed('selectedVehicle', 'selectedDriver', 'selectedProvider', 'startTime', 'endTime', 'affinities', 'tripLimit', 'distanceLimit', 'schedulingMode', function () {\n      if (!this.get('isEditMode')) return true;\n      return this.isRouteChanged();\n    }),\n\n    isRouteChanged() {\n      const {\n        selectedProvider,\n        selectedVehicle,\n        selectedDriver,\n        startTime,\n        endTime,\n        schedulingMode,\n        affinities,\n        tripLimit,\n        distanceLimit\n      } = this.getProperties('selectedProvider', 'selectedVehicle', 'selectedDriver', 'startTime', 'endTime', 'schedulingMode', 'affinities', 'tripLimit', 'distanceLimit'); // eslint-disable-next-line no-undefined\n\n      const driverId = Ember.isPresent(selectedDriver) ? selectedDriver.get('id') : undefined;\n      const routeInfo = {\n        startTime,\n        endTime,\n        providerId: selectedProvider.get('id'),\n        vehicleId: selectedVehicle.get('id'),\n        driverId: driverId,\n        schedulingMode,\n        affinities,\n        tripLimit,\n        distanceLimit\n      };\n      const previousRouteInfo = this.get('previousRouteInfo');\n      return JSON.stringify(previousRouteInfo) !== JSON.stringify(routeInfo);\n    },\n\n    currentSchedule: Ember.computed('availableSchedules', function () {\n      const availableSchedules = this.get('availableSchedules') ? this.get('availableSchedules').sortBy('start') : null;\n\n      if (!Ember.isPresent(availableSchedules)) {\n        return null;\n      }\n\n      const schedule = availableSchedules.firstObject;\n      this.onSelScheduleTimeChange(schedule);\n      const start = (0, _moment.default)(schedule.get('start'));\n      const end = (0, _moment.default)(schedule.get('end'));\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n      const plannedEnd = (0, _moment.default)(this.get('availabilityEndTime'));\n\n      if (!(start.isAfter(plannedEnd) || end.isBefore(plannedStart))) {\n        return schedule;\n      }\n\n      return null;\n    }),\n    //user must select at least one  zone and selected zone affinity value other than no-service.\n    hasZones: Ember.computed('zoneTableRef.table.rows.@each.selected', 'selectedAffinityType.type', function () {\n      const zones = this.get('isEditMode') ? this.get('zoneTableRef.table.rows') : this.get('zoneTableRef.checkedRows');\n      return Ember.isPresent(zones) && zones.some(zone => zone.get('convertAffinityValue') !== _zone.AFFINITY_NO_SERVICE.type);\n    }),\n\n    init() {\n      const store = this.get('store');\n      const isEditMode = this.get('isEditMode');\n\n      this._super();\n\n      this.set('schedulingModeList', [_routeTemplate.MANUAL_SCHEDULING_MODE, _routeTemplate.AUTOMATIC_SCHEDULING_MODE]);\n      this.set('affinityTypes', [_zone.AFFINITY_PREFERRED, _zone.AFFINITY_NORMAL, _zone.AFFINITY_LAST_RESORT, _zone.AFFINITY_NO_SERVICE]);\n      const zones = store.peekAll('zone');\n      this.set('availableZones', zones);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.dateTimeMoment);\n      this.setDateTimeRange();\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isNone(noneDriverModel)) {\n        const newRecord = store.createRecord('driver', {\n          driverId: 'None'\n        });\n        this.set('noneDriverModel', newRecord);\n      }\n\n      if (isEditMode) {\n        this.set('selectedProvider', this.get('route.provider'));\n        this.set('selectedVehicle', this.get('route.dispatchRoute.latestRouteVehicleDriver.vehicle'));\n        this.set('selectedDriver', this.get('route.dispatchRoute.latestRouteVehicleDriver.driver'));\n        this.set('selectedSchedule', this.get('route.schedule'));\n        this.set('startTime', this.get('dispatchRoute.plannedStartTime'));\n        this.set('endTime', this.get('dispatchRoute.plannedEndTime'));\n      }\n\n      this.setPreviousRouteInfo();\n    },\n\n    setPreviousRouteInfo() {\n      const isEditMode = this.get('isEditMode');\n      const currentState = this.get('currentState'); // we want to keep the original previousRouteInfo and not create a new one\n\n      if (currentState && currentState.previousRouteInfo) {\n        this.set('previousRouteInfo', currentState.previousRouteInfo);\n        return;\n      }\n\n      const dispatchRoute = this.get('dispatchRoute');\n      const route = this.get('route');\n      const previousRouteInfo = {\n        startTime: isEditMode ? dispatchRoute.get('plannedStartTime') : route.get('plannedStartTime'),\n        endTime: isEditMode ? dispatchRoute.get('plannedEndTime') : route.get('plannedEndTime'),\n        providerId: route.get('provider.id'),\n        vehicleId: route.get('vehicle.id'),\n        driverId: route.get('driver.id'),\n        schedulingMode: route.get('dispatchRoute.schedulingMode'),\n        affinities: route.get('dispatchRoute.affinities'),\n        tripLimit: route.get('tripLimit'),\n        distanceLimit: route.get('distanceLimit')\n      };\n      this.set('previousRouteInfo', previousRouteInfo);\n    },\n\n    cleanupNoneDriverModel() {\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isPresent(noneDriverModel)) {\n        noneDriverModel.destroyRecord();\n        this.set('noneDriverModel');\n      }\n    },\n\n    async willDestroy() {\n      this.cleanupNoneDriverModel();\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      const isEditMode = this.get('isEditMode');\n      this.setSideDrawerWidth('550px');\n      this.loadOptionsTask.perform().then(() => {\n        if (isEditMode) {\n          this.set('selectedDateTime.minDateSelection', this.get('selectedSchedule.start'));\n        } else {\n          this.set('selectedSchedule', this.get('currentSchedule'));\n          this.set('selectedDateTime.minDateSelection', this.get('currentSchedule.start'));\n        }\n      });\n    },\n\n    loadOptionsTask: (0, _emberConcurrency.task)(function* () {\n      yield this.fetchDriversTask.perform();\n      yield this.fetchDispachAssignableVehiclesTask.perform();\n      yield this.fetchProvidersTask.perform();\n      yield this.fetchSchedulesTask.perform();\n    }),\n    fetchProvidersTask: (0, _emberConcurrency.task)(function* () {\n      const providers = yield this.store.findAll('provider');\n      const userProviders = this.get('session.data.authenticated.tokenInfo.providerNames');\n      const userHasAllProviders = userProviders.includes('ALL');\n      const filterProviderTypes = providers.filter(provider => {\n        const providerName = provider.get('name');\n        const ProviderStatus = provider.get('status').toLowerCase();\n        return ProviderStatus !== IN_ACTIVE_STATUS && (userHasAllProviders || userProviders.includes(providerName));\n      });\n      this.set('providers', filterProviderTypes);\n    }),\n    fetchSchedulesTask: (0, _emberConcurrency.task)(function* () {\n      // eslint-disable-next-line\n      const filterQuery = `eq(type,'primary')`;\n      const schedules = yield this.store.query('schedule', {\n        filter: filterQuery\n      });\n      this.set('schedules', schedules);\n    }),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const isEditMode = this.get('isEditMode');\n      const {\n        selectedProvider,\n        selectedVehicle,\n        selectedDriver,\n        selectedSchedule,\n        route\n      } = this.getProperties('selectedProvider', 'selectedVehicle', 'selectedDriver', 'selectedSchedule', 'route');\n      const store = this.get('store');\n      const routeAdapter = store.adapterFor('route');\n      const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n      const rvdAdapter = store.adapterFor('route-vehicle-driver');\n      const dispatchSchedule = (0, _unwrapProxy.unwrapProxy)(selectedSchedule.get('dispatchSchedule'));\n      const dispatchRoute = this.get('dispatchRoute');\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      const originalVehicle = dispatchRoute.get('latestRouteVehicleDriver.vehicle');\n      const vehicle = selectedVehicle || originalVehicle;\n      route.set('provider', selectedProvider);\n      route.set('schedule', (0, _unwrapProxy.unwrapProxy)(selectedSchedule));\n\n      try {\n        if (isEditMode) {\n          lockRouteAction();\n          const dispatchRouteResponse = yield dispatchRouteAdapter.updateDispatchRoute(dispatchRoute, dispatchSchedule);\n          const newDispatchRouteVersion = dispatchRouteResponse && dispatchRouteResponse.data ? dispatchRouteResponse.data.attributes.version : dispatchRoute.get('version');\n          const rvdResponse = yield rvdAdapter.updateRouteVehicleDriver(dispatchRoute, vehicle, selectedDriver, newDispatchRouteVersion);\n          unlockRouteAction();\n          return rvdResponse;\n        }\n\n        route.set('schedulingMode', dispatchRoute.get('schedulingMode'));\n        route.set('affinities', dispatchRoute.get('affinities'));\n        route.set('tripLimit', dispatchRoute.get('tripLimit'));\n        route.set('distanceLimit', dispatchRoute.get('distanceLimit'));\n\n        if (selectedVehicle) {\n          route.set('vehicle', selectedVehicle);\n        }\n\n        const scheduleRouteResponse = yield routeAdapter.createScheduleRoute(route);\n        const dispatchRouteResponse = yield dispatchRouteAdapter.createDispatchRoute(scheduleRouteResponse, dispatchRoute, dispatchSchedule);\n        const rvdResponse = yield rvdAdapter.createRouteVehicleDriver(dispatchRouteResponse, route, selectedDriver);\n        return rvdResponse;\n      } catch (e) {\n        unlockRouteAction(); // if dispatch route was updated but rvd patch failed, we need to use the latest version number\n\n        const currentVersion = yield dispatchRouteAdapter.getVersion(dispatchRoute.get('id'));\n\n        if (currentVersion !== dispatchRoute.get('version')) {\n          dispatchRoute.set('version', currentVersion);\n        }\n\n        throw e;\n      }\n    }),\n\n    resetSelections() {\n      const zoneTableRef = this.get('zoneTableRef');\n      const isEditMode = this.get('isEditMode');\n      const previousRouteInfo = this.get('previousRouteInfo');\n\n      if (isEditMode) {\n        (0, _unwrapProxy.unwrapProxy)(this.get('route')).rollbackAttributes();\n        this.set('selectedProvider', this.get('route.provider'));\n        this.set('selectedVehicle', this.get('route.dispatchRoute.latestRouteVehicleDriver.vehicle'));\n        this.set('selectedDriver', this.get('route.dispatchRoute.latestRouteVehicleDriver.driver'));\n        this.set('selectedSchedule', this.get('route.schedule'));\n        this.set('affinities', this.get('dispatchRoute.affinities'));\n      } else {\n        this.setProperties({\n          routeName: null,\n          selectedVehicle: null,\n          selectedDriver: null,\n          selectedSchedule: null,\n          selectedProvider: null,\n          endTime: null,\n          errorMessage: null\n        });\n        this.set('dispatchRoute.affinities', []);\n      }\n\n      this.set('startTime', previousRouteInfo.startTime);\n      this.set('endTime', previousRouteInfo.endTime);\n      this.setDateTimeRange();\n      zoneTableRef.refreshData();\n      zoneTableRef.onUncheckAll();\n      this.setPreviousRouteInfo();\n    },\n\n    onSelScheduleTimeChange(schedule) {\n      const selectedScheduleStartTime = (0, _moment.default)(schedule.get('start'));\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n\n      if (plannedStart.isBefore(selectedScheduleStartTime)) {\n        Ember.run.schedule('afterRender', () => {\n          this.set('startTime', selectedScheduleStartTime.toDate());\n          this.set('selectedDateTime.startTime', (0, _moment.default)(schedule.get('start')).toISOString());\n        });\n      }\n    },\n\n    setDateTimeRange() {\n      const isEditMode = this.get('isEditMode');\n      const date = this.get('stackFrame.options.minDate');\n      const endDate = this.get('dispatchSchedule.end');\n      const startTime = isEditMode ? this.get('dispatchRoute.plannedStartTime') : this.get('route.plannedStartTime');\n      const minDate = (0, _moment.default)(date).toISOString() < (0, _moment.default)(startTime).toISOString() ? (0, _moment.default)(date).toISOString() : (0, _moment.default)(startTime).toISOString();\n      this.set('selectedDateTime', {\n        minDateSelection: minDate,\n        maxDateSelection: (0, _moment.default)(endDate).toISOString(),\n        startTime: (0, _moment.default)(startTime).toISOString()\n      });\n    },\n\n    validateSelectedDriver() {\n      const isEditMode = this.get('isEditMode');\n      const selectedDriver = this.get('selectedDriver');\n      const availableDrivers = this.get('availableDrivers');\n\n      if (!isEditMode && Ember.isPresent(selectedDriver) && selectedDriver.get('id')) {\n        const driverExist = availableDrivers.find(driver => {\n          return driver.get('id') === selectedDriver.get('id');\n        });\n\n        if (Ember.isNone(driverExist)) {\n          this.set('selectedDriver');\n        }\n      }\n    },\n\n    validateEditRecords(dispatchRoute) {\n      const valid = true;\n      const route = dispatchRoute.get('route');\n      const hasAllSelectedValues = this.get('hasAllSelectedValues'); // make sure we apply the date to the plannedStartTime and plannedEndTime\n\n      const plannedStartTime = (0, _moment.default)(route.get('plannedStartTime'));\n      const plannedEndTime = (0, _moment.default)(route.get('plannedEndTime'));\n      const firstStopMaxTime = dispatchRoute.get('firstStopMaxTime');\n      const lastStopTime = dispatchRoute.get('lastStopTime');\n      const routeMaxTimeLimit = dispatchRoute.get('routeMaxTimeLimit');\n      const routeTimeDiff = plannedEndTime.diff(plannedStartTime, 'minutes');\n\n      if (firstStopMaxTime && plannedStartTime.isSameOrAfter(firstStopMaxTime)) {\n        this.set('errorMessage', 'Route start time cannot be after start time of first Stop');\n        return false;\n      }\n\n      if (lastStopTime && lastStopTime.isSameOrAfter(plannedEndTime)) {\n        this.set('errorMessage', 'Route end time cannot be before end time of last stop');\n        return false;\n      }\n\n      if (routeTimeDiff > routeMaxTimeLimit) {\n        this.set('errorMessage', `Route length of ${routeTimeDiff} exceeds config Route Max Time Limit of ${routeMaxTimeLimit} minutes`);\n        return false;\n      }\n\n      if (plannedStartTime.isAfter(plannedEndTime)) {\n        this.set('errorMessage', 'Start Time cannot be after End Time');\n        return false;\n      }\n\n      if (hasAllSelectedValues) {\n        // reset error message\n        this.set('errorMessage');\n      } else {\n        // show error message, missing properties\n        this.set('errorMessage', 'Please fill out all of the fields before saving.');\n        return false;\n      }\n\n      return valid;\n    },\n\n    validateAddRecords() {\n      const valid = true;\n      const hasAllSelectedValues = this.get('hasAllSelectedValues');\n      const routeName = this.get('routeName');\n      const plannedStart = this.get('startTime');\n      const plannedEndTime = this.get('endTime');\n      const routeMaxTimeLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeMaxTimeLimit');\n      const routeMaxTimeLimit = routeMaxTimeLimitParam ? parseInt(routeMaxTimeLimitParam.get('value'), 10) : 720; // minutes\n\n      const routeTimeDiff = (0, _moment.default)(plannedEndTime).diff((0, _moment.default)(plannedStart), 'minutes');\n\n      if (routeTimeDiff > routeMaxTimeLimit) {\n        this.set('errorMessage', `Route length of ${routeTimeDiff} exceeds config Route Max Time Limit of ${routeMaxTimeLimit} minutes`);\n        return false;\n      }\n\n      if (!isNaN(parseInt(routeName, 10)) && (parseInt(routeName, 10) > 2147483648 || parseInt(routeName, 10) < 1)) {\n        this.set('errorMessage', 'Route ID must be between 1 to 2147483648');\n        return false;\n      }\n\n      if (plannedStart > plannedEndTime) {\n        this.set('errorMessage', 'start time must always be less than the end time');\n        return false;\n      }\n\n      if (hasAllSelectedValues) {\n        // reset error message\n        this.set('errorMessage');\n      } else {\n        // show error message, missing properties\n        this.set('errorMessage', 'Please fill out all of the fields before saving.');\n        return false;\n      }\n\n      return valid;\n    },\n\n    actions: {\n      onSelectScheduleOption(option) {\n        this.set('selectedSchedule', option);\n        const scheduleStart = option.get('start');\n        this.set('selectedDateTime.minDateSelection', scheduleStart);\n      },\n\n      onSelectProviderOption(option) {\n        this.set('selectedProvider', option);\n        this.fetchDriversTask.perform();\n        this.fetchDispachAssignableVehiclesTask.perform();\n      },\n\n      onRouteNameInput(name) {\n        if (!NUMBER_FORMAT.test(name) || name.length > 10) {\n          return this.notifyPropertyChange('routeName');\n        }\n\n        this.set('routeName', name);\n        return name;\n      },\n\n      onAffinitySelect(option) {\n        const availableZones = this.get('availableZones');\n        const zones = this.get('zoneTableRef.checkedRows');\n        const zoneIds = availableZones.map(zone => parseInt(zone.get('id'), 10)).filter(zoneId => Ember.isPresent(zoneId) && !isNaN(zoneId));\n        const affinities = this.get('affinities') || [];\n        const maxZoneId = Math.max(...zoneIds, affinities.length);\n        const newSize = Math.max(maxZoneId, affinities.length);\n        const newAffinities = Array(newSize).fill(0);\n        this.set('selectedAffinityType', option);\n        zones.setEach('affinityValue', option.val); // configured affinities to contain all imaginable zone changes\n\n        affinities.forEach((aff, index) => {\n          newAffinities[index] = aff;\n        });\n        zones.forEach(zone => {\n          //affinities index start from [0-16] and zone Ids starts from 1-17\n          const zoneId = zone.get('zoneId') - 1;\n          newAffinities[zoneId] = option.val;\n        });\n        this.set('affinities', newAffinities);\n      },\n\n      onChangeTime(valuePath, value) {\n        Ember.run.debounce(this, 'validateSelectedDriver', 250);\n        this.set(valuePath, value[0]);\n        const isEditMode = this.get('isEditMode');\n\n        if (!isEditMode) {\n          // Clear the schedule selection and reselect it.\n          this.set('selectedSchedule', this.get('currentSchedule'));\n        }\n      },\n\n      refresh() {\n        const isEditMode = this.get('isEditMode');\n        this.resetSelections();\n        this.loadOptionsTask.perform().then(() => {\n          if (isEditMode) {\n            this.set('selectedDateTime.minDateSelection', this.get('selectedSchedule.start'));\n          } else {\n            this.set('selectedSchedule', this.get('currentSchedule'));\n            this.set('selectedDateTime.minDateSelection', this.get('currentSchedule.start'));\n          }\n        });\n      },\n\n      async save() {\n        const isEditMode = this.get('isEditMode');\n        const tooltip = this.get('tooltip');\n        const saveTask = this.get('saveTask');\n        const dispatchRoute = this.get('route.dispatchRoute');\n        const routeName = this.get('routeName');\n        const notifications = this.get('notifications');\n        const title = isEditMode ? 'Edit Route' : 'Add New Route';\n        const tip = isEditMode ? `Edit route name ${routeName}` : `Create route name ${routeName}`;\n\n        if (isEditMode) {\n          this.set('dispatchRouteToCheck', dispatchRoute);\n\n          const closeCallback = () => {\n            this.send('onCloseClick');\n          }; // Check dispatchRoute version first\n\n\n          await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n\n          if (!this.validateEditRecords(dispatchRoute)) {\n            return false;\n          }\n        } else {\n          if (!this.validateAddRecords()) {\n            // eslint-disable-line no-lonely-if\n            return false;\n          }\n        }\n\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return saveTask.perform().then(() => {\n              this.onCloseClick();\n\n              if (isEditMode) {\n                notifications.success(`Successfully edited route ${routeName}`);\n              } else {\n                notifications.success(`Successfully created new route ${routeName}`);\n              }\n\n              tooltip.reset();\n            }).catch(error => {\n              let message;\n\n              switch (error.status) {\n                case 400:\n                  if (Ember.isPresent(error.payload) && Ember.isPresent(error.payload.detail) && error.payload.detail.includes('it is assigned to placeholder')) {\n                    message = 'Cannot edit route because vehicle is a placeholder and a driver is assigned. Either select a non-placeholder vehicle or remove driver and try again.';\n                  } else {\n                    message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                  }\n\n                  break;\n\n                case 409:\n                  if (error.message === 'Error saving data that must be unique') {\n                    message = `The route name ${this.get('routeName')} is already taken, please try another.`;\n                  } else if (error.message.includes('modified by another request')) {\n                    message = `UNABLE TO UPDATE ROUTE ${this.get('route.name')}, BECAUSE IT HAS BEEN MODIFIED BY ANOTHER REQUEST.`;\n                  } else if (error.message.includes('it is a placeholder vehicle') || Ember.isPresent(error.payload) && Ember.isPresent(error.payload.message) && error.payload.message.includes('it is a placeholder vehicle')) {\n                    message = 'Cannot edit route because vehicle is a placeholder and a driver is assigned. Either select a non-placeholder vehicle or remove driver and try again.';\n                  } else {\n                    message = error.message;\n                  }\n\n                  break;\n\n                default:\n                  message = 'There was a problem creating the route, please try again.'; // eslint-disable-next-line no-console\n\n                  console.error(error);\n                  break;\n              }\n\n              this.set('errorMessage', message);\n              notifications.warning(message);\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => tooltip.reset()\n        });\n      },\n\n      onCloseClick() {\n        this._super(...arguments);\n\n        if (this.get('isEditMode')) {\n          (0, _unwrapProxy.unwrapProxy)(this.get('route')).rollbackAttributes();\n          (0, _unwrapProxy.unwrapProxy)(this.get('route.dispatchRoute')).rollbackAttributes();\n        }\n\n        this.onCloseClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/selected-item-schedule/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"CZScWHIC\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"span\\\"],[9],[0,\\\"Schedule \\\"],[1,[23,[\\\"option\\\",\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/selected-item-schedule/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"9mQsEH8P\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"mode\\\",\\\"driver\\\",\\\"vehicle\\\",\\\"provider\\\",\\\"schedule\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"add-new-route-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/add-edit-dispatch-route/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"displayName\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"save\\\"],null],[23,[\\\"hasAllSelectedValues\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"refresh\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/add-edit-dispatch-route/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-edit-dispatch-route/template.hbs' @ L15:C7) \\\"],null]],[[\\\"isCollapsible\\\"],[false]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"routeName\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRouteNameInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeFlatPickr\\\"]],[23,[\\\"selectedDateTime\\\",\\\"minDateSelection\\\"]],[23,[\\\"startTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"startTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeFlatPickr\\\"]],[23,[\\\"startTime\\\"]],[23,[\\\"endTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"endTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNewRoute\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Schedule\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"selectedItemComponent\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"availableSchedules\\\"]],[23,[\\\"selectedSchedule\\\"]],\\\"side-drawer/add-edit-dispatch-route/selected-item-schedule\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onSelectScheduleOption\\\"],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"schedule-detail-info\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"schedule-title\\\"],[9],[0,\\\"Schedule \\\"],[1,[22,7,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Planned Start: \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,7,[\\\"start\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null],false],[0,\\\" | \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,7,[\\\"start\\\"]]],null],\\\"HH:mm\\\"],null],false],[0,\\\"   \\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Planned End: \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,7,[\\\"end\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null],false],[0,\\\" | \\\"],[1,[27,\\\"moment-format\\\",[[27,\\\"readonly\\\",[[22,7,[\\\"end\\\"]]],null],\\\"HH:mm\\\"],null],false],[0,\\\"  \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\"],[[23,[\\\"selectedProvider\\\"]],true,\\\"name\\\",[23,[\\\"providers\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectProviderOption\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n                \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isEditMode\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip Limit\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"extra\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"extraTripLimitOptions\\\"]],[23,[\\\"tripLimit\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"tripLimit\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Distance Limit\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"extra\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"extraDistanceLimitOptions\\\"]],[23,[\\\"distanceLimit\\\"]],[23,[\\\"isBulkEdit\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"distanceLimit\\\"]]],null]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"callSign\\\",[23,[\\\"selectedVehicle\\\"]],true,[27,\\\"not\\\",[[23,[\\\"selectedProvider\\\"]]],null],[23,[\\\"availableVehicles\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedVehicle\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,5,[\\\"callSign\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"driverId\\\",[23,[\\\"selectedDriver\\\"]],true,[27,\\\"not\\\",[[23,[\\\"selectedProvider\\\"]]],null],[23,[\\\"allAvailableDrivers\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedDriver\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,4,[\\\"driverIdAndName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Scheduling Mode\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"options\\\",\\\"onchange\\\"],[[23,[\\\"schedulingMode\\\"]],false,[23,[\\\"schedulingModeList\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"schedulingMode\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"assigned-zone-header-label\\\"],[9],[0,\\\"Assigned Zones \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"side-drawer/add-edit-dispatch-route/zone-table\\\",null,[[\\\"tableRef\\\",\\\"dispatchRoute\\\",\\\"isBulkEdit\\\"],[[23,[\\\"zoneTableRef\\\"]],[23,[\\\"dispatchRoute\\\"]],[23,[\\\"isBulkEdit\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"zone-button-wrapper\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Affinity Value\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"placeholder\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"affinityTypes\\\"]],false,[23,[\\\"isBulkEdit\\\"]],\\\"Select Affinity\\\",\\\"Select Affinity\\\",[23,[\\\"selectedAffinityType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAffinitySelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"type\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/zone-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/zone-table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TABLE_DOWNLOAD_ACTION = 'Download';\n\n  var _default = _component.default.extend({\n    classNames: ['zone-table'],\n    config: _config.default,\n    disableRowSelection: Ember.computed.alias('isBulkEdit'),\n\n    init() {\n      this._super(...arguments); // To remove DOWNLOAD action in Zones Table\n\n\n      const tableActions = this.get('tableActions').filter(action => action.name !== TABLE_DOWNLOAD_ACTION);\n      this.set('tableActions', tableActions);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const affinities = this.get('dispatchRoute.affinities') || [];\n      return this._super(...arguments).then(records => {\n        return records.filter(record => {\n          //affinities index start from [0-16] and zone Ids starts from 1-17\n          const zoneId = record.get('zoneId') - 1;\n          const affVal = affinities[zoneId] || 0;\n          record.set('affinityValue', affVal);\n          return record;\n        });\n      });\n    },\n\n    refreshData() {\n      this._super(...arguments);\n\n      this.set('defaultCheckboxRowSelected', true);\n      this.set('isTableLoadedForFirstTime', false);\n      this.fetchCheckedRows();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-dispatch-route/zone-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'zone',\n    title: 'Zones',\n    defaultSortId: 'zoneId',\n    defaultSortAsc: true,\n    fetchModelData: true,\n    rowSelectionType: 'checkbox',\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'Name',\n      valuePath: 'displayName',\n      defaultWidth: 180,\n      searchable: true\n    }, {\n      id: 'affinity',\n      index: 1,\n      type: 'text',\n      label: 'Affinity',\n      valuePath: 'convertAffinityValue',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'zoneId',\n      index: 2,\n      type: 'number',\n      label: 'ZoneId',\n      valuePath: 'zoneId',\n      defaultWidth: 70,\n      searchable: true,\n      hidden: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-schedule-route/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/config/environment\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\", \"adept-iq/models/route-template\", \"adept-iq/models/zone\"], function (_exports, _emberConcurrency, _moment, _unwrapProxy, _lodash, _environment, _fetchAssignableVehicleDrivers, _routeTemplate, _zone) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const NUMBER_FORMAT = /^\\d*$/;\n  const REMOVE_TEXT_FORMAT = /[^0-9]+/g;\n  const REMOVE_SPECIAL_FORMAT = /[^a-zA-Z0-9]/g;\n  const FUTURE_BOOKING_TIMELINE = 'config-Book_Trips/Future_Booking_Timeline';\n  const DEFAULT_TRIP_LIMIT = 9;\n  const DEFAULT_DISTANCE_LIMIT = 99;\n  const MAX_ROUTE_VALUE = 2147483647;\n  const IN_ACTIVE_STATUS = 'inactive';\n  const extraTripLimitOptions = {\n    min: 1,\n    max: 1\n  };\n  const extraDistanceLimitOptions = {\n    min: 1,\n    max: 2\n  };\n\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    tagName: '',\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    vehicles: null,\n    drivers: null,\n    providers: null,\n    schedules: null,\n    selectedVehicle: null,\n    selectedDriver: null,\n    scheduleOption: null,\n    extraDistanceLimitOptions,\n    extraTripLimitOptions,\n    currentState: null,\n    onShrinkClick: null,\n    onCloseClick: null,\n    usePlaceHolderTask: true,\n    // used by fetchVehicle Mixin\n    dateTimeMoment: _environment.default.dateTimeFormat,\n    filterDriversByHoliday: true,\n    filterDriversByShiftTime: true,\n    noneDriverModel: null,\n    bulkRouteIds: Ember.computed.alias('stackFrame.options.bulkRouteIds'),\n    route: Ember.computed.alias('stackFrame.options.routeModel'),\n    displayName: Ember.computed.alias('stackFrame.options.displayName'),\n    routeName: Ember.computed.alias('route.name'),\n    type: Ember.computed.alias('route.type'),\n    schedulingMode: Ember.computed.alias('route.schedulingMode'),\n    optimizationFlags: Ember.computed.alias('route.optimizationFlags'),\n    tripLimit: Ember.computed.alias('route.tripLimit'),\n    distanceLimit: Ember.computed.alias('route.distanceLimit'),\n    affinities: Ember.computed.alias('route.affinities'),\n    isKeeperType: Ember.computed.equal('type', _routeTemplate.ROUTE_TEMPLATE_TYPE_KEEPER),\n    isAdjustBreak: true,\n    isConsolidateRoute: true,\n    availableVehicles: Ember.computed.readOnly('vehicles'),\n    availableDrivers: Ember.computed.readOnly('drivers'),\n    minScheduleDate: null,\n    maxScheduleDate: null,\n    zoneTableRef: null,\n    selectedSchedule: Ember.computed.alias('workspace.currentSchedule'),\n    selectedStartDate: Ember.computed.readOnly('workspace.startDate'),\n    provider: Ember.computed.readOnly('selectedProvider'),\n    // used by fetchVehicle Mixin\n    selectedProvider: Ember.computed({\n      set(key, value) {\n        this.set('selectedVehicle');\n        this.set('selectedDriver');\n        return value;\n      }\n\n    }),\n    plannedStartTime: Ember.computed.readOnly('startTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('endTime'),\n    //used in fetch vehicle driver mixin\n    isEditMode: Ember.computed.notEmpty('route.id'),\n    isNewRoute: Ember.computed.alias('route.isNewRoute'),\n    isBulkEdit: Ember.computed.gt('bulkRouteIds.length', 1),\n    hasAllSelectedValues: Ember.computed('routeName', 'selectedProvider', 'selectedSchedule', 'selectedVehicle', 'startTime', 'endTime', 'tripLimit', 'distanceLimit', 'isStartTimeBefore', 'hasZones', 'hasRouteChanged', 'isBulkEdit', function () {\n      const {\n        routeName,\n        selectedProvider,\n        selectedSchedule,\n        selectedVehicle,\n        startTime,\n        endTime,\n        tripLimit,\n        distanceLimit,\n        isStartTimeBefore,\n        hasZones,\n        hasRouteChanged,\n        schedulingMode,\n        isBulkEdit\n      } = this.getProperties('routeName', 'selectedProvider', 'selectedSchedule', 'selectedVehicle', 'startTime', 'endTime', 'tripLimit', 'distanceLimit', 'isStartTimeBefore', 'hasZones', 'hasRouteChanged', 'schedulingMode', 'isBulkEdit');\n\n      if (isBulkEdit) {\n        return Ember.isPresent(schedulingMode);\n      }\n\n      return routeName && selectedProvider && selectedSchedule && selectedVehicle && startTime && endTime && tripLimit && distanceLimit && isStartTimeBefore && hasZones && hasRouteChanged;\n    }),\n    allAvailableDrivers: Ember.computed('provider', 'availableDrivers', 'noneDriverModel', function () {\n      const availableDrivers = this.get('availableDrivers') || [];\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isPresent(noneDriverModel)) {\n        availableDrivers.unshift(noneDriverModel);\n      }\n\n      return availableDrivers;\n    }),\n    //user must select at least one  zone and selected zone affinity value other than no-service.\n    hasZones: Ember.computed('zoneTableRef.table.rows.@each.selected', 'selectedAffinityType.type', function () {\n      const zones = this.get('isEditMode') ? this.get('zoneTableRef.table.rows') : this.get('zoneTableRef.checkedRows');\n      return Ember.isPresent(zones) && zones.some(zone => zone.get('convertAffinityValue') !== _zone.AFFINITY_NO_SERVICE.type);\n    }),\n    startTime: Ember.computed('isEditMode', 'isBulkEdit', function () {\n      const isBulkEdit = this.get('isBulkEdit');\n      const isEditMode = this.get('isEditMode');\n      const selectedStartDate = this.get('selectedStartDate');\n\n      if (isBulkEdit) {\n        return null;\n      }\n\n      if (isEditMode) {\n        return this.get('route.plannedStartTime');\n      }\n\n      return (0, _moment.default)(selectedStartDate).startOf('day').toISOString();\n    }),\n    endTime: Ember.computed('isEditMode', 'isBulkEdit', function () {\n      const isBulkEdit = this.get('isBulkEdit');\n      const isEditMode = this.get('isEditMode');\n      const selectedStartDate = this.get('selectedStartDate');\n\n      if (isBulkEdit) {\n        return null;\n      }\n\n      if (isEditMode) {\n        return this.get('route.plannedEndTime');\n      }\n\n      return (0, _moment.default)(selectedStartDate).endOf('day').toISOString();\n    }),\n    isStartTimeBefore: Ember.computed('startTime', 'endTime', 'isBulkEdit', function () {\n      const isBulkEdit = this.get('isBulkEdit');\n\n      if (isBulkEdit || (0, _moment.default)(this.startTime).isBefore(this.endTime)) {\n        this.setStartTimeError();\n        return true;\n      }\n\n      this.setStartTimeError('End Time must be after Start Time.');\n      return false;\n    }),\n    isDisabled: Ember.computed('route', 'isEditMode', 'isBulkEdit', function () {\n      const isEditMode = this.get('isEditMode');\n      const isScheduled = this.get('route.isScheduled');\n      const isNewRoute = this.get('isNewRoute');\n      const isBulkEdit = this.get('isBulkEdit');\n      return isBulkEdit || isNewRoute || isEditMode && isScheduled;\n    }),\n\n    setStartTimeError(message) {\n      this.set('errorMessage', message);\n    },\n\n    hasRouteChanged: Ember.computed('selectedVehicle', 'selectedDriver', 'selectedProvider', 'startTime', 'endTime', 'type', 'optimizationFlags', 'affinities', 'tripLimit', 'distanceLimit', 'schedulingMode', function () {\n      if (!this.get('isEditMode')) return true;\n      return this.isRouteChanged();\n    }),\n\n    isRouteChanged() {\n      const {\n        selectedProvider,\n        selectedVehicle,\n        selectedDriver,\n        startTime,\n        endTime,\n        schedulingMode,\n        type,\n        affinities,\n        optimizationFlags,\n        tripLimit,\n        distanceLimit\n      } = this.getProperties('selectedProvider', 'selectedVehicle', 'selectedDriver', 'startTime', 'endTime', 'schedulingMode', 'type', 'affinities', 'optimizationFlags', 'tripLimit', 'distanceLimit'); // eslint-disable-next-line no-undefined\n\n      const driverId = Ember.isPresent(selectedDriver) ? selectedDriver.get('id') : undefined;\n      const routeInfo = {\n        startTime,\n        endTime,\n        providerId: selectedProvider.get('id'),\n        vehicleId: selectedVehicle.get('id'),\n        driverId: driverId,\n        schedulingMode,\n        optimizationFlags,\n        type,\n        affinities,\n        tripLimit,\n        distanceLimit\n      };\n      const previousRouteInfo = this.get('previousRouteInfo');\n      return JSON.stringify(previousRouteInfo) !== JSON.stringify(routeInfo);\n    },\n\n    init() {\n      this._super();\n\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.dateTimeMoment);\n      this.set('schedulingModeList', [_routeTemplate.MANUAL_SCHEDULING_MODE, _routeTemplate.AUTOMATIC_SCHEDULING_MODE]);\n      this.set('affinityTypes', [_zone.AFFINITY_PREFERRED, _zone.AFFINITY_NORMAL, _zone.AFFINITY_LAST_RESORT, _zone.AFFINITY_NO_SERVICE]);\n      const store = this.get('store');\n      const zones = store.peekAll('zone');\n      const futureBookingTimeline = store.peekRecord('cs-config-item', FUTURE_BOOKING_TIMELINE);\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isNone(noneDriverModel)) {\n        const newRecord = this.get('store').createRecord('driver', {\n          driverId: 'None'\n        });\n        this.set('noneDriverModel', newRecord);\n      }\n\n      this.set('minScheduleDate', (0, _moment.default)().startOf('day').add(1, 'days').toISOString());\n      this.set('maxScheduleDate', (0, _moment.default)().endOf('day').add(parseInt(futureBookingTimeline.get('value'), 10), 'days').toISOString());\n      this.set('availableZones', zones);\n      this.set('selectedProvider', this.get('route.provider'));\n      this.set('selectedVehicle', this.get('route.vehicle'));\n      this.set('selectedDriver', this.get('route.driver'));\n      this.set('isAdjustBreak', _routeTemplate.ADJUST_BREAK_FLAG & this.get('optimizationFlags'));\n      this.set('isConsolidateRoute', _routeTemplate.CONSOLIDATE_ROUTE_FLAG & this.get('optimizationFlags'));\n      this.setupHeaderActions();\n      this.setDisableDates();\n      this.setPreviousRouteInfo();\n      this.loadOptionsTask.perform();\n    },\n\n    setPreviousRouteInfo() {\n      const currentState = this.get('currentState'); // we want to keep the original previousRouteInfo and not create a new one\n\n      if (currentState && currentState.previousRouteInfo) {\n        this.set('previousRouteInfo', currentState.previousRouteInfo);\n        return;\n      }\n\n      const route = this.get('route');\n      const previousRouteInfo = {\n        startTime: route.get('plannedStartTime'),\n        endTime: route.get('plannedEndTime'),\n        providerId: route.get('provider.id'),\n        vehicleId: route.get('vehicle.id'),\n        driverId: route.get('driver.id'),\n        schedulingMode: route.get('schedulingMode'),\n        optimizationFlags: route.get('optimizationFlags'),\n        type: route.get('type'),\n        affinities: route.get('affinities'),\n        tripLimit: route.get('tripLimit'),\n        distanceLimit: route.get('distanceLimit')\n      };\n      this.set('previousRouteInfo', previousRouteInfo);\n    },\n\n    setDisableDates() {\n      const currentDate = new Date();\n      const schedules = this.get('store').peekAll('schedule');\n      const futureExportedSchedules = schedules.filter(schedule => {\n        const {\n          start,\n          isExported\n        } = schedule;\n        return isExported && (0, _moment.default)(start).isAfter(currentDate);\n      });\n      const disableDates = futureExportedSchedules.reduce((acc, exportedSchedule) => {\n        acc.push(exportedSchedule.get('start'));\n        return acc;\n      }, []);\n      this.set('disableDates', disableDates);\n    },\n\n    cleanupNoneDriverModel() {\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isPresent(noneDriverModel)) {\n        noneDriverModel.destroyRecord();\n        this.set('noneDriverModel');\n      }\n    },\n\n    didInsertElement() {\n      this.setSideDrawerWidth('550px');\n      this.loadCurrentState();\n    },\n\n    async willDestroy() {\n      this.cleanupNoneDriverModel();\n\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.setCurrentState();\n    },\n\n    async loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        const schedule = (0, _unwrapProxy.unwrapProxy)(currentState.selectedSchedule);\n        this.set('route', currentState.route);\n        this.set('selectedProvider', currentState.selectedProvider);\n        this.set('selectedVehicle', currentState.selectedVehicle);\n        this.set('route.schedule', schedule);\n        this.set('route.vehicle', currentState.selectedVehicle);\n        this.set('selectedAffinityType', currentState.selectedAffinityType);\n        this.set('startTime', currentState.startTime);\n        this.set('endTime', currentState.endTime);\n        this.set('errorMessage', currentState.errorMessage);\n        await (0, _emberConcurrency.timeout)(1000);\n        this.setSelectedZones(currentState.selectedZoneIds);\n      }\n    },\n\n    setSelectedZones() {\n      let selectedZoneIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      const zones = this.get('zoneTableRef.table.rows') || [];\n      zones.forEach(zone => {\n        const zoneId = parseInt(zone.get('id'), 10);\n\n        if (selectedZoneIds.includes(zoneId)) {\n          zone.set('selected', true);\n        }\n      });\n    },\n\n    loadOptionsTask: (0, _emberConcurrency.task)(function* () {\n      yield this.fetchScheduleDriversTask.perform();\n      yield this.fetchAssignableVehiclesTask.perform();\n      yield this.fetchProvidersTask.perform();\n    }),\n    fetchProvidersTask: (0, _emberConcurrency.task)(function* () {\n      const providers = yield this.store.findAll('provider');\n      const filterProviderTypes = providers.filter(provider => !provider.get('isBrokerProviderType') && !(provider.get('status').toLowerCase() === IN_ACTIVE_STATUS)); //NYAAR-16257 NYAAR-19623\n\n      this.set('providers', filterProviderTypes);\n    }),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const {\n        selectedProvider,\n        selectedVehicle,\n        selectedDriver,\n        selectedSchedule,\n        route,\n        startTime,\n        endTime\n      } = this.getProperties('selectedProvider', 'selectedVehicle', 'selectedDriver', 'selectedSchedule', 'route', 'startTime', 'endTime');\n      const store = this.get('store');\n      const routeAdapter = store.adapterFor('route');\n      const schedules = this.get('store').peekAll('schedule');\n      const startTimeName = (0, _moment.default)(startTime).format('YYYY-MM-DD');\n      const routeName = route.get('name');\n      const routeTemplates = this.get('store').peekAll('route-template');\n      const routeTemplate = routeTemplates.find(currRouteTemplate => currRouteTemplate.get('name') === routeName); //get schedule with given start date/time\n\n      const filteredSchedule = schedules.filter(schedule => {\n        return schedule.get('name') === startTimeName;\n      }).sortBy('start').get('lastObject');\n      let schedule = (0, _unwrapProxy.unwrapProxy)(selectedSchedule); // if it is in add mode, use a schedule that matches the start/end date/time\n\n      if (!this.get('isEditMode') && Ember.isPresent(filteredSchedule)) {\n        schedule = filteredSchedule;\n      } // assign route template if routeTemplate exists\n\n\n      if (!this.get('isEditMode') && Ember.isPresent(routeTemplate)) {\n        route.set('routeTemplate', routeTemplate);\n      }\n\n      route.set('vehicle', selectedVehicle);\n      route.set('driver', selectedDriver);\n      route.set('provider', selectedProvider);\n      route.set('schedule', (0, _unwrapProxy.unwrapProxy)(schedule));\n      route.set('plannedStartTime', startTime);\n      route.set('plannedEndTime', endTime);\n\n      try {\n        if (this.get('isEditMode')) {\n          return yield routeAdapter.updateScheduleRoute(route);\n        }\n\n        return yield routeAdapter.createScheduleRoute(route);\n      } catch (e) {\n        throw e;\n      }\n    }),\n\n    resetSelections() {\n      const isBulkEdit = this.get('isBulkEdit');\n\n      if (isBulkEdit) {\n        this.set('route.schedulingMode');\n      }\n\n      this.setProperties({\n        routeName: null,\n        selectedVehicle: null,\n        startTime: null,\n        endTime: null,\n        selectedProvider: null,\n        errorMessage: null,\n        tripLimit: isBulkEdit ? 0 : DEFAULT_TRIP_LIMIT,\n        distanceLimit: isBulkEdit ? 0 : DEFAULT_DISTANCE_LIMIT,\n        selectedAffinityType: null\n      });\n      const zoneTableRef = this.get('zoneTableRef');\n      this.set('route.affinities', []);\n      zoneTableRef.refreshData();\n      zoneTableRef.onUncheckAll();\n    },\n\n    configureOptimizationFlags(checked, bitFlag) {\n      const optimizationFlags = this.get('optimizationFlags');\n\n      if (checked) {\n        this.set('optimizationFlags', optimizationFlags | bitFlag); // turn bit on\n      } else {\n        this.set('optimizationFlags', optimizationFlags & ~bitFlag); // turn bit off\n      }\n    },\n\n    setupHeaderActions() {\n      this.set('onRefreshClick', this.get('onRefreshClick').bind(this));\n      this.set('onUndoClick', this.get('onUndoClick').bind(this));\n\n      if (this.get('isEditMode')) {\n        this.set('onRefreshClick', null);\n      }\n\n      if (!this.get('isEditMode')) {\n        this.set('onUndoClick', null);\n      }\n    },\n\n    onRefreshClick() {\n      this.loadOptionsTask.perform();\n      this.resetSelections();\n    },\n\n    onUndoClick() {\n      const zones = this.get('availableZones');\n      const zoneTableRef = this.get('zoneTableRef');\n      this.get('route').rollbackAttributes();\n      this.set('selectedProvider', this.get('route.provider'));\n      this.set('selectedVehicle', this.get('route.vehicle'));\n      this.set('isAdjustBreak', _routeTemplate.ADJUST_BREAK_FLAG & this.get('route.optimizationFlags'));\n      this.set('isConsolidateRoute', _routeTemplate.CONSOLIDATE_ROUTE_FLAG & this.get('route.optimizationFlags'));\n      this.set('selectedVehicle', this.get('route.vehicle'));\n      this.set('startTime', this.get('route.plannedStartTime'));\n      this.set('endTime', this.get('route.plannedEndTime'));\n      this.set('affinities', JSON.parse(this.get('route.affinities')));\n      this.set('selectedAffinityType', null);\n      const affinities = this.get('affinities');\n      zones.forEach(zone => {\n        const index = zone.get('zoneId') - 1;\n        zone.set('affinityValue', affinities[index]);\n      });\n      zoneTableRef.onUncheckAll();\n      this.setPreviousRouteInfo();\n    },\n\n    // NYAAR-16513 maximum route name value length 10 digit and below 2,147,483,647.\n    validateRouteNameLimit() {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Route Name',\n        hasoverlay: true,\n        tip: 'Route Name should not exceeds the maximum value 2147483647',\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    saveSchedulingModeTask: (0, _emberConcurrency.task)(function* () {\n      const {\n        bulkRouteIds,\n        schedulingMode\n      } = this.getProperties('bulkRouteIds', 'schedulingMode');\n      const store = this.get('store');\n      const routeAdapter = store.adapterFor('route');\n      const bulkRoutes = bulkRouteIds.map(routeId => {\n        return this.store.peekRecord('route', routeId);\n      });\n\n      try {\n        return yield routeAdapter.updateBulkEditRoute(bulkRoutes, schedulingMode);\n      } catch (e) {\n        throw e;\n      }\n    }),\n\n    saveBulkEdit() {\n      const tooltip = this.get('tooltip');\n      const notifications = this.get('notifications');\n      const title = 'Bulk Edit Route';\n      const tip = 'Are you sure you want to change Scheduling Mode for the routes?';\n      const successMsg = 'Bulk edit was successful.';\n      const failureMsg = 'There was a problem updating the route, please try again.';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          tooltip.reset();\n          return this.saveSchedulingModeTask.perform().then(() => {\n            this.onCloseClick();\n            notifications.success(successMsg);\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              default:\n                message = failureMsg; // eslint-disable-next-line no-console\n\n                console.error(error);\n                break;\n            }\n\n            this.set('errorMessage', error.message);\n            notifications.warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => tooltip.reset()\n      });\n    },\n\n    //to store the backupdata\n    setCurrentState() {\n      let currentState = this.get('currentState');\n      const previousRouteInfo = this.get('previousRouteInfo');\n      const {\n        selectedProvider,\n        selectedVehicle,\n        selectedDriver,\n        selectedSchedule,\n        route,\n        selectedAffinityType,\n        startTime,\n        endTime,\n        zoneTableRef,\n        errorMessage\n      } = this.getProperties('selectedProvider', 'selectedVehicle', 'selectedDriver', 'selectedSchedule', 'route', 'selectedAffinityType', 'startTime', 'endTime', 'zoneTableRef', 'errorMessage');\n      const zones = zoneTableRef.get('checkedRows') || [];\n      const selectedZoneIds = zones.map(zone => parseInt(zone.get('id'), 10)).filter(zoneId => Ember.isPresent(zoneId) && !(0, _lodash.isNaN)(zoneId));\n      currentState = {\n        selectedProvider,\n        selectedVehicle,\n        selectedDriver,\n        selectedSchedule,\n        route,\n        selectedAffinityType,\n        startTime,\n        endTime,\n        selectedZoneIds,\n        errorMessage,\n        previousRouteInfo\n      };\n      this.set('currentState', currentState);\n    },\n\n    validateSelectedDriver() {\n      const selectedDriver = this.get('selectedDriver');\n      const allAvailableDrivers = this.get('allAvailableDrivers');\n      this.fetchAssignableVehiclesTask.perform();\n\n      if (Ember.isPresent(selectedDriver) && selectedDriver.get('id')) {\n        const driverExist = allAvailableDrivers.find(driver => {\n          return driver.id === selectedDriver.id;\n        });\n\n        if (Ember.isNone(driverExist)) {\n          this.set('selectedDriver');\n        }\n      }\n    },\n\n    actions: {\n      onSelectProviderOption(option) {\n        this.set('selectedProvider', option);\n        this.fetchScheduleDriversTask.perform();\n        this.fetchAssignableVehiclesTask.perform();\n      },\n\n      onRouteNameInput(name) {\n        let finalStringValue;\n\n        if (!NUMBER_FORMAT.test(this.get('routeName'))) {\n          finalStringValue = name.replace(REMOVE_SPECIAL_FORMAT, '');\n          this.set('routeName', finalStringValue.replace(REMOVE_TEXT_FORMAT, ''));\n          return this.notifyPropertyChange('routeName');\n        }\n\n        this.set('routeName', name);\n      },\n\n      onChangeTime(valuePath, value) {\n        Ember.run.debounce(this, 'validateSelectedDriver', 250);\n        this.set(valuePath, value[0]);\n      },\n\n      onIsKeeperTypeChange(event) {\n        const isChecked = event.target.checked;\n\n        if (isChecked) {\n          this.set('type', _routeTemplate.ROUTE_TEMPLATE_TYPE_KEEPER);\n        } else {\n          this.set('type', _routeTemplate.ROUTE_TEMPLATE_TYPE_REGULAR);\n        }\n      },\n\n      onAdjustDriverBreakCheckBoxClick(event) {\n        const checked = event.target.checked;\n        this.configureOptimizationFlags(checked, _routeTemplate.ADJUST_BREAK_FLAG);\n      },\n\n      onConsolidateCheckBoxClick(event) {\n        const checked = event.target.checked;\n        this.configureOptimizationFlags(checked, _routeTemplate.CONSOLIDATE_ROUTE_FLAG);\n      },\n\n      onAffinitySelect(option) {\n        const availableZones = this.get('availableZones');\n        const zones = this.get('zoneTableRef.checkedRows');\n        const zoneIds = availableZones.map(zone => parseInt(zone.get('id'), 10)).filter(zoneId => Ember.isPresent(zoneId) && !(0, _lodash.isNaN)(zoneId));\n        const affinities = this.get('affinities') || [];\n        const maxZoneId = Math.max(...zoneIds, affinities.length);\n        const newSize = Math.max(maxZoneId, affinities.length);\n        const newAffinities = Array(newSize).fill(0);\n        this.set('selectedAffinityType', option);\n        zones.setEach('affinityValue', option.val); // configured affinities to contain all imaginable zone changes\n\n        affinities.forEach((aff, index) => {\n          newAffinities[index] = aff;\n        });\n        zones.forEach(zone => {\n          //affinities index start from [0-16] and zone Ids starts from 1-17\n          const zoneId = zone.get('zoneId') - 1;\n          newAffinities[zoneId] = option.val;\n        });\n        this.set('affinities', newAffinities);\n      },\n\n      onLimitInputChange(path, value) {\n        this.set(path, value);\n      },\n\n      save() {\n        const isBulkEdit = this.get('isBulkEdit');\n        const hasAllSelectedValues = this.get('hasAllSelectedValues');\n        const routeName = this.get('routeName');\n\n        if (isBulkEdit) {\n          this.saveBulkEdit();\n          return;\n        }\n\n        if (parseInt(routeName, 10) > MAX_ROUTE_VALUE) {\n          this.validateRouteNameLimit();\n          return false;\n        }\n\n        if (hasAllSelectedValues) {\n          // reset error message\n          this.set('errorMessage');\n        } else {\n          // show error message, missing properties\n          this.set('errorMessage', 'Please fill out all of the fields before saving.');\n          return false;\n        }\n\n        const tooltip = this.get('tooltip');\n        const saveTask = this.get('saveTask');\n        const notifications = this.get('notifications');\n        const title = this.get('isEditMode') ? `Edit Route ${routeName}` : 'Add New Route';\n        const tip = this.get('isEditMode') ? `Edit route Name ${routeName}` : `Create route Name ${routeName}`;\n        const successMsg = this.get('isEditMode') ? `Route ${routeName} was edited successfully` : `Successfully created new route ${routeName}`;\n        const failureMsg = this.get('isEditMode') ? 'There was a problem updating the route, please try again.' : 'There was a problem creating the route, please try again.';\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return saveTask.perform().then(() => {\n              this.onCloseClick();\n              notifications.success(successMsg);\n              tooltip.reset();\n            }).catch(error => {\n              let message = Ember.get(error, 'payload.message') ? Ember.get(error, 'payload.message') : failureMsg;\n\n              if (message.includes('data that must be unique')) {\n                message = 'Unable to save. Route Name duplicates existing Route Name.';\n              }\n\n              switch (error.status) {\n                case 400:\n                  message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                  break;\n\n                default:\n                  // eslint-disable-next-line no-console\n                  console.error(error);\n                  break;\n              }\n\n              this.set('errorMessage', message);\n              notifications.warning(message);\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => tooltip.reset()\n        });\n      },\n\n      onCloseClick() {\n        this._super(...arguments);\n\n        if (this.get('isEditMode')) {\n          this.get('route').rollbackAttributes();\n        }\n\n        this.onCloseClick();\n      },\n\n      onShrinkClick() {\n        this.setCurrentState();\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-schedule-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eom7B2Nn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"mode\\\",\\\"driver\\\",\\\"vehicle\\\",\\\"provider\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"add-edit-schedule-route-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/add-edit-schedule-route/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onUndoClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"displayName\\\"]],true,[23,[\\\"hasAllSelectedValues\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"save\\\"],null],[23,[\\\"onRefreshClick\\\"]],[23,[\\\"onUndoClick\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/add-edit-schedule-route/template.hbs' @ L15:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/add-edit-schedule-route/template.hbs' @ L16:C7) \\\"],null]],[[\\\"isCollapsible\\\"],[false]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"maxlength\\\",\\\"input\\\"],[[23,[\\\"isDisabled\\\"]],[23,[\\\"routeName\\\"]],\\\"10\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRouteNameInput\\\",[23,[\\\"routeName\\\"]]],null]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"disabled\\\",\\\"disable\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"dateTimeMoment\\\",\\\"dateTimeFlatPickr\\\"]],[23,[\\\"minScheduleDate\\\"]],[23,[\\\"maxScheduleDate\\\"]],[23,[\\\"startTime\\\"]],[23,[\\\"isBulkEdit\\\"]],[23,[\\\"disableDates\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"startTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"disabled\\\",\\\"disable\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"dateTimeMoment\\\",\\\"dateTimeFlatPickr\\\"]],[23,[\\\"minScheduleDate\\\"]],[23,[\\\"maxScheduleDate\\\"]],[23,[\\\"endTime\\\"]],[23,[\\\"isBulkEdit\\\"]],[23,[\\\"disableDates\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"endTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"selectedProvider\\\"]],true,\\\"name\\\",[23,[\\\"providers\\\"]],[23,[\\\"isDisabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectProviderOption\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"callSign\\\",[23,[\\\"selectedVehicle\\\"]],true,[27,\\\"not\\\",[[23,[\\\"selectedProvider\\\"]]],null],[23,[\\\"availableVehicles\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedVehicle\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,5,[\\\"callSign\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"driverId\\\",[23,[\\\"selectedDriver\\\"]],true,[27,\\\"not\\\",[[23,[\\\"selectedProvider\\\"]]],null],[23,[\\\"allAvailableDrivers\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedDriver\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,4,[\\\"driverIdAndName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start Garage\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",true,[23,[\\\"selectedVehicle\\\",\\\"startingGarage\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"End Garage\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",true,[23,[\\\"selectedVehicle\\\",\\\"endingGarage\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Keeper Route\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\" \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"isBulkEdit\\\"]],[23,[\\\"isKeeperType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onIsKeeperTypeChange\\\"],null]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Adjust Driver Break\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\" \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"isBulkEdit\\\"]],[23,[\\\"isAdjustBreak\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAdjustDriverBreakCheckBoxClick\\\"],null]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Consolidate Routes\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\" \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",[23,[\\\"isBulkEdit\\\"]],[23,[\\\"isConsolidateRoute\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onConsolidateCheckBoxClick\\\"],null]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Maximum Trips Per Hour\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"extra\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"extraTripLimitOptions\\\"]],[23,[\\\"tripLimit\\\"]],[23,[\\\"isBulkEdit\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onLimitInputChange\\\",\\\"tripLimit\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Maximum Miles Per Hour\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"extra\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"extraDistanceLimitOptions\\\"]],[23,[\\\"distanceLimit\\\"]],[23,[\\\"isBulkEdit\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onLimitInputChange\\\",\\\"distanceLimit\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Scheduling Mode\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"options\\\",\\\"onchange\\\"],[[23,[\\\"schedulingMode\\\"]],false,[23,[\\\"schedulingModeList\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"schedulingMode\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"assigned-zone-header-label\\\"],[9],[0,\\\"Assigned Zones \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"side-drawer/add-edit-schedule-route/zone-table\\\",null,[[\\\"tableRef\\\",\\\"route\\\",\\\"isBulkEdit\\\"],[[23,[\\\"zoneTableRef\\\"]],[23,[\\\"route\\\"]],[23,[\\\"isBulkEdit\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"zone-button-wrapper\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Affinity Value\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"placeholder\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"affinityTypes\\\"]],false,[23,[\\\"isBulkEdit\\\"]],\\\"Select Affinity\\\",\\\"Select Affinity\\\",[23,[\\\"selectedAffinityType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAffinitySelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"type\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-edit-schedule-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-schedule-route/zone-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/add-edit-schedule-route/zone-table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TABLE_DOWNLOAD_ACTION = 'Download';\n\n  var _default = _component.default.extend({\n    classNames: ['zone-table'],\n    config: _config.default,\n    disableRowSelection: Ember.computed.alias('isBulkEdit'),\n\n    init() {\n      this._super(...arguments); // To remove DOWNLOAD action in Zones Table\n\n\n      const tableActions = this.get('tableActions').filter(action => action.name !== TABLE_DOWNLOAD_ACTION);\n      this.set('tableActions', tableActions);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const affinities = this.get('route.affinities') || [];\n      return this._super(...arguments).then(records => {\n        return records.filter(record => {\n          //affinities index start from [0-16] and zone Ids starts from 1-17\n          const zoneId = record.get('zoneId') - 1;\n          const affVal = affinities[zoneId] || 0;\n          record.set('affinityValue', affVal);\n          return record;\n        });\n      });\n    },\n\n    /**\n     * NYAAR-20254-Selected record are getting cleared on perform search in Zones table in Add Route side panel\n     * override parent method\n     */\n    refreshData() {\n      this._super(...arguments);\n\n      this.set('defaultCheckboxRowSelected', true);\n      this.set('isTableLoadedForFirstTime', false);\n      this.fetchCheckedRows();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-edit-schedule-route/zone-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'zone',\n    title: 'Zones',\n    defaultSortId: 'zoneId',\n    defaultSortAsc: true,\n    fetchModelData: true,\n    rowSelectionType: 'checkbox',\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'Name',\n      valuePath: 'displayName',\n      defaultWidth: 180,\n      searchable: true\n    }, {\n      id: 'affinity',\n      index: 1,\n      type: 'text',\n      label: 'Affinity',\n      valuePath: 'convertAffinityValue',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'zoneId',\n      index: 2,\n      type: 'number',\n      label: 'ZoneId',\n      valuePath: 'zoneId',\n      defaultWidth: 70,\n      searchable: true,\n      hidden: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-new-message/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/add-new-message/config\", \"adept-iq/config/api-urls\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\"], function (_exports, _config, _apiUrls, _environment, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // Canned Message Response Types currently Hard-Coded\n  const CANNED_RESPONSE_TYPES = ['None', 'Acknowledge', 'Yes/No'];\n  const MESSAGE_TYPES = ['textMessage', 'cannedMessage'];\n  const CANNED_RESPONSE_TYPE_CODES = {\n    'None': 'X',\n    'Acknowledge': 'A',\n    'Yes/No': 'Y'\n  };\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    user: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    title: 'Send Message',\n    componentName: 'sendCannedMessage',\n    onShrinkClick: null,\n    currentState: null,\n    sections: _config.default.sections,\n    bannerSuccessMessage: '',\n    bannerFailedMessage: '',\n    templates: null,\n    selectedTemplate: null,\n    selectedResponse: null,\n    responseTypes: CANNED_RESPONSE_TYPES,\n    messageTypes: MESSAGE_TYPES,\n    freeMessage: '',\n    freeMessageDisplay: true,\n    freeMessageIsDisable: false,\n    cannedMessageDisplay: true,\n    cannedResponseIsDisable: false,\n    isEmptyMessageBody: true,\n    disableResponseType: false,\n    displayVehicleDetails: true,\n    draftMessages: Ember.computed('stackFrame.options.draftMessages', function () {\n      const workspace = this.get('stackFrame.options.draftMessages') || [];\n      workspace.forEach(message => {\n        message.set('isOpened', false);\n        message.set('hasNoDriver', Ember.isEmpty(message.get('driver.badgeNumber')) && Ember.isEmpty(message.get('avlmDriver.badgeNumber')));\n      });\n      return this.get('stackFrame.options.draftMessages');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('templates', []);\n    },\n\n    didInsertElement() {\n      if (this.user.isRoadSupEnable()) {\n        this.set('disableResponseType', true);\n        this.set('displayVehicleDetails', false);\n      }\n\n      this.set('cannedMessageDisplay', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.cannedMessageToDriver));\n      this.set('freeMessageDisplay', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.freeTypeMessageToDriver));\n      this.fetchTemplates().then(templates => {\n        this.set('templates', templates);\n      });\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('freeMessage', currentState.freeMessage);\n        this.set('selectedTemplate', currentState.selectedTemplate);\n        this.set('selectedResponse', currentState.selectedResponse);\n        this.checkDisableInputs();\n      }\n    },\n\n    fetchTemplates() {\n      const templates = this.store.peekAll('cs-config-item').filter(message => {\n        return message.category === 'config-Canned_Messages-to_driver';\n      }); // check if to_driver messages already exist in store\n\n      if (!Ember.isEmpty(templates)) {\n        return Ember.RSVP.resolve(templates.sortBy('displayName'));\n      }\n\n      return this.store.query('cs-config-item', {\n        category: 'config-Canned_Messages-to_driver'\n      }).then(configs => {\n        if (configs) {\n          configs.forEach(message => {\n            templates.push(message);\n          });\n        }\n      }).then(() => {\n        return templates;\n      });\n    },\n\n    sendMessage() {\n      let draftMessages = this.get('draftMessages') || [];\n      let successMessageCount = 0;\n      let failureMessageCount = 0;\n\n      if (!this.user.isRoadSupEnable()) {\n        // it will not send api call for the messages which do not have badgeNumber\n        draftMessages = draftMessages.filter(function (draftMessage) {\n          if (!draftMessage.hasNoDriver) return true;\n          return false;\n        });\n      }\n\n      const responseType = this.get('selectedResponse');\n      const selectedTemplate = this.get('selectedTemplate');\n      let type = MESSAGE_TYPES[0];\n\n      if (selectedTemplate) {\n        type = MESSAGE_TYPES[1];\n      }\n\n      draftMessages.forEach(message => {\n        if (message) {\n          if (type === MESSAGE_TYPES[1]) {\n            message.set('body', this.get('selectedTemplate.value.Message'));\n          } else {\n            message.set('body', this.get('freeMessage'));\n          }\n\n          message.set('responseTypeText', responseType);\n          message.set('type', 'avlm-message');\n        }\n      });\n      return Ember.RSVP.all(draftMessages.map(message => {\n        let endPointType = 'recipient';\n        let driverId = message.get('driver.id');\n\n        if (!driverId) {\n          driverId = message.get('driverId') ? message.get('driverId') : '';\n        }\n\n        let vehicleId = message.get('latestVehicle') ? message.get('latestVehicle.id') : message.get('latestRouteVehicleDriver.vehicle.id') || message.get('vehicle.id');\n        const vehicleName = message.get('latestVehicle') ? message.get('latestVehicle.name') : message.get('latestRouteVehicleDriver.vehicle.name') || message.get('vehicle.id');\n\n        if (_environment.default.APP.avlmLite) {\n          driverId = message.get('avlmDriver.id') ? message.get('avlmDriver.id') : message.get('avlmDriver.driverId');\n          vehicleId = message.get('avlmVehicle') ? message.get('avlmVehicle.id') : '';\n\n          if (!vehicleId) {\n            vehicleId = message.get('latestVehicle.id');\n          }\n        }\n\n        if (this.user.isRoadSupEnable()) {\n          if (!driverId) {\n            driverId = message.get('driverId') ? message.get('driverId') : '';\n          }\n\n          endPointType = 'sender';\n        }\n\n        const formatedMessage = {\n          data: {\n            type: 'cannedMessage',\n            attributes: {\n              messageNr: '0',\n              body: message.get('body'),\n              createdTime: message.get('createdTime'),\n              priority: message.get('priority'),\n              responseType: {\n                statusCode: CANNED_RESPONSE_TYPE_CODES[responseType],\n                status: responseType\n              },\n              type: 'avlm-message',\n              driver: {\n                id: driverId + '',\n                endPointType: endPointType\n              },\n              vehicle: {\n                id: vehicleId + ''\n              }\n            }\n          }\n        };\n\n        if (!vehicleId) {\n          delete formatedMessage.data.attributes.vehicle;\n        }\n\n        const json = JSON.stringify(formatedMessage);\n        const session = this.get('session');\n        const self = this;\n        return this.get('ajax').post(_apiUrls.API.avlmService.host + '/canned-message', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        }).then(() => {\n          successMessageCount++;\n\n          if (this.user.isRoadSupEnable()) {\n            this.set('bannerSuccessMessage', 'MESSAGE SUCCESSFULLY SENT TO DISPATCH');\n          } else if (successMessageCount > 1) {\n            this.set('bannerSuccessMessage', `MESSAGE TO ${successMessageCount} VEHICLES SENT SUCCESSFULLY`);\n          } else {\n            this.set('bannerSuccessMessage', `MESSAGE TO VEHICLE ${vehicleName} SENT SUCCESSFULLY`);\n          }\n\n          this.get('workspace').requestWootricSurvey('on_sendingMessage');\n        }).catch(function\n          /*error*/\n        () {\n          failureMessageCount++;\n\n          if (self.user.isRoadSupEnable()) {\n            self.set('bannerFailedMessage', 'MESSAGE SENT TO DISPATCH FAILED');\n          } else if (failureMessageCount > 1) {\n            self.set('bannerFailedMessage', `MESSAGE TO ${failureMessageCount} VEHICLES FAILED`);\n          } else {\n            self.set('bannerFailedMessage', `MESSAGE TO VEHICLE ${vehicleName} FAILED`);\n          }\n        });\n      }));\n    },\n\n    cancelMessage() {\n      this.get('tooltip').reset();\n    },\n\n    clearForm() {\n      this.set('selectedTemplate', null);\n      this.set('selectedResponse', null);\n      this.set('isEmptyMessageBody', true);\n      this.set('freeMessage', '');\n      this.checkDisableInputs();\n    },\n\n    checkDisableInputs() {\n      const selectedTemplate = this.get('selectedTemplate');\n      const freeMessage = this.get('freeMessage');\n\n      if (selectedTemplate) {\n        this.set('freeMessageIsDisable', true);\n      } else {\n        this.set('freeMessageIsDisable', false);\n      }\n\n      if (freeMessage.length > 0) {\n        this.set('cannedResponseIsDisable', true);\n      } else {\n        this.set('cannedResponseIsDisable', false);\n      }\n\n      if (freeMessage.length > 0 || selectedTemplate) {\n        this.set('isEmptyMessageBody', false);\n        this.checkSelectedResponse();\n      } else {\n        this.set('isEmptyMessageBody', true);\n        this.set('selectedResponse', null);\n      }\n    },\n\n    checkSelectedResponse() {\n      const selectedResponse = this.get('selectedResponse');\n\n      if (!selectedResponse) {\n        this.set('selectedResponse', CANNED_RESPONSE_TYPES[0]);\n      }\n    },\n\n    actions: {\n      onSendMessageButtonClick() {\n        const tooltip = this.get('tooltip');\n        const title = this.get('title');\n        tooltip.pushConfirmation({\n          tip: 'Send new message?',\n          title,\n          primaryActionText: 'Confirm',\n          secondaryActionText: 'Cancel',\n          primaryAction: async () => {\n            return this.sendMessage().then(() => {\n              const bannerSuccessMessageDisplay = this.get('bannerSuccessMessage');\n              const bannerFailedMessageDisplay = this.get('bannerFailedMessage');\n\n              if (bannerFailedMessageDisplay !== '') {\n                this.get('notifications').warning(`${bannerFailedMessageDisplay}`);\n              } else if (bannerSuccessMessageDisplay) {\n                this.get('notifications').success(`${bannerSuccessMessageDisplay}`);\n              }\n\n              if (this.get('workspace.topState')) {\n                this.get('workspace').popState();\n              }\n            }).finally(() => {\n              tooltip.reset();\n            });\n          },\n          secondaryAction: () => {\n            tooltip.reset();\n            this.cancelMessage();\n          }\n        });\n      },\n\n      onResponseTypeSelect(responseType) {\n        this.set('selectedResponse', responseType);\n      },\n\n      onTemplateSelect(template) {\n        this.set('selectedTemplate', template);\n        this.checkDisableInputs();\n      },\n\n      onCloseButtonClick() {\n        this.get('workspace').popState();\n      },\n\n      onClearButtonClick() {\n        this.clearForm();\n      },\n\n      onTextChangeFreeMessage() {\n        this.checkDisableInputs();\n      },\n\n      onTextFocusFreeMessage() {\n        this.set('isEmptyMessageBody', false);\n        this.set('cannedResponseIsDisable', true);\n        this.checkSelectedResponse();\n      },\n\n      onClickExpandDetails(message\n      /*, event*/\n      ) {\n        message.set('isOpened', !message.get('isOpened'));\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const freeMessage = this.get('freeMessage');\n        const selectedTemplate = this.get('selectedTemplate');\n        const selectedResponse = this.get('selectedResponse'); // save current manual settings\n\n        currentState = {\n          freeMessage,\n          selectedTemplate,\n          selectedResponse\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-new-message/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    modelName: 'avlm-canned-message-template',\n    sections: [{\n      title: 'Message content',\n      fields: [{\n        id: 'title',\n        type: 'enum',\n        label: 'Title',\n        valuePath: 'messageNr',\n        cellDesc: 'title',\n        editable: true,\n        hidden: false,\n        extra: {\n          allowMultiple: false\n        }\n      }, {\n        id: 'content',\n        type: 'text',\n        label: 'Content',\n        valuePath: 'body',\n        cellDesc: 'content',\n        editable: false,\n        hidden: false\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-new-message/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"SCipCFDl\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"message\\\",\\\"responseType\\\",\\\"responseType\\\",\\\"template\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"add-new-message\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/add-new-message/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/add-new-message/template.hbs' @ L11:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"cannedMessageDisplay\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"fCannedMessage\\\"],[9],[0,\\\"Canned Message\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100 data-test-select-canned-message\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"triggerClass\\\",\\\"disabled\\\",\\\"options\\\",\\\"selected\\\",\\\"searchField\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[27,\\\"if\\\",[[23,[\\\"cannedResponseIsDisable\\\"]],\\\"disabled\\\",\\\"\\\"],null],[23,[\\\"cannedResponseIsDisable\\\"]],[23,[\\\"templates\\\"]],[23,[\\\"selectedTemplate\\\"]],\\\"displayName\\\",[27,\\\"if\\\",[[23,[\\\"cannedResponseIsDisable\\\"]],\\\"\\\",\\\"Select a message\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTemplateSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n                \\\"],[1,[22,5,[\\\"value\\\",\\\"Message\\\"]],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"freeMessageDisplay\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row m-b-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"label\\\"],[9],[0,\\\"Message\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"disabled\\\",\\\"value\\\",\\\"focus-in\\\",\\\"focus-out\\\"],[\\\"3\\\",[27,\\\"if\\\",[[23,[\\\"freeMessageIsDisable\\\"]],\\\"\\\",\\\"Write a short message...\\\"],null],\\\"250\\\",[23,[\\\"freeMessageIsDisable\\\"]],[23,[\\\"freeMessage\\\"]],\\\"onTextFocusFreeMessage\\\",\\\"onTextChangeFreeMessage\\\"]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"hint\\\"],[9],[1,[23,[\\\"freeMessage\\\",\\\"length\\\"]],false],[0,\\\"/250\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100 m-t-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Response\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"disableResponseType\\\"]]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"responseTypes\\\"]],\\\"Select a response\\\",true,[27,\\\"action\\\",[[22,0,[]],\\\"onResponseTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,4,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"responseTypes\\\"]],[23,[\\\"selectedResponse\\\"]],\\\"Select a response\\\",[23,[\\\"isEmptyMessageBody\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onResponseTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row m-t-15\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-100\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn default\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClearButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n              Clear\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn default\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n              Cancel\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"btn \\\",[27,\\\"if\\\",[[23,[\\\"isEmptyMessageBody\\\"]],\\\"default\\\",\\\"success\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSendMessageButtonClick\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isEmptyMessageBody\\\"]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n              Send Message\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayVehicleDetails\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"draftMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-container draftMessages\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-row\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickExpandDetails\\\",[22,2,[]]],null]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"arrow\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[22,2,[\\\"isOpened\\\"]],\\\"caret-down\\\",\\\"caret-right\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[0,\\\"\\\\n                Vehicle ID\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"value\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"or\\\",[[22,2,[\\\"vehicle\\\",\\\"name\\\"]],[22,2,[\\\"name\\\"]],[22,2,[\\\"driverVehicle\\\",\\\"name\\\"]],[22,2,[\\\"driverVehicle\\\",\\\"id\\\"]],[22,2,[\\\"avlmVehicle\\\",\\\"id\\\"]],[22,2,[\\\"latestVehicle\\\",\\\"content\\\",\\\"id\\\"]]],null],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"status\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,2,[\\\"hasNoDriver\\\"]]],null,{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"failed-icon\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"success-icon\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,2,[\\\"isOpened\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"arrow\\\"],[9],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[0,\\\"\\\\n                  Driver ID\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"value\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"or\\\",[[22,2,[\\\"driver\\\",\\\"badgeNumber\\\"]],[22,2,[\\\"avlmDriver\\\",\\\"badgeNumber\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"arrow\\\"],[9],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[0,\\\"\\\\n                  Driver Name\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"value ellipsis\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"or\\\",[[22,2,[\\\"driver\\\",\\\"fullName\\\"]],[22,2,[\\\"avlmDriver\\\",\\\"fullName\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"arrow\\\"],[9],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[0,\\\"\\\\n                  Route ID\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"value\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"or\\\",[[22,2,[\\\"route\\\",\\\"name\\\"]],[22,2,[\\\"route\\\",\\\"id\\\"]],[22,2,[\\\"avlmRoute\\\",\\\"id\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,2,[\\\"hasNoDriver\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-row\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"arrow\\\"],[9],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"error\\\"],[9],[0,\\\"\\\\n                  * Missing Driver ID\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-new-message/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-widget/component\", [\"exports\", \"adept-iq/config/widget-groups\", \"adept-iq/utils/widget-placement\", \"lodash\", \"adept-iq/models/dashboard\", \"adept-iq/config/widget-types\"], function (_exports, _widgetGroups, _widgetPlacement, _lodash, _dashboard, _widgetTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    tagName: '',\n    title: 'Add Widgets',\n    componentName: 'configureWorkspace',\n    widgetSections: null,\n    isScheduleDashboard: Ember.computed.readOnly('workspace.isScheduleDashboard'),\n\n    init() {\n      this._super(...arguments);\n\n      this.configureWidgetsOnPermission();\n    },\n\n    configureWidgetsOnPermission() {\n      this.set('widgetSections', _lodash.default.cloneDeep(_widgetGroups.default));\n      let widgetSections = this.get('widgetSections') || [];\n      const configPermissions = this.get('workspace.configPermissions');\n      const userPermHash = this.get('permissionLayer.userPermissionHash');\n      widgetSections.forEach(widgetSection => {\n        let widgetTypesAllowed = [];\n\n        if (widgetSection.widgetTypes) {\n          widgetSection.widgetTypes.forEach(widgetType => {\n            const configPermission = configPermissions[widgetType.id];\n            const userPerm = widgetType.permId;\n            const role = this.get('workspace.dashboardModel.role');\n\n            if (!Ember.isNone(configPermission) && configPermission.show && userPermHash[userPerm] && !this.isScheduleRestrictWidget(widgetType)) {\n              widgetTypesAllowed.push(widgetType);\n            } // remove Schedule Metrics widget other than Scheduling workspace.\n\n\n            if (role !== _dashboard.SCHEDULE_ROLENAME) {\n              widgetTypesAllowed = _lodash.default.reject(widgetTypesAllowed, widget => widget.id === _widgetTypes.scheduleWidgetType.id);\n            } //keep only user/role widget in Permission workspace.\n\n\n            if (role === _dashboard.PERMISSIONS_ROLENAME) {\n              widgetTypesAllowed = _lodash.default.reject(widgetTypesAllowed, widget => widget.id !== _widgetTypes.permUsersWidgetType.id && widget.id !== _widgetTypes.permRolesWidgetType.id);\n            } else {\n              widgetTypesAllowed = _lodash.default.reject(widgetTypesAllowed, widget => widget.id === _widgetTypes.permUsersWidgetType.id || widget.id === _widgetTypes.permRolesWidgetType.id);\n            }\n\n            if (role === _dashboard.RECONCILE_ROLENAME) {\n              widgetTypesAllowed = _lodash.default.reject(widgetTypesAllowed, widget => widget.id !== _widgetTypes.reconcileRoutesWidgetType.id && widget.id !== _widgetTypes.reconcileTripsWidgetType.id && widget.id !== _widgetTypes.reconcileStopsWidgetType.id);\n            }\n          });\n        }\n\n        widgetSection.widgetTypes.splice(0, widgetSection.widgetTypes.length);\n        widgetTypesAllowed.forEach(widgetType => {\n          widgetSection.widgetTypes.push(widgetType);\n        });\n\n        if (widgetSection.widgetTypes.length <= 0) {\n          widgetSections = _lodash.default.reject(widgetSections, function (currWidgetSection) {\n            return currWidgetSection.id === widgetSection.id;\n          });\n          this.set('widgetSections', widgetSections);\n        }\n      });\n    },\n\n    //In schedule workspace  should not show message and alert widgets\n    isScheduleRestrictWidget(widgetType) {\n      return this.get('isScheduleDashboard') && _dashboard.SCHEDULE_WORSPACE_RESTRICT_WIDGETS.includes(widgetType.id);\n    },\n\n    actions: {\n      addWidget(widgetType) {\n        // TODO: move this logic into dashboard model after grid settings have\n        // have been migrated\n        const dashboard = this.get('workspace.dashboard');\n        const gridWidth = this.get('workspace.gridWidth');\n        const dashboardModel = this.get('workspace.dashboardModel');\n        const {\n          minWidth,\n          minHeight,\n          defaultWidth,\n          defaultHeight\n        } = widgetType;\n        const locations = (0, _widgetPlacement.computeWidgetPlacements)(dashboard, gridWidth, minWidth, minHeight); // might want to rank locations rather than taking the first available\n\n        const {\n          x,\n          y,\n          maxWidth,\n          maxHeight\n        } = locations[0];\n        dashboard.addWidget({\n          typeId: widgetType.id,\n          width: Math.min(defaultWidth, maxWidth),\n          height: Math.min(defaultHeight, maxHeight),\n          x,\n          y\n        }); // adding a widget will be committed to the dashboard Model that way for maximizing or minimizing the widget will be kept\n\n        dashboardModel.commitInstance(dashboard);\n      },\n\n      onConfigButtonClick(configButtonType, isClicked) {\n        this.set('workspace.showGrid', isClicked);\n      },\n\n      onShrinkClick() {\n        this.onShrinkClick();\n      },\n\n      onCloseClick() {\n        this.onCloseClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Z2IhzFBY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"widgetSection\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"add-widget\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/add-widget/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/add-widget/template.hbs' @ L11:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"widgetSections\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer/add-widget/widget-button-section\\\",null,[[\\\"widgetSection\\\",\\\"addWidget\\\"],[[22,2,[]],[27,\\\"action\\\",[[22,0,[]],\\\"addWidget\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h1\\\"],[11,\\\"class\\\",\\\"g-side-drawer-header-title\\\"],[9],[0,\\\"Configurations\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[1,[27,\\\"side-drawer/add-widget/widget-config-section\\\",null,[[\\\"widgetSection\\\",\\\"onConfigButtonClick\\\"],[[23,[\\\"widgetSection\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onConfigButtonClick\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-widget/widget-button-section/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['add-widget-section'],\n    displayButtons: true,\n    widgetSection: null,\n    isOpen: true,\n    actions: {\n      onSectionButtonClick() {\n        // expand / contract the button\n        this.toggleProperty('displayButtons');\n      },\n\n      onWidgetButtonClick(widgetType) {\n        this.get('addWidget')(widgetType);\n      },\n\n      onHeaderClick() {\n        this.toggleProperty('isOpen');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-widget/widget-button-section/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"cBuZe+tp\",\n    \"block\": \"{\\\"symbols\\\":[\\\"widgetType\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"add-widget-section-header \\\",[27,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"isOpen\\\"]]],null],\\\"is-closed\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHeaderClick\\\"],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h4\\\"],[11,\\\"class\\\",\\\"add-widget-section-title\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-sort-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[1,[23,[\\\"widgetSection\\\",\\\"title\\\"]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-widget-section-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"widgetSection\\\",\\\"widgetTypes\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"add-widget-button\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"widget-type-\\\",[27,\\\"lowercase\\\",[[22,1,[\\\"name\\\"]]],null],\\\" widget-icon\\\"]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"img\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[9],[1,[22,1,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onWidgetButtonClick\\\",[22,1,[]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-widget/widget-button-section/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-widget/widget-config-section/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    classNames: ['add-widget-config-section add-widget-section'],\n    displayButtons: true,\n    widgetSection: null,\n    isOpen: true,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('isClicked', this.get('workspace.showGrid'));\n    },\n\n    actions: {\n      onSectionButtonClick() {\n        // expand / contract the button\n        this.toggleProperty('displayButtons');\n      },\n\n      onConfigButtonClick(configButtonType) {\n        this.set('isClicked', !this.get('isClicked'));\n        this.get('onConfigButtonClick')(configButtonType, this.get('isClicked'));\n      },\n\n      onHeaderClick() {\n        this.toggleProperty('isOpen');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/add-widget/widget-config-section/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"0CEC0sLI\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"add-widget-section-header \\\",[27,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"isOpen\\\"]]],null],\\\"is-closed\\\"],null]]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onHeaderClick\\\"],null]],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h4\\\"],[11,\\\"class\\\",\\\"add-widget-section-title\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-sort-down\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[1,\\\"Display\\\",false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-widget-section-body\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"add-config-widget-button\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[22,0,[\\\"isClicked\\\"]],\\\"widget-type-widget-grid-selected widget-icon\\\",\\\"widget-type-widget-grid widget-icon\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"img\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[22,0,[\\\"isClicked\\\"]],\\\"widget-icon-white\\\",\\\"\\\"],null]]]],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[1,\\\"Widget Grid Lines\\\",false],[10],[0,\\\"\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onConfigButtonClick\\\",\\\"WidgetGridLineButton\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/add-widget/widget-config-section/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/config/mapped-permIds\", \"lodash\", \"adept-iq/utils/vehicleCapacity\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\", \"adept-iq/utils/availability\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _emberConcurrency, _moment, _mappedPermIds, _lodash, _vehicleCapacity, _fetchAssignableVehicleDrivers, _availability, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // sort out proxies\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    classNames: ['assign-rvd-side-drawer'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    vehiclesTable: null,\n    currentState: null,\n    onShrinkClick: null,\n    onCloseClick: null,\n    canCancel: true,\n    driverPhoneNumber: null,\n    drivers: null,\n    selectedDriver: null,\n    defaultSelectedVehicle: null,\n    vehicleSort: null,\n    refreshFlag: false,\n    filterVehiclesByHoliday: true,\n    filterDriversByHoliday: true,\n    filterDriversByShiftTime: true,\n    dispatchRoute: Ember.computed.readOnly('stackFrame.options.dispatchRoute'),\n    route: Ember.computed.readOnly('dispatchRoute.route'),\n    // scheduling route,\n    placeholderVehicle: Ember.computed.readOnly('route.vehicle'),\n    provider: Ember.computed.readOnly('route.provider'),\n    plannedStartTime: Ember.computed.readOnly('route.plannedStartTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('route.plannedEndTime'),\n    //used in fetch vehicle driver mixin\n    hasSelectedVehicle: Ember.computed.bool('selectedVehicle.id'),\n    hasSelectedDriver: Ember.computed.bool('selectedDriver.id'),\n    canAssignVehicleDriver: Ember.computed.and('hasSelectedVehicle', 'hasSelectedDriver', 'notPlaceholder'),\n    routeVehicleDriver: Ember.computed.alias('dispatchRoute.latestRouteVehicleDriver'),\n    dispatchRouteVersion: Ember.computed.readOnly('stackFrame.options.dispatchRoute.version'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('selectedDriver', currentState.selectedDriver);\n        this.set('selectedVehicle', currentState.selectedVehicle);\n        this.set('driverPhoneNumber', currentState.driverPhoneNumber);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // side panel width just for assign-vehicle-driver-to-route\n\n\n      this.setSideDrawerWidth('600px');\n      const dispatchRoute = this.get('dispatchRoute');\n      this.set('dispatchRouteVersionSnapshot', dispatchRoute.get('version'));\n      this.refresh();\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n    },\n\n    canSave: Ember.computed('selectedVehicle.placeholder', 'selectedDriver', 'routeVehicleDriver', 'driverPhoneNumber', function () {\n      const vehicleId = this.get('selectedVehicle.name');\n      const driverId = this.get('selectedDriver.driverId');\n      const currentVehicleId = this.get('routeVehicleDriver.vehicle.name');\n      const currentDriverId = this.get('routeVehicleDriver.driver.driverId');\n      const currentDriverPhoneNumber = this.get('routeVehicleDriver.driverPhoneNumber');\n      const driverPhoneNumber = this.get('driverPhoneNumber');\n\n      if (vehicleId === currentVehicleId && currentDriverId === driverId && (currentDriverPhoneNumber === driverPhoneNumber || Ember.isEmpty(driverPhoneNumber)) || this.get('selectedVehicle.placeholder')) {\n        return false;\n      }\n\n      return true;\n    }),\n    driverAvailability: Ember.computed('selectedDriver.driverAvailabilities.@each.{startTime,endTime}', function () {\n      const driverAvailabilities = this.get('selectedDriver.driverAvailabilities');\n      if (Ember.isEmpty(driverAvailabilities)) return null;\n      const plannedStart = (0, _moment.default)();\n      const plannedEnd = (0, _moment.default)().endOf('day');\n      const solution = (0, _availability.solveAvailability)(plannedStart, plannedEnd, driverAvailabilities);\n      if (Ember.isEmpty(solution)) return null;\n      return solution[0];\n    }),\n    driverAvailabilityShiftStart: Ember.computed('driverAvailability', function () {\n      const availability = this.get('driverAvailability');\n      if (Ember.isEmpty(availability) || Ember.isEmpty(availability.matchingAvailability)) return null;\n      return availability.matchingAvailability.get('formattedShiftStart');\n    }),\n    driverAvailabilityShiftEnd: Ember.computed('driverAvailability', function () {\n      const availability = this.get('driverAvailability');\n      if (Ember.isEmpty(availability) || Ember.isEmpty(availability.matchingAvailability)) return null;\n      return availability.matchingAvailability.get('formattedShiftEnd');\n    }),\n\n    refresh() {\n      this.get('fetchDriversTask').perform();\n      this.get('fetchVehiclesTask').perform(); // driver can only be set in dispatch\n\n      const driver = this.get('routeVehicleDriver.driver'); // vehicle can come from dispatch or scheduling\n\n      const vehicle = (0, _unwrapProxy.unwrapProxy)(this.get('routeVehicleDriver.vehicle')) || (0, _unwrapProxy.unwrapProxy)(this.get('placeholderVehicle'));\n      const driverPhoneNumber = this.get('routeVehicleDriver.driverPhoneNumber');\n      this.set('defaultSelectedVehicle', (0, _unwrapProxy.unwrapProxy)(vehicle));\n      const currentState = this.get('currentState');\n\n      if (Ember.isEmpty(currentState)) {\n        this.setProperties({\n          selectedDriver: (0, _unwrapProxy.unwrapProxy)(driver),\n          selectedVehicle: (0, _unwrapProxy.unwrapProxy)(vehicle),\n          driverPhoneNumber\n        });\n        this.toggleProperty('refreshFlag');\n      } else {\n        this.loadCurrentState();\n      }\n    },\n\n    resetRVD() {\n      const routeVehicleDriver = this.get('routeVehicleDriver');\n\n      if (routeVehicleDriver) {\n        routeVehicleDriver.rollbackAttributes();\n      }\n    },\n\n    driverOptions: Ember.computed('selectedVehicle.provider.id', 'drivers.@each.providerId', function () {\n      const providerId = this.get('selectedVehicle.provider.id');\n      const selectedDriver = this.get('selectedDriver');\n      let drivers = this.get('drivers') || []; // always show selected driver\n\n      if (selectedDriver && !drivers.includes(selectedDriver)) {\n        drivers.unshift(selectedDriver);\n      } // if a vehicle is selected, do not show drivers from other providers\n\n\n      if (Ember.isPresent(providerId)) {\n        drivers = drivers.filterBy('provider.id', providerId);\n      }\n\n      const options = [{\n        driver: null,\n        isNoDriver: true\n      }];\n      drivers.forEach(driver => {\n        options.push({\n          driver,\n          isNoDriver: false\n        });\n      });\n      return options;\n    }),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const route = this.get('route');\n      const dispatchRoute = this.get('route.dispatchRoute');\n      const vehicle = this.get('selectedVehicle');\n      const capacityCounts = this.get('selectedVehicle.capacityCounts');\n      const driver = this.get('selectedDriver');\n      const dispatchRouteVersion = this.get('dispatchRouteVersion');\n      const driverPhoneNumber = this.get('driverPhoneNumber');\n      const assignVehicleOverCapacityPerm = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.assignVehicleOverCapacity, null);\n      let routeVehicleDriver = this.get('routeVehicleDriver');\n\n      if (!routeVehicleDriver) {\n        routeVehicleDriver = store.createRecord('route-vehicle-driver', {\n          startTime: route.get('plannedStartTime'),\n          endTime: route.get('plannedEndTime'),\n          dispatchRoute: this.get('dispatchRoute'),\n          dispatchSchedule: this.get('dispatchRoute.dispatchSchedule')\n        });\n      }\n\n      routeVehicleDriver.set('driverPhoneNumber', driverPhoneNumber);\n      routeVehicleDriver.set('vehicle', vehicle);\n      routeVehicleDriver.set('driver', driver);\n      routeVehicleDriver.set('driverPhoneNumber', driverPhoneNumber);\n      routeVehicleDriver.set('dispatchRouteVersion', dispatchRouteVersion);\n      routeVehicleDriver.set('dispatchTakeover', true);\n      this.set('routeVehicleDriver', routeVehicleDriver); //todo: re-visit after addressing NYAAR-10966\n      //Determining if the user has the permission, plus vehicle does not have capacity in order to pass parameter\n\n      const travelNeedCounts = this.get('dispatchRoute.maxTravelNeedCounts');\n      let options = null; //assignVehicleOverCapacityPerm is also a pre-condition for hasEnoughCapacity, we want to pass the param only if both are fulfilled\n\n      if (assignVehicleOverCapacityPerm && Ember.isPresent(travelNeedCounts) && vehicle !== null) {\n        const hasEnoughCapacity = !(0, _vehicleCapacity.isUnderCapacity)(dispatchRoute, capacityCounts);\n        options = hasEnoughCapacity ? null : {\n          ignoreCapacityViolations: assignVehicleOverCapacityPerm\n        };\n      }\n\n      try {\n        yield routeVehicleDriver.save({\n          adapterOptions: options\n        });\n      } catch (err) {\n        this.resetRVD();\n        throw err;\n      }\n    }),\n\n    async validateVehicle(dispatchScheduleId, vehicleId, plannedStart, plannedEnd) {\n      const queryOptions = {\n        filter: `and(eq(dispatchScheduleId,${dispatchScheduleId}),eq(vehicleId,'${vehicleId}'))`,\n        include: 'dispatchRoute'\n      };\n      const rvdHistory = await this.get('store').query('route-vehicle-driver', queryOptions);\n      let isAvailable = true;\n      let routeId = null;\n      rvdHistory.forEach(rvd => {\n        const start = rvd.startTime;\n        const end = rvd.endTime;\n\n        if (!rvd.get('vehicle.isCompleted') && (rvd.get('vehicle.id') === vehicleId && (0, _moment.default)(start).isBetween(plannedStart, plannedEnd, null, '[)') || (0, _moment.default)(end).isBetween(plannedStart, plannedEnd, null, '(]'))) {\n          isAvailable = false;\n          routeId = rvd.get('dispatchRoute.route.id');\n        }\n      });\n      return {\n        isAvailable,\n        routeId\n      };\n    },\n\n    async validateSelectedVehicle(vehicleId) {\n      let isAvailable = true;\n      await this.get('fetchVehiclesTask').perform();\n      const vehicles = this.get('vehicles');\n\n      if (Ember.isEmpty(vehicles.findBy('id', vehicleId))) {\n        this.set('currentState', null);\n        this.refresh();\n        isAvailable = false;\n      }\n\n      return {\n        isAvailable,\n        routeId: null\n      };\n    },\n\n    async validateDriver(dispatchScheduleId, driverId, plannedStart, plannedEnd) {\n      const queryOptions = {\n        filter: `and(eq(dispatchScheduleId,${dispatchScheduleId}),eq(driverId,'${driverId}'))`,\n        include: 'dispatchRoute'\n      };\n      const rvdHistory = await this.get('store').query('route-vehicle-driver', queryOptions);\n      let isAvailable = true;\n      let routeId = null;\n      rvdHistory.forEach(rvd => {\n        const start = rvd.startTime;\n        const end = rvd.endTime;\n\n        if (!rvd.get('driver.isCompleted') && (rvd.get('driver.id') === driverId && (0, _moment.default)(start).isBetween(plannedStart, plannedEnd, null, '[)') || (0, _moment.default)(end).isBetween(plannedStart, plannedEnd, null, '(]'))) {\n          isAvailable = false;\n          routeId = rvd.get('dispatchRoute.route.id');\n        }\n      });\n      return {\n        isAvailable,\n        routeId\n      };\n    },\n\n    async validateSelectedDriver(driverId) {\n      let isAvailable = true;\n      await this.get('fetchDriversTask').perform();\n      const drivers = this.get('drivers');\n\n      if (Ember.isEmpty(drivers.findBy('id', driverId))) {\n        this.set('currentState', null);\n        this.refresh();\n        isAvailable = false;\n      }\n\n      return {\n        isAvailable,\n        routeId: null\n      };\n    },\n\n    actions: {\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const selectedDriver = this.get('selectedDriver');\n        const selectedVehicle = this.get('selectedVehicle');\n        const driverPhoneNumber = this.get('driverPhoneNumber'); // // save current manual settings\n\n        currentState = {\n          selectedDriver,\n          selectedVehicle,\n          driverPhoneNumber\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onColumnClick(column) {\n        const valuePath = column.valuePath;\n        const sortOrder = column.ascending ? 'asc' : 'desc';\n        this.set('vehicleSort.valuePath', valuePath);\n        this.set('vehicleSort.sortOrder', sortOrder);\n      },\n\n      onUpdatePhoneNumber(val) {\n        const regexNumeric = /^\\d+$/;\n        const isAllNumbers = regexNumeric.test(val);\n\n        if (isAllNumbers) {\n          this.set('driverPhoneNumber', val);\n        } else if (Ember.isEmpty(val)) {\n          this.set('driverPhoneNumber', '');\n        } else {\n          this.notifyPropertyChange('driverPhoneNumber');\n        }\n      },\n\n      onDriverOptionSelect(option) {\n        this.set('selectedDriver', option.driver);\n      },\n\n      async onAssignVehicleDriverButtonClick() {\n        const tooltip = this.get('tooltip');\n        const vehicleId = this.get('selectedVehicle.name');\n        const driverId = this.get('selectedDriver.driverId');\n        /*eslint-disable */\n\n        const driverPhoneNumber = this.get('driverPhoneNumber') ? this.get('driverPhoneNumber') : '\\\"\\\"';\n        const currentVehicleId = this.get('routeVehicleDriver.vehicle.name');\n        const currentDriverId = this.get('routeVehicleDriver.driver.driverId');\n        const currentDriverPhoneNumber = this.get('routeVehicleDriver.driverPhoneNumber') ? this.get('routeVehicleDriver.driverPhoneNumber') : '\\\"\\\"';\n        /*eslint-enable */\n\n        const routeId = this.get('route.name');\n        const dispatchRoute = this.get('route.dispatchRoute');\n        const defaultVehicleType = this.get('defaultSelectedVehicle.vehicleType.name');\n        const selectedVehicleType = this.get('selectedVehicle.vehicleType.name');\n        const isDiffVehicle = vehicleId !== currentVehicleId;\n        const isDiffDriver = driverId !== currentDriverId;\n        const travelNeedCounts = this.get('route.travelNeedCounts');\n        const capacityCounts = this.get('selectedVehicle.capacityCounts');\n        const title = 'Assign Vehicle & Driver';\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        try {\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction();\n          let notification = '';\n          let tip = '';\n          let isDiffVehicleType = false;\n          let warning = false;\n          const errors = [];\n\n          if (this.get('defaultSelectedVehicle') !== null) {\n            isDiffVehicleType = defaultVehicleType !== selectedVehicleType;\n          }\n\n          this.set('errorMessage', null);\n\n          if (Ember.isPresent(vehicleId) && isDiffVehicle) {\n            tip = 'You are assigning'; // adding vehicle\n\n            if (isDiffVehicle) {\n              tip = `${tip} Vehicle ${vehicleId}`;\n              notification = `Vehicle ${vehicleId}`;\n            }\n          }\n\n          if (Ember.isPresent(driverId) && isDiffDriver) {\n            if (Ember.isEmpty(tip)) {\n              tip = 'You are assigning';\n            }\n\n            if (Ember.isPresent(vehicleId) && isDiffVehicle) {\n              tip = `${tip} and`;\n              notification = `${notification} and`;\n            } // adding driver\n\n\n            if (isDiffDriver) {\n              tip = `${tip} Driver ${driverId}`;\n              notification = `${notification} Driver ${driverId}`;\n            }\n          }\n\n          if (Ember.isPresent(driverId) && isDiffDriver || isDiffVehicle && Ember.isPresent(vehicleId)) {\n            tip = `${tip} to Route ${routeId}`;\n            notification = `${notification} assigned to Route ${routeId}`;\n          }\n\n          if (!driverId && isDiffDriver || !vehicleId && isDiffVehicle) {\n            if (Ember.isEmpty(tip)) {\n              tip = 'You are';\n            } else {\n              tip += ' and';\n            } // removing driver / vehicle\n\n\n            if (isDiffVehicle && isDiffDriver && Ember.isEmpty(driverId) && Ember.isEmpty(vehicleId)) {\n              tip = `You are removing Vehicle ${currentVehicleId} and Driver ${currentDriverId} from Route ${routeId}`;\n              notification = `Vehicle ${currentVehicleId} and Driver ${currentDriverId} removed from Route ${routeId}`;\n            } else if (Ember.isNone(driverId) && Ember.isPresent(currentDriverId)) {\n              tip = `${tip} removing Driver ${currentDriverId} from Route ${routeId}`;\n              notification = `${notification} removed Driver ${currentDriverId} from Route ${routeId}`;\n            } else if (Ember.isNone(vehicleId) && Ember.isPresent(currentVehicleId)) {\n              tip = `${tip} removing Vehicle ${currentVehicleId} from Route ${routeId}`;\n              notification = `${notification} and removed Vehicle ${currentVehicleId} from Route ${routeId}`;\n            }\n          }\n\n          let isNotEnough = false;\n\n          if (Ember.isPresent(travelNeedCounts) && Ember.isPresent(capacityCounts)) {\n            isNotEnough = (0, _vehicleCapacity.isUnderCapacity)(dispatchRoute, capacityCounts);\n          }\n\n          if (isNotEnough) {\n            errors.push({\n              validation: 'You are about to assign an incompatible vehicle. All trips that cannot be serviced will be waitlisted.'\n            });\n            warning = true;\n          }\n\n          if (isDiffVehicleType) {\n            errors.push({\n              validation: 'The selected vehicle type does not match the original vehicle type.'\n            });\n            warning = true;\n          }\n\n          if (Ember.isEmpty(tip) && driverPhoneNumber !== currentDriverPhoneNumber) {\n            tip = `You are changing the driver phone number from ${currentDriverPhoneNumber} to ${driverPhoneNumber}`;\n            notification = 'Driver phone number changed';\n          } // Re-validate vehicle to make sure it is not already assigned because backend\n          // is currently not doing so. This helps with race condition\n\n\n          const targetVehicleId = this.get('selectedVehicle.id');\n\n          if (Ember.isPresent(targetVehicleId) && isDiffVehicle) {\n            const vehicleResult = await this.validateSelectedVehicle(targetVehicleId);\n\n            if (!vehicleResult.isAvailable) {\n              if (Ember.isNone(vehicleResult.routeId)) {\n                this.get('notifications').warning(`Vehicle ${vehicleId} has already been assigned to another route`);\n              } else {\n                const route = await this.get('store').findRecord('route', vehicleResult.routeId); // the reason for this delay is because normalization takes a bit of time to populate model\n\n                Ember.run.later(this, function () {\n                  this.get('notifications').warning(`Vehicle ${vehicleId} has already been assigned to route ${route.get('name')}`);\n                }, 600);\n              }\n\n              return;\n            }\n          } // Re-validate driver to make sure it is not already assigned because backend\n          // is currently not doing so\n\n\n          const targetDriverId = this.get('selectedDriver.id');\n\n          if (Ember.isPresent(targetDriverId) && isDiffDriver) {\n            const driverResult = await this.validateSelectedDriver(targetDriverId);\n\n            if (!driverResult.isAvailable) {\n              if (Ember.isNone(driverResult.routeId)) {\n                this.get('notifications').warning(`Driver ${driverId} has already been assigned to another route`);\n              } else {\n                const route = await this.get('store').findRecord('route', driverResult.routeId); // the reason for this delay is because normalization takes a bit of time to populate model\n\n                Ember.run.later(this, function () {\n                  this.get('notifications').warning(`Driver ${driverId} has already been assigned to route ${route.get('name')}`);\n                }, 600);\n              }\n\n              return;\n            }\n          }\n\n          tooltip.pushConfirmation({\n            tip,\n            errors,\n            title,\n            hasOverlay: true,\n            warning,\n            primaryActionText: 'Confirm',\n            primaryAction: async () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('notifications').success(`${notification} successfully`);\n              }).catch(error => {\n                let msg = `${notification} failed`;\n                const e = error.errors.get('firstObject');\n\n                if (!_lodash.default.isEmpty(e.detail)) {\n                  if (e.detail.includes('modified by another request')) msg = `UNABLE TO UPDATE ROUTE ${this.get('route.name')}, BECAUSE IT HAS BEEN MODIFIED BY ANOTHER REQUEST.`;else if (e.detail.includes('overlap with another route')) msg = `UNABLE TO UPDATE ROUTE ${this.get('route.name')}, BECAUSE ASSIGNMENT OVERLAPS WITH ANOTHER ROUTE.`;else if (e.detail.includes('is(are) locked')) msg = 'Cannot modify route vehicle driver.  The requested vehicle/driver is(are) locked';else if (e.status === '408') msg = msg + ', Please try again.';\n                }\n\n                this.get('notifications').warning(msg);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                tooltip.reset();\n                this.get('workspace').requestWootricSurvey('on_vehicleDriverAssignment');\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              this.resetRVD();\n              await unlockRouteAction(0);\n              tooltip.reset();\n              return;\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      },\n\n      onRefreshButtonClick() {\n        this.set('currentState', null);\n        this.refresh();\n      },\n\n      onSelectedVehicle(vehicle) {\n        this.set('selectedVehicle', vehicle);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"/TFt37yE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs' @ L3:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Assign Vehicle & Driver\\\",[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onAssignVehicleDriverButtonClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs' @ L12:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Route ID: \\\"],[1,[23,[\\\"route\\\",\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs' @ L16:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"assign-rvd-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs' @ L19:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Route Travel Needs\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Wheelchairs\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"travelNeedCounts\\\",\\\"wheelchair\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Ambulatory Seats\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"travelNeedCounts\\\",\\\"ambulatory\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Service Animals\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"travelNeedCounts\\\",\\\"serviceAnimal\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs' @ L36:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Vehicle to Route\\\",true]],{\\\"statements\\\":[[4,\\\"form-components/vehicle-selection\\\",null,[[\\\"dispatchRoute\\\",\\\"extra\\\",\\\"refreshFlag\\\",\\\"onSelectedVehicle\\\",\\\"currentState\\\",\\\"filterVehiclesByHoliday\\\"],[[23,[\\\"dispatchRoute\\\"]],[27,\\\"hash\\\",null,[[\\\"previousSelectedVehicle\\\"],[[23,[\\\"selectedVehicle\\\"]]]]],[27,\\\"readonly\\\",[[23,[\\\"refreshFlag\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectedVehicle\\\"],null],[23,[\\\"currentState\\\"]],[23,[\\\"filterVehiclesByHoliday\\\"]]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs' @ L49:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Driver\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"driver.driverId\\\",true,[27,\\\"find-by\\\",[\\\"driver.id\\\",[23,[\\\"selectedDriver\\\",\\\"id\\\"]],[23,[\\\"driverOptions\\\"]]],null],[23,[\\\"driverOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDriverOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,2,[\\\"isNoDriver\\\"]]],null,{\\\"statements\\\":[[0,\\\"                None\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,2,[\\\"driver\\\",\\\"driverId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedDriver\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\" Driver Phone Number\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n       \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"maxlength\\\",\\\"value\\\",\\\"key-up\\\"],[\\\"text\\\",\\\"32\\\",[27,\\\"readonly\\\",[[23,[\\\"driverPhoneNumber\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdatePhoneNumber\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Shift Start\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"driverAvailabilityShiftStart\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Shift End\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"driverAvailabilityShiftEnd\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/assign-vehicle-driver-to-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/bar-chart-settings/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/bar-chart-settings/config\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _config, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    workspace: Ember.inject.service(),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    title: 'Bar Chart',\n    dataType: null,\n    sourceOptions: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('sourceOptions', _config.default);\n      const dataType = this.get('widget.state.dataType');\n      this.set('dataType', dataType);\n\n      if (Ember.isPresent(dataType)) {\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n      }\n    },\n\n    actions: {\n      onTypeSelect(dataType) {\n        this.set('dataType', dataType);\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n        this.get('widget').mergeState({\n          dataType\n        });\n      },\n\n      setDisplayOptionVisibility(selected) {\n        try {\n          Ember.run(() => {\n            this.set('dataType.displayOptions.selected', selected); // We don't want to merge properties like `valueCategories`.\n\n            Ember.set(this.get('widget'), 'state.dataType', this.get('dataType'));\n            this.get('widget').notifyPropertyChange('state');\n          });\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          return console.warn(e);\n        }\n      },\n\n      setDisplayOptionMetric(selected) {\n        this.set('dataType.displayOptions.selected.metricOption', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onFilterValueChange(column, index, event) {\n        let filterValues = column.get('filterValues') || [];\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value; // Update the displayed filter column.\n\n        Ember.set(column, 'filterValues', filterValues);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterValues`, filterValues);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onSelectFilterType(column, filterType) {\n        // Update the displayed filter column.\n        Ember.set(column, 'filterTypeId', filterType.id);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterTypeId`, filterType.id);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onTitleInput(data) {\n        this.set('dataType.title', data);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setVisualOptionVisibility(selected, event) {\n        const dataType = this.get('dataType');\n        Ember.set(selected, 'isChecked', event.target.checked);\n        this.get('widget').mergeState({\n          dataType\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/bar-chart-settings/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const COLUMNS = {\n    routeColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          format: 'hh:mm A',\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    },\n    tripColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          defaultWidth: 75\n        },\n        filterTypeId: null,\n        filterValues: []\n      }\n    }\n  };\n  const VisualOptions = [{\n    id: 'value',\n    name: 'Show Value',\n    isChecked: true\n  }, {\n    id: 'percentage',\n    name: 'Show Percentage',\n    isChecked: false\n  }, {\n    id: 'total',\n    name: 'Show Total',\n    isChecked: true\n  }];\n  var _default = [{\n    name: 'Trips',\n    modelName: 'iq-trip',\n    columns: COLUMNS.tripColumns,\n    displayOptions: {\n      selected: null,\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: {\n          id: 'count',\n          name: 'Count'\n        },\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      }, {\n        id: 'plannedTravelNeeds',\n        name: 'Planned Travel Needs',\n        label: 'Planned Travel Needs',\n        valueKey: 'plannedTravelNeeds',\n        valueCategories: [{\n          label: 'Ambulatory',\n          value: 'ambulatory'\n        }, {\n          label: 'Wide Wheelchair',\n          value: 'wideWheelchair'\n        }, {\n          label: 'Wheelchair',\n          value: 'wheelchair'\n        }, {\n          label: 'Wide Ambulatory',\n          value: 'wideAmbulatory'\n        }, {\n          label: 'Service Animal',\n          value: 'serviceAnimal'\n        }],\n        metricOption: {\n          id: 'sumOccurrences',\n          name: 'Sum'\n        },\n        metricOptions: [{\n          id: 'sumOccurrences',\n          name: 'Sum'\n        }]\n      }]\n    },\n    title: '',\n    visualOptions: VisualOptions\n  }, {\n    name: 'Routes',\n    modelName: 'route',\n    columns: COLUMNS.routeColumns,\n    displayOptions: {\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: {\n          id: 'count',\n          name: 'Count'\n        },\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      },\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: null,\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      }]\n    },\n    title: '',\n    visualOptions: VisualOptions\n  }];\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/bar-chart-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ZDAngOUQ\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"visualOption\\\",\\\"column\\\",\\\"filterType\\\",\\\"option\\\",\\\"option\\\",\\\"type\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"metrics-widget-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/bar-chart-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/bar-chart-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Type:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"sourceOptions\\\"]]],null],[23,[\\\"dataType\\\"]],\\\"Select Type\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Display:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"options\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionVisibility\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOptions\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOption\\\"]],\\\"Select Metric\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionMetric\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Filter by Status:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filterColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[27,\\\"eq\\\",[[22,3,[\\\"filterTypes\\\",\\\"length\\\"]],0],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,4,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Visuals:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\",\\\"placeholder\\\"],[\\\"text\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"title\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],\\\"Widget Title\\\"]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"dataType\\\",\\\"visualOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-checkbox\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[22,2,[\\\"isChecked\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setVisualOptionVisibility\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[1,[22,2,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/bar-chart-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/blockout-alternative-addresses/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    editableSections: null,\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    errors: null,\n    alternativeAddresses: null,\n    selectedAddress: null,\n    leg: Ember.computed.readOnly('stackFrame.options.leg'),\n    place: Ember.computed.readOnly('stackFrame.options.place'),\n    message: Ember.computed.readOnly('stackFrame.options.message'),\n    blockoutRegion: Ember.computed.readOnly('stackFrame.options.blockoutRegion'),\n    showAltAddressMarker: Ember.computed.readOnly('stackFrame.options.showAltAddressMarker'),\n    cancelAlternativeAddressOption: Ember.computed.readOnly('stackFrame.options.cancelAlternativeAddressOption'),\n    updateAlternativeAddressSelection: Ember.computed.readOnly('stackFrame.options.updateAlternativeAddressSelection'),\n    noSelection: Ember.computed('selectedAddress', function () {\n      const selectedAddress = this.get('selectedAddress');\n      return Ember.isEmpty(selectedAddress);\n    }),\n\n    async init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setDefaultData();\n      this.get('systemConfig').set('targetAttachment', 'right');\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      this.get('systemConfig').set('targetAttachment');\n    },\n\n    setDefaultData() {\n      const blockoutRegion = this.get('blockoutRegion');\n      const blockoutAlternativeAddresses = blockoutRegion.get('value.addresses') || [];\n      const addresses = [];\n      blockoutAlternativeAddresses.forEach(blockoutAlternativeAddress => {\n        const fullAddress = [];\n\n        if (Ember.isPresent(blockoutAlternativeAddress.streetNumber)) {\n          fullAddress.push(`${blockoutAlternativeAddress.streetNumber} ${blockoutAlternativeAddress.streetAddress}`);\n        } else {\n          fullAddress.push(blockoutAlternativeAddress.streetAddress);\n        }\n\n        fullAddress.push(blockoutAlternativeAddress.locality);\n        fullAddress.push(blockoutAlternativeAddress.region);\n        fullAddress.push(blockoutAlternativeAddress.postalCode);\n        fullAddress.push(blockoutAlternativeAddress.country);\n        addresses.push(Ember.Object.create({\n          streetNumber: blockoutAlternativeAddress.streetNumber,\n          streetAddress: blockoutAlternativeAddress.streetAddress,\n          region: blockoutAlternativeAddress.region,\n          locality: blockoutAlternativeAddress.locality,\n          postalCode: blockoutAlternativeAddress.postalCode,\n          lat: blockoutAlternativeAddress.lat,\n          lng: blockoutAlternativeAddress.lng,\n          country: blockoutAlternativeAddress.country,\n          fullAddress: fullAddress.join(', ')\n        }));\n      });\n      this.set('alternativeAddresses', addresses);\n    },\n\n    addClassForSelectedAddress(selectedAddressIndex) {\n      const addressRowClass = '.address-row';\n      const selectedAddressClass = `.selectedAddress${selectedAddressIndex}`;\n      const selectedAddress = Ember.$(selectedAddressClass);\n      const addressRows = Ember.$(addressRowClass);\n      addressRows.removeClass('selected');\n      selectedAddress.addClass('selected');\n    },\n\n    actions: {\n      onCloseClick() {\n        const place = this.get('place');\n        this.get('systemConfig').set('targetAttachment');\n        this.cancelAlternativeAddressOption(place);\n        this.onCloseClick();\n      },\n\n      onAddressSelect(address, index) {\n        this.set('selectedAddress', address);\n        this.addClassForSelectedAddress(index);\n        this.showAltAddressMarker(address);\n      },\n\n      onConfirmClick() {\n        const selectedAddress = this.get('selectedAddress');\n        const place = this.get('place');\n\n        if (Ember.isPresent(selectedAddress)) {\n          this.updateAlternativeAddressSelection(selectedAddress, place);\n          this.get('systemConfig').set('targetAttachment');\n          this.cancelAlternativeAddressOption(place);\n          this.onCloseClick();\n        }\n      },\n\n      onCancelClick() {\n        const place = this.get('place');\n        this.get('systemConfig').set('targetAttachment');\n        this.cancelAlternativeAddressOption(place);\n        this.onCloseClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/blockout-alternative-addresses/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"FSiQwZsS\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"address\\\",\\\"index\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"blockout-alternative-addresses\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-header-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/blockout-alternative-addresses/template.hbs' @ L7:C4) \\\"],null]],[[\\\"title\\\",\\\"onCloseClick\\\"],[\\\"Alternative Address\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/blockout-alternative-addresses/template.hbs' @ L13:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"alternative-address-message\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"alternative-address-inside-message\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"pre\\\"],[11,\\\"class\\\",\\\"alt-message-text-area\\\"],[9],[1,[21,\\\"message\\\"],false],[10],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"alternative-addresses-options\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"alternativeAddresses\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"address-row selectedAddress\\\",[22,3,[]]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"alt-address-label\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelect\\\",[22,2,[]],[22,3,[]]],null]],[9],[1,[22,2,[\\\"fullAddress\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"no-results-message\\\"],[9],[0,\\\"No alternative address found.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"alt-address-buttons\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[9],[7,\\\"span\\\"],[9],[0,\\\"Cancel\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onCancelClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"noSelection\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Confirm\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onConfirmClick\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/blockout-alternative-addresses/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/box-widget-settings/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/box-widget-settings/config\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _config, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    workspace: Ember.inject.service(),\n    title: 'Box Chart',\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    dataType: null,\n    sourceOptions: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('sourceOptions', _config.default);\n      const dataType = this.get('widget.state.dataType');\n      this.set('dataType', dataType);\n\n      if (Ember.isPresent(dataType)) {\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n      }\n    },\n\n    actions: {\n      onTypeSelect(dataType) {\n        this.set('dataType', dataType);\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n        this.get('widget').mergeState({\n          dataType\n        });\n      },\n\n      setDisplayOptionVisibility(selected) {\n        this.set('dataType.displayOptions.selected', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setDisplayOptionMetric(selected) {\n        this.set('dataType.displayOptions.selected.metricOption', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setDisplayOptionValueCategory(selected) {\n        this.set('dataType.displayOptions.selected.valueCategory', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onFilterValueChange(column, index, event) {\n        let filterValues = column.get('filterValues') || [];\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value; // Update the displayed filter column.\n\n        Ember.set(column, 'filterValues', filterValues);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterValues`, filterValues);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onSelectFilterType(column, filterType) {\n        // Update the displayed filter column.\n        Ember.set(column, 'filterTypeId', filterType.id);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterTypeId`, filterType.id);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onTitleInput(data) {\n        this.set('dataType.title', data);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setBoxMetriclabel(label) {\n        this.set('dataType.boxMetricLabel', label);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onGoColorChange(color, data) {\n        /*eslint-disable */\n        data = parseInt(data, 10);\n        /*eslint-enable */\n\n        if (data) {\n          Ember.set(this.get('dataType'), `boxColor.${color}`, data);\n          this.get('widget').mergeState({\n            dataType: this.get('dataType')\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/box-widget-settings/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const COLUMNS = {\n    routeColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          format: 'hh:mm A',\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    },\n    tripColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    }\n  };\n  const BOX_COLOR = {\n    orange: 2,\n    red: 4\n  };\n  var _default = [{\n    name: 'Trips',\n    modelName: 'iq-trip',\n    columns: COLUMNS.tripColumns,\n    displayOptions: {\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategory: {\n          label: 'Late',\n          value: 'L'\n        },\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: {\n          id: 'count',\n          name: 'Count'\n        },\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      },\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      }]\n    },\n    title: '',\n    boxColor: BOX_COLOR\n  }, {\n    name: 'Routes',\n    modelName: 'route',\n    columns: COLUMNS.tripColumns,\n    displayOptions: {\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategory: {\n          label: 'Late',\n          value: 'L'\n        },\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: {\n          id: 'count',\n          name: 'Count'\n        },\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      },\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      }]\n    },\n    title: '',\n    boxColor: BOX_COLOR\n  }];\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/box-widget-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EhA4hSln\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"column\\\",\\\"filterType\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"type\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"metrics-widget-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/box-widget-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/box-widget-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Type:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"sourceOptions\\\"]]],null],[23,[\\\"dataType\\\"]],\\\"Select Type\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Display:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"options\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionVisibility\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"valueCategories\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"valueCategory\\\"]],\\\"Select Category\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionValueCategory\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,5,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOptions\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOption\\\"]],\\\"Select Metric\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionMetric\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Filter by Status:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filterColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,2,[\\\"filterType\\\"]],false,\\\"label\\\",[22,2,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,2,[]]],null],[27,\\\"eq\\\",[[22,2,[\\\"filterTypes\\\",\\\"length\\\"]],0],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,3,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,2,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,2,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,2,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,2,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,2,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,2,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,2,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,2,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Visuals\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\",\\\"placeholder\\\"],[\\\"text\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"title\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],\\\"Widget Title\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Box Colors \\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-number-input\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Go Orange:\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"id\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\"],[\\\"number\\\",\\\"go-orange-input\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"boxColor\\\",\\\"orange\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"orange\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"orange\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-number-input\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Go Red:\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"id\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\"],[\\\"number\\\",\\\"go-red-input\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"boxColor\\\",\\\"red\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"red\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"red\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/box-widget-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/bulk-trip-transfer/component\", [\"exports\", \"ember-light-table\", \"adept-iq/utils/unwrapProxy\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/bulk-trip-transfer/config\", \"adept-iq/config/environment\", \"moment\", \"adept-iq/classes/map-contexts/side-drawers/trip-transfer\", \"adept-iq/mixins/table-row-value\", \"adept-iq/mixins/trip-transfer-promise-time\", \"adept-iq/classes/impact-stop\", \"adept-iq/config/mapped-permIds\", \"lodash\"], function (_exports, _emberLightTable, _unwrapProxy, _emberConcurrency, _config, _environment, _moment, _tripTransfer, _tableRowValue, _tripTransferPromiseTime, _impactStop, _mappedPermIds, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ACTIVE_STATUS = 'active';\n\n  var _default = Ember.Component.extend(_tableRowValue.default, _tripTransferPromiseTime.default, {\n    tagName: '',\n    map: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    // passed by the side drawer container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    currentState: null,\n    // component properties\n    solutionPreviewTable: null,\n    solutionImpactTable: null,\n    currentSortImpactPreview: null,\n    routeOverrideOptions: null,\n    overrideSelectedRoute: null,\n    overrideSelectedProvider: null,\n    overrideSelectedPickOrder: null,\n    overrideSelectedDropOrder: null,\n    errorText: null,\n    solutions: null,\n    impact: null,\n    selectedSolutionId: null,\n    selectedOverrideSolutionId: null,\n    selectedImpactPeriod: 'after',\n    activeTabRouteId: null,\n    currentSolutionDispatchRoute: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    override: false,\n    providersList: null,\n    title: 'Bulk Transfer Trip',\n    rowComponent: 'table/rows/colored-row',\n    canShrink: Ember.computed.not('isSolutionsTaskRunning'),\n    previousSelectedTripProvider: Ember.computed.readOnly('currentRoute.provider'),\n    isAnyManualSchedulingMode: Ember.computed('trips', function () {\n      const trips = this.get('trips');\n      const manualTrips = trips.filter(trip => trip.isManualSchedulingMode);\n      return manualTrips.length > 0;\n    }),\n    //passed  by the workspace service\n    trips: Ember.computed('stackFrame.options.trips', function () {\n      const trips = this.get('stackFrame.options.trips');\n      const sortedTrips = trips.toSorted((a, b) => a.get('promiseTime') && b.get('promiseTime') ? (0, _moment.default)(a.get('promiseTime')).diff((0, _moment.default)(b.get('promiseTime'))) : 0);\n      return sortedTrips;\n    }),\n    //Array of Trips\n    currentDispatchRoute: Ember.computed.readOnly('currentRoute.dispatchRoute'),\n    currentSolutionRoute: Ember.computed.readOnly('currentSolutionDispatchRoute.route'),\n    overrideSelectedDispatchRoute: Ember.computed.readOnly('overrideSelectedRoute.dispatchRoute'),\n    isNotOverride: Ember.computed('override', function () {\n      return !this.get('override');\n    }),\n    canSave: Ember.computed('selectedSolutionId', function () {\n      const selectedSolutionId = this.get('selectedSolutionId');\n\n      if (!Ember.isEmpty(selectedSolutionId)) {\n        return true;\n      }\n\n      return false;\n    }),\n    isSolutionsTaskRunning: Ember.computed('fetchSolutionsTask.isRunning', 'fetchManualSolutionsTask.isRunning', function () {\n      return this.get('fetchSolutionsTask.isRunning') || this.get('fetchManualSolutionsTask.isRunning');\n    }),\n    currentRoute: Ember.computed('trips.@each.pickStopPoint.dispatchRoute.route', function () {\n      const route = this.get('trips.firstObject.pickStopPoint.dispatchRoute.route');\n\n      if (!route) {\n        return this.get('noRoute');\n      }\n\n      return route;\n    }).readOnly(),\n\n    init() {\n      this._super(...arguments);\n\n      const solutionPreviewTable = new _emberLightTable.default(_config.solutionColumns);\n      const solutionImpactTable = new _emberLightTable.default(_config.stopColumns);\n      const map = this.get('map');\n      this.set('solutionPreviewTable', solutionPreviewTable); // eslint-disable-next-line new-cap\n\n      this.set('solutions', Ember.A([]));\n      this.set('solutionImpactTable', solutionImpactTable);\n      this.set('overrideSelectedProvider'); // run-time bindings; this avoids having a ton of observers\n\n      const mapContext = _tripTransfer.default.extend({\n        trip: Ember.computed.readOnly('_component.trips'),\n        destinationIqRoute: Ember.computed.readOnly('_component.selectedSolutionDispatchRoute'),\n        currentIqRoute: Ember.computed.readOnly('_component.currentDispatchRoute'),\n        impactPayload: Ember.computed.readOnly('_component.impact'),\n        inDanger: Ember.computed.readOnly('_component.inDanger'),\n        selectedImpactPeriod: Ember.computed.readOnly('_component.selectedImpactPeriod'),\n        // 'before' or 'after',\n        selectedImpactView: Ember.computed.readOnly('_component.selectedImpactView'),\n        // 'current' or 'destination'\n        map: map\n      }).create({\n        _component: this\n      });\n\n      this.setupProvidersList();\n      this.setOverrideInitialData();\n      this.set('mapContext', mapContext);\n    },\n\n    setOverrideInitialData() {\n      const provider = this.get('previousSelectedTripProvider');\n      const sourceTripScheduleId = this.get('currentRoute.schedule.id');\n      this.populateRoutesList(sourceTripScheduleId);\n      Ember.run.later(() => {\n        this.set('overrideSelectedProvider', provider);\n      }, 500);\n      this.set('overrideSelectedPickOrder');\n      this.set('overrideSelectedDropOrder');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const mapContext = this.get('mapContext'); // side panel width just for trip transfer\n\n      this.setSideDrawerWidth('1030px');\n      this.get('map').pushContext(mapContext);\n      this.loadCurrentState();\n      const overrideSelectedRoute = this.get('overrideSelectedRoute');\n      const isAnyManualSchedulingMode = this.get('isAnyManualSchedulingMode');\n      this.set('override', isAnyManualSchedulingMode);\n\n      if (Ember.isPresent(overrideSelectedRoute)) {\n        this.selectOverrideSolution(overrideSelectedRoute);\n      }\n    },\n\n    willDestroyElement() {\n      const mapContext = this.get('mapContext');\n      this.get('map').removeContext(mapContext);\n      this.set('overrideSelectedProvider');\n\n      this._super(...arguments);\n    },\n\n    destroy() {\n      this.get('mapContext').set('_component', null);\n\n      this._super(...arguments);\n    },\n\n    isFoundSolution(route) {\n      const solutions = this.get('solutions');\n      const isFound = solutions.findBy('id', route.get('dispatchRoute.id'));\n      return Ember.isPresent(isFound);\n    },\n\n    async setupProvidersList() {\n      const transferBrokerTripDispatch = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferBrokerTripDispatch, null);\n      const previousSelectedTripProvider = (0, _unwrapProxy.unwrapProxy)(this.get('previousSelectedTripProvider'));\n      this.set('providersList', []);\n      const providers = await this.get('store').peekAll('provider').filter(provider => {\n        // filter out broker providers if user does not have permission or InActive\n        if (provider.get('isBrokerProviderType') && !transferBrokerTripDispatch || provider.get('isInActive')) {\n          return false;\n        }\n\n        return !Ember.isEmpty(provider.get('name')) && !Ember.isEmpty(provider.get('id')) && provider.get('userCanAccessProvider');\n      });\n      const providersList = [];\n      providers.forEach(provider => {\n        let isChecked = false;\n\n        if (Ember.isPresent(previousSelectedTripProvider) && provider.get('id') === previousSelectedTripProvider.get('id')) {\n          isChecked = true;\n        }\n\n        providersList.push({\n          id: provider.get('id'),\n          name: provider.get('providerName'),\n          isChecked: isChecked\n        });\n      });\n      this.set('providersList', providersList);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('override', currentState.override);\n        this.set('overrideSelectedProvider', currentState.overrideSelectedProvider);\n        this.set('overrideSelectedRoute', currentState.overrideSelectedRoute);\n        this.set('overrideSelectedPickOrder', currentState.overrideSelectedPickOrder);\n        this.set('overrideSelectedDropOrder', currentState.overrideSelectedDropOrder);\n\n        if (currentState.currentRouteSolution) {\n          this.set('currentRouteSolution', currentState.currentRouteSolution);\n        }\n      }\n    },\n\n    // creates impact after payload\n    createManualSolution(route) {\n      let trip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      const dsTrip = this.get('trips');\n      let dsRouteId = null;\n      let stops = [];\n\n      if (Ember.isPresent(route)) {\n        dsRouteId = route.get('dispatchRoute.id');\n        stops = route.get('dispatchRoute.orderedStopsWithBreaks');\n      } // current route impact after remove transferrable trip\n\n\n      if (dsTrip.get('pickStopPoint.dispatchRoute.id') === dsRouteId) {\n        stops = stops.filter(stop => stop.get('trip.id') !== dsTrip.get('id'));\n      }\n\n      const newSolution = {\n        id: dsRouteId,\n        gain: 'unknown',\n        otp: {\n          delta: 'unknown',\n          originalValue: 'unknown',\n          newValue: 'unknown'\n        },\n        stops: [],\n        recipe: null\n      };\n\n      if (!Ember.isEmpty(stops)) {\n        stops.forEach(stop => {\n          newSolution.stops.push({\n            eta: {\n              originalValue: null,\n              newValue: null\n            },\n            otp: {\n              originalValue: null,\n              newValue: null,\n              delta: null\n            },\n            promiseTime: null,\n            id: stop.get('id'),\n            polyline: null\n          });\n        });\n      }\n\n      if (trip) {\n        const pick = {\n          eta: {\n            originalValue: null,\n            newValue: null\n          },\n          otp: {\n            originalValue: null,\n            newValue: null,\n            delta: null\n          },\n          promiseTime: null,\n          id: trip.get('pickStopPoint.id'),\n          polyline: null\n        };\n        const drop = {\n          eta: {\n            originalValue: null,\n            newValue: null\n          },\n          otp: {\n            originalValue: null,\n            newValue: null,\n            delta: null\n          },\n          promiseTime: null,\n          id: trip.get('dropStopPoint.id'),\n          polyline: null\n        };\n        newSolution.stops.push(pick);\n        newSolution.stops.push(drop);\n        newSolution.recipe = this.createManualRecipe([pick, drop], route, trip);\n      }\n\n      return newSolution;\n    },\n\n    createManualRecipe(stops, route, trip) {\n      // last stop ordinal needs to be at least greater than last actual stop ordinal, it doesn't matter as longer as its bigger\n      // cos will be able to normalize it and put it at the end\n      const lastStopOrdinal = route.get('dispatchRoute.orderedStopsWithGaragesAndBreaks.length') + 100;\n      const destinationId = route.get('dispatchRoute.id');\n      let currentSourceId = this.get('currentDispatchRoute.id');\n\n      if (trip.get('isCanceled')) {\n        currentSourceId = 'cancel';\n      } else if (trip.get('isWaitlisted')) {\n        currentSourceId = 'waitlist';\n      }\n\n      const recipe = {\n        instructions: stops.map((stop, index) => {\n          return {\n            id: stop.id,\n            type: 'stop',\n            source: currentSourceId,\n            destination: destinationId,\n            ordinal: lastStopOrdinal + index\n          };\n        })\n      };\n      return recipe;\n    },\n\n    noRoute: Ember.computed('trips.{isCanceled,isWaitlisted}', function () {\n      const trip = this.get('trips');\n      const pickStopPoint = trip.get('pickStopPoint');\n      const dropStopPoint = trip.get('dropStopPoint');\n      const schedule = this.get('store').peekAll('schedule').find(sch => Ember.isPresent((0, _unwrapProxy.unwrapProxy)(sch.get('dispatchSchedule'))));\n\n      if (trip.get('isCanceled') || trip.get('isWaitlisted')) {\n        return Ember.Object.create({\n          id: null,\n          name: 'No Route',\n          schedule,\n          dispatchRoute: {\n            orderedStopsWithBreaks: [pickStopPoint, dropStopPoint],\n            iqRoute: this\n          }\n        });\n      }\n\n      return null;\n    }),\n    overrideProviderOptions: Ember.computed('', function () {\n      return this.get('store').peekAll('provider').filter(provider => {\n        return provider.get('userCanAccessProvider') && provider.get('status').toLowerCase() === ACTIVE_STATUS;\n      });\n    }),\n    overridePickOrderOptions: Ember.computed('overrideSelectedRoute', function () {\n      const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.dispatchRoute'));\n\n      if (!Ember.isEmpty(dispatchRoute)) {\n        const unperformedStops = dispatchRoute.getUnArrivedStopsInSequence(0) || [];\n        const routeOrdinals = [];\n        unperformedStops.forEach(stop => {\n          routeOrdinals.push(stop.get('routeOrdinal'));\n        });\n\n        if (unperformedStops.length === 0) {\n          routeOrdinals.push(1);\n        } else if (unperformedStops.length > 0) {\n          routeOrdinals.push(Math.max(...routeOrdinals) + 1);\n        }\n\n        return routeOrdinals;\n      }\n\n      return [];\n    }),\n    overrideDropOrderOptions: Ember.computed('overrideSelectedPickOrder', function () {\n      const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n      const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.dispatchRoute'));\n\n      if (!Ember.isEmpty(overrideSelectedPickOrder) && !Ember.isEmpty(dispatchRoute)) {\n        const unperformedStops = dispatchRoute.getUnArrivedStopsInSequence(overrideSelectedPickOrder) || [];\n        const routeOrdinals = [];\n        unperformedStops.forEach(stop => {\n          routeOrdinals.push(stop.get('routeOrdinal'));\n        });\n\n        if (unperformedStops.length > 0) {\n          routeOrdinals.push(Math.max(...routeOrdinals) + 1);\n        }\n\n        if (routeOrdinals.length > 0) {\n          return routeOrdinals;\n        }\n\n        return [overrideSelectedPickOrder + 1];\n      }\n\n      return [];\n    }),\n\n    async populateRoutesList(scheduleId) {\n      const include = 'routes';\n      const scheduleRecord = await this.get('store').findRecord('schedule', scheduleId, {\n        include\n      });\n      return scheduleRecord.get('routes').toArray();\n    },\n\n    overrideRouteOptions: Ember.computed('currentRoute', 'overrideSelectedProvider', async function () {\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const sourceRouteId = this.get('currentRoute.id');\n      const sourceTripScheduleId = this.get('currentRoute.schedule.id');\n      const routes = await this.populateRoutesList(sourceTripScheduleId);\n\n      if (Ember.isNone(routes)) {\n        return [];\n      }\n\n      return _lodash.default.sortBy(routes.filter(route => {\n        const routeScheduleId = route.get('schedule.id');\n        const routeId = route.get('id');\n        let sameProvider = false;\n\n        if (!Ember.isEmpty(overrideSelectedProvider)) {\n          sameProvider = overrideSelectedProvider.get('id') === route.get('provider.id');\n        }\n\n        const sameSchedule = routeScheduleId === sourceTripScheduleId;\n        const differentId = routeId !== sourceRouteId;\n        return sameSchedule && differentId && sameProvider;\n      }), route => route.name);\n    }),\n    selectedGain: Ember.computed('selectedSolutionId', 'solutions.[]', function () {\n      const solutions = this.get('solutions');\n      if (!solutions) return 0;\n      const solution = solutions.findBy('id', this.get('selectedSolutionId')); // TODO: update to use delta otp value\n\n      if (solution) {\n        return solution.otp.deltaValue;\n      }\n\n      return 0;\n    }),\n    selectedGainType: Ember.computed('impactScore', function () {\n      let gainType = 'spending';\n\n      if (this.get('impactScore') > 0) {\n        gainType = 'gaining';\n      }\n\n      return gainType;\n    }),\n    impactScore: Ember.computed('selectedSolutionId', 'selectedImpactPeriod', 'impact', function () {\n      const impact = this.get('impact');\n      const period = this.get('selectedImpactPeriod');\n      if (!impact) return null;\n      let score = impact.otpDelta ? impact.otpDelta : null;\n      if (period === 'before') score = -score; // transform after back to negative value\n\n      return score > 0 ? -score : Math.abs(score); // transform score based on positive being late and negative being positive\n    }),\n    impactScoreType: Ember.computed('impactScore', function () {\n      let impactType = 'negative';\n\n      if (this.get('impactScore') > 0) {\n        impactType = 'positive';\n      }\n\n      return impactType;\n    }),\n    currentRouteImpactScoreType: Ember.computed('impactScore', function () {\n      let impactType = 'spending';\n\n      if (this.get('impactScore') > 0) {\n        impactType = 'saving';\n      }\n\n      return impactType;\n    }),\n    selectedSolutionDispatchRoute: Ember.computed('solutions', 'selectedSolutionId', function () {\n      const solutions = this.get('solutions');\n      const selectedSolutionId = this.get('selectedSolutionId');\n      if (Ember.isEmpty(solutions) || Ember.isEmpty(selectedSolutionId)) return null;\n      const route = this.get('store').peekRecord('route', selectedSolutionId);\n      const dsRoute = this.get('store').peekRecord('dispatch-route', route.get('dispatchRoute.id'));\n      return dsRoute;\n    }),\n    inDanger: Ember.computed('solutions', 'selectedSolutionId', function () {\n      const solutions = this.get('solutions');\n      if (Ember.isEmpty(solutions)) return false; // TODO: connect to real data here\n\n      const selectedSolutionId = this.get('selectedSolutionId');\n      const index = solutions.mapBy('id').indexOf(selectedSolutionId);\n      return index % 2 === 1;\n    }),\n\n    setupSolutions() {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      const trip = this.get('trips');\n      const store = this.get('store');\n      const currentState = this.get('currentState');\n      let currentSolutions = null;\n      let currentSolutionRouteId = null;\n\n      if (currentState) {\n        currentSolutions = currentState.solutions ? this.currentState.solutions : null;\n        currentSolutionRouteId = currentState.currentSolutionRoute ? currentState.currentSolutionRoute.get('id') : null;\n      }\n\n      this.get('fetchSolutionsTask').perform(trip).catch(err => {\n        // Try to be as robust as possible.  Log an error to console for discovery,\n        // but just use an empty solution set to unblock manually transferring\n        if (!Ember.isEmpty(err) && !Ember.isEmpty(err.payload)) {\n          const reason = err.payload.message || err.payload.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err)}`); // eslint-disable-line no-console\n\n        return null;\n      }).then(solutions => {\n        if (!Ember.isEmpty(solutions)) {\n          const promises = solutions.map(async _ref => {\n            let {\n              id\n            } = _ref;\n            return coreEntityPopulator.populateRtsRoute(id, {});\n          });\n          return Promise.all(promises).then(() => {\n            return solutions;\n          });\n        }\n\n        return solutions;\n      }).then(solutions => {\n        let solutionsTableRows = []; // eslint-disable-next-line no-param-reassign\n\n        solutions = currentState ? currentSolutions : solutions; // reset stops table data\n\n        this.set('solutionImpactTable.rows', []);\n\n        if (!Ember.isEmpty(solutions)) {\n          solutionsTableRows = solutions.map(_ref2 => {\n            let {\n              id,\n              otp\n            } = _ref2;\n            const selectedRoute = store.peekRecord('route', id);\n            otp.originalValue = selectedRoute.get('otpValueWithSign') ? selectedRoute.get('otpValueWithSign') : otp.originalValue;\n            return {\n              id,\n              otp,\n              dispatchRoute: selectedRoute.get('dispatchRoute')\n            };\n          });\n          this.get('solutions').pushObjects(solutions);\n        }\n\n        this.get('solutionPreviewTable').setRows(solutionsTableRows);\n\n        if (!Ember.isEmpty(solutions)) {\n          const firstSolutionId = currentSolutionRouteId ? solutions.find(solution => solution.id === currentSolutionRouteId).id : solutions[0].id;\n          this.selectTableSolutionRow(firstSolutionId);\n          this.selectSolution(firstSolutionId);\n        }\n      }).catch(() => {\n        const tripIds = trip.map(x => x.tripId).toString();\n        this.get('notifications').info(`Trip ${tripIds} cannot be transferred`);\n        return this.onCloseClick();\n      });\n      this.fetchRouteOverrideOptions();\n    },\n\n    fetchRouteOverrideOptions() {\n      const sourceRouteIdValue = this.get('currentRoute.id');\n      const sourceRouteScheduleIdValue = this.get('currentRoute.schedule.id');\n      if (!sourceRouteIdValue) return null;\n      const store = this.get('store');\n      const routes = store.peekAll('route').filter(route => {\n        const routeScheduleIdValue = route.get('schedule.id');\n        const routeIdValue = route.get('id');\n        const sameSchedule = routeScheduleIdValue === sourceRouteScheduleIdValue;\n        const differentId = routeIdValue !== sourceRouteIdValue;\n        return sameSchedule && differentId;\n      });\n      this.set('routeOptions', routes);\n      return routes;\n    },\n\n    fetchSolutionsTask: (0, _emberConcurrency.task)(function* (trip, routeId) {\n      const tripTransferAdapter = yield this.get('store').adapterFor('trip-transfer');\n      const tripIds = [];\n      const trips = Ember.makeArray(trip);\n      const dispatchScheduleId = trips[0].get('dispatchRoute.dispatchSchedule.id') ? parseInt(trips[0].get('dispatchRoute.dispatchSchedule.id'), 10) : null;\n      trips.forEach(currentTrip => {\n        const tripId = currentTrip.get('id') ? parseInt(currentTrip.get('id'), 10) : null;\n        tripIds.push(tripId);\n      });\n      const result = yield tripTransferAdapter.createTripTransferAsyncOperation.perform(tripIds, dispatchScheduleId, routeId ? parseInt(routeId, 10) : routeId);\n\n      if (!result.isJobSuccess) {\n        throw result;\n      }\n\n      if (!Ember.isEmpty(result.data)) {\n        const currentRouteSolution = result.data.attributes.sourceRoute;\n        const solutions = result.data.attributes.destinationRoutes;\n        this.set('currentRouteSolution', currentRouteSolution);\n        return solutions;\n      }\n\n      return;\n    }).keepLatest(),\n\n    findTripAndStopType(sortedStopPoints, id, stopType) {\n      return sortedStopPoints.find(stopPoint => {\n        return stopPoint.id === id && stopPoint.stopType === stopType;\n      });\n    },\n\n    fetchManualSolutionsTask: (0, _emberConcurrency.task)(function* (trips, newPickOrdinal, routeId) {\n      const tripTransferAdapter = yield this.get('store').adapterFor('trip-transfer');\n      let dispatchScheduleId = '';\n      const payloadData = [];\n      dispatchScheduleId = trips[0].get('dispatchRoute.dispatchSchedule.id') ? parseInt(trips[0].get('dispatchRoute.dispatchSchedule.id'), 10) : null;\n      const stopPoints = [];\n      trips.forEach(currentTrip => {\n        stopPoints.push({\n          id: currentTrip.get('id'),\n          stopType: 'pick',\n          routeOrdinal: currentTrip.get('pick.stopPoint.routeOrdinal')\n        });\n        stopPoints.push({\n          id: currentTrip.get('id'),\n          stopType: 'drop',\n          routeOrdinal: currentTrip.get('drop.stopPoint.routeOrdinal')\n        });\n      });\n\n      const sortedStopPoints = _lodash.default.sortBy(stopPoints, 'routeOrdinal');\n\n      let index = 0;\n      sortedStopPoints.forEach(stopPoint => {\n        stopPoint.routeOrdinal = index;\n        index = index + 1;\n      });\n      trips.forEach(currentTrip => {\n        const id = currentTrip.get('id');\n        const idInt = id ? parseInt(id, 10) : null;\n        const pickOrdinal = newPickOrdinal + this.findTripAndStopType(sortedStopPoints, id, 'pick').routeOrdinal;\n        const dropOrdinal = newPickOrdinal + this.findTripAndStopType(sortedStopPoints, id, 'drop').routeOrdinal;\n        payloadData.push({\n          id: idInt,\n          pickOrdinal,\n          dropOrdinal\n        });\n      });\n      const result = yield tripTransferAdapter.postManualTransfer(payloadData, dispatchScheduleId, routeId ? parseInt(routeId, 10) : routeId);\n\n      if (!Ember.isEmpty(result.data)) {\n        const currentRouteSolution = result.data.attributes.sourceRoute;\n        const solutions = result.data.attributes.destinationRoutes; // get core entity records from solution result\n\n        return this.getRouteResults(solutions).then(() => {\n          this.set('currentRouteSolution', currentRouteSolution);\n          return solutions;\n        });\n      }\n\n      return;\n    }).keepLatest(),\n\n    async getRouteResults(solutions) {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      const solutionPromises = [];\n      solutions.forEach(solution => {\n        const routeId = solution.id;\n        solutionPromises.push(coreEntityPopulator.populateRtsRoute(routeId, {}));\n      });\n      await Promise.all(solutionPromises);\n    },\n\n    currentRouteImpact: Ember.computed('currentRouteSolution', function () {\n      const store = this.get('store');\n      const currentSolution = this.get('currentRouteSolution') || {};\n      const currentStops = this.get('currentDispatchRoute.orderedStopsWithGaragesAndBreaks') || []; // since hypo call does not return the route ordinal but\n      // return in order, we generate the ordinal ourselves\n\n      let routeOrdinal = 0; // @TODO we should refactor to make it more flexible for map context\n\n      const impact = Ember.Object.create({\n        routeOtp: currentSolution.otp,\n        otpDelta: currentSolution.otp.deltaValue,\n        before: {\n          otp: currentSolution.otp.originalValue,\n          stops: currentStops.map(stop => {\n            const stopPoint = store.peekRecord('stop-point', stop.id);\n            return _impactStop.default.create({\n              id: stop.id,\n              eta: stopPoint.get('eta'),\n              otp: stop.get('otp'),\n              promiseTime: stop.get('promisedTime'),\n              otpValue: stop.get('otpValue'),\n              polyline: null,\n              mrt: null,\n              routeOrdinal: stopPoint.get('routeOrdinal'),\n              stopPoint: stopPoint\n            });\n          })\n        },\n        after: {\n          otp: currentSolution.otp.newStatus,\n          stops: currentSolution.stops.map(stop => _impactStop.default.create({\n            id: stop.id,\n            eta: stop.eta.newValue,\n            otp: stop.otp.newStatus,\n            otpValue: stop.otp,\n            mrt: stop.otp.delta,\n            promiseTime: stop.promiseTime,\n            polyline: stop.polyline,\n            routeOrdinal: routeOrdinal++,\n            stopPoint: store.peekRecord('stop-point', stop.id)\n          }))\n        }\n      });\n      return impact;\n    }),\n    selectedRouteImpact: Ember.computed('currentSolutionDispatchRoute', function () {\n      const store = this.get('store');\n      const selectedRouteId = this.get('currentSolutionDispatchRoute.route.id');\n      const solutions = this.get('solutions') || [];\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n      const currentStops = this.get('currentSolutionDispatchRoute.orderedStopsWithGaragesAndBreaks') || []; // since hypo call does not return the route ordinal but\n      // return in order, we generate the ordinal ourselves\n\n      let routeOrdinal = 0; // @TODO we should refactor to make it more flexible for map context\n\n      const impact = Ember.Object.create({\n        routeOtp: selectedSolution.otp,\n        otpDelta: selectedSolution.otp.deltaValue,\n        before: {\n          otp: selectedSolution.otp.originalValue,\n          stops: currentStops.map(stop => {\n            const stopPoint = store.peekRecord('stop-point', stop.id);\n            return _impactStop.default.create({\n              id: stop.id,\n              eta: stopPoint.get('eta'),\n              otp: stop.get('otp'),\n              promiseTime: stop.get('promisedTime'),\n              otpValue: stop.get('otpValue'),\n              polyline: null,\n              mrt: null,\n              routeOrdinal: stopPoint.get('routeOrdinal'),\n              stopPoint: stopPoint\n            });\n          })\n        },\n        after: {\n          otp: selectedSolution.otp.newValue,\n          stops: selectedSolution.stops.map(stop => {\n            let stopPoint = null;\n\n            if (stop.id.includes('B')) {\n              const stopId = stop.id.replace('B', '');\n              stopPoint = store.peekRecord('route-break', stopId).stopPoint;\n            } else {\n              stopPoint = store.peekRecord('stop-point', stop.id);\n            }\n\n            const eta = stop.eta.newValue ? stop.eta.newValue : stop.eta.originalValue;\n            return _impactStop.default.create({\n              id: stop.id,\n              eta: eta,\n              otp: stop.otp.newStatus,\n              otpValue: stop.otp,\n              mrt: stop.otp.delta,\n              promiseTime: stop.promiseTime,\n              polyline: stop.polyline,\n              routeOrdinal: routeOrdinal++,\n              stopPoint: stopPoint\n            });\n          })\n        }\n      });\n      return impact;\n    }),\n\n    /**\n     * In the view impact section only those stops which belong to the selected trip should be highlighted in yellow color\n     * @param solutions\n     * @param period\n     * @param impact\n     * @param routeId\n     */\n    selectedStopsHighlight(solutions, impact) {\n      const selectedSolutionRoute = solutions;\n      const selectedTripIds = this.get('trips').map(ele => parseInt(ele.id, 10));\n      const filteredStops = selectedSolutionRoute.length > 0 ? selectedSolutionRoute.firstObject.stops.filter(ele => selectedTripIds.includes(ele.tripId)) : [];\n      const selectedOrdinals = filteredStops.map(ele => ele.id);\n      impact.filter(ordinal => selectedOrdinals.includes(ordinal.id)).forEach(stop => {\n        stop.set('selectedOrdinalRow', true);\n      });\n    },\n\n    chooseImpactByRoute(routeId) {\n      const solutions = this.get('solutions');\n      const period = this.get('selectedImpactPeriod');\n      const currentRoute = this.get('currentRoute');\n      const currentRouteSolution = this.get('currentRouteSolution');\n      const currentSortImpactPreview = this.get('currentSortImpactPreview');\n      let selectedSolution = null;\n      let impact = null; // Handle choosing the current route\n\n      if (Ember.isEmpty(solutions)) {\n        // eslint-disable-next-line new-cap\n        this.get('solutionImpactTable').setRows(Ember.A([]));\n        return;\n      }\n\n      if (routeId === currentRoute.get('dispatchRoute.route.id')) {\n        selectedSolution = currentRouteSolution;\n        if (Ember.isEmpty(selectedSolution)) return;\n        impact = this.get('currentRouteImpact');\n      } else {\n        selectedSolution = solutions.findBy('id', routeId);\n        if (Ember.isEmpty(selectedSolution)) return;\n        impact = this.get('selectedRouteImpact');\n      }\n\n      this.set('impact', impact);\n      this.selectedStopsHighlight(solutions, impact[period].stops);\n      this.get('solutionImpactTable').setRows(impact[period].stops);\n\n      if (currentSortImpactPreview) {\n        this.sortImpactPreview(currentSortImpactPreview, []);\n      }\n\n      return impact;\n    },\n\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const solutions = this.get('solutions');\n      const selectedSolutionId = this.get('currentSolutionDispatchRoute.route.id');\n      const selectedSolution = solutions.findBy('id', selectedSolutionId);\n      const recipe = selectedSolution.recipe;\n      const bulkOperationAdapter = this.get('store').adapterFor('bulk-operation');\n      yield bulkOperationAdapter.postRecipe(recipe);\n      yield this.persistAcceptedPromiseTimes(selectedSolution, this.get('trips'));\n    }),\n\n    selectSolution(routeId) {\n      const selectedRoute = this.get('store').peekRecord('route', routeId);\n      const selectedDispatchRoute = this.get('store').peekRecord('dispatch-route', selectedRoute.get('dispatchRoute.id'));\n      this.setProperties({\n        selectedSolutionId: routeId,\n        selectedImpactPeriod: 'after',\n        activeTabRouteId: routeId,\n        currentSolutionDispatchRoute: selectedDispatchRoute\n      });\n      this.chooseImpactByRoute(routeId);\n    },\n\n    observeSelectImpactPeriod: Ember.observer('selectedImpactPeriod', function () {\n      const period = this.get('selectedImpactPeriod');\n      const selectedRouteId = this.get('activeTabRouteId'); // TODO: Can the table rows be updated without an observer?\n\n      this.get('solutionImpactTable').setRows(this.get(`impact.${period}.stops`)); // revaluate impact\n\n      this.chooseImpactByRoute(selectedRouteId);\n    }),\n\n    selectTableSolutionRow(routeId) {\n      const rows = this.get('solutionPreviewTable.rows');\n      const currentSelectedRow = rows.findBy('selected');\n      const rowToSelect = rows.findBy('id', routeId);\n      if (rowToSelect === currentSelectedRow) return;\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n      }\n\n      rowToSelect.set('selected', true);\n      this.selectSolution(routeId);\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    selectOverrideSolution() {\n      const route = this.get('overrideSelectedRoute');\n      const routeId = route.get('id');\n      const routeName = route.get('name');\n      const trip = this.get('trips');\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n      const store = this.get('store');\n      const solutions = this.get('solutions');\n      const pickOrdinal = this.get('overrideSelectedPickOrder'); // clear error message\n\n      this.set('errorText');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      this.cursorWait();\n      this.get('fetchManualSolutionsTask').perform(trip, pickOrdinal, routeId).catch(err => {\n        // Try to be as robust as possible.  Log an error to console for discovery,\n        // but just use an empty solution set to unblock manually transferring\n        console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err)}`); // eslint-disable-line no-console\n\n        if (!Ember.isEmpty(err) && !Ember.isEmpty(err.payload)) {\n          const reason = err.payload.message || err.payload.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        return null;\n      }).then(solution => {\n        if (solution) {\n          const destinationRoutes = solution || [];\n          const foundSolution = solutions.findBy('id', destinationRoutes[0].id);\n\n          if (!foundSolution) {\n            this.get('solutions').pushObject(destinationRoutes[0]);\n            const solutionsTableRows = destinationRoutes.map(_ref3 => {\n              let {\n                id,\n                otp\n              } = _ref3;\n              const selectedRoute = store.peekRecord('route', id);\n              otp.originalValue = selectedRoute.get('otpValueWithSign') ? selectedRoute.get('otpValueWithSign') : otp.originalValue;\n              return {\n                id,\n                otp,\n                dispatchRoute: selectedRoute.get('dispatchRoute')\n              };\n            }); // this.get('solutionPreviewTable').push(solutionsTableRows[0]);\n\n            this.get('solutionPreviewTable').addRows(solutionsTableRows);\n          } else {\n            const solutionPreviewTableRow = this.get('solutionPreviewTable.rows').toArray();\n            const solutionIndex = solutions.findIndex(currSolution => currSolution.id === destinationRoutes[0].id);\n            const solutionPreviewTableRowIindex = solutionPreviewTableRow.findIndex(row => row.get('id') === destinationRoutes[0].id); // replace the solution with new data\n\n            solutions.splice(solutionIndex, 0, destinationRoutes[0]);\n            const solutionsTableRows = destinationRoutes.map(_ref4 => {\n              let {\n                id,\n                otp\n              } = _ref4;\n              const selectedRoute = store.peekRecord('route', id);\n              return {\n                id,\n                otp,\n                dispatchRoute: selectedRoute.get('dispatchRoute')\n              };\n            }); // replace the routes table rows with new solution rows\n\n            solutionPreviewTableRow.splice(solutionPreviewTableRowIindex, 0, solutionsTableRows[0]); // refresh stop table with new results\n\n            const selectedRoute = store.peekRecord('route', destinationRoutes[0].id);\n            this.set('currentSolutionDispatchRoute', selectedRoute.get('dispatchRoute'));\n          }\n\n          this.selectSolution(destinationRoutes[0].id);\n          this.selectTableSolutionRow(routeId);\n        }\n\n        this.cursorDefault();\n      }).catch(() => {\n        const tripIds = trip.map(x => x.tripId).toString();\n        this.get('notifications').warning(`Trip ${tripIds} cannot be transferred to route ${routeName}`);\n        this.cursorDefault();\n      });\n    },\n\n    resetSolutionTableData() {\n      this.set('overrideSelectedRoute', null);\n      this.set('overrideSelectedProvider', null);\n      this.set('errorText', null);\n      this.set('override', false); // reset routes table data\n\n      /* eslint-disable new-cap */\n\n      this.set('solutionPreviewTable.rows', Ember.A([]));\n      this.set('solutionImpactTable.rows', Ember.A([]));\n      this.set('solutions', Ember.A([]));\n      /* eslint-enable new-cap */\n\n      this.setProperties({\n        selectedSolutionId: null,\n        selectedImpactPeriod: 'after',\n        activeTabRouteId: null,\n        currentSolutionDispatchRoute: null\n      });\n    },\n\n    actions: {\n      onColumnSolutionClick(column) {\n        this.sortSolutionPreview(column);\n      },\n\n      onColumnImpactClick(column) {\n        this.sortImpactPreview(column, []);\n        this.set('currentSortImpactPreview', column);\n      },\n\n      onSolutionRowClick(row\n      /*, event */\n      ) {\n        const routeId = row.get('id'); // Reset the override\n\n        this.set('selectedOverrideSolutionId');\n        this.selectTableSolutionRow(routeId);\n      },\n\n      onRefreshClick() {\n        const isAnyManualSchedulingMode = this.get('isAnyManualSchedulingMode');\n        this.resetSolutionTableData();\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.set('override', isAnyManualSchedulingMode);\n        this.setupProvidersList();\n        this.setOverrideInitialData();\n      },\n\n      onSaveClick() {\n        const currentSolutionDispatchRoute = this.get('currentSolutionDispatchRoute');\n        const currentRouteId = this.get('currentRoute.name');\n        const title = 'Bulk Transfer Trip';\n        const tip = `Bulk Transfer trip from route ${currentRouteId} to ${currentSolutionDispatchRoute.get('route.name')}`;\n        const successMsg = 'Bulk Trip transfer was successful';\n        const errorMsg = 'Bulk Trip transfer failed';\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          tip,\n          title,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return this.get('saveTask').perform().then(() => {\n              this.get('notifications').success(successMsg);\n              tooltip.reset();\n              return this.onCloseClick();\n            }).catch(err => {\n              if (err && err.payload && err.payload.message) {\n                const reason = err.payload.message || err.payload.detail || errorMsg;\n                this.get('notifications').warning(reason);\n                this.get('tooltip').reset();\n                return;\n              }\n\n              this.get('notifications').warning(errorMsg);\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState'); // const bulkTripTransfer = this.get('bulkTripTransfer');\n\n        const currentSolutionRoute = this.get('currentSolutionRoute');\n        const solutions = JSON.parse(JSON.stringify(this.get('solutions')));\n        const currentRouteSolution = this.get('currentRouteSolution');\n        const overrideSelectedProvider = this.get('overrideSelectedProvider');\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n        const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n        const override = this.get('override'); // save current manual settings\n\n        currentState = {\n          currentSolutionRoute: (0, _unwrapProxy.unwrapProxy)(currentSolutionRoute),\n          solutions,\n          currentRouteSolution,\n          overrideSelectedProvider,\n          overrideSelectedRoute,\n          overrideSelectedPickOrder,\n          overrideSelectedDropOrder,\n          override\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onChangeProvider(provider) {\n        // clear selected route, pick order and drop order\n        this.set('overrideSelectedRoute', null);\n        this.set('overrideSelectedPickOrder', null);\n        this.set('overrideSelectedDropOrder', null);\n        this.set('overrideSelectedProvider', provider);\n      },\n\n      async onChangeRoute(route) {\n        // clear selected pick order and drop order\n        this.set('overrideSelectedPickOrder', null);\n        this.set('overrideSelectedDropOrder', null);\n        await this.get('coreEntityPopulator').populateRtsRoute(route.id, {});\n        this.set('overrideSelectedRoute', route);\n        const pickOrders = this.get('overridePickOrderOptions') || [];\n        const currentPickOrder = Math.max(...pickOrders);\n        this.set('overrideSelectedPickOrder', currentPickOrder);\n        this.set('overrideSelectedDropOrder', currentPickOrder + 1);\n        this.set('selectedImpactView', 'destination'); //to highlight the row\n\n        this.selectOverrideSolution(route);\n      },\n\n      onChangePickOrder(order) {\n        // clear selected drop order\n        this.set('overrideSelectedDropOrder', null);\n        this.set('overrideSelectedPickOrder', order);\n      },\n\n      onChangeDropOrder(order) {\n        this.set('overrideSelectedDropOrder', order); // this.selectOverrideSolution();\n\n        this.selectOverrideSolution(this.get('overrideSelectedRoute'));\n      },\n\n      selectSolutionRouteTab() {\n        const selectedRouteId = this.get('selectedSolutionId');\n        this.set('selectedImpactView', 'destination');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      selectCurrentRouteTab() {\n        const selectedRouteId = this.get('currentDispatchRoute.route.id');\n        this.set('selectedImpactView', 'current');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      refreshProviderAutoTransfer() {\n        const isAnyManualSchedulingMode = this.get('isAnyManualSchedulingMode');\n        this.setProperties({\n          override: null,\n          overrideSelectedRoute: null\n        });\n        this.resetSolutionTableData();\n        this.setOverrideInitialData();\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        const hasPastPickupTime = this.get('trips').some(trip => {\n          const pickDepartTime = trip.get('pickStopPoint.departTime'); // an unknown pickup time (no planned ETA and no promise time) is not a reason to block the search\n\n          if (!pickDepartTime) return false;\n          const mPickDepartTime = (0, _moment.default)(pickDepartTime);\n          return mPickDepartTime.isValid() && mPickDepartTime.isBefore((0, _moment.default)());\n        });\n\n        if (isAnyManualSchedulingMode) {\n          this.set('errorText', 'Unable to generate a solution preview for a manually scheduled trip. Use override to transfer trip.');\n        } else if (hasPastPickupTime) {\n          this.set('errorText', 'Unable to generate a solution preview because the pickup promise time of one or more trips has already passed. Use override to transfer trip.');\n        } else {\n          this.setupSolutions();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/bulk-trip-transfer/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stopColumns = _exports.solutionColumns = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const solutionColumns = [{\n    width: '40px',\n    resizable: false,\n    cellComponent: 'table/cells/radio-button'\n  }, {\n    label: 'Options',\n    sortType: 'number',\n    valuePath: 'dispatchRoute.route.name',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Current OTP',\n    sortType: 'number',\n    valuePath: 'otp.originalValue',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'New OTP',\n    sortType: 'number',\n    valuePath: 'otp.newValue',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Result',\n    sortType: 'number',\n    valuePath: 'otp.deltaValue',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Provider',\n    sortType: 'number',\n    valuePath: 'dispatchRoute.provider.name',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }];\n  _exports.solutionColumns = solutionColumns;\n  const stopColumns = [{\n    label: 'Trip ID',\n    sortType: 'number',\n    valuePath: 'stopPoint.trip.tripId',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '75px'\n  }, {\n    label: 'Last Name',\n    sortType: 'text',\n    valuePath: 'stopPoint.trip.rider.lastName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '90px'\n  }, {\n    label: 'Address',\n    sortType: 'text',\n    valuePath: 'stopPoint.place.address.simpleAddress',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '150px'\n  }, {\n    label: 'City',\n    sortType: 'text',\n    valuePath: 'stopPoint.place.address.locality',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '100px'\n  }, {\n    label: 'Stop',\n    sortType: 'text',\n    valuePath: 'stopPoint.stopType',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'ETA',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'eta',\n    cellComponent: 'table/cells/trip-eta',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'Promise Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedPromiseTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    format: 'HH:mm',\n    width: '115px'\n  }, {\n    label: 'Appt Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'stopPoint.computedApptTime',\n    cellComponent: 'table/cells/date-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    format: 'HH:mm',\n    width: '100px'\n  }, {\n    label: 'Stop Break Ord',\n    sortType: 'number',\n    valuePath: 'routeOrdinal',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '120px'\n  }];\n  _exports.stopColumns = stopColumns;\n});","define(\"adept-iq/pods/components/side-drawer/bulk-trip-transfer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"oySun7sP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\",\\\"route\\\",\\\"provider\\\",\\\"currentTrip\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"bulk-trip-transfer-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"onShrinkClick\\\",\\\"onRefreshClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"bulk-trip-transfer-layout \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L15:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L16:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container bulk-transfer\\\"],[11,\\\"style\\\",\\\"overflow-x: hidden;\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"trips\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"driver\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[22,8,[\\\"pickStopPoint\\\",\\\"etaNavStopPoint\\\",\\\"eta\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Status:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"otpLabel\\\"]],false],[0,\\\" \\\"],[1,[22,8,[\\\"otpValueWithSign\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[22,8,[\\\"dropStopPoint\\\",\\\"etaNavStopPoint\\\",\\\"eta\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Name:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Status:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"\\\"],[9],[1,[27,\\\"capitalize\\\",[[23,[\\\"currentRoute\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"status\\\"]]],null],false],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promise Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"formattedScheduledPromiseTime\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"driver\\\",\\\"driverId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"rider\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Request Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[22,8,[\\\"booking\\\",\\\"firstLeg\\\",\\\"requestTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Anchor:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"if\\\",[[22,8,[\\\"anchorStop\\\",\\\"isPick\\\"]],\\\"pick\\\",\\\"drop\\\"],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"hr\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L64:C7) \\\"],null]],[[\\\"isCollapsible\\\"],[false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[9],[7,\\\"input\\\"],[12,\\\"checked\\\",[21,\\\"override\\\"]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isAnyManualSchedulingMode\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"override\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" Override\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Manually select a route to Bulk transfer the trip. Route will be added to \\\\\\\"Solution Preview\\\\\\\"\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector half \\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideProviderOptions\\\"]],[23,[\\\"isNotOverride\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedProvider\\\"]],\\\"Select provider\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector half\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"mr-4\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideRouteOptions\\\"]],[23,[\\\"isNotOverride\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedRoute\\\"]],\\\"Select Route\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRoute\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L106:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Solution Preview\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"The lower the OTP value the better the solution.\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"provider-solution-preview\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\" \\\\n        \\\"],[1,[27,\\\"form-components/multi-select-dropdown\\\",null,[[\\\"enumList\\\",\\\"allSelectedTitle\\\",\\\"multipleSelectedTitle\\\",\\\"isObjectDisabled\\\"],[[23,[\\\"providersList\\\"]],\\\"All Providers\\\",\\\"Multiple\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isAnyManualSchedulingMode\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isAnyManualSchedulingMode\\\"]]],null]],[11,\\\"class\\\",\\\"provider-solution-button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"refreshProviderAutoTransfer\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionPreviewTable\\\"]]],[[\\\"height\\\"],[\\\"100px\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L128:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnSolutionClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L135:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"tableActions\\\",\\\"multiSelect\\\",\\\"onRowClick\\\"],[false,[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L143:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionPreviewTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L149:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L157:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",true]],{\\\"statements\\\":[[0,\\\"     \\\"],[7,\\\"p\\\"],[9],[0,\\\"Alternate between before and after to see how trip transfer affects the route\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"trip-transfer-tabs\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"selectedSolutionId\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Route \\\"],[1,[23,[\\\"selectedSolutionDispatchRoute\\\",\\\"route\\\",\\\"name\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"selectSolutionRouteTab\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"currentDispatchRoute\\\",\\\"route\\\",\\\"id\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Previous Route\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentRouteTab\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-impact-bar\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"toggle-switch\\\",null,[[\\\"toggleProperty\\\",\\\"offValue\\\",\\\"offLabel\\\",\\\"onValue\\\",\\\"onLabel\\\"],[[23,[\\\"selectedImpactPeriod\\\"]],\\\"before\\\",\\\"Before\\\",\\\"after\\\",\\\"After\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionImpactTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L180:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnImpactClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L187:C11) \\\"],null]],[[\\\"rowComponent\\\",\\\"canSelect\\\",\\\"multiSelect\\\"],[[27,\\\"component\\\",[[23,[\\\"rowComponent\\\"]]],null],false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L194:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L200:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchVehiclesTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionImpactTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs' @ L206:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"The Bulk trip transfer will result in the late route \\\"],[7,\\\"strong\\\"],[9],[1,[21,\\\"currentRouteImpactScoreType\\\"],false],[10],[0,\\\" \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[0,\\\" and the new route \\\"],[1,[21,\\\"selectedDestinationRouteName\\\"],false],[0,\\\" \\\"],[1,[21,\\\"selectedGainType\\\"],false],[0,\\\" a total of \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/bulk-trip-transfer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/cancel-trip-form/cancel-related-trips/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\", \"lodash\"], function (_exports, _moment, _environment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    relatedTrips: null,\n    isLateCancel: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    relatedTripDisplayGroups: Ember.computed('relatedTrips.@each.id', function () {\n      const relatedTrips = this.get('relatedTrips');\n      const sortedRelatedTrips = relatedTrips.sortBy('schedule.displayName', 'id');\n\n      const groupCollection = _lodash.default.groupBy(sortedRelatedTrips, trip => {\n        const scheduleStart = trip.get('schedule.start');\n        return (0, _moment.default)(scheduleStart).format(_environment.default.dateTimeFormat.dateMoment);\n      });\n\n      const groups = _lodash.default.map(groupCollection, (trips, title) => {\n        return {\n          title,\n          trips\n        };\n      });\n\n      return groups;\n    }),\n    relatedTripsExist: Ember.computed('relatedTrips.@each.id', function () {\n      const relatedTripsLength = this.get('relatedTrips.length');\n      return relatedTripsLength > 0;\n    }),\n    actions: {\n      onSelectedTrip(trip, event) {\n        const isChecked = event.target.checked;\n        trip.set('isChecked', isChecked);\n        const isAllTripsChecked = this.get('relatedTrips').isEvery('isChecked');\n        const isAllChecked = this.get('isAllChecked');\n        if (isAllTripsChecked && !isAllChecked || !isAllTripsChecked && isAllChecked) this.toggleProperty('isAllChecked');\n      },\n\n      onCheckAllTrips() {\n        const relatedTrips = this.get('relatedTrips');\n        this.toggleProperty('isAllChecked');\n        const isChecked = this.get('isAllChecked');\n        relatedTrips.forEach(relatedTrip => {\n          if (relatedTrip.isLateCancel === this.isLateCancel) {\n            relatedTrip.set('isChecked', isChecked);\n          }\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/cancel-trip-form/cancel-related-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"b+Do1lZv\",\n    \"block\": \"{\\\"symbols\\\":[\\\"group\\\",\\\"trip\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"cancel-trip-para\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[9],[0,\\\"This rider has additional trips that are not yet started. Select any additional trip(s) to cancel.\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLateCancel\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[9],[0,\\\"Trips that are not considered a late cancel will have to be canceled separately.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[9],[0,\\\"Trips that will be considered a late cancel will have to be canceled separately.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form  w-100 m-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"relatedTripsExist\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"delete-sub\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-1\\\",[23,[\\\"isAllChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAllTrips\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"strong\\\"],[9],[0,\\\"All\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"relatedTripDisplayGroups\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"ml-4 d-block\\\"],[9],[7,\\\"strong\\\"],[9],[1,[22,1,[\\\"title\\\"]],false],[10],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,1,[\\\"trips\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"ml-4 d-block\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"disabled\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-2\\\",[22,2,[\\\"isChecked\\\"]],[27,\\\"not-eq\\\",[[22,2,[\\\"isLateCancel\\\"]],[23,[\\\"isLateCancel\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectedTrip\\\",[22,2,[]]],null]]]],false],[0,\\\"\\\\n                  \\\"],[7,\\\"strong\\\"],[9],[0,\\\"Trip \\\"],[1,[22,2,[\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"span\\\"],[9],[0,\\\" / Request Time: \\\"],[1,[22,2,[\\\"cancelTripFormattedRequestTime\\\"]],false],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,2,[\\\"cancelTripFormattedPromiseTime\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"span\\\"],[9],[0,\\\" / Promise Time: \\\"],[1,[22,2,[\\\"cancelTripFormattedPromiseTime\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[10],[0,\\\"  \\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/cancel-trip-form/cancel-related-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/cancel-trip-form/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/cancel-trip-form/config\", \"moment\", \"ember-concurrency\", \"ember-changeset\", \"ember-changeset-validations\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/mixins/async-booking-operation\", \"adept-iq/pods/components/side-drawer/cancel-trip-form/validations\", \"lodash\"], function (_exports, _config, _moment, _emberConcurrency, _emberChangeset, _emberChangesetValidations, _unwrapProxy, _asyncScheduleOperation, _asyncBookingOperation, _validations, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CANCELABLE_TRIP_STATUSES = ['Illegal', 'Waitlisted', 'Scheduled', 'Dispatched', 'Callback', 'En route'];\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, _asyncBookingOperation.default, {\n    editableSections: null,\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    routeexecevent: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    bookingService: Ember.inject.service('booking'),\n    apiContext: Ember.inject.service(),\n    errors: null,\n    currentState: null,\n    onShrinkClick: null,\n    trip: Ember.computed.alias('stackFrame.options.trip'),\n    tripId: Ember.computed.alias('stackFrame.options.tripId'),\n    segment: Ember.computed.readOnly('stackFrame.options.segment'),\n    booking: Ember.computed.readOnly('stackFrame.options.booking'),\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n    lateCancel: Ember.computed.readOnly('stackFrame.options.lateCancel'),\n    lateCancelCutoffTime: Ember.computed.readOnly('stackFrame.options.lateCancelCutoffTime'),\n    componentName: 'cancelTrip',\n    isAllChecked: false,\n    relatedTrips: null,\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const pendingCancellationRecord = record;\n\n      if (pendingCancellationRecord.get('isNew')) {\n        pendingCancellationRecord.setProperties({\n          cancelType: null,\n          notes: null\n        });\n      }\n\n      return new _emberChangeset.default(pendingCancellationRecord, (0, _emberChangesetValidations.default)(_validations.default), _validations.default);\n    },\n\n    async init() {\n      this._super(...arguments);\n\n      const segment = this.get('segment');\n      const sectionId = this.get('sectionId');\n\n      const editableSections = _config.default.editableSections.filter(section => sectionId === section.id && section.id !== 'readOnly');\n\n      segment.set('currentTrip', this.get('trip')); // regarding NYAAR-16095\n\n      this.set('segment.tripId', this.get('tripId'));\n      this.set('editableSections', editableSections);\n      this.set('segmentChangeSet', this.setDefaultProperties(segment));\n      await this.get('store').findRecord('rider', segment.get('leg.rider.id')); // regarding NYAAR-20171\n\n      await this.setRelatedTrips();\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    willDestroyElement() {\n      this._super(...arguments);\n\n      const currentState = this.get('currentState');\n\n      if (!currentState) {\n        const relatedTrips = _lodash.default.defaultTo(this.get('relatedTrips'), []);\n\n        relatedTrips.setEach('isChecked', false);\n      }\n    },\n\n    relatedTripsExist: Ember.computed('relatedTrips.@each.id', function () {\n      const relatedTripsLength = this.get('relatedTrips.length');\n      return relatedTripsLength > 0;\n    }),\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        const cancelType = currentState.segment.get('cancelType'); //NYAAR-20226-if the cancel type is undefined we dont need to set that\n\n        if (cancelType) {\n          this.set('segmentChangeSet.cancelType', cancelType);\n        }\n\n        this.set('segmentChangeSet.cancelNotes', currentState.segment.get('cancelNotes'));\n        this.set('errors', currentState.segment.get('errors'));\n        this.set('isAllChecked', currentState.isAllChecked);\n      }\n\n      this.set('currentState', null);\n    },\n\n    saveCancelRecordFunction(records) {\n      const notifications = this.get('notifications');\n      const topActiveContext = this.get('activeContext.topActiveContext');\n      const trip = this.get('trip');\n      const routeId = trip.get('route.id');\n      return new Promise((resolve, reject) => {\n        if (!Ember.isEmpty(records)) {\n          records.forEach(record => {\n            return this.callCancelTripApi(record).then(async () => {\n              record.set('isForceDirty', false); //refreshing booking and trips table\n\n              if (this.get('workspace.isBookingDashboard')) {\n                const [bookings, trips] = await this.get('apiContext').loadBookingsForSelectedExternalRiders();\n                this.get('apiContext').updateTripsFromIQUXService(trips);\n                this.set('bookingService.currentBookings', bookings);\n                this.set('bookingService.currentTrips', trips);\n              } else {\n                topActiveContext.get('refreshTableContent').perform(['route']); //NYAAR-19441:To check whether the trip has routeId(Trips with callback,illegal and waitlist status doesn't have routeId)\n\n                if (routeId) {\n                  await this.get('bookingService').routeTripQuery(routeId);\n                }\n              }\n\n              notifications.success('Trip successfully canceled');\n              resolve();\n            }).catch(function (error) {\n              notifications.warning('Failed to cancel Trip');\n              reject(error);\n            });\n          });\n        }\n      });\n    },\n\n    callCancelTripApi(record) {\n      return this.performTripCancellation.perform(record);\n    },\n\n    performTripCancellation: (0, _emberConcurrency.task)(function* (record) {\n      const routeExecEvent = this.get('routeexecevent');\n      const tripIds = this.getSelectedTripIds();\n      const booking = record.get('leg.booking');\n      const cancelData = routeExecEvent.cancelData();\n      const operationData = routeExecEvent.prepareCancelDataForTrips(cancelData, record, this.get('lateCancel'), tripIds);\n\n      try {\n        const options = {\n          operationData,\n          outputResult: true\n        };\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createBookingAsyncOperation.perform(booking, 'bookingCancellation', options);\n\n        if (!isJobSuccess) {\n          throw new Error(results);\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve();\n    }).drop(),\n\n    onSaveClick() {\n      const saveCancelRecordFunction = this.get('saveCancelRecordFunction').bind(this);\n      const tooltip = this.get('tooltip');\n      const segment = (0, _unwrapProxy.unwrapProxy)(this.get('segmentChangeSet'));\n      const tripIds = this.getSelectedTripIds();\n      const onCloseClick = this.onCloseClick;\n\n      if (this.validateRecords([segment])) {\n        tooltip.pushConfirmation({\n          tip: `Are you sure you want to cancel trip(s) ${tripIds.join(', ')}?`,\n          title: 'Cancel Trip',\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return saveCancelRecordFunction([segment]).then(() => {\n              onCloseClick();\n            }).catch(e => {\n              tooltip.reset();\n              console.warn(e); //eslint-disable-line\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      }\n    },\n\n    validateRecords(records) {\n      let valid = true;\n      this.set('errors', []);\n      records.forEach(record => {\n        record.validate();\n\n        if (record.get('isInvalid')) {\n          valid = false;\n          const errors = record.get('errors');\n          this.set('errors', errors);\n        }\n      });\n      return valid;\n    },\n\n    onUndoClick(records) {\n      records.forEach(record => {\n        record.rollback();\n      });\n      this.set('errors', null);\n    },\n\n    //set the related trips using selected trip's booking\n    async setRelatedTrips() {\n      const tripId = this.get('trip.id');\n      const schedule = this.get('trip.schedule');\n      const riderId = this.get('segment.leg.rider.id');\n      const allTrips = await this.get('apiContext').getTripsForRider(riderId, CANCELABLE_TRIP_STATUSES, schedule);\n      const relatedTrips = allTrips.filter(trip => trip.get('id') !== tripId); // check relatedTrips lateCancel status\n\n      relatedTrips.forEach(relatedTrip => {\n        const promiseTime = relatedTrip.get('promiseTime');\n        const tripTime = promiseTime ? (0, _moment.default)(promiseTime) : (0, _moment.default)(relatedTrip.get('segment.leg.requestTime'));\n        relatedTrip.set('isLateCancel', tripTime.isBefore(this.lateCancelCutoffTime));\n      });\n      this.set('relatedTrips', relatedTrips);\n    },\n\n    //get the checked(selected) trip id's for setting the cancel trip payload\n    getSelectedTripIds() {\n      const tripId = this.get('trip.id');\n      const relatedTrips = this.get('relatedTrips');\n      const relatedTripIds = relatedTrips ? relatedTrips.filter(trip => trip.get('isChecked')).map(trip => trip.get('id')) : [];\n\n      const selectedTripIds = _lodash.default.union([tripId], relatedTripIds);\n\n      return selectedTripIds;\n    },\n\n    actions: {\n      onCloseClick() {\n        this.onCloseClick();\n      },\n\n      onUndoClick() {\n        const segmentChangeSet = Ember.makeArray(this.get('segmentChangeSet'));\n        this.onUndoClick(segmentChangeSet);\n      },\n\n      onValueChange(valuePath, options) {\n        const segmentChangeSet = this.get('segmentChangeSet');\n        const value = options;\n        segmentChangeSet.set(valuePath, value);\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const segment = (0, _unwrapProxy.unwrapProxy)(this.get('segmentChangeSet'));\n        const isAllChecked = this.get('isAllChecked'); // save current manual settings\n\n        currentState = {\n          segment,\n          isAllChecked: isAllChecked\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onSaveClick() {\n        return this.onSaveClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/cancel-trip-form/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // @TODO refactor the form components to change the editable property into a disabled property as editable is an inverse boolean problem\n  var _default = {\n    editableSections: [{\n      title: 'Cancel Reason',\n      fields: [{\n        id: 'cancelType',\n        type: 'enum',\n        label: 'Reason',\n        valuePath: 'cancelType',\n        cellDesc: 'cancelType',\n        editable: false,\n        hidden: false,\n        extra: {\n          optionModelName: 'cancel-type',\n          optionSearchPath: 'displayName',\n          optionDisplayName: 'displayName'\n        }\n      }, {\n        id: 'notes',\n        type: 'text',\n        editable: false,\n        readonlyCell: false,\n        label: 'Notes',\n        valuePath: 'cancelNotes'\n      }]\n    }, {\n      title: 'Trip Information',\n      fields: [{\n        id: 'riderFirstName',\n        label: 'First Name',\n        type: 'text',\n        valuePath: 'leg.rider.firstName',\n        editable: false,\n        readonlyCell: true\n      }, {\n        id: 'riderLastName',\n        label: 'Last Name',\n        type: 'text',\n        valuePath: 'leg.rider.lastName',\n        editable: false,\n        readonlyCell: true\n      }, {\n        id: 'externalId',\n        label: 'Trip ID',\n        valuePath: 'tripId',\n        type: 'text',\n        editable: false,\n        readonlyCell: true\n      }, {\n        id: 'requestedTime',\n        label: 'Promise Time',\n        type: 'text',\n        valuePath: 'currentTrip.cancelTripFormattedPromiseTime',\n        editable: false,\n        readonlyCell: true\n      }, {\n        id: 'pickupaddress',\n        label: 'Pick Up Address ',\n        type: 'text',\n        valuePath: 'pick.place.address.simpleAddress',\n        editable: false,\n        readonlyCell: true\n      }, {\n        id: 'dropaddress',\n        label: 'Drop Off Address',\n        type: 'text',\n        valuePath: 'drop.place.address.simpleAddress',\n        editable: false,\n        readonlyCell: true\n      }, {\n        id: 'anchor',\n        label: 'Anchor',\n        type: 'text',\n        valuePath: 'anchor',\n        editable: false,\n        readonlyCell: true\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/cancel-trip-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XIEmQmpX\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"section\\\",\\\"field\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"cancel-trip-form\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-header-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/cancel-trip-form/template.hbs' @ L7:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-subheader\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Passenger ID: \\\"],[1,[23,[\\\"segmentChangeSet\\\",\\\"leg\\\",\\\"rider\\\",\\\"riderId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Trip ID: \\\"],[1,[23,[\\\"trip\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/cancel-trip-form/template.hbs' @ L26:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[\\\"validation\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"editableSections\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/cancel-trip-form/template.hbs' @ L42:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[[22,2,[\\\"title\\\"]],true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cancel-trip-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,2,[\\\"fields\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-row\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[0,\\\" \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"components/form-components/\\\",[22,3,[\\\"type\\\"]]],null]],[[\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"readonlyCell\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"segmentChangeSet\\\"]],[22,3,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,3,[\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[22,3,[\\\"editable\\\"]]],null],[27,\\\"readonly\\\",[[22,3,[\\\"readonlyCell\\\"]]],null],[27,\\\"readonly\\\",[[22,3,[\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,3,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"relatedTripsExist\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/cancel-trip-form/template.hbs' @ L62:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Cancel Other Trips\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer/cancel-trip-form/cancel-related-trips\\\",null,[[\\\"relatedTrips\\\",\\\"isLateCancel\\\",\\\"isAllChecked\\\"],[[23,[\\\"relatedTrips\\\"]],[23,[\\\"lateCancel\\\"]],[23,[\\\"isAllChecked\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/cancel-trip-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/cancel-trip-form/validations\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // validators/cancel-trip-form\n  // validation used for segment model\n  var _default = {\n    cancelType: [(0, _validators.validatePresence)({\n      presence: true,\n      description: 'Reason',\n      message: '{description} cannot be blank'\n    })]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/compose-role/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/config/api-urls\"], function (_exports, _emberConcurrency, _lodash, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['compose-role-side-drawer'],\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    onShrinkClick: null,\n    onCloseClick: null,\n    roles: Ember.computed.readOnly('stackFrame.options.roles'),\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.refresh();\n    },\n\n    canSave: Ember.computed('roles.@each.displayName', function () {\n      const roles = this.get('roles');\n      const canSave = roles.every(role => {\n        const displayName = role.get('displayName');\n\n        if (displayName) {\n          return displayName.length > 0;\n        }\n\n        return false;\n      });\n      return canSave;\n    }),\n\n    initSections() {\n      const sections = this.preparePermissionSections();\n      this.set('sections', sections);\n    },\n\n    createPermissionSection(permissions) {\n      if (permissions.length === 0) return;\n      const permission = permissions[0];\n      return {\n        title: Ember.String.capitalize(`${permission.category} Permissions`),\n        fields: [{\n          id: `${permission.category}-Permissions`,\n          type: 'permission-section',\n          valuePath: 'permissionHash',\n          modelName: 'sso-permission',\n          isLabel: false,\n          extra: {\n            category: `${permission.category}`,\n            groupedPermissions: permissions\n          }\n        }]\n      };\n    },\n\n    preparePermissionSections() {\n      const groupedPermissions = this.get('groupedPermissions');\n      const permKeys = (0, _lodash.keys)(groupedPermissions) || [];\n      this.set('categories', permKeys);\n      const sections = permKeys.map(key => {\n        return this.createPermissionSection(groupedPermissions[key]);\n      });\n      return sections;\n    },\n\n    refresh() {\n      this.get('refreshTask').perform();\n    },\n\n    reset() {},\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      yield this.get('refreshPermissionTask').perform();\n    }),\n    refreshPermissionTask: (0, _emberConcurrency.task)(function* () {\n      const roles = this.get('roles') || [];\n      const permissions = yield this.get('store').findAll('sso-permission');\n      const groupedPermissions = (0, _lodash.groupBy)(permissions.toArray(), 'category');\n      this.set('permissions', permissions);\n      this.set('groupedPermissions', groupedPermissions);\n      roles.forEach(role => {\n        role.reconfigurePermissionHash(permissions);\n      });\n      this.initSections();\n    }),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      // using custom api call because sso api is non standard\n      // and in-consistent.\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      const roles = this.get('roles') || [];\n      const notifications = this.get('notifications');\n      const rolePermAssociations = yield ajax.request(`${_apiUrls.API.ssoService.host}/role-permission`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n      yield Promise.all(roles.map(async record => {\n        let currentPerms = record.get('permissionList');\n        const displayName = record.get('displayName');\n        const roleName = record.get('roleName') ? record.get('roleName') : record.get('displayName').replace(/\\s+/, '');\n        const rolePermAssocByRole = record.get('isNew') ? [] : rolePermAssociations.filter(rolePerm => rolePerm.roleId === roleName);\n        currentPerms = currentPerms.sort((a, b) => a - b); // create a new role\n\n        if (record.get('isNew')) {\n          const json = {\n            roleName: roleName,\n            status: 'active',\n            displayName\n          };\n          await ajax.post(`${_apiUrls.API.ssoService.host}/role`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: json\n          }).catch(e => {\n            notifications.warning(`Unable to Create Role ${displayName}`);\n            return Promise.reject(e); // failed to create role, won't be able to assign permissions\n\n            console.error(e); // eslint-disable-line\n          });\n        } // otherwise patch the role\n        else {\n          const json = {\n            displayName,\n            status: 'active'\n          };\n          await ajax.patch(`${_apiUrls.API.ssoService.host}/role/${roleName}`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: json\n          }).catch(e => {\n            notifications.warning(`Unable to Update Role ${displayName}`);\n            console.error(e); // eslint-disable-line\n          });\n        }\n\n        const newPermList = Object.entries(record.get('permissionHash')).map(_ref => {\n          let [key, value] = _ref;\n\n          if (value) {\n            return parseInt(key, 10);\n          }\n\n          return null;\n        }).filter(val => Ember.isPresent(val)).sort((a, b) => a - b);\n        const removedPermList = Object.entries(record.get('permissionHash')).map(_ref2 => {\n          let [key, value] = _ref2;\n\n          if (!value) {\n            return parseInt(key, 10);\n          }\n\n          return null;\n        }).filter(val => Ember.isPresent(val)).sort((a, b) => a - b); // remove any permissions\n\n        const removedPermissions = (0, _lodash.intersection)(currentPerms, removedPermList) || [];\n        await removedPermissions.reduce((acu, permId) => {\n          const removedPermAssocId = rolePermAssocByRole.find(rolePerm => rolePerm.permissionId === permId);\n          return acu.then(() => ajax.del(`${_apiUrls.API.ssoService.host}/role-permission/${removedPermAssocId}`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          }).catch(e => {\n            notifications.warning(`Unable to Remove Permission ${permId}`);\n            console.error(e); // eslint-disable-line\n          }));\n        }, Promise.resolve()); // add any new permissions\n\n        const newPermissions = (0, _lodash.difference)(newPermList, currentPerms) || [];\n        return newPermissions.reduce((acu, permId) => {\n          const json = {\n            roleId: roleName,\n            permissionId: permId\n          };\n          return acu.then(() => ajax.post(`${_apiUrls.API.ssoService.host}/role-permission`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: json\n          }).catch(e => {\n            notifications.warning(`Unable to Save New Permission ${permId}`);\n            console.error(e); // eslint-disable-line\n          }));\n        }, Promise.resolve());\n      })).then(async () => {\n        await this.get('store').findAll('sso-role');\n        await this.get('workspaceContext').get('reloadWorkspace').perform();\n        return this.get('activeContext.topActiveContext').refreshTableContent.perform(['sso-role']);\n      }).catch(e => {\n        console.error(e); // eslint-disable-line\n      });\n    }),\n    actions: {\n      onValueChange(record, valuePath, options) {\n        const value = options;\n        record.set(valuePath, value);\n      },\n\n      onPermChange(record, valuePath, options) {\n        const permHash = record.get(valuePath);\n        const {\n          id,\n          state\n        } = options;\n        Ember.set(permHash, id, state);\n        record.set(valuePath, permHash);\n      },\n\n      onSaveRoleButtonClick() {\n        const tooltip = this.get('tooltip');\n        const role = this.get('roles')[0];\n        const isNewRole = role.get('isNew');\n        const tip = isNewRole ? 'Create Role and Permissions' : 'Update Role and Permissions';\n        const notification = isNewRole ? 'Created Role and Permissions' : 'Updated role and permission';\n        tooltip.pushConfirmation({\n          tip,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return this.get('saveTask').perform().then(() => {\n              this.get('notifications').success(`${notification} successfully`);\n              return this.onCloseClick();\n            }).catch(() => {\n              this.get('notifications').warning(`${notification} failed`);\n            }).finally(() => {\n              return tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          }\n        });\n      },\n\n      onRefreshButtonClick() {\n        this.refresh();\n      },\n\n      onCloseClick() {\n        const roles = this.get('roles') || []; // rollback any dirty attributes unless it's new, remove from store\n\n        roles.forEach(role => {\n          role.rollbackAttributes();\n        });\n        this.onCloseClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/compose-role/permission-section/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['permission-section'],\n    record: null,\n    extra: null,\n    disabled: false,\n    toggleAll: false,\n    valuePath: null,\n    store: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    category: Ember.computed.readOnly('extra.category'),\n    permissions: Ember.computed.readOnly('extra.groupedPermissions'),\n    rolePermHash: Ember.computed.readOnly('record.permissionHash'),\n    actions: {\n      onCheckboxChange(record, valuePath) {\n        const onChange = this.get('onChange');\n        const switchState = !record.get('state');\n        const id = parseInt(record.get('id'), 10);\n        const options = {\n          id,\n          state: switchState\n        };\n        onChange(valuePath, options);\n        record.set('state', switchState);\n      },\n\n      onToggleAll(checkbox, records, valuePath) {\n        const toggle = !checkbox;\n        const onChange = this.get('onChange');\n\n        if (records) {\n          records.forEach(record => {\n            const id = parseInt(record.get('id'), 10);\n            const options = {\n              id,\n              state: toggle\n            };\n            record.set('state', toggle);\n            onChange(valuePath, options);\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/compose-role/permission-section/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"AxH5JBYk\",\n    \"block\": \"{\\\"symbols\\\":[\\\"permission\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permissions-table\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permission-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Enable / Disable \\\"],[1,[21,\\\"category\\\"],false],[0,\\\" permissions\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"permission-input\\\",\\\"checkbox\\\",[23,[\\\"toggleAll\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onToggleAll\\\",[23,[\\\"toggleAll\\\"]],[23,[\\\"permissions\\\"]],[23,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"permissions\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permission-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[22,1,[\\\"description\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"permission-input\\\",\\\"checkbox\\\",[27,\\\"get\\\",[[23,[\\\"rolePermHash\\\"]],[22,1,[\\\"parsedId\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],[23,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/compose-role/permission-section/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/compose-role/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"/i4MW1NV\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"role\\\",\\\"section\\\",\\\"field\\\",\\\"role\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/compose-role/template.hbs' @ L2:C4) \\\"],null]],[[\\\"title\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRoleButtonClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/compose-role/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"roles\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"span\\\"],[9],[0,\\\"Role Name: \\\"],[1,[22,5,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/compose-role/template.hbs' @ L17:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"roles\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"compose-role-layout\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/compose-role/template.hbs' @ L24:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Role Information\\\",true]],{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"role-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[0,\\\"Role Name\\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/compose-role/text\\\"],null]],[[\\\"record\\\",\\\"value\\\",\\\"valuePath\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[22,2,[]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],\\\"displayName\\\"],null]],null],[27,\\\"readonly\\\",[\\\"displayName\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,2,[]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"sections\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/compose-role/template.hbs' @ L38:C13) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[[22,3,[\\\"title\\\"]],true]],{\\\"statements\\\":[[4,\\\"each\\\",[[22,3,[\\\"fields\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/compose-role/\\\",[22,4,[\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"value\\\",\\\"valuePath\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[22,2,[]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],[22,4,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,4,[\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[22,4,[\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPermChange\\\",[22,2,[]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/compose-role/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/compose-role/text/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['role-name-input'],\n    value: null,\n    disabled: false,\n    actions: {\n      onInput(value) {\n        this.get('onChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/compose-role/text/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"mLaV3VII\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/compose-role/text/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/donut-chart-settings/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/donut-chart-settings/config\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _config, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    dataType: null,\n    sourceOptions: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('sourceOptions', _config.default);\n      const dataType = this.get('widget.state.dataType');\n      this.set('dataType', dataType);\n\n      if (Ember.isPresent(dataType)) {\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n      }\n    },\n\n    actions: {\n      onTypeSelect(dataType) {\n        this.set('dataType', dataType);\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n        this.get('widget').mergeState({\n          dataType\n        });\n      },\n\n      setVisualOptionVisibility(selected, event) {\n        const dataType = this.get('dataType');\n        Ember.set(selected, 'isChecked', event.target.checked);\n        this.get('widget').mergeState({\n          dataType\n        });\n      },\n\n      onTitleInput(data) {\n        this.set('dataType.title', data);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setDisplayOptionVisibility(displaySet, selected) {\n        Ember.set(displaySet, 'selected', selected); // Don't want to merge `valueCategories`.\n\n        Ember.set(this.get('widget'), 'state.dataType', this.get('dataType'));\n        this.get('widget').notifyPropertyChange('state');\n      },\n\n      setSortOrder(selected) {\n        this.set('dataType.sortOrder.selected', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setLegendPlacement(selected) {\n        this.set('dataType.legendPlacement.selected', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onFilterValueChange(column, index, event) {\n        let filterValues = column.get('filterValues') || [];\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value; // Update the displayed filter column.\n\n        Ember.set(column, 'filterValues', filterValues);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterValues`, filterValues);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onSelectFilterType(column, filterType) {\n        // Update the displayed filter column.\n        Ember.set(column, 'filterTypeId', filterType.id);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterTypeId`, filterType.id);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/donut-chart-settings/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const COLUMNS = {\n    routeColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          format: 'hh:mm A',\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    },\n    tripColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    },\n    stopColumns: {\n      type: {\n        id: 'type',\n        config: {\n          id: 'type',\n          type: 'text',\n          label: 'Type',\n          valuePath: 'bsStop.type'\n        },\n        filterTypeId: 'stringNotEq',\n        filterValues: ['route-start']\n      }\n    }\n  };\n  const VisualOptions = [{\n    id: 'value',\n    name: 'Show Value',\n    isChecked: true\n  }, {\n    id: 'percentage',\n    name: 'Show Percentage',\n    isChecked: false\n  }, {\n    id: 'total',\n    name: 'Show Total',\n    isChecked: true\n  }];\n  const LegendPlacement = {\n    selected: {\n      name: 'Display On Right',\n      position: 'right'\n    },\n    options: [{\n      name: 'Display On Right',\n      position: 'right'\n    }, {\n      name: 'Display On Left',\n      position: 'left'\n    }, {\n      name: 'Display On Top',\n      position: 'top'\n    }, {\n      name: 'Display On Bottom',\n      position: 'bottom'\n    }]\n  };\n  const SortOrder = {\n    selected: {\n      name: 'Ascending',\n      sortAsc: true\n    },\n    options: [{\n      name: 'Ascending',\n      sortAsc: true\n    }, {\n      name: 'Descending',\n      sortAsc: false\n    }]\n  };\n  var _default = [{\n    name: 'Trips',\n    modelName: 'iq-trip',\n    columns: COLUMNS.tripColumns,\n    displayOptions: [{\n      id: 'slicedBy',\n      name: 'Sliced By',\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }]\n      },\n      options: [{\n        id: 'status',\n        name: 'Trip Status',\n        valueKey: 'status',\n        valueCategories: [{\n          label: 'Scheduled',\n          value: 'Scheduled'\n        }, {\n          label: 'Waitlist',\n          value: 'Waitlist'\n        }]\n      }, {\n        id: 'otp',\n        name: 'OTP Status',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }]\n      }, {\n        id: 'type',\n        name: 'Trip Type',\n        valueKey: 'type',\n        valueCategories: [{\n          label: 'Subscription',\n          value: 'subscription'\n        }, {\n          label: 'Single',\n          value: 'single'\n        }]\n      }]\n    }],\n    title: '',\n    visualOptions: VisualOptions,\n    sortOrder: SortOrder,\n    legendPlacement: LegendPlacement\n  }, {\n    name: 'Routes',\n    modelName: 'route',\n    columns: COLUMNS.routeColumns,\n    displayOptions: [{\n      id: 'slicedBy',\n      name: 'Sliced By',\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }]\n      },\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }]\n      }]\n    }],\n    title: '',\n    visualOptions: VisualOptions,\n    sortOrder: SortOrder,\n    legendPlacement: LegendPlacement\n  }, {\n    name: 'Stops',\n    modelName: 'iq-stop',\n    columns: COLUMNS.stopColumns,\n    displayOptions: [{\n      id: 'slicedBy',\n      name: 'Sliced By',\n      selected: {\n        id: 'type',\n        name: 'Stop Type',\n        valueKey: 'bsStop.type',\n        valueCategories: [{\n          label: 'Pick Up',\n          value: 'pick'\n        }, {\n          label: 'Drop',\n          value: 'drop'\n        }, {\n          label: 'Break',\n          value: 'break'\n        }, {\n          label: 'Route Start',\n          value: 'route-start'\n        }, {\n          label: 'Route End',\n          value: 'route-end'\n        }]\n      },\n      options: [{\n        id: 'type',\n        name: 'Stop Type',\n        valueKey: 'bsStop.type',\n        valueCategories: [{\n          label: 'Pick Up',\n          value: 'pick'\n        }, {\n          label: 'Drop',\n          value: 'drop'\n        }, {\n          label: 'Break',\n          value: 'break'\n        }, {\n          label: 'Route Start',\n          value: 'route-start'\n        }, {\n          label: 'Route End',\n          value: 'route-end'\n        }]\n      }]\n    }],\n    title: '',\n    visualOptions: VisualOptions,\n    sortOrder: SortOrder,\n    legendPlacement: LegendPlacement\n  }];\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/donut-chart-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ugQZ77zb\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"option\\\",\\\"visualOption\\\",\\\"column\\\",\\\"filterType\\\",\\\"displayOption\\\",\\\"option\\\",\\\"type\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"metrics-widget-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/donut-chart-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Donut Chart\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/donut-chart-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Type:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"sourceOptions\\\"]]],null],[23,[\\\"dataType\\\"]],\\\"Select Type\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,9,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[9]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Display:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\":\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont  data-test-display-option\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[22,7,[\\\"options\\\"]]],null],[22,7,[\\\"selected\\\"]],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionVisibility\\\",[22,7,[]]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,8,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Filter by Status:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section data-test-filter-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filterColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,5,[\\\"filterType\\\"]],false,\\\"label\\\",[22,5,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,5,[]]],null],[27,\\\"eq\\\",[[22,5,[\\\"filterTypes\\\",\\\"length\\\"]],0],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,6,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,5,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont data-test-filter-type-arity1\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,5,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,5,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,5,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,5,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont data-test-filter-type-arity2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,5,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,5,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,5,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,5,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,5,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Visuals\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content data-test-display-title\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\",\\\"placeholder\\\"],[\\\"text\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"title\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],\\\"Widget Title\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content data-test-checkbox-options\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"dataType\\\",\\\"visualOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-checkbox\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[22,4,[\\\"isChecked\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setVisualOptionVisibility\\\",[22,4,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[1,[22,4,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Sort By:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont data-test-sortBy-options\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"sortOrder\\\",\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"sortOrder\\\",\\\"selected\\\"]]],null],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setSortOrder\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Legend:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont data-test-legend-options\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"legendPlacement\\\",\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"legendPlacement\\\",\\\"selected\\\"]]],null],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setLegendPlacement\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/donut-chart-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/edit-trip-widget/booking-map/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/map-widget/component\", \"adept-iq/utils/geolib\"], function (_exports, _component, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-unused-vars */\n  const pintPointIcon = {\n    icon: window.L.icon({\n      iconUrl: '/map-icons/icon-pinpoint.svg',\n      iconSize: [48, 48],\n      iconAnchor: [24, 48]\n    }),\n    keyboard: false,\n    interactive: false\n  };\n  const arrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 16,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillColor: 'black',\n          fillOpacity: 1,\n          color: 'black',\n          opacity: 1\n        }\n      })\n    }]\n  };\n  const thickArrowHeadLineConfig = {\n    patterns: [{\n      offset: 0,\n      repeat: 0,\n      symbol: window.L.Symbol.arrowHead({\n        headAngle: -290,\n        // flips arrow around so it looks right\n        pixelSize: 16,\n        polygon: true,\n        pathOptions: {\n          weight: 2,\n          stroke: true,\n          fill: true,\n          fillOpacity: 0,\n          opacity: 0\n        }\n      })\n    }]\n  };\n  const polyAndDecKeyCoordinates = [{\n    path: '_parts',\n    x1: 'x',\n    y1: 'y'\n  }, {\n    path: '_paths',\n    x1: 'lat',\n    y1: 'lng'\n  }, {\n    path: '_parts',\n    x1: 'x',\n    y1: 'y'\n  }, {\n    path: '_paths',\n    x1: 'lat',\n    y1: 'lng'\n  }];\n\n  var _default = _component.default.extend(Ember.Evented, {\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    layerGroup: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.setProperties({\n        layerGroup: new window.L.LayerGroup()\n      });\n    },\n\n    didInsertElement() {\n      const map = this.get('map');\n      const center = map.get('center');\n\n      this._super(...arguments);\n\n      this.get('map.native').setView({\n        lat: center.lat,\n        lng: center.lon\n      }, 12);\n      this.activeGeocode();\n      this.onChangePickDropAddress();\n      const editmodelwidth = Ember.$('.edit-widget-modal').width();\n      Ember.$('.edit-widget-modal').width('25%');\n      Ember.$('.booking-map-container').css({\n        'width': 'calc(95% - ' + editmodelwidth + 'px)'\n      }).css({\n        'height': 'calc(100% - 20%)',\n        'left': editmodelwidth + 'px)'\n      });\n      this.set('booking.bookingMap', this.get('map'));\n    },\n\n    activeGeocode: Ember.observer('geocode.activeGeo', function () {\n      const map = this.get('map.native');\n      const geocodeService = this.get('geocode');\n      const activeGeocode = geocodeService.get('activeGeo');\n      if (!map) return;\n\n      if (activeGeocode) {\n        map.on('click', function (event) {\n          geocodeService.saveNewGeocode(event.latlng);\n        });\n      } else {\n        map.off('click');\n      }\n    }),\n\n    doDrawMarkersAndPolylines() {\n      const booking = this.get('booking');\n      const skipSetView = booking.get('skipSetView');\n      this.drawMarkersAndPolylines(skipSetView);\n      booking.set('skipSetView', false);\n    },\n\n    onChangePickDropAddress: Ember.observer('record.dropPlace.address.freeformAddress', 'record.pickPlace.address.freeformAddress', function () {\n      Ember.run.debounce(this, this.doDrawMarkersAndPolylines, 300);\n    }),\n    onMarkerPinRemove: Ember.observer('booking.setMarkerPinOff', function () {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n    }),\n\n    drawMarkersAndPolylines() {\n      let skipSetView = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!Ember.isPresent(this.get('map'))) {\n        return;\n      }\n\n      this.get('layerGroup').clearLayers();\n      const pick = this.get('record.pick');\n      const drop = this.get('record.drop');\n      this.drawMarker(pick, skipSetView);\n      this.drawMarker(drop, skipSetView);\n      this.drawPolyline(pick, drop);\n    },\n\n    drawMarker(latLngObj) {\n      let skipSetView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const map = this.get('map');\n      const marker = window.L.marker([latLngObj.get('lat'), latLngObj.get('lng')], pintPointIcon);\n      this.get('layerGroup').addLayer(marker).addTo(this.get('map.native'));\n\n      if (!skipSetView) {\n        this.get('map.native').setView(marker._latlng, map.getZoom());\n      }\n    },\n\n    drawPolyline(pick, drop) {\n      const tooltipOptions = {\n        opacity: 0.7,\n        direction: 'top',\n        sticky: true\n      }; // Drawing reversly to make arrow head correct\n\n      const toLatLng = {\n        lat: drop.get('lat'),\n        lng: drop.get('lng')\n      };\n      const fromLatLng = {\n        lat: pick.get('lat'),\n        lng: pick.get('lng')\n      };\n      const distance = (0, _geolib.getDistance)(toLatLng, fromLatLng) * 3.281 / 5280; // convert to miles\n\n      const polyline = window.L.polyline([[drop.get('lat'), drop.get('lng')], [pick.get('lat'), pick.get('lng')]], {\n        color: 'black',\n        endOffset: '300'\n      });\n      const thickInvisiblePolyline = window.L.polyline([[drop.get('lat'), drop.get('lng')], [pick.get('lat'), pick.get('lng')]], {\n        opacity: 0,\n        weight: 25,\n        endOffset: '300'\n      });\n      const polylineDecorator = window.L.polylineDecorator(polyline, arrowHeadLineConfig);\n      const thickPolylineDecorator = window.L.polylineDecorator(thickInvisiblePolyline, thickArrowHeadLineConfig); // create a thicker invisible line so hovering around the polyline will be friendlier. We don't want to remove popup\n      // as we move the mouse a tiny bit.\n\n      thickInvisiblePolyline.bindTooltip(`<span>Distance: <br>${distance.toFixed(3)} mi</span>`, tooltipOptions);\n      this.get('layerGroup').addLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n      const polyAndDecorators = [polyline, polylineDecorator, thickInvisiblePolyline, thickPolylineDecorator]; //set arrow head - NYAAR-14549\n\n      this.get('layerGroup').removeLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').removeLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n      this.shortenPolylineAndDecorator(polyAndDecorators);\n      this.get('layerGroup').addLayer(polyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(polylineDecorator).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickInvisiblePolyline).addTo(this.get('map.native'));\n      this.get('layerGroup').addLayer(thickPolylineDecorator).addTo(this.get('map.native'));\n    },\n\n    shortenPolylineAndDecorator(polyAndDecorators) {\n      let factor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.2;\n      const isParts = !polyAndDecorators[0]._parts || polyAndDecorators[0]._parts.length === 0;\n      const isPaths = !polyAndDecorators[1]._paths || polyAndDecorators[1]._paths.length === 0;\n      const isThickParts = !polyAndDecorators[2]._parts || polyAndDecorators[2]._parts.length === 0;\n      const isThickPaths = !polyAndDecorators[3]._paths || polyAndDecorators[3]._paths.length === 0;\n\n      if (isParts || isPaths || isThickParts || isThickPaths) {\n        return;\n      }\n\n      polyAndDecKeyCoordinates.forEach((pdk, index) => {\n        const firstCoordinate = polyAndDecorators[index][pdk.path][0][0];\n        const secondCoordinate = polyAndDecorators[index][pdk.path][0][1];\n        const x1 = firstCoordinate[pdk.x1];\n        const y1 = firstCoordinate[pdk.y1];\n        const x2 = secondCoordinate[pdk.x1];\n        const y2 = secondCoordinate[pdk.y1];\n        const newStartX = x1 + factor * (x2 - x1);\n        const newStartY = y1 + factor * (y2 - y1);\n        const endFactor = 1 - factor;\n        const newEndX = x1 + endFactor * (x2 - x1);\n        const newEndY = y1 + endFactor * (y2 - y1);\n        polyAndDecorators[index][pdk.path][0][0][pdk.x1] = newStartX;\n        polyAndDecorators[index][pdk.path][0][0][pdk.y1] = newStartY;\n        polyAndDecorators[index][pdk.path][0][1][pdk.x1] = newEndX;\n        polyAndDecorators[index][pdk.path][0][1][pdk.y1] = newEndY;\n      });\n    },\n\n    destroy() {\n      this._super(...arguments);\n\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/edit-trip-widget/component\", [\"exports\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/location-validation\", \"adept-iq/pods/components/side-drawer/edit-trip-widget/config\", \"ember-concurrency\", \"adept-iq/mixins/async-schedule-operation\", \"ember-changeset\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/api-urls\", \"adept-iq/models/rider-phone-number\", \"adept-iq/utils/geolib\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\", \"moment\", \"adept-iq/config/environment\", \"adept-iq/models/trip\"], function (_exports, _unwrapProxy, _locationValidation, _config, _emberConcurrency, _asyncScheduleOperation, _emberChangeset, _mappedPermIds, _apiUrls, _riderPhoneNumber, _geolib, _polyline, _moment, _environment, _trip) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // eslint-disable-line\n  const ANCHOR_OPTIONS = ['pick', 'drop'];\n  const SCHEDULING_MODE_OPTIONS = ['automatic', 'manual'];\n  const LOCATION_PATH = 'latlng';\n  const ZONE_NAME_PATH = 'address.zoneName';\n  const PICK = 'pick';\n  const TRIP_FIELDS = {\n    driverNotes: '',\n    passengerNotes: '',\n    schedulingMode: '',\n    noSharing: '',\n    fare: '',\n    pickAddressNotes: '',\n    dropAddressNotes: '',\n    requestTime: '',\n    anchor: ''\n  };\n  const TAXI_SERVICE_MODE = 'taxi';\n  const FIELDS_TO_CHECK = ['driverNotes', 'dropPlace', 'noSharing', 'passengerNotes', 'pickPlace', 'schedulingMode', 'pickPhoneNumber', 'dropPhoneNumber', 'pickAddressNotes', 'dropAddressNotes', 'requestTime', 'anchor', 'fareType', 'fare'];\n  const PICK_PLACE_TEXT = 'pickPlace';\n  const DROP_PLACE_TEXT = 'dropPlace';\n  const PICK_PHONE_NUMBER_TEXT = 'pickPhoneNumber';\n  const DROP_PHONE_NUMBER_TEXT = 'dropPhoneNumber';\n  const REQUEST_TIME_TEXT = 'requestTime';\n  const FARE_TYPE_TEXT = 'fareType';\n  const FARE_TEXT = 'fare';\n  const TRIP_ACTIVITY_LOG_FIELDS = ['Driver notes', 'Dropoff address', 'Rideshare value', 'Passenger notes', 'Pickup address', 'Scheduling mode', 'Pick phone number', 'Drop phone number', 'Pickup address notes', 'Dropoff address notes', 'Request time', 'Request type', 'Fare type', 'Fare'];\n  const ELIGIBLE_TRIP_STATUS_TO_EDIT_SCHEDULE_MODE = [_trip.TRIP_SCHEDULED_STATUS.toLowerCase(), _trip.TRIP_CALLBACK_STATUS.toLowerCase(), _trip.TRIP_WAITLIST_STATUS.toLowerCase()];\n  const NO_SHARING = 'noSharing';\n  const MAX_PHONE_NUMBER_LENGTH = 10;\n  const {\n    bemap\n  } = window;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    map: Ember.inject.service(),\n    anchorOptions: ANCHOR_OPTIONS,\n    schedulingModeOptions: SCHEDULING_MODE_OPTIONS,\n    fareTypeOptions: null,\n    rideshareOptions: null,\n    pickLocationFieldConfig: _config.pickLocationFieldConfig,\n    dropLocationFieldConfig: _config.dropLocationFieldConfig,\n    classNames: ['form-widget'],\n    isSearchEnabled: false,\n    searchText: '',\n    errors: null,\n    record: null,\n    previousTripInfo: null,\n    trip: Ember.computed.readOnly('stackFrame.options.trip'),\n    showMapModal: Ember.computed.readOnly('stackFrame.options.showMapModal'),\n    isReadOnly: Ember.computed.readOnly('stackFrame.options.isReadOnly'),\n    previousFareType: null,\n    previousFare: null,\n    previousPickPlace: null,\n    previousDropPlace: null,\n    previousPickAddress: null,\n    previousDropAddress: null,\n    previousPickLocation: null,\n    previousDropLocation: null,\n    previousPickPhoneNumber: null,\n    previousDropPhoneNumber: null,\n    maxXYDelta: null,\n    isInvalidAddressSelected: null,\n    currentState: null,\n    previousTripDetails: null,\n    previousClonedPickPlace: null,\n    previousClonedDropPlace: null,\n    previousClonedPickPhoneNumber: null,\n    previousClonedDropPhoneNumber: null,\n    editPassengerNotesSchedulingGranted: false,\n    editRideshareSchedulingGranted: false,\n    isComputingDistance: false,\n    distancePt1: null,\n    distancePt2: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    title: Ember.computed('isReadOnly', function () {\n      const isReadOnly = this.get('isReadOnly');\n      return isReadOnly ? 'View Trip' : 'Edit Trip';\n    }),\n    hasPromiseTime: Ember.computed('trip.promiseTime', function () {\n      const promiseTime = this.get('trip.promiseTime');\n      return Ember.isPresent(promiseTime) || false;\n    }),\n    canSave: Ember.computed('record.{requestTime,pickAddressNotes,dropAddressNotes,anchor,fare,fareType,pickPlace.location.geoNode,dropPlace.location.geoNode,passengerNotes,driverNotes,schedulingMode,noSharing,pickPlace.address.fullAddress,dropPlace.address.fullAddress,pickPhoneNumber.fullPhoneNumber,dropPhoneNumber.fullPhoneNumber}', 'geocode.isGeoNodeResultsFetched', function () {\n      const record = this.get('record');\n      const isInvalidAddressSelected = this.get('isInvalidAddressSelected');\n      const isGeoNodeResultsFetched = this.get('geocode.isGeoNodeResultsFetched');\n      return this.isTripChanged() || record.get('pickPhoneNumber.hasDirtyAttributes') || record.get('dropPhoneNumber.hasDirtyAttributes') || record.get('fareType.id') !== this.get('previousFareType.id') || this.isPlaceChanged(record.get('pickPlace.address'), this.get('previousPickAddress')) && isGeoNodeResultsFetched || this.isPlaceChanged(record.get('dropPlace.address'), this.get('previousDropAddress')) && isGeoNodeResultsFetched || isInvalidAddressSelected;\n    }),\n    editRideshareGranted: Ember.computed('', function () {\n      let editRideshareGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editRideshareScheduling, null);\n      const isDispatchDashboard = this.get('workspace.isDispatchDashboard');\n\n      if (isDispatchDashboard) {\n        editRideshareGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editRideshareDispatch, null);\n      }\n\n      return editRideshareGranted;\n    }),\n    editPassengerNotesGranted: Ember.computed('', function () {\n      let editPassengerNotesGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editPassengerNotesScheduling);\n      const isDispatchDashboard = this.get('workspace.isDispatchDashboard');\n\n      if (isDispatchDashboard) {\n        editPassengerNotesGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editPassengerNotesDispatch);\n      }\n\n      return editPassengerNotesGranted;\n    }),\n    editPhoneNumberGranted: Ember.computed('', function () {\n      let editPhoneNumberGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editFuture);\n      const isDispatchDashboard = this.get('workspace.isDispatchDashboard');\n\n      if (isDispatchDashboard) {\n        editPhoneNumberGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editSameDay);\n      }\n\n      return editPhoneNumberGranted;\n    }),\n    hasTripChange: Ember.observer('record.{anchor,requestTime,pickAddressNotes,dropAddressNotes,pickPlace.location.geoNode,dropPlace.location.geoNode,passengerNotes,driverNotes,schedulingMode,noSharing,pickPlace.address.fullAddress,dropPlace.address.fullAddress}', function () {\n      this.setPreviousTripInfo();\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.setDefaultProperties(this.get('trip'));\n      this.loadCurrentState();\n      this.setProperties({\n        rideshareOptions: [{\n          id: 0,\n          name: 'Allowed'\n        }, {\n          id: 2,\n          name: 'Not Allowed'\n        }]\n      });\n      this.setPreviousClonedTripData();\n      this.set('previousTripDetails', this.getPreviousTripDetails());\n      this.set('geocode.isInvalidAddress', true);\n      this.set('editRideshareSchedulingGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editRideshareScheduling, null));\n      this.set('editPassengerNotesSchedulingGranted', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editPassengerNotesScheduling));\n      this.set('booking.tripOverlap');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      Ember.$('.side-drawer-modal').css('min-width', '470px');\n      const editmodelwidth = Ember.$('.edit-trip-side-drawer').width(); // $('.edit-trip-side-drawer').width('25%');\n\n      Ember.$('.booking-trip-map-container').css({\n        'width': 'calc(97% - ' + editmodelwidth + 'px)'\n      }).css({\n        'height': 'calc(100% - 15%)',\n        'left': editmodelwidth + 'px)'\n      });\n      this.loadCurrentState();\n    },\n\n    willDestroyElement() {\n      this.set('isInvalidAddress', false);\n\n      this._super(...arguments);\n    },\n\n    //this method used to clone the address in place model\n    createPlaceRecord(place) {\n      const store = this.get('store');\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n      const addressAttr = address.toJSON();\n      const placeAttr = place.toJSON();\n      const locationAttr = location.toJSON(); //const location = store.createRecord('location',);\n\n      const clonedAddress = store.createRecord('address', addressAttr);\n      const clonePlace = store.createRecord('place', placeAttr);\n      const cloneLocation = store.createRecord('location', locationAttr);\n      clonedAddress.set('freeformAddress', clonedAddress.get('fullAddress'));\n      clonePlace.set('address', clonedAddress); // if clone the location it will update the location in map\n\n      clonePlace.set('location', place.get('location'));\n      clonePlace.set('cloneLocation', cloneLocation);\n      return new _emberChangeset.default(clonePlace);\n    },\n\n    //this method used to clone the phone number model\n    createPhoneNumberRecord(phoneNumber) {\n      const store = this.get('store');\n      const phoneNumberAttr = phoneNumber ? phoneNumber.toJSON() : null;\n      const clonePhoneNumber = store.createRecord('segment-stop-phone-number', phoneNumberAttr);\n      return new _emberChangeset.default(clonePhoneNumber);\n    },\n\n    async setDefaultProperties(trip) {\n      const store = this.get('store');\n      const unwrapPickPlace = (0, _unwrapProxy.unwrapProxy)(trip.get('pick.segmentStop.place'));\n      const unwrapDropPlace = (0, _unwrapProxy.unwrapProxy)(trip.get('drop.segmentStop.place')); // In dispatch workspace, core entity for stopWidget is stopPoint, so phonenumbers stored in stopPoint model\n\n      const pickPhoneNumber = trip.get('pick.segmentStopPhoneNumbers') || trip.get('pickStopPoint.segmentStopPhoneNumbers') || trip.get('segment.pick.phoneNumbers');\n      const dropPhoneNumber = trip.get('drop.segmentStopPhoneNumbers') || trip.get('dropStopPoint.segmentStopPhoneNumbers') || trip.get('segment.drop.phoneNumbers');\n      const unwrapPickPhoneNumber = pickPhoneNumber && (0, _unwrapProxy.unwrapProxy)(pickPhoneNumber.firstObject) ? store.peekRecord('segment-stop-phone-number', (0, _unwrapProxy.unwrapProxy)(pickPhoneNumber.get('firstObject.id'))) : null;\n      const unwrapDropPhoneNumber = dropPhoneNumber && (0, _unwrapProxy.unwrapProxy)(dropPhoneNumber.firstObject) ? store.peekRecord('segment-stop-phone-number', (0, _unwrapProxy.unwrapProxy)(dropPhoneNumber.get('firstObject.id'))) : null;\n      const pickPlace = this.createPlaceRecord(unwrapPickPlace);\n      const dropPlace = this.createPlaceRecord(unwrapDropPlace);\n      this.set('previousPickPlace', unwrapPickPlace);\n      this.set('previousDropPlace', unwrapDropPlace);\n      this.set('previousPickAddress', unwrapPickPlace.get('address'));\n      this.set('previousDropAddress', unwrapDropPlace.get('address'));\n      this.set('previousPickLocation', pickPlace.get('cloneLocation'));\n      this.set('previousDropLocation', dropPlace.get('cloneLocation'));\n      this.set('previousPickPhoneNumber', unwrapPickPhoneNumber);\n      this.set('previousDropPhoneNumber', unwrapDropPhoneNumber); //set fare type\n\n      const fareTypes = store.peekAll('fare-type');\n      this.set('fareTypeOptions', fareTypes); //set maxXYDelta\n\n      const tripMaxXYDelta = this.get('store').peekRecord('cs-config-item', 'config-Scheduling_parms/MODTRIP_MAX_XY_DELTA');\n      const maxXYDelta = tripMaxXYDelta ? parseFloat(tripMaxXYDelta.get('value')) : 0;\n      this.set('maxXYDelta', maxXYDelta);\n      this.set('pickSegmentStopPlace', unwrapPickPlace);\n      this.set('dropSegmentStopPlace', unwrapDropPlace);\n      const noSharing = (0, _unwrapProxy.unwrapProxy)(trip.get('segment.noSharing')) || 0;\n      const driverNotes = trip.get('segment.leg.notes') ? trip.get('segment.leg.notes').trim() : '';\n      const passengerNotes = trip.get('segment.leg.rider.notes') ? trip.get('segment.leg.rider.notes').trim() : '';\n      const isScheduleModeShouldDisable = this.checkScheduleModeIsEditableForTrip(trip); //create emberObject with trip attribute values\n\n      const record = Ember.Object.create({\n        driverNotes,\n        passengerNotes,\n        tripId: trip.get('tripId'),\n        riderId: trip.get('segment.leg.rider.riderId'),\n        pick: (0, _unwrapProxy.unwrapProxy)(trip.get('pick')),\n        drop: (0, _unwrapProxy.unwrapProxy)(trip.get('drop')),\n        fare: trip.get('segment.fare'),\n        requestTime: trip.get('segment.leg.requestTime'),\n        anchor: trip.get('segment.anchor'),\n        schedulingMode: trip.get('schedulingMode').toLowerCase(),\n        fareType: trip.get('segment.fareType'),\n        pickPlace: pickPlace,\n        dropPlace: dropPlace,\n        noSharing: noSharing,\n        disabledSchedulingMode: isScheduleModeShouldDisable,\n        pickPhoneNumber: unwrapPickPhoneNumber,\n        dropPhoneNumber: unwrapDropPhoneNumber,\n        isScheduled: trip.get('isScheduled'),\n        pickAddressNotes: trip.get('segment.pick.notes'),\n        dropAddressNotes: trip.get('segment.drop.notes')\n      });\n      const previousTripInfo = Ember.Object.create({\n        driverNotes: record.get('driverNotes'),\n        passengerNotes: record.get('passengerNotes'),\n        schedulingMode: trip.get('schedulingMode').toLowerCase(),\n        noSharing: noSharing,\n        fare: record.get('fare'),\n        pickAddressNotes: record.get('pickAddressNotes'),\n        dropAddressNotes: record.get('dropAddressNotes'),\n        requestTime: record.get('requestTime'),\n        anchor: record.get('anchor')\n      });\n      const unwrapFareType = (0, _unwrapProxy.unwrapProxy)(record.get('fareType'));\n      const fare = record.get('fare');\n      this.set('previousFareType', unwrapFareType);\n      this.set('previousFare', fare);\n      this.set('previousTripInfo', previousTripInfo);\n      this.set('record', record);\n    },\n\n    isTripChanged() {\n      const record = this.get('record');\n      const previousTripInfo = this.get('previousTripInfo');\n      const fields = {};\n      Object.entries(TRIP_FIELDS).forEach(key => {\n        fields[key[0]] = record.get(key[0]);\n      });\n      const {\n        passengerNotes,\n        driverNotes,\n        pickAddressNotes,\n        dropAddressNotes\n      } = fields;\n      fields.passengerNotes = passengerNotes ? passengerNotes.trim() : passengerNotes;\n      fields.driverNotes = driverNotes ? driverNotes.trim() : driverNotes;\n      fields.pickAddressNotes = pickAddressNotes ? pickAddressNotes.trim() : pickAddressNotes;\n      fields.dropAddressNotes = dropAddressNotes ? dropAddressNotes.trim() : dropAddressNotes;\n      this.set('isInvalidAddressSelected', false);\n      return JSON.stringify(previousTripInfo) !== JSON.stringify(fields);\n    },\n\n    isPlaceChanged(address, previousPlaceAddress) {\n      if (address && previousPlaceAddress && previousPlaceAddress.get('fullAddress') !== address.get('fullAddress')) {\n        return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * NYAAR-20181: validates is the phoneNumber is 10 digit long\n     * @returns {*Boolean}\n     */\n    validatePhoneNumber() {\n      const record = this.get('record');\n      const phoneNumberArray = [];\n      if ((0, _unwrapProxy.unwrapProxy)(record.get('pickPhoneNumber.isForceDirty'))) phoneNumberArray.push((0, _unwrapProxy.unwrapProxy)(record.get('pickPhoneNumber')));\n      if ((0, _unwrapProxy.unwrapProxy)(record.get('dropPhoneNumber.isForceDirty'))) phoneNumberArray.push((0, _unwrapProxy.unwrapProxy)(record.get('dropPhoneNumber')));\n      const validatePhoneNumber = phoneNumberArray.every(phoneNumber => {\n        return !Ember.isPresent(phoneNumber.get('fullPhoneNumber')) || (phoneNumber.get('areaCode') + phoneNumber.get('phoneNumber')).length === MAX_PHONE_NUMBER_LENGTH;\n      });\n      return validatePhoneNumber;\n    },\n\n    async validateRecord() {\n      let valid = true;\n      const record = this.get('record');\n      const selectedRider = this.get('trip.rider');\n      const promiseTime = this.get('trip.promiseTime');\n      const requestTimes = [record.get('requestTime')];\n      const tripIds = [this.get('trip.id')];\n      const tripOverlap = Ember.isEmpty(promiseTime) ? await this.get('booking').overlapCheck(selectedRider.get('id'), requestTimes, tripIds) : null;\n      this.set('errors', []);\n      const requestedTime = record.get('requestTime');\n\n      if (Ember.isNone(requestedTime)) {\n        valid = false;\n        this.get('errors').pushObject('Date should be there');\n      }\n\n      if (Ember.isEmpty(record.get('pickPlace.location.latlng'))) {\n        valid = false;\n        this.get('errors').pushObject('Pickup address should be there');\n      }\n\n      if (Ember.isEmpty(record.get('dropPlace.location.latlng'))) {\n        valid = false;\n        this.get('errors').pushObject('Drop address should be there');\n      }\n\n      if (!this.validatePhoneNumber()) {\n        valid = false;\n        this.get('errors').pushObject('Please enter 10 digit in the Phone number field.');\n      }\n\n      if (Ember.isPresent(tripOverlap) && tripOverlap.overlaps.find(overlap => overlap.isOverlapping)) {\n        valid = await this.get('booking').showOverlapWarningMessage(tripOverlap);\n      }\n\n      return valid;\n    },\n\n    updatePlaceInTrip: (0, _emberConcurrency.task)(function* (trip, pickPlaceId, dropPlaceId) {\n      const schedule = trip.get('route.schedule') || trip.get('schedule');\n      const tripId = trip.get('id');\n      let result;\n\n      try {\n        const operationData = {\n          tripId,\n          pickPlaceId,\n          dropPlaceId\n        };\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, 'tripPlaceUpdate', options);\n\n        if (!result) {\n          throw new Error('Failed to update place');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    async savePlaceObject(place) {\n      if (!place.get('isForceDirty')) {\n        return place;\n      }\n\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const location = (0, _unwrapProxy.unwrapProxy)(place.get('location')); // if zone name is missing for any reason we are giving default value to eliminate edit failure\n\n      if (Ember.isNone(address.get('zoneName.id'))) {\n        address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n      }\n\n      const locationResponse = await locationAdapter.postLocation(location);\n      const addressResponse = await addressAdapter.postAddress(address);\n      const placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n      const createdLocation = await store.findRecord('location', locationResponse.data.id);\n      const createdAddress = await store.findRecord('address', addressResponse.data.id);\n      const createdPlace = await store.findRecord('place', placeResponse.data.id);\n      createdPlace.set('location', createdLocation);\n      createdPlace.set('address', createdAddress);\n      return createdPlace;\n    },\n\n    async getSegmentStopRecord(segmentStopId) {\n      const store = this.get('store');\n      await store.findRecord('segment-stop', segmentStopId);\n      const segmentStopRecord = await store.peekRecord('segment-stop', segmentStopId);\n      return segmentStopRecord;\n    },\n\n    async createNewPlace(record) {\n      const pickSegmentStop = (0, _unwrapProxy.unwrapProxy)(record.get('pick.segmentStop'));\n      const dropSegmentStop = (0, _unwrapProxy.unwrapProxy)(record.get('drop.segmentStop'));\n      const pickPlace = (0, _unwrapProxy.unwrapProxy)(pickSegmentStop.get('place'));\n      const dropPlace = (0, _unwrapProxy.unwrapProxy)(dropSegmentStop.get('place'));\n      const segmentStopPick = await this.getSegmentStopRecord(pickSegmentStop.get('id'));\n      const segmentStopDrop = await this.getSegmentStopRecord(dropSegmentStop.get('id'));\n      pickSegmentStop.set('dwell', segmentStopPick.get('dwell'));\n      dropSegmentStop.set('dwell', segmentStopDrop.get('dwell')); //if both pick and drop address are not changed no need to update\n\n      if (!pickPlace.get('isForceDirty') && !dropPlace.get('isForceDirty')) {\n        return Promise.resolve();\n      } // create new pick and drop place\n\n\n      const newPickPlace = await this.savePlaceObject(pickPlace);\n      const newDropPlace = await this.savePlaceObject(dropPlace); //set created  place in pick and drop\n\n      this.set('pickSegmentStopPlace', newPickPlace);\n      this.set('dropSegmentStopPlace', newDropPlace);\n      return Promise.resolve();\n    },\n\n    saveNewAddressObject(record) {\n      return this.createNewPlace(record);\n    },\n\n    async updatePlaceInTripRecord(record) {\n      const pickSegmentStop = (0, _unwrapProxy.unwrapProxy)(record.get('pick.segmentStop'));\n      const dropSegmentStop = (0, _unwrapProxy.unwrapProxy)(record.get('drop.segmentStop'));\n      const pickPlace = (0, _unwrapProxy.unwrapProxy)(pickSegmentStop.get('place'));\n      const dropPlace = (0, _unwrapProxy.unwrapProxy)(dropSegmentStop.get('place'));\n      const isDispatchDashboard = this.get('workspace.isDispatchDashboard'); //if both pick and drop address are not changed no need to update\n\n      if (!pickPlace.get('isForceDirty') && !dropPlace.get('isForceDirty')) {\n        return Promise.resolve();\n      }\n\n      const pickSegmentStopPlace = this.get('pickSegmentStopPlace');\n      const dropSegmentStopPlace = this.get('dropSegmentStopPlace');\n      pickSegmentStop.set('place', pickSegmentStopPlace);\n      dropSegmentStop.set('place', dropSegmentStopPlace);\n      await (0, _unwrapProxy.unwrapProxy)(record.get('pick.segmentStop')).save();\n      await (0, _unwrapProxy.unwrapProxy)(record.get('drop.segmentStop')).save();\n\n      if (isDispatchDashboard) {\n        return this.updatePlaceInTripForDispatch.perform(record, parseInt(pickSegmentStopPlace.get('id'), 10), parseInt(dropSegmentStopPlace.get('id'), 10));\n      }\n\n      return this.updatePlaceInTrip.perform(record, pickSegmentStopPlace.get('id'), dropSegmentStopPlace.get('id'));\n    },\n\n    async syncAVLM() {\n      const store = this.get('store');\n      const trip = this.get('trip');\n      const dispatchRouteId = trip.get('route.dispatchRoute.id');\n      const dispatchAdapter = store.adapterFor('dispatch-route');\n      return Ember.isPresent(dispatchRouteId) ? dispatchAdapter.syncAVLM(dispatchRouteId) : null;\n    },\n\n    //save edit trip details\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      this.copyRecordDataToTrip();\n      const record = this.get('trip');\n      const isDispatchDashboard = this.get('workspace.isDispatchDashboard'); // while PATCH the trip for edit we don't need currentProviderName attribute\n\n      record.set('currentProviderName', '');\n\n      try {\n        yield this.saveNewAddressObject(record); // pick, drop and rider are independent records (segment holds pick/drop refs and\n        // leg holds the rider ref, so these children save before their parents — exactly the\n        // original ordering). Save the three concurrently, then the dependents in order:\n        // leg needs rider; segment needs leg + pick + drop.\n\n        yield Promise.all([(0, _unwrapProxy.unwrapProxy)(record.get('segment.pick')).save(), (0, _unwrapProxy.unwrapProxy)(record.get('segment.drop')).save(), (0, _unwrapProxy.unwrapProxy)(record.get('segment.leg.rider')).save()]);\n        yield (0, _unwrapProxy.unwrapProxy)(record.get('segment.leg')).save();\n        yield (0, _unwrapProxy.unwrapProxy)(record.get('segment')).save();\n        yield this.updatePlaceInTripRecord(record);\n        yield this.savePhoneNumbers();\n\n        if (isDispatchDashboard && record.get('isScheduled')) {\n          yield this.syncAVLM();\n        }\n\n        return record.save();\n      } catch (e) {\n        throw e;\n      }\n    }),\n\n    /**\n     * NYAAR-20181: to save both pick and drop phoneNumber\n     */\n    async savePhoneNumber(phoneNumberRecordName) {\n      const record = this.get('record');\n      const phoneNumber = (0, _unwrapProxy.unwrapProxy)(record.get(phoneNumberRecordName));\n\n      if (phoneNumber) {\n        if (!Ember.isPresent(phoneNumber.get('fullPhoneNumber'))) {\n          phoneNumber.deleteRecord();\n        }\n\n        if (phoneNumber.get('isForceDirty')) {\n          await phoneNumber.save();\n        }\n      }\n    },\n\n    async savePhoneNumbers() {\n      // pick and drop phone numbers are independent records — save concurrently.\n      await Promise.all([this.savePhoneNumber(PICK_PHONE_NUMBER_TEXT), this.savePhoneNumber(DROP_PHONE_NUMBER_TEXT)]);\n    },\n\n    copyRecordDataToTrip() {\n      const trip = this.get('trip');\n      const record = this.get('record');\n      const pickPlace = record.get('pickPlace');\n      const dropPlace = record.get('dropPlace');\n      trip.set('segment.leg.notes', record.get('driverNotes'));\n      trip.set('segment.leg.rider.notes', record.get('passengerNotes'));\n      trip.set('segment.fare', record.get('fare'));\n      trip.set('segment.anchor', record.get('anchor'));\n      trip.set('segment.noSharing', record.get('noSharing'));\n      trip.set('schedulingMode', record.get('schedulingMode'));\n      trip.set('segment.fareType', record.get('fareType'));\n      trip.set('segment.pick.notes', record.get('pickAddressNotes'));\n      trip.set('segment.drop.notes', record.get('dropAddressNotes'));\n      trip.set('segment.leg.requestTime', record.get('requestTime'));\n\n      if (pickPlace.get('isForceDirty')) {\n        trip.set('pick.segmentStop.place.address', pickPlace.get('address'));\n        trip.set('pick.segmentStop.place.address.zoneName', pickPlace.get('address.zoneName'));\n        trip.set('pick.segmentStop.place.isForceDirty', pickPlace.get('isForceDirty'));\n      }\n\n      if (dropPlace.get('isForceDirty')) {\n        trip.set('drop.segmentStop.place.address', dropPlace.get('address'));\n        trip.set('drop.segmentStop.place.address.zoneName', dropPlace.get('address.zoneName'));\n        trip.set('drop.segmentStop.place.isForceDirty', dropPlace.get('isForceDirty'));\n      }\n    },\n\n    //to avoid two-way binding used local ember object that's why reset manually\n    resetTripModel(trip) {\n      const record = this.get('record');\n      const previousTripInfo = this.get('previousTripInfo');\n      const pickPlace = record.get('pickPlace');\n      const dropPlace = record.get('dropPlace');\n      const tripPickPlace = trip.get('pick.segmentStop.place');\n      const tripDropPlace = trip.get('drop.segmentStop.place');\n      const tripPickLocation = (0, _unwrapProxy.unwrapProxy)(tripPickPlace.get('location'));\n      const tripDropLocation = (0, _unwrapProxy.unwrapProxy)(tripDropPlace.get('location'));\n      record.set('driverNotes', previousTripInfo.get('driverNotes'));\n      record.set('passengerNotes', previousTripInfo.get('passengerNotes'));\n      record.set('noSharing', previousTripInfo.get('noSharing') || 0);\n      record.set('pickAddressNotes', previousTripInfo.get('pickAddressNotes'));\n      record.set('dropAddressNotes', previousTripInfo.get('dropAddressNotes'));\n      record.set('schedulingMode', trip.get('schedulingMode'));\n      record.set('fare', trip.get('segment.fare'));\n      record.set('fareType', trip.get('segment.fareType'));\n      record.set('pickPhoneNumber', this.get('previousClonedPickPhoneNumber'));\n      record.set('dropPhoneNumber', this.get('previousClonedDropPhoneNumber'));\n\n      if (pickPlace.get('isForceDirty')) {\n        this.resetRecordAddress((0, _unwrapProxy.unwrapProxy)(tripPickPlace.get('address')), pickPlace.get('address'));\n        tripPickLocation.rollbackAttributes();\n        record.set('pickPlace.isForceDirty', false);\n      }\n\n      if (dropPlace.get('isForceDirty')) {\n        this.resetRecordAddress((0, _unwrapProxy.unwrapProxy)(tripDropPlace.get('address')), dropPlace.get('address'));\n        tripDropLocation.rollbackAttributes();\n        record.set('dropPlace.isForceDirty', false);\n      } //NYAAR-18905 On reload on the panel the map markers should get removed from the map.\n\n\n      this.get('geocode').deactivateGeocode();\n    },\n\n    //to update trip previous addresses/location, if trip update fails\n    async resetTrip(trip) {\n      const pickSegmentStop = (0, _unwrapProxy.unwrapProxy)(trip.get('pick.segmentStop'));\n      const dropSegmentStop = (0, _unwrapProxy.unwrapProxy)(trip.get('drop.segmentStop'));\n      const pickPlace = this.get('previousPickPlace');\n      const dropPlace = this.get('previousDropPlace');\n      pickPlace.set('address', this.get('previousPickAddress'));\n      pickPlace.set('location', this.get('previousPickLocation'));\n      dropPlace.set('address', this.get('previousDropAddress'));\n      dropPlace.set('location', this.get('previousDropLocation'));\n      pickSegmentStop.set('place', pickPlace);\n      dropSegmentStop.set('place', dropPlace);\n      await (0, _unwrapProxy.unwrapProxy)(trip.get('pick.segmentStop')).save();\n      await (0, _unwrapProxy.unwrapProxy)(trip.get('drop.segmentStop')).save();\n      this.resetTripModel(trip);\n    },\n\n    resetRecordAddress(tripAddress, recordAddress) {\n      const addressAttr = tripAddress.toJSON();\n      Object.entries(addressAttr).forEach(_ref => {\n        let [key, val] = _ref;\n        recordAddress.set(key, val);\n      });\n    },\n\n    getGeoNode(place) {\n      const geocode = this.get('geocode');\n      const address = place.get('address');\n      return geocode.calculateZone(place.get('location.lat'), place.get('location.lng')).then(result => {\n        if (!Ember.isNone(result)) {\n          place.set('location.geoNode', result.geonode);\n        } else {\n          this.get('notifications').warning(`CAN'T GET ZONE FOR ${address.get('fullAddress')}`);\n        }\n      });\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        const record = this.get('record');\n        record.set('pickPlace', currentState.pickPlace);\n        record.set('dropPlace', currentState.dropPlace);\n        record.set('driverNotes', currentState.driverNotes);\n        record.set('passengerNotes', currentState.passengerNotes);\n        record.set('pickAddressNotes', currentState.pickAddressNotes);\n        record.set('dropAddressNotes', currentState.dropAddressNotes);\n        record.set('schedulingMode', currentState.schedulingMode);\n        record.set('noSharing', currentState.noSharing);\n        record.set('pickPhoneNumber', currentState.pickPhoneNumber);\n        record.set('dropPhoneNumber', currentState.dropPhoneNumber);\n        record.set('pickAddressNotes', currentState.pickAddressNotes);\n        record.set('dropAddressNotes', currentState.dropAddressNotes);\n        record.set('requestTime', currentState.requestTime);\n        record.set('anchor', currentState.anchor);\n      }\n    },\n\n    setPreviousTripInfo() {\n      const previousTripInfo = this.get('previousTripInfo');\n      const currentState = this.getPreviousTripDetails();\n      this.set('currentState', currentState);\n      this.set('previousTripInfo', previousTripInfo);\n    },\n\n    //dispatch workspace edit trip sync call\n    updatePlaceInTripForDispatch: (0, _emberConcurrency.task)(function* (trip, pickPlaceId, dropPlaceId) {\n      const dispatchSchedule = trip.get('route.schedule.dispatchSchedule') || trip.get('schedule.dispatchSchedule');\n      const tripId = parseInt(trip.get('id'), 10);\n      const dispatchScheduleId = parseInt(dispatchSchedule.get('id'), 10);\n      const session = this.get('session');\n      const continuousOptHost = _apiUrls.API.continuousOptService.host;\n      let result;\n\n      try {\n        const payload = {\n          data: {\n            type: 'tripPlaceUpdate',\n            attributes: {\n              dispatchScheduleId: dispatchScheduleId,\n              tripId: tripId,\n              pickPlaceId: pickPlaceId,\n              dropPlaceId: dropPlaceId\n            }\n          }\n        };\n        result = yield this.get('ajax').post(continuousOptHost + '/optimizer/trip-place-update', {\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: payload\n        });\n\n        if (!result) {\n          throw new Error('Failed to update place');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    getPreviousTripDetails() {\n      const record = this.get('record');\n      let currentState = this.get('currentState');\n      const {\n        pickPlace,\n        dropPlace,\n        driverNotes,\n        passengerNotes,\n        schedulingMode,\n        noSharing,\n        pickPhoneNumber,\n        dropPhoneNumber,\n        pickAddressNotes,\n        dropAddressNotes,\n        requestTime,\n        anchor\n      } = record.getProperties('pickPlace', 'dropPlace', 'driverNotes', 'passengerNotes', 'schedulingMode', 'noSharing', 'pickPhoneNumber', 'dropPhoneNumber', 'pickAddressNotes', 'dropAddressNotes', 'requestTime', 'anchor');\n      currentState = {\n        pickPlace,\n        dropPlace,\n        driverNotes,\n        passengerNotes,\n        schedulingMode,\n        noSharing,\n        pickPhoneNumber,\n        dropPhoneNumber,\n        pickAddressNotes,\n        dropAddressNotes,\n        requestTime,\n        anchor\n      };\n      return currentState;\n    },\n\n    //checking the edited fields and creating activity logs for that\n    async checkEditedFieldsAndCreateActivityLog() {\n      const record = this.get('record');\n      const previousTripDetails = this.get('previousTripDetails');\n      const tripId = this.get('trip.tripId');\n      const tripActivity = 'Edit';\n      const routeTripActivity = 'Trip Edited';\n      const actualTime = (0, _moment.default)().toDate();\n      const type = 'genericLogging';\n      const userId = this.session.data.authenticated.userId;\n      const tripActivityLog = {\n        details: '',\n        activity: tripActivity,\n        actualTime: actualTime,\n        type: type,\n        userId: userId\n      };\n      const routeTripActivityLog = {\n        details: `Trip ${tripId} edited.`,\n        activity: routeTripActivity,\n        actualTime: actualTime,\n        type: type,\n        userId: userId\n      };\n      FIELDS_TO_CHECK.forEach((field, index) => {\n        this.prepareTripAndRouteActivityLogs(index, field, previousTripDetails, record, tripActivityLog, routeTripActivityLog);\n      });\n      await this.createEditTripActivityLog(tripActivityLog);\n      await this.createEditRouteTripActivityLog(routeTripActivityLog);\n    },\n\n    //creating trip activity log while trip edited\n    createEditTripActivityLog(tripActivityLog) {\n      const trip = this.get('trip');\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const tripInfo = Ember.Object.create({\n        context: {\n          trip: trip\n        }\n      });\n      const userInfo = {\n        content: tripActivityLog\n      };\n      return activityLogAdapter.createUserTripActivity(userInfo, tripInfo);\n    },\n\n    //creating route activity log while trip edited\n    createEditRouteTripActivityLog(routeTripActivityLog) {\n      const route = (0, _unwrapProxy.unwrapProxy)(this.get('trip.route'));\n\n      if (route) {\n        const activityLogAdapter = this.get('store').adapterFor('activity-log');\n        const tripInfo = Ember.Object.create({\n          context: {\n            route: route\n          }\n        });\n        const userInfo = {\n          content: routeTripActivityLog\n        };\n        return activityLogAdapter.createUserRouteActivity(userInfo, tripInfo, 'route');\n      }\n    },\n\n    //backup the previous cloned address\n    setPreviousClonedTripData() {\n      const previousPickPlace = this.get('previousPickPlace');\n      const previousDropPlace = this.get('previousDropPlace');\n      const previousPickPhoneNumber = this.get('previousPickPhoneNumber');\n      const previousDropPhoneNumber = this.get('previousDropPhoneNumber');\n      const previousClonedPickPlace = this.createPlaceRecord(previousPickPlace);\n      const previousClonedDropPlace = this.createPlaceRecord(previousDropPlace);\n      const previousClonedPickPhoneNumber = previousPickPhoneNumber ? this.createPhoneNumberRecord(previousPickPhoneNumber) : null;\n      const previousClonedDropPhoneNumber = previousDropPhoneNumber ? this.createPhoneNumberRecord(previousDropPhoneNumber) : null;\n      this.set('previousClonedPickPlace', previousClonedPickPlace);\n      this.set('previousClonedDropPlace', previousClonedDropPlace);\n      this.set('previousClonedPickPhoneNumber', previousClonedPickPhoneNumber);\n      this.set('previousClonedDropPhoneNumber', previousClonedDropPhoneNumber);\n    },\n\n    //preparing the edited trip fields activity log details\n    prepareTripAndRouteActivityLogs(index, field, previousTripDetails, record, tripActivityLog, routeTripActivityLog) {\n      const value = TRIP_ACTIVITY_LOG_FIELDS[index];\n      const rideshareOptions = this.get('rideshareOptions');\n      let changedFromField = previousTripDetails[field];\n      let changedFrom, changedTo;\n\n      switch (field) {\n        case PICK_PLACE_TEXT:\n          changedFromField = this.get('previousClonedPickPlace');\n          changedFrom = changedFromField.get('address.aliasAddress');\n          changedTo = record[field].get('address.aliasAddress');\n          break;\n\n        case DROP_PLACE_TEXT:\n          changedFromField = this.get('previousClonedDropPlace');\n          changedFrom = changedFromField.get('address.aliasAddress');\n          changedTo = record[field].get('address.aliasAddress');\n          break;\n\n        case PICK_PHONE_NUMBER_TEXT:\n          changedFromField = this.get('previousClonedPickPhoneNumber');\n          changedFrom = changedFromField ? changedFromField.get('fullPhoneNumber') : null;\n          changedTo = record[field] ? record[field].get('fullPhoneNumber') : null;\n          break;\n\n        case DROP_PHONE_NUMBER_TEXT:\n          changedFromField = this.get('previousClonedDropPhoneNumber');\n          changedFrom = changedFromField ? changedFromField.get('fullPhoneNumber') : null;\n          changedTo = record[field] ? record[field].get('fullPhoneNumber') : null;\n          break;\n\n        case REQUEST_TIME_TEXT:\n          changedFrom = changedFromField ? (0, _moment.default)(changedFromField).format(_environment.default.dateTimeFormat.timeMoment) : null;\n          changedTo = record[field] ? (0, _moment.default)(record[field]).format(_environment.default.dateTimeFormat.timeMoment) : null;\n          break;\n\n        case FARE_TYPE_TEXT:\n          changedFromField = this.get('previousFareType');\n          changedFrom = changedFromField ? changedFromField.get('id') : null;\n          changedTo = record[field] ? record[field].get('id') : null;\n          break;\n\n        case FARE_TEXT:\n          changedFromField = this.get('previousFare');\n          changedFrom = changedFromField ? changedFromField : null;\n          changedTo = record[field] ? parseFloat(record[field]) : null;\n          break;\n\n        default:\n          changedFrom = changedFromField;\n          changedTo = record[field];\n          break;\n      }\n\n      if (changedFrom !== changedTo) {\n        if (field === NO_SHARING) {\n          changedFrom = rideshareOptions.findBy('id', changedFrom).name;\n          changedTo = rideshareOptions.findBy('id', changedTo).name;\n        }\n\n        const tripDetails = `${value} changed from \"${changedFrom}\" to \"${changedTo}\". `;\n        const routeTripDetails = `${value} changed. `;\n        tripActivityLog.details = tripActivityLog.details + tripDetails;\n        routeTripActivityLog.details = routeTripActivityLog.details + routeTripDetails;\n      }\n    },\n\n    //Editing trip status Scheduled, Scheduling Mode field should be enabled and allowed to update\n    checkScheduleModeIsEditableForTrip(trip) {\n      const isTaxiTrip = trip.get('segment.travelMode') === TAXI_SERVICE_MODE;\n      const isScheduleModeShouldDisable = !ELIGIBLE_TRIP_STATUS_TO_EDIT_SCHEDULE_MODE.includes(trip.get('status')) || isTaxiTrip;\n      return isScheduleModeShouldDisable;\n    },\n\n    setDistances(coord) {\n      if (this.get('distancePt1') === null) {\n        this.set('distancePt1', this.markerPinPoint(coord));\n      } else if (this.get('distancePt2') === null) {\n        this.set('distancePt2', this.markerPinPoint(coord));\n        const map = this.get('booking.bookingMap');\n        const distance = (0, _geolib.getDistance)(this.get('distancePt1.native._latlng'), coord); // eslint-disable-line\n        //convert from metre -> feet -> mile\n\n        const feet = distance * 3.281;\n        const miles = feet / 5280;\n        this.set('computedDistance', `${miles.toFixed(3)} mi (${Math.round(feet).toLocaleString()} feet)`);\n        const polyLineOptions = _polyline.default['dottedDistance']; // eslint-disable-line\n\n        const distancePoints = [{\n          lat: this.get('distancePt1.native._latlng.lat'),\n          lon: this.get('distancePt1.native._latlng.lng')\n        }, {\n          lat: this.get('distancePt2.native._latlng.lat'),\n          lon: this.get('distancePt2.native._latlng.lng')\n        }];\n        const distancePolyline = new bemap.Polyline(distancePoints, {\n          style: polyLineOptions\n        });\n        map.addPolyline(distancePolyline);\n        this.set('distancePolyline', distancePolyline);\n      } else {\n        this.distanceReset();\n      }\n    },\n\n    distanceReset() {\n      const map = this.get('booking.bookingMap');\n      const distancePt1 = this.get('distancePt1');\n      const distancePt2 = this.get('distancePt2');\n      const distancePolyline = this.get('distancePolyline');\n\n      if (distancePt1) {\n        map.removeMarker(distancePt1);\n      }\n\n      if (distancePt2) {\n        map.removeMarker(distancePt2);\n      }\n\n      if (distancePolyline) {\n        map.removePolyline(distancePolyline);\n      }\n\n      this.setProperties({\n        distancePt1: null,\n        distancePt2: null,\n        computedDistance: null,\n        distancePolyline: null\n      });\n    },\n\n    markerPinPoint(coord) {\n      const map = this.get('booking.bookingMap');\n      if (!coord) return;\n      const bemapCoords = new bemap.Coordinate(coord.lng, coord.lat);\n      const pintPointIcon = {\n        icon: {\n          src: '/map-icons/icon-pinpoint.svg',\n          anchorX: 0.50,\n          anchorY: 1,\n          height: 23,\n          width: 23,\n          anchorXUnits: 'fraction',\n          anchorYUnits: 'fraction',\n          scale: 1\n        }\n      };\n      const bemapIcon = new bemap.Icon(pintPointIcon.icon);\n      const marker = new bemap.Marker(bemapCoords, {\n        icon: bemapIcon\n      });\n      map.addMarker(marker);\n      return marker;\n    },\n\n    actions: {\n      async onSaveClick() {\n        const tooltip = this.get('tooltip');\n        const notifications = this.get('notifications');\n        const saveTask = this.get('saveTask');\n        const tripId = this.get('trip.tripId');\n        if (!(await this.validateRecord())) return; //copy record data to trip\n\n        tooltip.pushConfirmation({\n          tip: 'Would you like to commit your changes?',\n          title: 'Edit Trip',\n          hasOverlay: true,\n          primaryActionText: 'Commit',\n          primaryAction: () => {\n            return saveTask.perform().then(async () => {\n              await this.checkEditedFieldsAndCreateActivityLog();\n              this.get('booking').createOverlapActivityLogs([this.get('trip')]);\n              this.onCloseClick();\n              notifications.success(`Trip ${tripId} was edited successfully`);\n              tooltip.reset();\n            }).catch(async error => {\n              notifications.warning(`Edit to Trip ${tripId} Failed`);\n              const trip = this.get('trip');\n              trip.rollbackAttributes();\n              await this.resetTrip(trip);\n              tooltip.reset(); // eslint-disable-next-line no-console\n\n              console.log(error);\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => tooltip.reset()\n        });\n      },\n\n      onRefreshClick() {\n        const trip = this.get('trip');\n        this.resetTripModel(trip);\n      },\n\n      onSearchClick() {\n        const isSearchEnabled = this.get('isSearchEnabled');\n\n        if (isSearchEnabled) {\n          this.set('isSearchEnabled', false);\n          return;\n        }\n\n        this.set('searchText', '');\n        this.set('isSearchEnabled', true);\n      },\n\n      onSelectDropDown(record, path, value) {\n        // eslint-disable-next-line no-param-reassign\n        value = path === 'noSharing' ? value.id : value;\n        record.set(path, value);\n      },\n\n      // overriding the parent method and validate addresses\n      onCellValueChange(record, valuePath, value, options) {\n        const maxXYDelta = this.get('maxXYDelta');\n        const isScheduled = record.get('isScheduled');\n\n        if (isScheduled && Ember.isPresent(options) && Ember.isPresent(value) && Ember.isPresent(value.lat) && Ember.isPresent(value.lon) && options.addressTypeOption && (options.valuePath === ZONE_NAME_PATH || options.valuePath === LOCATION_PATH)) {\n          const pickPlacePosition = this.get('previousPickLocation');\n          const dropPlacePosition = this.get('previousDropLocation');\n          const previousLocation = options.addressTypeOption === PICK ? pickPlacePosition : dropPlacePosition;\n          const distance = (0, _locationValidation.getDistanceBetweenFromLatLon)(previousLocation.lat, previousLocation.lng, value.lat, value.lon);\n          this.set('isInvalidAddressSelected', false);\n\n          if (distance > maxXYDelta) {\n            this.get('notifications').warning('New location is too far away from original location');\n            this.set('isInvalidAddressSelected', true);\n          }\n        }\n\n        if (this.get('isInvalidAddressSelected')) {\n          record.set(`${valuePath}.isForceDirty`, false);\n          return;\n        }\n\n        record.set(`${valuePath}.isForceDirty`, true);\n        return record.set(`${valuePath}.${options.valuePath}`, value);\n      },\n\n      onCloseClick() {\n        this._super(...arguments);\n\n        const trip = this.get('trip');\n        const pickLocation = (0, _unwrapProxy.unwrapProxy)(trip.get('pick.segmentStop.place.location'));\n        const dropLocation = (0, _unwrapProxy.unwrapProxy)(trip.get('drop.segmentStop.place.location'));\n        const leg = (0, _unwrapProxy.unwrapProxy)(trip.get('segment.leg'));\n        const segment = (0, _unwrapProxy.unwrapProxy)(trip.get('segment'));\n        const rider = (0, _unwrapProxy.unwrapProxy)(trip.get('segment.leg.rider'));\n        leg && leg.rollbackAttributes();\n        segment && segment.rollbackAttributes();\n        rider && rider.rollbackAttributes();\n\n        if (pickLocation) {\n          pickLocation.rollbackAttributes();\n        }\n\n        if (dropLocation) {\n          dropLocation.rollbackAttributes();\n        }\n\n        this.onCloseClick();\n      },\n\n      onNumberChange(record, valuePath, maskObj) {\n        const segmentStop = valuePath === 'pickPhoneNumber' ? (0, _unwrapProxy.unwrapProxy)(record.get('pick.segmentStop')) : (0, _unwrapProxy.unwrapProxy)(record.get('drop.segmentStop'));\n        const segStopPhoneNumber = segmentStop.get('phoneNumbers.firstObject'); // there may be 0-many phoneNumbers to 1 segment stop\n\n        const areaCode = maskObj.unmasked.substring(0, 3).trim();\n        const phoneNumber = maskObj.unmasked.substring(3).trim(); // this case doesn't make sense, having phone number object but no id\n\n        if (segStopPhoneNumber && !segStopPhoneNumber.get('id')) {\n          segStopPhoneNumber.set('areaCode', areaCode);\n          segStopPhoneNumber.set('phoneNumber', phoneNumber);\n          segStopPhoneNumber.set('isForceDirty', true);\n          record.set(valuePath, segStopPhoneNumber);\n        } // existing segment stop phone number\n\n\n        if (segStopPhoneNumber && segStopPhoneNumber.get('id')) {\n          const segmentStopPhoneNumberId = segStopPhoneNumber.get('id');\n          const segmentStopPhoneNumber = this.get('store').peekRecord('segment-stop-phone-number', segmentStopPhoneNumberId);\n          segmentStopPhoneNumber.set('areaCode', areaCode);\n          segmentStopPhoneNumber.set('phoneNumber', phoneNumber);\n          segStopPhoneNumber.set('isForceDirty', true);\n          record.set(valuePath, segmentStopPhoneNumber);\n          return;\n        } // if the segment stop doesn't have a phone number\n\n\n        if (!segStopPhoneNumber) {\n          const phoneNumberObj = {\n            type: _riderPhoneNumber.HOME_PHONE_TYPE,\n            areaCode: areaCode,\n            phoneNumber: phoneNumber,\n            segmentStop: segmentStop,\n            extension: '',\n            description: 'HOME CONTACT #',\n            mobileCarrier: 'yes',\n            useForSmsNotifications: false,\n            useForVoiceNotifications: true\n          };\n          const segmentStopPhoneNumber = this.get('store').createRecord('segment-stop-phone-number', phoneNumberObj);\n          record.set(valuePath, segmentStopPhoneNumber);\n          return;\n        }\n      },\n\n      onNotesChange(record, valuePath, maskObj) {\n        record.set(valuePath, maskObj);\n        return;\n      },\n\n      onDateChange(record, valuePath, value) {\n        record.set(valuePath, value);\n      },\n\n      onDistanceButtonClick() {\n        const map = this.get('booking.bookingMap.native');\n\n        this._bodyClickFunction = event => {\n          this.actions.onBodyClickFunction(event, this);\n        };\n\n        document.body.addEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', true);\n        map.on('click', e => {\n          this.setDistances(e.latlng);\n        });\n        Ember.$('.tomtom-map').addClass('pinpoint-cursor');\n      },\n\n      onBodyClickFunction(e, thisObject) {\n        const node = e.target;\n        let isInPage = true;\n\n        if (document.getElementsByClassName('map-widget')[0]) {\n          isInPage = document.getElementsByClassName('map-widget')[0].contains(node);\n        }\n\n        if (isInPage === false) {\n          thisObject.distanceReset();\n        }\n      },\n\n      onDistanceClose() {\n        const map = this.get('booking.bookingMap.native');\n        document.body.removeEventListener('click', this._bodyClickFunction);\n        this.set('isComputingDistance', false);\n        this.distanceReset();\n        map.off('click');\n        Ember.$('.tomtom-map').removeClass('pinpoint-cursor');\n      },\n\n      onDistanceReset() {\n        this.distanceReset();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/edit-trip-widget/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.pickLocationFieldConfig = _exports.dropLocationFieldConfig = void 0;\n  const pickLocationFieldConfig = {\n    id: 'originaddresses',\n    type: 'addresses',\n    label: 'Pickup Address',\n    valuePath: 'pickPlace',\n    modelName: 'place',\n    markerType: 'pick',\n    extra: {\n      aliasPath: 'address.alias',\n      notesPath: 'address.notes',\n      premisePath: 'address.premise',\n      streetNumberPath: 'address.streetNumber',\n      streetNamePath: 'address.streetName',\n      localityPath: 'address.locality',\n      regionPath: 'address.region',\n      subRegionPath: 'address.county',\n      postalCodePath: 'address.postalCode',\n      countryPath: 'address.country',\n      freeformAddressPath: 'address.freeformAddress',\n      tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.streetAddress',\n      addressType: 'pick'\n    }\n  };\n  _exports.pickLocationFieldConfig = pickLocationFieldConfig;\n  const dropLocationFieldConfig = {\n    id: 'destinationaddresses',\n    type: 'addresses',\n    label: 'Pickup Address',\n    valuePath: 'dropPlace',\n    modelName: 'place',\n    markerType: 'drop',\n    extra: {\n      aliasPath: 'address.alias',\n      notesPath: 'address.notes',\n      premisePath: 'address.premise',\n      streetNumberPath: 'address.streetNumber',\n      streetNamePath: 'address.streetName',\n      localityPath: 'address.locality',\n      regionPath: 'address.region',\n      subRegionPath: 'address.county',\n      postalCodePath: 'address.postalCode',\n      countryPath: 'address.country',\n      freeformAddressPath: 'address.freeformAddress',\n      tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.streetAddress',\n      addressType: 'drop'\n    }\n  };\n  _exports.dropLocationFieldConfig = dropLocationFieldConfig;\n});","define(\"adept-iq/pods/components/side-drawer/edit-trip-widget/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"iEPLlN9Q\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"schedulingMode\\\",\\\"fareType\\\",\\\"anchor\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"id\\\"],[\\\"edit-trip-side-drawer\\\",\\\"target-element-id\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"and\\\",[[23,[\\\"canSave\\\"]],[27,\\\"not\\\",[[23,[\\\"isReadOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-header-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-subheader\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Passenger ID:\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"record\\\",\\\"riderId\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[23,[\\\"record\\\",\\\"riderId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            Unassigned\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Trip ID:\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"record\\\",\\\"tripId\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[23,[\\\"record\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            Unassigned\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L30:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-3\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[9],[1,[22,6,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L41:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Details\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Request Time \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"format\\\",\\\"readonlyCell\\\",\\\"value\\\",\\\"allowInput\\\",\\\"onChange\\\"],[true,false,true,\\\"\\\",[27,\\\"or\\\",[[23,[\\\"hasPromiseTime\\\"]],[23,[\\\"isReadOnly\\\"]]],null],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeFlatPickr\\\"]],[23,[\\\"hasPromiseTime\\\"]],[23,[\\\"record\\\",\\\"requestTime\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",[23,[\\\"record\\\"]],\\\"requestTime\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Anchor \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"anchorOptions\\\"]],[23,[\\\"record\\\",\\\"anchor\\\"]],\\\"Select anchor\\\",[27,\\\"or\\\",[[23,[\\\"hasPromiseTime\\\"]],[23,[\\\"isReadOnly\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectDropDown\\\",[23,[\\\"record\\\"]],\\\"anchor\\\"],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,5,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L89:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Pickup Address & Phone Number\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Pickup Address \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell address-search\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"field\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"format\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"record\\\",\\\"pickPlace\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"pickLocationFieldConfig\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"pickLocationFieldConfig\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"record\\\"]],[23,[\\\"pickLocationFieldConfig\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"pickLocationFieldConfig\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"record\\\",\\\"pickPlace\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"pickLocationFieldConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"pickLocationFieldConfig\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"pickLocationFieldConfig\\\",\\\"extra\\\"]]],null],[23,[\\\"isReadOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"record\\\"]],[23,[\\\"pickLocationFieldConfig\\\",\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Notes \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"Address Notes\\\",[23,[\\\"record\\\",\\\"pickAddressNotes\\\"]],[23,[\\\"isReadOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNotesChange\\\",[23,[\\\"record\\\"]],\\\"pickAddressNotes\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Pick-up Phone \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\",\\\"disabled\\\"],[[23,[\\\"phoneNumberPlaceHolder\\\"]],\\\"999-999-9999\\\",[23,[\\\"record\\\",\\\"pick\\\",\\\"segmentStopPhoneNumber\\\",\\\"fullPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[23,[\\\"record\\\"]],\\\"pickPhoneNumber\\\"],null],[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"editPhoneNumberGranted\\\"]]],null],[23,[\\\"isReadOnly\\\"]]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L147:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Drop-off Address & Phone Number\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Drop-off Address \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell address-search\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"field\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"format\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"record\\\",\\\"dropPlace\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"dropLocationFieldConfig\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"dropLocationFieldConfig\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"record\\\"]],[23,[\\\"dropLocationFieldConfig\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"dropLocationFieldConfig\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"record\\\",\\\"dropPlace\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"dropLocationFieldConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"dropLocationFieldConfig\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"dropLocationFieldConfig\\\",\\\"extra\\\"]]],null],[23,[\\\"isReadOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"record\\\"]],[23,[\\\"dropLocationFieldConfig\\\",\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Notes \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"Address Notes\\\",[23,[\\\"record\\\",\\\"dropAddressNotes\\\"]],[23,[\\\"isReadOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNotesChange\\\",[23,[\\\"record\\\"]],\\\"dropAddressNotes\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Drop-off Phone \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"value\\\",\\\"onChange\\\",\\\"disabled\\\"],[[23,[\\\"phoneNumberPlaceHolder\\\"]],\\\"999-999-9999\\\",[23,[\\\"record\\\",\\\"drop\\\",\\\"segmentStopPhoneNumber\\\",\\\"fullPhoneNumber\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNumberChange\\\",[23,[\\\"record\\\"]],\\\"dropPhoneNumber\\\"],null],[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"editPhoneNumberGranted\\\"]]],null],[23,[\\\"isReadOnly\\\"]]],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L205:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Notes\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Passenger Notes \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"maxlength\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"4096\\\",[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"editPassengerNotesGranted\\\"]]],null],[23,[\\\"isReadOnly\\\"]]],null],[23,[\\\"record\\\",\\\"passengerNotes\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Driver Notes \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"maxlength\\\",\\\"value\\\",\\\"disabled\\\"],[\\\"text\\\",\\\"4096\\\",[23,[\\\"record\\\",\\\"driverNotes\\\"]],[23,[\\\"isReadOnly\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L243:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Fare\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Type \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"fareTypeOptions\\\"]],[23,[\\\"record\\\",\\\"fareType\\\"]],\\\"Select Fare\\\",[23,[\\\"isReadOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectDropDown\\\",[23,[\\\"record\\\"]],\\\"fareType\\\"],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,4,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Fare \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"disabled\\\",\\\"onchange\\\"],[\\\"number\\\",[23,[\\\"record\\\",\\\"fare\\\"]],[23,[\\\"isReadOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"record\\\"]],\\\"fare\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs' @ L285:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Scheduling Mode\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-12\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Scheduling Mode \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"schedulingModeOptions\\\"]],[27,\\\"or\\\",[[23,[\\\"record\\\",\\\"disabledSchedulingMode\\\"]],[23,[\\\"isReadOnly\\\"]]],null],[23,[\\\"record\\\",\\\"schedulingMode\\\"]],\\\"Select Fare\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSelectDropDown\\\",[23,[\\\"record\\\"]],\\\"schedulingMode\\\"],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n             \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-label\\\"],[9],[0,\\\"Rideshare \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-edit-cell\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"rideshareOptions\\\"]],\\\"name\\\",[27,\\\"or\\\",[[27,\\\"if\\\",[[23,[\\\"editRideshareGranted\\\"]],false,true],null],[23,[\\\"isReadOnly\\\"]]],null],[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"record\\\",\\\"noSharing\\\"]],[23,[\\\"rideshareOptions\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectDropDown\\\",[23,[\\\"record\\\"]],\\\"noSharing\\\"],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"showMapModal\\\"]]],null,{\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"target\\\",\\\"targetAttachment\\\",\\\"containerClass\\\",\\\"attachment\\\",\\\"translucentOverlay\\\"],[\\\"#target-element-id\\\",\\\"middle right\\\",\\\"booking-trip-map-container\\\",\\\"middle left\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isComputingDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map map-widget-controls\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-box\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"computedDistance\\\"]]],null,{\\\"statements\\\":[[0,\\\"            Distance is \\\"],[1,[21,\\\"computedDistance\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"              Please click to drop pin 1\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"              Please click to drop pin 2\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-control right-control\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not-eq\\\",[null,[23,[\\\"distancePt1\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control reset-button\\\"],[9],[0,\\\" Reset \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceReset\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\" \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceClose\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"booking-map map-widget-controls\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-distance-box\\\"],[9],[0,\\\"Map\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"right-control\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control distance-icon\\\"],[9],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDistanceButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[1,[27,\\\"side-drawer/edit-trip-widget/booking-map\\\",null,[[\\\"elementId\\\",\\\"widget\\\",\\\"latLongPairs\\\",\\\"isEditMode\\\",\\\"record\\\",\\\"validateBlockoutAddress\\\"],[\\\"booking\\\",[23,[\\\"widget\\\"]],[23,[\\\"latLongPairs\\\"]],[23,[\\\"isEditMode\\\"]],[23,[\\\"record\\\"]],[23,[\\\"validateBlockoutAddress\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/edit-trip-widget/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/filter-settings/component\", [\"exports\", \"adept-iq/config/filter-types\", \"adept-iq/utils/filters\", \"moment\", \"lodash\"], function (_exports, _filterTypes, _filters, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SPACER_COLUMN_ID = 'spacer';\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    tagName: '',\n    title: 'Filter Settings',\n    componentName: 'filterSidePanel',\n    allVisbility: true,\n    filterTypes: _filterTypes.filterTypes,\n    quickFilterName: null,\n    allowDisplayHash: null,\n    columns: Ember.computed.readOnly('stackFrame.options.columns'),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    dataColumns: Ember.computed('columns.[]', function () {\n      const columns = this.get('columns');\n      const slicedColumns = columns.slice(1);\n      (0, _lodash.remove)(slicedColumns, col => {\n        const allowDisplayAttr = Ember.isPresent(col.config) ? col.config.allowDisplayAttr : null;\n        let allowColumn = this.get('allowDisplayHash')[allowDisplayAttr]; // disable a specific column depending if allowDisplayAttr exist in config\n\n        allowColumn = Ember.isPresent(allowColumn) ? allowColumn : true;\n        return !allowColumn || col.id === SPACER_COLUMN_ID;\n      });\n      return slicedColumns;\n    }),\n    isClearAllDisabled: Ember.computed('dataColumns.@each.{filterTypeId,filterValues}', 'quickFilterName', function () {\n      const quickFilterName = this.get('quickFilterName');\n      const dataColumns = this.get('dataColumns');\n      const length = dataColumns.length;\n      return Ember.isEmpty(quickFilterName) && dataColumns.filter(column => (Ember.isEmpty(column.filterTypeId) || column.filterTypeId === 'null') && Ember.isEmpty(column.filterValues)).length === length;\n    }),\n    isQuickFiltersAllowed: Ember.computed('workspace.{isBookingDashboard,isReconcileDashboard,isReportsDashboard}', function () {\n      return !this.get('workspace.isBookingDashboard') && !this.get('workspace.isReconcileDashboard') && !this.get('workspace.isReportsDashboard');\n    }),\n\n    reOrderFilterSettings(columns) {\n      this.get('widget').mergeState({\n        columns\n      });\n      const tableColumns = this.get('columns') || []; // checkbox and spacer are always in the same location\n\n      tableColumns[0].sortOrder = 0;\n      tableColumns[tableColumns.length - 1].sortOrder = tableColumns.length - 1;\n      tableColumns.forEach(column => {\n        if (columns[column.id]) {\n          column.sortOrder = columns[column.id].index + 1;\n        }\n      });\n      tableColumns.sort(function (a, b) {\n        return a.sortOrder - b.sortOrder;\n      });\n      this.notifyPropertyChange('columns');\n    },\n\n    // populate allowDisplayHash for columns in column widget attribute called allowDisplayAttr\n    configureAllowDisplayHash() {\n      this.set('allowDisplayHash', {\n        allowFundingAgency: this.get('booking').getAllowFundingAgency()\n      });\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.configureAllowDisplayHash();\n    },\n\n    saveFilters(widgetState, widgetStates) {\n      const widgetId = this.get('widget.id');\n      const widgetTypeId = this.get('widget.typeId');\n      const widgetInstanceId = `${widgetTypeId}_${widgetId}`;\n      const columnList = this.get('dataColumns') || [];\n      const quickFilters = widgetState.quickFilters || [];\n      const existingFilterNames = quickFilters.map(obj => obj.displayName);\n      const filterName = this.get('quickFilterName') || (0, _filters.generateFilterName)(existingFilterNames);\n      const args = columnList.map(column => {\n        return column.get('filterNode');\n      }).compact();\n      const newFilterId = (0, _moment.default)().unix();\n      const newFilter = {\n        id: newFilterId,\n        displayName: filterName,\n        filters: args,\n        widgetInstanceId\n      }; // insert new filter to local\n\n      quickFilters.push(newFilter);\n      this.set('workspace.newlyCreatedQuickFilter', newFilter);\n      this.set('workspace.widgetStates', widgetStates);\n      this.set('quickFilterName', ''); // insert new filter to dashboard model\n\n      const dashboardwidgetStates = { ...this.get('workspace.dashboardInstance.widgetStates')\n      };\n      let dashboardWidgetState = dashboardwidgetStates[widgetTypeId] || {};\n      let dashBoardQuickFilters = dashboardWidgetState.quickFilters || [];\n\n      if (Ember.isNone(dashboardWidgetState.quickFilters)) {\n        dashboardwidgetStates[widgetTypeId] = {\n          widgetInstanceId,\n          quickFilters: []\n        };\n        dashboardWidgetState = dashboardwidgetStates[widgetTypeId];\n        dashBoardQuickFilters = dashboardWidgetState.quickFilters;\n      }\n\n      this.set('workspace.dashboardInstance.widgetStates', dashboardwidgetStates);\n      const newDashboardFilter = {\n        id: newFilterId,\n        displayName: filterName,\n        filters: args,\n        widgetInstanceId\n      };\n      dashBoardQuickFilters.push(newDashboardFilter);\n    },\n\n    actions: {\n      onQuickFilterNameInput(text) {\n        const quickFilterName = text || '';\n        this.set('quickFilterName', quickFilterName.trim());\n      },\n\n      onCloseClick() {\n        const workspace = this.get('workspace'); // save any filter changes i.e columns reorders, visibility, and filter changes\n\n        workspace.saveTempDashboardState();\n        this.onCloseClick();\n      },\n\n      onReorderItems(tableColumns) {\n        const columns = tableColumns.reduce((obj, column, index) => {\n          const id = column.id;\n          obj[id] = {\n            index\n          };\n          return obj;\n        }, {});\n        this.reOrderFilterSettings(columns);\n      },\n\n      onClickVisibilityCheckbox(column, event) {\n        const id = column.get('id');\n\n        if (id !== 'reportName') {\n          const columns = {};\n          columns[id] = {\n            hidden: !event.target.checked\n          };\n\n          if (columns[id].hidden) {\n            columns[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n            columns[id].filterValues = null;\n          }\n\n          this.get('widget').mergeState({\n            columns\n          });\n        }\n      },\n\n      onToggleAllVisibility(tableColumns) {\n        const allVisbility = !this.get('allVisbility');\n        this.set('allVisbility', allVisbility);\n        const columns = tableColumns.reduce((obj, column) => {\n          const id = column.id;\n          obj[id] = {\n            hidden: id === 'reportName' ? false : allVisbility\n          };\n\n          if (allVisbility) {\n            obj[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n            obj[id].filterValues = null;\n          }\n\n          return obj;\n        }, {});\n        Ember.run(() => this.get('widget').mergeState({\n          columns\n        }));\n      },\n\n      onSelectFilterType(column, filterType) {\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          filterTypeId: filterType.id\n        };\n        this.get('widget').mergeState({\n          columns\n        }); // @TODO: focus on filter value input\n      },\n\n      onFilterValueChange(column, index, event) {\n        let filterValues = column.get('filterValues') || [];\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value;\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          filterValues\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      clearFilters() {\n        const columnList = this.get('columns') || [];\n        const columns = columnList.reduce((obj, column) => {\n          obj[column.id] = {\n            filterTypeId: 'null',\n            // this is actually the id of the null filter\n            filterValues: null\n          };\n          return obj;\n        }, {});\n        this.get('widget').mergeState({\n          columns\n        });\n        this.set('quickFilterName', '');\n      },\n\n      onSaveFilters() {\n        const widgetTypeId = this.get('widget.typeId');\n        const widgetStates = { ...this.get('workspace.widgetStates')\n        };\n        let widgetState = widgetStates[widgetTypeId];\n\n        if (Ember.isNone(widgetState)) {\n          widgetStates[widgetTypeId] = {\n            quickFilters: []\n          };\n          widgetState = widgetStates[widgetTypeId];\n        }\n\n        const quickFilters = widgetState.quickFilters || [];\n        const tooltip = this.get('tooltip');\n        const title = 'Manage Filter'; // a new one would put the number above 21\n\n        if (quickFilters.length > 19) {\n          tooltip.pushConfirmation({\n            tip: 'You have reached the limit of 20 filters. To add new filters, you must delete existing ones.',\n            title,\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              tooltip.reset();\n            }\n          });\n          return;\n        }\n\n        this.saveFilters(widgetState, widgetStates);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/filter-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YXipJN4O\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"group\\\",\\\"column\\\",\\\"item\\\",\\\"filterType\\\",\\\"filterType\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"filter-settings-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/filter-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"canRefresh\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\",\\\"onRefreshClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"not\\\",[[23,[\\\"isClearAllDisabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"clearFilters\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/filter-settings/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-subheader data-test-filter-side-bar-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"reorder-column\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"visibility-column\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleAllVisibility\\\",[23,[\\\"dataColumns\\\"]]],null]],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"allVisbility\\\"]],\\\"eye-slash\\\",\\\"eye\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"header-label-column\\\"],[9],[0,\\\"Column\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"filter-type-column\\\"],[9],[0,\\\"Filter\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isQuickFiltersAllowed\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"header-input-quick-filter\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"quickFilterName\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onQuickFilterNameInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"header-button-quick-filter\\\"],[12,\\\"disabled\\\",[21,\\\"isClearAllDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSaveFilters\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n                  Save Filter\\\\n              \\\"],[10],[0,\\\" \\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-table-wrapper data-test-filter-side-bar-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"sortable-group\\\",null,[[\\\"classNames\\\",\\\"tagName\\\",\\\"onChange\\\"],[\\\"filter-settings-table\\\",\\\"div\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReorderItems\\\"],null]]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dataColumns\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"item\\\"]],\\\"expected `group.item` to be a contextual component but found a string. Did you mean `(component group.item)`? ('adept-iq/pods/components/side-drawer/filter-settings/template.hbs' @ L38:C13) \\\"],null]],[[\\\"classNames\\\",\\\"tagName\\\",\\\"model\\\"],[\\\"filter-setting-row\\\",\\\"div\\\",[22,3,[]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"config\\\",\\\"label\\\"]],\\\"priorityId\\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"config\\\",\\\"id\\\"]],\\\"reportName\\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"handle\\\"]],\\\"expected `item.handle` to be a contextual component but found a string. Did you mean `(component item.handle)`? ('adept-iq/pods/components/side-drawer/filter-settings/template.hbs' @ L41:C17) \\\"],null]],[[\\\"classNames\\\"],[\\\"setting-icon\\\"]],{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"img\\\"],[11,\\\"class\\\",\\\"handle\\\"],[11,\\\"src\\\",\\\"/handles.png\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[7,\\\"input\\\"],[12,\\\"data-filter-checkbox-id\\\",[28,[[23,[\\\"widget\\\",\\\"typeId\\\"]],[27,\\\"if\\\",[[23,[\\\"widget\\\",\\\"typeId\\\"]],\\\"-\\\",\\\"\\\"],null],[22,3,[\\\"config\\\",\\\"id\\\"]],\\\" \\\",[27,\\\"if\\\",[[22,3,[\\\"hidden\\\"]],\\\"\\\",\\\"active\\\"],null]]]],[11,\\\"class\\\",\\\"display-checkbox\\\"],[11,\\\"data-test-visibility-column\\\",\\\"\\\"],[12,\\\"checked\\\",[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickVisibilityCheckbox\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[22,3,[\\\"config\\\",\\\"label\\\"]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-type\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[22,3,[\\\"hidden\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[1,[22,6,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"shouldDisableFilterInput\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"shouldDisableFilterInput\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"shouldDisableFilterInput\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"handle\\\"]],\\\"expected `item.handle` to be a contextual component but found a string. Did you mean `(component item.handle)`? ('adept-iq/pods/components/side-drawer/filter-settings/template.hbs' @ L102:C17) \\\"],null]],[[\\\"classNames\\\"],[\\\"setting-icon\\\"]],{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"img\\\"],[11,\\\"class\\\",\\\"handle\\\"],[11,\\\"src\\\",\\\"/handles.png\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"display-checkbox_disable\\\"],[9],[0,\\\"\\\\n                     \\\"],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/disabled_checkbox.png\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[22,3,[\\\"config\\\",\\\"label\\\"]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-type\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[22,3,[\\\"hidden\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[1,[22,5,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"shouldDisableFilterInput\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"shouldDisableFilterInput\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"shouldDisableFilterInput\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/filter-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/gauge-chart-settings/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/gauge-chart-settings/config\", \"adept-iq/pods/components/generic-widgets/column-widget/classes/filter-column\"], function (_exports, _config, _filterColumn) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    workspace: Ember.inject.service(),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    title: 'Gauge Chart',\n    dataType: null,\n    sourceOptions: null,\n    displayOptions: Ember.computed('dataType.displayOptions', function () {\n      return Object.values(this.get('dataType.displayOptions'));\n    }),\n    visualOptions: Ember.computed('dataType.visualOptions', function () {\n      return Object.values(this.get('dataType.visualOptions'));\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('sourceOptions', _config.default);\n      const dataType = this.get('widget.state.dataType');\n      this.set('dataType', dataType);\n\n      if (Ember.isPresent(dataType)) {\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n      }\n    },\n\n    actions: {\n      onTypeSelect(dataType) {\n        this.set('dataType', dataType);\n        this.set('filterColumns', Object.values(dataType.columns).map(col => new _filterColumn.default(col)));\n        this.get('widget').mergeState({\n          dataType\n        });\n      },\n\n      setDisplayOptionVisibility(selected) {\n        this.set('dataType.displayOptions.selected', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setDisplayOptionMetric(selected) {\n        this.set('dataType.displayOptions.selected.metricOption', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setDisplayOptionValueCategory(selected) {\n        this.set('dataType.displayOptions.selected.valueCategory', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onTitleInput(data) {\n        this.set('dataType.title', data);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setVisualOptionVisibility(selected, event) {\n        Ember.set(selected, 'isChecked', event.target.checked);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onFilterValueChange(column, index, event) {\n        let filterValues = column.get('filterValues') || [];\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value; // Update the displayed filter column.\n\n        Ember.set(column, 'filterValues', filterValues);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterValues`, filterValues);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onSelectFilterType(column, filterType) {\n        // Update the displayed filter column.\n        Ember.set(column, 'filterTypeId', filterType.id);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterTypeId`, filterType.id);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onGoColorChange(color, data) {\n        /*eslint-disable */\n        data = parseInt(data);\n        /*eslint-enable */\n\n        if (data) {\n          Ember.set(this.get('dataType'), `boxColor.${color}`, data);\n          this.get('widget').mergeState({\n            dataType: this.get('dataType')\n          });\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/gauge-chart-settings/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const COLUMNS = {\n    routeColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          format: 'hh:mm A',\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    },\n    tripColumns: {\n      status: {\n        id: 'status',\n        config: {\n          id: 'status',\n          index: 5,\n          type: 'text',\n          label: 'Status',\n          valuePath: 'status',\n          editable: true,\n          hidden: false,\n          defaultWidth: 75\n        },\n        filterTypeId: 'stringEq',\n        filterValues: ['Scheduled']\n      }\n    }\n  };\n  const VISUAL_OPTIONS = {\n    value: {\n      id: 'value',\n      name: 'Show Value',\n      isChecked: true\n    },\n    percentage: {\n      id: 'percentage',\n      name: 'Show Percentage',\n      isChecked: true\n    }\n  };\n  const BOX_COLOR = {\n    orange: 2,\n    red: 4\n  };\n  var _default = [{\n    name: 'Routes',\n    modelName: 'route',\n    columns: COLUMNS.routeColumns,\n    displayOptions: {\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategory: {\n          label: 'Late',\n          value: 'L'\n        },\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: {\n          id: 'count',\n          name: 'Count'\n        },\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      },\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      }]\n    },\n    title: '',\n    visualOptions: VISUAL_OPTIONS,\n    boxColor: BOX_COLOR\n  }, {\n    name: 'Trips',\n    modelName: 'iq-trip',\n    columns: COLUMNS.tripColumns,\n    displayOptions: {\n      selected: {\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategory: {\n          label: 'Late',\n          value: 'L'\n        },\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOption: {\n          id: 'count',\n          name: 'Count'\n        },\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      },\n      options: [{\n        id: 'otp',\n        name: 'OTP Status',\n        label: 'OTP',\n        valueKey: 'otp',\n        valueCategories: [{\n          label: 'On Time',\n          value: 'O'\n        }, {\n          label: 'Late',\n          value: 'L'\n        }, {\n          label: 'In Danger',\n          value: 'D'\n        }, {\n          label: 'Early',\n          value: 'E'\n        }],\n        metricOptions: [{\n          id: 'count',\n          name: 'Count'\n        }]\n      }]\n    },\n    title: '',\n    visualOptions: VISUAL_OPTIONS,\n    boxColor: BOX_COLOR\n  }];\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/gauge-chart-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Kz2myCRl\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"visualOption\\\",\\\"column\\\",\\\"filterType\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"type\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"metrics-widget-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/gauge-chart-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/gauge-chart-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Type:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"sourceOptions\\\"]]],null],[23,[\\\"dataType\\\"]],\\\"Select Type\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,8,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Display:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"options\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionVisibility\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"valueCategories\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"valueCategory\\\"]],\\\"Select Category\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionValueCategory\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,6,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOptions\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOption\\\"]],\\\"Select Metric\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionMetric\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Filter by Status:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filterColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[27,\\\"eq\\\",[[22,3,[\\\"filterTypes\\\",\\\"length\\\"]],0],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,4,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Visuals\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\",\\\"placeholder\\\"],[\\\"text\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"title\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],\\\"Widget Title\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"visualOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-checkbox\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[22,2,[\\\"isChecked\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setVisualOptionVisibility\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[1,[22,2,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Box Colors\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-number-input\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Go Orange:\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"id\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\"],[\\\"number\\\",\\\"go-orange-input\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"boxColor\\\",\\\"orange\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"orange\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"orange\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-number-input\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Go Red:\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"id\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\"],[\\\"number\\\",\\\"go-red-input\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"boxColor\\\",\\\"red\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"red\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onGoColorChange\\\",\\\"red\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/gauge-chart-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-filter/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    mapService: Ember.inject.service('map'),\n    // map-context layers are ephemeral, so use `id` for selection state\n    selectedLayerId: null,\n    onShrinkClick: null,\n    currentState: null,\n    title: 'Map Layers',\n    componentName: 'filterMap',\n    // layers: computed.readOnly('mapService.topMapContext.layers'),\n    layers: Ember.computed('mapService.topMapContext.layers', 'mapService.workspace.dashboard.{name,id}', function () {\n      const activeWorkspace = Ember.get(this, 'mapService.workspace.dashboard.name');\n      const activeWorkspaceId = Ember.get(this, 'mapService.workspace.dashboard.id');\n      const layers = Ember.get(this, 'mapService.topMapContext.layers');\n      if (activeWorkspace === 'Playback' && activeWorkspaceId === 'workspaces-playback/playback') return layers.filter(layer => layer.id === 'vehicle-events');\n      return layers;\n    }),\n    visibilitySection: Ember.computed('mapService.workspace.dashboard.{name,id}', function () {\n      const activeWorkspace = Ember.get(this, 'mapService.workspace.dashboard.name');\n      const activeWorkspaceId = Ember.get(this, 'mapService.workspace.dashboard.id');\n      if (activeWorkspace === 'Playback' && activeWorkspaceId === 'workspaces-playback/playback') return true;\n      return false;\n    }),\n    selectedLayer: Ember.computed('layers', 'selectedLayerId', function () {\n      const layerId = this.get('selectedLayerId');\n      if (Ember.isNone(layerId)) return null;\n      const layers = this.get('layers');\n      if (Ember.isEmpty(layers)) return null;\n      return layers.findBy('id', layerId);\n    }),\n    isAgencyLayer: Ember.computed.equal('selectedLayerId', 'agency'),\n    disabled: Ember.computed.not('selectedLayerId'),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n      const layers = this.get('layers');\n\n      if (currentState) {\n        this.selectLayer(layers[currentState.index]); // this.set('selectedLayerId', currentState.selectedLayerId); on shrink function call\n      } else {\n        if (Ember.isEmpty(layers)) return;\n        this.selectLayer(layers[0]);\n      }\n    },\n\n    selectLayer(layer) {\n      this.set('selectedLayerId', layer.id);\n    },\n\n    calIndex() {\n      const layers = this.get('layers');\n      const selectedLayer = this.get('selectedLayerId');\n\n      for (let i = 0; i < layers.length; i++) {\n        if (layers[i].id === selectedLayer) {\n          return i;\n        }\n      }\n    },\n\n    updateCurrentState() {\n      let currentState = this.get('currentState');\n      const index = this.calIndex();\n      currentState = {\n        index\n      };\n      this.set('currentState', currentState);\n    },\n\n    actions: {\n      onRefreshClick() {\n        this.updateCurrentState();\n        this.onShrinkClick();\n      },\n\n      onLayerSelect(layer) {\n        this.selectLayer(layer);\n        this.updateCurrentState();\n      },\n\n      onLayerVisibilityCheck(event) {\n        const layer = this.get('selectedLayer');\n        this.get('mapService').setLayerVisibility(layer.id, event.target.checked);\n      },\n\n      onTransparencySliderChange(value) {\n        const layer = this.get('selectedLayer');\n        this.get('mapService').setLayerOpacity(layer.id, value);\n      },\n\n      onShrinkClick() {\n        this.updateCurrentState();\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-filter/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"xzTehFOu\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"layer\\\",\\\"layer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"map-filter\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/map-filter/template.hbs' @ L5:C2) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/map-filter/template.hbs' @ L10:C3) \\\"],null]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"data-test-map-filter\\\",\\\"\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"selectedLayer\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-filter-subheader\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"layer-subheader-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"Layer   \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"layers\\\"]],[23,[\\\"selectedLayer\\\"]],\\\"Select Layer\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onLayerSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"visibility-subheader-section\\\"],[12,\\\"style\\\",[27,\\\"if\\\",[[27,\\\"readonly\\\",[[23,[\\\"visibilitySection\\\"]]],null],\\\" display: none;\\\"],null]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-checkbox\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"disabled\\\",\\\"change\\\"],[\\\"checkbox\\\",[27,\\\"readonly\\\",[[23,[\\\"selectedLayer\\\",\\\"isVisible\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onLayerVisibilityCheck\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\" disabled\\\"],null]]]],[9],[0,\\\"Show\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-layer-transparency\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Transparency:\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ui-slider\\\",null,[[\\\"value\\\",\\\"changed\\\",\\\"min\\\",\\\"max\\\",\\\"step\\\",\\\"orientation\\\",\\\"tooltip\\\",\\\"tooltipPosition\\\",\\\"disabled\\\",\\\"reversed\\\",\\\"focus\\\",\\\"mood\\\",\\\"naturalArrowKeys\\\",\\\"immediateResponse\\\"],[[23,[\\\"selectedLayer\\\",\\\"opacity\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTransparencySliderChange\\\"],null],0,1,0.1,\\\"horizontal\\\",\\\"before\\\",\\\"bottom\\\",[23,[\\\"disabled\\\"]],false,false,\\\"success\\\",false,false]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[23,[\\\"selectedLayer\\\",\\\"id\\\"]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"isAgencyLayer\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"side-drawer/map-legend-filter\\\",null,[[\\\"layer\\\"],[[23,[\\\"selectedLayer\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[27,\\\"side-drawer/map-label-settings\\\",null,[[\\\"layer\\\",\\\"labels\\\"],[[23,[\\\"selectedLayer\\\"]],[23,[\\\"selectedLayer\\\",\\\"labels\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Layer:\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"layers\\\"]],[23,[\\\"selectedLayer\\\"]],\\\"Select Layer\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onLayerSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[22,2,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/map-filter/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-label-preview/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['map-label-preview'],\n    labels: null,\n    // This computed property is required, as Ember is not updating the list order\n    // when the passed in `labels` property changes order.\n    labelData: Ember.computed('labels', 'labels.@each.index', function () {\n      return this.get('labels');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-label-preview/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"iWXtuRqW\",\n    \"block\": \"{\\\"symbols\\\":[\\\"label\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"id\\\",\\\"map-filter-preview\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Label Preview\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tbody\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"labelData\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,1,[\\\"isVisible\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[7,\\\"td\\\"],[9],[7,\\\"b\\\"],[9],[1,[22,1,[\\\"label\\\"]],false],[10],[0,\\\": \\\"],[1,[22,1,[\\\"valuePreview\\\"]],false],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/map-label-preview/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-label-settings/component\", [\"exports\", \"adept-iq/config/column-types\", \"adept-iq/config/filter-types\"], function (_exports, _columnTypes, _filterTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const displays = ['On Left Click', 'Always'];\n\n  var _default = Ember.Component.extend({\n    mapService: Ember.inject.service('map'),\n    workspace: Ember.inject.service(),\n    classNames: ['filter-settings'],\n    columnTypesHash: _columnTypes.columnTypesHash,\n    filterTypesHash: _filterTypes.filterTypesHash,\n    layer: null,\n    toggleEye: false,\n    selectedDisplay: null,\n    isEyeOpen: Ember.computed.not('toggleEye'),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('displays', displays);\n    },\n\n    sortedLabels: Ember.computed('layer.labels', function () {\n      const labels = this.get('layer.labels');\n      const sortedLabels = labels.sortBy('index');\n      return sortedLabels;\n    }),\n\n    selectDisplay(display) {\n      this.set('layer.selectedDisplay', display);\n    },\n\n    actions: {\n      toggleCheckBoxes() {\n        const layer = this.get('layer');\n        const sortedLabels = this.get('sortedLabels') || [];\n        const eye = this.toggleProperty('isEyeOpen');\n        sortedLabels.forEach(label => {\n          const layerId = Ember.get(layer, 'id');\n          const labelId = Ember.get(label, 'id');\n          this.get('mapService').setLayerLabelVisibility(layerId, labelId, eye);\n        });\n      },\n\n      onReorderItems(labels) {\n        const layer = this.get('layer');\n        const labelIds = labels.mapBy('id');\n        this.get('mapService').setLayerLabelsOrder(layer.id, labelIds);\n      },\n\n      setVisibility(label, event) {\n        const layer = this.get('layer');\n        const layerId = Ember.get(layer, 'id');\n        const labelId = Ember.get(label, 'id');\n        this.get('mapService').setLayerLabelVisibility(layerId, labelId, event.target.checked);\n        this.set('mapService.topMapContext.refreshMap', true);\n      },\n\n      onSelectFilterType(label, filterType) {\n        const layer = this.get('layer');\n        const layerId = Ember.get(layer, 'id');\n        const labelId = Ember.get(label, 'id');\n        const filterTypeId = Ember.get(filterType, 'id');\n        this.get('mapService').setLayerLabelFilterType(layerId, labelId, filterTypeId);\n      },\n\n      onFilterValueChange(label, index, event) {\n        const layer = this.get('layer');\n        const layerId = Ember.get(layer, 'id');\n        const labelId = Ember.get(label, 'id');\n        let filterValues = Ember.get(label, 'filterValues') || []; // treat filter values as immutable\n\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value;\n        this.get('mapService').setLayerLabelFilterValues(layerId, labelId, filterValues);\n      },\n\n      clearFilters() {\n        const dashboard = this.get('workspace.dashboard');\n        dashboard.set('mapState', null);\n      },\n\n      onDisplaySelect(display) {\n        this.selectDisplay(display);\n        let displayAlways;\n\n        if (display === 'Always') {\n          displayAlways = true;\n        } else {\n          displayAlways = false;\n        }\n\n        this.get('mapService').setDisplayMapIconLabelAllTime(this.get('layer.id'), displayAlways);\n        this.set('mapService.topMapContext.refreshMap', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-label-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"5FuYiyNW\",\n    \"block\": \"{\\\"symbols\\\":[\\\"group\\\",\\\"label\\\",\\\"item\\\",\\\"display\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"filter-settings-table map-filter-settings\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"header-title\\\"],[11,\\\"colspan\\\",\\\"3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Labels \\\"],[7,\\\"span\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleCheckBoxes\\\"],null]],[12,\\\"class\\\",[27,\\\"if\\\",[[23,[\\\"isEyeOpen\\\"]],\\\"fa fa-eye\\\",\\\"fa fa-eye-slash\\\"],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"reorder-column\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"visibility-column\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"colspan\\\",\\\"3\\\"],[9],[0,\\\"  \\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\" display: flex;align-items: center;\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"label\\\"],[11,\\\"style\\\",\\\"height: 24px;margin: 0 10px 0 0;\\\"],[9],[0,\\\"\\\\n        Display   \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[23,[\\\"displays\\\"]],[23,[\\\"layer\\\",\\\"selectedDisplay\\\"]],\\\"Select\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDisplaySelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,4,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"sortable-group\\\",null,[[\\\"tagName\\\",\\\"onChange\\\"],[\\\"tbody\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReorderItems\\\"],null]]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"sortedLabels\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"item\\\"]],\\\"expected `group.item` to be a contextual component but found a string. Did you mean `(component group.item)`? ('adept-iq/pods/components/side-drawer/map-label-settings/template.hbs' @ L33:C7) \\\"],null]],[[\\\"tagName\\\",\\\"model\\\"],[\\\"tr\\\",[22,2,[]]]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"handle\\\"]],\\\"expected `item.handle` to be a contextual component but found a string. Did you mean `(component item.handle)`? ('adept-iq/pods/components/side-drawer/map-label-settings/template.hbs' @ L34:C9) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"reorder-column handle\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"img\\\"],[11,\\\"src\\\",\\\"/handles.png\\\"],[11,\\\"class\\\",\\\"reorder-handles\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"visibility-column\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"change\\\"],[\\\"checkbox\\\",[27,\\\"readonly\\\",[[22,2,[\\\"isVisible\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"setVisibility\\\",[22,2,[]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"label-column\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[22,2,[\\\"label\\\"]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/map-label-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-legend-filter/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['map-legend-filter'],\n    mapService: Ember.inject.service('map'),\n    isRoute: Ember.computed('layer', function () {\n      return this.get('layer.id') === 'routes';\n    }),\n    layer: null,\n    actions: {\n      setVisibility(type, event) {\n        this.set('mapService.topMapContext.refreshMap', true);\n        this.get('mapService').setLayerTypeVisibility(this.get('layer.id'), type.id, event.target.checked);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/map-legend-filter/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"eskQUppI\",\n    \"block\": \"{\\\"symbols\\\":[\\\"type\\\"],\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"id\\\",\\\"map-legend-table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Legend\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"layer\\\",\\\"types\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,1,[\\\"canFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"legend-checkbox\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"change\\\"],[\\\"checkbox\\\",\\\"data-test-type-visibility-checkbox\\\",[27,\\\"readonly\\\",[[22,1,[\\\"isVisible\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"setVisibility\\\",[22,1,[]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"legend-checkbox\\\"],[9],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[22,1,[\\\"display\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-legend-filter-icon\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,1,[\\\"linePath\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"img\\\"],[12,\\\"src\\\",[22,1,[\\\"linePath\\\"]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"img\\\"],[12,\\\"src\\\",[22,1,[\\\"iconPath\\\"]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"b\\\"],[9],[1,[22,1,[\\\"label\\\"]],false],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/map-legend-filter/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/no-show-form/config\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _config, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    editableSections: null,\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    noshowReason: null,\n    noshowDetails: null,\n    errors: null,\n    trip: Ember.computed.alias('stackFrame.options.trip'),\n    reason: Ember.computed.readOnly('trip.reason'),\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n    sectionId: Ember.computed.readOnly('stackFrame.options.sectionId'),\n    isNoShowApprovalForm: Ember.computed.equal('sectionId', 'approve'),\n    componentName: 'noShowTrip',\n\n    init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n      const sectionId = this.get('sectionId');\n      const isApprovalForm = this.get('isNoShowApprovalForm');\n      const noShowRequestReasonCode = this.get('trip.noShowRequestReasonCode');\n\n      const editableSections = _config.default.editableSections.filter(section => sectionId === section.id && section.id !== 'readOnly');\n\n      if (isApprovalForm) {\n        const noshowReasons = store.peekAll('no-show-reason-category');\n        let reason = noshowReasons.find(noShowReason => {\n          return noShowReason.name === noShowRequestReasonCode;\n        });\n        if (!reason) reason = noshowReasons.firstObject;\n        this.set('noshowReason', reason);\n      }\n\n      this.set('editableSections', editableSections);\n    },\n\n    onNoShowRequest() {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const trip = this.get('trip');\n      const tooltip = this.get('tooltip');\n      const isApprovalForm = this.get('isNoShowApprovalForm');\n      const type = isApprovalForm ? 'noShowAccepted' : 'noShowDeclined';\n      const notifications = this.get('notifications');\n      const title = this.get('title');\n      const noshowReason = (0, _unwrapProxy.unwrapProxy)(this.get('noshowReason'));\n      const onCloseClick = this.onCloseClick;\n      const message = isApprovalForm ? 'Approve' : 'Decline';\n      const noshowDetails = this.get('noshowDetails');\n      trip.set('noshowDetails', noshowDetails);\n      trip.set('noshowReason', noshowReason);\n      tooltip.pushConfirmation({\n        tip: `${message} No Show Request`,\n        title,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        secondaryActionText: 'Cancel',\n\n        primaryAction() {\n          return routeExecEventAdapter.createTripNoShowRequestEvent(trip, type).then(() => {\n            notifications.success(`Successfully ${message}d No Show`);\n            onCloseClick();\n            tooltip.reset();\n          }).catch(() => {\n            notifications.warning(`Failed to ${message} No Show`);\n            tooltip.reset();\n          });\n        },\n\n        secondaryAction() {\n          tooltip.reset();\n        }\n\n      });\n    },\n\n    actions: {\n      onClearClick() {\n        const editableSectionList = this.get('editableSections') || [];\n        const editableSections = editableSectionList.filter(section => section.title !== 'Read Only');\n        editableSections.forEach(section => {\n          const fields = section.fields || [];\n          fields.forEach(field => {\n            if (field.editable) this.set(field.valuePath, '');\n          });\n        });\n      },\n\n      onValueChange(valuePath, options) {\n        const value = options;\n        this.set(valuePath, value);\n      },\n\n      onSaveClick() {\n        return this.onNoShowRequest();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      id: 'deny',\n      title: 'Details',\n      fields: [{\n        id: 'note',\n        type: 'text-area',\n        editable: true,\n        label: 'Note',\n        valuePath: 'noshowDetails'\n      }]\n    }, {\n      id: 'approve',\n      title: 'Details',\n      fields: [{\n        id: 'noShowReason',\n        type: 'text',\n        label: 'Type',\n        valuePath: 'noshowReason.displayName',\n        editable: false\n      }, {\n        id: 'note',\n        type: 'text-area',\n        editable: true,\n        label: 'Note',\n        valuePath: 'noshowDetails'\n      }]\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/enum/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-select'],\n    value: null,\n    disabled: false,\n    extra: null,\n    store: Ember.inject.service(),\n    dataFromModel: false,\n    options: Ember.computed.alias('extra.options'),\n    allowMultiple: Ember.computed.alias('extra.allowMultiple'),\n    optionModelName: Ember.computed.alias('extra.optionModelName'),\n\n    init() {\n      this._super(...arguments);\n\n      const models = this.get('store').peekAll(this.get('optionModelName'));\n      this.set('dataFromModel', true);\n      this.set('options', models);\n    },\n\n    selected: Ember.computed('value', 'options', function () {\n      return this.get('options').find(option => {\n        return option.get('name') === this.get('value.name');\n      });\n    }),\n    actions: {\n      onChange(option) {\n        this.get('onChange')(option);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/enum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"hA274iqE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dataFromModel\\\"]],true],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"options\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"selected\\\"]]],null],false,[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"   \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/no-show-form/enum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XTvMpO79\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"section\\\",\\\"field\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"no-show-approval-form\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-header-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/no-show-form/template.hbs' @ L7:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],true,[27,\\\"action\\\",[[22,0,[]],\\\"onClearClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-subheader\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-readonly-section\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"readonly-label\\\"],[9],[0,\\\"Trip ID: \\\"],[1,[23,[\\\"trip\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/no-show-form/template.hbs' @ L25:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"editableSections\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/no-show-form/template.hbs' @ L41:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[[22,2,[\\\"title\\\"]],true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"no-show-form-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,2,[\\\"fields\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section-row\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[0,\\\" \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\" \\\"],[10],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/no-show-form/\\\",[22,3,[\\\"type\\\"]]],null]],[[\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,0,[]],[22,3,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,3,[\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"not\\\",[[22,3,[\\\"editable\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,3,[\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,3,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/no-show-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/text-area/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-text-area'],\n    value: null,\n    disabled: false,\n    actions: {\n      onInput() {\n        const value = this.get('value');\n        this.get('onChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/text-area/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Pj/5pr6P\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"textarea\\\",null,[[\\\"rows\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"maxlength\\\",\\\"value\\\",\\\"focus-out\\\"],[\\\"3\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\"Write a Note\\\",\\\"500\\\",[23,[\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"hint\\\"],[9],[1,[23,[\\\"value\\\",\\\"length\\\"]],false],[0,\\\"/500\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/no-show-form/text-area/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/text/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['form-components-text'],\n    value: null,\n    disabled: false,\n    actions: {\n      onInput(value) {\n        this.get('onChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/no-show-form/text/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"GY1ZyK7n\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/no-show-form/text/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/all/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/convertDistance\", \"moment\", \"lodash\", \"adept-iq/mixins/version-check\"], function (_exports, _emberConcurrency, _unwrapProxy, _convertDistance, _moment, _lodash, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['perform-stop-drawer'],\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    refresh: true,\n    // passed in by side-drawer-container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    componentName: 'performStop',\n    currentStop: null,\n    currentState: null,\n    performedState: null,\n    route: null,\n    // passed in by stops widget\n    stopPoints: Ember.computed.readOnly('stackFrame.options.stopPoints'),\n    dispatchRoute: Ember.computed.readOnly('stackFrame.options.dispatchRoute'),\n    lastStopPoint: Ember.computed.readOnly('stackFrame.options.lastStopPoint'),\n    isNextDisabled: Ember.computed.not('currentStop.depart'),\n    previousStop: Ember.computed('currentStop', function () {\n      const stops = this.get('stopPoints');\n      const currentStop = this.get('currentStop');\n      const previousStopIndex = stops.indexOf(currentStop) - 1;\n\n      if (previousStopIndex >= 0) {\n        return stops[previousStopIndex];\n      }\n\n      return null;\n    }),\n    lastContainerDepartTime: Ember.computed('currentStopContainer', 'currentStopContainer.actualDepartTime', function () {\n      const currentStopContainer = this.get('currentStopContainer');\n      const curDate = new Date();\n\n      if (currentStopContainer) {\n        const lastDepartTime = currentStopContainer.get('actualDepartTime');\n        return lastDepartTime;\n      }\n\n      return (0, _moment.default)(curDate).startOf('minute').toISOString();\n    }),\n    currentStopPosition: Ember.computed('currentStop', function () {\n      const stops = this.get('stopPoints');\n      const currentStop = this.get('currentStop');\n      return stops.indexOf(currentStop) + 1;\n    }),\n    currentStopIndex: Ember.computed('currentStopPosition', function () {\n      return this.get('currentStopPosition') - 1;\n    }),\n    hasNextStop: Ember.computed('currentStop', 'stopPoints', function () {\n      const stops = this.get('stopPoints');\n      return stops.indexOf(this.get('currentStop')) < stops.length - 1;\n    }),\n    title: Ember.computed('currentStop.stopType', function () {\n      const stopType = this.getWithDefault('currentStop.stopType', '');\n      return `Perform ${Ember.String.capitalize(stopType)} stop`;\n    }),\n    canSave: Ember.computed('hasNextStop', function () {\n      const hasNextStop = !this.get('hasNextStop');\n      return hasNextStop;\n    }),\n    nextButtonDisabled: Ember.computed('isNextDisabled', 'hasNextStop', function () {\n      const isNextDisabled = this.get('isNextDisabled');\n      const hasNextStop = !this.get('hasNextStop');\n      return isNextDisabled || hasNextStop;\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    loadPerformedState() {\n      const currentStopId = this.get('currentStop.id');\n      const performedState = this.get('performedState') || {};\n      const currentState = performedState[currentStopId];\n\n      if (currentState) {\n        this.set('currentState', currentState);\n        delete performedState[currentStopId];\n      }\n    },\n\n    loadCurrentState(stops) {\n      const {\n        currentStop,\n        performedState\n      } = this.get('currentState') || {};\n\n      if (!Ember.isEmpty(currentStop)) {\n        this.set('currentStop', currentStop);\n        this.set('currentState.currentStop', null);\n      } else {\n        this.set('currentStop', stops.get('firstObject'));\n      }\n\n      if (!Ember.isEmpty(performedState)) {\n        this.set('performedState', performedState);\n        this.set('currentState.performedState', null);\n      }\n    },\n\n    didInsertElement() {\n      const stops = this.get('stopPoints') || [];\n      const uniqueRouteIds = stops.map(stop => stop.get('dispatchRoute.route.name')).uniq();\n\n      if (uniqueRouteIds.length > 1) {\n        this.get('notifications').info('Please only select stops from the same route');\n        this.onCloseClick();\n      } else {\n        this.set('routeId', uniqueRouteIds[0]);\n        this.set('route', stops.get('firstObject.dispatchRoute.route'));\n      }\n\n      this.loadCurrentState(stops);\n      this.set('isNextDisabled', true);\n    },\n\n    willDestroyElement() {\n      const stopPoints = this.get('stackFrame.options.stopPoints'); // make sure to clean up stop point execute function\n\n      stopPoints.forEach(stop => {\n        stop.rollback();\n      });\n\n      this._super(...arguments);\n    },\n\n    saveTask() {\n      const stopPoints = this.get('stopPoints');\n      const canSave = this.get('canSave');\n      const currentStopIndex = this.get('currentStopIndex');\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const tripPaymentAdapter = store.adapterFor('trip-payment'); // Stops the dispatcher chose to perform (validation flag set), honouring the canSave/index gate.\n\n      const toPerform = stopPoints.filter((stopPoint, index) => {\n        // stopPoint is an ember-changeset object, so exposes the pending change.\n        const change = stopPoint.change;\n        return (canSave || index < currentStopIndex) && Ember.isPresent(change.validation) && change.validation;\n      });\n\n      if (Ember.isEmpty(toPerform)) {\n        return Promise.resolve();\n      } // Apply the changeset to the store (same as the old per-stop path did before posting).\n\n\n      toPerform.forEach(stopPoint => {\n        // we don't want validation to be saved in store.\n        stopPoint.rollbackProperty('validation');\n        stopPoint.execute();\n      }); // Build the ordered REE event list: arrive (if not already arrived) then depart per stop.\n      // ONE batch post replaces the old 2N serial posts; AVLM performs each event explicitly\n      // (no reliance on the prior-stop cascade, which had a drop-gap).\n\n      const events = [];\n      toPerform.forEach(stopPoint => {\n        const isArrived = stopPoint.get('isArrived');\n        const isBreak = stopPoint.get('isBreak');\n\n        if (stopPoint.get('arrive') && !isArrived) {\n          events.push({\n            stopPoint,\n            type: isBreak ? 'startBreak' : 'arrive'\n          });\n        }\n\n        if (stopPoint.get('depart')) {\n          events.push({\n            stopPoint,\n            type: isBreak ? 'endBreak' : 'depart'\n          });\n        }\n      });\n\n      if (Ember.isEmpty(events)) {\n        return Promise.resolve();\n      } // Shared routeVersion for the whole batch (AVLM v1 requires one version per batch; '1-c' is\n      // the sentinel the single-post path already returns and accepts).\n\n\n      const batchVersion = '1-c';\n      return routeExecEventAdapter.createBatchPerformEvents(events, batchVersion).then(() => {\n        // Pick side-effects (trip payment + capacity activity log) are NOT part of the REE batch\n        // — separate services — so still emitted per pick, but now in PARALLEL (old code was\n        // fully serial). Mirrors savePickTask.\n        const sideEffects = [];\n        toPerform.filter(stopPoint => stopPoint.get('isPick')).forEach(stopPoint => {\n          const trip = stopPoint.get('trip');\n          const travelNeedItems = stopPoint.get('travelNeedItems');\n\n          if (stopPoint.get('depart')) {\n            sideEffects.push(this.processTripCapacityChange(travelNeedItems, stopPoint));\n          }\n\n          if (stopPoint.get('trip.fare')) {\n            sideEffects.push(tripPaymentAdapter.createTripPaymentEvent(trip));\n          }\n        });\n        return Promise.all(sideEffects);\n      }).catch(e => {\n        if ((0, _emberConcurrency.didCancel)(e)) {\n          return;\n        }\n\n        const payloadMessage = Ember.get(e, 'payload.message') ? JSON.parse(Ember.get(e, 'payload.message')) : null;\n        let messageText = 'Failed to Perform All Stops';\n\n        if ((e.status === 400 || e.status === 500) && payloadMessage && payloadMessage.errorDetail && payloadMessage.errorDetail.includes('Execution version is different')) {\n          messageText = `FAILED TO PERFROM ALL STOPS. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n        }\n\n        this.get('notifications').warning(`${messageText}`);\n        throw e;\n      });\n    },\n\n    prepStopPointInSequence(stopPoint, stopContainer) {\n      const trip = stopPoint.get('trip');\n      const isArrived = stopContainer.get('isArrived');\n      stopPoint.set('isArrived', isArrived);\n      stopPoint.set('arrive', stopContainer.get('arrive'));\n      stopPoint.set('depart', stopContainer.get('depart'));\n      const actualArriveTime = stopContainer.get('actualArriveTime');\n      const actualDepartTime = stopContainer.get('actualDepartTime');\n      if (actualArriveTime) stopPoint.set('actualArriveTime', actualArriveTime);\n      if (actualDepartTime) stopPoint.set('actualDepartTime', actualDepartTime);\n\n      if (stopPoint.get('isBreak')) {\n        stopPoint.set('routeBreak.actualArriveTime', actualArriveTime);\n        stopPoint.set('routeBreak.actualDepartTime', actualDepartTime);\n      }\n\n      if (stopPoint.get('isPick')) {\n        // Handle Travel Needs\n        stopPoint.set('serviceAnimalCount', stopContainer.get('serviceAnimalCount'));\n        stopPoint.set('pcaCount', stopContainer.get('pcaCount'));\n        stopPoint.set('companionCount', stopContainer.get('companionCount'));\n        stopPoint.set('travelNeeds', stopContainer.get('travelNeedItems').map(travelNeedItem => ({\n          type: travelNeedItem.get('type'),\n          cnt: travelNeedItem.get('count')\n        })));\n        stopPoint.set('travelNeedItems', stopContainer.get('travelNeedItems'));\n        trip.set('fare', stopContainer.get('amount'));\n        trip.set('fareName', stopContainer.get('selectedPaymentType'));\n        const currentStopContainer = this.get('currentStopContainer');\n        currentStopContainer.get('fetchStopPointCapacityTask').perform(stopPoint.get('id'));\n      }\n\n      stopPoint.set('odometer', (0, _convertDistance.convertMilesToMeters)(stopPoint.get('odometerInMiles')));\n    },\n\n    async processTripCapacityChange(travelNeedItems, stopPoint) {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const session = this.get('session');\n      const route = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('route'));\n      const trip = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('trip'));\n      const vehicle = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute.assignedVehicle'));\n      const driver = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute.assignedDriver'));\n      const dispatchSchedule = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute.dispatchSchedule'));\n      const providerId = route.get('provider.id');\n      let attributeChanges = false;\n      travelNeedItems.forEach(item => {\n        if (item.count !== item.oldCount) {\n          attributeChanges = true;\n        }\n      });\n\n      if (attributeChanges) {\n        const details = `Capacity for Trip ${trip.tripId} was modified`;\n        const eventLog = {\n          type: 'event',\n          attributes: {\n            routeId: parseInt(route.get('id'), 10),\n            tripId: parseInt(trip.get('id'), 10),\n            stopPointId: stopPoint.get('id'),\n            driverId: parseInt(driver.get('id'), 10),\n            vehicleId: parseInt(vehicle.get('id'), 10),\n            scheduleId: parseInt(dispatchSchedule.get('id'), 10),\n            source: 'webApp',\n            providerName: providerId,\n            priority: 'low',\n            eventType: 'TEE',\n            actionType: 'capacityChange',\n            userId: session.data.authenticated.userId,\n            eventLog: {\n              capacityChange: [{\n                activity: 'Trip Capacity Change',\n                loggingType: 'route',\n                details: details\n              }, {\n                activity: 'Trip Capacity Change',\n                loggingType: 'trip',\n                details: details\n              }, {\n                activity: 'Trip Capacity Change',\n                loggingType: 'user',\n                details: details\n              }]\n            }\n          }\n        };\n        await activityLogAdapter.createEventActivity(eventLog);\n      }\n    },\n\n    savePickTask: (0, _emberConcurrency.task)(function* (stopPoint, lastVersion) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const tripPaymentAdapter = store.adapterFor('trip-payment');\n      const trip = stopPoint.get('trip');\n      const isArrived = stopPoint.get('isArrived');\n      const travelNeedItems = stopPoint.get('travelNeedItems'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = lastVersion;\n\n      if (stopPoint.get('arrive') && !isArrived) {\n        avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion);\n      }\n\n      if (stopPoint.get('depart')) {\n        // added this activity log here because it was difficult to calculate\n        // in avlm\n        yield this.processTripCapacityChange(travelNeedItems, stopPoint);\n        avlmVersion = yield routeExecEventAdapter.createStopDepartEvent(stopPoint, avlmVersion);\n      }\n\n      if (stopPoint.get('trip.fare')) {\n        yield tripPaymentAdapter.createTripPaymentEvent(trip);\n      }\n\n      return avlmVersion;\n    }).enqueue(),\n    saveDropTask: (0, _emberConcurrency.task)(function* (stopPoint, lastVersion) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const isArrived = stopPoint.get('isArrived'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = lastVersion;\n\n      if (stopPoint.get('arrive') && !isArrived) {\n        avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion);\n      }\n\n      if (stopPoint.get('depart')) {\n        avlmVersion = yield routeExecEventAdapter.createStopDepartEvent(stopPoint, avlmVersion);\n      }\n\n      return avlmVersion;\n    }).enqueue(),\n    saveBreakTask: (0, _emberConcurrency.task)(function* (stopPoint, lastVersion) {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const isArrived = stopPoint.get('isArrived'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = lastVersion;\n\n      if (stopPoint.get('arrive') && !isArrived) {\n        avlmVersion = yield routeExecEventAdapter.createStartBreakEvent(stopPoint, avlmVersion);\n      }\n\n      if (stopPoint.get('depart')) {\n        avlmVersion = yield routeExecEventAdapter.createEndBreakEvent(stopPoint, avlmVersion);\n      }\n\n      return avlmVersion;\n    }).enqueue(),\n\n    validateStopPoint() {\n      const currentStopContainer = this.get('currentStopContainer');\n      const currentInUseStop = (0, _unwrapProxy.unwrapProxy)(this.get('currentStop'));\n      const route = this.get('currentStopContainer.route');\n      const arrive = currentStopContainer.get('arrive');\n      const depart = currentStopContainer.get('depart');\n      const arriveChanged = this.get('currentStop.change.arrive');\n      const departChanged = this.get('currentStop.change.depart');\n      const routeEndTime = route.get('plannedEndTime');\n      const currentDateTime = (0, _moment.default)().format('YYYY-MM-DD HH:mm A');\n      const arriveTime = currentStopContainer.get('actualArriveTime');\n      const departTime = currentStopContainer.get('actualDepartTime');\n      const momentArriveTime = (0, _moment.default)(arriveTime).startOf('minute');\n      const momentDepartTime = (0, _moment.default)(departTime).startOf('minute');\n      const actualStartTime = currentInUseStop.get('dispatchRoute.computedStartTime');\n      const orderedStops = currentInUseStop.get('dispatchRoute.orderedStops');\n      const routeOrdinal = currentInUseStop.get('routeOrdinal');\n      const maxStopDepartTime = (0, _lodash.findLast)(orderedStops, stop => stop.get('isPerformed'));\n      const currentStopType = Ember.String.capitalize(currentInUseStop.get('stopType'));\n      const previousStop = this.get('previousStop'); // Reset error text\n\n      currentStopContainer.set('errorText', null);\n\n      if (!arrive && !depart) {\n        if (currentStopType === 'Pick') {\n          currentStopContainer.set('errorText', 'Please fill in either Actual Arrival Time or Actual Pick Time.');\n        } else if (currentStopType === 'Drop') {\n          currentStopContainer.set('errorText', 'Please fill in either Actual Arrival Time or Actual Drop Time.');\n        } else {\n          currentStopContainer.set('errorText', 'Please fill in either Actual Start or Actual End.');\n        }\n\n        return false;\n      }\n\n      if (momentArriveTime.isBefore(actualStartTime) || depart && momentDepartTime.isBefore(actualStartTime)) {\n        currentStopContainer.set('errorText', `Performed ${currentStopType} Stop Failed. The stop cannot be performed before the route's start time`);\n        return false;\n      }\n\n      if (momentArriveTime.isAfter(currentDateTime) || depart && momentDepartTime.isAfter(currentDateTime)) {\n        currentStopContainer.set('errorText', `Performed ${currentStopType} Stop Failed. The stop cannot be performed after the previous current time.`);\n        return false;\n      }\n\n      if (currentInUseStop.get('isPick') || currentInUseStop.get('isBreak')) {\n        if (momentArriveTime.isAfter(routeEndTime) || depart && momentDepartTime.isAfter(routeEndTime)) {\n          currentStopContainer.set('errorText', \"Performed Pick Stop Failed. The stop cannot be performed after the route's end time.\");\n          return false;\n        }\n      }\n\n      if (currentInUseStop.get('isDrop')) {\n        if (momentArriveTime.isAfter(routeEndTime) || depart && momentDepartTime.isAfter(routeEndTime)) {\n          this.get('notifications').warning('Stop performed after planned route end time.');\n        }\n      }\n\n      if (currentInUseStop.get('isBreak')) {\n        if (currentStopContainer.get('arrive')) {\n          const coord = currentInUseStop.get('routeBreak.startPlace.location');\n\n          if (Ember.isEmpty(coord.get('lat')) || Ember.isEmpty(coord.get('lng'))) {\n            currentStopContainer.set('errorText', 'Performed Break Stop Failed. Cannot perform break without location.');\n            return false;\n          }\n        }\n\n        if (currentStopContainer.get('depart')) {\n          const coord = currentInUseStop.get('routeBreak.endPlace.location');\n\n          if (Ember.isEmpty(coord.get('lat')) || Ember.isEmpty(coord.get('lng'))) {\n            currentStopContainer.set('errorText', 'Performed Break Stop Failed. Cannot perform break without location.');\n            return false;\n          }\n        }\n      }\n\n      if (routeOrdinal > 0 && maxStopDepartTime) {\n        if (arriveChanged && momentArriveTime.isBefore(maxStopDepartTime.get('actualDepartTime')) || departChanged && momentDepartTime.isBefore(maxStopDepartTime.get('actualDepartTime'))) {\n          currentStopContainer.set('errorText', `Performed ${currentStopType} Stop Failed. The stop cannot be performed before the previous Actual drop time.`);\n          return false;\n        }\n      }\n\n      if (previousStop) {\n        if (momentArriveTime.isBefore(previousStop.get('actualDepartTime')) || momentArriveTime.isBefore(previousStop.get('actualDepartTime'))) {\n          currentStopContainer.set('errorText', `Performed ${currentStopType} Stop Failed. The stop cannot be performed before the previous Actual depart time.`);\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    actions: {\n      onRefreshButtonClick() {\n        const currentStopContainer = this.get('currentStopContainer');\n        currentStopContainer.set('currentState', null);\n        currentStopContainer.get('refreshTask').perform();\n        this.set('isNextDisabled', true);\n      },\n\n      onShrinkClick() {\n        const stopUIReference = this.get('stopUIReference');\n\n        if (stopUIReference) {\n          stopUIReference.backUpCurrentState();\n        }\n\n        const currentStop = this.get('currentStop');\n        const currentState = this.get('currentState') || {};\n        const performedState = this.get('performedState');\n        this.set('currentState', { ...currentState,\n          currentStop,\n          performedState\n        });\n        this.onShrinkClick();\n      },\n\n      async onCloseButtonClick() {\n        const tooltip = this.get('tooltip');\n        const currentStopPosition = (0, _unwrapProxy.unwrapProxy)(this.get('currentStopPosition'));\n        const notifications = this.get('notifications');\n        const close = this.onCloseClick;\n        const saveTask = this.get('saveTask').bind(this);\n        const title = 'Progress will be saved';\n        const dispatchRoute = this.get('dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        if (currentStopPosition === 1) {\n          return close(); // the user hasn't performed any stops.\n        }\n\n        try {\n          // Check dispatchRoute version first\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction();\n          tooltip.pushConfirmation({\n            tip: 'All stops completed will be performed and saved. Do you want to close this panel?',\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return saveTask().then(() => {\n                return this.get('versionUpdateOperation').perform();\n              }).then(() => {\n                notifications.success(`Performed ${currentStopPosition - 1} Stops Successfully`);\n              }).catch(e => {\n                console.warn(e); // eslint-disable-line\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                tooltip.reset();\n                this.get('workspace').requestWootricSurvey('on_stopPerform');\n                return close();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              return tooltip.reset();\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      },\n\n      async onPerformButtonClick() {\n        const tooltip = this.get('tooltip');\n        const currentStopContainer = this.get('currentStopContainer');\n        const currentInUseStop = (0, _unwrapProxy.unwrapProxy)(this.get('currentStop'));\n        const notifications = this.get('notifications');\n        const close = this.onCloseClick;\n        const title = 'Perform Stop';\n        const saveTask = this.get('saveTask').bind(this);\n        const dispatchRoute = this.get('dispatchRoute');\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n\n        try {\n          const validation = this.validateStopPoint();\n\n          if (validation) {\n            this.get('currentStop').set('validation', true);\n            this.prepStopPointInSequence(currentInUseStop, currentStopContainer); // Check dispatchRoute version first\n\n            await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n            await lockRouteAction();\n            tooltip.pushConfirmation({\n              tip: 'Perform all stops in the sequence?',\n              title,\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              primaryAction: () => {\n                return saveTask().then(() => {\n                  const store = this.get('store');\n                  const dispatchRouteAdapter = store.adapterFor('dispatch-route');\n                  return dispatchRouteAdapter.updateVersion(dispatchRoute.get('id'), dispatchRoute.get('version'));\n                }).then(() => {\n                  notifications.success('Performed All Stops Successfully');\n                }).finally(async () => {\n                  await unlockRouteAction(0);\n                  tooltip.reset();\n                  this.get('workspace').requestWootricSurvey('on_stopPerform');\n                  return close();\n                });\n              },\n              secondaryActionText: 'Cancel',\n              secondaryAction: async () => {\n                await unlockRouteAction(0);\n                return tooltip.reset();\n              },\n              closeAction: async () => {\n                await unlockRouteAction(0);\n              }\n            });\n          }\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      },\n\n      onSelectStop(stop) {\n        stop.rollback(); // undo stop attributes back to square one\n\n        this.set('currentStop', stop);\n        this.loadPerformedState(); // If current is pick, then when click on pick it won't refresh the component\n        // use refresh flag to force Ember to recreate the pick/drop/break UI\n\n        this.set('refresh', false);\n        Ember.run.next(() => {\n          this.set('refresh', true);\n        });\n      },\n\n      async nextStop() {\n        this.set('dispatchRouteToCheck', this.get('dispatchRoute')); // Check dispatchRoute version first\n\n        await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this)); // will only prep all stop points before last stop point\n\n        const currentStopContainer = this.get('currentStopContainer');\n        const currentInUseStop = (0, _unwrapProxy.unwrapProxy)(this.get('currentStop'));\n        const initStatus = currentStopContainer.get('initStatus');\n        const dispatchRoute = this.get('dispatchRoute');\n        const lastStopPoint = this.get('lastStopPoint');\n        const stopsNeedUpdate = dispatchRoute.findUnperformedStopsInSequence(lastStopPoint);\n        const currentInUseIndex = this.get('stopPoints').indexOf(currentInUseStop);\n\n        if (stopsNeedUpdate.length !== this.get('stopPoints.length') || // only check first stop status\n        currentInUseIndex === 0 && currentInUseStop.get('status') !== initStatus) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            tip: 'Perform stop failed, Because stop had been modified by another request.',\n            title: 'StopPoint record changed',\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              const close = this.onCloseClick.bind(this);\n              tooltip.reset();\n              return close();\n            }\n          });\n          return;\n        }\n\n        const validation = this.validateStopPoint();\n\n        if (validation) {\n          const stopUIReference = this.get('stopUIReference');\n\n          if (stopUIReference) {\n            stopUIReference.backUpCurrentState();\n            const performedState = this.get('performedState');\n            this.set('performedState', {\n              [currentInUseStop.get('id')]: this.get('currentState'),\n              ...performedState\n            });\n          }\n\n          this.get('currentStop').set('validation', true);\n          this.prepStopPointInSequence(currentInUseStop, currentStopContainer);\n          if (!this.get('hasNextStop')) return false;\n          const stops = this.get('stopPoints');\n          const currentStop = this.get('currentStop');\n          const currentIndex = stops.indexOf(currentStop);\n          const nextStop = stops[currentIndex + 1];\n          this.set('currentState', null);\n          this.set('currentStop', nextStop);\n          this.set('isNextDisabled', true);\n          this.set('currentStopContainer.arrive', false);\n          this.set('currentStopContainer.depart', false);\n        }\n      },\n\n      setStopContainerReference(stopContainerReference) {\n        if (stopContainerReference) {\n          this.set('currentStopContainer', stopContainerReference);\n        }\n      },\n\n      setStopUIReference(stopUIReference) {\n        if (stopUIReference) {\n          this.set('stopUIReference', stopUIReference);\n        }\n      },\n\n      getValueFromchildTravelNeeds(travelNeedItems) {\n        this.set('travelNeedItems', travelNeedItems);\n      },\n\n      getVehicleCapacityAvailable(travelNeeds) {\n        const currentStopContainer = this.get('currentStopContainer');\n        const stopPoint = this.get('currentStop');\n\n        if (stopPoint.get('isPick')) {\n          currentStopContainer.get('fetchStopPointCapacityTask').perform(stopPoint.get('id'), travelNeeds);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/all/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1pvacj55\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"container\\\",\\\"stop\\\",\\\"index\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"perform-stop-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/perform-stop/all/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/perform-stop/all/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"sub-header-container\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[9],[0,\\\"Route ID: \\\"],[1,[21,\\\"routeId\\\"],false],[10],[0,\\\"\\\\n      \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"perform-stop-progress-nav\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[9],[0,\\\"Progress \\\"],[1,[21,\\\"currentStopPosition\\\"],false],[0,\\\"-\\\"],[1,[23,[\\\"stopPoints\\\",\\\"length\\\"]],false],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"nextButtonDisabled\\\"]],[11,\\\"class\\\",\\\"action-button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Next\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"nextStop\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/perform-stop/all/template.hbs' @ L24:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Perform\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"All stops need to be performed in sequence to be saved.\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"section\\\"],[11,\\\"class\\\",\\\"body-with-menu\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"stops-list\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"stopPoints\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"stops-list-item \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"id\\\"]],[23,[\\\"currentStop\\\",\\\"id\\\"]]],null],\\\"selected\\\"],null]]]],[12,\\\"disabled\\\",[27,\\\"if\\\",[[27,\\\"lt\\\",[[22,4,[]],[23,[\\\"currentStopIndex\\\"]]],null],false,true],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSelectStop\\\",[22,3,[]]],null]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"stops-list-item-section\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"stops-list-item-header\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"strong\\\"],[9],[1,[27,\\\"capitalize\\\",[[22,3,[\\\"stopType\\\"]]],null],false],[10],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"lt\\\",[[22,4,[]],[23,[\\\"currentStopIndex\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,3,[\\\"isBreak\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"span\\\"],[9],[0,\\\"Break ID: \\\"],[1,[22,3,[\\\"id\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"span\\\"],[9],[0,\\\"Trip ID: \\\"],[1,[22,3,[\\\"trip\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"body-container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-offset\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"currentStop\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"refresh\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/perform-stop/\\\",[23,[\\\"currentStop\\\",\\\"stopType\\\"]],\\\"/container\\\"],null]],[[\\\"stopPoint\\\",\\\"currentState\\\",\\\"lastContainerDepartTime\\\",\\\"onCloseClick\\\",\\\"onShrinkClick\\\",\\\"setStopContainerReference\\\"],[[23,[\\\"currentStop\\\"]],[23,[\\\"currentState\\\"]],[23,[\\\"lastContainerDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"setStopContainerReference\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[2,\\\" TODO: update actual times and vehicle/driver to use changeset \\\"],[0,\\\"\\\\n              \\\\n                \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/perform-stop/\\\",[23,[\\\"currentStop\\\",\\\"stopType\\\"]],\\\"/ui\\\"],null]],[[\\\"drawer\\\",\\\"stopPoint\\\",\\\"previousStop\\\",\\\"currentState\\\",\\\"driverBreak\\\",\\\"travelNeedOptions\\\",\\\"travelNeedItems\\\",\\\"errorText\\\",\\\"actualDepartTime\\\",\\\"actualArriveTime\\\",\\\"arrive\\\",\\\"depart\\\",\\\"isArrived\\\",\\\"isNextDisabled\\\",\\\"setStopUIReference\\\",\\\"paymentTypeOptions\\\",\\\"selectedPaymentType\\\",\\\"minCompanionCount\\\",\\\"maxCompanionCount\\\",\\\"pcaCount\\\",\\\"serviceAnimalCount\\\",\\\"companionCount\\\",\\\"origCompanionCount\\\",\\\"amount\\\",\\\"origAmount\\\",\\\"editAPI\\\",\\\"getValueFromchildTravelNeeds\\\",\\\"getVehicleCapacityAvailable\\\",\\\"availableCapacity\\\",\\\"capacityTaskRunning\\\",\\\"isBulkPeform\\\"],[[22,1,[]],[23,[\\\"currentStop\\\"]],[23,[\\\"previousStop\\\"]],[23,[\\\"currentState\\\"]],[22,2,[\\\"driverBreak\\\"]],[22,2,[\\\"travelNeedOptions\\\"]],[22,2,[\\\"travelNeedItems\\\"]],[22,2,[\\\"errorText\\\"]],[22,2,[\\\"actualDepartTime\\\"]],[22,2,[\\\"actualArriveTime\\\"]],[22,2,[\\\"arrive\\\"]],[22,2,[\\\"depart\\\"]],[22,2,[\\\"isArrived\\\"]],[23,[\\\"isNextDisabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setStopUIReference\\\"],null],[22,2,[\\\"paymentTypeOptions\\\"]],[22,2,[\\\"selectedPaymentType\\\"]],[22,2,[\\\"minCompanionCount\\\"]],[22,2,[\\\"maxCompanionCount\\\"]],[22,2,[\\\"pcaCount\\\"]],[22,2,[\\\"serviceAnimalCount\\\"]],[22,2,[\\\"companionCount\\\"]],[22,2,[\\\"companionCount\\\"]],[22,2,[\\\"amount\\\"]],[22,2,[\\\"amount\\\"]],[22,2,[\\\"editAPI\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"getValueFromchildTravelNeeds\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"getVehicleCapacityAvailable\\\"],null],[22,2,[\\\"availableCapacity\\\"]],[22,2,[\\\"capacityTaskRunning\\\"]],true]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/all/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['perform-stop-drawer'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    stopPoint: Ember.computed.readOnly('stackFrame.options.stopPoint'),\n    componentName: 'performStop',\n    stopUIReference: null,\n    currentState: null,\n    actions: {\n      onShrinkClick() {\n        const stopUIReference = this.get('stopUIReference');\n\n        if (stopUIReference) {\n          stopUIReference.backUpCurrentState();\n        }\n\n        this.onShrinkClick();\n      },\n\n      setStopUIReference(stopUIReference) {\n        if (stopUIReference) {\n          this.set('stopUIReference', stopUIReference);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/container/component\", [\"exports\", \"adept-iq/utils/unwrapProxy\", \"ember-concurrency\", \"moment\", \"adept-iq/mixins/version-check\"], function (_exports, _unwrapProxy, _emberConcurrency, _moment, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const STOP_ONBREAK_STATUS = 'On break';\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    // passed in by side-drawer-container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    stopPoint: null,\n    driverBreak: null,\n    arrive: false,\n    depart: false,\n    shouldArrive: true,\n    currentState: null,\n    initStatus: null,\n    route: Ember.computed.readOnly('stopPoint.dispatchRoute.route'),\n    routeVehicleDriver: Ember.computed.readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    address: Ember.computed.readOnly('driverBreak.place.address'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    defaultActualArriveTime: Ember.computed('stopPoint.actualArriveTime', function () {\n      const arriveTime = this.get('stopPoint.actualArriveTime');\n      const lastContainerDepartTime = this.get('lastContainerDepartTime');\n\n      if (Ember.isNone(arriveTime) && !Ember.isNone(this.get('currentState.actualArriveTime'))) {\n        return this.get('currentState.actualArriveTime');\n      }\n\n      if (Ember.isNone(arriveTime) && !Ember.isNone(lastContainerDepartTime)) {\n        return lastContainerDepartTime;\n      }\n\n      if (Ember.isNone(arriveTime)) {\n        return (0, _moment.default)().startOf('minute').toDate();\n      }\n\n      return (0, _moment.default)(arriveTime).toDate();\n    }),\n    defaultActualDepartTime: Ember.computed('stopPoint.actualDepartTime', function () {\n      const departTime = this.get('stopPoint.actualDepartTime'); // This is only for inital value, so not update even when actualArriveTIme had been changed.\n      // If changing minDate and date at same time will make flatpickr remove its value.\n\n      const curDate = this.get('actualArriveTime');\n      const lastContainerDepartTime = this.get('lastContainerDepartTime');\n\n      if (Ember.isNone(departTime) && !Ember.isNone(this.get('currentState.actualDepartTime'))) {\n        return this.get('currentState.actualDepartTime');\n      }\n\n      if (Ember.isNone(departTime) && !Ember.isNone(lastContainerDepartTime)) {\n        return lastContainerDepartTime;\n      }\n\n      if (Ember.isNone(departTime)) {\n        return curDate;\n      }\n\n      return (0, _moment.default)(departTime).toDate();\n    }),\n\n    setupDriverBreak(stopPoint) {\n      const driverBreak = this.store.peekRecord('route-break', stopPoint.get('routeBreak.id'));\n      const breakType = driverBreak.get('breakType.content');\n      const isOffBreak = stopPoint.get('isBreakPerformed');\n      const notPerformed = stopPoint.get('notPerformed');\n      let startPlace = driverBreak.get('startPlace');\n      const currentState = this.get('currentState'); // If we have currentState means this is restore from shrink or multiPerformed, do not reset break start/end.\n\n      if (!Ember.isEmpty(currentState)) {\n        this.set('driverBreak', driverBreak);\n        return;\n      } // If we have currentState means this is restore from shrink or multiPerformed, do not reset break start/end.\n\n\n      if (!Ember.isEmpty(currentState)) {\n        this.set('driverBreak', driverBreak);\n        return;\n      } // clear the on break address if status is pending\n\n\n      if (!Ember.isEmpty(startPlace) && Ember.isEmpty(currentState) && notPerformed && breakType.get('name') === 'floating') {\n        this.resetAddressLocation(startPlace);\n      } // we don't want to show start break address once it's been arrived\n      // then we are doing the depart\n\n\n      if (!Ember.isEmpty(startPlace)) {\n        startPlace.set('address.freeformAddress', '');\n      }\n\n      if (breakType.get('name') === 'floating' && Ember.isEmpty(startPlace)) {\n        const startOrigin = this.store.createRecord('location', {\n          lat: stopPoint.get('lat'),\n          lng: stopPoint.get('lng')\n        });\n        const startAddress = this.store.createRecord('address', {\n          type: 'vehicle',\n          locations: [startOrigin]\n        });\n        startPlace = this.store.createRecord('place', {\n          address: startAddress,\n          location: startOrigin\n        });\n        driverBreak.set('startPlace', startPlace);\n      }\n\n      let endPlace = driverBreak.get('endPlace'); // clear off break address if status is pending or on break\n\n      if (!Ember.isEmpty(endPlace) && Ember.isEmpty(currentState) && (notPerformed || !isOffBreak) && breakType.get('name') === 'floating') {\n        this.resetAddressLocation(endPlace);\n      }\n\n      if (breakType.get('name') === 'floating' && Ember.isEmpty(endPlace)) {\n        const endOrigin = this.store.createRecord('location');\n        const endAddress = this.store.createRecord('address', {\n          type: 'vehicle',\n          locations: [endOrigin]\n        });\n        endPlace = this.store.createRecord('place', {\n          address: endAddress,\n          location: endOrigin\n        });\n        driverBreak.set('endPlace', endPlace);\n      }\n\n      this.set('driverBreak', driverBreak);\n\n      if (breakType.get('name') === 'fixed') {\n        driverBreak.set('endPlace', driverBreak.get('place'));\n        driverBreak.set('startPlace', driverBreak.get('place'));\n      }\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const stopPoint = this.get('stopPoint');\n      this.setupDriverBreak(stopPoint);\n      this.set('arrive', this.get('isArrived'));\n      this.set('initStatus', this.get('stopPoint.status'));\n      this.set('actualArriveTime', this.get('defaultActualArriveTime'));\n      this.set('actualDepartTime', this.get('defaultActualDepartTime'));\n    },\n\n    isArrived: Ember.computed('stopPoint.computedStatus', function () {\n      const status = this.get('stopPoint.computedStatus');\n\n      if (status) {\n        return status === STOP_ONBREAK_STATUS;\n      }\n\n      return false;\n    }),\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n\n    resetAddressLocation(place) {\n      const address = place.get('address');\n      const location = place.get('location');\n\n      if (Ember.isPresent(address)) {\n        address.set('streetNumber', '');\n        address.set('streetAddress', '');\n        address.set('streetName', '');\n        address.set('locality', '');\n        address.set('region', '');\n        address.set('subRegion', '');\n        address.set('postalCode', '');\n        address.set('country', '');\n        address.set('county', '');\n        address.set('freeformAddress', '');\n      }\n\n      if (Ember.isPresent(location)) {\n        location.set('lat');\n        location.set('lng');\n        location.set('geoNode');\n      }\n    },\n\n    resetStartEndPlace(stopPoint) {\n      const startPlace = stopPoint.get('routeBreak.startPlace');\n      const endPlace = stopPoint.get('routeBreak.endPlace');\n      this.resetAddressLocation(startPlace);\n\n      if (Ember.isPresent(stopPoint.get('routeBreak.place.id'))) {\n        startPlace.set('address.freeFormAddress', stopPoint.get('routeBreak.place.address.fullAddress'));\n      }\n\n      this.resetAddressLocation(endPlace);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const stopPoint = this.get('stopPoint');\n      const routeBreak = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('routeBreak'));\n      const currentDate = (0, _moment.default)().startOf('minute').toDate();\n      stopPoint.rollback();\n      routeBreak.rollbackAttributes();\n      this.resetStartEndPlace(stopPoint);\n      stopPoint.set('actualDepartTime', currentDate);\n      routeBreak.set('actualArriveTime', currentDate);\n      this.set('actualArriveTime', currentDate);\n      this.set('actualDepartTime', currentDate);\n      const isArrived = this.get('isArrived');\n      stopPoint.set('odometer');\n      this.set('arrive', isArrived);\n      this.set('depart', false); // call geocode service to remove all points selected on map\n\n      this.get('geocode').deactivateGeocode();\n      yield this.setupDriverBreak(stopPoint);\n    }).keepLatest(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const stopPoint = this.get('stopPoint');\n      const isArrived = this.get('isArrived'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null;\n      stopPoint.set('odometer', null);\n\n      if (this.get('arrive') && !isArrived) {\n        avlmVersion = yield routeExecEventAdapter.createStartBreakEvent(stopPoint, avlmVersion);\n      }\n\n      if (this.get('depart')) {\n        avlmVersion = yield routeExecEventAdapter.createEndBreakEvent(stopPoint, avlmVersion);\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n\n    didInsertElement() {\n      const setStopContainerReference = this.get('setStopContainerReference');\n      const stopPoint = this.get('stopPoint');\n      this.setupDriverBreak(stopPoint);\n\n      if (setStopContainerReference) {\n        setStopContainerReference(this);\n      }\n    },\n\n    actions: {\n      onRefreshButtonClick() {\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          const tooltip = this.get('tooltip');\n          const route = this.get('route');\n          const stopPoint = this.get('stopPoint');\n          const arrive = this.get('arrive');\n          const depart = this.get('depart');\n          const isArrived = this.get('isArrived');\n          const arriveChanged = this.get('stopPoint.change.arrive');\n          const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('dispatchRoute'));\n\n          if (!dispatchRoute) {\n            tooltip.pushConfirmation({\n              tip: 'Perform break failed, Because break had been modified by another request.',\n              title: 'Routebreak record changed',\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              primaryAction: async () => {\n                const close = this.onCloseClick.bind(this);\n                tooltip.reset();\n                return close();\n              }\n            });\n            return;\n          }\n\n          const routeEndTime = route.get('dispatchRoute.plannedEndTime');\n          const arriveTime = (0, _moment.default)(this.get('actualArriveTime'));\n          const departTime = (0, _moment.default)(this.get('actualDepartTime'));\n          const actualStartTime = route.get('dispatchRoute.computedStartTime');\n          const routeOrdinal = stopPoint.get('routeOrdinal');\n          const routeStops = route.get('dispatchRoute.orderedStopsWithGaragesAndBreaks');\n          const lastPerformedStop = routeStops.filter(stop => stop.isPerformed && !stop.isSoftPerformed).get('lastObject');\n          const currentDateTime = (0, _moment.default)();\n          const title = 'Perform Break';\n          let messageText = '';\n          let tip = ''; // Reset error text\n\n          this.set('errorText');\n          this.set('stopPoint.actualArriveTime', this.get('actualArriveTime'));\n          this.set('stopPoint.actualDepartTime', this.get('actualDepartTime'));\n          this.set('stopPoint.routeBreak.actualArriveTime', this.get('actualArriveTime'));\n          this.set('stopPoint.routeBreak.actualDepartTime', this.get('actualDepartTime'));\n\n          if (arrive && depart && !isArrived) {\n            messageText = 'Performed break';\n            tip = 'Perform break?';\n          } else if (arrive && !isArrived) {\n            messageText = 'Started break';\n            tip = 'Start break?';\n          } else if (depart) {\n            messageText = 'Ended break';\n            tip = 'End break?';\n          } else {\n            this.set('errorText', 'Please fill in either Actual Start or Actual End.');\n            return false;\n          }\n\n          if (arriveChanged && arriveTime.isBefore(actualStartTime) || depart && departTime.isBefore(actualStartTime)) {\n            this.set('errorText', \"Performed Break Stop Failed. The stop cannot be performed before the route's start time\");\n            return false;\n          }\n\n          if (arriveChanged && arriveTime.isAfter(routeEndTime) || depart && departTime.isAfter(routeEndTime)) {\n            this.set('errorText', \"Performed Break Stop Failed. The stop cannot be performed after the route's end time.\");\n            return false;\n          }\n\n          if (arriveChanged && arriveTime.isAfter(currentDateTime) || depart && departTime.isAfter(currentDateTime)) {\n            this.set('errorText', 'Performed Break Stop Failed. The stop cannot be performed after the current time.');\n            return false;\n          }\n\n          if (routeOrdinal > 0 && lastPerformedStop && !lastPerformedStop.get('isNoShow')) {\n            if (arriveChanged && arriveTime.isBefore(lastPerformedStop.get('actualDepartTime')) || depart && departTime.isBefore(lastPerformedStop.get('actualDepartTime'))) {\n              this.set('errorText', 'Performed Break Stop Failed. The stop cannot be performed before the previous Actual drop time.');\n              return false;\n            }\n          }\n\n          const arriveTimeStamp = this.get('driverBreak.stopPoint.actualArriveTime');\n\n          if (Ember.isEmpty(arriveTimeStamp) && arrive) {\n            const startCoord = this.get('stopPoint.routeBreak.startPlace.location');\n\n            if (Ember.isEmpty(startCoord.get('lat')) || Ember.isEmpty(startCoord.get('lng'))) {\n              this.set('errorText', 'Performed Break Stop Failed. Cannot perform break without start location.');\n              return false;\n            }\n          }\n\n          if (depart) {\n            const endCoord = this.get('stopPoint.routeBreak.endPlace.location');\n\n            if (Ember.isEmpty(endCoord.get('lat')) || Ember.isEmpty(endCoord.get('lng'))) {\n              this.set('errorText', 'Performed Break Stop Failed. Cannot perform break without end location.');\n              return false;\n            }\n          } // Check dispatchRoute version first\n\n\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction();\n          tooltip.pushConfirmation({\n            tip,\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['stop-point']);\n                this.get('notifications').success(`${messageText} successfully`);\n              }).catch(response => {\n                // clear odometer in stop point model\n                stopPoint.set('odometer');\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                messageText = messageText + ' failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('cannot be in state arrived unless all previous stops are performed') || payloadMessage.errorDetail.includes('with status arrived cannot come after')) {\n                    messageText = 'Performed Break Failed. You cannot perform this break until previous stops are performed';\n                  }\n\n                  if (payloadMessage.errorDetail.includes('Execution version is different')) {\n                    messageText = `PERFORM BREAK FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                this.get('workspace').requestWootricSurvey('on_breakPerform');\n                tooltip.reset();\n                this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              return tooltip.reset();\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/container/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"rrtX63sp\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[14,1,[[27,\\\"hash\\\",null,[[\\\"arrive\\\",\\\"driverBreak\\\",\\\"depart\\\",\\\"errorText\\\",\\\"isArrived\\\",\\\"actualArriveTime\\\",\\\"actualDepartTime\\\",\\\"onPerformButtonClick\\\",\\\"onRefreshButtonClick\\\"],[[22,0,[\\\"arrive\\\"]],[22,0,[\\\"driverBreak\\\"]],[22,0,[\\\"depart\\\"]],[22,0,[\\\"errorText\\\"]],[22,0,[\\\"isArrived\\\"]],[22,0,[\\\"actualArriveTime\\\"]],[22,0,[\\\"actualDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null]]]]]]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/break/container/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"gU7S2QM0\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"container\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"side-drawer/perform-stop/break/container\\\",null,[[\\\"stopPoint\\\",\\\"dispatchRouteVersionSnapshot\\\",\\\"currentState\\\",\\\"onCloseClick\\\",\\\"onShrinkClick\\\"],[[23,[\\\"stackFrame\\\",\\\"options\\\",\\\"stopPoint\\\"]],[23,[\\\"stackFrame\\\",\\\"options\\\",\\\"dispatchRouteVersionSnapshot\\\"]],[23,[\\\"currentState\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/perform-stop/break/template.hbs' @ L13:C6) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Perform Break\\\",[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onPerformButtonClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onRefreshButtonClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/perform-stop/break/template.hbs' @ L22:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      Break ID: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"id\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"perform-stop-layout\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/perform-stop/break/template.hbs' @ L28:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer/perform-stop/break/ui\\\",null,[[\\\"drawer\\\",\\\"currentState\\\",\\\"stopPoint\\\",\\\"driverBreak\\\",\\\"errorText\\\",\\\"actualDepartTime\\\",\\\"actualArriveTime\\\",\\\"arrive\\\",\\\"depart\\\",\\\"isArrived\\\",\\\"setStopUIReference\\\"],[[22,1,[]],[23,[\\\"currentState\\\"]],[23,[\\\"stackFrame\\\",\\\"options\\\",\\\"stopPoint\\\"]],[22,2,[\\\"driverBreak\\\"]],[22,2,[\\\"errorText\\\"]],[22,2,[\\\"actualDepartTime\\\"]],[22,2,[\\\"actualArriveTime\\\"]],[22,2,[\\\"arrive\\\"]],[22,2,[\\\"depart\\\"]],[22,2,[\\\"isArrived\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setStopUIReference\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/ui/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/perform-stop/break/ui/config\", \"adept-iq/config/environment\", \"moment\", \"adept-iq/models/stop-point\"], function (_exports, _config, _environment, _moment, _stopPoint) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INTERVAL_DELAY = 60000;\n\n  var _default = Ember.Component.extend({\n    classNames: ['perform-break-drawer'],\n    timeFormat: _environment.default.dateTimeFormat.dateTimeFlatPickr,\n    shouldArrive: true,\n    // pass in data to component\n    stopPoint: null,\n    driverBreak: null,\n    errorText: null,\n    actualArriveTime: null,\n    arrive: false,\n    depart: false,\n    isArrived: null,\n    isNextDisabled: null,\n    maxDate: null,\n    fields: _config.default.fields,\n    endFields: _config.default.endFields,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // pass in perform-all panel\n    previousStop: null,\n    // progress interval every minute\n    _interval: null,\n    dispatchRoute: Ember.computed.readOnly('stopPoint.dispatchRoute'),\n    route: Ember.computed.readOnly('stopPoint.dispatchRoute.route'),\n    routeVehicleDriver: Ember.computed.readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    address: Ember.computed.readOnly('driverBreak.place.address'),\n    fixedBreakAddress: Ember.computed.readOnly('driverBreak.address'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n    isLocationsDisabled: Ember.computed.equal('driverBreak.breakType.name', 'fixed'),\n    lastPerformedStop: Ember.computed('dispatchRoute.orderedStops.@each.{arrive,depart,computedStatus}', function () {\n      const stops = this.get('dispatchRoute.orderedStops');\n      const order = [];\n      if (Ember.isEmpty(stops)) return null;\n      stops.filter(function (stop) {\n        if (stop.get('depart') || stop.get('computedStatus') === _stopPoint.PERFORMED_STOP_STATUS || stop.get('computedStatus') === _stopPoint.ARRIVE_STOP_STATUS || stop.get('computedStatus') === _stopPoint.OFF_BREAK_STOP_STATUS) {\n          order.push(stop);\n        }\n      });\n      return order.pop();\n    }),\n    minTime: Ember.computed('lastPerformedStop.{arrive,depart,actualArriveTime,actualDepartTime,routeBreak.actualArriveTime,routeBreak.actualDepartTime}', 'previousStop.actualDepartTime', function () {\n      const prevDepartTime = this.get('previousStop.actualDepartTime');\n      if (prevDepartTime) return prevDepartTime;\n      const prevStop = this.get('lastPerformedStop');\n      let minTime = this.get('route.dispatchRoute.actualStartTimestamp') || this.get('route.plannedStartTime');\n      if (!prevStop) return minTime;\n      const actualArriveTime = prevStop.get('computedActualArriveTime'); // takes into account break stops\n\n      const actualDepartTime = prevStop.get('computedActualDepartTime'); // takes into account break stops\n\n      if (actualArriveTime) minTime = actualArriveTime;\n      if (actualDepartTime) minTime = actualDepartTime;\n      return minTime ? (0, _moment.default)(minTime).startOf('minute').toDate() : null; // we need something to separate stops\n    }),\n    unperformedIQStops: Ember.computed('dispatchRoute', 'stopPoint', function () {\n      const dispatchRoute = this.get('dispatchRoute');\n      const stopPoint = this.get('stopPoint');\n      const unperformedIQStops = dispatchRoute.findUnperformedStopsInSequence(stopPoint);\n      return unperformedIQStops;\n    }),\n    outOfOrderPerform: Ember.computed('isBulkPeform', 'unperformedIQStops.length', function () {\n      return !this.get('isBulkPeform') && this.get('unperformedIQStops.length') > 1;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const currentDate = new Date();\n      currentDate.setMinutes(currentDate.getMinutes() + 1);\n      this.set('maxDate', currentDate); // create a maxDate ticker that progresses by a minute\n\n      this._interval = setInterval(() => {\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isDestroyed')) return;\n          const maxDate = new Date();\n          maxDate.setMinutes(maxDate.getMinutes() + 1);\n          this.set('maxDate', maxDate);\n        });\n      }, INTERVAL_DELAY);\n      const setStopUIReference = this.get('setStopUIReference');\n\n      if (setStopUIReference) {\n        setStopUIReference(this);\n      }\n\n      const breakType = this.get('driverBreak.breakType.name');\n\n      if (!this.arrive && breakType !== 'fixed') {\n        this.set('driverBreak.place', null);\n      }\n    },\n\n    destroy() {\n      clearInterval(this._interval);\n      this._interval = null;\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    setDepartTimeInArrivalTime() {\n      const departTime = this.get('actualDepartTime');\n      const arriveTime = this.get('actualArriveTime');\n\n      if ((0, _moment.default)(departTime).isBefore(arriveTime, 'minutes')) {\n        this.set('actualDepartTime', arriveTime);\n      }\n    },\n\n    backUpCurrentState() {\n      const {\n        stopPoint,\n        driverBreak,\n        travelNeedOptions,\n        travelNeedItems,\n        arrive,\n        depart,\n        isArrived,\n        isNextDisabled,\n        actualArriveTime,\n        actualDepartTime\n      } = this;\n      const odometerInMiles = stopPoint.get('odometerInMiles');\n      const currentState = {\n        driverBreak,\n        travelNeedOptions,\n        travelNeedItems,\n        arrive,\n        depart,\n        isArrived,\n        odometerInMiles,\n        isNextDisabled,\n        actualArriveTime,\n        actualDepartTime\n      };\n      this.set('currentState', currentState);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n      const stopPoint = this.get('stopPoint');\n\n      if (currentState) {\n        const {\n          odometerInMiles,\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          isNextDisabled,\n          actualArriveTime,\n          actualDepartTime\n        } = currentState;\n        stopPoint.set('odometerInMiles', odometerInMiles);\n        this.setProperties({\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          isNextDisabled,\n          actualArriveTime,\n          actualDepartTime\n        });\n        this.set('currentState', null);\n      }\n    },\n\n    actions: {\n      onClickArrive(arrive) {\n        this.set('arrive', arrive);\n\n        if (arrive) {\n          // cascade to stopPoint so ember-changeset will be triggered.\n          this.get('stopPoint').set('arrive', arrive);\n        } else {\n          this.get('stopPoint').rollbackProperty('arrive');\n        }\n      },\n\n      onClickDepart(depart) {\n        if (depart) {\n          this.set('arrive', depart);\n          this.set('depart', depart); // cascade to stopPoint so ember-changeset will be triggered.\n\n          this.get('stopPoint').set('depart', depart);\n          this.set('isNextDisabled', false);\n          return;\n        }\n\n        this.set('depart', depart); // cascade to stopPoint so ember-changeset will be triggered.\n\n        this.get('stopPoint').rollbackProperty('depart');\n        this.set('isNextDisabled', true);\n      },\n\n      onActualDepartTimeChange(dateValues) {\n        const momentTime = (0, _moment.default)(dateValues[0]);\n        this.set('actualDepartTime', momentTime.startOf('minute').toISOString());\n        this.setDepartTimeInArrivalTime();\n      },\n\n      onActualArriveTimeChange(dateValues) {\n        const momentTime = (0, _moment.default)(dateValues[0]);\n        this.set('actualArriveTime', momentTime.startOf('minute').toISOString());\n        this.setDepartTimeInArrivalTime();\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        record.set(`${valuePath}.${options.valuePath}`, value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/ui/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    fields: {\n      id: 'location',\n      type: 'addresses',\n      label: '',\n      valuePath: 'startPlace',\n      modelName: 'place',\n      addressType: 'originlocations',\n      isMultiType: true,\n      extra: {\n        aliasPath: 'address.content.alias',\n        notesPath: 'address.content.notes',\n        displayPath: 'address.address',\n        premisePath: 'address.premise',\n        streetNumberPath: 'address.streetNumber',\n        streetNamePath: 'address.streetName',\n        localityPath: 'address.locality',\n        regionPath: 'address.region',\n        subRegionPath: 'address.county',\n        postalCodePath: 'address.postalCode',\n        countryPath: 'address.country',\n        freeformAddressPath: 'address.freeformAddress',\n        tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n        useOptionRecord: true,\n        streetAddressPath: 'address.streetAddress',\n        lat: 'location.lat',\n        lng: 'location.lng',\n        geoNode: 'location.geoNode',\n        locationsPath: 'address.locations.content.firstObject.latlng',\n        markerTypeOption: 'pick'\n      }\n    },\n    endFields: {\n      id: 'endLocation',\n      type: 'addresses',\n      label: '',\n      valuePath: 'endPlace',\n      modelName: 'place',\n      addressType: 'originlocations',\n      isMultiType: true,\n      extra: {\n        aliasPath: 'address.content.alias',\n        notesPath: 'address.content.notes',\n        displayPath: 'address.address',\n        premisePath: 'address.premise',\n        streetNumberPath: 'address.streetNumber',\n        streetNamePath: 'address.streetName',\n        localityPath: 'address.locality',\n        regionPath: 'address.region',\n        subRegionPath: 'address.county',\n        postalCodePath: 'address.postalCode',\n        countryPath: 'address.country',\n        freeformAddressPath: 'address.freeformAddress',\n        tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n        useOptionRecord: true,\n        streetAddressPath: 'address.streetAddress',\n        locationsPath: 'address.locations.content.firstObject.latlng',\n        markerTypeOption: 'drop',\n        lat: 'location.lat',\n        lng: 'location.lng',\n        geoNode: 'location.geoNode'\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/break/ui/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vpyQCB3t\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"outOfOrderPerform\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"summary\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[0,\\\"Out of Order Perform\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[9],[0,\\\"All unperformed stops prior to this one will be automatically soft-performed.\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/break/ui/template.hbs' @ L11:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Detail\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driver\\\",\\\"driverId\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\" \\\"],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"driverBreak\\\",\\\"promisedStart\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"promisedStart\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"requestTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driverBreak\\\",\\\"breakType\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"driverBreak\\\",\\\"breakType\\\",\\\"name\\\"]],\\\"fixed\\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/break/ui/template.hbs' @ L42:C4) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Perform break\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Location\\\"],[10],[0,\\\"\\\\n     \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"locations-input\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell edit\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"fixedBreakAddress\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"cell button\\\"],[11,\\\"disabled\\\",\\\"\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n       \\\"],[10],[0,\\\"\\\\n     \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"arrive\\\"],[11,\\\"name\\\",\\\"arrive\\\"],[12,\\\"checked\\\",[21,\\\"arrive\\\"]],[12,\\\"disabled\\\",[21,\\\"isArriveDisabled\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickArrive\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Start Break\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Break Start \\\"],[10],[0,\\\"\\\\n      \\\"],[2,\\\" TODO: confirm if this is appropriate to use as a planned arrival time \\\"],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"estimatedStart\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Break Start\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"minTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"isArrived\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualArriveTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"depart\\\"],[11,\\\"name\\\",\\\"depart\\\"],[12,\\\"checked\\\",[21,\\\"depart\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickDepart\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n       \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"End Break\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Break End\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"estimatedEnd\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Break End\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualDepartTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"driverBreak\\\",\\\"breakType\\\",\\\"name\\\"]],\\\"floating\\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/break/ui/template.hbs' @ L136:C4) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Perform break\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded v-align-bottom\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"arrive\\\"],[11,\\\"name\\\",\\\"arrive\\\"],[12,\\\"checked\\\",[21,\\\"arrive\\\"]],[12,\\\"disabled\\\",[21,\\\"isArriveDisabled\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"arrive\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Start Location\\\"],[10],[0,\\\"\\\\n     \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"form-components/\\\",[23,[\\\"fields\\\",\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"driverBreak\\\",\\\"startPlace\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"fields\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"isArrived\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"readonlyCell\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned break Start \\\"],[10],[0,\\\"\\\\n      \\\"],[2,\\\" TODO: confirm if this is appropriate to use as a planned arrival time \\\"],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"estimatedStart\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Break Start\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"minTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"isArrived\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualArriveTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded v-align-bottom\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"depart\\\"],[11,\\\"name\\\",\\\"depart\\\"],[12,\\\"checked\\\",[21,\\\"depart\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickDepart\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"End Location\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"form-components/\\\",[23,[\\\"endFields\\\",\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"driverBreak\\\",\\\"endPlace\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"endFields\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"endFields\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"endFields\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"endFields\\\",\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"endFields\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"isLocationsDisabled\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"endFields\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"endFields\\\",\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"endFields\\\",\\\"readonlyCell\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"driverBreak\\\"]],[23,[\\\"endFields\\\",\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Break End\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"driverBreak\\\",\\\"estimatedEnd\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Break End\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualDepartTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/break/ui/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/drop/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['perform-stop-drawer'],\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    stopPoint: Ember.computed.readOnly('stackFrame.options.stopPoint'),\n    componentName: 'performStop',\n    stopUIReference: null,\n    currentState: null,\n    actions: {\n      onShrinkClick() {\n        const stopUIReference = this.get('stopUIReference');\n\n        if (stopUIReference) {\n          stopUIReference.backUpCurrentState();\n        }\n\n        this.onShrinkClick();\n      },\n\n      setStopUIReference(stopUIReference) {\n        if (stopUIReference) {\n          this.set('stopUIReference', stopUIReference);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/drop/container/component\", [\"exports\", \"moment\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/errors/version-error\", \"adept-iq/models/stop-point\", \"adept-iq/mixins/version-check\"], function (_exports, _moment, _emberConcurrency, _unwrapProxy, _versionError, _stopPoint, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    // passed in by side-drawer-container component\n    stopPoint: null,\n    onShrinkClick: null,\n    onCloseClick: null,\n    initStatus: null,\n    arrive: Ember.computed.equal('stopPoint.status', 'Arrived'),\n    depart: false,\n    shouldArrive: true,\n    trip: Ember.computed.readOnly('stopPoint.trip'),\n    dispatchRoute: Ember.computed.readOnly('stopPoint.dispatchRoute'),\n    route: Ember.computed.readOnly('dispatchRoute.route'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    address: Ember.computed.readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    routeVehicleDriver: Ember.computed.readOnly('dispatchRoute.latestRouteVehicleDriver'),\n    isArrived: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.ARRIVE_STOP_STATUS),\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    defaultActualArriveTime: Ember.computed('stopPoint.actualArriveTime', function () {\n      const arriveTime = this.get('stopPoint.actualArriveTime');\n      const lastContainerDepartTime = this.get('lastContainerDepartTime');\n      const curDate = new Date();\n\n      if (Ember.isNone(arriveTime) && !Ember.isNone(this.get('currentState.actualArriveTime'))) {\n        return this.get('currentState.actualArriveTime');\n      }\n\n      if (Ember.isNone(arriveTime) && !Ember.isNone(lastContainerDepartTime)) {\n        return lastContainerDepartTime;\n      }\n\n      if (Ember.isNone(arriveTime)) {\n        return (0, _moment.default)(curDate).startOf('minute').toISOString();\n      }\n\n      return arriveTime;\n    }),\n    defaultActualDepartTime: Ember.computed('stopPoint.{actualDepartTime,actualArriveTime}', 'actualArriveTime', function () {\n      const departTime = this.get('stopPoint.actualDepartTime');\n      const lastContainerDepartTime = this.get('lastContainerDepartTime');\n      const curDate = new Date();\n\n      if (Ember.isNone(departTime) && !Ember.isNone(this.get('currentState.actualDepartTime'))) {\n        return this.get('currentState.actualDepartTime');\n      }\n\n      if (Ember.isNone(departTime) && !Ember.isNone(lastContainerDepartTime)) {\n        return lastContainerDepartTime;\n      }\n\n      if (Ember.isNone(departTime)) {\n        return curDate;\n      }\n\n      return departTime;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('actualArriveTime', this.get('defaultActualArriveTime'));\n      this.set('actualDepartTime', this.get('defaultActualDepartTime'));\n      this.set('initStatus', this.get('stopPoint.status'));\n    },\n\n    didInsertElement() {\n      const setStopContainerReference = this.get('setStopContainerReference');\n\n      if (setStopContainerReference) {\n        setStopContainerReference(this);\n      }\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const stopPoint = yield this.get('stopPoint');\n      stopPoint.rollback();\n      const isArrived = this.get('isArrived');\n      stopPoint.set('odometer');\n      this.set('arrive', isArrived);\n      this.set('depart', false);\n      this.set('errorText', '');\n      this.set('actualArriveTime', this.get('defaultActualArriveTime'));\n      this.set('actualDepartTime', this.get('defaultActualDepartTime'));\n    }).keepLatest(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const stopPoint = (0, _unwrapProxy.unwrapProxy)(this.get('stopPoint'));\n      const isArrived = this.get('isArrived');\n      const dispatchRoute = stopPoint.get('dispatchRoute'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null;\n      stopPoint.set('odometer', null);\n\n      if (this.get('arrive') && !isArrived) {\n        if (!Ember.isEmpty(this.get('actualArriveTime'))) {\n          stopPoint.set('actualArriveTime', this.get('actualArriveTime'));\n        }\n\n        avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion, dispatchRoute);\n      }\n\n      if (this.get('depart')) {\n        if (!Ember.isEmpty(this.get('actualDepartTime'))) {\n          stopPoint.set('actualDepartTime', this.get('actualDepartTime'));\n        }\n\n        avlmVersion = yield routeExecEventAdapter.createStopDepartEvent(stopPoint, avlmVersion, dispatchRoute);\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n    actions: {\n      onRefreshButtonClick() {\n        this.set('currentState', null);\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          const tooltip = this.get('tooltip');\n          const route = this.get('route');\n          const stopPoint = this.get('stopPoint');\n          const arrive = this.get('arrive');\n          const depart = this.get('depart');\n          const isArrived = this.get('isArrived');\n          const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('dispatchRoute'));\n\n          if (!dispatchRoute) {\n            tooltip.pushConfirmation({\n              tip: 'Perform stop failed, Because stop had been modified by another request.',\n              title: 'StopPoint record changed',\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              primaryAction: async () => {\n                const close = this.onCloseClick.bind(this);\n                tooltip.reset();\n                return close();\n              }\n            });\n            return;\n          }\n\n          const routeEndTime = route.get('dispatchRoute.plannedEndTime');\n          const actualStartTime = route.get('dispatchRoute.computedStartTime');\n          const arriveTime = (0, _moment.default)(this.get('actualArriveTime'));\n          const departTime = (0, _moment.default)(this.get('actualDepartTime'));\n          const routeOrdinal = stopPoint.get('routeOrdinal');\n          const routeStops = route.get('dispatchRoute.orderedStopsWithGaragesAndBreaks');\n          const lastPerformedStop = routeStops.filter(stop => stop.isPerformed && !stop.isSoftPerformed).get('lastObject');\n          const currentDateTime = (0, _moment.default)();\n          const title = 'Perform Stop';\n          let messageText = '';\n          let tooltipText = ''; // Reset error text\n\n          this.set('errorText');\n\n          if ((0, _moment.default)(departTime).isBefore(arriveTime, 'minutes')) {\n            this.set('actualDepartTime', this.get('actualArriveTime'));\n          }\n\n          if (arrive && depart) {\n            messageText = 'Performed drop stop';\n            tooltipText = 'Perform drop stop?';\n          } else if (arrive && !isArrived) {\n            messageText = 'Arrived drop stop';\n            tooltipText = 'Arrive drop stop?';\n          } else {\n            this.set('errorText', 'Please select at least one option of arrive or depart to perform the stop.');\n            return false;\n          }\n\n          if (arrive) {\n            if (Ember.isEmpty(arriveTime)) {\n              this.set('errorText', 'Please fill in a time for arrive time');\n              return false;\n            }\n          }\n\n          if (depart) {\n            if (Ember.isEmpty(departTime)) {\n              this.set('errorText', 'Please fill in a time for depart time');\n              return false;\n            }\n          }\n\n          if (arriveTime.isBefore(actualStartTime) || depart && departTime.isBefore(actualStartTime)) {\n            this.set('errorText', \"Performed Drop Stop Failed. The stop cannot be performed before the route's start time\");\n            return false;\n          }\n\n          if (arriveTime.isAfter(routeEndTime) || depart && departTime.isAfter(routeEndTime)) {\n            this.get('notifications').warning('Stop performed after planned route end time.');\n          }\n\n          if (arriveTime.isAfter(currentDateTime) || depart && departTime.isAfter(currentDateTime)) {\n            this.set('errorText', 'Performed Drop Stop Failed. The stop cannot be performed after the current time.');\n            return false;\n          }\n\n          if (routeOrdinal > 0 && lastPerformedStop && !lastPerformedStop.get('isNoShow')) {\n            if (arriveTime.isBefore(lastPerformedStop.get('actualDepartTime')) || depart && departTime.isBefore(lastPerformedStop.get('actualDepartTime'))) {\n              this.set('errorText', 'Performed Drop Stop Failed. The stop cannot be performed before the previous Actual drop time.');\n              return false;\n            }\n          } // Check dispatchRoute version first\n\n\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction();\n          tooltip.pushConfirmation({\n            tip: tooltipText,\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n                this.get('notifications').success(`${messageText} successful`);\n                return this.onCloseClick();\n              }).catch(response => {\n                // clear odometer in stop point model\n                stopPoint.set('odometer');\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                messageText = messageText + ' failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('cannot be in state arrived unless all previous stops are performed') || payloadMessage.errorDetail.includes('with status arrived cannot come after')) {\n                    messageText = 'Performed Drop Stop Failed. You cannot perform this stop until previous stops are performed';\n                  }\n\n                  if (payloadMessage.errorDetail.includes('Execution version is different')) {\n                    messageText = `PERFORM STOP FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                } else if (response instanceof _versionError.default) {\n                  messageText = `PERFORM STOP FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                tooltip.reset();\n                await unlockRouteAction(0);\n                this.get('workspace').requestWootricSurvey('on_stopPerform');\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              return tooltip.reset();\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/drop/container/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"AateBQSC\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[14,1,[[27,\\\"hash\\\",null,[[\\\"arrive\\\",\\\"depart\\\",\\\"errorText\\\",\\\"isArrived\\\",\\\"actualArriveTime\\\",\\\"actualDepartTime\\\",\\\"onPerformButtonClick\\\",\\\"onRefreshButtonClick\\\",\\\"onCancelButtonClick\\\"],[[22,0,[\\\"arrive\\\"]],[22,0,[\\\"depart\\\"]],[22,0,[\\\"errorText\\\"]],[22,0,[\\\"isArrived\\\"]],[22,0,[\\\"actualArriveTime\\\"]],[22,0,[\\\"actualDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCancelButtonClick\\\"],null]]]]]]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/drop/container/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/drop/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tbvFGZCu\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"container\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"side-drawer/perform-stop/drop/container\\\",null,[[\\\"stopPoint\\\",\\\"dispatchRouteVersionSnapshot\\\",\\\"onCloseClick\\\",\\\"onShrinkClick\\\",\\\"currentState\\\"],[[23,[\\\"stackFrame\\\",\\\"options\\\",\\\"stopPoint\\\"]],[23,[\\\"stackFrame\\\",\\\"options\\\",\\\"dispatchRouteVersionSnapshot\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[23,[\\\"currentState\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/perform-stop/drop/template.hbs' @ L13:C6) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Perform Drop Stop\\\",[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onPerformButtonClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onRefreshButtonClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onCancelButtonClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/perform-stop/drop/template.hbs' @ L22:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      Trip ID: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/perform-stop/drop/template.hbs' @ L26:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer/perform-stop/drop/ui\\\",null,[[\\\"class\\\",\\\"drawer\\\",\\\"currentState\\\",\\\"stopPoint\\\",\\\"errorText\\\",\\\"actualDepartTime\\\",\\\"actualArriveTime\\\",\\\"arrive\\\",\\\"depart\\\",\\\"isArrived\\\",\\\"setStopUIReference\\\"],[\\\"perform-stop-drawer\\\",[22,1,[]],[23,[\\\"currentState\\\"]],[23,[\\\"stackFrame\\\",\\\"options\\\",\\\"stopPoint\\\"]],[22,2,[\\\"errorText\\\"]],[22,2,[\\\"actualDepartTime\\\"]],[22,2,[\\\"actualArriveTime\\\"]],[22,2,[\\\"arrive\\\"]],[22,2,[\\\"depart\\\"]],[22,2,[\\\"isArrived\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setStopUIReference\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/drop/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/drop/ui/component\", [\"exports\", \"adept-iq/config/environment\", \"moment\"], function (_exports, _environment, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INTERVAL_DELAY = 60000;\n\n  var _default = Ember.Component.extend({\n    classNames: ['perform-stop-drawer'],\n    timeFormat: _environment.default.dateTimeFormat.dateTimeFlatPickr,\n    shouldArrive: true,\n    // pass in data to component\n    currentState: null,\n    stopPoint: null,\n    errorText: null,\n    actualDepartTime: null,\n    actualArriveTime: null,\n    arrive: false,\n    depart: false,\n    isArrived: null,\n    isNextDisabled: null,\n    isBulkPeform: false,\n    maxDate: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // pass in perform-all panel\n    previousStop: null,\n    // progress interval every minute\n    _interval: null,\n    trip: Ember.computed.readOnly('stopPoint.trip'),\n    dispatchRoute: Ember.computed.readOnly('stopPoint.dispatchRoute'),\n    route: Ember.computed.readOnly('dispatchRoute.route'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    address: Ember.computed.readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n    routeVehicleDriver: Ember.computed.readOnly('dispatchRoute.latestRouteVehicleDriver'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    lastPerformedStop: Ember.computed.readOnly('dispatchRoute.lastPerformedStop'),\n    minTime: Ember.computed('lastPerformedStop.{arrive,depart,actualArriveTime,actualDepartTime,routeBreak.actualArriveTime,routeBreak.actualDepartTime}', 'previousStop.actualDepartTime', function () {\n      const prevDepartTime = this.get('previousStop.actualDepartTime');\n      if (prevDepartTime) return prevDepartTime;\n      const prevStop = this.get('lastPerformedStop');\n      let minTime = this.get('dispatchRoute.computedStartTime') || this.get('dispatchRoute.plannedStartTime');\n      if (Ember.isEmpty(prevStop)) return minTime;\n      const actualArriveTime = prevStop.get('actualArriveTime'); // takes into account break stops\n\n      const actualDepartTime = prevStop.get('actualDepartTime'); // takes into account break stops\n\n      const stopArriveTime = this.get('actualArriveTime');\n      if (actualArriveTime) minTime = actualArriveTime;\n      if (actualDepartTime) minTime = actualDepartTime;\n      if (minTime > stopArriveTime) minTime = stopArriveTime;\n      return minTime ? (0, _moment.default)(minTime).startOf('minute').toDate() : null; // we need something to separate stops\n    }),\n    unperformedIQStops: Ember.computed('dispatchRoute', 'stopPoint', function () {\n      const dispatchRoute = this.get('dispatchRoute');\n      const stopPoint = this.get('stopPoint');\n      const unperformedIQStops = dispatchRoute.findUnperformedStopsInSequence(stopPoint);\n      return unperformedIQStops;\n    }),\n    outOfOrderPerform: Ember.computed('isBulkPeform', 'unperformedIQStops.length', function () {\n      return !this.get('isBulkPeform') && this.get('unperformedIQStops.length') > 1;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const max = new Date();\n      max.setMinutes(max.getMinutes() + 1);\n      this.set('maxDate', max); // create a maxDate ticker that progresses by a minute\n\n      this._interval = setInterval(() => {\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isDestroyed')) return;\n          this.set('maxDate', max);\n        });\n      }, INTERVAL_DELAY);\n      const setStopUIReference = this.get('setStopUIReference');\n\n      if (setStopUIReference) {\n        setStopUIReference(this);\n      }\n    },\n\n    destroy() {\n      clearInterval(this._interval);\n      this._interval = null;\n    },\n\n    didInsertElement() {\n      this.loadCurrentState();\n    },\n\n    setDropTimeInArrivalTime() {\n      const dropTime = this.get('actualDepartTime');\n      const arriveTime = this.get('actualArriveTime');\n\n      if ((0, _moment.default)(dropTime).isBefore(arriveTime, 'minutes')) {\n        this.set('actualDepartTime', arriveTime);\n      }\n    },\n\n    backUpCurrentState() {\n      const {\n        stopPoint,\n        driverBreak,\n        travelNeedOptions,\n        travelNeedItems,\n        arrive,\n        depart,\n        isArrived,\n        isNextDisabled,\n        actualArriveTime,\n        actualDepartTime\n      } = this;\n      const odometerInMiles = stopPoint.get('odometerInMiles');\n      const currentState = {\n        driverBreak,\n        travelNeedOptions,\n        travelNeedItems,\n        arrive,\n        depart,\n        isArrived,\n        odometerInMiles,\n        isNextDisabled,\n        actualArriveTime,\n        actualDepartTime\n      };\n      this.set('currentState', currentState);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n      const stopPoint = this.get('stopPoint');\n\n      if (currentState) {\n        const {\n          odometerInMiles,\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          isNextDisabled,\n          actualArriveTime,\n          actualDepartTime\n        } = currentState;\n        stopPoint.set('odometerInMiles', odometerInMiles);\n        this.setProperties({\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          isNextDisabled,\n          actualArriveTime,\n          actualDepartTime\n        });\n        this.set('currentState', null);\n      }\n    },\n\n    actions: {\n      onClickDepart(depart) {\n        if (depart) {\n          this.set('arrive', depart);\n          this.set('depart', depart);\n          this.set('isNextDisabled', false);\n          return;\n        }\n\n        this.set('depart', depart);\n        this.set('isNextDisabled', true);\n      },\n\n      onActualDropTimeChange(dateValues) {\n        const momentTime = (0, _moment.default)(dateValues[0]);\n        this.set('actualDepartTime', momentTime.startOf('minute').toISOString());\n        this.setDropTimeInArrivalTime();\n      },\n\n      onActualArriveTimeChange(dateValues) {\n        const momentTime = (0, _moment.default)(dateValues[0]);\n        this.set('actualArriveTime', momentTime.startOf('minute').toISOString());\n        this.setDropTimeInArrivalTime();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/drop/ui/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"2Or+cv/l\",\n    \"block\": \"{\\\"symbols\\\":[\\\"riderPhoneNumbers\\\",\\\"riderPhoneNumber\\\",\\\"i\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"outOfOrderPerform\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"summary\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[0,\\\"Out of Order Perform\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[9],[0,\\\"All unperformed stops prior to this one will be automatically soft-performed.\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[27,\\\"log\\\",[\\\"Depart\\\",[23,[\\\"actualDepartTime\\\"]]],null],false],[0,\\\"\\\\n\\\"],[1,[27,\\\"log\\\",[\\\"Arrive\\\",[23,[\\\"actualArriveTime\\\"]]],null],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/drop/ui/template.hbs' @ L14:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Drop Stop\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driver\\\",\\\"driverId\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"rider\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"rider\\\",\\\"riderPhoneNumbers\\\",\\\"length\\\"]],1],null]],null,{\\\"statements\\\":[[4,\\\"with\\\",[[23,[\\\"rider\\\",\\\"riderPhoneNumbers\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,1,[]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"\\\\n              Phone Number (\\\"],[1,[27,\\\"add\\\",[[22,3,[]],1],null],false],[0,\\\")\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,2,[\\\"formattedPhoneNumber\\\"]]],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"rider\\\",\\\"riderPhoneNumber\\\",\\\"formattedPhoneNumber\\\"]]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promised Drop Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Location\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"address\\\",\\\"fullAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"notes\\\"]]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/drop/ui/template.hbs' @ L66:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Performed\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"arrive\\\"],[11,\\\"name\\\",\\\"arrive\\\"],[12,\\\"checked\\\",[21,\\\"arrive\\\"]],[12,\\\"disabled\\\",[21,\\\"isArriveDisabled\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"arrive\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Arrive\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Arrival Time \\\"],[10],[0,\\\"\\\\n      \\\"],[2,\\\" TODO: confirm if this is appropriate to use as a planned arrival time \\\"],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"arrivalTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Arrival Time \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"minTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"isArrived\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualArriveTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"depart\\\"],[11,\\\"name\\\",\\\"depart\\\"],[12,\\\"checked\\\",[21,\\\"depart\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickDepart\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Depart\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Drop Time \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"departTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Drop Time \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualDropTimeChange\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/drop/ui/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/component\", [\"exports\", \"adept-iq/models/stop-point\"], function (_exports, _stopPoint) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    classNames: ['perform-stop-drawer'],\n    componentName: 'performStop',\n    onShrinkClick: null,\n    currentState: null,\n    stopPoint: Ember.computed.readOnly('stackFrame.options.stopPoint'),\n    dispatchRouteVersionSnapshot: Ember.computed.readOnly('stackFrame.options.dispatchRouteVersionSnapshot'),\n    stopUIReference: null,\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n    isArrived: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.ARRIVE_STOP_STATUS),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      onShrinkClick() {\n        const stopUIReference = this.get('stopUIReference');\n        this.set('stopPoint.actualArriveTime', this.get('actualArriveTime'));\n        this.set('stopPoint.actualDepartTime', this.get('actualDepartTime'));\n\n        if (stopUIReference) {\n          stopUIReference.backUpCurrentState();\n        }\n\n        this.onShrinkClick();\n      },\n\n      setStopUIReference(stopUIReference) {\n        if (stopUIReference) {\n          this.set('stopUIReference', stopUIReference);\n        }\n      },\n\n      getValueFromchild(depart) {\n        this.set('depart', depart);\n        this.set('arrive', depart);\n      },\n\n      getValueFromchildArrive(arrive) {\n        this.set('arrive', arrive);\n      },\n\n      getValueFromchildTravelNeeds(travelNeedItems) {\n        this.set('travelNeedItems', travelNeedItems);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/container/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/vehicleCapacity\", \"adept-iq/models/stop-point\", \"adept-iq/errors/version-error\", \"adept-iq/mixins/version-check\", \"lodash\"], function (_exports, _emberConcurrency, _moment, _mappedPermIds, _unwrapProxy, _vehicleCapacity, _stopPoint, _versionError, _versionCheck, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TravelNeedItem = Ember.Object.extend({\n    type: null,\n    count: null\n  }); // \"service animal\" is the one client travel need not shown in dropdowns\n\n  const dropdownExemptedTravelNeedTypeNames = ['serviceAnimal'];\n  let paymentTypeOptions = ['Cash', 'Credit Card', 'Smart Card'];\n  const minimumTravelNeedCount = 0;\n  const maximumTravelNeedCount = 20;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['perform-stop-drawer'],\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    // passed in by side-drawer-container component\n    stopPoint: null,\n    onShrinkClick: null,\n    onCloseClick: null,\n    currentState: null,\n    arrive: Ember.computed.equal('stopPoint.status', 'Arrived'),\n    depart: false,\n    initStatus: null,\n    travelNeedOptions: null,\n    travelNeedItems: null,\n    shouldArrive: true,\n    minCompanionCount: 0,\n    maxCompanionCount: 20,\n    paymentTypeOptions: null,\n    selectedPaymentType: null,\n    amount: null,\n    _travelNeedTypesQuery: null,\n    trip: Ember.computed.readOnly('stopPoint.trip'),\n    route: Ember.computed.readOnly('stopPoint.dispatchRoute.route'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    routeVehicleDriver: Ember.computed.readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    address: Ember.computed.readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    defaultActualArriveTime: Ember.computed('stopPoint.actualArriveTime', function () {\n      const arriveTime = this.get('stopPoint.actualArriveTime');\n      const lastContainerDepartTime = this.get('lastContainerDepartTime');\n      const curDate = new Date();\n\n      if (Ember.isNone(arriveTime) && !Ember.isNone(this.get('currentState.actualArriveTime'))) {\n        return this.get('currentState.actualArriveTime');\n      }\n\n      if (Ember.isNone(arriveTime) && !Ember.isNone(lastContainerDepartTime)) {\n        return lastContainerDepartTime;\n      }\n\n      if (Ember.isNone(arriveTime)) {\n        return (0, _moment.default)(curDate).startOf('minute').toISOString();\n      }\n\n      return arriveTime;\n    }),\n    defaultActualDepartTime: Ember.computed('stopPoint.actualDepartTime', function () {\n      const departTime = this.get('stopPoint.actualDepartTime');\n      const lastContainerDepartTime = this.get('lastContainerDepartTime');\n      const curDate = new Date();\n\n      if (Ember.isNone(departTime) && !Ember.isNone(this.get('currentState.actualDepartTime'))) {\n        return this.get('currentState.actualDepartTime');\n      }\n\n      if (Ember.isNone(departTime) && !Ember.isNone(lastContainerDepartTime)) {\n        return lastContainerDepartTime;\n      }\n\n      if (Ember.isNone(departTime)) {\n        return curDate;\n      }\n\n      return departTime;\n    }),\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n    isArrived: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.ARRIVE_STOP_STATUS),\n\n    init() {\n      this._super(...arguments); // only need to do this query once\n\n\n      const travelNeedTypesQuery = this.get('store').findAll('travel-need-type');\n      this.set('_travelNeedTypesQuery', travelNeedTypesQuery);\n      this.set('editAPI', Ember.Object.create({}));\n      this.set('actualArriveTime', this.get('defaultActualArriveTime'));\n      this.set('actualDepartTime', this.get('defaultActualDepartTime'));\n      this.set('initStatus', this.get('stopPoint.status'));\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n      const setStopContainerReference = this.get('setStopContainerReference');\n\n      if (setStopContainerReference) {\n        setStopContainerReference(this);\n      }\n    },\n\n    unusedTravelNeedOptions: Ember.computed('travelNeedOptions', 'travelNeedItems.@each.type', function () {\n      const travelNeedOptions = this.get('travelNeedOptions') || [];\n      const travelNeedItems = this.get('travelNeedItems') || [];\n      const usedTravelNeedTypes = travelNeedItems.mapBy('type');\n      return travelNeedOptions.reject(_ref => {\n        let {\n          type\n        } = _ref;\n        return usedTravelNeedTypes.includes(type);\n      });\n    }),\n\n    setMinMaxTravelNeedCount(travelNeedItem) {\n      // create min count for each travel need\n      travelNeedItem.set('minCount', minimumTravelNeedCount); // create max count for each travel need\n\n      travelNeedItem.set('maxCount', maximumTravelNeedCount);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const overrideTripCapacityLimitsPerm = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideTripCapacityLimits, null);\n      const travelNeedTypes = yield this.get('_travelNeedTypesQuery') || [];\n      const stopPoint = this.get('stopPoint');\n      const refreshTravelNeedTask = this.get('editAPI.refreshTravelNeedTask');\n      this.get('fetchStopPointCapacityTask').perform(stopPoint.get('id'), null);\n      stopPoint.rollback();\n      const isArrived = this.get('isArrived');\n      stopPoint.set('odometer'); // \"Pick Stop\" panel\n\n      this.set('arrive', isArrived);\n      this.set('depart', false);\n      this.set('errorText', '');\n      this.set('actualArriveTime', this.get('defaultActualArriveTime'));\n      this.set('actualDepartTime', this.get('defaultActualDepartTime')); // \"Travel Needs\" panel\n\n      const travelNeedOptions = travelNeedTypes.reduce((arr, travelNeedType) => {\n        const name = travelNeedType.get('name');\n        const displayName = travelNeedType.get('displayName'); // e.g. don't include \"serviceAnimal\" since it has its own UI\n\n        if (dropdownExemptedTravelNeedTypeNames.includes(name)) return arr;\n        arr.push({\n          type: name,\n          label: displayName || name\n        });\n        return arr;\n      }, []);\n      this.set('travelNeedOptions', travelNeedOptions); // dropdown travel needs\n\n      const travelNeeds = stopPoint.get('trip.segment.leg.legTravelNeeds') || [];\n      const equipmentTravelNeeds = travelNeeds.filter(travelNeed => {\n        return !travelNeed.get('basicTravelNeedType');\n      });\n      const ambulatoryTravelNeeds = travelNeeds.filterBy('isAmbulatory', true);\n      const wheelchairTravelNeeds = travelNeeds.filterBy('isWheelchair', true);\n      const travelNeedItems = equipmentTravelNeeds.reduce((arr, travelNeed) => {\n        const count = travelNeed ? travelNeed.get('count') : 0;\n        const type = travelNeed.get('travelNeedTypeName');\n        if (Ember.isNone(count) || count === 0) return arr;\n        const travelNeedItem = TravelNeedItem.create({\n          type,\n          count\n        }) || [];\n        arr.push(travelNeedItem);\n        return arr;\n      }, []); // add and combine all ambulatory count\n\n      if (ambulatoryTravelNeeds.length > 0) {\n        const count = ambulatoryTravelNeeds.reduce((accCount, travelNeed) => {\n          const currCount = Ember.isNone(travelNeed.get('count')) ? 0 : travelNeed.get('count');\n          return accCount + currCount;\n        }, 0);\n        const type = 'ambulatory';\n        travelNeedItems.push(TravelNeedItem.create({\n          type,\n          count\n        }));\n      } // add and combine all wheelchair count\n\n\n      if (wheelchairTravelNeeds.length > 0) {\n        const count = wheelchairTravelNeeds.reduce((accCount, travelNeed) => {\n          const currCount = Ember.isNone(travelNeed.get('count')) ? 0 : travelNeed.get('count');\n          return accCount + currCount;\n        }, 0);\n        const type = 'wheelchair';\n        travelNeedItems.push(TravelNeedItem.create({\n          type,\n          count\n        }));\n      }\n\n      travelNeedItems.forEach(travelNeed => {\n        if (Ember.isNone(travelNeed.get('oldCount'))) {\n          travelNeed.set('oldCount', travelNeed.get('count'));\n        } else {\n          travelNeed.set('count', travelNeed.get('oldCount'));\n        }\n\n        this.setMinMaxTravelNeedCount(travelNeed);\n      });\n      this.set('travelNeedItems', travelNeedItems); // additional travel needs\n\n      const serviceAnimalTravelNeed = travelNeeds.findBy('isServiceAnimal', true);\n      const pcaTravelNeed = travelNeeds.findBy('isPca', true);\n      const companionTravelNeed = travelNeeds.findBy('isCompanion', true);\n      const companionCount = companionTravelNeed ? companionTravelNeed.get('count') : 0;\n      const serviceAnimalSwitch = this.$('#service-animal-switch');\n      const pcaSwitch = this.$('#pca-switch');\n      const amountToReset = 0;\n      if (serviceAnimalSwitch[0]) serviceAnimalSwitch[0].checked = serviceAnimalTravelNeed ? serviceAnimalTravelNeed.get('count') : 0;\n      if (pcaSwitch[0]) pcaSwitch[0].checked = pcaTravelNeed ? pcaTravelNeed.get('count') : 0;\n      const pcaCount = pcaTravelNeed ? pcaTravelNeed.get('count') : 0;\n      this.set('serviceAnimalCount', serviceAnimalSwitch);\n      this.set('pcaCount', pcaCount);\n      this.set('companionCount', companionCount);\n      this.set('minCompanionCount', companionCount - 1 > 0 ? companionCount - 1 : 0);\n\n      if (overrideTripCapacityLimitsPerm) {\n        this.set('maxCompanionCount', 5); // replace value 5 with system configuration limit when it exist nyaar-11162\n      } else {\n        this.set('maxCompanionCount', companionCount + 1);\n      } // Refreshing Amount and CompanionCount\n\n\n      if (refreshTravelNeedTask) {\n        refreshTravelNeedTask.perform(companionCount, amountToReset);\n      } // \"Fare\" panel\n\n\n      const store = this.get('store');\n      const fareTypes = store.peekAll('fare-type');\n      paymentTypeOptions = fareTypes.map(p => p.displayName);\n      this.set('paymentTypeOptions', paymentTypeOptions);\n      this.set('selectedPaymentType', paymentTypeOptions[0]);\n      this.set('amount', stopPoint.get('trip.segment.fare'));\n\n      if (!Ember.isEmpty(this.currentState)) {\n        this.loadCurrentState(this.currentState);\n      } else {\n        this.loadCurrentState();\n      }\n    }).keepLatest(),\n    travelNeedComputation: (0, _emberConcurrency.task)(function* () {\n      const travelNeedTypes = yield this.get('_travelNeedTypesQuery') || [];\n      const stopPoint = this.get('stopPoint'); // \"Travel Needs\" panel\n\n      const travelNeedOptions = travelNeedTypes.reduce((arr, travelNeedType) => {\n        const name = travelNeedType.get('name');\n        const displayName = travelNeedType.get('displayName'); // e.g. don't include \"serviceAnimal\" since it has its own UI\n\n        if (dropdownExemptedTravelNeedTypeNames.includes(name)) return arr;\n        arr.push({\n          type: name,\n          label: displayName || name\n        });\n        return arr;\n      }, []); // dropdown travel needs\n\n      const travelNeeds = stopPoint.get('trip.segment.leg.legTravelNeeds') || [];\n      const equipmentTravelNeeds = travelNeeds.filter(travelNeed => {\n        return !travelNeed.get('basicTravelNeedType');\n      });\n      const ambulatoryTravelNeeds = travelNeeds.filterBy('isAmbulatory', true);\n      const wheelchairTravelNeeds = travelNeeds.filterBy('isWheelchair', true);\n      const travelNeedItems = equipmentTravelNeeds.reduce((arr, travelNeed) => {\n        const count = travelNeed ? travelNeed.get('count') : 0;\n        const type = travelNeed.get('travelNeedTypeName');\n        if (Ember.isNone(count) || count === 0) return arr;\n        const travelNeedItem = TravelNeedItem.create({\n          type,\n          count\n        }) || [];\n        arr.push(travelNeedItem);\n        return arr;\n      }, []); // add and combine all ambulatory count\n\n      if (ambulatoryTravelNeeds.length > 0) {\n        const count = ambulatoryTravelNeeds.reduce((accCount, travelNeed) => {\n          const currCount = Ember.isNone(travelNeed.get('count')) ? 0 : travelNeed.get('count');\n          return accCount + currCount;\n        }, 0);\n        const type = 'ambulatory';\n        travelNeedItems.push(TravelNeedItem.create({\n          type,\n          count\n        }));\n      } // add and combine all wheelchair count\n\n\n      if (wheelchairTravelNeeds.length > 0) {\n        const count = wheelchairTravelNeeds.reduce((accCount, travelNeed) => {\n          const currCount = Ember.isNone(travelNeed.get('count')) ? 0 : travelNeed.get('count');\n          return accCount + currCount;\n        }, 0);\n        const type = 'wheelchair';\n        travelNeedItems.push(TravelNeedItem.create({\n          type,\n          count\n        }));\n      }\n\n      travelNeedItems.forEach(travelNeed => {\n        if (Ember.isNone(travelNeed.get('oldCount'))) {\n          travelNeed.set('oldCount', travelNeed.get('count'));\n        } else {\n          travelNeed.set('count', travelNeed.get('oldCount'));\n        }\n\n        this.setMinMaxTravelNeedCount(travelNeed);\n      });\n      return {\n        travelNeedItems,\n        travelNeedOptions\n      };\n    }),\n\n    loadCurrentState() {\n      let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      let currentState = state;\n\n      if (Ember.isEmpty(currentState)) {\n        currentState = this.get('currentState');\n      }\n\n      const stopPoint = this.get('stopPoint');\n\n      if (currentState) {\n        const {\n          odometerInMiles,\n          driverBreak,\n          arrive,\n          depart,\n          isArrived,\n          selectedPaymentType,\n          amount,\n          pcaCount,\n          serviceAnimalCount,\n          companionCount,\n          actualArriveTime,\n          actualDepartTime\n        } = currentState;\n        stopPoint.set('odometerInMiles', odometerInMiles);\n        let travelNeedOptions = currentState.travelNeedOptions;\n        let travelNeedItems = currentState.travelNeedItems;\n\n        if (Ember.isEmpty(travelNeedOptions) || Ember.isEmpty(travelNeedItems)) {\n          const travelNeedComputation = this.get('refreshTask').perform();\n          travelNeedOptions = travelNeedComputation.travelNeedOptions;\n          travelNeedItems = travelNeedComputation.travelNeedItems;\n        }\n\n        this.setProperties({\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          selectedPaymentType,\n          amount,\n          pcaCount,\n          serviceAnimalCount,\n          companionCount,\n          actualArriveTime,\n          actualDepartTime\n        });\n      }\n    },\n\n    async processTripCapacityChange(travelNeedItems, stopPoint) {\n      try {\n        const activityLogAdapter = this.get('store').adapterFor('activity-log');\n        const session = this.get('session');\n        const route = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('route'));\n        const trip = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('trip'));\n        const vehicle = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute.assignedVehicle'));\n        const driver = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute.assignedDriver'));\n        const dispatchSchedule = (0, _unwrapProxy.unwrapProxy)(route.get('dispatchRoute.dispatchSchedule'));\n        const providerId = route.get('provider.id');\n        let attributeChanges = false;\n        travelNeedItems.forEach(item => {\n          if (item.count !== item.oldCount) {\n            attributeChanges = true; // let's not remove this message for now. It will be needed later.\n            // const sign = item.count > item.oldCount ? '+' : '-';\n            // if (attributeChanges.length > 0) {\n            //   attributeChanges += ` and ${sign}${Math.abs(item.count - item.oldCount)} ${item.type[0].toUpperCase() + item.type.slice(1)} seat`;\n            // }\n            // else {\n            //   attributeChanges = `${sign}${Math.abs(item.count - item.oldCount)} ${item.type[0].toUpperCase() + item.type.slice(1)} seat`;\n            // }\n          }\n        });\n\n        if (attributeChanges) {\n          const details = `Capacity for Trip ${trip.tripId} was modified`;\n          const eventLog = {\n            type: 'event',\n            attributes: {\n              routeId: parseInt(route.get('id'), 10),\n              tripId: parseInt(trip.get('id'), 10),\n              stopPointId: stopPoint.get('id'),\n              driverId: parseInt(driver.get('id'), 10),\n              vehicleId: parseInt(vehicle.get('id'), 10),\n              scheduleId: parseInt(dispatchSchedule.get('id'), 10),\n              source: 'webApp',\n              providerName: providerId,\n              priority: 'low',\n              eventType: 'TEE',\n              actionType: 'capacityChange',\n              userId: session.data.authenticated.userId,\n              eventLog: {\n                capacityChange: [{\n                  activity: 'Trip Capacity Change',\n                  loggingType: 'route',\n                  details: details\n                }, {\n                  activity: 'Trip Capacity Change',\n                  loggingType: 'trip',\n                  details: details\n                }]\n              }\n            }\n          };\n          await activityLogAdapter.createEventActivity(eventLog);\n        }\n      } catch (err) {\n        console.warn(err); // eslint-disable-line\n      }\n    },\n\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event');\n      const tripPaymentAdapter = store.adapterFor('trip-payment');\n      const stopPoint = this.get('stopPoint');\n      const trip = stopPoint.get('trip');\n      const isArrived = this.get('isArrived');\n      const serviceAnimalCount = this.get('serviceAnimalCount');\n      const pcaCount = this.get('pcaCount');\n      const companionCount = this.get('companionCount');\n      const travelNeedItems = this.get('travelNeedItems');\n      const dispatchRoute = stopPoint.get('dispatchRoute'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null;\n      stopPoint.set('odometer', null);\n\n      if (this.get('arrive') && !isArrived) {\n        if (!Ember.isEmpty(this.get('actualArriveTime'))) {\n          stopPoint.set('actualArriveTime', this.get('actualArriveTime'));\n        }\n\n        avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion, dispatchRoute);\n      }\n\n      if (this.get('depart')) {\n        // Handle Travel Needs\n        stopPoint.set('serviceAnimalCount', serviceAnimalCount);\n        stopPoint.set('pcaCount', pcaCount);\n        stopPoint.set('companionCount', companionCount);\n        stopPoint.set('travelNeeds', travelNeedItems.map(travelNeedItem => ({\n          type: travelNeedItem.get('type'),\n          cnt: travelNeedItem.get('count')\n        })));\n\n        if (!Ember.isEmpty(this.get('actualDepartTime'))) {\n          stopPoint.set('actualDepartTime', this.get('actualDepartTime'));\n        } // added this activity log here because it was difficult to calculate\n        // in avlm\n\n\n        yield this.processTripCapacityChange(travelNeedItems, stopPoint);\n        avlmVersion = yield routeExecEventAdapter.createStopDepartEvent(stopPoint, avlmVersion, dispatchRoute);\n      }\n\n      if (this.get('amount')) {\n        trip.set('fare', parseFloat(this.get('amount')));\n        trip.set('fareName', this.get('selectedPaymentType'));\n        yield tripPaymentAdapter.createTripPaymentEvent(stopPoint.get('trip'));\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n    fetchStopPointCapacityTask: (0, _emberConcurrency.task)(function* (stopPointId, customTravelNeeds) {\n      const stopPointAdapter = this.get('store').adapterFor('stop-point');\n      const availableCapacityResponse = yield stopPointAdapter.getStopPointCapacity(stopPointId, customTravelNeeds);\n\n      const availableCapacity = _lodash.default.keyBy(_lodash.default.get(availableCapacityResponse, 'data.attributes.travelNeeds'), 'travelNeedTypeName');\n\n      this.set('availableCapacity', availableCapacity);\n    }).keepLatest(),\n    actions: {\n      onRefreshButtonClick() {\n        this.set('currentState', null);\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      getVehicleCapacityAvailable(travelNeeds) {\n        const stopPoint = this.get('stopPoint');\n        this.get('fetchStopPointCapacityTask').perform(stopPoint.get('id'), travelNeeds);\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          const tooltip = this.get('tooltip');\n          const route = this.get('route');\n          const stopPoint = this.get('stopPoint');\n          const arrive = this.get('arrive');\n          const depart = this.get('depart');\n          const isArrived = this.get('isArrived');\n          const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('dispatchRoute'));\n\n          if (!dispatchRoute) {\n            tooltip.pushConfirmation({\n              tip: 'Perform stop failed, Because stop had been modified by another request.',\n              title: 'StopPoint record changed',\n              hasOverlay: true,\n              primaryActionText: 'Confirm',\n              primaryAction: async () => {\n                const close = this.onCloseClick.bind(this);\n                tooltip.reset();\n                return close();\n              }\n            });\n            return;\n          }\n\n          const routeEndTime = route.get('dispatchRoute.plannedEndTime');\n          const actualStartTime = route.get('dispatchRoute.computedStartTime');\n          const arriveTime = (0, _moment.default)(this.get('actualArriveTime'));\n          const selectedPaymentType = this.get('selectedPaymentType');\n          const amount = this.get('amount');\n          const departTime = (0, _moment.default)(this.get('actualDepartTime'));\n          const routeOrdinal = stopPoint.get('routeOrdinal');\n          const routeStops = route.get('dispatchRoute.orderedStopsWithGaragesAndBreaks');\n          const lastPerformedStop = routeStops.filter(stop => stop.isPerformed && !stop.isSoftPerformed).get('lastObject');\n          const currentDateTime = (0, _moment.default)();\n          const travelNeedItems = this.get('travelNeedItems');\n          const vehicle = (0, _unwrapProxy.unwrapProxy)(dispatchRoute.get('latestRouteVehicleDriver.vehicle'));\n          const tripsInDanger = this.get('depart') ? (0, _vehicleCapacity.notEnoughSeatsTripInRoute)(travelNeedItems, stopPoint, dispatchRoute, vehicle) : [];\n          let title = 'Perform Stop';\n          let messageText = '';\n          let tooltipText = ''; // Reset error text\n\n          this.set('errorText');\n          this.set('stopPoint.actualArriveTime', this.get('actualArriveTime'));\n          this.set('stopPoint.actualDepartTime', this.get('actualDepartTime'));\n\n          if ((0, _moment.default)(departTime).isBefore(arriveTime, 'minutes')) {\n            this.set('actualDepartTime', this.get('actualArriveTime'));\n          }\n\n          if (arrive && depart) {\n            messageText = 'Performed pick stop';\n            tooltipText = 'Perform pick stop?';\n          } else if (arrive && !isArrived) {\n            messageText = 'Arrived pick stop';\n            tooltipText = 'Arrive pick stop?';\n          } else {\n            this.set('errorText', 'Please select at least one option of arrive or pick up to perform the stop.');\n            return false;\n          }\n\n          if (arrive) {\n            if (Ember.isEmpty(arriveTime)) {\n              this.set('errorText', 'Please fill in a time for arrive time');\n              return false;\n            }\n          }\n\n          if (depart) {\n            if (Ember.isEmpty(departTime)) {\n              this.set('errorText', 'Please fill in a time for pick up time');\n              return false;\n            }\n          }\n\n          if (selectedPaymentType) {\n            if (Ember.isEmpty(amount)) {\n              this.set('errorText', 'Fare amount cannot be empty.');\n              return false;\n            }\n          }\n\n          if (arriveTime.isBefore(actualStartTime) || depart && departTime.isBefore(actualStartTime)) {\n            this.set('errorText', \"Performed Pick Stop Failed. The stop cannot be performed before the route's start time\");\n            return false;\n          }\n\n          if (arriveTime.isAfter(routeEndTime) || depart && departTime.isAfter(routeEndTime)) {\n            this.set('errorText', \"Performed Pick Stop Failed. The stop cannot be performed after the route's end time.\");\n            return false;\n          }\n\n          if (arriveTime.isAfter(currentDateTime) || depart && departTime.isAfter(currentDateTime)) {\n            this.set('errorText', 'Performed Pick Stop Failed. The stop cannot be performed after the current time.');\n            return false;\n          }\n\n          if (routeOrdinal > 0 && lastPerformedStop && !lastPerformedStop.get('isNoShow')) {\n            if (arriveTime.isBefore(lastPerformedStop.get('actualDepartTime')) || depart && departTime.isBefore(lastPerformedStop.get('actualDepartTime'))) {\n              this.set('errorText', 'Performed Pick Stop Failed. The stop cannot be performed before the previous Actual drop time.');\n              return false;\n            }\n          }\n\n          if (tripsInDanger.length > 0) {\n            tooltipText = `Trips cannot be serviced: ${tripsInDanger.join()}`;\n            title = 'Capacity Exceeded';\n          } // Check dispatchRoute version first\n\n\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction();\n          tooltip.pushConfirmation({\n            tip: tooltipText,\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('activeContext.topActiveContext').get('refreshTableContent').perform(['route']);\n                this.get('notifications').success(`${messageText} successful`);\n              }).catch(response => {\n                // clear odometer in stop point model\n                stopPoint.set('odometer');\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                messageText = messageText + ' failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('cannot be in state arrived unless all previous stops are performed') || payloadMessage.errorDetail.includes('with status arrived cannot come after')) {\n                    messageText = 'Performed Pick Stop Failed. You cannot perform this stop until previous stops are performed';\n                  }\n\n                  if (payloadMessage.errorDetail.includes('Execution version is different')) {\n                    messageText = `PERFORM STOP FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                } else if (response instanceof _versionError.default) {\n                  messageText = `PERFORM STOP FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                tooltip.reset();\n                this.get('workspace').requestWootricSurvey('on_stopPerform');\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              return tooltip.reset();\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/container/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"W5Ds8mkm\",\n    \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[14,1,[[27,\\\"hash\\\",null,[[\\\"arrive\\\",\\\"depart\\\",\\\"errorText\\\",\\\"isArrived\\\",\\\"pcaCount\\\",\\\"serviceAnimalCount\\\",\\\"companionCount\\\",\\\"minCompanionCount\\\",\\\"maxCompanionCount\\\",\\\"actualArriveTime\\\",\\\"actualDepartTime\\\",\\\"travelNeedOptions\\\",\\\"travelNeedItems\\\",\\\"paymentTypeOptions\\\",\\\"selectedPaymentType\\\",\\\"amount\\\",\\\"editAPI\\\",\\\"onPerformButtonClick\\\",\\\"onRefreshButtonClick\\\",\\\"onCancelButtonClick\\\",\\\"availableCapacity\\\",\\\"capacityTaskRunning\\\",\\\"getVehicleCapacityAvailable\\\"],[[22,0,[\\\"arrive\\\"]],[22,0,[\\\"depart\\\"]],[22,0,[\\\"errorText\\\"]],[22,0,[\\\"isArrived\\\"]],[22,0,[\\\"pcaCount\\\"]],[22,0,[\\\"serviceAnimalCount\\\"]],[22,0,[\\\"companionCount\\\"]],[22,0,[\\\"minCompanionCount\\\"]],[22,0,[\\\"maxCompanionCount\\\"]],[22,0,[\\\"actualArriveTime\\\"]],[22,0,[\\\"actualDepartTime\\\"]],[22,0,[\\\"travelNeedOptions\\\"]],[22,0,[\\\"travelNeedItems\\\"]],[22,0,[\\\"paymentTypeOptions\\\"]],[22,0,[\\\"selectedPaymentType\\\"]],[22,0,[\\\"amount\\\"]],[22,0,[\\\"editAPI\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCancelButtonClick\\\"],null],[22,0,[\\\"availableCapacity\\\"]],[22,0,[\\\"fetchStopPointCapacityTask\\\",\\\"isRunning\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"getVehicleCapacityAvailable\\\"],null]]]]]]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/pick/container/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1nHh9gn7\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"container\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"side-drawer/perform-stop/pick/container\\\",null,[[\\\"stopPoint\\\",\\\"dispatchRouteVersionSnapshot\\\",\\\"onCloseClick\\\",\\\"onShrinkClick\\\",\\\"currentState\\\"],[[23,[\\\"stopPoint\\\"]],[23,[\\\"dispatchRouteVersionSnapshot\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[23,[\\\"currentState\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/template.hbs' @ L13:C6) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Perform Pick Stop\\\",[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onPerformButtonClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onRefreshButtonClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"onCancelButtonClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/template.hbs' @ L22:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      Trip ID: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/template.hbs' @ L26:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer/perform-stop/pick/ui\\\",null,[[\\\"class\\\",\\\"drawer\\\",\\\"currentState\\\",\\\"stopPoint\\\",\\\"travelNeedOptions\\\",\\\"travelNeedItems\\\",\\\"errorText\\\",\\\"actualDepartTime\\\",\\\"actualArriveTime\\\",\\\"paymentTypeOptions\\\",\\\"selectedPaymentType\\\",\\\"arrive\\\",\\\"depart\\\",\\\"isArrived\\\",\\\"minCompanionCount\\\",\\\"maxCompanionCount\\\",\\\"pcaCount\\\",\\\"serviceAnimalCount\\\",\\\"companionCount\\\",\\\"origCompanionCount\\\",\\\"amount\\\",\\\"origAmount\\\",\\\"editAPI\\\",\\\"setStopUIReference\\\",\\\"getValueFromchild\\\",\\\"getValueFromchildArrive\\\",\\\"getValueFromchildTravelNeeds\\\",\\\"getVehicleCapacityAvailable\\\",\\\"availableCapacity\\\",\\\"capacityTaskRunning\\\"],[\\\"perform-stop-drawer\\\",[22,1,[]],[23,[\\\"currentState\\\"]],[23,[\\\"stopPoint\\\"]],[22,2,[\\\"travelNeedOptions\\\"]],[22,2,[\\\"travelNeedItems\\\"]],[22,2,[\\\"errorText\\\"]],[22,2,[\\\"actualDepartTime\\\"]],[22,2,[\\\"actualArriveTime\\\"]],[22,2,[\\\"paymentTypeOptions\\\"]],[22,2,[\\\"selectedPaymentType\\\"]],[22,2,[\\\"arrive\\\"]],[22,2,[\\\"depart\\\"]],[22,2,[\\\"isArrived\\\"]],[22,2,[\\\"minCompanionCount\\\"]],[22,2,[\\\"maxCompanionCount\\\"]],[22,2,[\\\"pcaCount\\\"]],[22,2,[\\\"serviceAnimalCount\\\"]],[22,2,[\\\"companionCount\\\"]],[22,2,[\\\"companionCount\\\"]],[22,2,[\\\"amount\\\"]],[22,2,[\\\"amount\\\"]],[22,2,[\\\"editAPI\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"setStopUIReference\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"getValueFromchild\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"getValueFromchildArrive\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"getValueFromchildTravelNeeds\\\"],null],[27,\\\"action\\\",[[22,0,[]],[22,2,[\\\"getVehicleCapacityAvailable\\\"]]],null],[22,2,[\\\"availableCapacity\\\"]],[22,2,[\\\"capacityTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/pick/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/travel-needs-picker/component\", [\"exports\", \"adept-iq/models/travel-need-type\", \"lodash\"], function (_exports, _travelNeedType, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TravelNeedItem = Ember.Object.extend({\n    type: null,\n    count: null\n  });\n  const minimumTravelNeedCount = 0;\n  const maximumTravelNeedCount = 20;\n  const EDITABLE_TYPES = [_travelNeedType.AMBULATORY_TRAVELNEED_TYPE, _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE, _travelNeedType.COMPANION_TRAVELNEED_TYPE];\n\n  var _default = Ember.Component.extend({\n    classNames: ['travel-needs-picker'],\n    pcaCount: null,\n    serviceAnimalCount: null,\n    companionCount: null,\n    travelNeedOptions: null,\n    travelNeedItems: null,\n    localTravelNeedItems: null,\n    minCompanionCount: 0,\n    maxCompanionCount: 10,\n    stopPoint: null,\n    dispatchRoute: Ember.computed.readOnly('stopPoint.dispatchRoute'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    routeVehicleDriver: Ember.computed.readOnly('dispatchRoute.latestRouteVehicleDriver'),\n    vehicle: Ember.computed.readOnly('routeVehicleDriver.vehicle'),\n    currentCapacity: Ember.computed('availableCapacity', function () {\n      const availableCapacity = this.get('availableCapacity');\n      let ambulatory = availableCapacity && availableCapacity.ambulatory ? availableCapacity.ambulatory.count : 0;\n      let wheelchair = availableCapacity && availableCapacity.wheelchair ? availableCapacity.wheelchair.count : 0;\n\n      if (ambulatory > 0) {\n        ambulatory = `+${ambulatory}`;\n      }\n\n      if (wheelchair > 0) {\n        wheelchair = `+${wheelchair}`;\n      }\n\n      return {\n        ambulatory,\n        wheelchair\n      };\n    }),\n    ambulatoryOption: Ember.computed('travelNeedOptions', function () {\n      return this.get('travelNeedOptions').filter(option => option.type === _travelNeedType.AMBULATORY_TRAVELNEED_TYPE) || [];\n    }),\n    wheelchairOption: Ember.computed('travelNeedOptions', function () {\n      return this.get('travelNeedOptions').filter(option => option.type === _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE) || [];\n    }),\n    notEnoughTravelNeeds: Ember.computed('ambulatoryTravelNeed.count', 'wheelchairTravelNeed.count', 'pcaCount', 'companionCount', function () {\n      const pcaCount = this.get('pcaCount') || 0;\n      const companionCount = this.get('companionCount') || 0;\n      const clientCount = 1; // minimum of 1 client\n\n      const ambulatoryTravelNeed = this.get('ambulatoryTravelNeed') || {\n        count: 0\n      };\n      const wheelchairTravelNeed = this.get('wheelchairTravelNeed') || {\n        count: 0\n      };\n      return pcaCount + companionCount + clientCount > ambulatoryTravelNeed.count + wheelchairTravelNeed.count;\n    }),\n    ambulatoryTravelNeed: Ember.computed('localTravelNeedItems.[]', function () {\n      const localTravelNeedItems = this.get('localTravelNeedItems') || [];\n      const ambulatoryTravelNeedItem = localTravelNeedItems.find(item => item.type === _travelNeedType.AMBULATORY_TRAVELNEED_TYPE);\n      return ambulatoryTravelNeedItem;\n    }),\n    wheelchairTravelNeed: Ember.computed('localTravelNeedItems.[]', function () {\n      const localTravelNeedItems = this.get('localTravelNeedItems') || [];\n      const wheelchairTravelNeedItem = localTravelNeedItems.find(item => item.type === _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE);\n      return wheelchairTravelNeedItem;\n    }),\n    formattedTravelNeedItems: Ember.computed('localTravelNeedItems', function () {\n      const localTravelNeedItems = this.get('localTravelNeedItems') || [];\n      const travelNeedOptions = this.get('travelNeedOptions') || [];\n      return localTravelNeedItems.map(travelNeed => {\n        const isDisabled = !EDITABLE_TYPES.includes(travelNeed.type);\n        return TravelNeedItem.create({ ...travelNeed,\n          isDisabled,\n          travelNeedOption: travelNeedOptions.find(tnO => tnO.type === travelNeed.type)\n        });\n      });\n    }),\n    companionExist: Ember.computed('localTravelNeedItems.[]', 'travelNeedOptions', function () {\n      const localTravelNeedItems = this.get('travelNeedItlocalTravelNeedItemsems') || [];\n      return !!localTravelNeedItems.find(item => item.type === _travelNeedType.COMPANION_TRAVELNEED_TYPE);\n    }),\n    companionTravelNeed: Ember.computed('travelNeedOptions', function () {\n      const travelNeedOptions = this.get('travelNeedOptions') || [];\n      const isDisabled = !EDITABLE_TYPES.includes(_travelNeedType.COMPANION_TRAVELNEED_TYPE);\n      return TravelNeedItem.create({\n        count: this.companionCount,\n        maxCount: this.maxCompanionCount,\n        minCount: this.minCompanionCount,\n        oldCount: 0,\n        type: 'companion',\n        isDisabled,\n        travelNeedOption: travelNeedOptions.find(tnO => tnO.type === _travelNeedType.COMPANION_TRAVELNEED_TYPE)\n      });\n    }),\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      this.initTravelNeedItems();\n    },\n\n    setMinMaxTravelNeedCount(travelNeedItem) {\n      // create min count for each travel need\n      travelNeedItem.set('minCount', minimumTravelNeedCount); // create max count for each travel need\n\n      travelNeedItem.set('maxCount', maximumTravelNeedCount);\n    },\n\n    initTravelNeedItems() {\n      const travelNeedItems = this.get('travelNeedItems') || [];\n      const ambulatoryTravelNeedItem = travelNeedItems.find(item => item.type === _travelNeedType.AMBULATORY_TRAVELNEED_TYPE);\n\n      if (Ember.isNone(ambulatoryTravelNeedItem)) {\n        const travelNeedItem = TravelNeedItem.create({\n          type: _travelNeedType.AMBULATORY_TRAVELNEED_TYPE,\n          count: 0,\n          oldCount: 0\n        });\n        travelNeedItems.pushObject(travelNeedItem);\n        this.setMinMaxTravelNeedCount(travelNeedItem);\n      }\n\n      const wheelchairTravelNeedItem = travelNeedItems.find(item => item.type === _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE);\n\n      if (Ember.isNone(wheelchairTravelNeedItem)) {\n        const travelNeedItem = TravelNeedItem.create({\n          type: _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE,\n          count: 0,\n          oldCount: 0\n        });\n        travelNeedItems.pushObject(travelNeedItem);\n        this.setMinMaxTravelNeedCount(travelNeedItem);\n      }\n\n      this.set('localTravelNeedItems', travelNeedItems);\n    },\n\n    addTravelNeedItem(type) {\n      const travelNeedItems = this.get('travelNeedItems') || [];\n      const travelNeedItem = TravelNeedItem.create({\n        type: type,\n        count: 0,\n        oldCount: 0\n      });\n      travelNeedItems.pushObject(travelNeedItem);\n      this.setMinMaxTravelNeedCount(travelNeedItem);\n      return travelNeedItem;\n    },\n\n    actions: {\n      onTravelNeedChange(travelNeed, event) {\n        const value = event.currentTarget.value ? parseInt(event.currentTarget.value, 10) : null;\n        const minCount = travelNeed.get('minCount');\n        const maxCount = travelNeed.get('maxCount');\n\n        if (Ember.isNone(value)) {\n          travelNeed.set('count', value);\n        } else if (value > maxCount) {\n          travelNeed.set('count', maxCount);\n        } else if (value < minCount) {\n          travelNeed.set('count', minCount);\n        } else travelNeed.set('count', value);\n\n        const count = travelNeed.get('count');\n        event.currentTarget.value = count;\n        const stopPoint = this.get('stopPoint');\n\n        if (stopPoint) {\n          const ambulatoryTravelNeed = this.get('ambulatoryTravelNeed');\n          const wheelchairTravelNeed = this.get('wheelchairTravelNeed');\n          const ambNeedCount = Ember.isNone(ambulatoryTravelNeed.count) ? 0 : ambulatoryTravelNeed.count;\n          const wcNeedCount = Ember.isNone(wheelchairTravelNeed.count) ? 0 : wheelchairTravelNeed.count;\n          let customTravelNeeds = null;\n\n          if (ambNeedCount > 0 || wcNeedCount > 0) {\n            customTravelNeeds = _lodash.default.cloneDeep(this.get('stopPoint.trip.travelNeedCounts'));\n            customTravelNeeds.ambulatory = ambNeedCount;\n            customTravelNeeds.wheelchair = wcNeedCount;\n          }\n\n          this.getVehicleCapacityAvailable(customTravelNeeds);\n        }\n\n        const origTravelNeed = this.travelNeedItems.find(tn => tn.type === travelNeed.type);\n\n        if (origTravelNeed) {\n          origTravelNeed.set('count', count);\n        }\n      },\n\n      onCompanionChange(event) {\n        const value = event.currentTarget.value ? parseInt(event.currentTarget.value, 10) : null;\n        const minCount = this.get('minCompanionCount');\n        const maxCount = this.get('maxCompanionCount');\n\n        if (Ember.isNone(value)) {\n          this.set('companionCount', value);\n        } else if (value > maxCount) {\n          this.set('companionCount', maxCount);\n        } else if (value < minCount) {\n          this.set('companionCount', minCount);\n        } else this.set('companionCount', value);\n\n        const companionCount = this.get('companionCount');\n        this.companionChanged(companionCount);\n        event.currentTarget.value = companionCount;\n      },\n\n      onPCAToggle(event) {\n        this.set('pcaCount', event.target.checked ? 1 : 0);\n      },\n\n      onServiceAnimalToggle(event) {\n        this.set('serviceAnimalCount', event.target.checked ? 1 : 0);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/travel-needs-picker/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"WWzwdWJV\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"travelNeed\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"formattedTravelNeedItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"travel-needs-row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"travel-needs-row-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"notEnoughTravelNeeds\\\"]],[27,\\\"or\\\",[[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"ambulatory\\\"],null],[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"wheelchair\\\"],null]],null]],null],\\\"is-not-enough\\\"],null]]]],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9 p-0 ml-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",true,[23,[\\\"travelNeedOptions\\\"]],false,[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],\\\"travelNeedOption\\\"],null]],null],\\\"Travel Needs\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedChange\\\",[22,2,[]],[23,[\\\"riderIndex\\\"]],[23,[\\\"index\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 ml-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[12,\\\"min\\\",[22,2,[\\\"minCount\\\"]]],[12,\\\"max\\\",[22,2,[\\\"maxCount\\\"]]],[12,\\\"disabled\\\",[22,2,[\\\"isEditable\\\"]]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],\\\"count\\\"],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedChange\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"available-capacity-group\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"ambulatory\\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-cap\\\"],[9],[0,\\\"Available Capacity:\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"capacityTaskRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-value\\\"],[9],[0,\\\"...\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-value\\\"],[9],[1,[23,[\\\"currentCapacity\\\",\\\"ambulatory\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,2,[\\\"type\\\"]],\\\"wheelchair\\\"],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-cap\\\"],[9],[0,\\\"Available Capacity:\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"capacityTaskRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-value\\\"],[9],[0,\\\"...\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-value\\\"],[9],[1,[23,[\\\"currentCapacity\\\",\\\"wheelchair\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"companionExist\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"travel-needs-row\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"travel-needs-row-group\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-9 p-0 ml-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",true,[23,[\\\"travelNeedOptions\\\"]],false,[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"companionTravelNeed\\\"]],\\\"travelNeedOption\\\"],null]],null],\\\"Travel Needs\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedChange\\\",[23,[\\\"companionTravelNeed\\\"]],[23,[\\\"riderIndex\\\"]],[23,[\\\"index\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,1,[\\\"label\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 p-0 ml-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"form-control countInput\\\"],[12,\\\"min\\\",[23,[\\\"companionTravelNeed\\\",\\\"minCount\\\"]]],[12,\\\"max\\\",[23,[\\\"companionTravelNeed\\\",\\\"maxCount\\\"]]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"companionTravelNeed\\\"]],\\\"count\\\"],null]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCompanionChange\\\"],null]],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"available-capacity-group\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-cap\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"travel-needs-row-value\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/pick/travel-needs-picker/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/ui/component\", [\"exports\", \"adept-iq/utils/unwrapProxy\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _unwrapProxy, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INTERVAL_DELAY = 60000;\n  const TravelNeedItem = Ember.Object.extend({\n    type: null,\n    count: null\n  });\n\n  var _default = Ember.Component.extend({\n    classNames: ['perform-stop-drawer'],\n    timeFormat: _environment.default.dateTimeFormat.dateTimeFlatPickr,\n    // pass in data to component\n    pcaCount: null,\n    serviceAnimalCount: null,\n    companionCount: null,\n    shouldArrive: true,\n    amount: 0,\n    // pass in data to component\n    stopPoint: null,\n    travelNeedOptions: null,\n    travelNeedItems: null,\n    errorText: null,\n    paymentTypeOptions: null,\n    selectedPaymentType: null,\n    minCompanionCount: 0,\n    maxCompanionCount: 20,\n    arrive: false,\n    depart: false,\n    isArrived: null,\n    isNextDisabled: null,\n    maxDate: null,\n    origAmount: 0.0,\n    origCompanionCount: 0,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // pass in perform-all panel\n    previousStop: null,\n    editAPI: null,\n    currentState: null,\n    // progress interval every minute\n    _interval: null,\n    trip: Ember.computed.readOnly('stopPoint.trip'),\n    dispatchRoute: Ember.computed.readOnly('stopPoint.dispatchRoute'),\n    route: Ember.computed.readOnly('dispatchRoute.route'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    vehicle: Ember.computed.readOnly('routeVehicleDriver.vehicle'),\n    address: Ember.computed.readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    isArriveDisabled: Ember.computed.or('depart', 'isArrived'),\n    routeVehicleDriver: Ember.computed.readOnly('dispatchRoute.latestRouteVehicleDriver'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    lastPerformedStop: Ember.computed.readOnly('dispatchRoute.lastPerformedStop'),\n    // routeVehicleDriver: computed.readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    minTime: Ember.computed('lastPerformedStop.{arrive,depart,actualArriveTime,actualDepartTime,routeBreak.actualArriveTime,routeBreak.actualDepartTime}', 'previousStop.actualDepartTime', function () {\n      const prevDepartTime = this.get('previousStop.actualDepartTime');\n      if (prevDepartTime) return prevDepartTime;\n      const prevStop = this.get('lastPerformedStop');\n      let minTime = this.get('dispatchRoute.computedStartTime') || this.get('dispatchRoute.plannedStartTime');\n      if (Ember.isEmpty(prevStop)) return minTime;\n      const actualArriveTime = prevStop.get('actualArriveTime'); // takes into account break stops\n\n      const actualDepartTime = prevStop.get('actualDepartTime'); // takes into account break stops\n\n      const stopArriveTime = this.get('actualArriveTime');\n      if (actualArriveTime) minTime = actualArriveTime;\n      if (actualDepartTime) minTime = actualDepartTime;\n      if (minTime > stopArriveTime) minTime = stopArriveTime;\n      return minTime ? (0, _moment.default)(minTime).startOf('minute').toDate() : null; // we need something to separate stops\n    }),\n    unusedTravelNeedOptions: Ember.computed('travelNeedOptions', 'travelNeedItems.@each.type', function () {\n      const travelNeedOptions = this.get('travelNeedOptions') || [];\n      const travelNeedItems = this.get('travelNeedItems') || [];\n\n      if (travelNeedItems.length > 0) {\n        const arr = this.get('travelNeedItems')[0];\n        const type = this.get('travelNeedItems')[0].type;\n        const objectCount = (0, _unwrapProxy.unwrapProxy)(this.get('vehicle').get('capacityCounts')[type]);\n        arr.set('maxCount', objectCount);\n      }\n\n      const usedTravelNeedTypes = travelNeedItems.mapBy('type');\n      return travelNeedOptions.reject(_ref => {\n        let {\n          type\n        } = _ref;\n        return usedTravelNeedTypes.includes(type);\n      });\n    }),\n\n    setMinMaxTravelNeedCount(travelNeedItem) {\n      const type = travelNeedItem.get('type'); // ambulatory AP\n\n      const objectCount = (0, _unwrapProxy.unwrapProxy)(this.get('vehicle').get('capacityCounts')[type]); // create min count for each travel need\n\n      travelNeedItem.set('minCount', 0); // else travelNeedItem.set('minCount', count - 1);\n      // create max count for each travel need\n\n      travelNeedItem.set('maxCount', objectCount);\n    },\n\n    unperformedIQStops: Ember.computed('dispatchRoute', 'stopPoint', function () {\n      const dispatchRoute = this.get('dispatchRoute');\n      const stopPoint = this.get('stopPoint');\n      const unperformedIQStops = dispatchRoute.findUnperformedStopsInSequence(stopPoint);\n      return unperformedIQStops;\n    }),\n    outOfOrderPerform: Ember.computed('isBulkPeform', 'unperformedIQStops.length', function () {\n      return !this.get('isBulkPeform') && this.get('unperformedIQStops.length') > 1;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const max = new Date();\n      max.setMinutes(max.getMinutes() + 1);\n      this.set('maxDate', max); // create a maxDate ticker that progresses by a minute\n\n      this._interval = setInterval(() => {\n        Ember.run.schedule('afterRender', () => {\n          if (this.get('isDestroyed')) return;\n          this.set('maxDate', max);\n        });\n      }, INTERVAL_DELAY);\n      const setStopUIReference = this.get('setStopUIReference');\n\n      if (setStopUIReference) {\n        setStopUIReference(this);\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.loadCurrentState();\n      const editAPI = this.get('editAPI');\n      const refreshTravelNeedTask = this.get('refreshTravelNeedTask');\n      Ember.run.next(() => {\n        if (editAPI) {\n          editAPI.setProperties({\n            refreshTravelNeedTask: refreshTravelNeedTask\n          });\n        }\n      });\n    },\n\n    destroy() {\n      clearInterval(this._interval);\n      this._interval = null;\n    },\n\n    backUpCurrentState() {\n      const {\n        stopPoint,\n        driverBreak,\n        travelNeedOptions,\n        travelNeedItems,\n        arrive,\n        depart,\n        isArrived,\n        selectedPaymentType,\n        amount,\n        pcaCount,\n        serviceAnimalCount,\n        companionCount,\n        isNextDisabled,\n        actualArriveTime,\n        actualDepartTime\n      } = this;\n      const odometerInMiles = stopPoint.get('odometerInMiles');\n      const currentState = {\n        driverBreak,\n        travelNeedOptions,\n        travelNeedItems,\n        arrive,\n        depart,\n        isArrived,\n        odometerInMiles,\n        selectedPaymentType,\n        amount,\n        pcaCount,\n        serviceAnimalCount,\n        companionCount,\n        isNextDisabled,\n        actualArriveTime,\n        actualDepartTime\n      };\n      this.set('currentState', currentState);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n      const stopPoint = this.get('stopPoint');\n\n      if (currentState) {\n        const {\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          odometerInMiles,\n          selectedPaymentType,\n          amount,\n          pcaCount,\n          serviceAnimalCount,\n          companionCount,\n          isNextDisabled,\n          actualArriveTime,\n          actualDepartTime\n        } = currentState;\n        stopPoint.set('odometerInMiles', odometerInMiles);\n        this.setProperties({\n          driverBreak,\n          travelNeedOptions,\n          travelNeedItems,\n          arrive,\n          depart,\n          isArrived,\n          odometerInMiles,\n          selectedPaymentType,\n          amount,\n          pcaCount,\n          serviceAnimalCount,\n          companionCount,\n          isNextDisabled,\n          actualArriveTime,\n          actualDepartTime\n        });\n        this.set('currentState', null);\n      }\n    },\n\n    actions: {\n      deleteTravelNeedItem(travelNeedItem) {\n        this.get('travelNeedItems').removeObject(travelNeedItem);\n      },\n\n      addTravelNeedItem() {\n        const travelNeedItems = this.get('travelNeedItems');\n        const unusedTravelNeedOptions = this.get('unusedTravelNeedOptions');\n        if (Ember.isEmpty(unusedTravelNeedOptions)) return;\n        const travelNeedItem = TravelNeedItem.create({\n          type: unusedTravelNeedOptions[0].type,\n          count: 0\n        });\n        travelNeedItems.pushObject(travelNeedItem);\n        this.setMinMaxTravelNeedCount(travelNeedItem);\n        this.getValueFromchildTravelNeeds(travelNeedItems);\n      },\n\n      onTravelNeedChange(travelNeed, event) {\n        const value = event.currentTarget.value ? parseInt(event.currentTarget.value, 10) : null;\n        const tavelNeedType = travelNeed.get('type');\n        const objectCount = (0, _unwrapProxy.unwrapProxy)(this.get('vehicle').get('capacityCounts'))[tavelNeedType];\n        const minCount = travelNeed.get('minCount');\n        let maxCount;\n        maxCount = objectCount;\n\n        if (!objectCount) {\n          maxCount = 0;\n        }\n\n        if (Ember.isNone(value)) {\n          travelNeed.set('count', objectCount);\n        } else if (value > maxCount) {\n          travelNeed.set('count', objectCount);\n        } else if (value < minCount) {\n          travelNeed.set('count', minCount);\n        } else travelNeed.set('count', value);\n\n        if (!objectCount) {\n          travelNeed.set('count', 0);\n          travelNeed.set('maxCount', 0);\n          event.currentTarget.value = 0;\n        }\n\n        event.currentTarget.value = objectCount;\n      },\n\n      onCompanionChange(event) {\n        const value = event.currentTarget.value ? parseInt(event.currentTarget.value, 10) : null;\n        const minCount = this.get('minCompanionCount');\n        const objectCount = (0, _unwrapProxy.unwrapProxy)(this.get('vehicle').get('capacityCounts').ambulatory);\n        const maxCount = objectCount;\n\n        if (Ember.isNone(value)) {\n          this.set('companionCount', value);\n        } else if (value > maxCount) {\n          this.set('companionCount', maxCount);\n        } else if (value < minCount) {\n          this.set('companionCount', minCount);\n        } else this.set('companionCount', value);\n\n        const companionCount = this.get('companionCount');\n        event.currentTarget.value = companionCount;\n      },\n\n      selectTravelNeedTypeOption(travelNeedItem, option) {\n        travelNeedItem.set('type', option.type);\n        const objectCount = (0, _unwrapProxy.unwrapProxy)(this.get('vehicle').get('capacityCounts')[option.type]);\n        travelNeedItem.set('count', 0);\n        travelNeedItem.set('maxCount', objectCount);\n      },\n\n      onClickDepart(depart) {\n        if (depart) {\n          this.set('arrive', depart);\n          this.set('depart', depart);\n          this.set('isNextDisabled', false);\n          return;\n        }\n\n        this.set('depart', depart);\n        this.set('isNextDisabled', true);\n      },\n\n      onActualPickTimeChange(dateValues) {\n        const momentTime = (0, _moment.default)(dateValues[0]);\n        this.set('actualDepartTime', momentTime.startOf('minute').toISOString());\n      },\n\n      onActualArriveTimeChange(dateValues) {\n        const momentTime = (0, _moment.default)(dateValues[0]);\n        const pickTime = this.get('actualDepartTime');\n        this.set('actualArriveTime', momentTime.startOf('minute').toISOString());\n\n        if ((0, _moment.default)(pickTime).isBefore(momentTime, 'minutes')) {\n          this.send('onActualPickTimeChange', dateValues);\n        }\n      },\n\n      onAmountChange(amount) {\n        this.set('amount', amount);\n      },\n\n      companionChanged(companionCount) {\n        const origAmount = this.get('origAmount') ? this.get('origAmount') : 0.0;\n        const diffCompanionCount = companionCount - this.get('origCompanionCount');\n        this.set('amount', origAmount + diffCompanionCount * 2.75);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"B2GbprvC\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"riderPhoneNumbers\\\",\\\"riderPhoneNumber\\\",\\\"i\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"outOfOrderPerform\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"summary\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[0,\\\"Out of Order Perform\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"p\\\"],[9],[0,\\\"All unperformed stops prior to this one will be automatically soft-performed.\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template.hbs' @ L11:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Pick Stop\\\",true]],{\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driver\\\",\\\"driverId\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"rider\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[23,[\\\"rider\\\",\\\"riderPhoneNumbers\\\",\\\"length\\\"]],1],null]],null,{\\\"statements\\\":[[4,\\\"with\\\",[[23,[\\\"rider\\\",\\\"riderPhoneNumbers\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,2,[]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"\\\\n      Phone Number (\\\"],[1,[27,\\\"add\\\",[[22,4,[]],1],null],false],[0,\\\")\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,3,[\\\"formattedPhoneNumber\\\"]]],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"rider\\\",\\\"riderPhoneNumber\\\",\\\"formattedPhoneNumber\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promised Pick Time\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Location\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"address\\\",\\\"fullAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"notes\\\"]]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template.hbs' @ L63:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Performed\\\",true]],{\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"arrive\\\"],[11,\\\"name\\\",\\\"arrive\\\"],[12,\\\"checked\\\",[21,\\\"arrive\\\"]],[12,\\\"disabled\\\",[21,\\\"isArriveDisabled\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"arrive\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Arrived\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Arrival Time \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"arrivalTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Arrival Time \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],true,[23,[\\\"minTime\\\"]],[23,[\\\"maxDate\\\"]],[23,[\\\"timeFormat\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"isArrived\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualArriveTimeChange\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"depart\\\"],[11,\\\"name\\\",\\\"depart\\\"],[12,\\\"checked\\\",[21,\\\"depart\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickDepart\\\"],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Picked Up\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Pick Time \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"departTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Pick Time \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n      \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]],[23,[\\\"actualArriveTime\\\"]],[23,[\\\"maxDate\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"actualDepartTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onActualPickTimeChange\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template.hbs' @ L140:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Travel Needs\\\",true]],{\\\"statements\\\":[[1,[27,\\\"side-drawer/perform-stop/pick/travel-needs-picker\\\",null,[[\\\"stopPoint\\\",\\\"travelNeedOptions\\\",\\\"travelNeedItems\\\",\\\"minCompanionCount\\\",\\\"maxCompanionCount\\\",\\\"pcaCount\\\",\\\"serviceAnimalCount\\\",\\\"companionCount\\\",\\\"companionChange\\\",\\\"companionChanged\\\",\\\"availableCapacity\\\",\\\"capacityTaskRunning\\\",\\\"getVehicleCapacityAvailable\\\"],[[23,[\\\"stopPoint\\\"]],[23,[\\\"travelNeedOptions\\\"]],[23,[\\\"travelNeedItems\\\"]],[23,[\\\"minCompanionCount\\\"]],[23,[\\\"maxCompanionCount\\\"]],[23,[\\\"pcaCount\\\"]],[23,[\\\"serviceAnimalCount\\\"]],[23,[\\\"companionCount\\\"]],[23,[\\\"companionChange\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"companionChanged\\\"],null],[23,[\\\"availableCapacity\\\"]],[23,[\\\"capacityTaskRunning\\\"]],[23,[\\\"getVehicleCapacityAvailable\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[23,[\\\"drawer\\\",\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template.hbs' @ L159:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Fare\\\",true]],{\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Payment Type\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"onchange\\\",\\\"selected\\\"],[[23,[\\\"paymentTypeOptions\\\"]],false,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedPaymentType\\\"]]],null]],null],[23,[\\\"selectedPaymentType\\\"]]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[9],[0,\\\"Amount\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"number\\\",[23,[\\\"amount\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"amount\\\"]]],null]],null]]]],false],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/perform-stop/pick/ui/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-role/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/config/api-urls\", \"adept-iq/config/mapped-permIds\"], function (_exports, _emberConcurrency, _lodash, _apiUrls, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['compose-role-side-drawer'],\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    collapseState: null,\n    onCloseClick: null,\n    record: null,\n    isSearchEnabled: false,\n    searchText: '',\n    canSearch: true,\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    inputRoles: Ember.computed.readOnly('stackFrame.options.roles'),\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n    roleData: Ember.computed.readOnly('stackFrame.options.roleData'),\n    roles: Ember.computed('inputRoles', function () {\n      const inputRoles = this.get('inputRoles');\n\n      if (inputRoles.length === 0) {\n        return [Ember.Object.create({\n          roleName: '',\n          displayName: '',\n          status: 'active',\n          permissionList: [],\n          isNew: true\n        })];\n      }\n\n      return inputRoles.map(r => {\n        return Ember.Object.create({\n          roleName: r.get('roleName'),\n          displayName: r.get('displayName'),\n          status: r.get('status'),\n          permissionList: r.get('permissionList'),\n          isNew: false\n        });\n      });\n    }),\n    canSave: Ember.computed('isSaveEnable', function () {\n      const isSaveEnable = this.get('isSaveEnable');\n      return isSaveEnable;\n    }),\n    canUndo: Ember.computed('isUndoEnable', function () {\n      const isUndoEnable = this.get('isUndoEnable');\n      return isUndoEnable;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('collapseState', {});\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('systemConfig').set('sideDrawerPreventCollapse', true);\n      this.refresh();\n    },\n\n    didDestroyElement() {\n      this.get('systemConfig').set('sideDrawerPreventCollapse', null);\n    },\n\n    initSections() {\n      const sections = this.preparePermissionSections();\n      this.set('sections', sections);\n    },\n\n    isForbidden() {\n      const record = this.get('roles.firstObject');\n      const currentPerms = record.get('permissionList').sort((a, b) => a - b);\n      const removedPermList = Object.entries(record.get('permissionHash')).map(_ref => {\n        let [key, value] = _ref;\n\n        if (!value) {\n          return parseInt(key, 10);\n        }\n\n        return null;\n      }).filter(val => Ember.isPresent(val)).sort((a, b) => a - b);\n      const removedPermissions = (0, _lodash.intersection)(currentPerms, removedPermList) || [];\n      const roleName = record.get('roleName') ? record.get('roleName') : record.get('displayName').replace(/\\s+/, '');\n\n      if (removedPermissions.includes(_mappedPermIds.default.accessPermissionsWorkspace)) {\n        // The Permissions workspace can NOT be removed for the admin role. If user tries to edit the Admin role and remove the View Permissions Workspace, a black popup is displayed\n        if (roleName === 'admin') {\n          return true;\n        }\n      }\n\n      return false;\n    },\n\n    isValid() {\n      let isValid = true;\n      const roles = this.get('roles');\n      const isNewRole = roles[0].get('isNew');\n      const alphanumericRegex = /^[a-z\\d\\s]+$/i;\n      const enteredRoleName = roles[0].displayName.trim();\n      Ember.set(this, 'errorMessages', []);\n\n      if (_lodash.default.isEmpty(enteredRoleName)) {\n        isValid = false;\n        this.errorMessages.push('* Role name is empty');\n        return;\n      }\n\n      if (!alphanumericRegex.test(enteredRoleName) || enteredRoleName.length > 32) {\n        isValid = false;\n        this.errorMessages.push('* Role Name can only have alphanumeric characters i.e. (a-z, A-Z, 0-9) and max length up to 32 characters and can not be  empty.');\n        return;\n      }\n\n      this.get('roleData').map(data => {\n        if (roles[0].displayName.toLowerCase() === data.displayName.toLowerCase() && isNewRole) {\n          isValid = false;\n          this.errorMessages.push('* Duplicated role name');\n          return;\n        } else if (roles[0].displayName.toLowerCase() === data.displayName.toLowerCase() && data.id !== roles[0].roleName) {\n          isValid = false;\n          this.errorMessages.push('* Duplicated role name');\n          return;\n        }\n      });\n      return isValid;\n    },\n\n    updateUndoStatus(status) {\n      let canSave = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      this.set('isUndoEnable', status);\n\n      if (canSave && status) {\n        this.set('isSaveEnable', true);\n      } else if (!status) {\n        this.set('isSaveEnable', false);\n      }\n    },\n\n    searchPermissions(value) {\n      const searchText = this.get('searchText');\n      const regex = new RegExp(searchText, 'gi');\n      const category = value.category + ' Permissions';\n      let found = false;\n      const foundDescription = value.description.replace(regex, function (str) {\n        found = true;\n        return `<span class=\"search-highlighted\">${str}</span>`;\n      });\n      const foundCategory = category.replace(regex, function (str) {\n        found = true;\n        return `<span class=\"search-highlighted\">${str}</span>`;\n      });\n      return found ? {\n        highlightedDescription: foundDescription,\n        highlightedCategory: foundCategory\n      } : null;\n    },\n\n    createPermissionSection(permissions) {\n      if (permissions.length === 0) return;\n      const permission = permissions[0];\n      const noOfCheckedPermissions = [];\n      const searchedPermissions = [];\n      const searchText = this.get('searchText');\n      const isSearchEnabled = this.get('isSearchEnabled');\n      const isSearchEffective = isSearchEnabled && Ember.isPresent(searchText) && searchText.length >= 3;\n      permissions.map(value => {\n        if (permission && permission.category.toLowerCase() === value.category.toLowerCase()) {\n          value.set('highlightedDescription', value.description);\n          value.set('highlightedCategory', value.category + ' Permissions');\n\n          if (isSearchEffective) {\n            const searchResult = this.searchPermissions(value);\n\n            if (!_lodash.default.isEmpty(searchResult)) {\n              if (!_lodash.default.isEmpty(searchResult.highlightedCategory)) value.set('highlightedCategory', searchResult.highlightedCategory);\n              if (!_lodash.default.isEmpty(searchResult.highlightedDescription)) value.set('highlightedDescription', searchResult.highlightedDescription);\n              searchedPermissions.push(value);\n            }\n          } else {\n            searchedPermissions.push(value);\n          }\n\n          if (value.state) {\n            noOfCheckedPermissions.push(value);\n          }\n        }\n      });\n      return searchedPermissions.length > 0 ? {\n        title: Ember.String.capitalize(`${permission.highlightedCategory} (${noOfCheckedPermissions.length}/${permissions.length})`),\n        category: permission.category,\n        fields: [{\n          id: `${permission.category}-Permissions`,\n          type: 'permission-section',\n          valuePath: 'permissionHash',\n          modelName: 'sso-permission',\n          isLabel: false,\n          extra: {\n            category: `${permission.category}`,\n            groupedPermissions: searchedPermissions\n          }\n        }]\n      } : null;\n    },\n\n    preparePermissionSections() {\n      const groupedPermissions = this.get('groupedPermissions');\n      const permKeys = (0, _lodash.keys)(groupedPermissions) || [];\n      this.set('categories', permKeys);\n      const sections = permKeys.map(key => {\n        return this.createPermissionSection(groupedPermissions[key]);\n      }).filter(e => {\n        return e;\n      });\n      return sections;\n    },\n\n    reconfigurePermissionHash(role, permissions) {\n      const permissionList = role.get('permissionList');\n      const permHash = permissions.reduce((acu, perm) => {\n        acu[perm.parsedId] = false;\n        return acu;\n      }, {});\n      permissionList.forEach(id => {\n        permHash[id] = true;\n      });\n      role.set('permissionHash', permHash);\n    },\n\n    reconfigurePermissionCheck(role, permissions) {\n      const permissionList = role.get('permissionList');\n      permissions.map(data => {\n        permissionList.map(item => {\n          if (item === data.parsedId) {\n            data.state = true;\n          }\n        });\n      });\n    },\n\n    refresh() {\n      this.get('refreshTask').perform();\n    },\n\n    reset() {},\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      yield this.get('refreshPermissionTask').perform();\n    }),\n    refreshPermissionTask: (0, _emberConcurrency.task)(function* () {\n      const roles = this.get('roles') || [];\n      const permissions = yield this.get('store').findAll('sso-permission');\n      permissions.map(data => {\n        if (data && data.state) {\n          data.set('state', false);\n        }\n      });\n      const groupedPermissions = (0, _lodash.groupBy)(permissions.toArray(), function (value) {\n        return value.category.toLowerCase();\n      });\n      this.set('permissions', permissions);\n      this.set('groupedPermissions', groupedPermissions);\n      roles.forEach(role => {\n        this.reconfigurePermissionHash(role, permissions);\n        this.reconfigurePermissionCheck(role, permissions);\n        const displayRoleName = role.get('displayName');\n        this.set('displayRoleName', displayRoleName);\n      });\n      this.initSections();\n    }),\n    refreshGroupedPermTask: (0, _emberConcurrency.task)(function* () {\n      const permissions = yield this.get('store').findAll('sso-permission');\n      const groupedPermissions = (0, _lodash.groupBy)(permissions.toArray(), function (value) {\n        return value.category.toLowerCase();\n      });\n      this.set('groupedPermissions', groupedPermissions);\n      this.initSections();\n    }),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      // using custom api call because sso api is non standard\n      // and in-consistent.\n      const ajax = this.get('ajax');\n      const session = this.get('session');\n      const roles = this.get('roles') || [];\n      const notifications = this.get('notifications');\n      const rolePermAssociations = yield ajax.request(`${_apiUrls.API.ssoService.host}/role-permission`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      });\n      yield Promise.all(roles.map(async record => {\n        let currentPerms = record.get('permissionList');\n        const displayName = record.get('displayName');\n        const roleName = record.get('roleName') ? record.get('roleName') : record.get('displayName').replace(/\\s+/, '');\n        const rolePermAssocByRole = record.get('isNew') ? [] : rolePermAssociations.filter(rolePerm => rolePerm.roleId === roleName);\n        currentPerms = currentPerms.sort((a, b) => a - b); // create a new role\n\n        if (record.get('isNew')) {\n          const json = {\n            roleName: roleName,\n            status: 'active',\n            displayName\n          };\n          await ajax.post(`${_apiUrls.API.ssoService.host}/role`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: json\n          }).catch(e => {\n            notifications.warning(`Unable to Create Role ${displayName}`);\n            return Promise.reject(e); // failed to create role, won't be able to assign permissions\n\n            console.error(e); // eslint-disable-line\n          });\n        } // otherwise patch the role\n        else {\n          const json = {\n            displayName,\n            status: 'active'\n          };\n          await ajax.patch(`${_apiUrls.API.ssoService.host}/role/${roleName}`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: json\n          }).catch(e => {\n            notifications.warning(`Unable to Update Role ${displayName}`);\n            console.error(e); // eslint-disable-line\n          });\n        }\n\n        const newPermList = Object.entries(record.get('permissionHash')).map(_ref2 => {\n          let [key, value] = _ref2;\n\n          if (value) {\n            return parseInt(key, 10);\n          }\n\n          return null;\n        }).filter(val => Ember.isPresent(val)).sort((a, b) => a - b);\n        const removedPermList = Object.entries(record.get('permissionHash')).map(_ref3 => {\n          let [key, value] = _ref3;\n\n          if (!value) {\n            return parseInt(key, 10);\n          }\n\n          return null;\n        }).filter(val => Ember.isPresent(val)).sort((a, b) => a - b); // remove any permissions\n\n        const removedPermissions = (0, _lodash.intersection)(currentPerms, removedPermList) || [];\n        await removedPermissions.reduce((acu, permId) => {\n          const removedPermAssocId = rolePermAssocByRole.find(rolePerm => rolePerm.permissionId === permId);\n          return acu.then(() => ajax.del(`${_apiUrls.API.ssoService.host}/role-permission/${removedPermAssocId.id}`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          }).catch(e => {\n            notifications.warning(`Unable to Remove Permission ${permId}`);\n            console.error(e); // eslint-disable-line\n          }));\n        }, Promise.resolve()); // add any new permissions\n\n        const newPermissions = (0, _lodash.difference)(newPermList, currentPerms) || [];\n        return newPermissions.reduce((acu, permId) => {\n          const json = {\n            roleId: roleName,\n            permissionId: permId\n          };\n          return acu.then(() => ajax.post(`${_apiUrls.API.ssoService.host}/role-permission`, {\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: json\n          }).catch(e => {\n            notifications.warning(`Unable to Save New Permission ${permId}`);\n            console.error(e); // eslint-disable-line\n          }));\n        }, Promise.resolve());\n      })).then(async () => {// await this.get('store').findAll('perm-sso-role');\n        // await this.get('workspaceContext').get('reloadWorkspace').perform();\n        // return this.get('activeContext.topActiveContext').refreshTableContent.perform(['perm-sso-role']);\n      }).catch(e => {\n        console.error(e); // eslint-disable-line\n      });\n    }),\n\n    showForbiddenNotice() {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Permissions',\n        tip: 'Removing access to Permissions workspace for the Administrator role is not permitted.',\n        hasOverlay: true,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    showToolTip() {\n      Ember.set(this, 'errorMessages', []);\n      const tooltip = this.get('tooltip');\n      const role = this.get('roles')[0];\n      const isNewRole = role.get('isNew');\n      const tip = isNewRole ? 'Do you want to add a new role?' : 'Do you want to commit the changes?';\n      const successBanner = isNewRole ? 'ADDED ROLE SUCCESSFULLY' : 'EDITED ROLE SUCCESSFULLY';\n      const warningBanner = isNewRole ? 'FAILED TO ADD ROLE' : 'FAILED TO UPDATE ROLE';\n      tooltip.pushConfirmation({\n        title: isNewRole ? 'Add Role' : 'Edit Role',\n        tip,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveTask').perform().then(() => {\n            this.get('notifications').success(`${successBanner}`);\n          }).catch(() => {\n            this.get('notifications').warning(`${warningBanner}`);\n          }).finally(() => {\n            if (this.callBack) {\n              this.callBack(true);\n            }\n\n            this.get('workspace').popState('permAddRole');\n            return tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        }\n      });\n    },\n\n    focusSearchInput() {\n      Ember.$('.role-search-input').focus();\n    },\n\n    actions: {\n      onValueChange(record, valuePath, options) {\n        const value = options;\n        record.set(valuePath, value);\n        this.updateUndoStatus(true);\n      },\n\n      onPermChange(record, valuePath, options) {\n        const permHash = record.get(valuePath);\n        const {\n          id,\n          state\n        } = options;\n        Ember.set(permHash, id, state);\n        record.set(valuePath, permHash);\n        this.get('refreshGroupedPermTask').perform();\n        this.updateUndoStatus(true); // this.initSections();\n      },\n\n      onSaveRoleButtonClick() {\n        if (this.isForbidden()) {\n          this.showForbiddenNotice();\n        } else if (this.isValid()) {\n          this.showToolTip();\n        }\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(false);\n        }\n      },\n\n      onUndoClick() {\n        const roles = this.get('roles') || [];\n        roles.forEach(role => {\n          this.reconfigurePermissionHash(role, this.permissions);\n          role.set('displayName', this.displayRoleName);\n        });\n        this.refresh();\n        this.set('errorMessages', []);\n        this.updateUndoStatus(false);\n        this.set('searchText', '');\n        this.initSections();\n      },\n\n      onCloseClick() {\n        this.onCloseClick();\n      },\n\n      onSearchClick() {\n        const isSearchEnabled = this.get('isSearchEnabled');\n        this.set('searchText', '');\n\n        if (isSearchEnabled) {\n          this.set('isSearchEnabled', false);\n          this.set('sections', this.preparePermissionSections());\n          return;\n        }\n\n        this.set('isSearchEnabled', true);\n        Ember.run.scheduleOnce('afterRender', this, 'focusSearchInput');\n      },\n\n      onSearchInput(value) {\n        const isSearchEnabled = this.get('isSearchEnabled');\n        const searchedText = this.get('searchText') + value;\n        this.updateUndoStatus(false, false);\n\n        if (isSearchEnabled) {\n          this.set('searchText', value);\n          this.set('sections', this.preparePermissionSections());\n        }\n\n        if (!_lodash.default.isEmpty(searchedText)) this.updateUndoStatus(true, false);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-role/permission-section/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['permission-section'],\n    record: null,\n    extra: null,\n    disabled: false,\n    toggleAll: false,\n    valuePath: null,\n    store: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    category: Ember.computed.readOnly('extra.category'),\n    permissions: Ember.computed.readOnly('extra.groupedPermissions'),\n    rolePermHash: Ember.computed.readOnly('record.permissionHash'),\n    actions: {\n      onCheckboxChange(record, valuePath) {\n        const onChange = this.get('onChange');\n        const switchState = !record.get('state');\n        const id = parseInt(record.get('id'), 10);\n        const options = {\n          id,\n          state: switchState\n        };\n        onChange(valuePath, options);\n        record.set('state', switchState);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-role/permission-section/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"HUUo2SHf\",\n    \"block\": \"{\\\"symbols\\\":[\\\"permission\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permissions-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"permissions\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"permission-row\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"cell-label\\\"],[9],[1,[22,1,[\\\"highlightedDescription\\\"]],true],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"checked\\\",\\\"click\\\"],[\\\"permission-input\\\",\\\"checkbox\\\",[27,\\\"get\\\",[[23,[\\\"rolePermHash\\\"]],[22,1,[\\\"parsedId\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxChange\\\",[22,1,[]],[23,[\\\"valuePath\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/permissions-add-role/permission-section/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-role/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"N5Wlig8n\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"role\\\",\\\"section\\\",\\\"field\\\",\\\"error\\\",\\\"role\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/permissions-add-role/template.hbs' @ L2:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"canSearch\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"isSearchEnabled\\\",\\\"onCloseClick\\\",\\\"onSearchClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canUndo\\\"]],[23,[\\\"canSearch\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveRoleButtonClick\\\"],null],[23,[\\\"canSave\\\"]],[23,[\\\"isSearchEnabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSearchClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"role-search-panel\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"role-search-input \\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Search\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/permissions-add-role/template.hbs' @ L20:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"roles\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"span\\\"],[9],[0,\\\"Role Name: \\\"],[1,[22,6,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/permissions-add-role/template.hbs' @ L27:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"roles\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"compose-role-layout\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"     \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errorMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,5,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/permissions-add-role/template.hbs' @ L41:C9) \\\"],null]],[[\\\"isCollapsible\\\"],[true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"role-row pb-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-title mb-0 mr-4\\\"],[9],[0,\\\"\\\\n              Role Name\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/permissions-add-role/text\\\"],null]],[[\\\"record\\\",\\\"value\\\",\\\"valuePath\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[22,2,[]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],\\\"displayName\\\"],null]],null],[27,\\\"readonly\\\",[\\\"displayName\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\",[22,2,[]],\\\"displayName\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"sections\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/permissions-add-role/template.hbs' @ L57:C13) \\\"],null]],[[\\\"title\\\",\\\"collapseState\\\",\\\"isCollapsible\\\"],[[22,3,[\\\"title\\\"]],[27,\\\"get\\\",[[23,[\\\"collapseState\\\"]],[22,3,[\\\"category\\\"]]],null],true]],{\\\"statements\\\":[[4,\\\"each\\\",[[22,3,[\\\"fields\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/permissions-add-role/\\\",[22,4,[\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"value\\\",\\\"valuePath\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[22,2,[]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[22,2,[]],[22,4,[\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[22,4,[\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[22,4,[\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onPermChange\\\",[22,2,[]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"style\\\"],[11,\\\"type\\\",\\\"text/css\\\"],[9],[0,\\\"\\\\n.side-drawer-modal {\\\\n   min-width: 491px !important;;\\\\n}\\\\n.g-side-drawer-sub-header {\\\\n  white-space: nowrap;\\\\n  overflow: hidden;\\\\n}\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/permissions-add-role/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-role/text/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['role-name-input'],\n    value: null,\n    disabled: false,\n\n    filterTextInput(event) {\n      const alphanumeric = /[ A-Za-z0-9]/;\n      var keyChar = String.fromCharCode(event.which || event.keyCode);\n      return alphanumeric.test(keyChar);\n    },\n\n    filterPastedInput(event) {\n      const alphanumeric = /[ A-Za-z0-9]/;\n      if (!event.clipboardData) return false;\n      const char = event.clipboardData.getData('Text');\n      return alphanumeric.test(char);\n    },\n\n    actions: {\n      onInput(value) {\n        this.get('onChange')(value.trim());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-role/text/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"fzB5ayow\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[12,\\\"onpaste\\\",[21,\\\"filterPastedInput\\\"]],[11,\\\"maxlength\\\",\\\"32\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/permissions-add-role/text/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-user/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/mixins/password-validation\", \"adept-iq/mixins/role-provider-validation\"], function (_exports, _emberConcurrency, _passwordValidation, _roleProviderValidation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ACTIVE_STATUS = 'active';\n\n  var _default = Ember.Component.extend(_passwordValidation.default, _roleProviderValidation.default, {\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    onShrinkClick: null,\n    errorMessages: null,\n    userDetails: null,\n    title: 'Select Providers',\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    userRecords: Ember.computed.readOnly('stackFrame.options.userRecords'),\n    hasOneProvider: Ember.computed.lte('providersList.length', 1),\n    isSaveEnabled: Ember.computed.and('userDetails.{firstName,lastName,userName,password}', 'selectedStatus', 'isPasswordValid', 'hasOneSelectedRoles', 'hasOneSelectedProviders'),\n    isUndoEnabled: Ember.computed.or('userDetails.{firstName,lastName,emailId,userName,password}', 'selectedStatus', 'selectedRoles'),\n    canSave: Ember.computed('isSaveEnabled', 'providersTitle', function () {\n      return Ember.get(this, 'isSaveEnabled');\n    }),\n    canUndo: Ember.computed('isUndoEnabled', 'providersTitle', function () {\n      return Ember.get(this, 'isUndoEnabled') || Ember.get(this, 'providersTitle') !== 'Select Providers';\n    }),\n    statusOptions: Ember.computed('selectedStatus', function () {\n      return ['Active', 'Inactive'];\n    }),\n    roleOptions: Ember.computed('selectedRoles', function () {\n      const roles = [];\n      const rolesList = Ember.get(this, 'store').peekAll('perm-sso-role');\n      rolesList.map(role => {\n        if (role.id) {\n          roles.push(role);\n        }\n      });\n      return roles;\n    }),\n    providersTitle: Ember.computed('providersList.@each.isChecked', function () {\n      const providers = this.get('providersList') || [];\n      const checkedProviders = providers.filter(p => p.isChecked);\n\n      if (checkedProviders.length <= 0) {\n        return 'Select Providers';\n      } else if (checkedProviders.length === 1) {\n        return checkedProviders[0].providerName;\n      } else if (checkedProviders.length === providers.length) {\n        return 'All Providers';\n      }\n\n      return 'Multiple';\n    }),\n    visiblePassword: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.resetUserProperties();\n      this.fillProviders();\n      this.setSideDrawerWidth('490px');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('systemConfig').set('sideDrawerPreventCollapse', true);\n    },\n\n    didDestroyElement() {\n      this.get('systemConfig').set('sideDrawerPreventCollapse', null);\n    },\n\n    resetUserProperties() {\n      this.setProperties({\n        userDetails: {\n          firstName: '',\n          lastName: '',\n          emailId: '',\n          userName: '',\n          password: ''\n        },\n        errorMessages: [],\n        selectedRoles: null,\n        changedProviders: null,\n        selectedStatus: null,\n        title: 'Select Providers',\n        visiblePassword: false\n      });\n      this.checkUncheckAllProviders(false);\n    },\n\n    checkUncheckAllProviders(isChecked) {\n      const providerList = Ember.get(this, 'providersList');\n      if (Ember.isEmpty(providerList)) return;\n      providerList.map(provider => {\n        provider.set('isChecked', isChecked);\n      });\n    },\n\n    async fillProviders() {\n      const providers = [];\n      const adaptor = 'perm-sso-user';\n      const permUserAdapter = this.get('store').adapterFor(adaptor);\n      const providersList = await permUserAdapter.getSSOProvider();\n      if (Ember.isEmpty(providersList)) return;\n      const configProviders = this.get('store').peekAll('provider');\n      const filteredProviders = providersList.filter(provider => {\n        if (provider.provider === 'ALL') return true;\n        const configProvider = configProviders.find(cp => cp.name === provider.provider);\n\n        if (configProvider) {\n          return configProvider.get('userCanAccessProvider') && configProvider.get('status') && configProvider.get('status').toLowerCase() === ACTIVE_STATUS;\n        }\n\n        return false;\n      });\n      filteredProviders.map(provider => {\n        providers.push(Ember.Object.create({\n          id: provider.id,\n          displayName: provider.provider === 'ALL' ? 'Select All' : provider.provider,\n          providerName: provider.provider,\n          isChecked: false\n        }));\n      });\n      this.set('providersList', providers);\n    },\n\n    isValid() {\n      const nameAlphanumericRegex = /^[a-z\\d]+$/i;\n      const usernameAlphanumericRegex = /^[a-z\\d_.@]+$/i;\n      let isValid = true;\n      Ember.set(this, 'errorMessages', []);\n\n      if (!Ember.isEmpty(this.userDetails.emailId)) {\n        // eslint-disable-next-line no-useless-escape\n        const emailRegex = /^([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4})$/;\n\n        if (!emailRegex.test(this.userDetails.emailId)) {\n          this.errorMessages.push('Please enter valid email id');\n          isValid = false;\n        }\n      } else if (this.userDetails && this.get('userRecords')) {\n        if (this.get('userRecords').some(data => data && data.userName === this.userDetails.userName)) {\n          this.errorMessages.push('* Duplicated username');\n          isValid = false;\n        }\n      }\n\n      if (Ember.isEmpty(this.userDetails.firstName) || Ember.isEmpty(this.userDetails.lastName) || !nameAlphanumericRegex.test(this.userDetails.firstName) || !nameAlphanumericRegex.test(this.userDetails.lastName) || this.userDetails.firstName.length > 32 || this.userDetails.lastName.length > 32) {\n        isValid = false;\n        this.errorMessages.push('* Firstname and lastname can only have alphanumeric characters i.e. (a-z, A-Z, 0-9)  and max length up to 32 characters and can not be empty.');\n        return;\n      }\n\n      if (Ember.isEmpty(this.userDetails.userName) || !usernameAlphanumericRegex.test(this.userDetails.userName) || this.userDetails.userName.length > 50) {\n        isValid = false;\n        this.errorMessages.push('* Username can only have alphanumeric characters i.e. (a-z, A-Z, 0-9), underscore (_), dot(.), at sign(@) and max length up to 50 characters and can not be empty.');\n        return;\n      }\n\n      return isValid;\n    },\n\n    saveUser() {\n      return Ember.get(this, 'saveUserTask').perform().then(() => {\n        this.get('notifications').success('Added New User Successfully');\n        this.get('workspace').popState('permissionsAddNewUser');\n      }).catch(error => {\n        let message;\n\n        switch (error.status) {\n          case 400:\n            message = 'There was a problem with one of the fields. Please check over the form and try again.';\n            break;\n\n          default:\n            message = 'There was a problem in creating new user, please try again.';\n            break;\n        }\n\n        this.errorMessages.push(message);\n        this.get('notifications').warning(message);\n      });\n    },\n\n    saveUserTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const userAdapter = store.adapterFor('perm-sso-user');\n        const providers = this.get('providersList');\n        const checkedProviders = providers.filter(p => p.isChecked);\n        const isAllProviders = checkedProviders.length > 0 && checkedProviders.length === providers.length;\n        const recordedRoles = Ember.get(this, 'store').peekAll('perm-sso-role').map(role => role.id);\n\n        if (this.selectedRoles) {\n          const invalidSelectedRoles = !this.selectedRoles.every(selectedRole => {\n            const role = recordedRoles.find(recordedRole => recordedRole === selectedRole.roleName);\n            return !!role;\n          });\n          if (invalidSelectedRoles) throw Error('Invalid roles provided');\n        }\n\n        const payload = {\n          firstName: this.userDetails.firstName,\n          lastName: this.userDetails.lastName,\n          // emailId: this.userDetails.emailId,\n          status: this.selectedStatus ? this.selectedStatus.toLowerCase() : 'active',\n          roles: this.selectedRoles ? this.selectedRoles.map(role => role.roleName) : [],\n          username: this.userDetails.userName,\n          password: this.userDetails.password,\n          providers: isAllProviders ? [0] : checkedProviders.map(p => p.id)\n        };\n        yield userAdapter.postUser(payload);\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    getSelectedProviders() {\n      const providersList = this.get('providersList');\n      if (Ember.isEmpty(providersList)) return [];\n      const results = this.get('providersList').filterBy('isChecked', true);\n      return results.map(p => {\n        if (p.providerName !== 'ALL') {\n          return p.id;\n        }\n      });\n    },\n\n    handleCheckUncheckSelectAll() {\n      const providersList = this.get('providersList');\n      if (Ember.isEmpty(providersList)) return;\n      let results = providersList.filterBy('isChecked', false);\n\n      if (results.length === 1 && results[0].providerName === 'ALL') {\n        results[0].set('isChecked', true);\n      } else {\n        results = providersList.filterBy('providerName', 'ALL');\n        results[0].set('isChecked', false);\n      }\n    },\n\n    handleCheckUncheckProviders(provider, isChecked) {\n      const providersList = this.get('providersList');\n      if (Ember.isEmpty(providersList)) return;\n\n      if (provider.providerName === 'ALL') {\n        providersList.map(item => {\n          item.set('isChecked', isChecked);\n        });\n      } else {\n        providersList.map(item => {\n          if (provider.id === item.id) {\n            item.set('isChecked', isChecked);\n          }\n        });\n        this.handleCheckUncheckSelectAll();\n      }\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const tip = 'Do you want to add a new user?';\n      tooltip.pushConfirmation({\n        title: 'Add User',\n        tip,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return Ember.get(this, 'saveUserTask').perform().then(() => {\n            if (this.callBack) {\n              this.callBack(true);\n            }\n\n            this.get('notifications').success('Added New User Successfully');\n            this.get('workspace').popState('permissionsAddNewUser');\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                if (error.message && error.message.includes('Invalid roles provided')) {\n                  message = 'SELECTED ROLE IS NO LONGER AVAILABLE, PLEASE SELECT ANOTHER ROLE AND TRY AGAIN';\n                } else {\n                  message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                }\n\n                break;\n\n              default:\n                message = error.message.startsWith('Invalid roles provided') ? 'Selected role is no longer available, please select another role and try again' : 'There was a problem in creating new user, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    filterTextInput(event) {\n      const alphanumeric = /[A-Za-z0-9]/;\n      var keyChar = String.fromCharCode(event.which || event.keyCode);\n      return alphanumeric.test(keyChar);\n    },\n\n    filterPastedInput(event) {\n      const alphanumeric = /[A-Za-z0-9]/;\n      if (!event.clipboardData) return false;\n      const char = event.clipboardData.getData('Text');\n      return alphanumeric.test(char);\n    },\n\n    filterUserNameInput(event) {\n      const alphanumeric = /[A-Za-z0-9_.@]/;\n      var keyChar = String.fromCharCode(event.which || event.keyCode);\n      return alphanumeric.test(keyChar);\n    },\n\n    actions: {\n      onChangeStatus(option) {\n        Ember.set(this, 'selectedStatus', option);\n      },\n\n      onChangeRole(option) {\n        Ember.set(this, 'selectedRoles', option);\n      },\n\n      onUndoClick() {\n        this.resetUserProperties();\n      },\n\n      onSaveClick() {\n        if (this.isValid()) {\n          Ember.set(this, 'errorMessages', []);\n          this.showToolTip();\n        }\n      },\n\n      onCloseClick() {},\n\n      onToggleSelect() {\n        this.toggleSelect();\n      },\n\n      onOpenProvider() {\n        this.toggleSelect();\n      },\n\n      onCloseProvider() {\n        this.toggleSelect();\n      },\n\n      onProviderCheckboxClick(provider, event) {\n        Ember.set(this, 'changedProviders', true);\n        this.handleCheckUncheckProviders(provider, event.target.checked);\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(false);\n        }\n      },\n\n      onToggleVisiblePasswordClick() {\n        const visiblePassword = this.get('visiblePassword');\n        this.set('visiblePassword', !visiblePassword);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-add-user/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"wjwC3wM9\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"dropdown\\\",\\\"provider\\\",\\\"index\\\",\\\"role\\\",\\\"status\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\",\\\"canShrink\\\"],[\\\"reconcile-widget-base\\\",[23,[\\\"canShrink\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Add User\\\",[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs' @ L15:C6) \\\"],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"   \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[0,\\\" \\\"],[4,\\\"each\\\",[[23,[\\\"errorMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[22,7,[]],false],[0,\\\"\\\\n      \\\"]],\\\"parameters\\\":[7]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs' @ L26:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs' @ L27:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Add User\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"20%\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"placeholder\\\",\\\"Enter first name\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"firstName\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"userDetails\\\",\\\"firstName\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[11,\\\"maxlength\\\",\\\"32\\\"],[12,\\\"onpaste\\\",[21,\\\"filterPastedInput\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"placeholder\\\",\\\"Enter last name\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"lastName\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"userDetails\\\",\\\"lastName\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[11,\\\"maxlength\\\",\\\"32\\\"],[12,\\\"onpaste\\\",[21,\\\"filterPastedInput\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"Status\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"statusOptions\\\"]],true,[23,[\\\"selectedStatus\\\"]],\\\"Select status\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeStatus\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,6,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"Role\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"allowClear\\\",\\\"onchange\\\"],[[23,[\\\"roleOptions\\\"]],false,[23,[\\\"displayName\\\"]],[23,[\\\"selectedRoles\\\"]],\\\"Select roles\\\",true,[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRole\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,5,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"Username\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"placeholder\\\",\\\"Enter username\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"userName\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"userDetails\\\",\\\"userName\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterUserNameInput\\\"]],[11,\\\"maxlength\\\",\\\"50\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"Password\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"autocomplete\\\",\\\"new-password\\\"],[11,\\\"placeholder\\\",\\\"Enter password\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"password\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"userDetails\\\",\\\"password\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"type\\\",[27,\\\"if\\\",[[23,[\\\"visiblePassword\\\"]],\\\"text\\\",\\\"password\\\"],null]],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"visiblePassword\\\"]],\\\"fa-eye\\\",\\\"fa-eye-slash\\\"],null],\\\" togglePassword\\\"]]],[11,\\\"id\\\",\\\"togglePassword\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleVisiblePasswordClick\\\"],null]],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 text-right\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpenProvider\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs' @ L114:C19) \\\"],null]],[[\\\"class\\\"],[\\\"permissions-dropdown-provider select\\\"]],{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title\\\"],[12,\\\"style\\\",[28,[\\\"color:\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"title\\\"]],\\\"Select Providers\\\"],null],\\\"gray\\\",\\\"black\\\"],null],\\\";font-weight: 50;\\\"]]],[12,\\\"title\\\",[28,[[21,\\\"providersTitle\\\"]]]],[9],[1,[21,\\\"providersTitle\\\"],false],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs' @ L121:C19) \\\"],null]],[[\\\"class\\\"],[\\\"permissions-dropdown-provider options\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"providersList\\\"]]],null,{\\\"statements\\\":[[0,\\\"                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"option\\\"],[9],[0,\\\"\\\\n                              \\\"],[7,\\\"input\\\"],[12,\\\"id\\\",[28,[\\\"checkbox_provider_header_\\\",[22,4,[]]]]],[12,\\\"checked\\\",[22,3,[\\\"isChecked\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onProviderCheckboxClick\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n                              \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_provider_header_\\\",[22,4,[]]]]],[12,\\\"title\\\",[28,[[22,3,[\\\"providerName\\\"]]]]],[9],[1,[22,3,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"requireValidation\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"password-validation\\\"],[9],[0,\\\"\\\\n      Minimum Password Criteria\\\\n      \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"validation-list\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsMoreThanEight\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsMoreThanEight\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain at least 6 characters\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsUppercase\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsUppercase\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 uppercase letter\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsLowercase\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsLowercase\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 lowercase letter\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsNumber\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsNumber\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 number\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsSymbol\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsSymbol\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 special character[~!@#$%^&*()_-+={};:'\\\\\\\"|<>,.?/]\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"style\\\"],[11,\\\"type\\\",\\\"text/css\\\"],[9],[0,\\\"\\\\n.ember-power-select-placeholder {\\\\n    color: gray;\\\\n}\\\\n.togglePassword {\\\\n  cursor: pointer;\\\\n  float: right;\\\\n  margin-top: -17px;\\\\n  margin-right: 6px;\\\\n}\\\\n\\\\ndiv.password-validation {\\\\n  margin-left: 17px;\\\\n  font-size: 14px;\\\\n  font-weight: bold;\\\\n}\\\\n\\\\ndiv.password-validation ul {\\\\n  padding-inline-start: 20px;\\\\n}\\\\ndiv.password-validation li {\\\\n    list-style:none;\\\\n    background-image:none;\\\\n    background-repeat:none;\\\\n    background-position:0; \\\\n}\\\\n\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/permissions-add-user/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-edit-user/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/mixins/password-validation\", \"adept-iq/mixins/role-provider-validation\", \"lodash\"], function (_exports, _emberConcurrency, _passwordValidation, _roleProviderValidation, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_passwordValidation.default, _roleProviderValidation.default, {\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    errorMessages: null,\n    userDetails: null,\n    selectedRoles: null,\n    title: '',\n    visiblePassword: false,\n    isFormUpdated: false,\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    currentUser: Ember.computed.readOnly('stackFrame.options.user'),\n    hasOneProvider: Ember.computed.lte('providersList.length', 1),\n    canUndo: Ember.computed.alias('isFormUpdated'),\n    canSave: Ember.computed.and('isFormUpdated', 'isPasswordValidOrUnchanged', 'hasOneSelectedRoles', 'hasOneSelectedProviders'),\n    userRecords: Ember.computed.readOnly('stackFrame.options.userRecords'),\n    providersTitle: Ember.computed('providersList.@each.isChecked', function () {\n      const providers = this.get('providersList') || [];\n      const checkedProviders = providers.filter(p => p.isChecked);\n\n      if (checkedProviders.length <= 0) {\n        return 'Select Providers';\n      } else if (checkedProviders.length === 1) {\n        return checkedProviders[0].providerName;\n      } else if (checkedProviders.length === providers.length) {\n        return 'All Providers';\n      }\n\n      return 'Multiple';\n    }),\n    // isSaveEnabled: computed.and('userDetails.{firstName,lastName,username,password}', 'selectedStatus', 'selectedRoles'),\n    // canSave: computed('isSaveEnabled', 'title', 'isEditingStart', function() {\n    //   return get(this, 'isSaveEnabled') && get(this, 'title') !== 'Select Providers' && get(this, 'isEditingStart');\n    // }),\n    statusOptions: Ember.computed('selectedStatus', function () {\n      return ['Active', 'Inactive'];\n    }),\n    roleOptions: Ember.computed('selectedRoles', function () {\n      const roles = [];\n      const rolesList = Ember.get(this, 'store').peekAll('perm-sso-role');\n      rolesList.map(role => {\n        if (role.id) {\n          roles.push(role);\n        }\n      });\n      return roles;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.resetUserProperties();\n      this.setSideDrawerWidth('490px');\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.get('systemConfig').set('sideDrawerPreventCollapse', true);\n    },\n\n    didDestroyElement() {\n      this.get('systemConfig').set('sideDrawerPreventCollapse', null);\n    },\n\n    async resetUserProperties() {\n      this.setProperties({\n        userDetails: {\n          id: this.currentUser.get('id'),\n          firstName: this.currentUser.get('firstName'),\n          lastName: this.currentUser.get('lastName'),\n          emailId: this.currentUser.get('emailId'),\n          userName: this.currentUser.get('userName'),\n          password: this.currentUser.get('password')\n        },\n        errorMessages: [],\n        isFormUpdated: false,\n        selectedRoles: this.getDefaultRoles(),\n        selectedStatus: Ember.String.capitalize(this.currentUser.calculatedStatus),\n        visiblePassword: false\n      });\n      await this.fillProviders();\n      this.set('userInitialProviders', _lodash.default.cloneDeep(this.get('providersList')));\n    },\n\n    getDefaultRoles() {\n      const rolesList = this.currentUser.roles;\n      const roleOptions = this.get('roleOptions');\n      if (Ember.isEmpty(rolesList)) return null;\n      return roleOptions.filter(option => rolesList.some(role => role.roleName === option.id));\n    },\n\n    async fillProviders() {\n      const providers = [];\n      const adaptor = 'perm-sso-user';\n      const permUserAdapter = this.get('store').adapterFor(adaptor);\n      const providersList = await permUserAdapter.getSSOProvider();\n      if (Ember.isEmpty(providersList)) return;\n      const userProviders = this.currentUser.providers;\n      const userProvidersDict = userProviders.reduce((dict, p) => {\n        dict[p.id] = true;\n        return dict;\n      }, {});\n      providersList.map(provider => {\n        providers.push(Ember.Object.create({\n          id: provider.id,\n          displayName: provider.provider === 'ALL' ? 'Select All' : provider.provider,\n          providerName: provider.provider,\n          isChecked: userProvidersDict[provider.provider] || userProvidersDict.ALL || false\n        }));\n      });\n      this.set('providersList', providers);\n    },\n\n    compareArray(_arr1, _arr2) {\n      if (!Array.isArray(_arr1) || !Array.isArray(_arr2) || _arr1.length !== _arr2.length) {\n        return false;\n      } // .concat() to not mutate arguments\n\n\n      const arr1 = _arr1.concat().sort();\n\n      const arr2 = _arr2.concat().sort();\n\n      for (let i = 0; i < arr1.length; i++) {\n        if (arr1[i] !== arr2[i]) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    isValid() {\n      const nameAlphanumericRegex = /^[a-z\\d]+$/i;\n      const usernameAlphanumericRegex = /^[a-z\\d_.@]+$/i;\n      let isValid = true;\n      Ember.set(this, 'errorMessages', []); // Open once allowed to edit all this\n      // if (isEmpty(this.userDetails.userName)) {\n      //   this.errorMessages.push('Please enter user name');\n      //   isValid = false;\n      // }\n      // if (isEmpty(this.userDetails.password)) {\n      //   this.errorMessages.push('Please enter password');\n      //   isValid = false;\n      // }\n      // if (isEmpty(this.title) || this.title === 'Select Providers') {\n      //   this.errorMessages.push('Please enter providers');\n      //   isValid = false;\n      // }\n      // if (isEmpty(this.selectedRoles)) {\n      //   this.errorMessages.push('Please enter roles');\n      //   isValid = false;\n      // }\n\n      if (Ember.isEmpty(this.selectedStatus)) {\n        this.errorMessages.push('Please enter status');\n        isValid = false;\n      }\n\n      if (!Ember.isEmpty(this.userDetails.emailId)) {\n        // eslint-disable-next-line no-useless-escape\n        const emailRegex = /^([A-Za-z0-9_\\-\\.])+\\@([A-Za-z0-9_\\-\\.])+\\.([A-Za-z]{2,4})$/;\n\n        if (!emailRegex.test(this.userDetails.emailId)) {\n          this.errorMessages.push('Please enter valid email id');\n          isValid = false;\n        }\n      } else if (this.userDetails && this.get('userRecords')) {\n        if (this.get('userRecords').filter(data => data && data.id !== this.userDetails.id).some(data => data && data.userName === this.userDetails.userName)) {\n          this.errorMessages.push('* Duplicated username');\n          isValid = false;\n        }\n      }\n\n      if (Ember.isEmpty(this.userDetails.firstName) || Ember.isEmpty(this.userDetails.lastName) || !nameAlphanumericRegex.test(this.userDetails.firstName) || !nameAlphanumericRegex.test(this.userDetails.lastName) || this.userDetails.firstName.length > 32 || this.userDetails.lastName.length > 32) {\n        isValid = false;\n        this.errorMessages.push('* Firstname and lastname can only have alphanumeric characters i.e. (a-z, A-Z, 0-9)  and max length up to 32 characters and can not be empty');\n        return;\n      }\n\n      if (Ember.isEmpty(this.userDetails.userName) || !usernameAlphanumericRegex.test(this.userDetails.userName) || this.userDetails.userName.length > 50) {\n        isValid = false;\n        this.errorMessages.push('* Username can only have alphanumeric characters i.e. (a-z, A-Z, 0-9), underscore (_), dot(.), at sign(@) and max length up to 50 characters and can not be empty.');\n        return;\n      } //check if any change has been made to the user details\n\n\n      const currentUserRoleIds = this.getRoleIdsByRoleList(this.currentUser.roles);\n      const roleIds = this.getSelectedRoleIds() || [];\n      const sameRoles = this.compareArray(currentUserRoleIds, roleIds);\n      const userDetailsPassword = this.userDetails.password || '';\n      const currentUserPassword = this.currentUser.password || '';\n      const formHasUpdated = this.userDetails.firstName !== this.currentUser.firstName || this.userDetails.lastName !== this.currentUser.lastName || this.userDetails.userName !== this.currentUser.userName || userDetailsPassword !== currentUserPassword || this.selectedStatus !== this.currentUser.calculatedStatus || !_lodash.default.isEqual(this.get('providersList'), this.userInitialProviders) || !sameRoles;\n\n      if (!formHasUpdated) {\n        isValid = false;\n        this.errorMessages.push('No changes have been made to the user details!');\n        return;\n      }\n\n      return isValid;\n    },\n\n    saveUser() {\n      return Ember.get(this, 'editUserTask').perform().then(() => {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n\n        this.get('notifications').success('Edited user Successfully');\n        this.get('workspace').popState('permissionsEditUser');\n      }).catch(error => {\n        let message;\n\n        switch (error.status) {\n          case 400:\n            message = 'There was a problem with one of the fields. Please check over the form and try again.';\n            break;\n\n          case 404:\n            message = 'There was a problem in edit user, requested user not exists';\n            break;\n\n          default:\n            message = 'There was a problem in edit user, please try again.';\n            break;\n        }\n\n        this.errorMessages.push(message);\n        this.get('notifications').warning(message);\n      });\n    },\n\n    getSelectedProviders() {\n      const providersList = this.get('providersList');\n      if (Ember.isEmpty(providersList)) return [];\n      const results = this.get('providersList').filterBy('isChecked', true);\n      return results.map(p => {\n        if (p.id !== 'selectAll') {\n          return p.id;\n        }\n      });\n    },\n\n    handleCheckUncheckSelectAll() {\n      const providersList = this.get('providersList');\n      if (Ember.isEmpty(providersList)) return;\n      let results = providersList.filterBy('isChecked', false);\n\n      if (results.length === 1 && results[0].providerName === 'ALL') {\n        results[0].set('isChecked', true);\n      } else {\n        results = providersList.filterBy('providerName', 'ALL');\n        results[0].set('isChecked', false);\n      }\n    },\n\n    handleCheckUncheckProviders(provider, isChecked) {\n      const providersList = this.get('providersList');\n      if (Ember.isEmpty(providersList)) return;\n\n      if (provider.providerName === 'ALL') {\n        providersList.map(item => {\n          item.set('isChecked', isChecked);\n        });\n      } else {\n        providersList.map(item => {\n          if (provider.id === item.id) {\n            item.set('isChecked', isChecked);\n          }\n        });\n        this.handleCheckUncheckSelectAll();\n      }\n    },\n\n    toggleSelect() {\n      this.toggleProperty('isOpen');\n    },\n\n    getSelectedRoleIds() {\n      if (Ember.isEmpty(this.selectedRoles)) return;\n      return this.selectedRoles.map(role => role.roleName);\n    },\n\n    getRoleIdsByRoleList(roleList) {\n      return roleList.map(role => role.roleName);\n    },\n\n    getSelectedStatus() {\n      return this.selectedStatus ? this.selectedStatus.toLowerCase() : this.currentUser.calculatedStatus.toLowerCase();\n    },\n\n    editUserTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const userAdapter = store.adapterFor('perm-sso-user');\n        const recordedRoles = Ember.get(this, 'store').peekAll('perm-sso-role').map(role => role.id);\n\n        if (this.userDetails.firstName !== this.currentUser.firstName || this.userDetails.lastName !== this.currentUser.lastName) {\n          const payload = {\n            firstName: this.userDetails.firstName,\n            lastName: this.userDetails.lastName // username: this.userDetails.userName,\n            // password: this.userDetails.password,\n            // providers: [0]\n\n          };\n          yield userAdapter.patchUser(payload, this.currentUser.userId);\n        } // edit user username and password\n\n\n        if (this.userDetails.userName !== this.currentUser.userName || this.userDetails.password !== this.currentUser.password) {\n          const payload = {\n            username: this.userDetails.userName,\n            password: this.userDetails.password\n          };\n          yield userAdapter.updateUsernameAndPassword(payload, this.currentUser.userId);\n        } // edit user providers\n\n\n        const providersList = this.get('providersList');\n        const isAllProviders = providersList.some(provider => provider.providerName === 'ALL' && provider.isChecked);\n\n        if (!Ember.isEmpty(providersList)) {\n          for (let i = 0; i < providersList.length; i++) {\n            if (isAllProviders) {\n              if (providersList[i].providerName === 'ALL') {\n                yield userAdapter.updateProviders(this.currentUser.userId, providersList[i].id);\n              } else {\n                yield userAdapter.deleteProviders(this.currentUser.userId, providersList[i].id);\n              }\n            } else if (providersList[i].isChecked === true) {\n              yield userAdapter.updateProviders(this.currentUser.userId, providersList[i].id);\n            } else {\n              yield userAdapter.deleteProviders(this.currentUser.userId, providersList[i].id);\n            }\n          }\n        }\n\n        if (this.selectedStatus && this.selectedStatus.toLowerCase() !== this.currentUser.calculatedStatus) {\n          //edit user status\n          yield userAdapter.updateStatusByUser(this.currentUser.userId, this.getSelectedStatus()); //end\n        } // edit user roles\n\n\n        const currentUserRoles = yield userAdapter.getRolesByUser(this.currentUser.userId);\n        const currentUserRoleIds = this.getRoleIdsByRoleList(currentUserRoles.UserRoleRoles);\n        if (Ember.isEmpty(currentUserRoles)) return;\n        const roleIds = this.getSelectedRoleIds();\n        const differenceInRoles = this.compareArray(currentUserRoleIds, roleIds);\n\n        if (!differenceInRoles) {\n          const removeRoles = _lodash.default.difference(currentUserRoleIds, roleIds) || [];\n          const addRoles = _lodash.default.difference(roleIds, currentUserRoleIds) || [];\n\n          if (!Ember.isEmpty(removeRoles)) {\n            for (let i = 0; i < removeRoles.length; i++) {\n              yield userAdapter.deleteRolesByUser(this.currentUser.userId, removeRoles[i]);\n            }\n          }\n\n          if (!Ember.isEmpty(addRoles)) {\n            const invalidSelectedRoles = !addRoles.every(addRole => {\n              const role = recordedRoles.find(recordedRole => recordedRole === addRole);\n              return !!role;\n            });\n            if (invalidSelectedRoles) throw Error('Invalid roles provided');\n\n            for (let i = 0; i < addRoles.length; i++) {\n              yield userAdapter.updateRolesByUser(this.currentUser.userId, addRoles[i]);\n            }\n          } //end\n\n        }\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    filterTextInput(event) {\n      const alphanumeric = /[A-Za-z0-9]/;\n      var keyChar = String.fromCharCode(event.which || event.keyCode);\n      return alphanumeric.test(keyChar);\n    },\n\n    filterUserNameInput(event) {\n      const alphanumeric = /[A-Za-z0-9_.@]/;\n      var keyChar = String.fromCharCode(event.which || event.keyCode);\n      return alphanumeric.test(keyChar);\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const tip = 'Do you want to edit the user?';\n      tooltip.pushConfirmation({\n        title: 'Edit User',\n        tip,\n        hasOverlay: true,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return Ember.get(this, 'editUserTask').perform().then(() => {\n            if (this.callBack) {\n              this.callBack(true);\n            }\n\n            this.get('notifications').success('Edited user Successfully');\n            this.get('workspace').popState('permissionsEditUser');\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              case 404:\n                {\n                  const pattern = /(Key \\(roleId\\)=\\()(.*)(\\))( is not present in table)/g;\n\n                  if (pattern.test(error.message)) {\n                    message = 'SELECTED ROLE IS NO LONGER AVAILABLE, PLEASE SELECT ANOTHER ROLE AND TRY AGAIN';\n                  } else {\n                    message = 'There was a problem in edit user, requested user not exists';\n                  }\n\n                  break;\n                }\n\n              default:\n                message = error.message.startsWith('Invalid roles provided') ? 'Selected role is no longer available, please select another role and try again' : 'There was a problem in edit user, please try again.';\n                break;\n            }\n\n            this.errorMessages.push(message);\n            this.get('notifications').warning(message);\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    formOnChange() {\n      const currentUserRoleIds = this.getRoleIdsByRoleList(this.currentUser.roles);\n      const roleIds = this.getSelectedRoleIds() || [];\n      const sameRoles = this.compareArray(currentUserRoleIds, roleIds);\n      const userDetailsPassword = this.userDetails.password || '';\n      const currentUserPassword = this.currentUser.password || '';\n      const isFormUpdated = this.userDetails.firstName !== this.currentUser.firstName || this.userDetails.lastName !== this.currentUser.lastName || this.userDetails.userName !== this.currentUser.userName || userDetailsPassword !== currentUserPassword || this.selectedStatus !== this.currentUser.calculatedStatus || !_lodash.default.isEqual(this.get('providersList'), this.userInitialProviders) || !sameRoles;\n      this.set('isFormUpdated', isFormUpdated);\n    },\n\n    actions: {\n      onChangeStatus(option) {\n        Ember.set(this, 'selectedStatus', option);\n        this.formOnChange();\n      },\n\n      onChangeRole(option) {\n        Ember.set(this, 'selectedRoles', option);\n        this.formOnChange();\n      },\n\n      onUndoClick() {\n        this.resetUserProperties();\n      },\n\n      onInputChange(option, value) {\n        switch (option) {\n          case 'firstName':\n            Ember.set(this, 'userDetails.firstName', value);\n            break;\n\n          case 'lastName':\n            Ember.set(this, 'userDetails.lastName', value);\n            break;\n\n          case 'emailId':\n            Ember.set(this, 'userDetails.emailId', value);\n            break;\n\n          case 'userName':\n            Ember.set(this, 'userDetails.userName', value);\n            break;\n\n          case 'password':\n            Ember.set(this, 'userDetails.password', value);\n            break;\n\n          default:\n            break;\n        }\n\n        this.formOnChange();\n      },\n\n      onSaveClick() {\n        if (this.isValid()) {\n          Ember.set(this, 'errorMessages', []);\n          this.showToolTip();\n        }\n      },\n\n      onCloseClick() {},\n\n      onToggleSelect() {\n        this.toggleSelect();\n      },\n\n      onOpenProvider() {\n        this.toggleSelect();\n      },\n\n      onCloseProvider() {\n        this.toggleSelect();\n      },\n\n      onProviderCheckboxClick(provider, event) {\n        this.handleCheckUncheckProviders(provider, event.target.checked);\n        this.formOnChange();\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(false);\n        }\n      },\n\n      onToggleVisiblePasswordClick() {\n        const visiblePassword = this.get('visiblePassword');\n        this.set('visiblePassword', !visiblePassword);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-edit-user/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"B3m66Qrp\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"dropdown\\\",\\\"provider\\\",\\\"index\\\",\\\"role\\\",\\\"status\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Edit User\\\",[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs' @ L13:C6) \\\"],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n \\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"   \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[0,\\\" \\\"],[4,\\\"each\\\",[[23,[\\\"errorMessages\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[22,7,[]],false],[0,\\\"\\\\n      \\\"]],\\\"parameters\\\":[7]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs' @ L24:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs' @ L25:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Edit User\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"20%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"firstName\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",\\\"firstName\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[11,\\\"maxlength\\\",\\\"32\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"lastName\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",\\\"lastName\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterTextInput\\\"]],[11,\\\"maxlength\\\",\\\"32\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Status\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"statusOptions\\\"]],true,[23,[\\\"selectedStatus\\\"]],\\\"Select status\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeStatus\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,6,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Role\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"allowClear\\\",\\\"onchange\\\"],[[23,[\\\"roleOptions\\\"]],false,[23,[\\\"displayName\\\"]],[23,[\\\"selectedRoles\\\"]],\\\"Select roles\\\",true,[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRole\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,5,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Username\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"userName\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",\\\"userName\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeypress\\\",[21,\\\"filterUserNameInput\\\"]],[11,\\\"maxlength\\\",\\\"50\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Password\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"userDetails\\\",\\\"password\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",\\\"password\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"type\\\",[27,\\\"if\\\",[[23,[\\\"visiblePassword\\\"]],\\\"text\\\",\\\"password\\\"],null]],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"visiblePassword\\\"]],\\\"fa-eye\\\",\\\"fa-eye-slash\\\"],null],\\\" togglePassword\\\"]]],[11,\\\"id\\\",\\\"togglePassword\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleVisiblePasswordClick\\\"],null]],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"onOpen\\\",\\\"onClose\\\"],[\\\"right\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOpenProvider\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs' @ L91:C19) \\\"],null]],[[\\\"class\\\"],[\\\"permissions-dropdown-provider select\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"title\\\"],[12,\\\"title\\\",[28,[[21,\\\"providersTitle\\\"]]]],[9],[1,[21,\\\"providersTitle\\\"],false],[10],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"isOpened\\\"]],\\\"caret-up\\\",\\\"caret-down\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs' @ L99:C19) \\\"],null]],[[\\\"class\\\"],[\\\"permissions-dropdown-provider options\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"providersList\\\"]]],null,{\\\"statements\\\":[[0,\\\"                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"option\\\"],[9],[0,\\\"\\\\n                              \\\"],[7,\\\"input\\\"],[12,\\\"id\\\",[28,[\\\"checkbox_provider_header_\\\",[22,4,[]]]]],[12,\\\"checked\\\",[22,3,[\\\"isChecked\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onProviderCheckboxClick\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n                              \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"checkbox_provider_header_\\\",[22,4,[]]]]],[12,\\\"title\\\",[28,[[22,3,[\\\"providerName\\\"]]]]],[9],[1,[22,3,[\\\"displayName\\\"]],false],[10],[0,\\\"\\\\n                          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"requireValidation\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"password-validation\\\"],[9],[0,\\\"\\\\n      Minimum Password Criteria\\\\n      \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"validation-list\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsMoreThanEight\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsMoreThanEight\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain at least 6 characters\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsUppercase\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsUppercase\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 uppercase letter\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsLowercase\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsLowercase\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 lowercase letter\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsNumber\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsNumber\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 number\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"list-item\\\"],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa \\\",[27,\\\"if\\\",[[23,[\\\"containsSymbol\\\"]],\\\"fa-check icon correct\\\",\\\"fa-times icon incorrect\\\"],null]]]],[12,\\\"style\\\",[27,\\\"if\\\",[[23,[\\\"containsSymbol\\\"]],\\\"color:green\\\",\\\"color:red\\\"],null]],[9],[10],[0,\\\" Must contain 1 special character[~!@#$%^&*()_-+={};:'\\\\\\\"|<>,.?/]\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"style\\\"],[11,\\\"type\\\",\\\"text/css\\\"],[9],[0,\\\"\\\\n\\\\n.togglePassword {\\\\n  cursor: pointer;\\\\n  float: right;\\\\n  margin-top: -17px;\\\\n  margin-right: 6px;\\\\n}\\\\n\\\\ndiv.password-validation {\\\\n  margin-left: 17px;\\\\n  font-size: 14px;\\\\n  font-weight: bold;\\\\n}\\\\n\\\\ndiv.password-validation ul {\\\\n  padding-inline-start: 20px;\\\\n}\\\\ndiv.password-validation li {\\\\n    list-style:none;\\\\n    background-image:none;\\\\n    background-repeat:none;\\\\n    background-position:0; \\\\n}\\\\n\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/permissions-edit-user/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-filter-settings/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    tagName: '',\n    allVisbility: true,\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n    columns: Ember.computed('stackFrame.options.columns', function () {\n      return Ember.get(this, 'stackFrame.options.columns');\n    }),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    dataColumns: Ember.computed('columns.[]', function () {\n      const columns = this.get('columns');\n      return columns.map(column => {\n        column.set('filterTypeId', null);\n        return column;\n      });\n    }),\n    isClearAllDisabled: Ember.computed('dataColumns.@each.{filterTypeId,filterValues}', function () {\n      const dataColumns = this.get('dataColumns');\n      const length = dataColumns.length;\n      return dataColumns.filter(column => column.filterTypeId === 'empty' && Ember.isEmpty(column.filterTypeId) && Ember.isEmpty(column.filterValues)).length === length;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const columns = this.get('columns');\n      this.get('widget').mergeState({\n        columns\n      });\n      let resetFilter = true;\n      columns.map(column => {\n        if (column.get('filterType.id') !== null) {\n          resetFilter = false;\n        }\n      });\n\n      if (resetFilter) {\n        this.send('clearFilters');\n      }\n    },\n\n    reOrderFilterSettings(columns) {\n      this.get('widget').mergeState({\n        columns\n      });\n      const tableColumns = this.get('columns') || []; // checkbox and spacer are always in the same location\n\n      tableColumns[0].sortOrder = 0;\n      tableColumns[tableColumns.length - 1].sortOrder = tableColumns.length - 1;\n      tableColumns.forEach(column => {\n        if (columns[column.id]) {\n          column.sortOrder = columns[column.id].index + 1;\n        }\n      });\n      tableColumns.sort(function (a, b) {\n        return a.sortOrder - b.sortOrder;\n      });\n      this.notifyPropertyChange('columns');\n    },\n\n    onFilterValueChange(column, index, event) {\n      const id = column.get('id');\n      const columns = this.get('widget.state.columns') ? this.get('widget.state.columns') : this.get('columns');\n      let filterValues = column.get('filterValues') || [];\n      filterValues = filterValues.slice();\n      filterValues[index] = event.target.value;\n      columns[id] = {\n        filterValues\n      };\n      this.get('widget').mergeState({\n        columns\n      });\n    },\n\n    actions: {\n      onCloseClick() {\n        const workspace = this.get('workspace'); // save any filter changes i.e columns reorders, visibility, and filter changes\n\n        workspace.saveTempDashboardState();\n        this.onCloseClick();\n      },\n\n      onReorderItems(tableColumns) {\n        const columns = tableColumns.reduce((obj, column, index) => {\n          const id = column.id;\n          obj[id] = {\n            index\n          };\n          return obj;\n        }, {});\n        this.reOrderFilterSettings(columns);\n      },\n\n      onClickVisibilityCheckbox(column, event) {\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          hidden: !event.target.checked\n        };\n\n        if (columns[id].hidden) {\n          columns[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n          columns[id].filterValues = null;\n        }\n\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onToggleAllVisibility(tableColumns) {\n        const allVisbility = !this.get('allVisbility');\n        this.set('allVisbility', allVisbility);\n        const columns = tableColumns.reduce((obj, column) => {\n          const id = column.id;\n          obj[id] = {\n            hidden: allVisbility\n          };\n\n          if (allVisbility) {\n            obj[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n            obj[id].filterValues = null;\n          }\n\n          return obj;\n        }, {});\n        Ember.run(() => this.get('widget').mergeState({\n          columns\n        }));\n      },\n\n      onSelectFilterType(column, filterType) {\n        const id = column.get('id');\n        const columns = this.get('widget.state.columns') ? this.get('widget.state.columns') : this.get('columns');\n        columns[id] = {\n          filterTypeId: filterType.id,\n          filterType: filterType\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onSearchChange(column, index, event) {\n        Ember.run.debounce(this, 'onFilterValueChange', column, index, event, 300);\n      },\n\n      clearFilters() {\n        const columnList = this.get('columns') || [];\n        let columns = null;\n        if (columnList.length !== 0) columns = columnList.map(column => {\n          column.set('filterTypeId', null);\n          column.set('filterValues', null);\n          column.set('filterType', {\n            arity: 1\n          });\n          return column;\n        });\n        Ember.set(this, 'columns', columns);\n        this.get('widget').mergeState({\n          columns\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/permissions-filter-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"+Pcfy9HP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"group\\\",\\\"column\\\",\\\"item\\\",\\\"filterType\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"playback-filter-settings-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/permissions-filter-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/permissions-filter-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-subheader data-test-filter-side-bar-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"reorder-column\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"visibility-column\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleAllVisibility\\\",[23,[\\\"dataColumns\\\"]]],null]],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"allVisbility\\\"]],\\\"eye-slash\\\",\\\"eye\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"header-label-column\\\"],[9],[0,\\\"Column\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"filter-type-column\\\"],[9],[0,\\\"Filter\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"header-button-outline data-test-clear-filter-button\\\"],[12,\\\"disabled\\\",[21,\\\"isClearAllDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"clearFilters\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n                  Clear All \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-table-wrapper data-test-filter-side-bar-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"sortable-group\\\",null,[[\\\"classNames\\\",\\\"tagName\\\",\\\"onChange\\\"],[\\\"filter-settings-table\\\",\\\"div\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReorderItems\\\"],null]]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dataColumns\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"item\\\"]],\\\"expected `group.item` to be a contextual component but found a string. Did you mean `(component group.item)`? ('adept-iq/pods/components/side-drawer/permissions-filter-settings/template.hbs' @ L30:C13) \\\"],null]],[[\\\"classNames\\\",\\\"tagName\\\",\\\"model\\\"],[\\\"filter-setting-row\\\",\\\"div\\\",[22,3,[]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"label\\\"]],\\\"priorityId\\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"handle\\\"]],\\\"expected `item.handle` to be a contextual component but found a string. Did you mean `(component item.handle)`? ('adept-iq/pods/components/side-drawer/permissions-filter-settings/template.hbs' @ L32:C17) \\\"],null]],[[\\\"classNames\\\"],[\\\"setting-icon\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[7,\\\"input\\\"],[12,\\\"data-filter-checkbox-id\\\",[28,[[23,[\\\"widget\\\",\\\"typeId\\\"]],[27,\\\"if\\\",[[23,[\\\"widget\\\",\\\"typeId\\\"]],\\\"-\\\",\\\"\\\"],null],[22,3,[\\\"id\\\"]],\\\" \\\",[27,\\\"if\\\",[[22,3,[\\\"hidden\\\"]],\\\"\\\",\\\"active\\\"],null]]]],[11,\\\"class\\\",\\\"display-checkbox\\\"],[11,\\\"data-test-visibility-column\\\",\\\"\\\"],[12,\\\"checked\\\",[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickVisibilityCheckbox\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-type\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[22,3,[\\\"hidden\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[1,[22,5,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/permissions-filter-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/playback-filter-settings/component\", [\"exports\", \"lodash\"], function (_exports, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    tagName: '',\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n    allVisbility: true,\n    columns: Ember.computed('stackFrame.options.columns', function () {\n      return Ember.get(this, 'stackFrame.options.columns');\n    }),\n    columnsLength: Ember.computed('stackFrame.options.columns', function () {\n      return this.get('stackFrame.options.columns').length;\n    }),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    disableCheckbox: Ember.computed('widget', 'stackFrame.options.widget._state', function () {\n      const widgetState = this.get('stackFrame.options.widget._state');\n      const totalColumns = 11;\n      let totalHidenColumns = 0;\n\n      if (widgetState && widgetState.hasOwnProperty('columns')) {\n        _lodash.default.pickBy(widgetState.columns, value => {\n          if (value.hidden) {\n            totalHidenColumns = totalHidenColumns + 1;\n          }\n        });\n\n        if (totalColumns <= totalHidenColumns) {\n          return true;\n        }\n\n        return false;\n      }\n\n      return false;\n    }),\n    disableCheckboxVehicleGrid: Ember.computed('widget', 'stackFrame.options.widget._state', function () {\n      const widgetState = this.get('stackFrame.options.widget._state');\n      const totalColumns = 3;\n      let totalHidenColumns = 0;\n\n      if (widgetState && widgetState.hasOwnProperty('columns')) {\n        _lodash.default.pickBy(widgetState.columns, value => {\n          if (value.hidden) {\n            totalHidenColumns = totalHidenColumns + 1;\n          }\n        });\n\n        if (totalColumns <= totalHidenColumns) {\n          return true;\n        }\n\n        return false;\n      }\n\n      return false;\n    }),\n    dataColumns: Ember.computed('columns.[]', function () {\n      const columns = this.get('columns');\n      return columns.map(column => {\n        column.set('filterTypeId', null);\n        return column;\n      });\n    }),\n    isClearAllDisabled: Ember.computed('dataColumns.@each.{filterTypeId,filterValues}', function () {\n      const dataColumns = this.get('dataColumns');\n      const length = dataColumns.length;\n      return dataColumns.filter(column => (Ember.isEmpty(column.filterTypeId) || column.filterTypeId === null) && Ember.isEmpty(column.filterValues)).length === length;\n    }),\n\n    reOrderFilterSettings(columns) {\n      this.get('widget').mergeState({\n        columns\n      });\n      const tableColumns = this.get('columns') || []; // checkbox and spacer are always in the same location\n\n      tableColumns[0].sortOrder = 0;\n      tableColumns[tableColumns.length - 1].sortOrder = tableColumns.length - 1;\n      tableColumns.forEach(column => {\n        if (columns[column.id]) {\n          column.sortOrder = columns[column.id].index + 1;\n        }\n      });\n      tableColumns.sort(function (a, b) {\n        return a.sortOrder - b.sortOrder;\n      });\n      this.notifyPropertyChange('columns');\n    },\n\n    onFilterValueChange(column, index, event) {\n      const id = column.get('id');\n      const columns = Ember.get(this, 'columns');\n      let filterValues = column.get('filterValues') || [];\n      filterValues = filterValues.slice();\n      filterValues[index] = event.target.value;\n      columns[id] = {\n        filterValues\n      };\n      this.get('widget').mergeState({\n        columns\n      });\n    },\n\n    actions: {\n      onCloseClick() {\n        const workspace = this.get('workspace'); // save any filter changes i.e columns reorders, visibility, and filter changes\n\n        workspace.saveTempDashboardState();\n\n        if (this.get('dataColumns').length === 12) {\n          this.get('workspace').set('playbackFilterSettingClosed', true);\n        }\n\n        if (this.get('dataColumns').length === 4) {\n          this.get('workspace').set('playbackFilterSettingClosedofVehicleGrid', true);\n        }\n\n        this.onCloseClick();\n      },\n\n      onReorderItems(tableColumns) {\n        const columns = tableColumns.reduce((obj, column, index) => {\n          const id = column.id;\n          obj[id] = {\n            index\n          };\n          return obj;\n        }, {});\n        this.reOrderFilterSettings(columns);\n      },\n\n      onClickVisibilityCheckbox(column, event) {\n        if (this.get('dataColumns').length === 12) {\n          this.get('workspace').set('playbackFilterSettingClosed', false);\n        }\n\n        if (this.get('dataColumns').length === 4) {\n          this.get('workspace').set('playbackFilterSettingClosedofVehicleGrid', false);\n        }\n\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          hidden: !event.target.checked\n        };\n\n        if (columns[id].hidden) {\n          columns[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n          columns[id].filterValues = null;\n        }\n\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onToggleAllVisibility(tableColumns) {\n        const allVisbility = !this.get('allVisbility');\n        this.set('allVisbility', allVisbility);\n        const columns = tableColumns.reduce((obj, column) => {\n          const id = column.id;\n          obj[id] = {\n            hidden: allVisbility\n          };\n\n          if (allVisbility) {\n            if (this.get('dataColumns').length === 4) {\n              obj.vehicleGridVehicleId = {\n                hidden: false\n              };\n            } else {\n              obj.time = {\n                hidden: false\n              };\n            }\n          }\n\n          if (allVisbility) {\n            obj[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n            obj[id].filterValues = null;\n          }\n\n          return obj;\n        }, {});\n        Ember.run(() => this.get('widget').mergeState({\n          columns\n        }));\n      },\n\n      onSelectFilterType(column, filterType) {\n        if (this.get('dataColumns').length === 12) {\n          this.get('workspace').set('playbackFilterSettingClosed', false);\n        }\n\n        if (this.get('dataColumns').length === 4) {\n          this.get('workspace').set('playbackFilterSettingClosedofVehicleGrid', false);\n        }\n\n        const id = column.get('id');\n        const columns = Ember.get(this, 'columns') || [];\n        columns[id] = {\n          filterTypeId: filterType.id,\n          filterType: filterType\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onSearchChange(column, index, event) {\n        Ember.run.debounce(this, 'onFilterValueChange', column, index, event, 300);\n      },\n\n      clearFilters() {\n        if (this.get('dataColumns').length === 12) {\n          this.get('workspace').set('playbackFilterSettingClosed', false);\n        }\n\n        if (this.get('dataColumns').length === 4) {\n          this.get('workspace').set('playbackFilterSettingClosedofVehicleGrid', false);\n        }\n\n        const columnList = this.get('columns') || [];\n        let columns = null;\n        if (columnList.length !== 0) columns = columnList.map(column => {\n          column.set('filterTypeId', null);\n          column.set('filterValues', null);\n          column.set('filterType', {\n            arity: 1\n          });\n          return column;\n        });\n        Ember.set(this, 'columns', columns);\n        this.get('widget').mergeState({\n          columns\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/playback-filter-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"n/arMLby\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"group\\\",\\\"column\\\",\\\"item\\\",\\\"filterType\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"playback-filter-settings-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/playback-filter-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/playback-filter-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-subheader data-test-filter-side-bar-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"reorder-column\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"visibility-column\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleAllVisibility\\\",[23,[\\\"dataColumns\\\"]]],null]],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"allVisbility\\\"]],\\\"eye-slash\\\",\\\"eye\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"header-label-column\\\"],[9],[0,\\\"Column\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"filter-type-column\\\"],[9],[0,\\\"Filter\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"header-button-outline data-test-clear-filter-button\\\"],[12,\\\"disabled\\\",[21,\\\"isClearAllDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"clearFilters\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n                  Clear All \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-table-wrapper data-test-filter-side-bar-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"sortable-group\\\",null,[[\\\"classNames\\\",\\\"tagName\\\",\\\"onChange\\\"],[\\\"filter-settings-table\\\",\\\"div\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReorderItems\\\"],null]]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dataColumns\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"item\\\"]],\\\"expected `group.item` to be a contextual component but found a string. Did you mean `(component group.item)`? ('adept-iq/pods/components/side-drawer/playback-filter-settings/template.hbs' @ L30:C13) \\\"],null]],[[\\\"classNames\\\",\\\"tagName\\\",\\\"model\\\"],[\\\"filter-setting-row\\\",\\\"div\\\",[22,3,[]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"label\\\"]],\\\"priorityId\\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"handle\\\"]],\\\"expected `item.handle` to be a contextual component but found a string. Did you mean `(component item.handle)`? ('adept-iq/pods/components/side-drawer/playback-filter-settings/template.hbs' @ L32:C17) \\\"],null]],[[\\\"classNames\\\"],[\\\"setting-icon\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"columnsLength\\\"]],4],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"input\\\"],[12,\\\"data-filter-checkbox-id\\\",[28,[[23,[\\\"widget\\\",\\\"typeId\\\"]],[27,\\\"if\\\",[[23,[\\\"widget\\\",\\\"typeId\\\"]],\\\"-\\\",\\\"\\\"],null],[22,3,[\\\"id\\\"]],\\\" \\\",[27,\\\"if\\\",[[22,3,[\\\"hidden\\\"]],\\\"\\\",\\\"active\\\"],null]]]],[11,\\\"class\\\",\\\"display-checkbox\\\"],[11,\\\"data-test-visibility-column\\\",\\\"\\\"],[12,\\\"checked\\\",[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"and\\\",[[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null],[23,[\\\"disableCheckboxVehicleGrid\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickVisibilityCheckbox\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"input\\\"],[12,\\\"data-filter-checkbox-id\\\",[28,[[23,[\\\"widget\\\",\\\"typeId\\\"]],[27,\\\"if\\\",[[23,[\\\"widget\\\",\\\"typeId\\\"]],\\\"-\\\",\\\"\\\"],null],[22,3,[\\\"id\\\"]],\\\" \\\",[27,\\\"if\\\",[[22,3,[\\\"hidden\\\"]],\\\"\\\",\\\"active\\\"],null]]]],[11,\\\"class\\\",\\\"display-checkbox\\\"],[11,\\\"data-test-visibility-column\\\",\\\"\\\"],[12,\\\"checked\\\",[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null]],[12,\\\"disabled\\\",[27,\\\"and\\\",[[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null],[23,[\\\"disableCheckbox\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickVisibilityCheckbox\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-type\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[22,3,[\\\"hidden\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[1,[22,5,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterTypeId\\\"]],\\\"empty\\\"],null],true,false],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/playback-filter-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-break/component\", [\"exports\", \"moment\", \"ember-concurrency\", \"adept-iq/config/environment\"], function (_exports, _moment, _emberConcurrency, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const FLOATING_BREAK_TYPE = 'Floating';\n  const FIXED_BREAK_TYPE = 'Fixed';\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // Reset map and address picker\n    canResetAddress: Ember.computed.alias('workspace.activeContext.topActiveContext.resetLocation'),\n    trip: Ember.computed.readOnly('stackFrame.options.trip'),\n    routeDetails: Ember.computed.readOnly('stackFrame.options.route'),\n    tripDetails: Ember.computed.alias('reconcile.reconcileTrip'),\n    canUndo: Ember.computed.or('selectedBreakType', 'selectedDateTimeRage.startTime', 'breakDuration', 'breakNote', 'selectedLocation', 'breakEndTime'),\n    canSave: Ember.computed.and('selectedBreakType', 'selectedDateTimeRage.startTime', 'breakDuration'),\n    routes: Ember.computed.readOnly('reconcile.reconcileRouteInfo'),\n    tripDate: Ember.computed.alias('reconcile.reconcileDate'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    disableAddress: Ember.computed('selectedBreakType', function () {\n      if (this.selectedBreakType === FLOATING_BREAK_TYPE) {\n        return true;\n      }\n\n      return false;\n    }),\n    breakTypeOptions: Ember.computed('selectedBreakType', function () {\n      const breakTypes = this.store.peekAll('cs-config-item').filter(message => {\n        return message.category === 'config-System_Configuration-break_types';\n      });\n      return breakTypes.map(reason => reason.displayName);\n    }),\n    actualStartTime: Ember.computed('routeDetails.actualStartTime', function () {\n      const actualStartTime = this.get('routeDetails.actualStartTime');\n      return actualStartTime ? (0, _moment.default)(actualStartTime).format('hh:mm A') : '';\n    }),\n    actualEndTime: Ember.computed('routeDetails.actualEndTime', function () {\n      const actualEndTime = this.get('routeDetails.actualEndTime');\n      return actualEndTime ? (0, _moment.default)(actualEndTime).format('hh:mm A') : '';\n    }),\n\n    init() {\n      Ember.set(this, 'selectedDateTimeRage', {\n        startTime: null,\n        startofday: (0, _moment.default)(this.reconcileTripDate).startOf('day').toISOString()\n      });\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    generateRandomId() {\n      return Math.floor(Math.random() * 10000);\n    },\n\n    buildEventPayloadForAddBreak(routeResponse, rowRes, reconcileDate) {\n      return [{\n        'id': routeResponse.routeStartEvent.id,\n        'routeId': routeResponse.routeStartEvent.routeid,\n        'driverId': routeResponse.routeStartEvent.driverid,\n        'vehicleId': routeResponse.routeStartEvent.vehicleid,\n        'scheduleId': routeResponse.routeStartEvent.scheduleid,\n        'stopPointId': routeResponse.routeStartEvent.stoppointid,\n        'tripId': rowRes.tripId,\n        'odo': routeResponse.routeStartEvent.odo,\n        'speed': routeResponse.routeStartEvent.speed,\n        'heading': routeResponse.routeStartEvent.heading,\n        'eventType': routeResponse.routeStartEvent.eventtype,\n        'actionType': routeResponse.routeStartEvent.actiontype,\n        'createdAt': routeResponse.routeStartEvent.createdat,\n        'updatedAt': routeResponse.routeStartEvent.updatedat,\n        'receivedAt': routeResponse.routeStartEvent.receivedat,\n        'dbVersion': null,\n        'op$1': routeResponse.routeStartEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }, {\n        'id': routeResponse.routeEndEvent.id,\n        'routeId': routeResponse.routeEndEvent.routeid,\n        'driverId': routeResponse.routeEndEvent.driverid,\n        'vehicleId': routeResponse.routeEndEvent.vehicleid,\n        'scheduleId': routeResponse.routeEndEvent.scheduleid,\n        'stopPointId': routeResponse.routeEndEvent.stoppointid,\n        'tripId': rowRes.tripId,\n        'odo': routeResponse.routeEndEvent.odo,\n        'speed': routeResponse.routeEndEvent.speed,\n        'heading': routeResponse.routeEndEvent.heading,\n        'eventType': routeResponse.routeEndEvent.eventtype,\n        'actionType': routeResponse.routeEndEvent.actiontype,\n        'createdAt': routeResponse.routeEndEvent.createdat,\n        'updatedAt': routeResponse.routeEndEvent.updatedat,\n        'receivedAt': routeResponse.routeEndEvent.receivedat,\n        'dbVersion': null,\n        'op$1': routeResponse.routeEndEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRouteBreakPayloadForAddBreak(rowRes, rvdResponse, reconcileDate) {\n      return [{\n        'id': this.generateRandomId(),\n        'plannedStartTime': rvdResponse.route.plannedstarttime,\n        'plannedEndTime': rvdResponse.route.plannedendtime,\n        'breakType': this.get('selectedBreakType'),\n        'routeIndex': null,\n        'scheduledTime': rowRes.riderEvent.scheduledtime,\n        'promisedTime': rowRes.promisedTime,\n        'serviceStartTime': this.get('selectedDateTimeRage.startTime'),\n        'serviceEndTime': this.get('breakEndTime'),\n        'routeId': rvdResponse.route.id,\n        'eta': rowRes.eta,\n        'status': rvdResponse.route.id,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'version': null,\n        'op$1': rvdResponse.route.__op,\n        'createdAt': rvdResponse.route.createdat,\n        'updatedAt': rvdResponse.route.updatedat,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRoutePayloadForAddBreak(rvdResponse, reconcileDate) {\n      return {\n        'deleted$1': false,\n        'endAddressId': rvdResponse.route.endaddressid,\n        'startAddressId': rvdResponse.route.startaddressid,\n        'version': null,\n        'op$1': rvdResponse.route.__op,\n        'createdAt': rvdResponse.route.createdat,\n        'plannedStartTime': rvdResponse.route.plannedstarttime,\n        'plannedEndTime': rvdResponse.route.plannedendtime,\n        'id': rvdResponse.route.id,\n        'providerName': rvdResponse.route.providername,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'status': rvdResponse.route.status,\n        'trackingId': rvdResponse.route.trackingid,\n        'updatedAt': rvdResponse.route.updatedat,\n        'actualStartTime': rvdResponse.route.actualstarttime,\n        'actualEndTime': rvdResponse.route.actualendtime,\n        'alertId': rvdResponse.route.alertid,\n        'otpValue': rvdResponse.route.otpvalue,\n        'otpStatus': rvdResponse.route.otpstatus,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      };\n    },\n\n    buildPayloadForAddBreak() {\n      const selectedTripRow = this.get('reconcile.lastRowClickedInTripTable');\n      const reconcileDate = new Date().toISOString();\n      const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n      const reconcileRVDResponse = this.get('reconcile.reconcileRVDResponse').find(route => route.routeid === parseInt(reconcileRouteInfo.routeid, 10));\n      return {\n        'events': this.buildEventPayloadForAddBreak(reconcileRouteInfo, selectedTripRow, reconcileDate),\n        'routeBreak': this.buildRouteBreakPayloadForAddBreak(selectedTripRow, reconcileRVDResponse, reconcileDate),\n        'route': this.buildRoutePayloadForAddBreak(reconcileRVDResponse, reconcileDate)\n      };\n    },\n\n    saveDriverBreakTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const recon = this.get('reconcile');\n        const payload = this.buildPayloadForAddBreak();\n        return yield recon.addRouteBreak(payload, 'break');\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Insert Driver Break';\n      const tip = 'Add driver break?';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return Ember.get(this, 'saveDriverBreakTask').perform().then(response => {\n            const breakId = response && response.data && response.data.find(ele => ele.data.id).data.id ? response.data.find(ele => ele.data.id).data.id : '';\n            this.send('cancel');\n            this.get('workspace').popState('reconcileAddBreak');\n            this.get('notifications').success(`SUCCESSFULLY ADDED DRIVER BREAK ${breakId}`);\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in driver break, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    checkValidations() {\n      let isValid = true;\n      Ember.set(this, 'errors', []);\n\n      if (!Ember.get(this, 'selectedBreakType')) {\n        isValid = false;\n        this.errors.push('Please select driver break type');\n      }\n\n      if (!Ember.get(this, 'selectedLocation') && Ember.get(this, 'selectedBreakType') === FIXED_BREAK_TYPE) {\n        isValid = false;\n        this.errors.push('Please select break address');\n      }\n\n      if (!Ember.get(this, 'selectedDateTimeRage').startTime) {\n        isValid = false;\n        this.errors.push('Please select break time');\n      }\n\n      if (!Ember.get(this, 'breakDuration')) {\n        isValid = false;\n        this.errors.push('Please select break duration');\n      }\n\n      if (Ember.get(this, 'breakDuration') === '0') {\n        isValid = false;\n        this.errors.push('Break duration should be greater than 0');\n      }\n\n      return isValid;\n    },\n\n    setBreakEndTime() {\n      if (this.get('selectedDateTimeRage').startTime) {\n        const startTime = (0, _moment.default)(this.get('selectedDateTimeRage').startTime).format('hh:mm A');\n        const endTime = (0, _moment.default)(startTime, 'h:mm A').add(Ember.get(this, 'breakDuration'), 'minutes').format('hh:mm A');\n        Ember.set(this, 'breakEndTime', endTime);\n      }\n    },\n\n    actions: {\n      onUndoClick() {\n        Ember.set(this, 'breakDuration', null);\n        Ember.set(this, 'breakNote', null);\n        Ember.set(this, 'selectedBreakType', null);\n\n        if (Ember.get(this, 'selectedLocation')) {\n          Ember.set(this, 'canResetAddress', true);\n        }\n\n        Ember.set(this, 'selectedDateTimeRage.startTime', null);\n        Ember.set(this, 'breakEndTime', null);\n        Ember.set(this, 'selectedLocation', null);\n      },\n\n      onSaveClick() {\n        const isValid = this.checkValidations();\n\n        if (isValid) {\n          this.showToolTip();\n        }\n      },\n\n      onbreakTypeChange(option) {\n        Ember.set(this, 'selectedBreakType', option);\n      },\n\n      onChangeLocation(record) {\n        Ember.set(this, 'selectedLocation', record);\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        Ember.set(this, valuePath, momentTime.toISOString());\n        this.setBreakEndTime();\n      },\n\n      onDurationChange(value) {\n        Ember.set(this, 'breakDuration', value);\n        this.setBreakEndTime();\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"bi9aN9vM\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-add-break/template.hbs' @ L7:C2) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onCloseClick\\\"],[\\\"Insert Driver Break\\\",[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-add-break/template.hbs' @ L15:C3) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"   Route ID: \\\"],[1,[23,[\\\"routes\\\",\\\"routeName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n         \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[9],[1,[22,3,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"         \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-add-break/template.hbs' @ L30:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-break/template.hbs' @ L31:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Break\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select type of break\\\",true,[23,[\\\"selectedBreakType\\\"]],[23,[\\\"breakTypeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onbreakTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"63%\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"canResetAddress\\\",\\\"onPickSearch\\\",\\\"onAddressSearch\\\",\\\"disabled\\\",\\\"selectAddress\\\"],[[23,[\\\"canResetAddress\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeLocation\\\"],null],[23,[\\\"disableAddress\\\"]],[23,[\\\"selectedLocation\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,true,0,\\\"HH:MM\\\",true,[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"startofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"startTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.startTime\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Duration\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Mins\\\",[27,\\\"readonly\\\",[[23,[\\\"breakDuration\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDurationChange\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"HH:MM\\\",true,[23,[\\\"breakEndTime\\\"]]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\" \\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"placeholder\\\",\\\"optional\\\"],[12,\\\"value\\\",[21,\\\"breakNote\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"breakNote\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-break/template.hbs' @ L103:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Information\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Route Name:\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"true\\\",[23,[\\\"routes\\\",\\\"routeName\\\"]]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"true\\\",[23,[\\\"routes\\\",\\\"vehicle\\\",\\\"callsign\\\"]]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Last Name:\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"true\\\",[23,[\\\"routes\\\",\\\"driver\\\",\\\"lastname\\\"]]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver First Name:\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"true\\\",[23,[\\\"routes\\\",\\\"driver\\\",\\\"firstname\\\"]]]]],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Planned Start time:\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"routes\\\",\\\"plannedStartTime\\\"]],\\\"hh:mm A\\\"],null]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Planned End time:\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"routes\\\",\\\"plannedEndTime\\\"]],\\\"hh:mm A\\\"],null]],null]],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Actual Start time:\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"routes\\\",\\\"routeStartEvent\\\",\\\"receivedat\\\"]],\\\"hh:mm A\\\"],null]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Actual End time:\\\"],[10],[0,\\\" \\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"routes\\\",\\\"routeEndEvent\\\",\\\"receivedat\\\"]],\\\"hh:mm A\\\"],null]],null]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-add-break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-new-route/component\", [\"exports\", \"moment\", \"adept-iq/pods/components/side-drawer/reconcile-add-new-route/config\", \"ember-concurrency\", \"lodash\"], function (_exports, _moment, _config, _emberConcurrency, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    reconcile: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    vehicles: null,\n    routeId: null,\n    timeFormat: 'm-d-Y h:i K',\n    reconcileProviderName: Ember.computed.readOnly('reconcile.reconcileProviderName'),\n    reconcileTripDate: Ember.computed.readOnly('reconcile.reconcileDate'),\n    selectedRouteId: Ember.computed.readOnly('routeId'),\n    reconcileRVDResponse: Ember.computed.readOnly('reconcile.reconcileRVDResponse'),\n    // Reset map and address picker\n    canResetAddress: Ember.computed.alias('workspace.activeContext.topActiveContext.resetLocation'),\n    // routeInformation: computed.alias('reconcile.reconcileRouteInfo'),\n    canSave: Ember.computed.alias('routeId', 'selectedDateTimeRange.{startTime,endTime}', 'selectedVehicle', 'selectedDriver', 'selectedStartLocation', 'selectedEndLocation'),\n    canUndo: Ember.computed.or('routeId', 'selectedDateTimeRange.{startTime,endTime}', 'selectedVehicle', 'selectedDriver', 'selectedStartLocation', 'selectedEndLocation', 'selectedStartZone', 'selectedEndZone', 'startAddressIdentifier', 'endAddressIdentifier', 'startAddressNotes', 'endAddressNotes', 'selectedRouteType'),\n    computeFullName: Ember.computed('selectedDriver', function () {\n      const selectedDriver = this.get('selectedDriver');\n      const firstName = selectedDriver.firstname;\n      const middleName = selectedDriver.middlename;\n      const lastName = selectedDriver.lastname;\n      const fullName = `${firstName} ${middleName} ${lastName}`;\n      return fullName;\n    }),\n    routeTypeOptions: Ember.computed('selectedRouteType', function () {\n      return _config.default.routeTypes;\n    }),\n    vehicleOptions: Ember.computed('reconcile.reconcileVehicleOptions', function () {\n      const vehicleOptions = this.get('reconcile.reconcileVehicleOptions') || [];\n      return vehicleOptions;\n    }),\n    driverOptions: Ember.computed('reconcile.reconcileDriverOptions', function () {\n      const driverOptions = this.get('reconcile.reconcileDriverOptions') || [];\n      return driverOptions;\n    }),\n    zoneOptions: Ember.computed('selectedStartZone', 'selectedEndZone', function () {\n      const zones = this.store.peekAll('zone');\n      return zones.map(zone => zone);\n    }),\n\n    init() {\n      this._super();\n\n      Ember.set(this, 'selectedRadioValue', 'start');\n      Ember.set(this, 'selectedDateTimeRange', {\n        startTime: null,\n        endTime: null,\n        startOfDay: (0, _moment.default)(this.reconcileTripDate).startOf('day').toISOString(),\n        endOfDay: (0, _moment.default)(this.reconcileTripDate).endOf('day').toISOString()\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    generateId() {\n      return Math.floor(Math.random() * 1000);\n    },\n\n    buildRoutePayloadForNewRoute(reconcileDate, startAddressId, endAddressId) {\n      return {\n        'deleted$1': false,\n        'endAddressId': endAddressId,\n        'startAddressId': startAddressId,\n        'op$1': 'c',\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'plannedStartTime': this.get('selectedDateTimeRange.startTime'),\n        'plannedEndTime': this.get('selectedDateTimeRange.endTime'),\n        'id': this.get('routeId'),\n        'providerName': this.get('reconcileProviderName'),\n        'scheduleId': null,\n        'status': null,\n        'trackingId': null,\n        'actualStartTime': null,\n        'actualEndTime': null,\n        'alertId': null,\n        'otpValue': null,\n        'otpStatus': null,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      };\n    },\n\n    buildStartAddressPayloadForNewRoute(address, reconcileDate, startAddressId) {\n      return {\n        'country': address.country ? address.country : null,\n        'streetNumber': address.streetNumber ? address.streetNumber : null,\n        'subLocality': address.subLocality ? address.subLocality : null,\n        'deleted$1': false,\n        'postalCode': address.postalCode ? address.postalCode : null,\n        'locality': address.locality ? address.locality : null,\n        'op$1': 'c',\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'premise': address.premise ? address.premise : null,\n        'streetAddress': address.streetAddress ? address.streetAddress : null,\n        'id': startAddressId,\n        'zoneName': this.get('selectedStartZone.zoneId'),\n        'region': address.region ? address.region : null,\n        'alias': this.get('startAddressIdentifier') ? this.get('startAddressIdentifier') : null,\n        'subRegion': address.subRegion ? address.subRegion : null,\n        'notes': address.notes ? address.notes : null,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      };\n    },\n\n    buildEndAddressPayloadForNewRoute(address, reconcileDate, endAddressId) {\n      return {\n        'country': address.country ? address.country : null,\n        'streetNumber': address.streetNumber ? address.streetNumber : null,\n        'subLocality': address.subLocality ? address.subLocality : null,\n        'deleted$1': false,\n        'postalCode': address.postalCode ? address.postalCode : null,\n        'locality': address.locality ? address.locality : null,\n        'op$1': 'c',\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'premise': address.premise ? address.premise : null,\n        'streetAddress': address.streetAddress ? address.streetAddress : null,\n        'id': endAddressId,\n        'zoneName': this.get('selectedEndZone.zoneId'),\n        'region': address.region ? address.region : null,\n        'alias': this.get('endAddressIdentifier') ? this.get('endAddressIdentifier') : null,\n        'subRegion': address.subRegion ? address.subRegion : null,\n        'notes': address.notes ? address.notes : null,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      };\n    },\n\n    buildStartPlacePayloadForNewRoute(reconcileDate, startAddressId) {\n      return {\n        'id': this.generateId(),\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'placeCategoryTypeName': 'garage',\n        'addressId': startAddressId,\n        'locationId': this.generateId(),\n        'geocodingMethod': 'something',\n        'op$1': 'c',\n        'deleted$1': false\n      };\n    },\n\n    buildEndPlacePayloadForNewRoute(reconcileDate, endAddressId) {\n      return {\n        'id': this.generateId(),\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'placeCategoryTypeName': 'garage',\n        'addressId': endAddressId,\n        'locationId': this.generateId(),\n        'geocodingMethod': 'something',\n        'op$1': 'c',\n        'deleted$1': false\n      };\n    },\n\n    buildRvdPayloadForNewRoute(reconcileDate) {\n      return {\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'routeId': this.get('routeId'),\n        'driverId': this.get('selectedDriver.id'),\n        'deleted$1': false,\n        'startTime': this.get('selectedDateTimeRange.startTime'),\n        'id': this.generateId(),\n        'vehicleId': this.get('selectedVehicle.id'),\n        'endTime': this.get('selectedDateTimeRange.endTime'),\n        'op$1': 'c',\n        'scheduleId': null,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      };\n    },\n\n    buildReconcilePayloadForAddRoute() {\n      const reconcileDate = new Date().toISOString();\n      const startAddress = this.get('selectedStartLocation');\n      const endAddress = this.get('selectedEndLocation');\n      const startAddressId = this.generateId();\n      const endAddressId = this.generateId();\n      return {\n        'route': this.buildRoutePayloadForNewRoute(reconcileDate, startAddressId, endAddressId),\n        'address': [this.buildStartAddressPayloadForNewRoute(startAddress, reconcileDate, startAddressId), this.buildEndAddressPayloadForNewRoute(endAddress, reconcileDate, endAddressId)],\n        'place': [this.buildStartPlacePayloadForNewRoute(reconcileDate, startAddressId), this.buildEndPlacePayloadForNewRoute(reconcileDate, endAddressId)],\n        'rvd': this.buildRvdPayloadForNewRoute(reconcileDate)\n      };\n    },\n\n    saveNewRouteTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const newRoutePayload = this.buildReconcilePayloadForAddRoute();\n        const reconcile = this.get('reconcile');\n        yield reconcile.saveNewReconcileRoute(newRoutePayload);\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Add New Route';\n      const tip = 'Create Route ID ' + this.get('routeId') + '?';\n      const successMsg = 'SUCCESSFULLY CREATED NEW ROUTE ' + this.get('routeId');\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveNewRouteTask').perform().then(() => {\n            this.send('saveRouteSuccess');\n            Ember.set(this, 'workspace.activeContext.topActiveContext.resetLocation', true);\n            this.get('workspace').popState('reconcileAddNewRoute');\n            tooltip.reset();\n            this.get('notifications').success(successMsg);\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              case 409:\n                message = `The route name ${this.get('routeId')} is already taken, please try another.`;\n                break;\n\n              default:\n                message = 'There was a problem creating the route, please try again.';\n                break;\n            }\n\n            this.set('errorMessage', message);\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    calculateShiftLength() {\n      let routeLength = 0;\n      const startTime = this.get('selectedDateTimeRange').startTime;\n      const endTime = this.get('selectedDateTimeRange').endTime;\n\n      if (startTime && endTime) {\n        const duration = _moment.default.duration((0, _moment.default)(endTime).diff((0, _moment.default)(startTime)));\n\n        const hours = parseInt(duration.asHours(), 10) < 10 ? `0${parseInt(duration.asHours(), 10)}` : parseInt(duration.asHours(), 10);\n        const minutes = parseInt(duration.minutes(), 10) < 10 ? `0${parseInt(duration.minutes(), 10)}` : parseInt(duration.minutes(), 10);\n        routeLength = [hours, minutes].join(':');\n      }\n\n      Ember.set(this, 'routeLength', routeLength);\n    },\n\n    setDriverFields(selectedOption) {\n      const routeResponse = this.get('reconcile.reconcileRVDResponse');\n      const foundRouteInfo = routeResponse.find(response => {\n        return response.driver && response.driver.id === selectedOption.id;\n      });\n      const actualStartTime = (0, _moment.default)(foundRouteInfo.route.plannedstarttime).format('hh:mm A');\n      const actualEndTime = (0, _moment.default)(foundRouteInfo.route.plannedendtime).format('hh:mm A');\n      Ember.set(this, 'selectedDriver', selectedOption);\n      Ember.set(this, 'driverStartTime', actualStartTime);\n      Ember.set(this, 'driverEndTime', actualEndTime);\n      const fullName = this.get('computeFullName');\n      Ember.set(this, 'fullName', fullName);\n    },\n\n    async setVehicleFields() {\n      const store = this.get('store');\n      let selectedVehicle = this.get('selectedVehicle');\n      const vehicleDetails = store.peekRecord('vehicle', selectedVehicle.id);\n      selectedVehicle = { ...selectedVehicle,\n        vehicleType: vehicleDetails.vehicleTypeName,\n        ambulatorySeats: vehicleDetails.noOfAmbulatorySeats,\n        wheelchairSeats: vehicleDetails.noOfWheelChairSeats,\n        flexSeats: vehicleDetails.noOfFlexSeats ? vehicleDetails.noOfFlexSeats.length : 0,\n        wideWheelchair: vehicleDetails.noOfWideWheelChairSeats && vehicleDetails.noOfWideWheelChairSeats !== 0\n      };\n      this.set('selectedVehicle', selectedVehicle);\n    },\n\n    actions: {\n      onUndoClick() {\n        const startLocation = Ember.get(this, 'selectedStartLocation');\n        const endLocation = Ember.get(this, 'selectedEndLocation');\n\n        if (startLocation || endLocation) {\n          this.set('canResetAddress', true);\n        }\n\n        this.setProperties({\n          routeId: null,\n          selectedDriver: null,\n          selectedVehicle: null,\n          selectedStartLocation: null,\n          selectedEndLocation: null,\n          selectedRadioValue: 'start',\n          driverStartTime: null,\n          driverEndTime: null,\n          'selectedDateTimeRange.startTime': null,\n          'selectedDateTimeRange.endTime': null,\n          routeLength: null,\n          startAddressIdentifier: null,\n          endAddressIdentifier: null,\n          selectedStartZone: null,\n          selectedEndZone: null,\n          startAddressNotes: null,\n          endAddressNotes: null,\n          fullName: null,\n          selectedRouteType: null\n        });\n      },\n\n      onRouteTypeSelect(option) {\n        Ember.set(this, 'selectedRouteType', option);\n      },\n\n      onSaveClick() {\n        if (this.get('routeId')) {\n          this.showToolTip();\n        }\n      },\n\n      onVehicleOptionSelect(option) {\n        Ember.set(this, 'selectedVehicle', option);\n        const reconcile = this.get('reconcile');\n        const rvdResponse = reconcile.get('reconcileRVDResponse');\n        const vehicleOptions = reconcile.get('getVehicleOptions')(rvdResponse, option);\n        this.set('vehicleOptions', vehicleOptions);\n        this.setVehicleFields();\n      },\n\n      onDriverOptionSelect(option) {\n        const reconcile = this.get('reconcile');\n        const rvdResponse = reconcile.get('reconcileRVDResponse');\n        const driverOptions = reconcile.get('getDriverOptions')(rvdResponse, option);\n        this.set('driverOptions', driverOptions);\n        Ember.set(this, 'selectedDriver', option);\n        this.setDriverFields(option);\n      },\n\n      onChangeTime(valuePath, value) {\n        const valueTime = (0, _moment.default)(value[0]).format('hh:mm');\n        const selectedDate = (0, _moment.default)(this.get('reconcileTripDate')).format('MMM D, YYYY');\n        const momentTime = (0, _moment.default)(selectedDate + ' ' + valueTime);\n        this.set(valuePath, momentTime.toISOString());\n        this.calculateShiftLength();\n      },\n\n      onRadioButtonClick(val) {\n        this.set('selectedRadioValue', val);\n      },\n\n      onChangeStartLocation(record) {\n        this.set('selectedStartLocation', record);\n      },\n\n      onChangeEndLocation(record) {\n        this.set('selectedEndLocation', record);\n      },\n\n      onZoneOptionsSelect(isStart, option) {\n        if (isStart) {\n          Ember.set(this, 'selectedStartZone', option);\n        } else {\n          Ember.set(this, 'selectedEndZone', option);\n        }\n      },\n\n      async saveRouteSuccess() {\n        Ember.set(this, 'workspace.activeContext.topActiveContext.resetLocation', true);\n        const reconcile = this.get('reconcile');\n        const response = await this.reconcileLambda.getRouteVehicleDriversByTripDate.perform();\n        const reconcileRouteMap = (0, _lodash.groupBy)(response.map(rvd => rvd.route), 'providername');\n        reconcile.set('reconcileRouteMap', reconcileRouteMap);\n        reconcile.set('reconcileRVDResponse', response);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-new-route/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    editableSections: [{\n      title: 'Add Route',\n      fields: [{\n        id: 'routeId',\n        type: 'text',\n        label: 'Route ID',\n        // valuePath: 'cancelType',\n        // cellDesc: 'cancelType',\n        editable: true\n      }, {\n        id: 'date',\n        type: 'text',\n        editable: true,\n        label: 'Date' // valuePath: 'cancelNotes'\n\n      }, {\n        id: 'startTime',\n        type: 'text',\n        editable: true,\n        label: 'Start Time' // valuePath: 'cancelNotes'\n\n      }, {\n        id: 'endTime',\n        type: 'text',\n        editable: true,\n        label: 'End Time' // valuePath: 'cancelNotes'\n\n      }, {\n        id: 'provider',\n        type: 'enum',\n        editable: true,\n        label: 'Provider',\n        // valuePath: 'cancelNotes',\n        hidden: false\n      }]\n    }, {\n      title: 'Vehicle Information',\n      fields: [{\n        id: 'vehicleId',\n        label: 'Vehicle ID',\n        // valuePath: 'leg.rider.firstName',\n        editable: true,\n        type: 'enum'\n      }, {\n        id: 'vehicleType',\n        label: 'Vehicle Type',\n        // valuePath: 'leg.rider.lastName',\n        editable: true,\n        type: 'text'\n      }, {\n        id: 'wideWheelchair',\n        label: 'Wide Wheelchair',\n        // valuePath: 'id',\n        editable: true,\n        type: 'text'\n      }, {\n        id: 'wheelchairSeats',\n        label: 'Wheelchair seats',\n        // valuePath: 'formattedPromiseTime',\n        editable: true,\n        type: 'text'\n      }, {\n        id: 'ambulatorySeats',\n        label: 'Ambulatory seats',\n        // valuePath: 'pick.place.address.simpleAddress',\n        editable: true,\n        type: 'text'\n      }, {\n        id: 'flexSeats',\n        label: 'Flex seats',\n        // valuePath: 'drop.place.address.simpleAddress',\n        editable: true,\n        type: 'text'\n      }]\n    }, {\n      title: 'Driver Information',\n      fields: [{\n        id: 'driverId',\n        label: 'Driver ID',\n        type: 'enum',\n        // valuePath: 'leg.rider.firstName',\n        editable: true\n      }, {\n        id: 'driverName',\n        label: 'Driver Name',\n        type: 'text',\n        // valuePath: 'leg.rider.lastName',\n        editable: true\n      }, {\n        id: 'driverPhote',\n        label: 'Driver Photo',\n        type: 'text',\n        // valuePath: 'id',\n        editable: true\n      }, {\n        id: 'driverStartTime',\n        label: 'Driver Start Time',\n        type: 'text',\n        // valuePath: 'formattedPromiseTime',\n        editable: true\n      }, {\n        id: 'driverEndTime',\n        label: 'Driver End Time',\n        type: 'text',\n        // valuePath: 'pick.place.address.simpleAddress',\n        editable: true\n      }]\n    }, {\n      title: 'Location',\n      fields: [{\n        id: 'identifier',\n        label: 'Identifier',\n        type: 'text',\n        // valuePath: 'leg.rider.firstName',\n        editable: true\n      }, {\n        id: 'address',\n        label: 'Address',\n        type: 'enum',\n        // valuePath: 'leg.rider.lastName',\n        editable: true\n      }, {\n        id: 'zone',\n        label: 'Zone',\n        type: 'enum',\n        // valuePath: 'id',\n        editable: true\n      }, {\n        id: 'notes',\n        label: 'Notes',\n        type: 'text',\n        // valuePath: 'formattedPromiseTime',\n        editable: true\n      }]\n    }],\n    routeTypes: [{\n      id: 1,\n      name: 'Regular'\n    }, {\n      id: 2,\n      name: 'Breakdown'\n    }, {\n      id: 3,\n      name: 'Breakdown Replacement'\n    }, {\n      id: 4,\n      name: 'Rescue'\n    }, {\n      id: 5,\n      name: 'Rescue Replacement'\n    }, {\n      id: 6,\n      name: 'Keeper'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-new-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3NiuLtBn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base reconcile-add-new-route\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onCloseClick\\\"],[\\\"Add New Route\\\",[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L13:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Route: \\\"],[1,[21,\\\"selectedRouteId\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L19:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L20:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Add Route\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0 p-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"extra\\\"],[[23,[\\\"routeId\\\"]],\\\"Enter Route ID\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"routeId\\\"]]],null]],null],[27,\\\"hash\\\",null,[[\\\"max\\\"],[30]]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"reconcileTripDate\\\"]],\\\"MM-DD-YYYY\\\"],null]],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRange\\\",\\\"startOfDay\\\"]],[23,[\\\"selectedDateTimeRange\\\",\\\"endOfDay\\\"]],[23,[\\\"selectedDateTimeRange\\\",\\\"startTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRange.startTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"edit-cell data-test-breakdownTime-input\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRange\\\",\\\"startTime\\\"]],[23,[\\\"selectedDateTimeRange\\\",\\\"endOfDay\\\"]],[23,[\\\"selectedDateTimeRange\\\",\\\"endTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRange.endTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Route Type\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"placeholder\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"name\\\",true,\\\"select route type\\\",[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedRouteType\\\",\\\"id\\\"]],[23,[\\\"routeTypeOptions\\\"]]],null],[23,[\\\"routeTypeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"reconcileProviderName\\\"]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Shift Length\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"routeLength\\\"]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L108:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Vehicle Information\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0 p-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select a vehicle\\\",\\\"callsign\\\",true,[23,[\\\"selectedVehicle\\\"]],true,[23,[\\\"vehicleOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onVehicleOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,5,[\\\"callsign\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Type\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[28,[[23,[\\\"selectedVehicle\\\",\\\"vehicleType\\\"]]]]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Wide Wheelchair\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"mr-1\\\"],[12,\\\"disabled\\\",true],[12,\\\"checked\\\",[23,[\\\"selectedVehicle\\\",\\\"wideWheelchair\\\"]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Wheelchair Seats\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"wheelchairSeats\\\"]]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Ambulatory Seats\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"ambulatorySeats\\\"]]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Flex Seats\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"flexSeats\\\"]]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"LIFO\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"lifo\\\"]]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L156:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Driver Information\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0 p-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select a driver\\\",\\\"badgenumber\\\",true,[23,[\\\"selectedDriver\\\"]],[23,[\\\"driverOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDriverOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,4,[\\\"badgenumber\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"fullName\\\"]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Phone\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"selectedDriver\\\",\\\"phoneNumber\\\"]]],[12,\\\"disabled\\\",true],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Start Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"driverStartTime\\\"]]]]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver End Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"driverEndTime\\\"]]]]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs' @ L192:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Location\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0 mtm-38 p-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"location-start-end\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-check form-check-inline\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"start\\\",[23,[\\\"selectedRadioValue\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"start\\\"],null],\\\"radio-button-input form-check form-check-label\\\"]],{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"span\\\"],[9],[0,\\\"Start\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-check form-check-inline\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"end\\\",[23,[\\\"selectedRadioValue\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"end\\\"],null],\\\"radio-button-input form-check form-check-label\\\"]],{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"span\\\"],[9],[0,\\\"End\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRadioValue\\\"]],\\\"start\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"pt-3\\\"],[9],[0,\\\"Identifier\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"pt-3\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"startAddressIdentifier\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"startAddressIdentifier\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"63%\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"onPickSearch\\\",\\\"onAddressSearch\\\",\\\"removeMarker\\\",\\\"canResetAddress\\\",\\\"selectAddress\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onChangeStartLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeStartLocation\\\"],null],true,[23,[\\\"canResetAddress\\\"]],[23,[\\\"selectedStartLocation\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Zones\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[[23,[\\\"option\\\"]],true,[23,[\\\"selectedStartZone\\\"]],[23,[\\\"zoneOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneOptionsSelect\\\",true],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,3,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"startAddressNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"startAddressNotes\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRadioValue\\\"]],\\\"end\\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"pt-3\\\"],[9],[0,\\\"Identifier\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"pt-3\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"endAddressIdentifier\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"endAddressIdentifier\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"63%\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"onPickSearch\\\",\\\"onAddressSearch\\\",\\\"removeMarker\\\",\\\"canResetAddress\\\",\\\"selectAddress\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onChangeEndLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeEndLocation\\\"],null],true,[23,[\\\"canResetAddress\\\"]],[23,[\\\"selectedEndLocation\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Zones\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[[23,[\\\"option\\\"]],true,[23,[\\\"selectedEndZone\\\"]],[23,[\\\"zoneOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneOptionsSelect\\\",false],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,2,[\\\"displayName\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"endAddressNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"endAddressNotes\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"style\\\"],[9],[0,\\\"\\\\n  .reconcile-add-new-route .g-side-drawer-panel .g-side-drawer-panel-form th {\\\\n    text-align: left;\\\\n  }\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-add-new-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-new-trip/component\", [\"exports\", \"moment\", \"adept-iq/pods/components/side-drawer/reconcile-add-new-trip/stubs\", \"ember-concurrency\"], function (_exports, _moment, _stubs, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ADDRESS_TYPE = 'primary';\n  const DEFAULT_TRAVEL_NEED = 'ambulatory';\n  const PCA = 'pca';\n  const SERVICE_ANIMAL = 'serviceanimal';\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    session: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    defaultFare: 2.75,\n    stubs: _stubs.default,\n    onCloseClick: null,\n    coordinates: null,\n    travelNeedsOptionsCount: 0,\n    selectedNeedsOptions: null,\n    selectedPickLocation: null,\n    selectedDropLocation: null,\n    passengerPickAddress: null,\n    pickAnchorType: null,\n    dropAnchorType: null,\n    selectedTripDate: Ember.computed.alias('reconcile.reconcileDate'),\n    isPcaChecked: false,\n    isServiceAnimalChecked: false,\n    // Reset map and address picker\n    canResetAddress: Ember.computed.alias('workspace.activeContext.topActiveContext.resetLocation'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    isEditStart: Ember.computed.alias('isEditingStart'),\n    passengerDetails: Ember.computed.readOnly('stackFrame.options.selectedRow'),\n    reconcileRouteStartTime: Ember.computed.readOnly('reconcile.reconcileRouteDetails.actualStartTime'),\n    reconcileRouteEndTime: Ember.computed.readOnly('reconcile.reconcileRouteDetails.actualEndTime'),\n    passengerTravelNeeds: Ember.computed.readOnly('passengerDetails.travelNeeds'),\n    reconcileRouteInfo: Ember.computed.readOnly('reconcile.reconcileRouteInfo'),\n    lastRowClickedInTripTable: Ember.computed.readOnly('reconcile.lastRowClickedInTripTable'),\n    canPlus: Ember.computed('travelNeedsOptions', 'travelNeedsOptionsCount', function () {\n      return Ember.get(this, 'travelNeedsOptionsCount') < Ember.get(this, 'travelNeedsOptions').length;\n    }),\n    anchorOptions: Ember.computed('workspaceData', 'selectedAnchor', function () {\n      const anchorOptionsData = _stubs.default.anchorData;\n      return anchorOptionsData;\n    }),\n    cloneSelectedNeedsOptions: Ember.computed('selectedNeedsOptions', function () {\n      const selectedNeedsOptions = this.get('selectedNeedsOptions');\n      return selectedNeedsOptions.map(sno => {\n        return Ember.Object.create({ ...sno\n        });\n      });\n    }),\n    travelNeedOptionsWithFilter: Ember.computed('cloneSelectedNeedsOptions.@each.name', 'travelNeedsOptions', function () {\n      const travelNeedsOptions = this.get('travelNeedsOptions').map(e => {\n        return e;\n      });\n      const filteredOptions = travelNeedsOptions.filter(sno => sno.name.toLowerCase() !== PCA && sno.name.toLowerCase() !== SERVICE_ANIMAL);\n      const selectedValueInTravelNeeds = this.get('cloneSelectedNeedsOptions') || null;\n      const travelNeedOptions = filteredOptions.filter(e => {\n        return !selectedValueInTravelNeeds.find(stn => {\n          return stn.name.toLowerCase() === e.name.toLowerCase();\n        });\n      });\n      return travelNeedOptions.map(tno => {\n        return { ...tno,\n          name: tno.name.toUpperCase()\n        };\n      });\n    }),\n    companionOptions: Ember.computed('workspaceData', 'selectedNoOfCompanions', function () {\n      const companions = _stubs.default.companions;\n      return companions;\n    }),\n    selectedPickAddress: Ember.computed('passengerPickAddress', function () {\n      const passengerPickAddress = this.get('passengerPickAddress');\n      const selectedStreetAddress = passengerPickAddress.address.streetAddress;\n      const selectedLocality = passengerPickAddress.address.locality;\n      const selectedStreetNumber = passengerPickAddress.address.streetNumber;\n      return `${selectedStreetNumber},${selectedStreetAddress},${selectedLocality}`;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.coordinates = {\n        lat: null,\n        lng: null\n      };\n      Ember.set(this, 'selectedDate', {\n        today: (0, _moment.default)().subtract(1, 'day').format('MM-DD-YYYY'),\n        date: null,\n        endDateSelection: (0, _moment.default)(this.get('selectedTripDate')).add(2, 'day').startOf('day').toISOString()\n      });\n      const travelNeedsOptions = this.store.peekAll('cs-config-item').filter(config => {\n        return config.category === 'config-System_Configuration-travel_need_types';\n      });\n      travelNeedsOptions.map(option => {\n        return option.data.displayName;\n      });\n      this.set('travelNeedsOptions', travelNeedsOptions);\n      const passengerAddressDetails = this.get('passengerDetails.address');\n      const foundAddress = passengerAddressDetails.find(address => address.type.toLowerCase() === ADDRESS_TYPE);\n      this.set('passengerPickAddress', foundAddress);\n      this.setProperties({\n        shiftTimeRange: {\n          pickTime: null,\n          dropTime: null,\n          startofday: (0, _moment.default)(this.get('selectedDate.date')).startOf('day').toISOString(),\n          endofday: (0, _moment.default)(this.get('selectedDate.date')).endOf('day').toISOString()\n        },\n        displayAmbulatory: true,\n        isDisableDatePicker: true,\n        isTimeDisable: true,\n        isEnableServiceAnimal: false,\n        isPcaChecked: false,\n        isServiceAnimalChecked: false,\n        isEditingStart: false,\n        serviceNeeds: this.get('passengerDetails.serviceNeeds')\n      });\n      this.setDefaultTravelNeeds();\n      this.setDefaultPickupLocation();\n      this.isPcaAvail();\n      this.isServiceAnimalAvail();\n      this.setLoadAndUnLoadTime();\n      this.defaultSelectedTravelNeeds();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    defaultSelectedTravelNeeds() {\n      const travelNeedDetails = this.get('passengerDetails.travelNeeds');\n\n      if (travelNeedDetails) {\n        const travelNeed = travelNeedDetails.map(e => {\n          return {\n            name: e.type,\n            cnt: null\n          };\n        });\n        this.set('selectedTravelNeedsForPayload', travelNeed);\n      } else {\n        this.set('selectedTravelNeedsForPayload', []);\n      }\n    },\n\n    async setDefaultPickupLocation() {\n      if (this.get('passengerDetails.address')) {\n        this.set('selectedPickLocation', {\n          freeformAddress: this.get('selectedPickAddress'),\n          lat: this.get('coordinates.lat'),\n          lng: this.get('coordinates.lng')\n        });\n        const geoNode = await this.getGeoNode(this.get('selectedPickLocation'));\n        this.set('selectedPickLocation.zoneId', geoNode.zone.zoneName);\n      }\n    },\n\n    setLoadAndUnLoadTime() {\n      this.set('loadTime', this.get('passengerDetails.loadTime'));\n      this.set('UnloadTime', this.get('passengerDetails.UnloadTime'));\n    },\n\n    searchTask: (0, _emberConcurrency.task)(function* () {\n      const passengerAddress = this.get('passengerDetails.address'); // can't do a blank search\n\n      if (Ember.isEmpty(passengerAddress)) {\n        return;\n      }\n\n      const results = yield this.get('geocode').getGeonode(passengerAddress);\n\n      if (results && results.attributes && results.attributes.coordinates) {\n        this.set('coordinates', results.attributes.coordinates);\n      }\n    }),\n\n    generateRandomId() {\n      return Math.floor(Math.random() * 10000);\n    },\n\n    buildArriveAndDepartEventResForPayload(reconcileRouteInfo, reconcileDate, randomIds) {\n      return [{\n        'id': randomIds.startEventId,\n        'routeId': reconcileRouteInfo.routeid,\n        'driverId': reconcileRouteInfo.driver.id,\n        'vehicleId': reconcileRouteInfo.vehicle.id,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'stopPointId': randomIds.pickStopPointId,\n        'odo': null,\n        'speed': null,\n        'heading': null,\n        'eventType': this.get('lastRowClickedInTripTable.arriveEvent.eventtype'),\n        'actionType': this.get('lastRowClickedInTripTable.arriveEvent.actiontype'),\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'receivedAt': null,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': randomIds.endEventId,\n        'routeId': reconcileRouteInfo.routeid,\n        'driverId': reconcileRouteInfo.driver.id,\n        'vehicleId': reconcileRouteInfo.vehicle.id,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'stopPointId': randomIds.dropStopPointId,\n        'odo': null,\n        'speed': null,\n        'heading': null,\n        'eventType': this.get('lastRowClickedInTripTable.departEvent.eventtype'),\n        'actionType': this.get('lastRowClickedInTripTable.departEvent.actiontype'),\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'receivedAt': null,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': randomIds.startEventId,\n        'routeId': reconcileRouteInfo.routeid,\n        'driverId': reconcileRouteInfo.driver.id,\n        'vehicleId': reconcileRouteInfo.vehicle.id,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'stopPointId': randomIds.pickStopPointId,\n        'odo': null,\n        'speed': null,\n        'heading': null,\n        'eventType': this.get('lastRowClickedInTripTable.arriveEvent.eventtype'),\n        'actionType': this.get('lastRowClickedInTripTable.arriveEvent.actiontype'),\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'receivedAt': null,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': randomIds.endEventId,\n        'routeId': reconcileRouteInfo.routeid,\n        'driverId': reconcileRouteInfo.driver.id,\n        'vehicleId': reconcileRouteInfo.vehicle.id,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'stopPointId': randomIds.dropStopPointId,\n        'odo': null,\n        'speed': null,\n        'heading': null,\n        'eventType': this.get('lastRowClickedInTripTable.departEvent.eventtype'),\n        'actionType': this.get('lastRowClickedInTripTable.departEvent.actiontype'),\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'receivedAt': null,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }];\n    },\n\n    buildStartAddressResForPayload(reconcileRouteInfo, reconcileDate, randomIds) {\n      const passengerPickAddress = this.get('passengerPickAddress');\n      const selectedPickLocation = this.get('selectedPickLocation');\n      return {\n        'id': randomIds.startAddressId,\n        'streetName': selectedPickLocation.streetAddress ? selectedPickLocation.streetAddress : passengerPickAddress.address.streetAddress,\n        'streetNumber': selectedPickLocation.streetNumber ? selectedPickLocation.streetNumber : passengerPickAddress.address.streetNumber,\n        'postalCode': selectedPickLocation.postalCode ? selectedPickLocation.postalCode : passengerPickAddress.address.postalCode,\n        'locality': selectedPickLocation.locality ? selectedPickLocation.locality : passengerPickAddress.address.locality,\n        'region': selectedPickLocation.region ? selectedPickLocation.region : passengerPickAddress.address.region,\n        'latitude': selectedPickLocation.lat ? selectedPickLocation.lat : passengerPickAddress.address.lat,\n        'longitude': selectedPickLocation.lng ? selectedPickLocation.lng : passengerPickAddress.address.lng,\n        'formattedAddress': this.get('selectedPickLocation.freeformAddress'),\n        'zoneId': selectedPickLocation.zoneId,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      };\n    },\n\n    buildEndAddressResForPayload(reconcileRouteInfo, reconcileDate, randomIds) {\n      const selectedDropLocation = this.get('selectedDropLocation');\n      return {\n        'id': randomIds.endAddressId,\n        'streetName': selectedDropLocation.streetAddress,\n        'streetNumber': selectedDropLocation.streetNumber,\n        'postalCode': selectedDropLocation.postalCode,\n        'locality': selectedDropLocation.locality,\n        'region': selectedDropLocation.region,\n        'latitude': selectedDropLocation.lat,\n        'longitude': selectedDropLocation.lng,\n        'formattedAddress': selectedDropLocation.freeformAddress,\n        'zoneId': selectedDropLocation.zoneId,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      };\n    },\n\n    buildRiderEventResForPayload(reconcileRouteInfo, passengerRes, reconcileDate, randomIds) {\n      return [{\n        'id': randomIds.startEventId,\n        'stopPointId': randomIds.pickStopPointId,\n        'scheduledTime': this.shiftTimeRange.pickTime,\n        'type': this.get('pickAnchorType') ? this.get('pickAnchorType') : null,\n        'riderId': passengerRes.passengerId,\n        'anchor': null,\n        'promisedTime': null,\n        'serviceStartTime': this.shiftTimeRange.pickTime,\n        'serviceEndTime': this.shiftTimeRange.dropTime,\n        'deleted': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': randomIds.endEventId,\n        'stopPointId': randomIds.dropStopPointId,\n        'scheduledTime': this.shiftTimeRange.dropTime,\n        'type': this.get('dropAnchorType') ? this.get('dropAnchorType') : null,\n        'riderId': passengerRes.passengerId,\n        'anchor': null,\n        'promisedTime': null,\n        'serviceStartTime': this.shiftTimeRange.pickTime,\n        'serviceEndTime': this.shiftTimeRange.dropTime,\n        'deleted': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }];\n    },\n\n    buildAttributeResForPayload(reconcileRouteInfo, reconcileDate) {\n      const travelNeeds = this.get('selectedTravelNeedsForPayload');\n      return travelNeeds.map(ele => {\n        return {\n          'id': this.generateRandomId(),\n          'type': ele.name,\n          'createdAt': reconcileDate,\n          'updatedAt': reconcileDate,\n          'dbVersion': null,\n          'op$1': reconcileRouteInfo.op$1,\n          'deleted$1': false,\n          'reconcileDate': reconcileDate,\n          'isReconciled': true,\n          'reconciliationNotes': null\n        };\n      });\n    },\n\n    buildStopPointResForPayload(reconcileRouteInfo, reconcileDate, randomIds) {\n      return [{\n        'id': randomIds.pickStopPointId,\n        'tripId': randomIds.tripId,\n        'routeIndex': null,\n        'addressId': randomIds.startAddressId,\n        'clusterId': null,\n        'eta': this.shiftTimeRange.dropTime,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'status': null,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }, {\n        'id': randomIds.dropStopPointId,\n        'tripId': randomIds.tripId,\n        'routeIndex': null,\n        'addressId': randomIds.endAddressId,\n        'clusterId': null,\n        'eta': this.shiftTimeRange.dropTime,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'status': null,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRouteResFromRVDForPayload(reconcileRouteInfo, rvdResponse, reconcileDate) {\n      return {\n        'deleted$1': false,\n        'endAddressId': rvdResponse.route.endaddressid,\n        'startAddressId': rvdResponse.route.startaddressid,\n        'version': 1,\n        'op$1': reconcileRouteInfo.op$1,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'plannedStartTime': rvdResponse.route.plannedstarttime,\n        'plannedEndTime': rvdResponse.route.plannedendtime,\n        'id': rvdResponse.route.id,\n        'providerName': rvdResponse.route.providername,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'status': rvdResponse.route.status,\n        'trackingId': rvdResponse.route.trackingid,\n        'actualStartTime': reconcileRouteInfo.routeStartEvent.receivedat,\n        'actualEndTime': reconcileRouteInfo.routeEndEvent.receivedat,\n        'alertId': rvdResponse.route.alertid,\n        'otpValue': rvdResponse.route.otpvalue,\n        'otpStatus': rvdResponse.route.otpstatus,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': rvdResponse.route.reconciliationnotes\n      };\n    },\n\n    buildTripResForPayload(reconcileRouteInfo, reconcileDate, randomIds) {\n      return {\n        'id': randomIds.tripId,\n        'routeId': reconcileRouteInfo.routeid,\n        'status': null,\n        'externalId': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildTripPaymentResForPayload(reconcileDate, randomIds, tripPaymentRes) {\n      return {\n        'id': randomIds.tripPaymentId,\n        'tripId': randomIds.tripId,\n        'time': null,\n        'fare': null,\n        'componentAmount': null,\n        'scheduleId': tripPaymentRes.scheduleId,\n        'componentName': null,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': tripPaymentRes.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildRiderResForPayload(passengerRes, reconcileDate, randomIds, reconcileRVDResponse, reconcileRouteInfo) {\n      return {\n        'id': passengerRes.passengerId,\n        'name': passengerRes.fullName,\n        'firstName': passengerRes.firstName,\n        'lastName': passengerRes.lastName,\n        'middleName': passengerRes.middleName,\n        'passengerTypeName': 'C',\n        'bookingClientId': null,\n        'tripId': randomIds.tripId,\n        'providerName': reconcileRVDResponse.route.providername,\n        'op$1': reconcileRouteInfo.op$1,\n        'deleted$1': false,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildEventAttributesForPayload(reconcileRouteInfo, reconcileDate, randomIds) {\n      return [{\n        'id': randomIds.eventAttributeId,\n        'eventId': randomIds.startEventId,\n        'attributeId': null,\n        'attributeCount': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      }, {\n        'id': randomIds.eventAttributeId,\n        'eventId': randomIds.endEventId,\n        'attributeId': null,\n        'attributeCount': null,\n        'scheduleId': reconcileRouteInfo.scheduleRoute.scheduleid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': reconcileRouteInfo.op$1,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      }];\n    },\n\n    buildReconcileTripPayload() {\n      const reconcileRouteInfo = this.get('reconcileRouteInfo');\n      const reconcileRVDResponse = this.get('reconcile.reconcileRVDResponse').find(route => route.routeid === parseInt(reconcileRouteInfo.routeid, 10));\n      const reconcileDate = new Date().toISOString();\n      const passengerRes = this.get('passengerDetails');\n      const tripPaymentRes = this.get('reconcile.lastRowClickedInTripTable');\n      const randomIds = {\n        startEventId: this.generateRandomId(),\n        endEventId: this.generateRandomId(),\n        startAddressId: this.generateRandomId(),\n        endAddressId: this.generateRandomId(),\n        attributeId: this.generateRandomId(),\n        pickStopPointId: this.generateRandomId(),\n        dropStopPointId: this.generateRandomId(),\n        eventAttributeId: this.generateRandomId(),\n        tripId: this.generateRandomId(),\n        tripPaymentId: this.generateRandomId()\n      };\n      return {\n        'events': this.buildArriveAndDepartEventResForPayload(reconcileRouteInfo, reconcileDate, randomIds),\n        'address': [this.buildStartAddressResForPayload(reconcileRouteInfo, reconcileDate, randomIds), this.buildEndAddressResForPayload(reconcileRouteInfo, reconcileDate, randomIds)],\n        'riderEvents': this.buildRiderEventResForPayload(reconcileRouteInfo, passengerRes, reconcileDate, randomIds),\n        'attributes': this.buildAttributeResForPayload(reconcileRouteInfo, reconcileDate),\n        'stopPoint': this.buildStopPointResForPayload(reconcileRouteInfo, reconcileDate, randomIds),\n        'route': this.buildRouteResFromRVDForPayload(reconcileRouteInfo, reconcileRVDResponse, reconcileDate),\n        'trip': this.buildTripResForPayload(reconcileRouteInfo, reconcileDate, randomIds),\n        'tripPayment': this.buildTripPaymentResForPayload(reconcileDate, randomIds, tripPaymentRes),\n        'rider': this.buildRiderResForPayload(passengerRes, reconcileDate, randomIds, reconcileRVDResponse, reconcileRouteInfo),\n        'eventAttributes': this.buildEventAttributesForPayload(reconcileRouteInfo, reconcileDate, randomIds)\n      };\n    },\n\n    saveAddTripTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const payload = this.buildReconcileTripPayload();\n        const reconcile = this.get('reconcile');\n        return yield reconcile.saveNewTrip(payload);\n      } catch (e) {\n        throw e;\n      }\n    }),\n\n    showToolTip(title, tip, successMsg) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveAddTripTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('reconcileAddNewTrip');\n            tooltip.reset();\n            this.get('notifications').success(successMsg);\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem creating the trip, please try again.';\n                break;\n            }\n\n            this.set('errorMessage', message);\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    checkValidations() {\n      const routeStartTime = (0, _moment.default)(this.get('reconcileRouteInfo.routeStartEvent.receivedat')).format('HH:mm');\n      const routeEndTime = (0, _moment.default)(this.get('reconcileRouteInfo.routeEndEvent.receivedat')).format('HH:mm');\n      const currentPickTime = this.get('shiftTimeRange.pickTime') ? (0, _moment.default)(this.get('shiftTimeRange.pickTime')).format('HH:mm') : '';\n      const currentDropTime = this.shiftTimeRange.dropTime ? (0, _moment.default)(this.get('shiftTimeRange.dropTime')).format('HH:mm') : '';\n      const selectedDropLocation = this.get('selectedDropLocation.freeformAddress') || '';\n      const selectedPickLocation = this.get('selectedPickLocation.freeformAddress') || '';\n\n      if (!selectedPickLocation || !selectedDropLocation || !this.get('selectedAnchor')) {\n        this.set('errorMessage', 'Please fill out the trip details before saving.');\n        return false;\n      } else if (!currentPickTime && !currentDropTime) {\n        this.set('errorMessage', 'Please fill the anchor time before saving.');\n        return false;\n      }\n\n      if (currentPickTime) {\n        if (currentPickTime < routeStartTime) {\n          this.set('errorMessage', 'Pickup time can not be less than route start time');\n          return false;\n        }\n\n        if (currentPickTime > routeEndTime) {\n          this.set('errorMessage', 'Pickup time can not be greater than route end time');\n          return false;\n        }\n      }\n\n      if (currentDropTime) {\n        if (currentDropTime > routeEndTime) {\n          this.set('errorMessage', 'Dropoff time can not be greater than route end time');\n          return false;\n        }\n\n        if (currentDropTime < routeStartTime) {\n          this.set('errorMessage', 'Dropoff time can not be less than route start time');\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    setDefaultTravelNeeds() {\n      const travelNeeds = this.get('passengerTravelNeeds').map(e => {\n        return {\n          name: e.type,\n          cnt: e.cnt\n        };\n      });\n      this.setProperties({\n        isEnableCheckbox: false,\n        selectedNoOfCompanions: {\n          id: 0,\n          name: 0,\n          value: 0\n        },\n        isPcaChecked: false,\n        isServiceAnimalChecked: false,\n        selectedNeedsOptions: this.convertToEmberObject(travelNeeds)\n      });\n      this.calculateFare();\n    },\n\n    convertToEmberObject(travelNeeds) {\n      return travelNeeds.filter(tn => {\n        return tn.name.toLowerCase() !== PCA && tn.name.toLowerCase() !== SERVICE_ANIMAL;\n      }).map(e => {\n        return Ember.Object.create(e);\n      });\n    },\n\n    findAmbulatoryObj(tnResponse) {\n      return tnResponse.find(tn => tn.name.toLowerCase() === DEFAULT_TRAVEL_NEED);\n    },\n\n    calculateFare() {\n      let fare = 0;\n      const cloneSelectedNeedsOptions = this.get('cloneSelectedNeedsOptions');\n      const ambulatoryOption = this.findAmbulatoryObj(cloneSelectedNeedsOptions);\n\n      if (ambulatoryOption && ambulatoryOption.cnt > 0) {\n        fare += ambulatoryOption.cnt * this.defaultFare;\n      }\n\n      Ember.set(this, 'expectedFare', `$${fare}`);\n      return fare;\n    },\n\n    handleAmbulatoryCount() {\n      const companionOption = Ember.get(this, 'selectedNoOfCompanions');\n      const selectedNeedsOptions = this.get('selectedNeedsOptions');\n      const cloneSelectedNeedsOptions = this.get('cloneSelectedNeedsOptions');\n      const ambulatoryObj = this.findAmbulatoryObj(selectedNeedsOptions);\n      const updatedValue = ambulatoryObj.cnt + companionOption.value;\n      const cloneAmbulatoryObj = cloneSelectedNeedsOptions.find(x => x.name.toLowerCase() === ambulatoryObj.name.toLowerCase());\n      cloneAmbulatoryObj.set('cnt', updatedValue);\n      const ambulatoryIndex = cloneSelectedNeedsOptions.findIndex(x => x.name.toLowerCase() === DEFAULT_TRAVEL_NEED);\n      cloneSelectedNeedsOptions.splice(ambulatoryIndex, 1, cloneAmbulatoryObj);\n      this.set('cloneSelectedNeedsOptions', cloneSelectedNeedsOptions);\n      this.calculateFare();\n    },\n\n    isPcaAvail() {\n      const travelNeedsOptions = this.get('passengerDetails.travelNeeds');\n      const pcaTravelNeeds = travelNeedsOptions.find(tn => tn.type.toLowerCase() === PCA);\n\n      if (pcaTravelNeeds) {\n        this.set('isPcaChecked', true);\n      }\n    },\n\n    isServiceAnimalAvail() {\n      const travelNeedsOptions = this.get('passengerDetails.travelNeeds');\n      const serviceAnimalTravelNeeds = travelNeedsOptions.find(tn => tn.type === SERVICE_ANIMAL);\n\n      if (serviceAnimalTravelNeeds) {\n        this.set('isServiceAnimalChecked', true);\n      }\n    },\n\n    getGeoNode(selectedAddress) {\n      const geocode = this.get('geocode');\n      return geocode.getGeonode(selectedAddress.beNomadAddress).then(result => {\n        return result;\n      });\n    },\n\n    buildPcaAndServiceAnimalTravelNeedForPayload(travelNeedType, checkBoxCheckedValue) {\n      const passengerTravelNeeds = this.get('selectedTravelNeedsForPayload');\n      const foundTravelNeed = passengerTravelNeeds.find(travelNeed => travelNeed.name.toLowerCase() === travelNeedType);\n\n      if (checkBoxCheckedValue && foundTravelNeed) {\n        return;\n      }\n\n      if (checkBoxCheckedValue && !foundTravelNeed) {\n        passengerTravelNeeds.pushObject({\n          name: travelNeedType.toUpperCase(),\n          cnt: Ember.get(this, 'travelNeedsOptionsCount') + 1\n        });\n        return;\n      }\n\n      passengerTravelNeeds.removeObject(foundTravelNeed);\n    },\n\n    actions: {\n      onAnchorSelect(option) {\n        Ember.set(this, 'isEditingStart', true);\n        const anchorSelectedVal = option.name;\n\n        if (anchorSelectedVal && anchorSelectedVal.toLowerCase() === 'pick') {\n          this.set('pickAnchorType', 'P');\n          this.set('isDisableDatePicker', false);\n        }\n\n        if (anchorSelectedVal && anchorSelectedVal.toLowerCase() === 'drop') {\n          this.set('dropAnchorType', 'D');\n          this.set('isDisableDatePicker', false);\n        }\n\n        Ember.set(this, 'selectedAnchor', option);\n      },\n\n      onSelectCompanion(option) {\n        Ember.set(this, 'isEditingStart', true);\n        Ember.set(this, 'selectedNoOfCompanions', option);\n        this.handleAmbulatoryCount();\n      },\n\n      addTravelNeedItem() {\n        Ember.set(this, 'isEditingStart', true);\n        Ember.set(this, 'travelNeedsOptionsCount', Ember.get(this, 'travelNeedsOptionsCount') + 1);\n        this.get('cloneSelectedNeedsOptions').pushObject(Ember.Object.create({\n          cnt: Ember.get(this, 'travelNeedsOptionsCount'),\n          name: ''\n        }));\n      },\n\n      onUndoClick() {\n        this.geocode.deactivateGeocode();\n        this.setDefaultPickupLocation();\n        this.setDefaultTravelNeeds();\n        this.set('isEditingStart', false);\n        Ember.set(this, 'pickNotes', '');\n        Ember.set(this, 'dropNotes', '');\n        Ember.set(this, 'selectedAnchor', '');\n        Ember.set(this, 'travelNeedsOptionsCount', 0);\n        this.set('selectedDropLocation', {\n          freeformAddress: null\n        });\n        Ember.set(this, 'selectedDate.date', null);\n        Ember.set(this, 'shiftTimeRange.pickTime', null);\n        Ember.set(this, 'shiftTimeRange.dropTime', null);\n        this.set('isDisableDatePicker', true);\n        this.set('isTimeDisable', true);\n        this.set('cloneSelectedNeedsOptions', this.get('selectedNeedsOptions'));\n        this.set('loadTime', this.get('passengerDetails.loadTime'));\n        this.set('UnloadTime', this.get('passengerDetails.UnloadTime'));\n        this.calculateFare();\n        this.defaultSelectedTravelNeeds();\n        this.isPcaAvail();\n        this.isServiceAnimalAvail();\n      },\n\n      onSaveClick() {\n        if (!this.checkValidations()) {\n          return false;\n        }\n\n        this.set('errorMessage', null);\n        this.set('errorMessage2', null);\n        const title = 'Add New Trip';\n        const tip = 'Would you like to add this new trip?';\n        const successMsg = 'NEW TRIP ADDED SUCCESSFULLY';\n        this.showToolTip(title, tip, successMsg);\n      },\n\n      onDateChange(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set('isTimeDisable', false);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      onTimeChange(valuePath, value) {\n        Ember.set(this, 'isEditingStart', true);\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      async onChangePickLocation(record) {\n        Ember.set(this, 'isEditingStart', true);\n        const geoNode = await this.getGeoNode(record);\n        record.set('zoneId', geoNode.zone.zoneName);\n        this.set('selectedPickLocation', record);\n      },\n\n      async onChangeDropLocation(record) {\n        Ember.set(this, 'isEditingStart', true);\n        const geoNode = await this.getGeoNode(record);\n        record.set('zoneId', geoNode.zone.zoneName);\n        this.set('selectedDropLocation', record);\n      },\n\n      onDeleteTravelNeeds(selectedNeed) {\n        Ember.set(this, 'isEditingStart', true);\n        const selectedNeedsOptions = this.get('cloneSelectedNeedsOptions');\n        const foundTravelNeed = selectedNeedsOptions.find(sno => sno.name === selectedNeed.name || null);\n        selectedNeedsOptions.removeObject(foundTravelNeed);\n      },\n\n      onPcaChanged() {\n        Ember.set(this, 'isEditingStart', true);\n        this.toggleProperty('isPcaChecked');\n        this.buildPcaAndServiceAnimalTravelNeedForPayload(PCA, this.get('isPcaChecked'));\n      },\n\n      onServiceAnimalChanged() {\n        Ember.set(this, 'isEditingStart', true);\n        this.toggleProperty('isServiceAnimalChecked');\n        this.buildPcaAndServiceAnimalTravelNeedForPayload(SERVICE_ANIMAL, this.get('isServiceAnimalChecked'));\n      },\n\n      onRefreshFare() {\n        this.calculateFare();\n      },\n\n      oninputTextChange(type, value) {\n        Ember.set(this, 'isEditingStart', true);\n\n        switch (type) {\n          case _stubs.default.LOAD_TIME:\n            this.set('loadTime', value);\n            break;\n\n          case _stubs.default.UNLOAD_TIME:\n            this.set('unloadTime', value);\n            break;\n\n          case _stubs.default.PICK_NOTES:\n            Ember.set(this, 'pickNotes', value);\n            break;\n\n          case _stubs.default.DROP_NOTES:\n            Ember.set(this, 'dropNotes', value);\n            break;\n\n          case _stubs.default.SELECTEDNEED_CNT:\n            Ember.set(this, 'cloneSelectedNeedsOptions[cnt]', value);\n            break;\n\n          default:\n        }\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      },\n\n      onCloseButtonClick() {\n        this.onCloseClick();\n      },\n\n      onTravelNeedOptionSelect(valuePath, value) {\n        this.set('isEditingStart', true);\n        valuePath.set('name', value.name);\n        this.get('selectedTravelNeedsForPayload').push({\n          cnt: null,\n          name: value.name\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-new-trip/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    PICK_NOTES: 1,\n    DROP_NOTES: 2,\n    SELECTEDNEED_CNT: 3,\n    LOAD_TIME: 4,\n    UNLOAD_TIME: 5,\n    anchorData: [{\n      'id': 'pick',\n      'name': 'Pick'\n    }, {\n      'id': 'drop',\n      'name': 'Drop'\n    }],\n    companions: [{\n      'id': 0,\n      'name': 0,\n      'value': 0\n    }, {\n      'id': 1,\n      'name': 1,\n      'value': 1\n    }, {\n      'id': 2,\n      'name': 2,\n      'value': 2\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"kzYW3c3S\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"option\\\",\\\"selectedNeed\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L3:C2) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Add new Trip\\\",[23,[\\\"isEditStart\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L9:C3) \\\"],null]],null,{\\\"statements\\\":[[0,\\\" \\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L10:C33) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L11:C4) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Passenger\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\t\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"input-field\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"firstName\\\"]]],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"lastName\\\"]]],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"phoneNumber\\\"]]],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"passengerId\\\"]]],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\"],[10]],\\\"parameters\\\":[]},null],[0,\\\" \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L32:C30) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Details\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\\t\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 ml-0\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[9],[0,\\\"Time\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedAnchor\\\",\\\"id\\\"]],[23,[\\\"anchorOptions\\\"]]],null],[23,[\\\"anchorOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAnchorSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 position-relative\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"disabled\\\",\\\"dateFormat\\\",\\\"placeholder\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[[23,[\\\"isDisableDatePicker\\\"]],\\\"m-d-Y\\\",\\\"MM-DD-YYYY\\\",[23,[\\\"selectedDate\\\",\\\"date\\\"]],[23,[\\\"selectedDate\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDate\\\",\\\"today\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",\\\"selectedDate.date\\\"],null]]]],false],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar-o input-icon fa-2x\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedAnchor\\\",\\\"id\\\"]],\\\"pick\\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 position-relative\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"disabled\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[[23,[\\\"isTimeDisable\\\"]],\\\"en\\\",1,false,true,false,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"shiftTimeRange\\\",\\\"startofday\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"dropTime\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"pickTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\",\\\"shiftTimeRange.pickTime\\\"],null]]]],false],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o input-icon\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 position-relative\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"disabled\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[[23,[\\\"isTimeDisable\\\"]],\\\"en\\\",1,false,true,false,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"shiftTimeRange\\\",\\\"pickTime\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"endofday\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"dropTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\",\\\"shiftTimeRange.dropTime\\\"],null]]]],false],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o input-icon\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\t\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[9],[0,\\\"Pickup\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"canResetAddress\\\",\\\"onPickSearch\\\",\\\"selectAddress\\\",\\\"onAddressSearch\\\",\\\"removeMarker\\\"],[[23,[\\\"canResetAddress\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickLocation\\\"],null],[23,[\\\"selectedPickLocation\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickLocation\\\"],null],true]]],false],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"pickNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"PICK_NOTES\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Write a note\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[9],[0,\\\"Dropoff\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"canResetAddress\\\",\\\"onPickSearch\\\",\\\"selectAddress\\\",\\\"onAddressSearch\\\",\\\"removeMarker\\\"],[[23,[\\\"canResetAddress\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropLocation\\\"],null],[23,[\\\"selectedDropLocation\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropLocation\\\"],null],true]]],false],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"dropNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"DROP_NOTES\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Write a note\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"th\\\"],[9],[0,\\\"Fare\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"flex-grow-1\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[12,\\\"value\\\",[21,\\\"expectedFare\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn icon-btn btn-delete btn-outline-secondary places-button\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-refresh\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onRefreshFare\\\"]],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\\t\\\\t\\\"],[10]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L131:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Travel Needs\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage2\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage2\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"position-relative\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"button input-plus-icon \\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canPlus\\\"]]],null]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"addTravelNeedItem\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 ml-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"cloneSelectedNeedsOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"cloneSelectedNeedsOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchEnabled\\\",\\\"tagName\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[true,\\\"div\\\",[22,4,[]],[23,[\\\"travelNeedOptionsWithFilter\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedOptionSelect\\\",[22,4,[]]],null]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mr-2\\\"],[9],[0,\\\"\\\\n                          \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[22,4,[\\\"cnt\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"SELECTEDNEED_CNT\\\"]]],null]],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn icon-btn btn-delete btn-outline-secondary places-button\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDeleteTravelNeeds\\\",[22,4,[]]]],[10],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 d-flex align-items-center\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"mr-2 mt-0\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isServiceAnimalChecked\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onServiceAnimalChanged\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"style\\\",\\\"text-overflow: initial;\\\"],[9],[0,\\\"Service Animal\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 d-flex align-items-center\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"mr-2\\\\n               mt-0\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isPcaChecked\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPcaChanged\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"style\\\",\\\"text-overflow: initial;\\\"],[9],[0,\\\"PCA\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"50%\\\"],[11,\\\"style\\\",\\\"text-overflow: initial;\\\"],[9],[0,\\\"Companion\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"tagName\\\",\\\"class\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"name\\\",true,\\\"div\\\",\\\"width-100\\\",[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedNoOfCompanions\\\",\\\"id\\\"]],[23,[\\\"companionOptions\\\"]]],null],[23,[\\\"companionOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectCompanion\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\" d-flex align-items-center\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Load Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"loadTime\\\"]],[11,\\\"class\\\",\\\"load-unload-td\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"LOAD_TIME\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"style\\\",\\\"padding-left: 30px\\\"],[9],[0,\\\"Unload Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"UnloadTime\\\"]],[11,\\\"class\\\",\\\"load-unload-td\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"UNLOAD_TIME\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs' @ L219:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Service Needs\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\t\\\\t\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 ml-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"serviceNeeds\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\t\\\\t\\\\t\\\"],[7,\\\"tr\\\"],[9],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[12,\\\"value\\\",[22,2,[]]],[9],[10],[10],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\t\\\\t\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-add-new-trip/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-cancel-trip/component\", [\"exports\", \"moment\", \"ember-concurrency\"], function (_exports, _moment, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    passengerTrips: null,\n    cancelTripNote: '',\n    isSelectAllChecked: false,\n    selectedReason: null,\n    serviceModeTaxiType: 'Taxi',\n    selectedTrip: Ember.computed.readOnly('stackFrame.options.trip'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    canUndo: Ember.computed.or('selectedReason', 'cancelTripNote', 'selectedTrips'),\n    canSave: Ember.computed.alias('selectedReason'),\n    tripDetails: Ember.computed.readOnly('reconcile.reconcileTrip'),\n    trips: Ember.computed.readOnly('reconcile.reconcileTripDetails'),\n    tripInfo: Ember.computed.readOnly('reconcile.selectedTripRow'),\n    passengerDetails: Ember.computed.readOnly('reconcile.reconcilePassenger'),\n    serviceMode: Ember.computed.alias('reconcile.reconcileMode'),\n    selectedTrips: Ember.computed('passengerTrips.@each.isChecked', function () {\n      const trips = Ember.get(this, 'passengerTrips');\n\n      if (Ember.isEmpty(trips)) {\n        return null;\n      }\n\n      return trips.filterBy('isChecked', true);\n    }),\n    reasonOptions: Ember.computed('selectedReason', function () {\n      const canelReasons = this.store.peekAll('cs-config-item').filter(message => {\n        return message.category === 'config-System_Configuration-cancel_types';\n      });\n      return canelReasons.map(reason => reason.displayName);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('getPassengerTripsTask', this.get('getPassengerTripsTask').bind(this));\n    },\n\n    didInsertElement() {\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n\n      if (this.tripInfo.riderDetails) {\n        this.get('getPassengerTripsTask')();\n      }\n    },\n\n    getPassengerTripsTask() {\n      const trips = this.get('trips');\n      const selectedRow = this.get('tripInfo');\n      const passengerTrips = trips.filter(trip => {\n        const rider = trip.riderDetails;\n        const selectedRider = selectedRow.riderDetails;\n        return rider && rider.bookingclientid === selectedRider.bookingclientid && selectedRow.tripId !== trip.tripId;\n      }).map(trip => {\n        return {\n          tripId: trip.tripId\n        };\n      });\n      this.set('passengerTrips', passengerTrips);\n    },\n\n    saveCancelTripTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const reconcileTripAdapter = store.adapterFor('reconcile-trip');\n        const canelTrips = [];\n        const tripInfo = this.get('tripInfo');\n        canelTrips.push(tripInfo.tripId);\n\n        if (!Ember.isEmpty(this.passengerTrips)) {\n          this.passengerTrips.map(passengerTrip => {\n            if (passengerTrip.isChecked && !canelTrips.includes(passengerTrip.tripId)) {\n              canelTrips.push(passengerTrip.tripId);\n            }\n          });\n        }\n\n        const payload = {\n          tripId: tripInfo.tripId,\n          reason: this.get('selectedReason'),\n          notes: this.cancelTripNote,\n          date: (0, _moment.default)(new Date()).toISOString(),\n          isDeleted: true,\n          trips: canelTrips,\n          routeId: tripInfo.routeid,\n          userId: this.session.data.authenticated.userId\n        };\n        yield reconcileTripAdapter.patchTrip(payload, 'cancel trip');\n        let successMsg = `TRIP ${tripInfo.tripId} WAS SUCCESSFULLY CANCELLED`;\n\n        if (!Ember.isEmpty(canelTrips) && canelTrips.length > 1) {\n          successMsg = `${canelTrips.length} TRIPS WERE SUCCESSFULLY CANCELLED`;\n        }\n\n        this.get('notifications').success(successMsg);\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    saveCancelTrip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Cancel Trip';\n      const tip = `Cancel trip ${this.get('tripInfo').tripId}?`;\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return Ember.get(this, 'saveCancelTripTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('reconcileCancelTrip');\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in cancel trip, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    clearCheckboxes() {\n      Ember.set(this, 'isSelectAllChecked', false);\n      this.passengerTrips.map(passengerTrip => {\n        passengerTrip.set('isChecked', false);\n      });\n    },\n\n    unloadSelectedTrips() {\n      let record = this.store.peekRecord('reconcile-trip', this.tripDetails.get('tripId'));\n      this.store.unloadRecord(record);\n\n      if (!Ember.isEmpty(this.selectedTrips)) {\n        this.selectedTrips.map(trip => {\n          record = this.store.peekRecord('reconcile-trip', trip.tripId);\n          this.store.unloadRecord(record);\n        });\n      }\n    },\n\n    actions: {\n      onSaveClick() {\n        if (!Ember.get(this, 'selectedReason')) {\n          Ember.set(this, 'errorMessage', 'Please select reason');\n          return;\n        }\n\n        Ember.set(this, 'errorMessage', '');\n        this.saveCancelTrip();\n      },\n\n      onChangeReason(option) {\n        this.set('selectedReason', option);\n      },\n\n      onUndoClick() {\n        this.set('selectedReason', null);\n        this.set('cancelTripNote', '');\n        this.clearCheckboxes();\n      },\n\n      onSelectAllCheckboxClick() {\n        this.toggleProperty('isSelectAllChecked');\n        this.passengerTrips.map(passengerTrip => {\n          passengerTrip.set('isChecked', this.isSelectAllChecked);\n        });\n      },\n\n      onTripCheckboxClick(passengerTrip) {\n        let isChecked = passengerTrip.isChecked;\n        isChecked = !isChecked;\n        passengerTrip.isChecked = isChecked;\n      },\n\n      cancel() {\n        this.unloadSelectedTrips();\n\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EQLu6Yxx\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"passengerTrip\\\",\\\"reason\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs' @ L4:C2) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Cancel Trip\\\",[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs' @ L11:C6) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      Trip ID: \\\"],[1,[23,[\\\"tripInfo\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs' @ L16:C3) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs' @ L17:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Cancel Reason\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Reason\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"reasonOptions\\\"]],true,[23,[\\\"selectedReason\\\"]],\\\"Select reason\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeReason\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,3,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"valign\\\",\\\"top\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"textarea\\\"],[11,\\\"rows\\\",\\\"3\\\"],[11,\\\"maxlength\\\",\\\"150\\\"],[12,\\\"value\\\",[21,\\\"cancelTripNote\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"cancelTripNote\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-right mt-1\\\"],[9],[1,[23,[\\\"cancelTripNote\\\",\\\"length\\\"]],false],[0,\\\"/150\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs' @ L46:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Trip ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"class\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"ember-text-field ember-view\\\",\\\"text\\\",[23,[\\\"tripInfo\\\",\\\"tripId\\\"]]]]],false],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"class\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"ember-text-field ember-view\\\",\\\"text\\\",[23,[\\\"tripInfo\\\",\\\"riderDetails\\\",\\\"firstname\\\"]]]]],false],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"class\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"ember-text-field ember-view\\\",\\\"text\\\",[23,[\\\"tripInfo\\\",\\\"riderDetails\\\",\\\"lastname\\\"]]]]],false],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promise Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"class\\\",\\\"ember-text-field ember-view\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"tripInfo\\\",\\\"promisedTime\\\"]],\\\"hh:mm A\\\"],null]],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs' @ L66:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Cancel other trips\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"getPassengerTripsTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"   \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"passengerTrips\\\"]]],null,{\\\"statements\\\":[[0,\\\"   \\\"],[7,\\\"p\\\"],[9],[0,\\\"This passenger has other trips schedule for today. You may choose to cancel any form of them individually or cancel all of them selecting the checkbox.\\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"p\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n         \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-1\\\",[23,[\\\"isSelectAllChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectAllCheckboxClick\\\"],null]]]],false],[0,\\\"\\\\n         \\\"],[7,\\\"strong\\\"],[9],[0,\\\"All\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"passengerTrips\\\"]]],null,{\\\"statements\\\":[[0,\\\"         \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"ml-3 d-block\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"class\\\",\\\"checked\\\",\\\"click\\\"],[\\\"checkbox\\\",\\\"mr-1\\\",[22,2,[\\\"isChecked\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCheckboxClick\\\",[22,2,[]]],null]]]],false],[0,\\\"\\\\n            \\\"],[7,\\\"strong\\\"],[9],[0,\\\"Trip \\\"],[1,[22,2,[\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n         \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"   \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[9],[0,\\\"No trips found for the day\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-cancel-trip/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-close-dates/component\", [\"exports\", \"ember-light-table\", \"adept-iq/pods/components/side-drawer/reconcile-close-dates/config\", \"moment\", \"ember-concurrency\", \"adept-iq/utils/format-function\"], function (_exports, _emberLightTable, _config, _moment, _emberConcurrency, _formatFunction) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    config: _config.default,\n    title: 'Close Dates to Editing',\n    onCloseClick: null,\n    allProviderRouteList: null,\n    nonVerifiedProviderList: null,\n    verifiedProviderList: null,\n    dateErrorMessage: '',\n    errorMessage: '',\n    isNonVerifiedProvidersEmpty: false,\n    isNonVerifiedRoutesEmpty: false,\n    isVerifiedProvidersEmpty: false,\n    canUndo: Ember.computed.or('selectedDateTimeRage.{startDate,endDate}'),\n    selectedProviders: Ember.computed.alias('verifiedProviderTable.selectedRows.[]'),\n    canSave: Ember.computed.notEmpty('selectedProviders'),\n    canSearchEnable: Ember.computed.and('selectedDateTimeRage.{startDate,endDate}'),\n    reconcileRouteId: Ember.computed.alias('reconcile.reconcileSelectedRouteId'),\n    updateProviderTable: Ember.observer('allProviderRouteList', function () {\n      const providerRouteList = Ember.get(this, 'allProviderRouteList');\n      const providerRouteArray = [];\n      let nonVerifiedArray = [];\n\n      if (!Ember.isEmpty(providerRouteList)) {\n        providerRouteList.map(item => {\n          item.set('plannedStartTime', (0, _moment.default)(item.plannedStartTime).format('MM/DD/YYYY'));\n          providerRouteArray.push(item);\n        });\n        nonVerifiedArray = this.createNonVerifiedProviderList(providerRouteArray);\n        this.createVerifiedProviderList(providerRouteArray, nonVerifiedArray);\n      }\n\n      if (Ember.isEmpty(nonVerifiedArray)) {\n        Ember.set(this, 'isNonVerifiedProvidersEmpty', true);\n      } else {\n        Ember.set(this, 'isNonVerifiedProvidersEmpty', false);\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.onVerifiedProviderPanelClick = this.onVerifiedProviderPanelClick.bind(this);\n      Ember.set(this, 'selectedDateTimeRage', {\n        today: (0, _moment.default)().subtract(1, 'day').format('MM-DD-YYYY'),\n        date: null,\n        startDate: null,\n        endDate: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(7, 'years').format('MM-DD-YYYY')\n      }); // non verified proivers table\n\n      const nonVerifiedProviderTable = new _emberLightTable.default(this.config.nonVerifiedProviderTable);\n      this.set('nonVerifiedProviderTable', nonVerifiedProviderTable); // non verified routes table\n\n      const nonVerifiedRouteTable = new _emberLightTable.default(this.config.nonVerifiedRouteTable);\n      this.set('nonVerifiedRouteTable', nonVerifiedRouteTable); // verified providers table\n\n      const verifiedProviderTable = new _emberLightTable.default(this.config.verifiedProviderTable);\n      this.set('verifiedProviderTable', verifiedProviderTable);\n    },\n\n    createNonVerifiedProviderList(responseList) {\n      const nonVerifiedArray = [];\n      const nonVerifiedProviders = responseList.filter(item => !item.isCompleted);\n\n      if (!Ember.isEmpty(nonVerifiedProviders)) {\n        nonVerifiedProviders.map(item => {\n          nonVerifiedArray.push(item);\n        });\n        const nonVerifiedUniqueListWithDate = this.getUniqueDateAndProviderList(nonVerifiedArray);\n        Ember.set(this, 'nonVerifiedProviderList', nonVerifiedArray);\n        Ember.get(this, 'nonVerifiedProviderTable').setRows(nonVerifiedUniqueListWithDate);\n      }\n\n      if (Ember.isEmpty(nonVerifiedProviders)) {\n        Ember.set(this, 'isNonVerifiedProvidersEmpty', true);\n      } else {\n        Ember.set(this, 'isNonVerifiedProvidersEmpty', false);\n      }\n\n      return nonVerifiedArray;\n    },\n\n    createVerifiedProviderList(responseList, nonVerifiedArray) {\n      const verifiedProviders = responseList.filter(item => item.isCompleted && !item.closedDate);\n\n      if (!Ember.isEmpty(verifiedProviders)) {\n        const verifiedProvidersArray = [];\n        const verifiedProvidersFinalArray = [];\n        verifiedProviders.map(item => {\n          verifiedProvidersArray.push(item);\n        });\n        const verifiedUniqueListWithDate = this.getUniqueDateAndProviderList(verifiedProvidersArray);\n        verifiedUniqueListWithDate.map(item => {\n          const nonVerifiedList = nonVerifiedArray.filter(elm => elm.providerName === item.providerName\n          /*&& elm.plannedStartTime === item.plannedStartTime*/\n          );\n\n          if (!nonVerifiedList.length) {\n            verifiedProvidersFinalArray.push(item);\n          }\n        });\n        const verifiedUniqueList = this.getUniqueList(verifiedProvidersFinalArray, 'providerName');\n        Ember.set(this, 'verifiedProviderUniqueList', verifiedUniqueList);\n        Ember.set(this, 'verifiedProviderList', verifiedProviders);\n      }\n    },\n\n    getUniqueDateAndProviderList(list) {\n      return list.filter(function (a) {\n        var key = a.plannedStartTime + '|' + a.providerName;\n\n        if (!this[key]) {\n          this[key] = true;\n          return true;\n        }\n      }, Object.create(null));\n    },\n\n    getUniqueList(list, keyType) {\n      return [...new Map(list.map(item => [item[keyType], item])).values()];\n    },\n\n    getErrorMessage(error, typeMsg) {\n      let message;\n\n      switch (error.status) {\n        case 400:\n          message = 'There was a problem with one of the fields. Please check over the form and try again.';\n          break;\n\n        default:\n          message = `There was a problem in ${typeMsg}, please try again.`;\n          break;\n      }\n\n      return message;\n    },\n\n    saveCloseDatesTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const reconcileRouteAdapter = store.adapterFor('reconcile-route');\n        const fullVerifiedList = this.verifiedProviderList;\n        const routes = [];\n        let routeId = 0;\n        let rowData = null;\n        this.selectedProviders.map(row => {\n          rowData = row.content;\n          routeId = rowData.routeId;\n          const matchedRecords = fullVerifiedList.filter(item => item.providerName === rowData.providerName && item.plannedStartTime === rowData.plannedStartTime);\n          matchedRecords.map(record => {\n            routes.push({\n              routeId: record.routeId,\n              providerName: record.providerName,\n              closedDate: (0, _moment.default)(new Date()).toISOString(),\n              closedBy: this.session.data.authenticated.tokenInfo.firstName\n            });\n          });\n        });\n        const payload = {\n          id: routeId,\n          routes\n        };\n        yield reconcileRouteAdapter.patchRoute(payload, 'close dates');\n        const isExists = routes.filter(route => parseInt(route.routeId, 10) === parseInt(this.reconcileRouteId, 10))[0];\n\n        if (isExists) {\n          yield Ember.get(this, 'reconcile.fetchRouteData').perform();\n        }\n      } catch (error) {\n        throw error;\n      }\n    }),\n    fetchNonVerifiedProvidersTask: (0, _emberConcurrency.task)(function* () {\n      const providerRouteList = [];\n      const startDate = (0, _moment.default)(this.get('selectedDateTimeRage.startDate'));\n      const endDate = (0, _moment.default)(this.get('selectedDateTimeRage.endDate'));\n      const dateRange = (0, _formatFunction.getDateRangeForSearch)(startDate, endDate);\n      const queryOptions = {\n        startDate: dateRange.startDate,\n        endDate: dateRange.endDate,\n        option: 'close dates'\n      };\n      let providerRoutes = [];\n\n      try {\n        providerRoutes = yield this.get('store').query('reconcile-route-id', queryOptions);\n      } catch (error) {\n        let message;\n\n        switch (error.status) {\n          case 400:\n            message = 'There was a problem with one of the fields. Please check over the form and try again.';\n            break;\n\n          default:\n            message = 'There was a problem in close dates, please try again.';\n            break;\n        }\n\n        this.get('notifications').warning(message);\n      }\n\n      if (Ember.isEmpty(providerRoutes)) {\n        Ember.set(this, 'allProviderRouteList', []);\n        return;\n      }\n\n      providerRoutes.map(data => {\n        providerRouteList.push(data);\n      });\n      Ember.set(this, 'allProviderRouteList', providerRouteList);\n    }),\n\n    checkDateValidation() {\n      const isValid = true;\n\n      if (!Ember.get(this, 'selectedDateTimeRage.startDate')) {\n        Ember.set(this, 'dateErrorMessage', 'Please select start date');\n        return false;\n      }\n\n      if (!Ember.get(this, 'selectedDateTimeRage.endDate')) {\n        Ember.set(this, 'dateErrorMessage', 'Please select end date');\n        return false;\n      }\n\n      return isValid;\n    },\n\n    checkProviderSelected() {\n      const rows = Ember.get(this, 'verifiedProviderTable.rows');\n      let isValid = false;\n      rows.map(row => {\n        if (row.get('selected')) {\n          isValid = true;\n        }\n      });\n\n      if (!isValid) {\n        Ember.set(this, 'errorMessage', 'Please select provider for close date');\n      }\n\n      return isValid;\n    },\n\n    showToolTip() {\n      const tooltip = Ember.get(this, 'tooltip');\n      const title = 'Close Dates';\n      const tip = 'Would you like to close the selected providers?';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return Ember.get(this, 'saveCloseDatesTask').perform().then(() => {\n            Ember.get(this, 'workspace').popState('reconcileCloseDates');\n            Ember.get(this, 'notifications').success('SELECTED PROVIDERS HAVE BEEN SUCCESSFULLY CLOSED');\n            tooltip.reset();\n          }).catch(error => {\n            Ember.get(this, 'notifications').warning(this.getErrorMessage(error, 'close dates'));\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    handleNonVerifiedProviderSearch() {\n      return this.get('fetchNonVerifiedProvidersTask').perform();\n    },\n\n    handleVerifiedProviderSearch() {\n      const verifiedList = Ember.get(this, 'verifiedProviderUniqueList');\n\n      if (!Ember.isEmpty(verifiedList)) {\n        verifiedList.map(item => {\n          item.isChecked = false;\n        });\n        Ember.get(this, 'verifiedProviderTable').setRows(verifiedList);\n      }\n\n      if (Ember.isEmpty(verifiedList)) {\n        Ember.set(this, 'isVerifiedProvidersEmpty', true);\n      } else {\n        Ember.set(this, 'isVerifiedProvidersEmpty', false);\n      }\n    },\n\n    setOpenRoutesCount() {\n      const columns = Ember.get(this, 'nonVerifiedRouteTable.columns');\n      const routeList = Ember.get(this, 'nonVerifiedRouteList');\n      columns.map(column => {\n        if (!Ember.isEmpty(routeList)) {\n          Ember.set(column, 'label', `Open Routes (${routeList.length})`);\n        } else {\n          Ember.set(column, 'label', 'Open Routes');\n        }\n      });\n    },\n\n    bindNonVerifiedRouteTable(rowData) {\n      let nonVerifiedRouteList = [];\n\n      if (!rowData) {\n        return;\n      }\n\n      const nonVerifiedList = Ember.get(this, 'nonVerifiedProviderList');\n\n      if (!Ember.isEmpty(nonVerifiedList)) {\n        nonVerifiedRouteList = nonVerifiedList.filter(item => item.providerName === rowData.providerName && item.plannedStartTime === rowData.plannedStartTime);\n\n        if (!Ember.isEmpty(nonVerifiedRouteList)) {\n          nonVerifiedRouteList.map(item => {\n            item.set('isChecked', false);\n          });\n          Ember.set(this, 'nonVerifiedRouteList', nonVerifiedRouteList);\n          Ember.get(this, 'nonVerifiedRouteTable').setRows(nonVerifiedRouteList);\n        }\n\n        if (Ember.isEmpty(nonVerifiedRouteList)) {\n          Ember.set(this, 'isNonVerifiedRoutesEmpty', true);\n        } else {\n          Ember.set(this, 'isNonVerifiedRoutesEmpty', false);\n        }\n      }\n\n      this.setOpenRoutesCount();\n    },\n\n    resetProperties() {\n      this.setProperties({\n        'selectedDateTimeRage.startDate': null,\n        'selectedDateTimeRage.endDate': null,\n        searchClicked: false\n      });\n      this.resetTableProperties();\n    },\n\n    resetTableProperties() {\n      this.setProperties({\n        nonVerifiedProviderList: null,\n        nonVerifiedRouteList: null,\n        verifiedProviderUniqueList: null,\n        isNonVerifiedProvidersEmpty: false,\n        isNonVerifiedRoutesEmpty: false,\n        isVerifiedProvidersEmpty: false\n      });\n      Ember.get(this, 'nonVerifiedProviderTable').setRows([]);\n      Ember.get(this, 'nonVerifiedRouteTable').setRows([]);\n      Ember.get(this, 'verifiedProviderTable').setRows([]);\n      this.setOpenRoutesCount();\n    },\n\n    onVerifiedProviderPanelClick() {\n      const rows = Ember.get(this, 'verifiedProviderTable.rows');\n\n      if (rows) {\n        rows.map(row => {\n          if (row.get('selected')) {\n            row.set('isChecked', true);\n          }\n        });\n      }\n    },\n\n    actions: {\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        Ember.set(this, valuePath, momentTime.toISOString());\n        Ember.set(this, 'searchClicked', false);\n        this.resetTableProperties();\n      },\n\n      onProviderRowClick(row) {\n        const rows = Ember.get(this, 'nonVerifiedProviderTable.rows');\n        const selectedRow = rows.findBy('selected');\n        if (row === selectedRow) return;\n\n        if (selectedRow) {\n          Ember.set(selectedRow, 'selected', false);\n        }\n\n        Ember.set(row, 'selected', true);\n        this.bindNonVerifiedRouteTable(row.content);\n      },\n\n      onSearchButtonClick() {\n        Ember.set(this, 'searchClicked', true);\n        this.resetTableProperties();\n        this.handleNonVerifiedProviderSearch();\n      },\n\n      onCloseDateButtonClick() {\n        this.handleVerifiedProviderSearch();\n      },\n\n      onSaveClick() {\n        this.showToolTip();\n      },\n\n      onUndoClick() {\n        this.resetProperties();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-close-dates/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    title: 'Reconcile',\n    nonVerifiedProviderTable: [{\n      label: 'Provider ID',\n      valuePath: 'providerName',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      label: 'Trip Date',\n      valuePath: 'plannedStartTime',\n      resizable: true,\n      minResizeWidth: 50\n    }],\n    nonVerifiedRouteTable: [{\n      label: 'Open Routes',\n      valuePath: 'routeId',\n      resizable: true,\n      minResizeWidth: 50\n    }],\n    verifiedProviderTable: [{\n      label: 'Provider',\n      valuePath: 'providerName',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      label: 'Close',\n      resizable: false,\n      minResizeWidth: 50,\n      cellComponent: 'generic-components/table/cells/check-box'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-close-dates/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    reopenproviderIdTable: [{\n      'providerId': '12342',\n      'tripDate': '12'\n    }, {\n      'providerId': '2312',\n      'tripDate': '12'\n    }, {\n      'providerId': '12313',\n      'tripDate': '12'\n    }, {\n      'providerId': '12342',\n      'tripDate': '12'\n    }, {\n      'providerId': '12342',\n      'tripDate': '12'\n    }, {\n      'providerId': '12342',\n      'tripDate': '12'\n    }, {\n      'providerId': '12342',\n      'tripDate': '12'\n    }, {\n      'providerId': '12342',\n      'tripDate': '12'\n    }, {\n      'providerId': '12342',\n      'tripDate': '12'\n    }],\n    openRouteTable: [{\n      'openRoute': '1234'\n    }, {\n      'openRoute': '1234'\n    }],\n    closeDateProviderTable: [{\n      'providerId': '12342'\n    }, {\n      'providerId': '2312'\n    }, {\n      'providerId': '12313'\n    }, {\n      'providerId': '12342'\n    }, {\n      'providerId': '12342'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-close-dates/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"IaI8awbH\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base reconcile-dates\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L5:C2) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canSave\\\"]],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L14:C3) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L15:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Select date range to close\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"dateErrorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"dateErrorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"35%\\\"],[9],[0,\\\"Start Date\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"class\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"en\\\",1,\\\"width-100\\\",false,false,\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",false,[23,[\\\"selectedDateTimeRage\\\",\\\"startDate\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.startDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"25%\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"End Date\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"class\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"en\\\",1,\\\"width-100\\\",false,false,\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",false,[23,[\\\"selectedDateTimeRage\\\",\\\"endDate\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"startDate\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.endDate\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L63:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Search for non verified routes\\\",true]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-gray btn-position\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSearchEnable\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"],null]],[9],[0,\\\"Search\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex mb-2\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"nonVerifiedProviderTable\\\"]]],[[\\\"height\\\",\\\"estimatedRowHeight\\\"],[\\\"200px\\\",23]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L71:C12) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,6,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L75:C13) \\\"],null]],[[\\\"canSelect\\\",\\\"onRowClick\\\"],[false,[27,\\\"action\\\",[[22,0,[]],\\\"onProviderRowClick\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchNonVerifiedProvidersTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,7,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L80:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isNonVerifiedProvidersEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,7,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L86:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            No providers found\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[7]},null]],\\\"parameters\\\":[6]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"nonVerifiedRouteTable\\\"]]],[[\\\"height\\\",\\\"estimatedRowHeight\\\"],[\\\"200px\\\",23]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L100:C16) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L104:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNonVerifiedRoutesEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L108:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n            No routes found\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L120:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\",\\\"onPanelHeaderClick\\\"],[\\\"Close Providers for verified routes\\\",true,[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onVerifiedProviderPanelClick\\\"]]],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"searchClicked\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-gray btn-position\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseDateButtonClick\\\"],null]],[9],[0,\\\"Close Dates\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"verifiedProviderTable\\\"]]],[[\\\"height\\\",\\\"class\\\",\\\"estimatedRowHeight\\\"],[\\\"200px\\\",\\\"mx-auto\\\",23]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L133:C16) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L137:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isVerifiedProvidersEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs' @ L141:C9) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n        No providers found.\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-close-dates/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-edit-trip/component\", [\"exports\", \"moment\", \"adept-iq/pods/components/side-drawer/reconcile-edit-trip/stubs\", \"ember-concurrency\"], function (_exports, _moment, _stubs, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PCA = 'pca';\n  const SERVICE_ANIMAL = 'serviceanimal';\n\n  var _default = Ember.Component.extend({\n    classNames: ['reconcile-widget-base'],\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    stubs: _stubs.default,\n    onCloseClick: null,\n    serviceModeTaxi: 'Taxi',\n    travelNeedsOptionsCount: null,\n    isEnableCheckbox: false,\n    defaultPca: null,\n    defaultServiceAnimal: null,\n    reconcileStopPointMap: Ember.computed.alias('reconcile.reconcileStopPointMap'),\n    selectedTripId: Ember.computed.alias('reconcile.reconcileSelectedTripId'),\n    selectedDate: Ember.computed.alias('reconcile.reconcileDate'),\n    reconcileMode: Ember.computed.alias('reconcile.reconcileMode'),\n    tripDetails: Ember.computed.alias('reconcile.selectedTripRow'),\n    passengerDetails: Ember.computed.alias('reconcile.selectedTripRow.riderDetails'),\n    reconcilePrice: Ember.computed.alias('reconcile.reconcilePrice'),\n    pickupAddress: Ember.computed.alias('reconcile.reconcilePickupAddress'),\n    dropoffAddress: Ember.computed.alias('reconcile.reconcileDropOffAddress'),\n    pickupStop: Ember.computed.alias('reconcile.reconcilePickupStop'),\n    dropoffStop: Ember.computed.alias('reconcile.reconcileDropOffStop'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    selectedTrip: Ember.computed.alias('stackFrame.options.trip'),\n    isEditStart: Ember.computed.alias('isEditingStart'),\n    reconcileRouteStartTime: Ember.computed.readOnly('reconcile.reconcileRouteDetails.actualStartTime'),\n    reconcileRouteEndTime: Ember.computed.readOnly('reconcile.reconcileRouteDetails.actualEndTime'),\n    canPlus: Ember.computed('travelNeedsOptions', 'travelNeedsOptionsCount', function () {\n      return Ember.get(this, 'travelNeedsOptionsCount') < Ember.get(this, 'travelNeedsOptions').length;\n    }),\n    pickupArriveTime: Ember.computed('pickupStop', function () {\n      return Ember.get(this, 'pickupStop.actualArriveTime');\n    }),\n    dropoffArriveTime: Ember.computed('dropoffStop', function () {\n      return Ember.get(this, 'dropoffStop.actualArriveTime');\n    }),\n    tripDate: Ember.computed('tripDetails.serviceStartTime', function () {\n      const selectedTripDate = Ember.get(this, 'tripDetails.serviceStartTime');\n\n      if (selectedTripDate) {\n        return (0, _moment.default)(selectedTripDate).format('MM-DD-YYYY');\n      }\n\n      const reconcileDate = Ember.get(this, 'reconcile.reconcileDate');\n\n      if (reconcileDate) {\n        return (0, _moment.default)(reconcileDate).format('MM-DD-YYYY');\n      }\n\n      return '';\n    }),\n    anchorOptions: Ember.computed('workspaceData', 'selectedAnchor', function () {\n      const options = [];\n      const anchorOptionsData = _stubs.default.anchorData;\n      anchorOptionsData.map(item => {\n        options.push(item);\n      });\n      return options;\n    }),\n    companionOptions: Ember.computed('workspaceData', 'selectedNoOfCompanions', function () {\n      const options = [];\n      const companions = _stubs.default.companions;\n      companions.map(item => {\n        options.push(item);\n      });\n      return options;\n    }),\n    cloneSelectedNeedsOptions: Ember.computed('selectedNeedsOptions', function () {\n      const selectedNeedsOptions = this.get('selectedNeedsOptions');\n\n      if (selectedNeedsOptions) {\n        return selectedNeedsOptions.map(sno => {\n          return Ember.Object.create({ ...sno\n          });\n        });\n      }\n\n      return [];\n    }),\n    travelNeedOptionsWithFilter: Ember.computed('cloneSelectedNeedsOptions.@each.name', 'travelNeedsOptions', function () {\n      const travelNeedsOptions = this.get('travelNeedsOptions').map(e => {\n        return e;\n      });\n      const filteredOptions = travelNeedsOptions.filter(sno => sno.name.toLowerCase() !== PCA && sno.name.toLowerCase() !== SERVICE_ANIMAL);\n      const selectedValueInTravelNeeds = this.get('cloneSelectedNeedsOptions') || null;\n      const travelNeedOptions = filteredOptions.filter(e => {\n        return !selectedValueInTravelNeeds.find(stn => {\n          return stn.name.toLowerCase() === e.name.toLowerCase();\n        });\n      });\n      return travelNeedOptions.map(tno => {\n        return { ...tno,\n          name: tno.name.toUpperCase()\n        };\n      });\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'shiftTimeRange', {\n        pickTime: null,\n        dropTime: null,\n        startofday: (0, _moment.default)(this.tripDate).startOf('day').toISOString(),\n        endofday: (0, _moment.default)(this.tripDate).endOf('day').toISOString()\n      });\n      const travelNeedsOptions = this.store.peekAll('cs-config-item').filter(config => {\n        return config.category === 'config-System_Configuration-travel_need_types';\n      });\n      travelNeedsOptions.map(option => {\n        return option.data.displayName;\n      });\n      this.set('travelNeedsOptions', travelNeedsOptions);\n      this.setDefaultTravelNeeds();\n      this.updateValues();\n      this.set('defaultPca', this.get('isEnablePCA'));\n      this.set('defaultServiceAnimal', this.get('isServiceAnimalEnable'));\n      this.defaultSelectedTravelNeeds();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    defaultSelectedTravelNeeds() {\n      const travelNeedDetails = this.get('tripDetails.eventAttribute.attribute');\n\n      if (travelNeedDetails) {\n        const travelNeed = travelNeedDetails.map(e => {\n          return {\n            name: e.type,\n            cnt: null\n          };\n        });\n        this.set('selectedTravelNeedsForPayload', travelNeed);\n      } else {\n        this.set('selectedTravelNeedsForPayload', []);\n      }\n    },\n\n    getSelectedPickOrDropAddress(type) {\n      const reconcileStopPointMap = this.get('reconcileStopPointMap');\n      const selectedTripId = this.get('selectedTripId');\n      return reconcileStopPointMap[selectedTripId].find(ele => ele.type.toLowerCase() === type);\n    },\n\n    defaultPcaAndServiceAnimalValue(atrType) {\n      if (this.get('defaultServiceAnimal') !== null && this.get('defaultPca') !== null) {\n        return atrType === PCA ? this.get('defaultPca') : this.get('defaultServiceAnimal');\n      }\n\n      const tripDetails = this.get('tripDetails.eventAttribute.attribute') || [];\n      const isEnable = tripDetails.find(atr => atr.type.toLowerCase() === atrType);\n\n      if (isEnable) {\n        return true;\n      }\n\n      return false;\n    },\n\n    updateValues() {\n      const passDetails = this.get('passengerDetails');\n      const pickupNotes = this.get('pickupAddress.notes') || '';\n      const dropoffNotes = this.get('dropoffAddress.notes') || '';\n      const tripDetails = this.get('tripDetails');\n      const pickAddress = this.getSelectedPickOrDropAddress('pick');\n      const dropAddress = this.getSelectedPickOrDropAddress('drop');\n      this.setProperties({\n        isEditingStart: false,\n        selectedAnchor: {\n          id: 'pick',\n          'name': 'Pick'\n        },\n        selectedNoOfCompanions: {\n          id: tripDetails.cmp,\n          name: tripDetails.cmp,\n          value: tripDetails.cmp\n        },\n        passengerDetails: passDetails,\n        isDisableDatePicker: true,\n        fareValue: this.get('tripDetails').tripPayment.fare,\n        pickNotes: pickupNotes,\n        dropNotes: dropoffNotes,\n        loadTime: passDetails ? passDetails.loadTime : null,\n        unloadTime: passDetails ? passDetails.unloadTime : null,\n        isEnablePCA: this.defaultPcaAndServiceAnimalValue(PCA),\n        isServiceAnimalEnable: this.defaultPcaAndServiceAnimalValue(SERVICE_ANIMAL),\n        selectedPickLocation: {\n          freeformAddress: pickAddress ? pickAddress.address.formattedaddress : '',\n          lat: pickAddress ? pickAddress.address.latitude : '',\n          lng: pickAddress ? pickAddress.address.longitude : ''\n        },\n        selectedDropLocation: {\n          freeformAddress: dropAddress ? dropAddress.address.formattedaddress : '',\n          lat: dropAddress ? dropAddress.address.latitude : '',\n          lng: dropAddress ? dropAddress.address.longitude : ''\n        }\n      });\n      this.calculateFare();\n    },\n\n    setDefaultTravelNeeds() {\n      const travelNeedDetails = this.get('tripDetails.eventAttribute.attribute');\n\n      if (travelNeedDetails) {\n        const travelNeeds = travelNeedDetails.map(e => {\n          return {\n            name: e.type,\n            cnt: null\n          };\n        });\n        this.setProperties({\n          selectedNoOfCompanions: {\n            id: 0,\n            name: 0,\n            value: 0\n          },\n          selectedNeedsOptions: this.convertToEmberObject(travelNeeds)\n        });\n      } else {\n        this.set('cloneSelectedNeedsOptions', []);\n      }\n    },\n\n    convertToEmberObject(travelNeeds) {\n      return travelNeeds.filter(tn => {\n        return tn.name.toLowerCase() !== PCA && tn.name.toLowerCase() !== SERVICE_ANIMAL;\n      }).map(e => {\n        return Ember.Object.create(e);\n      });\n    },\n\n    calculateFare() {\n      let fare = 0;\n      const companioncount = this.get('selectedNoOfCompanions').value ? this.get('selectedNoOfCompanions').value : 1;\n      const responseFareAmount = this.get('fareValue');\n      fare += companioncount * responseFareAmount;\n      Ember.set(this, 'expectedFare', `$${fare}`);\n      return fare;\n    },\n\n    buildArriveAndDepartEventResForPayload(pickTripRes, dropTripRes, reconcileDate) {\n      return [{\n        'id': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.id : '',\n        'routeId': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.routeid : '',\n        'driverId': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.driverid : '',\n        'vehicleId': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.vehicleid : '',\n        'scheduleId': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.scheduleid : '',\n        'stopPointId': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.stoppointid : null,\n        'odo': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.odo : null,\n        'tripId': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.tripid : null,\n        'eventType': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.eventtype : null,\n        'actionType': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.actiontype : null,\n        'speed': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.speed : null,\n        'heading': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.heading : null,\n        'createdAt': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.createdat : pickTripRes.createdAt,\n        'updatedAt': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.updatedat : pickTripRes.updatedAt,\n        'receivedAt': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.receivedat : '',\n        'dbVersion': null,\n        'op$1': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.__op : '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': pickTripRes.arriveEvent ? pickTripRes.arriveEvent.reconciliationnotes : null\n      }, {\n        'id': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.id : '',\n        'routeId': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.routeid : '',\n        'driverId': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.driverid : '',\n        'vehicleId': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.vehicleid : '',\n        'scheduleId': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.scheduleid : '',\n        'stopPointId': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.stoppointid : null,\n        'odo': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.odo : null,\n        'tripId': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.tripid : null,\n        'eventType': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.eventtype : null,\n        'actionType': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.actiontype : null,\n        'speed': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.speed : null,\n        'heading': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.heading : null,\n        'createdAt': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.createdat : dropTripRes.createdAt,\n        'updatedAt': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.updatedat : dropTripRes.updatedAt,\n        'receivedAt': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.receivedat : '',\n        'dbVersion': null,\n        'op$1': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.__op : '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': dropTripRes.arriveEvent ? dropTripRes.arriveEvent.reconciliationnotes : null\n      }, {\n        'id': pickTripRes.departEvent ? pickTripRes.departEvent.id : '',\n        'routeId': pickTripRes.departEvent ? pickTripRes.departEvent.routeid : '',\n        'driverId': pickTripRes.departEvent ? pickTripRes.departEvent.driverid : '',\n        'vehicleId': pickTripRes.departEvent ? pickTripRes.departEvent.vehicleid : '',\n        'scheduleId': pickTripRes.departEvent ? pickTripRes.departEvent.scheduleid : '',\n        'stopPointId': pickTripRes.departEvent ? pickTripRes.departEvent.stoppointid : null,\n        'odo': pickTripRes.departEvent ? pickTripRes.departEvent.odo : null,\n        'tripId': pickTripRes.departEvent ? pickTripRes.departEvent.tripid : null,\n        'eventType': pickTripRes.departEvent ? pickTripRes.departEvent.eventtype : null,\n        'actionType': pickTripRes.departEvent ? pickTripRes.departEvent.actiontype : null,\n        'speed': pickTripRes.departEvent ? pickTripRes.departEvent.speed : null,\n        'heading': pickTripRes.departEvent ? pickTripRes.departEvent.heading : null,\n        'createdAt': pickTripRes.departEvent ? pickTripRes.departEvent.createdat : pickTripRes.createdAt,\n        'updatedAt': pickTripRes.departEvent ? pickTripRes.departEvent.updatedat : pickTripRes.updatedAt,\n        'receivedAt': pickTripRes.departEvent ? pickTripRes.departEvent.receivedat : '',\n        'dbVersion': null,\n        'op$1': pickTripRes.departEvent ? pickTripRes.departEvent.__op : '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': pickTripRes.departEvent ? pickTripRes.departEvent.reconciliationnotes : null\n      }, {\n        'id': dropTripRes.departEvent ? dropTripRes.departEvent.id : '',\n        'routeId': dropTripRes.departEvent ? dropTripRes.departEvent.routeid : '',\n        'driverId': dropTripRes.departEvent ? dropTripRes.departEvent.driverid : '',\n        'vehicleId': dropTripRes.departEvent ? dropTripRes.departEvent.vehicleid : '',\n        'scheduleId': dropTripRes.departEvent ? dropTripRes.departEvent.scheduleid : '',\n        'stopPointId': dropTripRes.departEvent ? dropTripRes.departEvent.stoppointid : null,\n        'odo': dropTripRes.departEvent ? dropTripRes.departEvent.odo : null,\n        'tripId': dropTripRes.departEvent ? dropTripRes.departEvent.tripid : null,\n        'eventType': dropTripRes.departEvent ? dropTripRes.departEvent.eventtype : null,\n        'actionType': dropTripRes.departEvent ? dropTripRes.departEvent.actiontype : null,\n        'speed': dropTripRes.departEvent ? dropTripRes.departEvent.speed : null,\n        'heading': dropTripRes.departEvent ? dropTripRes.departEvent.heading : null,\n        'createdAt': dropTripRes.departEvent ? dropTripRes.departEvent.createdat : dropTripRes.createdAt,\n        'updatedAt': dropTripRes.departEvent ? dropTripRes.departEvent.updatedat : dropTripRes.updatedAt,\n        'receivedAt': dropTripRes.departEvent ? dropTripRes.departEvent.receivedat : '',\n        'dbVersion': null,\n        'op$1': dropTripRes.departEvent ? dropTripRes.departEvent.__op : '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': dropTripRes.departEvent ? dropTripRes.departEvent.reconciliationnotes : null\n      }];\n    },\n\n    buildStartAddressResForPayload(pickAddress, tripResponse, reconcileDate) {\n      return {\n        'id': tripResponse.address.id,\n        'streetName': pickAddress.streetAddress || tripResponse.address.streetname,\n        'streetNumber': pickAddress.streetNumber || tripResponse.address.streetnumber,\n        'postalCode': pickAddress.postalCode || tripResponse.address.postalcode,\n        'locality': pickAddress.locality || tripResponse.address.locality,\n        'region': pickAddress.region || tripResponse.address.region,\n        'latitude': pickAddress.lat || tripResponse.address.latitude,\n        'longitude': pickAddress.lng || tripResponse.address.longitude,\n        'formattedAddress': pickAddress.freeformAddress || tripResponse.address.formattedaddress,\n        'zoneId': tripResponse.address.zoneid,\n        'createdAt': tripResponse.address.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.address.updatedat || tripResponse.updatedAt,\n        'op$1': tripResponse.address.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': tripResponse.address.reconciliationnotes\n      };\n    },\n\n    buildEndAddressResForPayload(dropAddress, tripResponse, reconcileDate) {\n      return {\n        'id': tripResponse.address.id,\n        'streetName': dropAddress.streetAddress || tripResponse.address.streetname,\n        'streetNumber': dropAddress.streetNumber || tripResponse.address.streetnumber,\n        'postalCode': dropAddress.postalCode || tripResponse.address.postalcode,\n        'locality': dropAddress.locality || tripResponse.address.locality,\n        'region': dropAddress.region || tripResponse.address.region,\n        'latitude': dropAddress.lat || tripResponse.address.latitude,\n        'longitude': dropAddress.lng || tripResponse.address.longitude,\n        'formattedAddress': dropAddress.freeformAddress || tripResponse.address.formattedaddress,\n        'zoneId': tripResponse.address.zoneid,\n        'createdAt': tripResponse.address.createdat || tripResponse.createdAt,\n        'updatedAt': tripResponse.address.updatedat || tripResponse.updatedAt,\n        'op$1': tripResponse.address.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': tripResponse.address.reconciliationnotes\n      };\n    },\n\n    buildRiderEventResForPayload(pickTripRes, dropTripRes, reconcileDate) {\n      return [{\n        'id': pickTripRes.riderEvent.id,\n        'stopPointId': pickTripRes.riderEvent.stoppointid,\n        'scheduledTime': this.get('shiftTimeRange.pickTime') || pickTripRes.riderEvent.scheduledtime,\n        'type': pickTripRes.riderEvent.type,\n        'riderId': pickTripRes.riderEvent.riderid,\n        'anchor': pickTripRes.riderEvent.anchor,\n        'promisedTime': pickTripRes.riderEvent.promisedtime,\n        'serviceStartTime': this.get('shiftTimeRange.pickTime') || pickTripRes.riderEvent.servicestarttime,\n        'serviceEndTime': this.get('shiftTimeRange.dropTime') || pickTripRes.riderEvent.serviceendtime,\n        'deleted': pickTripRes.riderEvent.deleted,\n        'scheduleId': pickTripRes.scheduleId,\n        'createdAt': pickTripRes.riderEvent.createdat || pickTripRes.createdAt,\n        'updatedAt': pickTripRes.riderEvent.updatedat || pickTripRes.updatedAt,\n        'dbVersion': null,\n        'op$1': pickTripRes.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': pickTripRes.riderEvent.reconciliationnotes\n      }, {\n        'id': dropTripRes.riderEvent.id,\n        'stopPointId': dropTripRes.riderEvent.stoppointid,\n        'scheduledTime': this.get('shiftTimeRange.dropTime') || dropTripRes.riderEvent.scheduledtime,\n        'type': dropTripRes.riderEvent.type,\n        'riderId': dropTripRes.riderEvent.riderid,\n        'anchor': dropTripRes.riderEvent.anchor,\n        'promisedTime': dropTripRes.riderEvent.promisedtime,\n        'serviceStartTime': this.get('shiftTimeRange.pickTime') || dropTripRes.riderEvent.servicestarttime,\n        'serviceEndTime': this.get('shiftTimeRange.dropTime') || dropTripRes.riderEvent.serviceendtime,\n        'deleted': dropTripRes.riderEvent.deleted,\n        'scheduleId': dropTripRes.scheduleId,\n        'createdAt': dropTripRes.riderEvent.createdat || dropTripRes.createdAt,\n        'updatedAt': dropTripRes.riderEvent.updatedat || dropTripRes.updatedAt,\n        'dbVersion': null,\n        'op$1': dropTripRes.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': dropTripRes.riderEvent.reconciliationnotes\n      }];\n    },\n\n    buildAttributeResForPayload(tripResponse, reconcileDate) {\n      const selectedTravelNeedsForPayload = this.get('selectedTravelNeedsForPayload');\n\n      if (selectedTravelNeedsForPayload) {\n        return selectedTravelNeedsForPayload.map(atr => {\n          return {\n            'id': atr.id || '',\n            'type': atr.name,\n            'createdAt': atr.createdat || tripResponse.createdAt,\n            'updatedAt': atr.updatedat || tripResponse.updatedAt,\n            'dbVersion': null,\n            'op$1': atr.__op || '',\n            'deleted$1': false,\n            'reconcileDate': reconcileDate,\n            'isReconciled': true,\n            'reconciliationNotes': atr.reconciliationnotes\n          };\n        });\n      }\n\n      return [{\n        'id': '',\n        'type': '',\n        'createdAt': tripResponse.createdAt,\n        'updatedAt': tripResponse.updatedAt,\n        'dbVersion': null,\n        'op$1': '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': ''\n      }];\n    },\n\n    buildStopPointResForPayload(pickTripRes, dropTripRes, reconcileDate) {\n      return [{\n        'id': pickTripRes.stopPointId,\n        'tripId': pickTripRes.tripId,\n        'routeIndex': null,\n        'addressId': pickTripRes.address.id,\n        'clusterId': null,\n        'eta': pickTripRes.eta,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': pickTripRes.scheduleId,\n        'status': pickTripRes.status,\n        'createdAt': pickTripRes.createdAt || pickTripRes.createdAt,\n        'updatedAt': pickTripRes.updatedAt || pickTripRes.updatedAt,\n        'dbVersion': null,\n        'op$1': pickTripRes.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }, {\n        'id': dropTripRes.stopPointId,\n        'tripId': dropTripRes.tripId,\n        'routeIndex': null,\n        'addressId': dropTripRes.address.id,\n        'clusterId': null,\n        'eta': dropTripRes.eta,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': dropTripRes.scheduleId,\n        'status': dropTripRes.status,\n        'createdAt': dropTripRes.createdAt || dropTripRes.createdAt,\n        'updatedAt': dropTripRes.updatedAt || dropTripRes.updatedAt,\n        'dbVersion': null,\n        'op$1': dropTripRes.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRouteResFromRVDForPayload(rvdResponse, tripResponse, reconcileDate) {\n      return {\n        'deleted$1': false,\n        'endAddressId': rvdResponse.route.endaddressid,\n        'startAddressId': rvdResponse.route.startaddressid,\n        'version': null,\n        'op$1': rvdResponse.route.__op,\n        'createdAt': rvdResponse.route.createdat || tripResponse.createdAt,\n        'plannedStartTime': this.get('shiftTimeRange.pickTime') || rvdResponse.route.plannedstarttime,\n        'plannedEndTime': this.get('shiftTimeRange.dropTime') || rvdResponse.route.plannedendtime,\n        'id': rvdResponse.route.id,\n        'providerName': rvdResponse.route.providername,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'status': rvdResponse.route.status,\n        'trackingId': rvdResponse.route.trackingid,\n        'updatedAt': rvdResponse.route.updatedat || tripResponse.updatedAt,\n        'actualStartTime': rvdResponse.route.actualstarttime,\n        'actualEndTime': rvdResponse.route.actualendtime,\n        'alertId': rvdResponse.route.alertid,\n        'otpValue': rvdResponse.route.otpvalue,\n        'otpStatus': rvdResponse.route.otpstatus,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': rvdResponse.route.reconciliationnotes\n      };\n    },\n\n    buildRiderResForPayload(tripResponse, reconcileDate) {\n      return {\n        'id': tripResponse.riderDetails ? tripResponse.riderDetails.id : null,\n        'name': tripResponse.riderDetails ? tripResponse.riderDetails.name : null,\n        'firstName': tripResponse.riderDetails ? tripResponse.riderDetails.firstname : null,\n        'lastName': tripResponse.riderDetails ? tripResponse.riderDetails.lastname : null,\n        'middleName': tripResponse.riderDetails ? tripResponse.riderDetails.middlename : null,\n        'passengerTypeName': tripResponse.riderDetails ? tripResponse.riderDetails.passengertypename : null,\n        'bookingClientId': tripResponse.riderDetails ? tripResponse.riderDetails.bookingclientid : null,\n        'tripId': tripResponse.riderDetails ? tripResponse.riderDetails.tripId : null,\n        'providerName': tripResponse.riderDetails ? tripResponse.riderDetails.providername : null,\n        'op$1': tripResponse.riderDetails ? tripResponse.riderDetails.__op || '' : '',\n        'createdAt': tripResponse.riderDetails ? tripResponse.riderDetails.createdat : tripResponse.createdAt,\n        'updatedAt': tripResponse.riderDetails ? tripResponse.riderDetails.updatedat : tripResponse.updatedAt,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildTripResForPayload(tripResponse, reconcileDate) {\n      return {\n        'id': tripResponse.tripId,\n        'routeId': tripResponse.routeId,\n        'status': tripResponse.status,\n        'externalId': tripResponse.externalTripId,\n        'scheduleId': tripResponse.scheduleId,\n        'createdAt': tripResponse.createdAt || tripResponse.createdAt,\n        'updatedAt': tripResponse.updatedAt || tripResponse.updatedAt,\n        'op$1': tripResponse.tripPayment.__op || '',\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildEventAttributesForPayload(pickTripRes, dropTripRes, reconcileDate) {\n      return [{\n        'id': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.eventid : '',\n        'eventId': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.eventid : '',\n        'attributeId': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.attributeid : '',\n        'attributeCount': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.attributecount : '',\n        'scheduleId': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.scheduleid : pickTripRes.arriveEvent.scheduleid,\n        'createdAt': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.createdat : pickTripRes.createdAt,\n        'updatedAt': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.updatedat : pickTripRes.updatedAt,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': pickTripRes.eventAttribute ? pickTripRes.eventAttribute.__op || '' : '',\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      }, {\n        'id': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.eventid : '',\n        'eventId': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.eventid : '',\n        'attributeId': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.attributeid : '',\n        'attributeCount': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.attributecount : '',\n        'scheduleId': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.scheduleid : dropTripRes.arriveEvent.scheduleid,\n        'createdAt': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.createdat : dropTripRes.createdAt,\n        'updatedAt': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.updatedat : dropTripRes.updatedAt,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': dropTripRes.eventAttribute ? dropTripRes.eventAttribute.__op || '' : '',\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      }];\n    },\n\n    buildReconcileTripPayload() {\n      const reconcileRouteInfo = this.get('reconcile.reconcileRouteInfo');\n      const reconcileRVDResponse = this.get('reconcile.reconcileRVDResponse').find(route => route.routeid === parseInt(reconcileRouteInfo.routeid, 10));\n      const selectedTripRow = this.get('reconcile.lastRowClickedInTripTable');\n      const reconcileDate = new Date().toISOString();\n      const pickAddress = this.get('selectedPickLocation');\n      const dropAddress = this.get('selectedDropLocation');\n      const pickTripRes = this.get('reconcile.reconcileTripDetails').find(res => res.tripId === selectedTripRow.tripId && res.type.toLowerCase() === 'pick');\n      const dropTripRes = this.get('reconcile.reconcileTripDetails').find(res => res.tripId === selectedTripRow.tripId && res.type.toLowerCase() === 'drop');\n      return {\n        'events': this.buildArriveAndDepartEventResForPayload(pickTripRes, dropTripRes, reconcileDate),\n        'address': [this.buildStartAddressResForPayload(pickAddress, pickTripRes, reconcileDate), this.buildEndAddressResForPayload(dropAddress, dropTripRes, reconcileDate)],\n        'riderEvents': this.buildRiderEventResForPayload(pickTripRes, dropTripRes, reconcileDate),\n        'attributes': this.buildAttributeResForPayload(selectedTripRow, reconcileDate),\n        'stopPoint': this.buildStopPointResForPayload(pickTripRes, dropTripRes, reconcileDate),\n        'rider': this.buildRiderResForPayload(selectedTripRow, reconcileDate),\n        'route': this.buildRouteResFromRVDForPayload(reconcileRVDResponse, selectedTripRow, reconcileDate),\n        'trip': this.buildTripResForPayload(selectedTripRow, reconcileDate),\n        'eventAttributes': this.buildEventAttributesForPayload(pickTripRes, dropTripRes, reconcileDate)\n      };\n    },\n\n    editTripTask: (0, _emberConcurrency.task)(function* () {\n      this.send('onRefreshFare');\n      const reconcile = this.get('reconcile');\n      const payload = this.buildReconcileTripPayload();\n\n      try {\n        const putTripResponse = yield reconcile.updateReconcileTripsInfo(payload);\n        return putTripResponse;\n      } catch (e) {\n        throw e;\n      }\n    }),\n\n    showToolTip(title, tip, successMsg) {\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('editTripTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('reconcileEditAdditionalTripInfo');\n            tooltip.reset();\n            this.get('notifications').success(successMsg);\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in edit trip, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    validateLoadUnloadTime(type, value) {\n      if (value > 15) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'Edit Trip',\n          tip: type + ' Time cannot be greater than 15 minutes',\n          primaryActionText: 'Ok',\n          primaryAction: () => {\n            this.resetLoadUnloadValues(type, '');\n            return tooltip.reset();\n          },\n          closeAction: () => {\n            this.resetLoadUnloadValues(type, '');\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      } else {\n        this.resetLoadUnloadValues(type, value);\n      }\n    },\n\n    resetLoadUnloadValues(type, value) {\n      if (type === 'Load') {\n        Ember.set(this, 'loadTime', value);\n      } else {\n        Ember.set(this, 'unloadTime', value);\n      }\n    },\n\n    unloadCurrentTrip() {\n      if (this.reconcileMode === this.serviceModeTaxi) {\n        const record = this.store.peekRecord('reconcile-trip', this.tripDetails.get('tripId'));\n\n        if (record) {\n          this.store.unloadRecord(record);\n          Ember.set(this, 'reconcile.reconcileSelectedTripId', null);\n        }\n      }\n    },\n\n    checkValidations() {\n      if (this.reconcileMode !== this.serviceModeTaxi) {\n        if (this.get('shiftTimeRange.pickTime') && this.get('shiftTimeRange.dropTime')) {\n          if (!_moment.default.utc(this.get('shiftTimeRange.dropTime')).isAfter(_moment.default.utc(this.get('shiftTimeRange.pickTime')))) {\n            Ember.set(this, 'errorMessage', 'Pickup time can not be greater than or equal to dropoff time');\n            return false;\n          }\n\n          if (_moment.default.utc(this.reconcileRouteStartTime).isAfter(_moment.default.utc(this.get('shiftTimeRange.pickTime')))) {\n            Ember.set(this, 'errorMessage', 'Pickup time can not be less than route start time');\n            return false;\n          }\n\n          if (_moment.default.utc(this.get('shiftTimeRange.dropTime')).isAfter(_moment.default.utc(this.reconcileRouteEndTime))) {\n            Ember.set(this, 'errorMessage', 'Dropoff time can not be greater than route end time');\n            return false;\n          }\n        }\n      }\n\n      const selectedGroupOptions = Ember.get(this, 'cloneSelectedNeedsOptions').filter(item => item.selected);\n\n      if (selectedGroupOptions) {\n        const nameArray = selectedGroupOptions.map(item => item.selected.id);\n        const isDuplicate = nameArray.some((item, idx) => nameArray.indexOf(item) !== idx);\n\n        if (isDuplicate) {\n          Ember.set(this, 'errorMessage2', 'Duplicate travel needs option selected');\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    generateRandomId() {\n      return Math.floor(Math.random() * 10000);\n    },\n\n    buildPcaAndServiceAnimalTravelNeedForPayload(travelNeedType, checkBoxCheckedValue) {\n      const passengerTravelNeeds = this.get('selectedTravelNeedsForPayload') || [];\n      const foundTravelNeed = passengerTravelNeeds.find(travelNeed => travelNeed.name.toLowerCase() === travelNeedType);\n\n      if (checkBoxCheckedValue && foundTravelNeed) {\n        return;\n      }\n\n      if (checkBoxCheckedValue && !foundTravelNeed) {\n        passengerTravelNeeds.pushObject({\n          id: this.generateRandomId(),\n          name: travelNeedType.toUpperCase(),\n          cnt: Ember.get(this, 'travelNeedsOptionsCount')\n        });\n        return;\n      }\n\n      passengerTravelNeeds.removeObject(foundTravelNeed);\n    },\n\n    actions: {\n      onAnchorSelect(option) {\n        if (this.get('shiftTimeRange.pickTime') === null || this.get('shiftTimeRange.dropTime') === null) {\n          this.set('isDisableDatePicker', false);\n        }\n\n        Ember.set(this, 'selectedAnchor', option);\n      },\n\n      onServiceNeedsSelect(option) {\n        Ember.set(this, 'selectedNeedsOptions', option);\n      },\n\n      onSelectCompanion(option) {\n        Ember.set(this, 'selectedNoOfCompanions', option);\n        Ember.set(this, 'isEditingStart', true);\n      },\n\n      onSelectTravelNeeds(index, option) {\n        Ember.set(this, 'isEditingStart', true);\n        const travelNeedsGroup = Ember.get(this, 'cloneSelectedNeedsOptions')[index];\n        Ember.set(travelNeedsGroup, 'selected', option);\n      },\n\n      onUndoClick() {\n        const pickAddress = this.get('selectedPickLocation');\n        const dropAddress = this.get('selectedDropLocation');\n\n        if (pickAddress || dropAddress) {\n          Ember.set(this, 'canReset', true);\n        }\n\n        Ember.set(this, 'isEditingStart', false);\n        this.updateValues();\n        this.set('shiftTimeRange.pickTime', null);\n        this.set('shiftTimeRange.dropTime', null);\n        this.setDefaultTravelNeeds();\n        this.defaultSelectedTravelNeeds();\n      },\n\n      onSaveClick() {\n        const isValid = this.checkValidations();\n\n        if (!isValid) {\n          return;\n        }\n\n        Ember.set(this, 'errorMessage', null);\n        Ember.set(this, 'errorMessage2', null);\n        const tripDetails = this.get('tripDetails');\n        const title = 'Edit Trip';\n        const tip = 'Would you like to commit your changes?';\n        const successMsg = 'TRIP ' + tripDetails.tripId + ' EDITED SUCCESSFULLY';\n        this.showToolTip(title, tip, successMsg);\n      },\n\n      onTimeChange(valuePath, value) {\n        Ember.set(this, 'isEditingStart', true);\n        const valueTime = (0, _moment.default)(value[0]).format('hh:mm A');\n        const selectedDate = (0, _moment.default)(this.get('tripDate')).format('MMM D, YYYY');\n        const momentTime = (0, _moment.default)(selectedDate + ' ' + valueTime);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      onChangePickLocation(record) {\n        Ember.set(this, 'isEditingStart', true);\n        this.set('selectedPickLocation', record);\n      },\n\n      onChangeDropLocation(record) {\n        Ember.set(this, 'isEditingStart', true);\n        this.set('selectedDropLocation', record);\n      },\n\n      onPcaChanged() {\n        Ember.set(this, 'isEditingStart', true);\n        this.toggleProperty('isEnablePCA');\n        this.buildPcaAndServiceAnimalTravelNeedForPayload(PCA, this.get('isEnablePCA'));\n      },\n\n      onDeleteTravelNeeds(selectedNeed) {\n        Ember.set(this, 'isEditingStart', true);\n        const selectedNeedsOptions = this.get('cloneSelectedNeedsOptions');\n        const foundTravelNeed = selectedNeedsOptions.find(sno => sno.name === selectedNeed.name || null);\n        selectedNeedsOptions.removeObject(foundTravelNeed);\n        Ember.set(this, 'travelNeedsOptionsCount', Ember.get(this, 'travelNeedsOptionsCount'));\n      },\n\n      oninputTextChange(type, value) {\n        Ember.set(this, 'isEditingStart', true);\n\n        switch (type) {\n          case _stubs.default.PICK_NOTES:\n            Ember.set(this, 'pickNotes', value);\n            break;\n\n          case _stubs.default.DROP_NOTES:\n            Ember.set(this, 'dropNotes', value);\n            break;\n\n          case _stubs.default.LOAD_TIME:\n            this.validateLoadUnloadTime('Load', value);\n            break;\n\n          case _stubs.default.UNLOAD_TIME:\n            this.validateLoadUnloadTime('Unload', value);\n            break;\n\n          default:\n        }\n      },\n\n      onCloseButtonClick() {\n        this.onCloseClick();\n      },\n\n      addTravelNeedItem() {\n        Ember.set(this, 'isEditingStart', true);\n        this.get('cloneSelectedNeedsOptions').pushObject(Ember.Object.create({\n          cnt: null,\n          name: ''\n        }));\n      },\n\n      onRefreshFare() {\n        this.calculateFare();\n      },\n\n      cancel() {\n        this.unloadCurrentTrip();\n\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      },\n\n      onServiceAnimalChanged() {\n        Ember.set(this, 'isEditingStart', true);\n        this.toggleProperty('isServiceAnimalEnable');\n        this.buildPcaAndServiceAnimalTravelNeedForPayload(SERVICE_ANIMAL, this.get('isServiceAnimalEnable'));\n      },\n\n      onTravelNeedOptionSelect(valuePath, value) {\n        this.set('isEditingStart', true);\n        valuePath.set('name', value.name);\n        this.get('selectedTravelNeedsForPayload').push({\n          id: this.generateRandomId(),\n          cnt: null,\n          name: value.name\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-edit-trip/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    LOAD_TIME: 1,\n    UNLOAD_TIME: 2,\n    PICK_NOTES: 3,\n    DROP_NOTES: 4,\n    anchorData: [{\n      'id': 'pick',\n      'name': 'Pick'\n    }, {\n      'id': 'drop',\n      'name': 'Drop'\n    }],\n    usedAttributes: [{\n      'id': 'ambulatory',\n      'name': 'Ambulatory',\n      'value': 1\n    }],\n    travelNeeds: [{\n      'id': 'braces',\n      'name': 'Braces',\n      'value': 0\n    }, {\n      'id': 'supportCane',\n      'name': 'Support Cane',\n      'value': 0\n    }, {\n      'id': 'crutches',\n      'name': 'Crutches',\n      'value': 0\n    }, {\n      'id': 'doubleWheelchair',\n      'name': 'Double Wheelchair',\n      'value': 0\n    }],\n    companions: [{\n      'id': 0,\n      'name': 0,\n      'value': 0\n    }, {\n      'id': 1,\n      'name': 1,\n      'value': 1\n    }, {\n      'id': 2,\n      'name': 2,\n      'value': 2\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-edit-trip/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"i3FX/5+e\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"selectedNeed\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L3:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onCloseClick\\\"],[\\\"Edit Additional Trip Information\\\",[23,[\\\"isEditStart\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[23,[\\\"isEditStart\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[9],[0,\\\"Trip ID: \\\"],[1,[23,[\\\"tripDetails\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  ​\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L15:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L16:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Passenger\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"input-field\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"firstname\\\"]]],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"lastname\\\"]]],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"phoneNumber\\\"]]],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Passenger ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[23,[\\\"passengerDetails\\\",\\\"id\\\"]]],[11,\\\"class\\\",\\\"input-field\\\"],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"number\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L40:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Details\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 ml-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-3\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedAnchor\\\",\\\"id\\\"]],[23,[\\\"anchorOptions\\\"]]],null],[23,[\\\"anchorOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAnchorSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5 position-relative\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"disabled\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[true,\\\"m-d-Y\\\",[23,[\\\"selectedDate\\\"]],null]]],false],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-calendar-o input-icon fa-2x\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedAnchor\\\",\\\"id\\\"]],\\\"pick\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4  position-relative\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"date\\\",\\\"noCalendar\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"minuteIncrement\\\",\\\"placeholder\\\",\\\"onChange\\\"],[[23,[\\\"shiftTimeRange\\\",\\\"pickTime\\\"]],true,true,\\\"h:i K\\\",[23,[\\\"shiftTimeRange\\\",\\\"startofday\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"dropTime\\\"]],1,\\\"HH:MM\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\",\\\"shiftTimeRange.pickTime\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o input-icon fa-2x\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 position-relative\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"date\\\",\\\"noCalendar\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"minuteIncrement\\\",\\\"placeholder\\\",\\\"onChange\\\"],[[23,[\\\"shiftTimeRange\\\",\\\"dropTime\\\"]],true,true,\\\"h:i K\\\",[23,[\\\"shiftTimeRange\\\",\\\"pickTime\\\"]],[23,[\\\"shiftTimeRange\\\",\\\"endofday\\\"]],1,\\\"HH:MM\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\",\\\"shiftTimeRange.dropTime\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o input-icon\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pickup\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"canReset\\\",\\\"selectAddress\\\",\\\"onPickSearch\\\",\\\"onAddressSearch\\\"],[[23,[\\\"canReset\\\"]],[23,[\\\"selectedPickLocation\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickLocation\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"pickNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"PICK_NOTES\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Write a note\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Dropoff\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"canReset\\\",\\\"selectAddress\\\",\\\"onPickSearch\\\",\\\"onAddressSearch\\\",\\\"removeMarker\\\"],[[23,[\\\"canReset\\\"]],[23,[\\\"selectedDropLocation\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropLocation\\\"],null],true]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"dropNotes\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"DROP_NOTES\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Write a note\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Fare\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"flex-grow-1\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"expectedFare\\\"]],[11,\\\"disabled\\\",\\\"true\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n                \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn icon-btn btn-delete btn-outline-secondary places-button\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-refresh\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onRefreshFare\\\"]],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n    \\\"]],\\\"parameters\\\":[]},null],[0,\\\" \\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L138:C25) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Travel Needs\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorMessage2\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage2\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"position-relative\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"button input-plus-icon \\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canPlus\\\"]]],null]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"addTravelNeedItem\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 ml-0\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"cloneSelectedNeedsOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"cloneSelectedNeedsOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchEnabled\\\",\\\"tagName\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[true,\\\"div\\\",[22,3,[]],[23,[\\\"travelNeedOptionsWithFilter\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTravelNeedOptionSelect\\\",[22,3,[]]],null]]],{\\\"statements\\\":[[0,\\\"                          \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                      \\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n                        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n                          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mr-2\\\"],[9],[0,\\\"\\\\n                            \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[22,3,[\\\"cnt\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"SELECTEDNEED_CNT\\\"]]],null]],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                          \\\"],[10],[0,\\\"\\\\n                          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn icon-btn btn-delete btn-outline-secondary places-button\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDeleteTravelNeeds\\\",[22,3,[]]]],[10],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[11,\\\"colspan\\\",\\\"4\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-row\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-4 d-flex align-items-center\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"mr-2 mt-0\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isServiceAnimalEnable\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onServiceAnimalChanged\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"style\\\",\\\"text-overflow: initial;\\\"],[9],[0,\\\"Service Animal\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 d-flex align-items-center\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[21,\\\"isEnablePCA\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPcaChanged\\\"],null]],[11,\\\"class\\\",\\\"mr-2 mt-0\\\"],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"style\\\",\\\"text-overflow: initial;\\\"],[9],[0,\\\"PCA\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex align-items-center\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"50%\\\"],[9],[0,\\\"Companion\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"tagName\\\",\\\"class\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"name\\\",true,\\\"div\\\",\\\"width-100\\\",[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedNoOfCompanions\\\",\\\"id\\\"]],[23,[\\\"companionOptions\\\"]]],null],[23,[\\\"companionOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectCompanion\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Load Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"loadTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"LOAD_TIME\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"th\\\"],[9],[0,\\\"Unload Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"unloadTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"oninputTextChange\\\",[23,[\\\"stubs\\\",\\\"UNLOAD_TIME\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs' @ L230:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Service Needs\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 ml-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"placeholder\\\"],[\\\"input-field\\\",true,\\\"Door to door\\\"]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"placeholder\\\"],[\\\"input-field\\\",true,\\\"Visually Impaired\\\"]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-edit-trip/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-filter-settings/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    tagName: '',\n    title: Ember.computed.readOnly('stackFrame.options.displayName'),\n    allVisbility: true,\n    columns: Ember.computed('stackFrame.options.columns', function () {\n      return Ember.get(this, 'stackFrame.options.columns');\n    }),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    dataColumns: Ember.computed('columns.[]', function () {\n      const columns = this.get('columns');\n      return columns.map(column => {\n        column.set('filterTypeId', null);\n        return column;\n      });\n    }),\n    isClearAllDisabled: Ember.computed('dataColumns.@each.{filterTypeId,filterValues}', function () {\n      const dataColumns = this.get('dataColumns');\n      const length = dataColumns.length;\n      return dataColumns.filter(column => Ember.isEmpty(column.filterTypeId) && Ember.isEmpty(column.filterValues)).length === length;\n    }),\n\n    reOrderFilterSettings(columns) {\n      this.get('widget').mergeState({\n        columns\n      });\n      const tableColumns = this.get('columns') || []; // checkbox and spacer are always in the same location\n\n      tableColumns[0].sortOrder = 0;\n      tableColumns[tableColumns.length - 1].sortOrder = tableColumns.length - 1;\n      tableColumns.forEach(column => {\n        if (columns[column.id]) {\n          column.sortOrder = columns[column.id].index + 1;\n        }\n      });\n      tableColumns.sort(function (a, b) {\n        return a.sortOrder - b.sortOrder;\n      });\n      this.notifyPropertyChange('columns');\n    },\n\n    onFilterValueChange(column, index, event) {\n      const id = column.get('id');\n      const columns = Ember.get(this, 'columns');\n      let filterValues = column.get('filterValues') || [];\n      filterValues = filterValues.slice();\n      filterValues[index] = event.target.value;\n      columns[id] = {\n        filterValues\n      };\n      this.get('widget').mergeState({\n        columns\n      });\n    },\n\n    actions: {\n      onCloseClick() {\n        const workspace = this.get('workspace'); // save any filter changes i.e columns reorders, visibility, and filter changes\n\n        workspace.saveTempDashboardState();\n        this.onCloseClick();\n      },\n\n      onReorderItems(tableColumns) {\n        const columns = tableColumns.reduce((obj, column, index) => {\n          const id = column.id;\n          obj[id] = {\n            index\n          };\n          return obj;\n        }, {});\n        this.reOrderFilterSettings(columns);\n      },\n\n      onClickVisibilityCheckbox(column, event) {\n        const id = column.get('id');\n        const columns = {};\n        columns[id] = {\n          hidden: !event.target.checked\n        };\n\n        if (columns[id].hidden) {\n          columns[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n          columns[id].filterValues = null;\n        }\n\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onToggleAllVisibility(tableColumns) {\n        const allVisbility = !this.get('allVisbility');\n        this.set('allVisbility', allVisbility);\n        const columns = tableColumns.reduce((obj, column) => {\n          const id = column.id;\n          obj[id] = {\n            hidden: allVisbility\n          };\n\n          if (allVisbility) {\n            obj[id].filterTypeId = 'null'; // this is actually the id of the null filter\n\n            obj[id].filterValues = null;\n          }\n\n          return obj;\n        }, {});\n        Ember.run(() => this.get('widget').mergeState({\n          columns\n        }));\n      },\n\n      onSelectFilterType(column, filterType) {\n        const id = column.get('id');\n        const columns = Ember.get(this, 'columns') || [];\n        columns[id] = {\n          filterTypeId: filterType.id,\n          filterType: filterType\n        };\n        this.get('widget').mergeState({\n          columns\n        });\n      },\n\n      onSearchChange(column, index, event) {\n        Ember.run.debounce(this, 'onFilterValueChange', column, index, event, 300);\n      },\n\n      clearFilters() {\n        const columnList = this.get('columns') || [];\n        let columns = null;\n        if (columnList.length !== 0) columns = columnList.map(column => {\n          column.set('filterTypeId', null);\n          column.set('filterValues', null);\n          column.set('filterType', {\n            arity: 1\n          });\n          return column;\n        });\n        Ember.set(this, 'columns', columns);\n        this.get('widget').mergeState({\n          columns\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-filter-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tXUdMX/Q\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"group\\\",\\\"column\\\",\\\"item\\\",\\\"filterType\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"playback-filter-settings-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-filter-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-filter-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-subheader data-test-filter-side-bar-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"reorder-column\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"visibility-column\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleAllVisibility\\\",[23,[\\\"dataColumns\\\"]]],null]],[9],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-\\\",[27,\\\"if\\\",[[23,[\\\"allVisbility\\\"]],\\\"eye-slash\\\",\\\"eye\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"header-label-column\\\"],[9],[0,\\\"Column\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"filter-type-column\\\"],[9],[0,\\\"Filter\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"header-button-outline data-test-clear-filter-button\\\"],[12,\\\"disabled\\\",[21,\\\"isClearAllDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"clearFilters\\\"],null]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n                  Clear All \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-table-wrapper data-test-filter-side-bar-table\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"sortable-group\\\",null,[[\\\"classNames\\\",\\\"tagName\\\",\\\"onChange\\\"],[\\\"filter-settings-table\\\",\\\"div\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onReorderItems\\\"],null]]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dataColumns\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"item\\\"]],\\\"expected `group.item` to be a contextual component but found a string. Did you mean `(component group.item)`? ('adept-iq/pods/components/side-drawer/reconcile-filter-settings/template.hbs' @ L30:C13) \\\"],null]],[[\\\"classNames\\\",\\\"tagName\\\",\\\"model\\\"],[\\\"filter-setting-row\\\",\\\"div\\\",[22,3,[]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,3,[\\\"label\\\"]],\\\"priorityId\\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"handle\\\"]],\\\"expected `item.handle` to be a contextual component but found a string. Did you mean `(component item.handle)`? ('adept-iq/pods/components/side-drawer/reconcile-filter-settings/template.hbs' @ L32:C17) \\\"],null]],[[\\\"classNames\\\"],[\\\"setting-icon\\\"]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[7,\\\"input\\\"],[12,\\\"data-filter-checkbox-id\\\",[28,[[23,[\\\"widget\\\",\\\"typeId\\\"]],[27,\\\"if\\\",[[23,[\\\"widget\\\",\\\"typeId\\\"]],\\\"-\\\",\\\"\\\"],null],[22,3,[\\\"id\\\"]],\\\" \\\",[27,\\\"if\\\",[[22,3,[\\\"hidden\\\"]],\\\"\\\",\\\"active\\\"],null]]]],[11,\\\"class\\\",\\\"display-checkbox\\\"],[11,\\\"data-test-visibility-column\\\",\\\"\\\"],[12,\\\"checked\\\",[27,\\\"not\\\",[[22,3,[\\\"hidden\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClickVisibilityCheckbox\\\",[22,3,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[22,3,[\\\"label\\\"]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-type\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[22,3,[\\\"hidden\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n                      \\\"],[1,[22,5,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"colspan\\\",\\\"2\\\"],[11,\\\"class\\\",\\\"setting-item-value\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"data-test-filterValue-column\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[22,3,[\\\"hidden\\\"]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n                  \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-filter-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-noshow-trip/component\", [\"exports\", \"moment\", \"ember-concurrency\"], function (_exports, _moment, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    editableSections: null,\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    noshowReason: null,\n    noShowTripNote: '',\n    errors: null,\n    classNames: ['reconcile-widget-base'],\n    //computed properties\n    selectedTrip: Ember.computed.alias('stackFrame.options.trip'),\n    title: Ember.computed.readOnly('stackFrame.options.title'),\n    stopDetails: Ember.computed.alias('reconcile.reconcileStops'),\n    tripDetails: Ember.computed.alias('reconcile.reconcileTrip'),\n    passengerTripDetails: Ember.computed.alias('reconcile.selectedTripRow'),\n    reconcileStopPointMap: Ember.computed.alias('reconcile.reconcileStopPointMap'),\n    selectedTripId: Ember.computed.alias('reconcile.reconcileSelectedTripId'),\n    passengerDetails: Ember.computed.alias('reconcile.reconcilePassenger'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    reconcileTripDate: Ember.computed('reconcile.reconcileDate', function () {\n      const reconcileDate = this.get('reconcile.reconcileDate');\n      return reconcileDate ? (0, _moment.default)(reconcileDate).format('MM-DD-YYYY') : '';\n    }),\n    tripDate: Ember.computed('tripDetails.promiseTime', function () {\n      const requestTime = this.get('tripDetails.promiseTime');\n      return requestTime ? (0, _moment.default)(requestTime).format('hh:mm A') : '';\n    }),\n    canUndo: Ember.computed.or('selectedReason', 'noShowTripNote', 'selectedDateTimeRage.date', 'shiftStartTimeRange.starttime'),\n    canSave: Ember.computed.and('selectedReason', 'shiftStartTimeRange.starttime'),\n    reasonOptions: Ember.computed('selectedReason', function () {\n      const noShowReasons = this.store.peekAll('cs-config-item').filter(message => {\n        return message.category === 'config-System_Configuration-no_show_reason_codes';\n      });\n      return noShowReasons.map(reason => reason.displayName);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'selectedDateTimeRage', {\n        today: (0, _moment.default)().hours(0).minutes(0).format('MM-DD-YYYY'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(7, 'years').format('MM-DD-YYYY')\n      });\n      Ember.set(this, 'shiftStartTimeRange', {\n        today: (0, _moment.default)().hours(0).minutes(0).format('YYYY-MM-DD'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(7, 'years').format('YYYY-MM-DD')\n      });\n      this.set('pickAddress', this.getSelectedPickOrDropAddress('pick'));\n      this.set('dropAddress', this.getSelectedPickOrDropAddress('drop'));\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    getSelectedPickOrDropAddress(type) {\n      const reconcileStopPointMap = this.get('reconcileStopPointMap');\n      const selectedTripId = this.get('selectedTripId');\n      return reconcileStopPointMap[selectedTripId].find(ele => ele.type.toLowerCase() === type);\n    },\n\n    saveNoShowTripTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const reconcileTripAdapter = store.adapterFor('reconcile-trip'); // const date = moment(this.get('selectedDateTimeRage').date).format('MM-DD-YYYY');\n\n        const date = (0, _moment.default)(this.reconcileTripDate).format('MM-DD-YYYY');\n        const startTime = (0, _moment.default)(this.get('shiftStartTimeRange').starttime).format('hh:mm a');\n        const dt = (0, _moment.default)(date + ' ' + startTime).toISOString();\n        const payload = {\n          tripId: this.passengerTripDetails.tripId,\n          reason: this.get('selectedReason'),\n          date: dt,\n          note: this.noShowTripNote,\n          userId: this.session.data.authenticated.userId\n        };\n        yield reconcileTripAdapter.patchTrip(payload, 'noshow trip');\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    saveNoShowTrips() {\n      const tooltip = this.get('tooltip');\n      const title = 'No Show Trip';\n      const tip = `No show trip ${this.passengerTripDetails.tripId}?`;\n      const successMsg = `SUCCESSFULLY NO SHOWED TRIP ${this.passengerTripDetails.tripId}`;\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return Ember.get(this, 'saveNoShowTripTask').perform().then(() => {\n            this.send('cancel');\n            this.get('notifications').success(successMsg);\n            this.get('workspace').popState('reconcileNoShowTrip');\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in no-show trip, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    checkValidations() {\n      let isValid = true;\n      Ember.set(this, 'errors', []);\n\n      if (!Ember.get(this, 'selectedReason')) {\n        isValid = false;\n        this.errors.push('Please select reason');\n      } // if (!get(this, 'selectedDateTimeRage.date')) {\n      //   isValid = false;\n      //   this.errors.push('Please select date');\n      // }\n\n\n      if (!Ember.get(this, 'shiftStartTimeRange.starttime')) {\n        isValid = false;\n        this.errors.push('Please select time');\n      }\n\n      return isValid;\n    },\n\n    actions: {\n      onChangeShiftStartTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n\n        if (valuePath === 'shiftStartTimeRange.starttime') {\n          this.set('shiftStartTimeRange.startforendtime', momentTime.toISOString());\n        }\n\n        if (valuePath === 'shiftStartTimeRange.date') {\n          this.set('shiftStartTimeRange.startime', null);\n          this.set('shiftStartTimeRange.endtime', null);\n          this.set('shiftStartTimeRange.startforendtime', momentTime.startOf('day').toISOString());\n          this.set('shiftStartTimeRange.startofday', momentTime.startOf('day').toISOString());\n          this.set('shiftStartTimeRange.endofday', momentTime.endOf('day').toISOString());\n        }\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n\n        if (valuePath === 'selectedDateTimeRage.starttime') {\n          this.set('selectedDateTimeRage.startforendtime', momentTime.toISOString());\n        }\n\n        if (valuePath === 'selectedDateTimeRage.date') {\n          this.set('selectedDateTimeRage.startime', null);\n          this.set('selectedDateTimeRage.endtime', null);\n          this.set('selectedDateTimeRage.startforendtime', momentTime.startOf('day').toISOString());\n          this.set('selectedDateTimeRage.startofday', momentTime.startOf('day').toISOString());\n          this.set('selectedDateTimeRage.endofday', momentTime.endOf('day').toISOString());\n        }\n      },\n\n      onUndoClick() {\n        this.set('shiftStartTimeRange.starttime', null);\n        this.set('selectedDateTimeRage.date', null);\n        this.set('selectedReason', null);\n        this.set('noShowTripNote', '');\n      },\n\n      onSaveClick() {\n        const isValid = this.checkValidations();\n\n        if (isValid) {\n          this.saveNoShowTrips();\n        }\n      },\n\n      onChangeReason(option) {\n        this.set('selectedReason', option);\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"05uqFOd5\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"reason\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.hbs' @ L4:C2) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"No Show Trip\\\",[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.hbs' @ L13:C3) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"Trip Id: \\\"],[1,[23,[\\\"passengerTripDetails\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n         \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[9],[1,[22,3,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"         \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.hbs' @ L28:C3) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.hbs' @ L29:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Reason\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"reasonOptions\\\"]],true,[23,[\\\"selectedReason\\\"]],\\\"Select reason\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeReason\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n\\\"],[0,\\\"      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"reconcileTripDate\\\"]],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"placeholder\\\",\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"HH:MM\\\",\\\"en\\\",1,false,true,false,0,true,\\\"h:i K\\\",[23,[\\\"shiftStartTimeRange\\\",\\\"starttime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeShiftStartTime\\\",\\\"shiftStartTimeRange.starttime\\\"],null]]]],false],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"valign\\\",\\\"top\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Note\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"textarea\\\"],[11,\\\"rows\\\",\\\"3\\\"],[11,\\\"maxlength\\\",\\\"150\\\"],[11,\\\"placeholder\\\",\\\"Write a note\\\"],[12,\\\"value\\\",[21,\\\"noShowTripNote\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"noShowTripNote\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-right mt-1\\\"],[9],[1,[23,[\\\"noShowTripNote\\\",\\\"length\\\"]],false],[0,\\\"/150\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.hbs' @ L98:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"20%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Trip ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"text\\\",[23,[\\\"passengerTripDetails\\\",\\\"tripId\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"First Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"text\\\",[23,[\\\"passengerTripDetails\\\",\\\"riderDetails\\\",\\\"firstname\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Last Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"text\\\",[23,[\\\"passengerTripDetails\\\",\\\"riderDetails\\\",\\\"lastname\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Request Time\\\"],[10],[0,\\\"\\\\n         \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[27,\\\"moment-format\\\",[[23,[\\\"passengerTripDetails\\\",\\\"riderEvent\\\",\\\"scheduledtime\\\"]],\\\"hh:mm A\\\"],null]],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Pickup Address\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"text\\\",[23,[\\\"pickAddress\\\",\\\"address\\\",\\\"formattedaddress\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Dropoff Address\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"type\\\",\\\"value\\\"],[\\\"true\\\",\\\"text\\\",[23,[\\\"dropAddress\\\",\\\"address\\\",\\\"formattedaddress\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-noshow-trip/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-reopen-dates/component\", [\"exports\", \"ember-light-table\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\", \"adept-iq/pods/components/side-drawer/reconcile-reopen-dates/config\", \"ember-concurrency\", \"moment\"], function (_exports, _emberLightTable, _fetchAssignableVehicleDrivers, _config, _emberConcurrency, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    config: _config.default,\n    title: 'Reopen Dates to Editing',\n    onCloseClick: null,\n    closedProvidersList: null,\n    errorMessage: '',\n    isTableEmpty: false,\n    selectedDates: Ember.computed.alias('closedProviderDatesTable.selectedRows.[]'),\n    canSave: Ember.computed.and('selectedProvider', 'selectedDates'),\n    canUndo: Ember.computed.alias('selectedProvider'),\n    canSearch: Ember.computed.alias('selectedProvider'),\n    reconcileRouteId: Ember.computed.alias('reconcile.reconcileSelectedRouteId'),\n    providerOptions: Ember.computed('selectedProvider', function () {\n      return this.get('store').peekAll('provider');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const closedProviderDatesTable = new _emberLightTable.default(this.config.reopenDatesTableColumns);\n      this.set('closedProviderDatesTable', closedProviderDatesTable);\n      this.onClosedProviderPanelClick = this.onClosedProviderPanelClick.bind(this);\n    },\n\n    getUniqueList(list, keyType) {\n      return [...new Map(list.map(item => [item[keyType], item])).values()];\n    },\n\n    onClosedProviderPanelClick() {\n      this.uncheckAll();\n\n      if (!Ember.isEmpty(this.selectedDates)) {\n        this.selectedDates.map(row => {\n          row.set('isChecked', true);\n        });\n      }\n    },\n\n    uncheckAll() {\n      const rows = Ember.get(this, 'closedProviderDatesTable.rows');\n      rows.map(row => {\n        row.set('isChecked', false);\n      });\n    },\n\n    resetTable() {\n      Ember.set(this, 'isTableEmpty', false);\n      Ember.set(this, 'closedProvidersList', null);\n      this.get('closedProviderDatesTable').setRows([]);\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Reopen Dates';\n      const tip = 'Are you sure you want to reopen the selected dates?';\n      const successMsg = 'SELECTED DATES HAVE BEEN SUCCESSFULLY REOPENED';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return this.get('saveReopenDatesTask').perform().then(() => {\n            this.get('workspace').popState('reconcileOpenDates');\n            this.get('notifications').success(successMsg);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    getErrorMessage(error, typeMsg) {\n      let message;\n\n      switch (error.status) {\n        case 400:\n          message = 'There was a problem with one of the fields. Please try again.';\n          break;\n\n        default:\n          message = `There was a problem in ${typeMsg}, please try again.`;\n          break;\n      }\n\n      return message;\n    },\n\n    saveReopenDatesTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const reconcileRouteAdapter = store.adapterFor('reconcile-route');\n      const routes = [];\n      let routeId = 0;\n\n      if (!Ember.isEmpty(this.selectedDates) && !Ember.isEmpty(this.closedProvidersList)) {\n        this.selectedDates.map(selectedRow => {\n          const record = selectedRow.get('content');\n          const selectedDateRecords = this.closedProvidersList.filter(item => {\n            return item.plannedStartTime === record.plannedStartTime && item.providerName === record.providerName;\n          });\n\n          if (!Ember.isEmpty(selectedDateRecords)) {\n            selectedDateRecords.map(finalItem => {\n              routeId = finalItem.routeId;\n              routes.push({\n                routeId: finalItem.routeId,\n                providerName: finalItem.providerName,\n                reopenedDate: (0, _moment.default)(new Date()).toISOString(),\n                reopenedBy: this.session.data.authenticated.tokenInfo.firstName\n              });\n            });\n          }\n        });\n\n        if (!Ember.isEmpty(routes)) {\n          const payload = {\n            id: routeId,\n            routes\n          };\n\n          try {\n            yield reconcileRouteAdapter.patchRoute(payload, 'reopen dates');\n            const isExists = routes.filter(route => route.routeId === this.reconcileRouteId)[0];\n\n            if (isExists) {\n              yield Ember.get(this, 'reconcile.fetchRouteData').perform();\n            }\n          } catch (error) {\n            this.get('notifications').warning(this.getErrorMessage(error, 'saving reopened dates'));\n            this.get('tooltip').reset();\n          }\n        }\n      }\n    }),\n    fetchClosedProvidersTask: (0, _emberConcurrency.task)(function* (providerName) {\n      const closedDateList = [];\n      const closedDateFinalList = [];\n      const queryOptions = {\n        isClosed: true,\n        providerName\n      };\n\n      try {\n        const closedProviders = yield this.get('store').query('reconcile-route-id', queryOptions);\n\n        if (!Ember.isEmpty(closedProviders)) {\n          closedProviders.map(data => {\n            closedDateList.push(data);\n          });\n        }\n      } catch (error) {\n        this.get('notifications').warning(this.getErrorMessage(error, 'getting closed dates'));\n        throw error;\n      }\n\n      if (!Ember.isEmpty(closedDateList)) {\n        closedDateList.map(item => {\n          item.set('plannedStartTime', (0, _moment.default)(item.plannedStartTime).format('MM/DD/YYYY'));\n        });\n        Ember.set(this, 'closedProvidersList', closedDateList);\n        const uniqueDateList = this.getUniqueList(closedDateList, 'plannedStartTime');\n\n        if (!Ember.isEmpty(uniqueDateList)) {\n          uniqueDateList.map(item => {\n            item.set('isChecked', false);\n            closedDateFinalList.push({\n              'plannedStartTime': item.plannedStartTime,\n              'providerName': item.providerName\n            });\n          });\n          this.get('closedProviderDatesTable').setRows(closedDateFinalList);\n        }\n      }\n\n      if (Ember.isEmpty(closedDateFinalList)) {\n        Ember.set(this, 'isTableEmpty', true);\n      }\n    }),\n    actions: {\n      onCancel() {\n        this.onCloseClick();\n      },\n\n      onUndoClick() {\n        this.set('selectedProvider', null);\n        this.resetTable();\n      },\n\n      onProviderOptionSelect(option) {\n        Ember.set(this, 'selectedProvider', option);\n        this.resetTable();\n      },\n\n      onSearchButtonClick() {\n        this.resetTable();\n        this.get('fetchClosedProvidersTask').perform(this.selectedProvider.id);\n      },\n\n      async onSaveClick() {\n        if (Ember.isEmpty(this.selectedDates)) {\n          Ember.set(this, 'errorMessage', 'Please select atleast one date');\n          return;\n        }\n\n        Ember.set(this, 'errorMessage', '');\n        this.showToolTip();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-reopen-dates/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    title: 'Reconcile',\n    reopenDatesTableColumns: [{\n      label: 'Dates',\n      valuePath: 'plannedStartTime',\n      resizable: true,\n      minResizeWidth: 50\n    }, {\n      label: 'Reopen',\n      resizable: false,\n      minResizeWidth: 50,\n      cellComponent: 'generic-components/table/cells/check-box'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ctOV7XM3\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base reconcile-dates\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L5:C2) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L14:C3) \\\"],null]],null,{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L19:C3) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L20:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Choose a provider\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Provider\\\",\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedProvider\\\",\\\"id\\\"]],[23,[\\\"providerOptions\\\"]]],null],[23,[\\\"providerOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"25%\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L46:C5) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\",\\\"onPanelHeaderClick\\\"],[\\\"Search for closed dates\\\",true,[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onClosedProviderPanelClick\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSearch\\\"]]],null]],[11,\\\"class\\\",\\\"btn btn-gray btn-position\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchButtonClick\\\"],null]],[9],[0,\\\"Search\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"closedProviderDatesTable\\\"]]],[[\\\"height\\\",\\\"class\\\",\\\"estimatedRowHeight\\\"],[\\\"200px\\\",\\\"mx-auto\\\",23]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L57:C4) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L61:C5) \\\"],null]],[[\\\"canSelect\\\"],[false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchClosedProvidersTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L66:C7) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isTableEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs' @ L72:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n    No dates found\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-reopen-dates/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/component\", [\"exports\", \"moment\", \"ember-concurrency\"], function (_exports, _moment, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    session: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    errors: null,\n    title: 'Add Replacement Route',\n    breakdownRouteId: null,\n    breakdownRouteType: 'Breakdown Replacement',\n    replacementRouteNote: '',\n    today: (0, _moment.default)().toISOString(),\n    routeDetails: Ember.computed.readOnly('stackFrame.options.route'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    canUndo: Ember.computed.or('breakdownRouteId', 'selectedDateTimeRage.{starttime,endtime}', 'replacementRouteNote', 'selectedVehicle', 'selectedDriver'),\n    canSave: Ember.computed.and('breakdownRouteId', 'selectedDateTimeRage.{starttime,endtime}', 'selectedVehicle', 'selectedDriver'),\n    vehicleOptions: Ember.computed.alias('reconcile.reconcileVehicle'),\n    driverOptions: Ember.computed.alias('reconcile.reconcileDriver'),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('selectedDateTimeRage', {\n        today: (0, _moment.default)().hours(0).minutes(0).format('YYYY-MM-DD'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(7, 'years').format('MM-DD-YYYY')\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Add Replacement Route';\n      const tip = 'Would you like to commit your changes?';\n      const successMsg = `YOU REPLACED ROUTE ${this.routeDetails.routeId} WITH ROUTE ${this.breakdownRouteId} SUCCESSFULLY`;\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return this.get('saveReplacementRouteTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('reconcileReplacementBreakdown');\n            this.get('notifications').success(successMsg);\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              case 409:\n                message = `The route name ${this.breakdownRouteId} is already taken, please try another.`;\n                break;\n\n              default:\n                message = 'There was a problem creating the route, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    saveReplacementRouteTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const reconcileRouteAdapter = store.adapterFor('reconcile-route');\n        const dt = (0, _moment.default)(this.routeDetails.breakdownTime).format('MM-DD-YYYY');\n        let startTime = this.get('selectedDateTimeRage').starttime;\n        let endTime = this.get('selectedDateTimeRage').endtime;\n\n        if (startTime && endTime) {\n          const st = (0, _moment.default)(this.get('selectedDateTimeRage').starttime).format('hh:mm a');\n          const end = (0, _moment.default)(this.get('selectedDateTimeRage').endtime).format('hh:mm a');\n          startTime = (0, _moment.default)(dt + ' ' + st).toISOString();\n          endTime = (0, _moment.default)(dt + ' ' + end).toISOString();\n        }\n\n        const breakdownTime = (0, _moment.default)(this.routeDetails.breakdownTime).toISOString();\n        const payload = {\n          id: Ember.get(this, 'breakdownRouteId'),\n          type: Ember.get(this, 'breakdownRouteType'),\n          providerName: Ember.get(this, 'routeDetails').providerName,\n          plannedStartTime: startTime,\n          plannedEndTime: endTime,\n          breakdownLocation: Ember.get(this, 'routeDetails').breakdownLocation,\n          breakdownTime: breakdownTime,\n          note: this.replacementRouteNote,\n          userId: this.session.data.authenticated.userId,\n          vehicle: {\n            id: Ember.get(this, 'selectedVehicle').vehicleId\n          },\n          driver: {\n            id: Ember.get(this, 'selectedDriver').driverId\n          }\n        };\n        yield reconcileRouteAdapter.postRoute(payload, payload.type, Ember.get(this, 'routeDetails').routeId);\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    checkValidations() {\n      let isValid = true;\n      Ember.set(this, 'errors', []);\n\n      if (!this.get('breakdownRouteId')) {\n        this.errors.push('Route ID is required');\n        isValid = false;\n      }\n\n      if (isNaN(parseInt(this.get('breakdownRouteId'), 10))) {\n        this.errors.push('Route ID must be a numerical entry');\n        isValid = false;\n      }\n\n      const startTime = this.get('selectedDateTimeRage').starttime;\n      const endTime = this.get('selectedDateTimeRage').endtime;\n\n      if (startTime && endTime) {\n        const replacementStartTime = (0, _moment.default)(this.get('selectedDateTimeRage').starttime);\n        const replacementEndTime = (0, _moment.default)(this.get('selectedDateTimeRage').endtime);\n\n        if (replacementStartTime.isSameOrAfter(replacementEndTime)) {\n          this.errors.push('Start Time cannot be after End Time');\n          isValid = false;\n        }\n      } else {\n        this.errors.push('Start and end time can not be empty');\n        isValid = false;\n      }\n\n      if (Ember.isEmpty(this.get('selectedVehicle'))) {\n        this.errors.push('Vehicle ID is required');\n        isValid = false;\n      }\n\n      if (Ember.isEmpty(this.get('selectedDriver'))) {\n        this.errors.push('Driver ID is required');\n        isValid = false;\n      }\n\n      return isValid;\n    },\n\n    unloadPendingTrips() {\n      const trips = Ember.get(this, 'store').peekAll('reconcile-trip').filter(trip => {\n        return trip.routeId === this.routeDetails.get('routeId');\n      });\n\n      if (trips) {\n        const pendingStatusTypes = ['scheduled', 's'];\n        trips.map(trip => {\n          const stops = Ember.get(this, 'store').peekAll('reconcile-stop').filter(stop => {\n            return stop.tripId === trip.tripId && !Ember.isEmpty(stop.status) && pendingStatusTypes.includes(stop.status.toLowerCase());\n          });\n\n          if (stops.length) {\n            stops.map(stop => {\n              this.store.unloadRecord(stop);\n            });\n            this.store.unloadRecord(trip);\n          }\n        });\n        Ember.set(this, 'reconcile.reconcileSelectedTripId', null);\n      }\n    },\n\n    resetTimeProperties() {\n      this.setProperties({\n        driverShiftStart: null,\n        driverShiftEnd: null,\n        driverShiftStartTime: null,\n        driverShiftEndTime: null\n      });\n    },\n\n    actions: {\n      onDriverOptionSelect(option) {\n        Ember.set(this, 'selectedDriver', option);\n        Ember.set(this, 'driverShiftStart', option.shiftStartTime);\n        Ember.set(this, 'driverShiftEnd', option.shiftEndTime);\n      },\n\n      onVehicleOptionSelect(option) {\n        Ember.set(this, 'selectedVehicle', option);\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      onUndoClick() {\n        this.set('breakdownRouteId', '');\n        this.set('replacementRouteNote', '');\n        this.set('selectedDateTimeRage.starttime', null);\n        this.set('selectedDateTimeRage.endtime', null);\n        this.set('selectedDriver', null);\n        this.set('selectedVehicle', null);\n      },\n\n      onSaveClick() {\n        const isValid = this.checkValidations();\n\n        if (isValid) {\n          this.showToolTip();\n        }\n      },\n\n      cancel() {\n        this.unloadPendingTrips();\n\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.driverVehicleMockData = void 0;\n  const driverVehicleMockData = [{\n    id: 400022\n  }, {\n    id: 400023\n  }, {\n    id: 400024\n  }, {\n    id: 400025\n  }, {\n    id: 400026\n  }, {\n    id: 400027\n  }, {\n    id: 400028\n  }, {\n    id: 400029\n  }, {\n    id: 400030\n  }, {\n    id: 400031\n  }];\n  _exports.driverVehicleMockData = driverVehicleMockData;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"zVoVEDL2\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"option\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs' @ L4:C2) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs' @ L13:C3) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"Original Route: \\\"],[1,[23,[\\\"routeDetails\\\",\\\"routeId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n         \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"         \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs' @ L28:C3) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs' @ L29:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Add Breakdown Route\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n         \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"extra\\\"],[[27,\\\"readonly\\\",[[23,[\\\"breakdownRouteId\\\"]]],null],\\\"Enter Route ID\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"breakdownRouteId\\\"]]],null]],null],[27,\\\"hash\\\",null,[[\\\"max\\\",\\\"min\\\"],[30,1]]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"routeDetails\\\",\\\"breakdownTime\\\"]],\\\"MM-DD-YYYY\\\"],null]],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Type\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"breakdownRouteType\\\"]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Breakdown Location\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"routeDetails\\\",\\\"breakdownLocation\\\"]]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Breakdown Time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"routeDetails\\\",\\\"breakdownTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Set Start time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n         \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"startofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endtime\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"starttime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.starttime\\\"],null]]]],false],[0,\\\"         \\\\n      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Set End time\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n         \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"starttime\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endtime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.endtime\\\"],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"valign\\\",\\\"top\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"textarea\\\"],[11,\\\"rows\\\",\\\"3\\\"],[11,\\\"maxlength\\\",\\\"150\\\"],[11,\\\"placeholder\\\",\\\"Write a note\\\"],[12,\\\"value\\\",[21,\\\"replacementRouteNote\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"replacementRouteNote\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[10],[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-right mt-1\\\"],[9],[1,[23,[\\\"replacementRouteNote\\\",\\\"length\\\"]],false],[0,\\\"/150\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs' @ L118:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Driver\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"driverId\\\",true,[27,\\\"find-by\\\",[\\\"driverId\\\",[23,[\\\"selectedDriver\\\",\\\"driverId\\\"]],[23,[\\\"driverOptions\\\"]]],null],[23,[\\\"driverOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDriverOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,3,[\\\"driverId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedDriver\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Shift Start\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"driverShiftStart\\\"]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Shift End\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"driverShiftEnd\\\"]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs' @ L153:C3) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Vehicle\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"vehicleId\\\",true,[27,\\\"find-by\\\",[\\\"vehicleId\\\",[23,[\\\"selectedVehicle\\\",\\\"vehicleId\\\"]],[23,[\\\"vehicleOptions\\\"]]],null],[23,[\\\"vehicleOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onVehicleOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"         \\\"],[1,[22,2,[\\\"vehicleId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Type\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"vehicleType\\\"]]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n     \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Wide Wheelchair\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"checked\\\",[23,[\\\"selectedVehicle\\\",\\\"wideWheelchair\\\"]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Wheelchair Seats\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"wheelchairSeats\\\"]]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Ambulatory Seats\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"ambulatorySeats\\\"]]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n   \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"th\\\"],[9],[0,\\\"Flex Seats\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedVehicle\\\",\\\"flexSeats\\\"]]],[9],[10],[10],[0,\\\"\\\\n   \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-replacement-breakdown/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/component\", [\"exports\", \"moment\", \"ember-light-table\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/reconcile-rescue-route/config\"], function (_exports, _moment, _emberLightTable, _emberConcurrency, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    reconcile: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    routeId: null,\n    onCloseClick: null,\n    timeFormat: 'm-d-Y h:i K',\n    title: 'Rescue Route',\n    lateTrips: Ember.computed.alias('reconcile.reconcileLateTrips'),\n    oldRouteId: Ember.computed.readOnly('reconcile.reconcileSelectedRouteId'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    reconcileTripDate: Ember.computed.readOnly('reconcile.reconcileDate'),\n    reconcileRouteInfo: Ember.computed.readOnly('reconcile.reconcileRouteInfo'),\n    reconcileProviderName: Ember.computed.alias('reconcile.reconcileProviderName'),\n    reconcileMode: Ember.computed.alias('reconcile.reconcileMode'),\n    overrideVehicleOptions: Ember.computed.alias('reconcile.reconcileVehicles'),\n    overrideDriverOptions: Ember.computed.alias('reconcile.reconcileDrivers'),\n    canUndo: Ember.computed.or('routeId', 'selectedDateTimeRage.{starttime,endtime}', 'overrideSelectedDriver', 'overrideSelectedVehicle'),\n    canSave: Ember.computed.and('routeId', 'selectedDateTimeRage.{starttime,endtime}', 'overrideSelectedDriver', 'overrideSelectedVehicle'),\n    selectedTrips: Ember.computed.alias('tripsTable.selectedRows'),\n\n    init() {\n      this._super(...arguments);\n\n      const table = new _emberLightTable.default(_config.tripColumns);\n      this.set('tripsTable', table);\n\n      if (this.lateTrips) {\n        this.lateTrips.map(item => {\n          item.isChecked = false;\n        });\n      }\n\n      this.get('tripsTable').setRows(this.lateTrips);\n      Ember.set(this, 'selectedDateTimeRage', {\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)(this.reconcileTripDate).startOf('day').toISOString(),\n        startofday: (0, _moment.default)(this.reconcileTripDate).startOf('day').toISOString(),\n        endofday: (0, _moment.default)(this.reconcileTripDate).endOf('day').toISOString()\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('600px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    saveRescueRouteTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const reconcileRescueRouteAdapter = store.adapterFor('reconcile-route');\n      const vehicleData = this.get('overrideSelectedVehicle');\n      const driverData = this.get('overrideSelectedDriver');\n      const trips = this.get('lateTrips');\n      const starttime = this.get('selectedDateTimeRage').starttime;\n      const endTime = this.get('selectedDateTimeRage').endtime;\n      const newRouteId = this.get('routeId');\n      const tripData = [];\n\n      if (trips) {\n        trips.map(items => {\n          if (items && items.isChecked) {\n            tripData.push(items.tripId);\n          }\n        });\n      }\n\n      const payload = {\n        id: newRouteId,\n        type: 'Rescue Replacement',\n        serviceMode: this.reconcileMode,\n        plannedStartTime: starttime,\n        plannedEndTime: endTime,\n        providerName: this.reconcileProviderName,\n        userId: this.session.data.authenticated.userId,\n        vehicle: {\n          id: vehicleData.vehicleId\n        },\n        driver: {\n          id: driverData.driverId\n        },\n        trips: tripData\n      };\n\n      try {\n        return yield reconcileRescueRouteAdapter.postRoute(payload, payload.type, this.get('oldRouteId'));\n      } catch (e) {\n        throw e;\n      }\n    }),\n\n    showToolTip() {\n      const rows = this.get('tripsTable.rows');\n      const tripData = [];\n\n      if (rows) {\n        rows.map(data => {\n          if (data && data.get('tripId') && data.get('isChecked')) {\n            tripData.push(data);\n          }\n        });\n      }\n\n      const tooltip = this.get('tooltip');\n      const title = 'Rescue Route';\n      const tip = 'You are rescuing ' + tripData.length + ` late trips from Route ${this.get('oldRouteId')} to new Route ${this.get('routeId')}.`;\n      const successMsg = 'Successfully transferred ' + tripData.length + ` trips to new route ${this.get('routeId')}`;\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveRescueRouteTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('rescueRouteReconcile');\n            tooltip.reset();\n            this.get('notifications').success(successMsg);\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              case 409:\n                message = `The route name ${this.get('routeId')} is already taken, please try another.`;\n                break;\n\n              default:\n                message = 'There was a problem creating the route, please try again.';\n                break;\n            }\n\n            this.set('errorMessage', message);\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    unloadPendingTrips() {\n      const tripsRow = this.get('selectedTrips');\n\n      if (!Ember.isEmpty(tripsRow)) {\n        tripsRow.map(tripRow => {\n          const tripData = tripRow.get('content');\n          const stops = Ember.get(this, 'store').peekAll('reconcile-stop').filter(stop => {\n            return stop.tripId === tripData.tripId;\n          });\n\n          if (stops.length) {\n            stops.map(stop => {\n              this.store.unloadRecord(stop);\n            });\n            const tripRecord = Ember.get(this, 'store').peekRecord('reconcile-trip', tripData.tripId);\n\n            if (!Ember.isEmpty(tripRecord)) {\n              this.store.unloadRecord(tripRecord);\n            }\n          }\n        });\n        Ember.set(this, 'reconcile.reconcileSelectedTripId', null);\n      }\n    },\n\n    computeFullName(rvd) {\n      const driver = rvd.driver;\n      return `${driver.firstname} ${driver.lastname}`;\n    },\n\n    actions: {\n      onUndoClick() {\n        const rows = this.get('tripsTable.rows');\n\n        if (rows) {\n          rows.map(data => {\n            if (data) {\n              data.set('isChecked', false);\n            }\n          });\n        }\n\n        this.get('tripsTable').setRows(rows);\n        this.setProperties({\n          routeId: null,\n          'selectedDateTimeRage.starttime': null,\n          'selectedDateTimeRage.endtime': null,\n          trip: null,\n          overrideSelectedDriver: null,\n          overrideSelectedVehicle: null,\n          driverStartTime: null,\n          driverEndTime: null\n        });\n      },\n\n      async onSaveClick() {\n        if (Ember.isEmpty(this.selectedTrips)) {\n          Ember.set(this, 'errorMessage', 'Please select at least one trip');\n          return;\n        }\n\n        Ember.set(this, 'errorMessage', null);\n\n        if (this.get('routeId')) {\n          this.showToolTip();\n        }\n      },\n\n      onChangeDriver(driver) {\n        this.set('overrideSelectedDriver', driver);\n        const reconcileRVD = this.get('reconcile.reconcileRVDResponse');\n        const foundRVD = reconcileRVD.find(rvd => rvd.driver.id === driver.id);\n        const fullName = this.computeFullName(foundRVD);\n        const plannedStartTime = (0, _moment.default)(foundRVD.route.plannedstarttime).format('hh:mm A');\n        const plannedEndTime = (0, _moment.default)(foundRVD.route.plannedendtime).format('hh:mm A');\n        this.set('driverStartTime', plannedStartTime);\n        this.set('driverEndTime', plannedEndTime);\n        this.set('overrideSelectedDriver.fullName', fullName);\n      },\n\n      onChangeVehicle(vehicle) {\n        this.set('overrideSelectedVehicle', vehicle);\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      cancel() {\n        this.unloadPendingTrips();\n\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.tripColumns = _exports.rowComponent = void 0;\n  const rowComponent = 'side-drawer/reconcile-rescue-route/table/row';\n  _exports.rowComponent = rowComponent;\n  const cellComponent = 'side-drawer/reconcile-rescue-route/table/cells/base-cell';\n  const tripColumns = [{\n    id: 'checkbox',\n    valuePath: 'checked',\n    cellComponent: 'side-drawer/reconcile-rescue-route/table/cells/check-box',\n    sortable: false,\n    width: '30px',\n    minResizeWidth: 50\n  }, {\n    label: 'OTP Status',\n    valuePath: 'otpCaption',\n    resizable: true,\n    sortable: false,\n    highlightable: true,\n    minResizeWidth: 50,\n    cellComponent\n  }, {\n    label: 'Trip ID',\n    valuePath: 'tripId',\n    resizable: true,\n    sortable: false,\n    minResizeWidth: 100\n  }, {\n    label: 'Last Name',\n    valuePath: 'riderDetails.lastname',\n    resizable: true,\n    sortable: false,\n    minResizeWidth: 100\n  }, {\n    label: 'ETA',\n    valuePath: 'eta',\n    resizable: true,\n    sortable: false,\n    highlightable: true,\n    minResizeWidth: 75,\n    cellComponent\n  }];\n  _exports.tripColumns = tripColumns;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/stubs\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.driverVehicleMockData = void 0;\n  const driverVehicleMockData = [{\n    id: 400022\n  }, {\n    id: 400023\n  }, {\n    id: 400024\n  }, {\n    id: 400025\n  }, {\n    id: 400026\n  }, {\n    id: 400027\n  }, {\n    id: 400028\n  }, {\n    id: 400029\n  }, {\n    id: 400030\n  }, {\n    id: 400031\n  }];\n  _exports.driverVehicleMockData = driverVehicleMockData;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/base-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-cell', 'data-test-table-base-cell'],\n    classNameBindings: ['alertCategory', 'data-test-alertCategory'],\n    alertCategory: Ember.computed('row.otpCaption', function () {\n      if (Ember.get(this, 'row.otpCaption').toLowerCase() === 'late') {\n        return 'highlightable';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"F8WvYMaj\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/check-box/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    activeContext: Ember.inject.service(),\n    isChecked: Ember.computed.alias('row.isChecked'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"WF0+5jI9\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/cells/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/base-column/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-column'],\n    attributeBindings: ['tabindex'],\n    tabindex: 0,\n    isEditing: false,\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/check-box/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-check-box-column'],\n    isChecked: Ember.computed('table.rows.@each.isChecked', function () {\n      const rows = this.get('table.rows'); // it's weird to see checkbox when no records are shown\n\n      if (!rows || rows.length === 0) return false;\n      return rows.isEvery('isChecked');\n    }),\n    actions: {\n      onCheckboxToggle(event) {\n        // these are passed by the generic column widget's template\n        const {\n          checkAll,\n          uncheckAll\n        } = this.get('extra');\n\n        if (event.target.checked && checkAll) {\n          Ember.run.next(checkAll);\n        } else if (uncheckAll) {\n          Ember.run.next(uncheckAll);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"0AQI6CBd\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" \\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/columns/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/table/row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/text-formatted-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _component.default;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-rescue-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"MnGXFwFz\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"vehicle\\\",\\\"driver\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n     \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L5:C7) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L13:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Route: \\\"],[1,[21,\\\"oldRouteId\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L18:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L19:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Create New Route\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"extra\\\"],[[23,[\\\"routeId\\\"]],\\\"Enter Route ID\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"routeId\\\"]]],null]],null],[27,\\\"hash\\\",null,[[\\\"max\\\"],[30]]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"reconcileTripDate\\\"]],\\\"MM-DD-YYYY\\\"],null]],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Route Type\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",\\\"Rescue Replacement\\\"]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Set Start Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"startofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"starttime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.starttime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Set End Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"startforendtime\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endtime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.endtime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L89:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Late Trips\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Select one or more late trip(s) to move to new route.\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"tripsTable\\\"]]],[[\\\"height\\\",\\\"estimatedRowHeight\\\"],[\\\"200px\\\",23]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L96:C10) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L100:C11) \\\"],null]],[[\\\"rowComponent\\\",\\\"canSelect\\\",\\\"multiSelect\\\"],[[27,\\\"component\\\",[[23,[\\\"rowComponent\\\"]]],null],false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchTripsTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L107:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchTripsTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L113:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchTripsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"tripsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L119:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                No trips found.\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L129:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Driver\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideDriverOptions\\\"]],\\\"driverId\\\",true,[23,[\\\"overrideSelectedDriver\\\"]],\\\"Select Driver\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDriver\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,3,[\\\"badgenumber\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Driver Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"overrideSelectedDriver\\\",\\\"fullName\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Shift Start\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"driverStartTime\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Shift End\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"driverEndTime\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs' @ L162:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Vehicle\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Vehicle ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideVehicleOptions\\\"]],\\\"vehicleId\\\",true,[23,[\\\"overrideSelectedVehicle\\\"]],\\\"Select Vehicle\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeVehicle\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,2,[\\\"callsign\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Vehicle Type\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"overrideSelectedVehicle\\\",\\\"vehicleType\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Provider ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"overrideSelectedVehicle\\\",\\\"providername\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Ambulatory Seats\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"overrideSelectedVehicle\\\",\\\"ambulatorySeats\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Wheelchairs\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"overrideSelectedVehicle\\\",\\\"wheelchairSeats\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Wide Wheelchair\\\"],[10],[0,\\\"\\\\n             \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"checked\\\",[23,[\\\"overrideSelectedVehicle\\\",\\\"wideWheelchair\\\"]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Flex Seats\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"disabled\\\",\\\"value\\\"],[\\\"disabled\\\",[23,[\\\"overrideSelectedVehicle\\\",\\\"flexSeats\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-rescue-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-route-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/reconcile-route-log/config\", \"moment\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/mapped-permIds\"], function (_exports, _emberConcurrency, _config, _moment, _component, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROUTE_LOGGING_TYPE = 'route';\n\n  var _default = _component.default.extend({\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    config: _config.default,\n    columns: _config.columns,\n    errors: null,\n    details: '',\n    table: null,\n    addActivityLog: false,\n    userActivitySelected: null,\n    onShrinkClick: null,\n    currentState: null,\n    routeDetails: Ember.computed.readOnly('stackFrame.options.route'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    reconcileServiceMode: Ember.computed.readOnly('reconcile.reconcileMode'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    title: Ember.computed('routeDetails', function () {\n      const routeData = Ember.get(this, 'routeDetails');\n\n      if (!Ember.isEmpty(routeData)) {\n        return `Route ${routeData.routeId} Activity Log`;\n      }\n\n      return 'Route Activity Log';\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.loadCurrentState();\n      this.configurePermissions();\n    },\n\n    configurePermissions() {\n      this.set('isAddUserRouteLogAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.addRouteLogMsgRecon, null));\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('addActivityLog', currentState.addActivityLog);\n        this.set('details', currentState.details);\n        this.set('userActivitySelected', currentState.userActivitySelected);\n      }\n    },\n\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      this.set('userActivitySelected', '');\n      this.set('details', '');\n      const routeId = this.routeDetails.routeId;\n\n      if (!routeId) {\n        return;\n      }\n\n      const store = this.store;\n      const routeAdapter = store.adapterFor('reconcile-route');\n\n      function fetchFullRecords(activityLogs) {\n        return Promise.all(activityLogs.data.map(activityLog => {\n          if (activityLog.attributes.driverId) {\n            const driver = store.peekRecord('reconcile-driver', activityLog.attributes.driverId); // replace driver.id with driverId\n\n            if (driver) {\n              activityLog.attributes.driver = driver;\n            }\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      }\n\n      this.set('events', []);\n      yield routeAdapter.getActivityLogs({\n        routeId,\n        eventLog: true,\n        type: ROUTE_LOGGING_TYPE,\n        serviceMode: this.reconcileServiceMode\n      }).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        if (!Ember.isEmpty(activityLogs)) {\n          this.processActivityLogs(activityLogs, ROUTE_LOGGING_TYPE);\n        }\n      });\n    }).drop(),\n    saveActivityLogTask: (0, _emberConcurrency.task)(function* () {\n      const newLogEntry = {\n        details: this.get('details'),\n        activity: this.get('userActivitySelected'),\n        userId: this.session.data.authenticated.userId,\n        actualTime: (0, _moment.default)().toDate()\n      };\n      const payload = this.createUserRouteActivity(newLogEntry);\n      const routeAdapter = this.get('store').adapterFor('reconcile-route');\n      yield routeAdapter.createActivityLog(payload, 'event');\n    }),\n\n    createUserRouteActivity(userInfo) {\n      const payload = {\n        eventType: 'UE',\n        actionType: 'userAddedEntry',\n        routeId: this.routeDetails.routeId,\n        vehicleId: this.routeDetails.vehicleId,\n        driverId: this.routeDetails.driverId,\n        userId: userInfo.userId,\n        createdAt: userInfo.actualTime,\n        receivedAt: userInfo.actualTime,\n        eventLog: {\n          'userAddedEntry': [{\n            activity: userInfo.activity,\n            loggingType: ROUTE_LOGGING_TYPE,\n            details: userInfo.details\n          }]\n        }\n      };\n      return payload;\n    },\n\n    actions: {\n      onShrinkClick() {\n        this.set('currentState', {\n          addActivityLog: Ember.get(this, 'addActivityLog'),\n          details: Ember.get(this, 'details'),\n          userActivitySelected: Ember.get(this, 'userActivitySelected')\n        });\n        this.onShrinkClick();\n      },\n\n      onSaveClick() {\n        if (!this.validateRecords()) return;\n        this.set('errors', null);\n        const tooltip = this.get('tooltip');\n        const notifications = this.get('notifications');\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title: this.get('title'),\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return this.get('saveActivityLogTask').perform().then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              this.toggleProperty('addActivityLog');\n              this.fetchEventsTask.perform();\n            }).catch(error => {\n              let message;\n\n              switch (error.status) {\n                case 400:\n                  message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                  break;\n\n                default:\n                  message = 'There was a problem creating activity log, please try again.';\n                  break;\n              }\n\n              this.get('notifications').warning(message);\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-route-log/config\", [\"exports\", \"adept-iq/config/environment\", \"moment\"], function (_exports, _environment, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = _exports.columns = void 0;\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(_environment.default.dateTimeFormat.dateTimeMoment)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'route-activity-log-type',\n        optionSearchPath: 'displayName'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-route-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XwvcFdnn\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log route-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onAddClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"if\\\",[[23,[\\\"isAddUserRouteLogAllowed\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddClick\\\"],null],null],null],[27,\\\"if\\\",[[23,[\\\"isAddUserRouteLogAllowed\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],null],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs' @ L22:C5) \\\"],null]],[[\\\"class\\\"],[\\\"reconcile-drawer-body\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"class\\\"],[\\\"reconcile-table\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs' @ L40:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs' @ L42:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[true,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs' @ L48:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs' @ L55:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\\n\\\"],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"addActivityLog\\\"]],[23,[\\\"isAddUserRouteLogAllowed\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"style\\\"],[9],[0,\\\"\\\\n  .side-drawer-modal {\\\\n    overflow-y: auto;\\\\n    }\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-route-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/component\", [\"exports\", \"adept-iq/pods/components/side-drawer-container/component\", \"adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/config\", \"ember-concurrency\", \"ember-light-table\", \"adept-iq/utils/format-function\", \"adept-iq/utils/format-text-extension\", \"moment\"], function (_exports, _component, _config, _emberConcurrency, _emberLightTable, _formatFunction, _formatTextExtension, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const pickupTypeArray = ['pickup', 'pick', 'p'];\n  const dropoffTypeArray = ['dropoff', 'drop', 'd'];\n  const breakTypeArray = ['break', 'b'];\n\n  var _default = _component.default.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    session: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    config: _config.default,\n    selectedProvider: null,\n    selectedRoute: null,\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    tripDetails: Ember.computed.readOnly('stackFrame.options.trip'),\n    title: Ember.computed.readOnly('stackFrame.options.title'),\n    tripDate: Ember.computed.alias('reconcile.reconcileDate'),\n    currentPickupStop: Ember.computed.alias('tripDetails.pickupStopDetails'),\n    currentDropoffStop: Ember.computed.alias('tripDetails.dropoffStopDetails'),\n    reconcileNewRouteStartTime: Ember.computed.alias('reconcileNewRoute.actualStartTime'),\n    reconcileNewRouteEndTime: Ember.computed.alias('reconcileNewRoute.actualEndTime'),\n    reconcileTripDate: Ember.computed.alias('reconcile.reconcileDate'),\n    canSave: Ember.computed.and('selectedProvider', 'selectedDateTimeRage.{pickTime,dropTime}', 'selectedRoute'),\n    canUndo: Ember.computed.or('selectedProvider', 'selectedRoute', 'selectedDateTimeRage.{pickTime,dropTime}'),\n    providerOptions: Ember.computed('activeContext.topActiveContext', 'selectedProvider', function () {\n      return this.get('store').peekAll('provider');\n    }),\n    routeOptions: Ember.computed('routeIdsList', function () {\n      const routeList = this.get('routeIdsList');\n\n      if (!Ember.isEmpty(routeList) && routeList.length) {\n        return routeList;\n      }\n\n      return [];\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'selectedDateTimeRage', {\n        pickTime: null,\n        dropTime: null,\n        startofday: (0, _moment.default)(this.reconcileTripDate).startOf('day').toISOString(),\n        endofday: (0, _moment.default)(this.reconcileTripDate).endOf('day').toISOString()\n      });\n      const stopsTable = new _emberLightTable.default(this.config.stopColumns);\n      Ember.set(this, 'stopsTable', stopsTable);\n      Ember.set(this, 'newRouteStops', []);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('698px');\n    },\n\n    manageRouteDetails() {\n      if (!this.selectedProvider || !this.selectedRoute) {\n        return;\n      }\n\n      if (this.selectedDateTimeRage.pickTime && this.selectedDateTimeRage.dropTime) {\n        this.manageRouteDetailsWithGvnTripDetails(this.newRouteStops);\n      } else {\n        this.manageRouteDetailsWithoutGvnTripDetails(this.newRouteStops);\n      }\n\n      this.setCurrentTripSelected();\n    },\n\n    manageRouteDetailsWithGvnTripDetails(stopList) {\n      const newStopList = this.getScheduledTripList();\n      const finalList = this.getSortedStopList(stopList, newStopList);\n      this.setStopTable(finalList);\n    },\n\n    getScheduledTripList() {\n      const stopList = [];\n      const passenger = this.tripDetails.passenger;\n      this.tripDetails.stops.map(stop => {\n        const stopObj = Ember.Object.create(stop);\n        const address = Ember.Object.create(stop.address);\n        address.set('formattedCity', this.getFormattedCity(address));\n        stopObj.set('address', address);\n        stopObj.set('passenger', passenger);\n        stopObj.set('formattedPromiseTimeAsTime', this.getFormattedPromiseTime(stopObj));\n        stopObj.set('formattedRequestTimeAsTime', this.getFormattedRequestTime(stopObj));\n        stopObj.set('formattedEtaAsTime', this.getFormattedEtaTime(stopObj));\n        stopObj.set('tripId', this.tripDetails.tripId);\n        this.setTimeDetails(stopObj, true);\n        stopList.push(stopObj);\n      });\n      return stopList;\n    },\n\n    manageRouteDetailsWithoutGvnTripDetails(stopList) {\n      const filteredList = this.getStopListExceptSchedluedTrip(stopList);\n      let ordinal = 0;\n      filteredList.map(stop => {\n        ordinal++;\n        stop.set('ordinal', ordinal);\n      });\n      this.setStopTable(filteredList);\n    },\n\n    setStopTable(stopList) {\n      this.get('stopsTable').setRows([]);\n\n      if (stopList && stopList.length > 0) {\n        this.get('stopsTable').setRows(stopList);\n      }\n    },\n\n    getStopListExceptSchedluedTrip(stopList) {\n      return stopList.filter(stop => stop.tripId !== this.tripDetails.tripId);\n    },\n\n    setCurrentTripSelected() {\n      const rows = Ember.get(this, 'stopsTable.rows');\n      rows.map(row => {\n        if (row.content.tripId === this.tripDetails.tripId) {\n          row.set('selected', true);\n        }\n      });\n    },\n\n    setNewRouteStopTable() {\n      const trips = this.store.peekAll(this.config.tripModel).filter(trip => {\n        return trip.routeId === this.selectedRoute.routeId;\n      });\n      const stopList = this.getStopListByTrips(trips);\n      const breakList = this.getBreakListByRoute(this.selectedRoute.routeId);\n      const finalList = this.getSortedStopList(stopList, breakList);\n      Ember.set(this, 'newRouteStops', finalList);\n      this.manageRouteDetails();\n    },\n\n    getSortedStopList(stopList, otherList) {\n      const mergedStopList = stopList.concat(otherList);\n      const sortedStopList = this.sortList(mergedStopList, 'updatedEta', true);\n      this.setOrdinals(sortedStopList);\n      return sortedStopList;\n    },\n\n    setOrdinals(sortedStopList) {\n      let ordinal = 0;\n      sortedStopList.map(stop => {\n        ordinal++;\n        stop.set('ordinal', ordinal);\n      });\n    },\n\n    sortList(list, key, isDate) {\n      return list.sort(function (a, b) {\n        if (isDate) {\n          // eslint-disable-next-line no-nested-ternary\n          return (0, _moment.default)(a[key]) > (0, _moment.default)(b[key]) ? 1 : (0, _moment.default)(b[key]) > (0, _moment.default)(a[key]) ? -1 : 0;\n        } // eslint-disable-next-line no-nested-ternary\n\n\n        return a[key] > b[key] ? 1 : b[key] > a[key] ? -1 : 0;\n      });\n    },\n\n    getStopListByTrips(trips) {\n      const stopList = [];\n\n      if (!Ember.isEmpty(trips)) {\n        trips.map(trip => {\n          const stops = Ember.get(this, 'store').peekAll(this.config.stopModel).filter(stop => {\n            return stop.tripId === trip.tripId;\n          });\n\n          if (!Ember.isEmpty(stops)) {\n            stops.map(stop => {\n              const addresses = Ember.get(this, 'store').peekAll(this.config.addressModel).filter(address => {\n                return address.stopId === stop.stopId;\n              })[0];\n              stop.set('address', addresses);\n              const passengers = Ember.get(this, 'store').peekAll(this.config.passengerModel).filter(passenger => {\n                return passenger.passengerId === trip.passengerId;\n              })[0];\n              stop.set('passenger', passengers);\n              this.setTimeDetails(stop);\n              stopList.push(stop);\n            });\n            trip.set('stops', stopList);\n          }\n        });\n      }\n\n      return stopList;\n    },\n\n    setTimeDetails(stop) {\n      let date = stop.get('eta') ? (0, _moment.default)(stop.get('eta')).format('MM-DD-YYYY') : (0, _moment.default)(this.reconcileTripDate).format('MM-DD-YYYY');\n\n      if (this.selectedDateTimeRage.pickTime && this.selectedDateTimeRage.dropTime && stop.tripId === this.tripDetails.tripId) {\n        date = (0, _moment.default)(this.reconcileTripDate).format('MM-DD-YYYY'); // for stops\n\n        if (stop.type && pickupTypeArray.includes(stop.type.toLowerCase())) {\n          stop.set('updatedEtaAsTime', (0, _moment.default)(this.selectedDateTimeRage.pickTime).format('hh:mm A'));\n        } else if (stop.type && dropoffTypeArray.includes(stop.type.toLowerCase())) {\n          stop.set('updatedEtaAsTime', (0, _moment.default)(this.selectedDateTimeRage.dropTime).format('hh:mm A'));\n        }\n      } else {\n        // for stops\n        // eslint-disable-next-line no-lonely-if\n        if (stop.type && pickupTypeArray.includes(stop.type.toLowerCase())) {\n          stop.set('updatedEtaAsTime', stop.get('formattedEtaAsTime'));\n        } else if (stop.type && dropoffTypeArray.includes(stop.type.toLowerCase())) {\n          stop.set('updatedEtaAsTime', stop.get('formattedEtaAsTime'));\n        }\n      } // for breaks\n\n\n      if (stop.type && breakTypeArray.includes(stop.type.toLowerCase())) {\n        stop.set('updatedEtaAsTime', stop.get('formattedEtaAsTime'));\n      }\n\n      stop.set('updatedEta', (0, _moment.default)(date + ' ' + stop.get('updatedEtaAsTime')));\n    },\n\n    getBreakListByRoute(routeId) {\n      const breakList = [];\n      const breaks = Ember.get(this, 'store').peekAll(this.config.stopModel).filter(breakStop => {\n        return breakStop.routeId === routeId && breakStop.type === 'break';\n      });\n      breaks.map(breakData => {\n        this.setTimeDetails(breakData);\n        breakData.set('tripId', breakData.stopId);\n        const addresses = Ember.get(this, 'store').peekAll(this.config.addressModel).filter(address => {\n          return address.stopId === breakData.stopId;\n        })[0];\n        breakData.set('address', addresses);\n        breakList.push(breakData);\n      });\n      return breakList;\n    },\n\n    getFormattedPromiseTime(stopObj) {\n      const dt = Ember.get(stopObj, 'promiseTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    },\n\n    getFormattedRequestTime(stopObj) {\n      const dt = Ember.get(stopObj, 'requestTime');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    },\n\n    getFormattedEtaTime(stopObj) {\n      const dt = Ember.get(stopObj, 'eta');\n      return dt ? (0, _moment.default)(dt).format('hh:mm A') : '';\n    },\n\n    getFormattedCity(addressObj) {\n      const c = Ember.get(addressObj, 'city');\n\n      if (Ember.isEmpty(c)) {\n        const add = Ember.get(addressObj, 'formattedAddress');\n\n        if (!Ember.isEmpty(add)) {\n          const addStr = (0, _formatTextExtension.convertToPascalCase)(add);\n          const addArray = addStr.split(',');\n          return addArray[addArray.length - 2];\n        }\n      }\n\n      return (0, _formatTextExtension.convertToPascalCase)(c);\n    },\n\n    getRoutesByGvnProvider(providerName) {\n      this.get('fetchRouteIds').perform(providerName);\n    },\n\n    getRouteById(routeId) {\n      this.get('fetchDestinationRouteDetails').perform(routeId);\n    },\n\n    resetTableRows() {\n      Ember.set(this, 'reconcileNewRoute', []);\n      Ember.set(this, 'newRouteStops', []);\n      this.get('stopsTable').setRows([]);\n    },\n\n    showToolTip() {\n      const tooltip = Ember.get(this, 'tooltip');\n      const title = 'Schedule Trip to a Route';\n      const tip = `Schedule Trip ${this.tripDetails.tripId} to Route ${this.selectedRoute.routeId}.`;\n      const successMessage = `TRIP ${this.tripDetails.tripId} WAS SUCCESSFULLY SCHEDULED TO ROUTE ${this.selectedRoute.routeId}`;\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return Ember.get(this, 'saveTask').perform().then(() => {\n            this.send('cancel');\n            Ember.get(this, 'workspace').popState('reconcileScheduleUnscheduledTrip');\n            Ember.get(this, 'notifications').success(successMessage);\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in scheduling trip, please try again.';\n                break;\n            }\n\n            this.set('errorMessage', message);\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    checkValidations() {\n      if (this.get('selectedDateTimeRage.pickTime') && this.get('selectedDateTimeRage.dropTime')) {\n        if (!_moment.default.utc(this.get('selectedDateTimeRage.dropTime')).isAfter(_moment.default.utc(this.get('selectedDateTimeRage.pickTime')))) {\n          Ember.set(this, 'errorMessage', 'Pickup time can not be greater than or equal to dropoff time');\n          return false;\n        }\n\n        if (_moment.default.utc(this.reconcileNewRouteStartTime).isAfter(_moment.default.utc(this.get('selectedDateTimeRage.pickTime')))) {\n          Ember.set(this, 'errorMessage', 'Pickup time can not be less than route start time');\n          return false;\n        }\n\n        if (_moment.default.utc(this.get('selectedDateTimeRage.dropTime')).isAfter(_moment.default.utc(this.reconcileNewRouteEndTime))) {\n          Ember.set(this, 'errorMessage', 'Dropoff time can not be greater than route end time');\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const tripAdapter = this.store.adapterFor(this.config.tripModel);\n      const payload = {\n        routeId: this.selectedRoute.routeId,\n        tripId: this.tripDetails.tripId,\n        providerName: this.selectedProvider.id,\n        pickupTime: this.selectedDateTimeRage.pickTime,\n        dropoffTime: this.selectedDateTimeRage.dropTime,\n        userId: this.session.data.authenticated.userId\n      };\n\n      try {\n        return yield tripAdapter.patchTrip(payload, 'schedule trip', this.tripDetails.route.routeId);\n      } catch (e) {\n        throw e;\n      }\n    }),\n    fetchDestinationRouteDetails: (0, _emberConcurrency.task)(function* (routeId) {\n      let routePayload = null;\n      const routeData = yield Ember.get(this, 'store').query(this.config.routeModel, {\n        routeId\n      });\n\n      if (Ember.isEmpty(routeData)) {\n        Ember.set(this, 'reconcileNewRoute', []);\n        return;\n      }\n\n      routeData.map(data => {\n        routePayload = data;\n      });\n      Ember.set(this, 'reconcileNewRoute', routePayload);\n      this.setNewRouteStopTable();\n    }),\n    fetchRouteIds: (0, _emberConcurrency.task)(function* () {\n      const routeIds = [];\n      const dateRange = (0, _formatFunction.getDateRangeForSearch)(this.reconcileTripDate);\n      const routeIdsArray = yield Ember.get(this, 'store').query(this.config.routeIdModel, {\n        providerName: this.selectedProvider.id,\n        startDate: dateRange.startDate,\n        endDate: dateRange.endDate\n      });\n\n      if (Ember.isEmpty(routeIdsArray) || !routeIdsArray.length) {\n        Ember.set(this, 'routeIdsList', []);\n        return;\n      }\n\n      routeIdsArray.map(data => {\n        routeIds.push(data);\n      });\n      Ember.set(this, 'routeIdsList', routeIds);\n    }),\n    actions: {\n      onSaveClick() {\n        if (this.checkValidations()) {\n          Ember.set(this, 'errorMessage', null);\n          this.showToolTip();\n        }\n      },\n\n      onUndoClick() {\n        this.setProperties({\n          selectedProvider: null,\n          selectedRoute: null,\n          'selectedDateTimeRage.pickTime': null,\n          'selectedDateTimeRage.dropTime': null\n        });\n        this.resetTableRows();\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n        Ember.set(this, 'canUndo', true);\n        this.manageRouteDetails();\n      },\n\n      onChangeProvider(provider) {\n        this.setProperties({\n          selectedProvider: provider,\n          selectedRoute: null // 'selectedDateTimeRage.pickTime': null,\n          // 'selectedDateTimeRage.dropTime': null\n\n        });\n        this.resetTableRows();\n        this.getRoutesByGvnProvider(provider.id);\n      },\n\n      onChangeRoute(route) {\n        this.setProperties({\n          selectedRoute: route // 'selectedDateTimeRage.pickTime': null,\n          // 'selectedDateTimeRage.dropTime': null\n\n        });\n        this.resetTableRows();\n        this.getRouteById(route.routeId);\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const cellComponent = 'table/cells/base-cell';\n  var _default = {\n    title: 'Schedule Trip to a Route',\n    routeIdModel: 'reconcile-route-id',\n    routeModel: 'reconcile-route',\n    tripModel: 'reconcile-trip',\n    stopModel: 'reconcile-stop',\n    passengerModel: 'reconcile-passenger',\n    addressModel: 'reconcile-address',\n    stopColumns: [{\n      label: 'Trip ID',\n      valuePath: 'tripId',\n      cellComponent,\n      resizable: true,\n      minResizeWidth: 50 // width: '80px'\n\n    }, {\n      label: 'Last Name',\n      valuePath: 'passenger.lastName',\n      cellComponent,\n      resizable: true,\n      minResizeWidth: 50 // width: '80px'\n\n    }, {\n      label: 'Address',\n      valuePath: 'address.formattedAddress',\n      cellComponent,\n      minResizeWidth: 50,\n      resizable: true // width: '80px'\n\n    }, {\n      label: 'City',\n      valuePath: 'address.formattedCity',\n      cellComponent,\n      minResizeWidth: 50,\n      resizable: true // width: '60px'\n\n    }, {\n      label: 'Stop',\n      valuePath: 'type',\n      cellComponent,\n      minResizeWidth: 50,\n      resizable: true // width: '60px'\n\n    }, {\n      label: 'ETA',\n      valuePath: 'updatedEtaAsTime',\n      cellComponent,\n      minResizeWidth: 50,\n      resizable: true // width: '60px'\n\n    }, {\n      label: 'Promise Time',\n      valuePath: 'formattedPromiseTimeAsTime',\n      cellComponent,\n      minResizeWidth: 50,\n      resizable: true // width: '80px'\n\n    }, {\n      label: 'Appt Time',\n      valuePath: 'formattedRequestTimeAsTime',\n      cellComponent,\n      resizable: true,\n      minResizeWidth: 50 // width: '80px'\n\n    }, {\n      label: 'Stop Break Ord',\n      valuePath: 'ordinal',\n      cellComponent,\n      minResizeWidth: 60,\n      resizable: true // width: '80px'\n\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"vxAfeP92\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body schedule-trip-sidebar\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L15:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form trip-information\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"tripDetails\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L26:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Select Route for trip transfer\\\",false]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[11,\\\"width\\\",\\\"15%\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[\\\"Select provider\\\",\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedProvider\\\",\\\"id\\\"]],[23,[\\\"providerOptions\\\"]]],null],[23,[\\\"providerOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[11,\\\"width\\\",\\\"15%\\\"],[9],[0,\\\"Pick Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"startofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"dropTime\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"pickTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.pickTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[[27,\\\"not\\\",[[23,[\\\"selectedProvider\\\"]]],null],\\\"Select route\\\",\\\"routeId\\\",true,[27,\\\"find-by\\\",[\\\"routeId\\\",[23,[\\\"selectedRoute\\\",\\\"routeId\\\"]],[23,[\\\"routeOptions\\\"]]],null],[23,[\\\"routeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRoute\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,4,[\\\"routeId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Drop Time\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"pickTime\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"dropTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.dropTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L101:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"trip-transfer-tabs\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"tab active\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Route \\\"],[1,[23,[\\\"selectedRoute\\\",\\\"routeId\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"stopsTable\\\"]]],[[\\\"height\\\",\\\"estimatedRowHeight\\\"],[\\\"200px\\\",23]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L111:C10) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L115:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\"],[false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchDestinationRouteDetails\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L121:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"stopsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs' @ L127:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-schedule-unscheduled-trips/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-log/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/reconcile-trip-log/config\", \"moment\", \"adept-iq/pods/components/side-drawer/activity-log/base-activity-log/component\", \"adept-iq/config/mapped-permIds\"], function (_exports, _emberConcurrency, _config, _moment, _component, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TRIP_LOGGING_TYPE = 'trip';\n\n  var _default = _component.default.extend({\n    tagName: '',\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    config: _config.default,\n    userActivitySelected: null,\n    errors: null,\n    details: '',\n    columns: _config.columns,\n    table: null,\n    addActivityLog: false,\n    onShrinkClick: null,\n    currentState: null,\n    routeDetails: Ember.computed.readOnly('stackFrame.options.route'),\n    tripDetails: Ember.computed.readOnly('stackFrame.options.trip'),\n    displayName: Ember.computed.readOnly('stackFrame.options.displayName'),\n    reconcileServiceMode: Ember.computed.readOnly('reconcile.reconcileMode'),\n    isLoading: Ember.computed.alias('fetchEventsTask.isRunning'),\n    title: Ember.computed('tripDetails', function () {\n      const tripData = Ember.get(this, 'tripDetails');\n\n      if (!Ember.isEmpty(tripData)) {\n        return `Trip ${tripData.tripId} Activity Log`;\n      }\n\n      return 'Trip Activity Log';\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.loadCurrentState();\n      this.configurePermissions();\n    },\n\n    configurePermissions() {\n      this.set('isAddUserTripLogAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.addTripLogMsgRecon, null));\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('addActivityLog', currentState.addActivityLog);\n        this.set('details', currentState.details);\n        this.set('userActivitySelected', currentState.userActivitySelected);\n      }\n    },\n\n    fetchEventsTask: (0, _emberConcurrency.task)(function* () {\n      this.set('userActivitySelected', '');\n      this.set('details', '');\n      const tripId = this.tripDetails.tripId;\n      const routeId = this.tripDetails.routeId;\n\n      if (!tripId) {\n        return;\n      }\n\n      const store = this.store;\n      const routeAdapter = store.adapterFor('reconcile-route');\n\n      function fetchFullRecords(activityLogs) {\n        return Promise.all(activityLogs.data.map(activityLog => {\n          if (activityLog.attributes.driverId) {\n            const driver = store.peekRecord('reconcile-driver', activityLog.attributes.driverId); // replace driver.id with driverId\n\n            if (driver) {\n              activityLog.attributes.driver = driver;\n            }\n          }\n        })).then(() => {\n          return activityLogs;\n        });\n      }\n\n      this.set('events', []);\n      yield routeAdapter.getActivityLogs({\n        routeId,\n        tripId,\n        eventLog: true,\n        type: TRIP_LOGGING_TYPE,\n        serviceMode: this.reconcileServiceMode\n      }).then(async activityLogs => {\n        return fetchFullRecords(activityLogs);\n      }).then(activityLogs => {\n        if (!Ember.isEmpty(activityLogs)) {\n          this.processActivityLogs(activityLogs, TRIP_LOGGING_TYPE);\n        }\n      });\n    }).drop(),\n    saveActivityLogTask: (0, _emberConcurrency.task)(function* () {\n      const newLogEntry = {\n        details: this.get('details'),\n        activity: this.get('userActivitySelected'),\n        userId: this.session.data.authenticated.userId,\n        actualTime: (0, _moment.default)().toDate()\n      };\n      const payload = this.createUserTripActivity(newLogEntry);\n      const routeAdapter = this.get('store').adapterFor('reconcile-route');\n      yield routeAdapter.createActivityLog(payload, 'event');\n    }),\n\n    createUserTripActivity(userInfo) {\n      const payload = {\n        eventType: 'UE',\n        actionType: 'userAddedEntry',\n        routeId: this.routeDetails.routeId,\n        tripId: this.tripDetails.tripId,\n        stopPointId: this.tripDetails.stopId,\n        vehicleId: this.routeDetails.vehicleId,\n        driverId: this.routeDetails.driverId,\n        userId: userInfo.userId,\n        createdAt: userInfo.actualTime,\n        receivedAt: userInfo.actualTime,\n        eventLog: {\n          'userAddedEntry': [{\n            activity: userInfo.activity,\n            loggingType: TRIP_LOGGING_TYPE,\n            details: userInfo.details\n          }]\n        }\n      };\n      return payload;\n    },\n\n    actions: {\n      onShrinkClick() {\n        this.set('currentState', {\n          addActivityLog: Ember.get(this, 'addActivityLog'),\n          details: Ember.get(this, 'details'),\n          userActivitySelected: Ember.get(this, 'userActivitySelected')\n        });\n        this.onShrinkClick();\n      },\n\n      onSaveClick() {\n        if (!this.validateRecords()) return;\n        this.set('errors', null);\n        const tooltip = this.get('tooltip');\n        const notifications = this.get('notifications');\n        tooltip.pushConfirmation({\n          tip: 'Are you sure you want to add an entry to the activity log?',\n          title: this.get('title'),\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return this.get('saveActivityLogTask').perform().then(() => {\n              notifications.success('New Activity Log Entry Added Successfully');\n              tooltip.reset();\n              this.toggleProperty('addActivityLog');\n              this.fetchEventsTask.perform();\n            }).catch(error => {\n              let message;\n\n              switch (error.status) {\n                case 400:\n                  message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                  break;\n\n                default:\n                  message = 'There was a problem creating activity log, please try again.';\n                  break;\n              }\n\n              this.get('notifications').warning(message);\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            return tooltip.reset();\n          },\n          hasOverlay: true\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-log/config\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.editableSections = _exports.columns = void 0;\n  const TIME_FORMAT = 'YYYY-MM-DD hh:mmA';\n  const columns = [{\n    label: 'Activity',\n    valuePath: 'activity'\n  }, {\n    label: 'Time',\n    valuePath: 'date',\n    format: date => (0, _moment.default)(date).format(TIME_FORMAT)\n  }, {\n    label: 'Details',\n    valuePath: 'details'\n  }, {\n    label: 'User',\n    valuePath: 'user'\n  }];\n  _exports.columns = columns;\n  const editableSections = [{\n    title: 'Add Activity Log Entry',\n    fields: [{\n      id: 'activity-type',\n      type: 'enum',\n      label: 'Activity',\n      valuePath: 'userActivitySelected',\n      cellDesc: 'Activity',\n      editable: true,\n      hidden: false,\n      extra: {\n        optionModelName: 'route-activity-log-type',\n        optionSearchPath: 'displayName'\n      }\n    }, {\n      id: 'Details',\n      type: 'text-area',\n      editable: true,\n      label: 'Details',\n      valuePath: 'details'\n    }]\n  }];\n  _exports.editableSections = editableSections;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-log/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"quLY+jX+\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"activity-log route-activity-log\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onAddClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"if\\\",[[23,[\\\"isAddUserTripLogAllowed\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddClick\\\"],null],null],null],[27,\\\"if\\\",[[23,[\\\"isAddUserTripLogAllowed\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],null],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-sub-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"mb-2\\\"],[12,\\\"onclick\\\",[27,\\\"perform\\\",[[23,[\\\"fetchEventsTask\\\"]]],null]],[12,\\\"disabled\\\",[23,[\\\"fetchEventsTask\\\",\\\"isRunning\\\"]]],[9],[0,\\\"\\\\n      Refresh\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs' @ L22:C5) \\\"],null]],[[\\\"class\\\"],[\\\"reconcile-drawer-body\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"li\\\"],[9],[1,[22,4,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"table\\\"]]],[[\\\"class\\\",\\\"height\\\"],[\\\"reconcile-table\\\",\\\"auto\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs' @ L41:C8) \\\"],null]],[[\\\"fixed\\\"],[true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs' @ L43:C9) \\\"],null]],[[\\\"autoHideScrollbar\\\",\\\"canSelect\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs' @ L49:C13) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"table\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs' @ L56:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"fetchEventsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  No activity recorded.\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"addActivityLog\\\"]],[23,[\\\"isAddUserTripLogAllowed\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"form-components/activity-log-entry\\\",null,[[\\\"config\\\",\\\"details\\\",\\\"userActivitySelected\\\",\\\"onValueChange\\\"],[[23,[\\\"config\\\"]],[27,\\\"readonly\\\",[[23,[\\\"details\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"userActivitySelected\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onValueChange\\\"],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[7,\\\"style\\\"],[9],[0,\\\"\\\\n  .side-drawer-modal {\\\\n    overflow-y: auto;\\\\n    }\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-trip-log/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-transfer/component\", [\"exports\", \"ember-light-table\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/reconcile-trip-transfer/config\", \"moment\", \"lodash\"], function (_exports, _emberLightTable, _emberConcurrency, _config, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CURRENT_TAB = 'current';\n  const DESTINATION_TAB = 'destination';\n  const TOGGLE_TYPE_BEFORE = 'before';\n  const TOGGLE_TYPE_AFTER = 'after';\n  const TRIP = 'trip';\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    selectedTabOption: DESTINATION_TAB,\n    onCloseClick: null,\n    selectedImpact: TOGGLE_TYPE_BEFORE,\n    title: 'Transfer Trip to Another Route',\n    routeListByProvider: null,\n    selectedRoute: null,\n    selectedProvider: null,\n    stopsTable: null,\n    config: _config.default,\n    currentRouteStops: null,\n    destinationRouteStops: null,\n    destinationNewRouteStops: null,\n    routeDetails: Ember.computed.readOnly('stackFrame.options.route'),\n    tripDetails: Ember.computed.alias('reconcile.reconcileTrip'),\n    reconcileTrips: null,\n    selectedReconcileTrip: Ember.computed.alias('reconcile.selectedTripRow'),\n    reconcileRouteDetails: Ember.computed.alias('reconcile.reconcileRouteInfo'),\n    tripsDetails: Ember.computed.readOnly('reconcile.reconcileTripDetails'),\n    reconcileTripDate: Ember.computed.alias('reconcile.reconcileDate'),\n    reconcileRouteOptions: Ember.computed.alias('reconcile.reconcileRouteOptions'),\n    enableTabbing: Ember.computed.alias('selectedRoute'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    pickArrivalTime: null,\n    dropArrivalTime: null,\n    pickAndDropEnable: Ember.computed.empty('selectedRoute'),\n    canUndo: Ember.computed.or('selectedProvider', 'selectedRoute'),\n    canSave: Ember.computed.and('selectedProvider', 'pickArrivalTime', 'dropArrivalTime', 'selectedRoute'),\n    driverFullName: Ember.computed('routeDetails', function () {\n      const firstName = this.get('routeDetails').driver.firstname;\n      const lastName = this.get('routeDetails').driver.lastname;\n      return `${firstName} ${lastName}`;\n    }),\n    providerOptions: Ember.computed('activeContext.topActiveContext', function () {\n      return this.get('store').peekAll('provider');\n    }),\n    currentTripDate: Ember.computed('tripDetails', function () {\n      const tripDetails = this.get('tripDetails');\n      const formattedTime = tripDetails.serviceStartTime ? (0, _moment.default)(tripDetails.serviceStartTime).format('MM-DD-YYYY') : '';\n      return formattedTime;\n    }),\n    routeOptions: Ember.computed('reconcile.reconcileRouteMap', 'selectedProvider', function () {\n      const selectedProviderId = this.get('selectedProvider.id');\n      const reconcileRouteMap = this.get('reconcile.reconcileRouteMap') || {};\n      const reconcileRoutes = reconcileRouteMap[selectedProviderId] || [];\n      const selectedRoute = this.get('reconcile.reconcileRouteInfo');\n      const filteredRouteId = reconcileRoutes.filter(route => {\n        return parseInt(route.id, 10) !== selectedRoute.routeid;\n      });\n      return filteredRouteId.map(route => {\n        return {\n          'id': route.trackingid,\n          'routeId': route.id\n        };\n      });\n    }),\n\n    /*\n    The toggle type after gets enabled when both pick and drop time is selected\n     */\n    enableToggleTypeAfter: Ember.computed('pickArrivalTime', 'dropArrivalTime', function () {\n      const pickArrivalTime = this.get('pickArrivalTime');\n      const dropArrivalTime = this.get('dropArrivalTime');\n      const selectedTrip = this.get('selectedReconcileTrip');\n      const enableToggle = selectedTrip.type.toLowerCase() === 'pick' ? pickArrivalTime === selectedTrip.arriveEvent.receivedat : dropArrivalTime === selectedTrip.arriveEvent.receivedat;\n      return enableToggle;\n    }),\n    updateTableObserver: Ember.observer('selectedToggleButtonType', function () {\n      this.manageRouteDetails();\n    }),\n\n    /*\n    When trips are transferred the original array gets altered.\n    So we are creating a copy and adding the transferred trip to the copy\n    */\n    reconcileTripsCopy: Ember.computed('reconcileTrips', function () {\n      return _lodash.default.clone(this.get('reconcileTrips'));\n    }),\n\n    /*\n    When the newly selected pick and drop time are set to the arriveEvent receivedat\n    then the original object gets changed.\n    So a copy is created and we are altering the copy to make the changes\n    */\n    tripsDetailCopy: Ember.computed('tripsDetails', function () {\n      const tripsDetail = this.get('tripsDetails');\n      return tripsDetail.map(trip => {\n        const arriveEvent = trip.arriveEvent;\n        return { ...trip,\n          arriveEvent: { ...arriveEvent\n          }\n        };\n      });\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.createStopsTable();\n      const stopsTable = this.get('stopsTable');\n      this.setProperties({\n        selectedRouteContainerType: CURRENT_TAB,\n        selectedToggleButtonType: TOGGLE_TYPE_BEFORE,\n        stopsTable,\n        currentRouteStops: [],\n        destinationRouteStops: [],\n        destinationNewRouteStops: []\n      });\n      this.setCurrentRouteStopList();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('720px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    createStopsTable() {\n      const configStopsTableColumns = this.config.stopColumns;\n      /*\n      To change the date format displayed in the table to hh:mm A\n      */\n\n      configStopsTableColumns.forEach(column => {\n        if (['date', 'datetime', 'time', 'datetimeflatpickr'].includes(column.dataType) && column.format && typeof column.format === 'string') {\n          const formatDate = column.format;\n\n          column.format = value => {\n            return Ember.isEmpty(value) ? value : (0, _moment.default)(value).format(formatDate);\n          };\n        }\n      });\n      const stopsTable = new _emberLightTable.default(configStopsTableColumns);\n      this.set('stopsTable', stopsTable);\n    },\n\n    /*\n    On opening the transfer trip side drawer we need to display the trips available for the\n    selected route in the before impact of current route with the selected trip highlighted\n    */\n    setCurrentRouteStopList() {\n      const currentRouteTripDetails = this.get('tripsDetails');\n      const finalList = this.getSortedStopList(currentRouteTripDetails);\n      const tripId = this.get('selectedReconcileTrip.tripId');\n      const reconcileStopPointMap = this.get('reconcile.reconcileStopPointMap');\n      const stops = reconcileStopPointMap[tripId] || [];\n      /*\n      To display the pick and drop time in the timepickr initially of the selected trip\n      */\n\n      stops.forEach(stop => {\n        if (stop.type.toLowerCase() === 'pick') {\n          this.set('pickArrivalTime', stop.trip.arriveEvent.receivedat);\n        }\n\n        this.set('dropArrivalTime', stop.trip.arriveEvent.receivedat);\n      });\n      this.set('currentRouteStops', finalList);\n      this.setStopTable(finalList);\n      this.setCurrentTripSelected();\n    },\n\n    getSortedStopList(tripList) {\n      const sortedStopList = this.sortListByActualArriveTime(tripList);\n      return sortedStopList;\n    },\n\n    /*\n    The trips should be sorted based on the actualArrivalTime\n    so that the transferred trip can be placed in the correct order\n    in the after impact table of destination route.\n    */\n    sortListByActualArriveTime(list) {\n      return list.sort(function (a, b) {\n        const aArriveEventReceivedAt = a.arriveEvent.receivedat;\n        const bArriveEventReceivedAt = b.arriveEvent.receivedat; // eslint-disable-next-line no-nested-ternary\n\n        return (0, _moment.default)(aArriveEventReceivedAt) > (0, _moment.default)(bArriveEventReceivedAt) ? 1 : (0, _moment.default)(bArriveEventReceivedAt) > (0, _moment.default)(aArriveEventReceivedAt) ? -1 : 0;\n      });\n    },\n\n    setStopTable(stopList) {\n      this.get('stopsTable').setRows([]);\n\n      if (stopList && stopList.length > 0) {\n        this.get('stopsTable').setRows(stopList);\n      }\n    },\n\n    manageRouteDetails() {\n      const type = Ember.get(this, 'selectedToggleButtonType');\n      const selectedRouteTab = Ember.get(this, 'selectedRouteContainerType');\n\n      if (type === TOGGLE_TYPE_BEFORE) {\n        if (selectedRouteTab === CURRENT_TAB) {\n          this.setStopTable(this.currentRouteStops);\n        } else {\n          this.setStopTable(this.destinationRouteStops);\n        }\n      }\n\n      if (type === TOGGLE_TYPE_AFTER) {\n        if (selectedRouteTab === CURRENT_TAB) {\n          this.manageRouteDetailsWithoutGvnTripDetails(this.currentRouteStops);\n        } else {\n          this.setStopTable(this.destinationNewRouteStops);\n        }\n      }\n\n      this.setCurrentTripSelected();\n    },\n\n    getStopListExceptSelectedTrip(stopList) {\n      return stopList.filter(stop => stop.tripId !== this.selectedReconcileTrip.tripId);\n    },\n\n    manageRouteDetailsWithoutGvnTripDetails(stopList) {\n      const filteredList = this.getStopListExceptSelectedTrip(stopList);\n      const sortedStopList = this.sortListByActualArriveTime(filteredList);\n      this.setStopTable(sortedStopList);\n    },\n\n    reconcileTripsWithChangedPickAndDropTime(time, type) {\n      const reconcileTrips = this.get('reconcileTripsCopy');\n      const reconcileTripsDetail = this.get('tripsDetailCopy');\n      const tripId = this.get('selectedReconcileTrip.tripId');\n      const toggleBtnType = Ember.get(this, 'selectedToggleButtonType');\n      const selectedRouteTab = Ember.get(this, 'selectedRouteContainerType');\n\n      const reconcileStopPointMap = _lodash.default.groupBy(reconcileTripsDetail.map(tripDetails => {\n        return {\n          tripId: tripDetails.tripId,\n          trip: tripDetails\n        };\n      }), 'tripId');\n\n      const stops = reconcileStopPointMap[tripId] || [];\n      const convertedStops = this.convertToEmberObject(stops);\n      const selectedStop = convertedStops.find(stop => stop.trip.type.toLowerCase() === type);\n      /*\n      To check whether the trip is already there in the after impact table of the destination route.\n      */\n\n      const previousTripIndex = reconcileTrips.findIndex(trip => {\n        return trip.tripId === tripId && trip.type.toLowerCase() === type;\n      });\n\n      if (previousTripIndex > -1) {\n        reconcileTrips.splice(previousTripIndex, 1);\n      }\n      /*\n      Setting the newly selected pick and drop time to the selected trip in the trip response\n      to display it correctly in the after impact table of destination route.\n      */\n\n\n      const arriveEventTime = selectedStop.trip.type.toLowerCase() === type ? time : '';\n      selectedStop.trip.set('arriveEvent.receivedat', arriveEventTime);\n      reconcileTrips.pushObject(selectedStop.trip);\n      const sortedStopList = this.getSortedStopList(reconcileTrips);\n      this.set('destinationNewRouteStops', sortedStopList);\n\n      if (toggleBtnType === TOGGLE_TYPE_AFTER && selectedRouteTab === DESTINATION_TAB) {\n        this.setStopTable([]);\n        this.setStopTable(sortedStopList);\n      }\n    },\n\n    /*The changed pick and drop time should be displayed in the table.\n    The normal object doesn't allow us to set the value of receivedat.\n    So the stops and trip of the stops are converted to EmberObject to set the new value\n    */\n    convertToEmberObject(stops) {\n      const convertedStops = stops.map(stop => {\n        return Ember.Object.create(stop);\n      });\n      convertedStops.map(stop => {\n        if (_lodash.default.isObject(stop[TRIP])) {\n          const convertedTrip = Ember.Object.create(stop[TRIP]);\n          stop.set(TRIP, convertedTrip);\n        }\n      });\n      return convertedStops;\n    },\n\n    /*\n    To get the trip details of the route to which the selected trips are going to be transferred.\n    */\n    async getTripsByRouteId(route) {\n      const reconcileTripsByRoutes = await this.reconcileLambda.getReconcileTripsByRouteId.perform(route.routeId);\n      this.set('reconcileTrips', reconcileTripsByRoutes);\n    },\n\n    /*\n    To highlight the rows of the selected trip\n    */\n    setCurrentTripSelected() {\n      const rows = Ember.get(this, 'stopsTable.rows');\n      rows.map(row => {\n        if (row.content.tripId === this.get('selectedReconcileTrip').tripId) {\n          row.set('selected', true);\n        }\n      });\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Trip Transfer to Another Route';\n      const tip = 'Transfer trip ' + this.selectedReconcileTrip.tripId + ' from Route ' + this.selectedReconcileTrip.routeId + ' to Route ' + this.selectedRoute.routeId;\n      const successMsg = 'Trip ' + this.selectedReconcileTrip.tripId + ' was successfully transferred';\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('reconcileTripTransferToRoute');\n            tooltip.reset();\n            this.get('notifications').success(successMsg);\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in transfer trip, please try again.';\n                break;\n            }\n\n            this.set('errorMessage', message);\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    generateRandomId() {\n      return Math.floor(Math.random() * 10000);\n    },\n\n    buildArriveAndDepartEventsFromPreviousTripDetails(pickTripResponse, dropTripResponse) {\n      return [{\n        'id': pickTripResponse.arriveEvent.id,\n        'routeId': pickTripResponse.arriveEvent.routeid,\n        'driverId': pickTripResponse.arriveEvent.driverid,\n        'vehicleId': pickTripResponse.arriveEvent.vehicleid,\n        'scheduleId': pickTripResponse.arriveEventscheduleid,\n        'stopPointId': pickTripResponse.arriveEvent.stoppointid,\n        'tripId': pickTripResponse.arriveEvent.tripid,\n        'riderId': pickTripResponse.arriveEvent.riderid,\n        'odo': pickTripResponse.arriveEvent.odo,\n        'speed': pickTripResponse.arriveEvent.speed,\n        'heading': pickTripResponse.arriveEvent.heading,\n        'eventType': pickTripResponse.arriveEvent.eventtype,\n        'actionType': pickTripResponse.arriveEvent.actiontype,\n        'createdAt': pickTripResponse.arriveEvent.createdat,\n        'updatedAt': pickTripResponse.arriveEvent.updatedat,\n        'receivedAt': pickTripResponse.arriveEvent.receivedat,\n        'dbVersion': null,\n        'op$1': pickTripResponse.arriveEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': pickTripResponse.arriveEvent.reconciledate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': pickTripResponse.departEvent.id,\n        'routeId': pickTripResponse.departEvent.routeid,\n        'driverId': pickTripResponse.departEvent.driverid,\n        'vehicleId': pickTripResponse.departEvent.vehicleid,\n        'scheduleId': pickTripResponse.departEventscheduleid,\n        'stopPointId': pickTripResponse.departEvent.stoppointid,\n        'tripId': pickTripResponse.departEvent.tripid,\n        'riderId': pickTripResponse.departEvent.riderid,\n        'odo': pickTripResponse.departEvent.odo,\n        'speed': pickTripResponse.departEvent.speed,\n        'heading': pickTripResponse.departEvent.heading,\n        'eventType': pickTripResponse.departEvent.eventtype,\n        'actionType': pickTripResponse.departEvent.actiontype,\n        'createdAt': pickTripResponse.departEvent.createdat,\n        'updatedAt': pickTripResponse.departEvent.updatedat,\n        'receivedAt': pickTripResponse.departEvent.receivedat,\n        'dbVersion': null,\n        'op$1': pickTripResponse.departEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': pickTripResponse.departEvent.reconciledate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': dropTripResponse.arriveEvent.id,\n        'routeId': dropTripResponse.arriveEvent.routeid,\n        'driverId': dropTripResponse.arriveEvent.driverid,\n        'vehicleId': dropTripResponse.arriveEvent.vehicleid,\n        'scheduleId': dropTripResponse.arriveEventscheduleid,\n        'stopPointId': dropTripResponse.arriveEvent.stoppointid,\n        'tripId': dropTripResponse.arriveEvent.tripid,\n        'riderId': dropTripResponse.arriveEvent.riderid,\n        'odo': dropTripResponse.arriveEvent.odo,\n        'speed': dropTripResponse.arriveEvent.speed,\n        'heading': dropTripResponse.arriveEvent.heading,\n        'eventType': dropTripResponse.arriveEvent.eventtype,\n        'actionType': dropTripResponse.arriveEvent.actiontype,\n        'createdAt': dropTripResponse.arriveEvent.createdat,\n        'updatedAt': dropTripResponse.arriveEvent.updatedat,\n        'receivedAt': dropTripResponse.arriveEvent.receivedat,\n        'dbVersion': null,\n        'op$1': dropTripResponse.arriveEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': dropTripResponse.arriveEvent.reconciledate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': dropTripResponse.departEvent.id,\n        'routeId': dropTripResponse.departEvent.routeid,\n        'driverId': dropTripResponse.departEvent.driverid,\n        'vehicleId': dropTripResponse.departEvent.vehicleid,\n        'scheduleId': dropTripResponse.departEventscheduleid,\n        'stopPointId': dropTripResponse.departEvent.stoppointid,\n        'tripId': dropTripResponse.departEvent.tripid,\n        'riderId': dropTripResponse.departEvent.riderid,\n        'odo': dropTripResponse.departEvent.odo,\n        'speed': dropTripResponse.departEvent.speed,\n        'heading': dropTripResponse.departEvent.heading,\n        'eventType': dropTripResponse.departEvent.eventtype,\n        'actionType': dropTripResponse.departEvent.actiontype,\n        'createdAt': dropTripResponse.departEvent.createdat,\n        'updatedAt': dropTripResponse.departEvent.updatedat,\n        'receivedAt': dropTripResponse.departEvent.receivedat,\n        'dbVersion': null,\n        'op$1': dropTripResponse.departEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': dropTripResponse.departEvent.reconciledate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }];\n    },\n\n    buildTripResponseFromPreviousTripDetails(previousTripResponse) {\n      return {\n        'id': previousTripResponse.tripId,\n        'routeId': previousTripResponse.routeId,\n        'status': previousTripResponse.status,\n        'externalId': previousTripResponse.externalTripId,\n        'scheduleId': previousTripResponse.scheduleId,\n        'createdAt': previousTripResponse.createdAt,\n        'updatedAt': previousTripResponse.updatedAt,\n        'op$1': previousTripResponse.op$1,\n        'deleted$1': false\n      };\n    },\n\n    buildEventAttributeFromPreviousTripDetails(previousTripResponse) {\n      return [{\n        'id': previousTripResponse.eventAttribute.id,\n        'eventId': previousTripResponse.eventAttribute.eventid,\n        'attributeId': previousTripResponse.eventAttribute.attributeid,\n        'attributeCount': previousTripResponse.eventAttribute.attributecount,\n        'scheduleId': previousTripResponse.eventAttribute.scheduleid,\n        'createdAt': previousTripResponse.createdAt,\n        'updatedAt': previousTripResponse.updatedAt,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': previousTripResponse.op$1\n      }];\n    },\n\n    buildArriveAndDepartEventResForTransferTripPayload(reconcileDate, pickTripResponse, dropTripResponse, rvdResponse) {\n      return [{\n        'id': pickTripResponse.arriveEvent.id,\n        'routeId': rvdResponse.routeid,\n        'driverId': pickTripResponse.arriveEvent.driverid,\n        'vehicleId': pickTripResponse.arriveEvent.vehicleid,\n        'scheduleId': pickTripResponse.arriveEventscheduleid,\n        'stopPointId': pickTripResponse.arriveEvent.stoppointid,\n        'tripId': pickTripResponse.arriveEvent.tripid,\n        'riderId': pickTripResponse.arriveEvent.riderid,\n        'odo': pickTripResponse.arriveEvent.odo,\n        'speed': pickTripResponse.arriveEvent.speed,\n        'heading': pickTripResponse.arriveEvent.heading,\n        'eventType': pickTripResponse.arriveEvent.eventtype,\n        'actionType': pickTripResponse.arriveEvent.actiontype,\n        'createdAt': pickTripResponse.arriveEvent.createdat,\n        'updatedAt': reconcileDate,\n        'receivedAt': pickTripResponse.arriveEvent.receivedat,\n        'dbVersion': null,\n        'op$1': pickTripResponse.arriveEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': pickTripResponse.departEvent.id,\n        'routeId': rvdResponse.routeid,\n        'driverId': pickTripResponse.departEvent.driverid,\n        'vehicleId': pickTripResponse.departEvent.vehicleid,\n        'scheduleId': pickTripResponse.departEventscheduleid,\n        'stopPointId': pickTripResponse.departEvent.stoppointid,\n        'tripId': pickTripResponse.departEvent.tripid,\n        'riderId': pickTripResponse.departEvent.riderid,\n        'odo': pickTripResponse.departEvent.odo,\n        'speed': pickTripResponse.departEvent.speed,\n        'heading': pickTripResponse.departEvent.heading,\n        'eventType': pickTripResponse.departEvent.eventtype,\n        'actionType': pickTripResponse.departEvent.actiontype,\n        'createdAt': pickTripResponse.departEvent.createdat,\n        'updatedAt': reconcileDate,\n        'receivedAt': pickTripResponse.departEvent.receivedat,\n        'dbVersion': null,\n        'op$1': pickTripResponse.departEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': dropTripResponse.arriveEvent.id,\n        'routeId': rvdResponse.routeid,\n        'driverId': dropTripResponse.arriveEvent.driverid,\n        'vehicleId': dropTripResponse.arriveEvent.vehicleid,\n        'scheduleId': dropTripResponse.arriveEventscheduleid,\n        'stopPointId': dropTripResponse.arriveEvent.stoppointid,\n        'tripId': dropTripResponse.arriveEvent.tripid,\n        'riderId': dropTripResponse.arriveEvent.riderid,\n        'odo': dropTripResponse.arriveEvent.odo,\n        'speed': dropTripResponse.arriveEvent.speed,\n        'heading': dropTripResponse.arriveEvent.heading,\n        'eventType': dropTripResponse.arriveEvent.eventtype,\n        'actionType': dropTripResponse.arriveEvent.actiontype,\n        'createdAt': dropTripResponse.arriveEvent.createdat,\n        'updatedAt': reconcileDate,\n        'receivedAt': dropTripResponse.arriveEvent.receivedat,\n        'dbVersion': null,\n        'op$1': dropTripResponse.arriveEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': dropTripResponse.departEvent.id,\n        'routeId': rvdResponse.routeid,\n        'driverId': dropTripResponse.departEvent.driverid,\n        'vehicleId': dropTripResponse.departEvent.vehicleid,\n        'scheduleId': dropTripResponse.departEventscheduleid,\n        'stopPointId': dropTripResponse.departEvent.stoppointid,\n        'tripId': dropTripResponse.departEvent.tripid,\n        'riderId': dropTripResponse.departEvent.riderid,\n        'odo': dropTripResponse.departEvent.odo,\n        'speed': dropTripResponse.departEvent.speed,\n        'heading': dropTripResponse.departEvent.heading,\n        'eventType': dropTripResponse.departEvent.eventtype,\n        'actionType': dropTripResponse.departEvent.actiontype,\n        'createdAt': dropTripResponse.departEvent.createdat,\n        'updatedAt': reconcileDate,\n        'receivedAt': dropTripResponse.departEvent.receivedat,\n        'dbVersion': null,\n        'op$1': dropTripResponse.departEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }];\n    },\n\n    buildStartAddressResForTransferTripPayload(reconcileDate, tripPickDetails) {\n      return {\n        'id': tripPickDetails.address.id,\n        'streetName': tripPickDetails.address.streetname,\n        'streetNumber': tripPickDetails.address.streetnumber,\n        'postalCode': tripPickDetails.address.postalcode,\n        'locality': tripPickDetails.address.locality,\n        'region': tripPickDetails.address.region,\n        'latitude': tripPickDetails.address.latitude,\n        'longitude': tripPickDetails.address.longitude,\n        'formattedAddress': tripPickDetails.address.formattedaddress,\n        'zoneId': tripPickDetails.address.zoneid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': tripPickDetails.address.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      };\n    },\n\n    buildEndAddressResForTransferTripPayload(reconcileDate, tripDropDetails) {\n      return {\n        'id': tripDropDetails.address.id,\n        'streetName': tripDropDetails.address.streetname,\n        'streetNumber': tripDropDetails.address.streetnumber,\n        'postalCode': tripDropDetails.address.postalcode,\n        'locality': tripDropDetails.address.locality,\n        'region': tripDropDetails.address.region,\n        'latitude': tripDropDetails.address.latitude,\n        'longitude': tripDropDetails.address.longitude,\n        'formattedAddress': tripDropDetails.address.formattedaddress,\n        'zoneId': tripDropDetails.address.zoneid,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': tripDropDetails.address.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      };\n    },\n\n    buildRiderEventResForTransferTripPayload(reconcileRouteInfo, tripPickDetails, tripDropDetails, reconcileDate) {\n      return [{\n        'id': tripPickDetails.riderEvent.id,\n        'stopPointId': tripPickDetails.riderEvent.stoppointid,\n        'scheduledTime': tripPickDetails.riderEvent.scheduledtime,\n        'type': tripPickDetails.riderEvent.type,\n        'riderId': tripPickDetails.riderEvent.riderid,\n        'anchor': tripPickDetails.riderEvent.anchor,\n        'promisedTime': tripPickDetails.riderEvent.promisedtime,\n        'serviceStartTime': tripPickDetails.riderEvent.servicestarttime,\n        'serviceEndTime': tripPickDetails.riderEvent.serviceendtime,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': tripPickDetails.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }, {\n        'id': tripDropDetails.riderEvent.id,\n        'stopPointId': tripDropDetails.riderEvent.stoppointid,\n        'scheduledTime': tripDropDetails.riderEvent.scheduledtime,\n        'type': tripDropDetails.riderEvent.type,\n        'riderId': tripDropDetails.riderEvent.riderid,\n        'anchor': tripDropDetails.riderEvent.anchor,\n        'promisedTime': tripDropDetails.riderEvent.promisedtime,\n        'serviceStartTime': tripDropDetails.riderEvent.servicestarttime,\n        'serviceEndTime': tripDropDetails.riderEvent.serviceendtime,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': tripDropDetails.riderEvent.__op,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }];\n    },\n\n    buildAttributeResForTransferTripPayload(pickTransferTripDetails, reconcileDate) {\n      const attribute = pickTransferTripDetails.eventAttribute.attribute;\n\n      if (attribute) {\n        return attribute.map(ele => {\n          return {\n            'id': ele.id,\n            'type': ele.type.toLowerCase(),\n            'createdAt': reconcileDate,\n            'updatedAt': reconcileDate,\n            'dbVersion': null,\n            'op$1': ele.op$1,\n            'deleted$1': false,\n            'reconcileDate': reconcileDate,\n            'isReconciled': true,\n            'reconciliationNotes': null\n          };\n        });\n      }\n\n      return [{\n        'id': this.generateRandomId(),\n        'type': '',\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': pickTransferTripDetails.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': null\n      }];\n    },\n\n    buildStopPointResForTransferTripPayload(reconcileRouteInfo, reconcileDate, tripPickDetails, tripDropDetails) {\n      return [{\n        'id': tripPickDetails.stopPointId,\n        'tripId': tripPickDetails.tripId,\n        'routeIndex': null,\n        'addressId': tripPickDetails.address.id,\n        'clusterId': null,\n        'eta': tripPickDetails.eta,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': tripPickDetails.scheduleId,\n        'status': tripPickDetails.status,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': tripPickDetails.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }, {\n        'id': tripDropDetails.stopPointId,\n        'tripId': tripDropDetails.tripId,\n        'routeIndex': null,\n        'addressId': tripDropDetails.address.id,\n        'clusterId': null,\n        'eta': tripDropDetails.eta,\n        'dwellTime': null,\n        'clusterIndex': null,\n        'scheduleId': tripDropDetails.scheduleId,\n        'status': tripDropDetails.status,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'op$1': tripDropDetails.op$1,\n        'deleted$1': false,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': 'reconciled'\n      }];\n    },\n\n    buildRouteResFromRVDForTransferTripPayload(rvdResponse, reconcileDate) {\n      return {\n        'deleted$1': false,\n        'endAddressId': rvdResponse.route.endaddressid,\n        'startAddressId': rvdResponse.route.startaddressid,\n        'version': 1,\n        'op$1': rvdResponse.op$1,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'plannedStartTime': rvdResponse.route.plannedstarttime,\n        'plannedEndTime': rvdResponse.route.plannedendtime,\n        'id': rvdResponse.route.id,\n        'providerName': rvdResponse.route.providername,\n        'scheduleId': rvdResponse.route.scheduleid,\n        'status': rvdResponse.route.status,\n        'trackingId': rvdResponse.route.trackingid,\n        'actualStartTime': rvdResponse.route.actualstarttime,\n        'actualEndTime': rvdResponse.route.actualendtime,\n        'alertId': rvdResponse.route.alertid,\n        'otpValue': rvdResponse.route.otpvalue,\n        'otpStatus': rvdResponse.route.otpstatus,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true,\n        'reconciliationNotes': rvdResponse.route.reconciliationnotes\n      };\n    },\n\n    buildTripResForTransferTripPayload(reconcileDate, previousTripResponse, rvdResponse) {\n      return {\n        'id': previousTripResponse.tripId,\n        'routeId': rvdResponse.routeid,\n        'status': previousTripResponse.status,\n        'externalId': previousTripResponse.externalTripId,\n        'scheduleId': previousTripResponse.scheduleId,\n        'createdAt': previousTripResponse.createdAt,\n        'updatedAt': reconcileDate,\n        'op$1': previousTripResponse.op$1,\n        'deleted$1': false\n      };\n    },\n\n    buildTripRiderForTransferTripPayload(pickTransferTripDetails, reconcileDate) {\n      return {\n        'id': pickTransferTripDetails.externalTripId,\n        'tripId': pickTransferTripDetails.tripId,\n        'riderId': pickTransferTripDetails.riderDetails.id,\n        'status': pickTransferTripDetails.status,\n        'scheduleId': pickTransferTripDetails.scheduleId,\n        'createdAt': pickTransferTripDetails.createdAt,\n        'updatedAt': reconcileDate,\n        'dbVersion': null,\n        'op$1': pickTransferTripDetails.op$1,\n        'deleted$1': pickTransferTripDetails.deleted$1,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildRiderResForTransferTripPayload(pickTransferTripDetails, reconcileDate) {\n      return {\n        'id': pickTransferTripDetails.riderDetails.id,\n        'name': pickTransferTripDetails.riderDetails.name,\n        'firstName': pickTransferTripDetails.riderDetails.firstname,\n        'lastName': pickTransferTripDetails.riderDetails.lastname,\n        'middleName': pickTransferTripDetails.riderDetails.middlename,\n        'passengerTypeName': pickTransferTripDetails.riderDetails.passengertypename,\n        'bookingClientId': pickTransferTripDetails.riderDetails.bookingclientid,\n        'tripId': pickTransferTripDetails.tripId,\n        'providerName': pickTransferTripDetails.riderDetails.providername,\n        'op$1': pickTransferTripDetails.riderDetails.__op,\n        'deleted$1': false,\n        'createdAt': reconcileDate,\n        'updatedAt': reconcileDate,\n        'reconcileDate': reconcileDate,\n        'isReconciled': true\n      };\n    },\n\n    buildEventAttributesForTransferTripPayload(tripResponse, reconcileDate) {\n      return [{\n        'id': tripResponse.eventAttribute.id,\n        'eventId': tripResponse.eventAttribute.eventid,\n        'attributeId': tripResponse.eventAttribute.attributeid,\n        'attributeCount': tripResponse.eventAttribute.attributecount,\n        'scheduleId': tripResponse.eventAttribute.scheduleid,\n        'createdAt': tripResponse.createdAt,\n        'updatedAt': reconcileDate,\n        'deletedAt': null,\n        'deleted$1': false,\n        'dbVersion': null,\n        'op$1': tripResponse.op$1\n      }];\n    },\n\n    buildPayloadForTripTransfer() {\n      const reconcile = this.get('reconcile');\n      const reconcileRouteInfo = reconcile.get('reconcileRouteInfo');\n      const previousTripDetails = reconcile.get('selectedTripRow');\n      const transferTripDetails = this.get('reconcile.reconcileTripDetails').filter(trip => trip.tripId === previousTripDetails.tripId);\n      const dropTransferTripDetails = transferTripDetails.find(trip => trip.type.toLowerCase() === 'drop');\n      const pickTransferTripDetails = transferTripDetails.find(trip => trip.type.toLowerCase() === 'pick');\n      const rvdResponseForSelectedRoute = this.get('reconcile.reconcileRVDResponse').find(rvd => rvd.routeid.toString() === this.selectedRoute.routeId.toString());\n      const reconcileDate = new Date().toISOString();\n      return {\n        'previousTrip': {\n          'events': this.buildArriveAndDepartEventsFromPreviousTripDetails(pickTransferTripDetails, dropTransferTripDetails),\n          'trip': this.buildTripResponseFromPreviousTripDetails(previousTripDetails),\n          'eventAttributes': this.buildEventAttributeFromPreviousTripDetails(previousTripDetails)\n        },\n        'transferTrip': {\n          'events': this.buildArriveAndDepartEventResForTransferTripPayload(reconcileDate, pickTransferTripDetails, dropTransferTripDetails, rvdResponseForSelectedRoute),\n          'address': [this.buildStartAddressResForTransferTripPayload(reconcileDate, pickTransferTripDetails), this.buildEndAddressResForTransferTripPayload(reconcileDate, dropTransferTripDetails)],\n          'riderEvents': this.buildRiderEventResForTransferTripPayload(reconcileRouteInfo, pickTransferTripDetails, dropTransferTripDetails, reconcileDate),\n          'attributes': this.buildAttributeResForTransferTripPayload(pickTransferTripDetails, reconcileDate),\n          'stopPoint': this.buildStopPointResForTransferTripPayload(reconcileRouteInfo, reconcileDate, pickTransferTripDetails, dropTransferTripDetails),\n          'route': this.buildRouteResFromRVDForTransferTripPayload(rvdResponseForSelectedRoute, reconcileDate),\n          'trip': this.buildTripResForTransferTripPayload(reconcileDate, previousTripDetails, rvdResponseForSelectedRoute),\n          'tripRider': this.buildTripRiderForTransferTripPayload(pickTransferTripDetails, reconcileDate),\n          'rider': this.buildRiderResForTransferTripPayload(pickTransferTripDetails, reconcileDate),\n          'eventAttributes': this.buildEventAttributesForTransferTripPayload(previousTripDetails, reconcileDate)\n        }\n      };\n    },\n\n    //==========start of task section\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const reconcile = this.get('reconcile');\n        const payload = this.buildPayloadForTripTransfer();\n        return yield reconcile.updateTripTransferToAnotherRoute(payload);\n      } catch (e) {\n        throw e;\n      }\n    }),\n    actions: {\n      onChangeProvider(option) {\n        this.setProperties({\n          selectedProvider: option,\n          'reconcile.reconcileProviderName': option.id,\n          selectedSearchMode: null,\n          selectedRoute: null,\n          reconcileTrips: null,\n          'reconcile.reconcileRouteOptions': this.get('routeOptions'),\n          'reconcile.selectedProvider': option\n        });\n      },\n\n      async onChangeRoute(route) {\n        this.setProperties({\n          selectedRoute: route\n        });\n        await this.getTripsByRouteId(route);\n        const destinationRouteTrips = this.getSortedStopList(this.get('reconcileTrips'));\n        this.set('destinationRouteStops', destinationRouteTrips);\n      },\n\n      onChangePickTime(value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set('pickArrivalTime', momentTime.toISOString());\n        Ember.set(this, 'canUndo', true);\n        this.reconcileTripsWithChangedPickAndDropTime(momentTime, 'pick');\n      },\n\n      onChangeDropTime(value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set('dropArrivalTime', momentTime.toISOString());\n        Ember.set(this, 'canUndo', true);\n        this.reconcileTripsWithChangedPickAndDropTime(momentTime, 'drop');\n      },\n\n      onChangeRouteTab(option) {\n        this.set('selectedRouteContainerType', option);\n        this.manageRouteDetails();\n      },\n\n      onUndoClick() {\n        this.setProperties({\n          reconcileTrips: null,\n          selectedProvider: null,\n          selectedRoute: null,\n          destinationRouteStops: [],\n          destinationNewRouteStops: [],\n          selectedPickOrder: null,\n          selectedDropOrder: null\n        });\n        Ember.set(this, 'canUndo', false);\n        this.manageRouteDetails();\n      },\n\n      onSaveClick() {\n        Ember.set(this, 'errorMessage', null);\n        this.showToolTip();\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-transfer/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stopColumns = void 0;\n  const cellComponent = 'table/cells/base-cell';\n  const stopColumns = [{\n    label: 'Trip ID',\n    valuePath: 'tripId',\n    cellComponent,\n    resizable: true,\n    minResizeWidth: 50,\n    dataType: 'number',\n    width: '80px'\n  }, {\n    label: 'Last Name',\n    valuePath: 'riderDetails.lastname',\n    cellComponent,\n    resizable: true,\n    minResizeWidth: 50,\n    dataType: 'text',\n    width: '100px'\n  }, {\n    label: 'Address',\n    valuePath: 'address.streetname',\n    cellComponent,\n    minResizeWidth: 50,\n    resizable: true,\n    dataType: 'text',\n    width: '150px'\n  }, {\n    label: 'City',\n    valuePath: 'address.locality',\n    cellComponent,\n    minResizeWidth: 50,\n    resizable: true,\n    dataType: 'text',\n    width: '120px'\n  }, {\n    label: 'Type',\n    valuePath: 'type',\n    cellComponent,\n    minResizeWidth: 50,\n    resizable: true,\n    dataType: 'text',\n    width: '60px'\n  }, {\n    label: 'Actual Arrival Time',\n    valuePath: 'arriveEvent.receivedat',\n    cellComponent,\n    minResizeWidth: 50,\n    resizable: true,\n    dataType: 'time',\n    format: 'hh:mm A',\n    width: '150px'\n  }, {\n    label: 'Actual Depart Time',\n    valuePath: 'departEvent.receivedat',\n    cellComponent,\n    minResizeWidth: 50,\n    resizable: true,\n    dataType: 'time',\n    format: 'hh:mm A',\n    width: '150px'\n  }];\n  _exports.stopColumns = stopColumns;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-transfer/stubs\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.tripMockPayload = _exports.routeMockData = _exports.providerMockData = _exports.pickOderMockData = _exports.dropOderMockData = void 0;\n  const tripMockPayload = {\n    id: 291220489,\n    route: {\n      id: 568866,\n      driver: {\n        id: 32453,\n        badgeNr: 32453,\n        name: 'David John'\n      },\n      vehicle: {\n        id: 124567,\n        callSign: 124567,\n        status: 'N/A'\n      }\n    },\n    promiseTime: (0, _moment.default)('12:50 AM', 'hh:mm A'),\n    status: {\n      otpStatus: 'Late',\n      otpValue: +60\n    },\n    rider: {\n      id: 6565124567,\n      name: 'Mark S.'\n    },\n    provider: {\n      name: 'MVT'\n    },\n    stops: [{\n      id: 'P291220489',\n      type: 'pickup',\n      eta: '2020-03-07T02:09:00Z',\n      address: {\n        formattedAddress: '8409 35TH AVE, JACKSON HEIGHTS, NY 11372, US',\n        streetName: '35TH AVE',\n        streetNr: 8409,\n        unitNr: '1E',\n        region: 'Queens',\n        postCode: 11372,\n        city: 'JACKSON HEIGHTS',\n        state: 'NY',\n        country: 'US',\n        coord: {\n          lat: 40.75201,\n          lng: -73.88272\n        }\n      }\n    }, {\n      id: 'D291220489',\n      type: 'dropoff',\n      eta: '2020-03-07T02:09:00Z',\n      address: {\n        formattedAddress: '3706 77TH ST TRANSVERSE, JACKSON HEIGHTS, NY 11372, US',\n        streetName: '77TH ST TRANSVERSE',\n        streetNr: 3706,\n        unitNr: 'N/A',\n        region: 'Queens',\n        postCode: 11372,\n        city: 'JACKSON HEIGHTS',\n        state: 'NY',\n        country: 'US',\n        description: '***SYNAGOGUE***',\n        coord: {\n          lat: 40.74881,\n          lng: -73.88901\n        }\n      }\n    }]\n  };\n  _exports.tripMockPayload = tripMockPayload;\n  const providerMockData = [{\n    name: 'MAGGIES TRANSPORTATION',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'ADVANCE TRANSIT',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'ADVANCE TRANSIT',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'EMPIRE PARATRANSIT CORP',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'PREMIER PARATRANSIT LLC',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'Provider 1',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'PROFESSIONAL TRANSPORATION',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'STAR CRUISER TRANSPORTION',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }, {\n    name: 'Sub Provider 1 1',\n    providerTypeName: 'provider',\n    status: 'Active'\n  }];\n  _exports.providerMockData = providerMockData;\n  const routeMockData = [{\n    id: 400022,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400023,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400024,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400025,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400026,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400027,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400028,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400029,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400030,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }, {\n    id: 400031,\n    provider: 'EMPIRE PARATRANSIT CORP',\n    plannedStartTime: '2020-10-06T15:00:00.000Z',\n    plannedEndTime: '2020-10-06T23:00:00.000Z',\n    actualEndTimestamp: null,\n    actualStartTimestamp: null\n  }];\n  _exports.routeMockData = routeMockData;\n  const pickOderMockData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22];\n  _exports.pickOderMockData = pickOderMockData;\n  const dropOderMockData = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22];\n  _exports.dropOderMockData = dropOderMockData;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"A47oXAwY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"route\\\",\\\"provider\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L14:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L15:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"selectedReconcileTrip\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"selectedReconcileTrip\\\",\\\"arriveEvent\\\",\\\"vehicleid\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Route ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"selectedReconcileTrip\\\",\\\"arriveEvent\\\",\\\"routeid\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Driver ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"selectedReconcileTrip\\\",\\\"arriveEvent\\\",\\\"driverid\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Driver Name:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"driverFullName\\\"],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Passenger:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"selectedReconcileTrip\\\",\\\"riderDetails\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Provider:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"routeDetails\\\",\\\"vehicle\\\",\\\"providername\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L50:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Select Route for trip transfer\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[11,\\\"width\\\",\\\"15%\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"providerOptions\\\"]],\\\"name\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedProvider\\\",\\\"id\\\"]],[23,[\\\"providerOptions\\\"]]],null],\\\"Select provider\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[11,\\\"width\\\",\\\"15%\\\"],[9],[0,\\\"Pick (Arrival Time)\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"disabled\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"date\\\",\\\"dateFormat\\\",\\\"onChange\\\"],[\\\"en\\\",[23,[\\\"pickAndDropEnable\\\"]],1,false,true,false,0,\\\"HH:MM\\\",true,[23,[\\\"pickArrivalTime\\\"]],\\\"h:i K\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"options\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"routeOptionEnabled\\\"]],[23,[\\\"routeOptions\\\"]],\\\"id\\\",true,[27,\\\"find-by\\\",[\\\"id\\\",[23,[\\\"selectedRoute\\\",\\\"id\\\"]],[23,[\\\"routeOptions\\\"]]],null],\\\"Select Route\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRoute\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,4,[\\\"id\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"text-left\\\"],[9],[0,\\\"Drop (Arrival Time)\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"pr-5\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"disabled\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"date\\\",\\\"dateFormat\\\",\\\"onChange\\\"],[\\\"en\\\",[23,[\\\"pickAndDropEnable\\\"]],1,false,true,false,0,\\\"HH:MM\\\",true,[23,[\\\"dropArrivalTime\\\"]],\\\"h:i K\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropTime\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L125:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[9],[0,\\\"Alternate between before and after to see how trip transfer affects the route\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"trip-transfer-tabs\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"enableTabbing\\\"]]],null]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRouteContainerType\\\"]],\\\"destination\\\"],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Route \\\"],[1,[23,[\\\"selectedRoute\\\",\\\"id\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"onChangeRouteTab\\\",\\\"destination\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"enableTabbing\\\"]]],null]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedRouteContainerType\\\"]],\\\"current\\\"],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Previous Route \\\"],[1,[23,[\\\"reconcileRouteDetails\\\",\\\"routeName\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"onChangeRouteTab\\\",\\\"current\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-impact-bar\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"toggle-switch\\\",null,[[\\\"toggleProperty\\\",\\\"disabled\\\",\\\"offValue\\\",\\\"offLabel\\\",\\\"onValue\\\",\\\"onLabel\\\"],[[23,[\\\"selectedToggleButtonType\\\"]],[23,[\\\"enableToggleTypeAfter\\\"]],\\\"before\\\",\\\"Before\\\",\\\"after\\\",\\\"After\\\"]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper g-side-drawer-scroll-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"stopsTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n            \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L149:C14) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L153:C15) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\"],[false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"stopsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs' @ L159:C19) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                  No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-trip-transfer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/component\", [\"exports\", \"ember-concurrency\", \"moment\"], function (_exports, _emberConcurrency, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    session: Ember.inject.service(),\n    classNames: ['reconcile-widget-base'],\n    onCloseClick: null,\n    tripNote: '',\n    tripDetails: Ember.computed.alias('reconcile.reconcileTrip'),\n    tripDate: Ember.computed.alias('reconcile.reconcileDate'),\n    title: Ember.computed.readOnly('stackFrame.options.title'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('selectedDateTimeRage', {\n        starttime: (0, _moment.default)(new Date()).toISOString('hh:mm a')\n      });\n    },\n\n    saveUnperformNoShowTripTask: (0, _emberConcurrency.task)(function* () {\n      const date = (0, _moment.default)(this.tripDate).format('MM-DD-YYYY');\n      const startTime = (0, _moment.default)(this.get('selectedDateTimeRage').starttime).format('hh:mm a');\n      const stDt = (0, _moment.default)(date + ' ' + startTime);\n\n      try {\n        const store = this.get('store');\n        const reconcileTripAdapter = store.adapterFor('reconcile-trip');\n        const payload = {\n          tripId: this.tripDetails.tripId,\n          date: stDt.toISOString(),\n          note: this.tripNote,\n          userId: this.session.data.authenticated.userId\n        };\n        yield reconcileTripAdapter.patchTrip(payload, 'unperform noshow trip');\n      } catch (error) {\n        throw error;\n      }\n    }),\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const title = 'Unperform No Show Trip';\n      const tip = `Unperform No show trip ${this.tripDetails.tripId}`;\n      const successMsg = `NO ShOWED TRIP ${this.tripDetails.tripId} WAS SUCCESSFULLY UNPERFORMED`;\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          return Ember.get(this, 'saveUnperformNoShowTripTask').perform().then(() => {\n            this.send('cancel');\n            this.get('notifications').success(successMsg);\n            this.get('workspace').popState('reconcileUnPerformNoShow');\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem in unperform no show trip, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    actions: {\n      onSaveClick() {\n        this.showToolTip();\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Ba4mEctF\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"   Trip ID: \\\"],[1,[23,[\\\"tripDetails\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template.hbs' @ L15:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"No Show\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"tripDate\\\"]],\\\"MM-DD-YYYY\\\"],null]],[9],[10],[10],[0,\\\"     \\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"30%\\\"],[9],[0,\\\"Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                 \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"starttime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.starttime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"     \\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"valign\\\",\\\"top\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"textarea\\\"],[11,\\\"rows\\\",\\\"4\\\"],[11,\\\"maxlength\\\",\\\"150\\\"],[12,\\\"value\\\",[21,\\\"tripNote\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"tripNote\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Write a note here\\\"],[9],[10],[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-right mt-1\\\"],[9],[1,[23,[\\\"tripNote\\\",\\\"length\\\"]],false],[0,\\\"/150\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-unperform-no-show/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/component\", [\"exports\", \"moment\", \"ember-concurrency\"], function (_exports, _moment, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    onCloseClick: null,\n    errors: null,\n    // Reset map and address picker\n    canResetAddress: Ember.computed.alias('workspace.activeContext.topActiveContext.resetLocation'),\n    routeDetails: Ember.computed.readOnly('reconcile.reconcileRouteInfo'),\n    callBack: Ember.computed.readOnly('stackFrame.options.action'),\n    canUndo: Ember.computed('selectedReason', 'selectedLocation', 'selectedDateTimeRage.starttime', function () {\n      if (Ember.get(this, 'selectedReason') || Ember.get(this, 'selectedLocation')) {\n        return true;\n      }\n\n      const selectedTime = Ember.get(this, 'selectedDateTimeRage.starttime');\n\n      if (selectedTime) {\n        return (0, _moment.default)(selectedTime).format('hh:mm A') !== (0, _moment.default)(this.todayTime).format('hh:mm A');\n      }\n\n      return false;\n    }),\n    canSave: Ember.computed.and('selectedLocation', 'selectedReason'),\n    reasonOptions: Ember.computed('selectedReason', function () {\n      const breakdownReasonTypes = this.store.peekAll('cs-config-item').filter(message => {\n        return message.category === 'config-System_Configuration-breakdown_types';\n      });\n      return breakdownReasonTypes.map(reason => reason.displayName);\n    }),\n\n    init() {\n      this._super();\n\n      this.todayTime = (0, _moment.default)(new Date()).toISOString('hh:mm a');\n      this.set('selectedDateTimeRage', {\n        date: Ember.get(this, 'reconcile.reconcileDate'),\n        starttime: this.todayTime,\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString()\n      });\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setSideDrawerWidth('470px');\n      this.get('systemConfig').set('showRightPanel', true);\n    },\n\n    checkValidations() {\n      let isValid = true;\n      this.set('errors', []);\n\n      if (!this.get('selectedLocation')) {\n        this.errors.push('Location can not be empty');\n        isValid = false;\n      }\n\n      if (!this.get('selectedReason')) {\n        this.errors.push('Must have a breakdown reason');\n        isValid = false;\n      }\n\n      return isValid;\n    },\n\n    showToolTip() {\n      const tooltip = this.get('tooltip');\n      const successMsg = `VEHICLE ${this.get('routeDetails.vehicle.vehicleId')} BREAKDOWN CONFIRMED`;\n      tooltip.pushConfirmation({\n        title: 'Report Breakdown',\n        tip: 'Would you like to commit your changes?',\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveReportBreakdownTask').perform().then(() => {\n            this.send('cancel');\n            this.get('workspace').popState('reconcileVehicleBreakdown');\n            this.get('notifications').success(successMsg);\n            tooltip.reset();\n          }).catch(error => {\n            let message;\n\n            switch (error.status) {\n              case 400:\n                message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                break;\n\n              default:\n                message = 'There was a problem creating the route, please try again.';\n                break;\n            }\n\n            this.get('notifications').warning(message);\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          return tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    saveReportBreakdownTask: (0, _emberConcurrency.task)(function* () {\n      try {\n        const store = this.get('store');\n        const reconcileRouteAdapter = store.adapterFor('reconcile-route');\n        const dt = (0, _moment.default)(this.get('selectedDateTimeRage').date).format('MM-DD-YYYY');\n        const tm = (0, _moment.default)(this.get('selectedDateTimeRage').starttime).format('hh:mm a');\n        const date = (0, _moment.default)(dt + ' ' + tm).toISOString();\n        const payload = {\n          id: this.routeDetails.get('routeId'),\n          breakdownTime: date,\n          breakdownReason: this.get('selectedReason'),\n          breakdownLocation: this.get('selectedLocation').fullAddress,\n          lat: this.get('selectedLocation').lat,\n          lng: this.get('selectedLocation').lng,\n          userId: this.session.data.authenticated.userId\n        };\n        yield reconcileRouteAdapter.patchRoute(payload, 'Breakdown');\n      } catch (error) {\n        throw error;\n      }\n    }),\n    actions: {\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      save() {\n        const isValid = this.checkValidations();\n\n        if (isValid) {\n          this.showToolTip();\n        }\n      },\n\n      onUndoClick() {\n        if (this.get('selectedLocation')) {\n          this.set('canResetAddress', true);\n        }\n\n        this.set('selectedReason', null);\n        this.set('selectedLocation', null);\n        this.set('selectedDateTimeRage.starttime', this.todayTime);\n      },\n\n      onChangeReason(reason) {\n        this.set('selectedReason', reason);\n      },\n\n      onChangeLocation(location) {\n        this.set('selectedLocation', location);\n      },\n\n      cancel() {\n        if (this.callBack) {\n          this.callBack(true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"UanIrMCk\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"reason\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"reconcile-widget-base\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n   \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.hbs' @ L5:C5) \\\"],null]],[[\\\"title\\\",\\\"canUndo\\\",\\\"onUndoClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[\\\"Report Breakdown\\\",[23,[\\\"canUndo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUndoClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"save\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.hbs' @ L13:C6) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"      Vehicle ID: \\\"],[1,[23,[\\\"routeDetails\\\",\\\"vehicle\\\",\\\"callsign\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n   \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-widget-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"       \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"errors\\\"],[9],[0,\\\"\\\\n         \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n         \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[9],[1,[22,3,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"         \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.hbs' @ L28:C9) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.hbs' @ L29:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Detail\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"addressErrorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"addressErrorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"         \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0 location-tbl\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Location\\\"],[10],[0,\\\"\\\\n               \\\"],[7,\\\"td\\\"],[11,\\\"width\\\",\\\"58%\\\"],[9],[0,\\\"\\\\n                           \\\"],[1,[27,\\\"form-components/location-pick\\\",null,[[\\\"onPickSearch\\\",\\\"onAddressSearch\\\",\\\"selectAddress\\\",\\\"canResetAddress\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onChangeLocation\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeLocation\\\"],null],[23,[\\\"selectedLocation\\\"]],[23,[\\\"canResetAddress\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"35%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Breakdown Time\\\"],[10],[0,\\\"\\\\n               \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                     \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"time_24hr\\\",\\\"defaultHour\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,false,0,\\\"HH:MM\\\",true,\\\"h:i K\\\",[23,[\\\"selectedDateTimeRage\\\",\\\"startofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endofday\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"starttime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"selectedDateTimeRage.starttime\\\"],null]]]],false],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n               \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n               \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                     \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"selectedDateTimeRage\\\",\\\"date\\\"]],\\\"MM-DD-YYYY\\\"],null]],[9],[10],[0,\\\"\\\\n                  \\\"],[10],[0,\\\"\\\\n               \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n         \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.hbs' @ L77:C12) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Breakdown Reasons\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"reasonErrorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"reasonErrorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"         \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form w-100 m-0\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n               \\\"],[7,\\\"th\\\"],[11,\\\"width\\\",\\\"38%\\\"],[11,\\\"class\\\",\\\"p-left-25 left\\\"],[9],[0,\\\"Reasons\\\"],[10],[0,\\\"\\\\n               \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"reasonOptions\\\"]],true,[23,[\\\"selectedReason\\\"]],\\\"Select\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeReason\\\"],null]]],{\\\"statements\\\":[[0,\\\"                     \\\"],[1,[22,2,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"               \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n         \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"   \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/reconcile-vehicle-breakdown/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/component\", [\"exports\", \"moment\", \"ember-light-table\", \"ember-concurrency\", \"adept-iq/config/api-urls\", \"adept-iq/pods/components/side-drawer/rescue-route/config\", \"adept-iq/utils/availability\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/mixins/fetchAssignableVehicleDrivers\", \"lodash\", \"adept-iq/config/environment\"], function (_exports, _moment, _emberLightTable, _emberConcurrency, _apiUrls, _config, _availability, _unwrapProxy, _fetchAssignableVehicleDrivers, _lodash, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const dispatchRouteHost = _apiUrls.API.dispatchService.host;\n  const NUMBER_FORMAT = /^\\d*$/;\n\n  var _default = Ember.Component.extend(_fetchAssignableVehicleDrivers.default, {\n    tagName: '',\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    componentName: 'rescueReplacement',\n    currentState: null,\n    routeName: null,\n    startTime: null,\n    endTime: null,\n    selectedVehicle: null,\n    selectedDriver: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    timeFormat: _environment.default.dateTimeFormat.dateTimeFlatPickr,\n    provider: Ember.computed.readOnly('selectedVehicle.provider'),\n    plannedStartTime: Ember.computed.readOnly('startTime'),\n    //used in fetch vehicle driver mixin\n    plannedEndTime: Ember.computed.readOnly('endTime'),\n    //used in fetch vehicle driver mixin\n    dispatchRoute: Ember.computed.readOnly('stackFrame.options.dsRoute'),\n    dispatchRouteVersion: null,\n    route: Ember.computed.readOnly('dispatchRoute.route'),\n    assignedVehicle: Ember.computed.readOnly('dispatchRoute.assignedVehicle.name'),\n    assignedDriver: Ember.computed.readOnly('dispatchRoute.assignedDriver.driverId'),\n    assignedProvider: Ember.computed.readOnly('dispatchRoute.provider.id'),\n    minEndTime: Ember.computed('startTime', function () {\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n      return plannedStart.add(1, 'minutes').toDate();\n    }),\n    drivers: null,\n    vehicles: null,\n    refreshFlag: false,\n    onShrinkClick: null,\n    onCloseClick: null,\n    ignoreCapacityViolations: false,\n    rowComponent: _config.rowComponent,\n\n    init() {\n      this._super(...arguments);\n\n      const dispatchRoute = this.get('dispatchRoute');\n\n      if (!Ember.isEmpty(_config.tripColumns)) {\n        _config.tripColumns.forEach(tripColumn => {\n          if (tripColumn.highlightable) {\n            tripColumn.cellClassNames = ['highlightable'];\n          }\n        });\n      }\n\n      const trips = this.get('dispatchRoute.unPerformedTrips');\n      const table = new _emberLightTable.default(_config.tripColumns, trips, {\n        enableSync: false\n      });\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.dateTimeMoment);\n      this.set('tripsTable', table);\n      this.set('dispatchRouteVersion', dispatchRoute.version);\n      const today = (0, _moment.default)().startOf('minute');\n      this.set('date', today.toISOString());\n      this.set('startTime', today.toISOString());\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // side panel width just for assign-vehicle-driver-to-route\n\n\n      this.setSideDrawerWidth('600px');\n\n      if (!this.getSchedule()) {\n        this.onCloseClick();\n        this.get('notifications').warning('Please export a schedule to use rescue route');\n      }\n\n      this.fetchDriversTask.perform();\n      this.fetchVehiclesTask.perform(); // this.set('endTime', moment().endOf('day').toISOString());\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('routeName', currentState.routeName);\n        this.set('startTime', currentState.startTime);\n        this.set('endTime', currentState.endTime);\n        this.set('selectedDriver', currentState.selectedDriver);\n      }\n    },\n\n    hasAllSelectedValues: Ember.computed.and('routeName', 'selectedDriver', 'selectedVehicle', 'startTime', 'endTime'),\n    selectedStopPoints: Ember.computed('tripsTable.rows.@each.isChecked', function () {\n      return (0, _lodash.flatten)(this.get('tripsTable.rows').filterBy('isChecked', true).map(trip => trip.get('stopPoints').toArray()));\n    }),\n    availableDrivers: Ember.computed('startTime', 'endTime', 'drivers.[]', function () {\n      const drivers = this.get('drivers') ? this.get('drivers').filter(driver => {\n        return driver.providerName === this.get('assignedProvider');\n      }) : null;\n      const selectedDriver = this.get('selectedDriver'); // always show selected driver\n\n      if (selectedDriver && !drivers.includes(selectedDriver)) {\n        drivers.unshift(selectedDriver);\n      }\n\n      if (!drivers || !drivers.length) return [];\n      return drivers;\n    }),\n    availableVehicles: Ember.computed('startTime', 'endTime', 'vehicles.[]', function () {\n      const vehicles = this.get('vehicles') ? this.get('vehicles').filter(vehicle => {\n        return vehicle.providerId === this.get('assignedProvider');\n      }) : null;\n      const selectedVehicle = this.get('selectedVehicle'); // always show selected vehicle\n\n      if (selectedVehicle && !vehicles.includes(selectedVehicle) && !selectedVehicle.get('placeholder') && !selectedVehicle.isBroken) {\n        vehicles.unshift(selectedVehicle);\n      }\n\n      if (!vehicles || !vehicles.length) return [];\n      return vehicles;\n    }),\n    driverAvailability: Ember.computed('startTime', 'endTime', 'selectedDriver.driverAvailabilities.@each.{startTime,endTime}', function () {\n      const driverAvailabilities = this.get('selectedDriver.driverAvailabilities');\n      if (Ember.isEmpty(driverAvailabilities) || !this.get('startTime') || !this.get('endTime')) return null;\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n      const plannedEnd = (0, _moment.default)(this.get('endTime'));\n      const solution = (0, _availability.solveAvailability)(plannedStart, plannedEnd, driverAvailabilities);\n      if (Ember.isEmpty(solution)) return null;\n      return solution[0];\n    }),\n    driverAvailabilityShiftStart: Ember.computed('driverAvailability', function () {\n      const availability = this.get('driverAvailability');\n      if (Ember.isEmpty(availability) || Ember.isEmpty(availability.matchingAvailability)) return null;\n      return availability.matchingAvailability.get('formattedShiftStart');\n    }),\n    driverAvailabilityShiftEnd: Ember.computed('driverAvailability', function () {\n      const availability = this.get('driverAvailability');\n      if (Ember.isEmpty(availability) || Ember.isEmpty(availability.matchingAvailability)) return null;\n      return availability.matchingAvailability.get('formattedShiftEnd');\n    }),\n\n    getSchedule() {\n      const schedule = (0, _unwrapProxy.unwrapProxy)(this.get('route.schedule'));\n      if (!schedule) return false;\n      this.set('schedule', schedule);\n      return true;\n    },\n\n    formatBulkTransfer(stopPoints, sourceId, destinationId) {\n      return stopPoints.map((stop, index) => {\n        return {\n          id: stop.id,\n          type: 'stop',\n          source: sourceId,\n          destination: destinationId,\n          ordinal: index + 1\n        };\n      });\n    },\n\n    saveRescueRouteTask: (0, _emberConcurrency.task)(function* () {\n      const {\n        routeName,\n        selectedDriver,\n        selectedVehicle,\n        startTime,\n        endTime,\n        schedule\n      } = this.getProperties('routeName', 'selectedDriver', 'selectedVehicle', 'startTime', 'endTime', 'schedule');\n      const ajax = this.get('ajax');\n      const token = this.get('session.data.authenticated.token');\n      const startGarage = this.get('dispatchRoute.startGarage');\n      const endGarage = this.get('dispatchRoute.endGarage');\n      const dispatchRouteId = this.get('dispatchRoute.id');\n      const vehicleId = selectedVehicle ? selectedVehicle.get('id') : null;\n      const driverId = selectedDriver ? selectedDriver.get('id') : null;\n      const providerNameId = selectedVehicle ? selectedVehicle.get('provider.id') : null;\n      const dispatchScheduleId = schedule ? schedule.get('dispatchSchedule.id') : null;\n      const startGarageId = startGarage ? startGarage.get('id') : null;\n      const endGarageId = endGarage ? endGarage.get('id') : null;\n      const dispatchRouteVersion = this.get('dispatchRouteVersion');\n      const json = {\n        data: {\n          type: 'specialRoute',\n          attributes: {\n            name: routeName,\n            routeType: 'rescue replacement',\n            shiftStartTime: startTime,\n            shiftEndTime: endTime\n          },\n          relationships: {\n            dispatchSchedule: {\n              data: {\n                id: dispatchScheduleId,\n                type: 'dispatchSchedule'\n              }\n            },\n            driver: {\n              data: {\n                id: driverId,\n                type: 'driver'\n              }\n            },\n            providerName: {\n              data: {\n                id: providerNameId,\n                type: 'providerName'\n              }\n            },\n            vehicle: {\n              data: {\n                id: vehicleId,\n                type: 'vehicle'\n              }\n            },\n            startGaragePlace: {\n              data: {\n                id: startGarageId,\n                type: 'place'\n              }\n            },\n            endGaragePlace: {\n              data: {\n                id: endGarageId,\n                type: 'place'\n              }\n            },\n            replacedRoute: {\n              data: {\n                id: dispatchRouteId,\n                type: 'dispatchRoute'\n              }\n            }\n          }\n        },\n        included: [{\n          id: dispatchRouteId,\n          type: 'dispatchRoute',\n          attributes: {\n            version: dispatchRouteVersion\n          }\n        }]\n      };\n      return yield ajax.post(`${dispatchRouteHost}/special-route`, {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        },\n        data: json\n      }).catch(_ref => {\n        let {\n          payload\n        } = _ref;\n        const error = new Error();\n        if (payload.message) error.message = payload.message;\n        if (payload.status) error.status = payload.status;\n        if (payload.statusCode) error.status = payload.statusCode;\n        throw error;\n      });\n    }).keepLatest(),\n    saveTripsTask: (0, _emberConcurrency.task)(function* (newDispatchRoute) {\n      const selectedStopPoints = this.get('selectedStopPoints');\n      const sourceId = this.get('dispatchRoute.id');\n      const destinationId = newDispatchRoute.data.id;\n      const tripInstructions = this.formatBulkTransfer(selectedStopPoints, sourceId, destinationId);\n      const bulkOperationAdapter = this.get('store').adapterFor('bulk-operation');\n      const ignoreCapacityViolations = this.get('ignoreCapacityViolations');\n      return yield bulkOperationAdapter.createBulkAsyncOperation.perform({\n        instructions: tripInstructions\n      }, ignoreCapacityViolations).then(result => {\n        if (result.isJobSuccess) {\n          return Promise.resolve();\n        }\n\n        return Promise.reject(result.result);\n      }).catch(function (error) {\n        return Promise.reject(error);\n      });\n    }).keepLatest(),\n\n    isValidEntry() {\n      const selectedStopPoints = this.get('selectedStopPoints');\n      const hasAllSelectedValues = this.get('hasAllSelectedValues');\n      const tripCount = selectedStopPoints.length / 2; // 2 stops per trip\n\n      const isAfter = (0, _moment.default)(this.get('endTime')).isAfter((0, _moment.default)(this.get('startTime')));\n      const maxTravelNeedCounts = this.get('dispatchRoute.maxTravelNeedCounts');\n      const vehicleType = (0, _unwrapProxy.unwrapProxy)(this.get('selectedVehicle.vehicleType'));\n      const arrivedPerformedStops = [];\n      const routeName = this.get('routeName');\n      const routeMaxTimeLimitParam = this.store.peekRecord('cs-config-item', 'config-Route_parameters/routeMaxTimeLimit');\n      const plannedStart = (0, _moment.default)(this.get('startTime'));\n      const plannedEnd = (0, _moment.default)(this.get('endTime'));\n      const routeMaxTimeLimit = routeMaxTimeLimitParam ? parseInt(routeMaxTimeLimitParam.get('value'), 10) : 720; // minutes\n\n      const routeTimeDiff = plannedEnd.diff(plannedStart, 'minutes');\n      const schedule = this.get('schedule');\n      const scheduleStart = (0, _moment.default)(schedule.get('start'));\n      const scheduleEnd = (0, _moment.default)(schedule.get('end'));\n\n      if (!isNaN(parseInt(routeName, 10)) && (parseInt(routeName, 10) > 2147483648 || parseInt(routeName, 10) < 1)) {\n        this.set('errorMessage', 'Route ID must be between 1 to 2147483648');\n        return false;\n      }\n\n      if (routeTimeDiff > routeMaxTimeLimit) {\n        this.set('errorMessage', `Route length of ${routeTimeDiff} exceeds config Route Max Time Limit of ${routeMaxTimeLimit} minutes`);\n        return false;\n      }\n\n      if (scheduleStart.isValid() && scheduleEnd.isValid() && !(scheduleStart.isSameOrBefore(plannedStart) && scheduleEnd.isSameOrAfter(plannedEnd))) {\n        this.set('errorMessage', 'Route duration should be within the current schedule time');\n        return false;\n      }\n\n      selectedStopPoints.forEach(selectedStop => {\n        if (!selectedStop.get('notPerformed') && selectedStop.get('isPick')) {\n          arrivedPerformedStops.push(selectedStop);\n        }\n      });\n\n      if (Ember.isPresent(arrivedPerformedStops)) {\n        const tripIds = arrivedPerformedStops.map(stop => stop.get('trip.tripId'));\n        this.set('errorMessage', `Trip(s) ${tripIds.join(', ')} already in progress.`);\n        return false;\n      }\n\n      if (!tripCount) {\n        this.set('errorMessage', 'Please select at least one trip.');\n        return false;\n      }\n\n      if (!isAfter) {\n        this.set('errorMessage', 'Please set end time after start time');\n        return false;\n      }\n\n      if (hasAllSelectedValues) {\n        // reset error message\n        this.set('errorMessage');\n      } else {\n        // show error message, missing properties\n        this.set('errorMessage', 'Please fill out all of the fields before saving.');\n        return false;\n      }\n\n      if (vehicleType.noOfAmbulatorySeats < maxTravelNeedCounts.ambulatory || vehicleType.noOfServiceAnimalSeats < maxTravelNeedCounts.serviceAnimal || vehicleType.noOfWheelChairSeats < maxTravelNeedCounts.wheelchair || vehicleType.noOfWideAmbulatorySeats < maxTravelNeedCounts.wideAmbulatory || vehicleType.noOfWideWheelChairSeats < maxTravelNeedCounts.wideWheelchair) {\n        const tooltip = this.get('tooltip');\n        const title = 'Rescue Route';\n        tooltip.pushConfirmation({\n          tip: 'You are about to assign an incompatible vehicle. All trips that cannot be serviced will be waitlisted.',\n          title,\n          hasOverlay: true,\n          warning: true,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            this.set('ignoreCapacityViolations', true);\n            this.confirmSave();\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    async confirmSave() {\n      const tooltip = this.get('tooltip');\n      const saveRescueRouteTask = this.get('saveRescueRouteTask');\n      const routeName = this.get('routeName');\n      const oldRouteName = this.get('route.name');\n      const selectedStopPoints = this.get('selectedStopPoints');\n      const notifications = this.get('notifications');\n      const title = 'Rescue Route';\n      const tripCount = selectedStopPoints.length / 2; // 2 stops per trip\n\n      const tripCountPlural = tripCount > 1;\n      const dispatchRoute = this.get('dispatchRoute');\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      this.set('dispatchRouteToCheck', dispatchRoute);\n      let newRouteCreated = false;\n\n      const closeCallback = () => {\n        this.send('onCloseClick');\n      };\n\n      try {\n        // Check dispatchRoute version first\n        await this.get('versionCheckOperation').perform(closeCallback.bind(this));\n        await lockRouteAction();\n        tooltip.pushConfirmation({\n          tip: `You are rescuing ${tripCount} late ${tripCountPlural ? 'trips' : 'trip'} from route ${oldRouteName} to new route ${routeName}`,\n          title,\n          hasOverlay: true,\n          primaryActionText: 'Confirm',\n          primaryAction: async () => {\n            try {\n              const newDispatchRoute = await saveRescueRouteTask.perform();\n              newRouteCreated = true;\n              await this.saveTripsTask.perform(newDispatchRoute);\n              notifications.success(`Successfully transferred ${tripCount} late ${tripCountPlural ? 'trips' : 'trip'} to new route ${routeName}`);\n            } catch (error) {\n              let message;\n\n              if (newRouteCreated) {\n                message = `Failed to transfer ${tripCount} late ${tripCountPlural ? 'trips' : 'trip'} to new route ${routeName}`;\n              } else {\n                switch (error.status) {\n                  case 400:\n                    message = 'There was a problem with one of the fields. Please check over the form and try again.';\n                    break;\n\n                  case 409:\n                    if (error.message === 'Error saving data that must be unique') message = `The route name ${this.get('routeName')} is already taken`;else if (error.message.includes('modified by another request')) message = `UNABLE TO UPDATE ROUTE ${this.get('route.name')}, BECAUSE IT HAS BEEN MODIFIED BY ANOTHER REQUEST.`;else message = error.message;\n                    break;\n\n                  default:\n                    message = 'There was a problem creating the route, please try again.';\n                    break;\n                }\n              }\n\n              notifications.warning(message);\n            } finally {\n              this.get('workspace').requestWootricSurvey('on_rescueRoute');\n              await unlockRouteAction(0);\n              this.send('onCloseClick');\n              tooltip.reset();\n            }\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: async () => {\n            await unlockRouteAction(0);\n            return tooltip.reset();\n          },\n          closeAction: async () => {\n            await unlockRouteAction(0);\n          }\n        });\n      } catch (e) {\n        await unlockRouteAction();\n      }\n    },\n\n    actions: {\n      onChangeTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      onCancel() {\n        this.onCloseClick();\n      },\n\n      onCloseClick() {\n        const tripsTable = this.get('tripsTable');\n\n        if (tripsTable) {\n          const trips = tripsTable.get('rows') || [];\n          trips.forEach(row => {\n            row.set('isChecked', false);\n          });\n        }\n\n        this.onCloseClick();\n      },\n\n      onRouteNameInput(name) {\n        if (!NUMBER_FORMAT.test(name) || name.length > 10) {\n          return this.notifyPropertyChange('routeName');\n        }\n\n        this.set('routeName', name);\n      },\n\n      onSaveClick() {\n        if (!this.isValidEntry()) {\n          return false;\n        }\n\n        this.confirmSave();\n      },\n\n      onRefreshClick() {\n        this.fetchDriversTask.perform();\n        this.fetchVehiclesTask.perform(); // Reset form\n\n        this.setProperties({\n          routeName: null,\n          startTime: null,\n          endTime: null,\n          selectedVehicle: null,\n          selectedDriver: null\n        });\n        this.toggleProperty('refreshFlag');\n        const tripsTable = this.get('tripsTable');\n\n        if (tripsTable) {\n          const trips = tripsTable.get('rows') || [];\n          trips.forEach(row => {\n            row.set('isChecked', false);\n          });\n        } // Set init startTime/endTime on next lifecycle\n\n\n        Ember.run.next(() => {\n          this.setProperties({\n            startTime: (0, _moment.default)().toISOString(),\n            endTime: (0, _moment.default)().endOf('day').toISOString()\n          });\n        });\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const routeName = this.get('routeName');\n        const startTime = this.get('startTime');\n        const endTime = this.get('endTime');\n        const selectedDriver = this.get('selectedDriver'); // save current manual settings\n\n        currentState = {\n          routeName,\n          startTime,\n          endTime,\n          selectedDriver\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onCheckAll() {\n        const tripsTable = this.get('tripsTable');\n        const tripsTableList = tripsTable.get('rows') || [];\n        tripsTableList.forEach(row => {\n          row.set('isChecked', true);\n        });\n      },\n\n      onUncheckAll() {\n        const tripsTable = this.get('tripsTable');\n        const trips = tripsTable.get('rows') || [];\n        trips.forEach(row => {\n          row.set('isChecked', false);\n        });\n      },\n\n      onSelectedVehicle(vehicle) {\n        this.set('selectedVehicle', vehicle);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.tripColumns = _exports.rowComponent = void 0;\n  const rowComponent = 'side-drawer/rescue-route/table/row';\n  _exports.rowComponent = rowComponent;\n  const tripColumns = [{\n    id: 'checkbox',\n    valuePath: 'checked',\n    cellComponent: 'side-drawer/rescue-route/table/cells/check-box',\n    component: 'side-drawer/rescue-route/table/columns/check-box',\n    sortable: false,\n    width: '30px',\n    minResizeWidth: 50\n  }, {\n    label: 'Status',\n    valuePath: 'otp',\n    resizable: true,\n    sortable: false,\n    highlightable: true,\n    minResizeWidth: 50\n  }, {\n    label: 'Trip ID',\n    valuePath: 'tripId',\n    resizable: true,\n    sortable: false,\n    minResizeWidth: 100\n  }, {\n    label: 'Last Name',\n    valuePath: 'rider.lastName',\n    resizable: true,\n    sortable: false,\n    minResizeWidth: 100\n  }, {\n    label: 'Anchor ETA',\n    valuePath: 'anchorStop.stopPoint.etaNavStopPoint.eta',\n    cellComponent: 'table/cells/trip-eta',\n    resizable: true,\n    sortable: false,\n    highlightable: true,\n    minResizeWidth: 75\n  }];\n  _exports.tripColumns = tripColumns;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-cell', 'data-test-table-base-cell'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    tooltipText: Ember.computed('row.isLocked', function () {\n      const isLocked = this.get('row.isLocked');\n\n      if (Ember.isNone(isLocked)) {\n        return null;\n      }\n\n      if (isLocked) {\n        return `Locked by ${this.get('row.lockedBy')}`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'row.isLocked', function () {\n      const tooltipText = this.get('tooltipText');\n      const isLocked = this.get('row.isLocked');\n      return Ember.isPresent(tooltipText) && isLocked;\n    }),\n    tabindex: 0\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3LljNdLg\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",500,\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/cells/check-box/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/rescue-route/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n\n    init() {\n      this._super(...arguments);\n    },\n\n    activeContext: Ember.inject.service(),\n    isChecked: Ember.computed.alias('row.isChecked'),\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/cells/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"u56jR36M\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/rescue-route/table/cells/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/columns/base-column/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-column'],\n    attributeBindings: ['tabindex'],\n    tabindex: 0,\n    isEditing: false,\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/columns/check-box/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-check-box-column'],\n    isChecked: Ember.computed('table.rows.@each.isChecked', function () {\n      const rows = this.get('table.rows'); // it's weird to see checkbox when no records are shown\n\n      if (!rows || rows.length === 0) return false;\n      return rows.isEvery('isChecked');\n    }),\n    actions: {\n      onCheckboxToggle(event) {\n        // these are passed by the generic column widget's template\n        const {\n          checkAll,\n          uncheckAll\n        } = this.get('extra');\n\n        if (event.target.checked && checkAll) {\n          Ember.run.next(checkAll);\n        } else if (uncheckAll) {\n          Ember.run.next(uncheckAll);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/columns/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"SA1QNSDR\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" \\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/rescue-route/table/columns/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/table/row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/text-formatted-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _component.default;\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/rescue-route/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TCFBGbzE\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"rescue-route-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"onShrinkClick\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"canSave\\\",\\\"onCloseClick\\\"],[\\\"Rescue Route\\\",[23,[\\\"componentName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[23,[\\\"hasAllSelectedValues\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Late route: \\\"],[1,[23,[\\\"route\\\",\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L18:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L19:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Add Rescue Route\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message\\\"],[9],[1,[21,\\\"errorMessage\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[12,\\\"value\\\",[21,\\\"routeName\\\"]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRouteNameInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"date\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Type\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[11,\\\"value\\\",\\\"Rescue replacement\\\"],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Set Start Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"date\\\"]],[23,[\\\"startTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"startTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Set End Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"minDate\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,true,[23,[\\\"timePlaceHolder\\\"]],true,[23,[\\\"timeFormat\\\"]],[23,[\\\"minEndTime\\\"]],[23,[\\\"endTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"endTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L74:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Late Trips\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Select one or more late trip(s) to move to new route. Red ETAs indicate late trips that can be rescued.\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"tripsTable\\\"]]],[[\\\"height\\\",\\\"estimatedRowHeight\\\",\\\"occlusion\\\",\\\"extra\\\"],[\\\"200px\\\",23,true,[27,\\\"hash\\\",null,[[\\\"travelNeedCounts\\\",\\\"checkAll\\\",\\\"uncheckAll\\\"],[[23,[\\\"route\\\",\\\"travelNeedCounts\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onCheckAll\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUncheckAll\\\"],null]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L87:C10) \\\"],null]],[[\\\"fixed\\\",\\\"resizeOnDrag\\\"],[true,true]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L91:C11) \\\"],null]],[[\\\"rowComponent\\\",\\\"canSelect\\\",\\\"multiSelect\\\"],[[27,\\\"component\\\",[[23,[\\\"rowComponent\\\"]]],null],false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchTripsTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L98:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchTripsTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L104:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchTripsTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"tripsTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L110:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                No trips found.\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L120:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Driver\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"searchField\\\",\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"onchange\\\"],[\\\"driverId\\\",[23,[\\\"selectedDriver\\\"]],[23,[\\\"availableDrivers\\\"]],[27,\\\"not\\\",[[27,\\\"and\\\",[[23,[\\\"startTime\\\"]],[23,[\\\"endTime\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"selectedDriver\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"driverId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"selectedDriver\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Shift Start\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"driverAvailabilityShiftStart\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Shift End\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"driverAvailabilityShiftEnd\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/rescue-route/template.hbs' @ L151:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Assign Vehicle\\\",true]],{\\\"statements\\\":[[4,\\\"form-components/vehicle-selection\\\",null,[[\\\"dispatchRoute\\\",\\\"extra\\\",\\\"refreshFlag\\\",\\\"onSelectedVehicle\\\",\\\"unselectAssignedVehicle\\\"],[[23,[\\\"dispatchRoute\\\"]],[27,\\\"hash\\\",null,[[\\\"previousSelectedVehicle\\\",\\\"notShowAssignedVehicle\\\"],[[23,[\\\"selectedVehicle\\\"]],true]]],[27,\\\"readonly\\\",[[23,[\\\"refreshFlag\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectedVehicle\\\"],null],true]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/rescue-route/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scatter-chart-settings/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/scatter-chart-settings/config\"], function (_exports, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    workspace: Ember.inject.service(),\n    widget: Ember.computed.readOnly('stackFrame.options.widget'),\n    title: 'Scatter Chart',\n    dataType: null,\n    sourceOptions: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('sourceOptions', _config.default);\n      const dataType = this.get('widget.state.dataType');\n      this.set('dataType', dataType);\n\n      if (Ember.isPresent(dataType)) {// this.set('filterColumns',\n        //   Object.values(dataType.columns).map((col) => new FilterColumn(col)));\n      }\n    },\n\n    actions: {\n      onTypeSelect(dataType) {\n        this.set('dataType', dataType); // this.set('filterColumns',\n        //   Object.values(dataType.columns).map((col) => new FilterColumn(col)));\n\n        this.get('widget').mergeState({\n          dataType\n        });\n      },\n\n      setDisplayOptionVisibility(selected) {\n        try {\n          Ember.run(() => {\n            this.set('dataType.displayOptions.selected', selected); // We don't want to merge properties like `valueCategories`.\n\n            Ember.set(this.get('widget'), 'state.dataType', this.get('dataType'));\n            this.get('widget').notifyPropertyChange('state');\n          });\n        } catch (e) {// Catches API errors, such as missing Mirage route `/travel-needs`\n        }\n      },\n\n      setDisplayOptionMetric(selected) {\n        this.set('dataType.displayOptions.selected.metricOption', selected);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onFilterValueChange(column, index, event) {\n        let filterValues = column.get('filterValues') || [];\n        filterValues = filterValues.slice();\n        filterValues[index] = event.target.value; // Update the displayed filter column.\n\n        Ember.set(column, 'filterValues', filterValues);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterValues`, filterValues);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onSelectFilterType(column, filterType) {\n        // Update the displayed filter column.\n        Ember.set(column, 'filterTypeId', filterType.id);\n        const id = column.get('id'); // Update the column config.\n\n        Ember.set(this.get('dataType'), `columns.${id}.filterTypeId`, filterType.id);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      onTitleInput(data) {\n        this.set('dataType.title', data);\n        this.get('widget').mergeState({\n          dataType: this.get('dataType')\n        });\n      },\n\n      setVisualOptionVisibility(selected, event) {\n        const dataType = this.get('dataType');\n        Ember.set(selected, 'isChecked', event.target.checked);\n        this.get('widget').mergeState({\n          dataType\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scatter-chart-settings/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // const COLUMNS = {\n  //   routeColumns: {\n  //     status: {\n  //       id: 'status',\n  //       config: {\n  //         id: 'status',\n  //         index: 5,\n  //         type: 'text',\n  //         label: 'Status',\n  //         valuePath: 'status',\n  //         editable: true,\n  //         hidden: false,\n  //         format: 'HH:mm A',\n  //         defaultWidth: 75\n  //       },\n  //       filterTypeId: 'stringEq',\n  //       filterValues: ['Scheduled']\n  //     }\n  //   },\n  //   tripColumns: {\n  //     status: {\n  //       id: 'status',\n  //       config: {\n  //         id: 'status',\n  //         index: 5,\n  //         type: 'text',\n  //         label: 'Status',\n  //         valuePath: 'status',\n  //         editable: true,\n  //         hidden: false,\n  //         defaultWidth: 75\n  //       },\n  //       filterTypeId: null,\n  //       filterValues: []\n  //     }\n  //   }\n  // };\n  const VisualOptions = [{\n    id: 'value',\n    name: 'Show Value',\n    isChecked: true\n  }, {\n    id: 'percentage',\n    name: 'Show Percentage',\n    isChecked: false\n  }, {\n    id: 'total',\n    name: 'Show Total',\n    isChecked: true\n  }];\n  var _default = [{\n    name: 'Packets',\n    modelName: 'packet',\n    title: '',\n    visualOptions: VisualOptions\n  }];\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scatter-chart-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ByNjRSu5\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"visualOption\\\",\\\"column\\\",\\\"filterType\\\",\\\"option\\\",\\\"option\\\",\\\"type\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"metrics-widget-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/scatter-chart-settings/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/scatter-chart-settings/template.hbs' @ L10:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-section\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Type:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"sourceOptions\\\"]]],null],[23,[\\\"dataType\\\"]],\\\"Select Type\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onTypeSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Display:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"options\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]],\\\"Select Choice\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionVisibility\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\"]]],null,{\\\"statements\\\":[[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"searchEnabled\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOptions\\\"]]],null],[23,[\\\"dataType\\\",\\\"displayOptions\\\",\\\"selected\\\",\\\"metricOption\\\"]],\\\"Select Metric\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"setDisplayOptionMetric\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,5,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Filter by Status:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content metric-filter-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"filterColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"selected\\\",\\\"searchEnabled\\\",\\\"searchField\\\",\\\"options\\\",\\\"onchange\\\",\\\"disabled\\\"],[[22,3,[\\\"filterType\\\"]],false,\\\"label\\\",[22,3,[\\\"filterTypes\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSelectFilterType\\\",[22,3,[]]],null],[27,\\\"eq\\\",[[22,3,[\\\"filterTypes\\\",\\\"length\\\"]],0],null]]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[22,4,[\\\"label\\\"]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],2],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-filter-input-cont\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"0\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],0],null]],[12,\\\"disabled\\\",[27,\\\"eq\\\",[[22,3,[\\\"filterType\\\",\\\"arity\\\"]],0],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[7,\\\"input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[22,3,[\\\"filterValues\\\",\\\"1\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFilterValueChange\\\",[22,3,[]],1],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-subheader\\\"],[9],[0,\\\"\\\\n        Visuals:\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"metric-drawer-section-content\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\",\\\"enter\\\",\\\"focus-out\\\",\\\"placeholder\\\"],[\\\"text\\\",[27,\\\"readonly\\\",[[23,[\\\"dataType\\\",\\\"title\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onTitleInput\\\"],null],\\\"Widget Title\\\"]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"dataType\\\",\\\"visualOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"side-drawer-checkbox\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[22,2,[\\\"isChecked\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setVisualOptionVisibility\\\",[22,2,[]]],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[28,[[27,\\\"if\\\",[[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],\\\"disabled\\\"],null]]]],[9],[1,[22,2,[\\\"name\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/scatter-chart-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-add-break/component\", [\"exports\", \"adept-iq/utils/unwrapProxy\", \"ember-changeset\", \"moment\", \"ember-concurrency\", \"adept-iq/models/break-type\", \"adept-iq/models/place-category-type\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/pods/components/side-drawer/scheduling-add-break/config\", \"adept-iq/config/environment\"], function (_exports, _unwrapProxy, _emberChangeset, _moment, _emberConcurrency, _breakType, _placeCategoryType, _asyncScheduleOperation, _config, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const extraPlannedDurationOptions = {\n    min: 1\n  };\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    classNames: ['scheduling-add-break-side-drawer'],\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    onShrinkClick: null,\n    onCloseClick: null,\n    currentState: null,\n    route: Ember.computed.readOnly('stackFrame.options.route'),\n    extraPlannedDurationOptions,\n    displayName: Ember.computed.alias('stackFrame.options.displayName'),\n    isEditMode: Ember.computed.alias('stackFrame.options.isEditMode'),\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    breakTypes: null,\n    fields: _config.fields,\n    isFloatingBreakType: Ember.computed.equal('routeBreakChangeSet.breakType.name', _breakType.FLOATING_BREAK),\n    isFixedBreakType: Ember.computed.equal('routeBreakChangeSet.breakType.name', _breakType.FIXED_BREAK),\n    routeBreakChangeSet: Ember.computed('route', function () {\n      const route = this.get('route');\n      const isEditMode = this.get('isEditMode');\n\n      if (isEditMode) {\n        return this.setEditingProperties(route);\n      }\n\n      return this.setDefaultProperties(route);\n    }),\n    showClearButton: Ember.computed('routeBreakChangeSet.requestTime', function () {\n      const requestTime = (0, _moment.default)(this.get('routeBreakChangeSet.requestTime'));\n      return requestTime.isValid();\n    }),\n    calcEndTime: Ember.computed('routeBreakChangeSet.{requestTime,plannedDuration}', function () {\n      const requestTime = this.get('routeBreakChangeSet.requestTime');\n      const plannedDuration = parseInt(this.get('routeBreakChangeSet.plannedDuration'), 10) || 0;\n      const calcEndTime = new Date(requestTime);\n\n      if (Ember.isEmpty(requestTime)) {\n        return null;\n      }\n\n      calcEndTime.setMinutes(requestTime.getMinutes() + plannedDuration);\n      return calcEndTime;\n    }),\n    plannedDurationSeconds: Ember.computed('routeBreakChangeSet.plannedDuration', function () {\n      const plannedDuration = this.get('routeBreakChangeSet.plannedDuration') ? this.get('routeBreakChangeSet.plannedDuration') : '0'; //convert plannedDuration into seconds.Payload request except  plannedDuration in seconds\n\n      return Math.floor(plannedDuration * 60);\n    }),\n    projectedEndDate: Ember.computed('routeBreakChangeSet.{plannedDuration,requestTime}', function () {\n      const plannedDuration = this.get('routeBreakChangeSet.plannedDuration') ? this.get('routeBreakChangeSet.plannedDuration') : '0';\n      const requestTime = this.get('routeBreakChangeSet.requestTime');\n      if (!requestTime) return;\n      const requestTimeMoment = (0, _moment.default)(requestTime);\n      const estimatedEndMoment = requestTimeMoment.clone();\n      return estimatedEndMoment.add(parseInt(plannedDuration, 10), 'minutes').toDate();\n    }),\n    canSave: Ember.computed('routeBreakChangeSet.{plannedDuration,requestTime,notes,breakType,place.address}', function () {\n      const isEditMode = this.get('isEditMode');\n      if (!isEditMode) return true;\n      const record = this.get('routeBreakChangeSet');\n      const {\n        isChangesHappened\n      } = this.createChangeValueRecord(record);\n      return isChangesHappened;\n    }),\n\n    orderedStopsWithGaragesAndBreaks(route) {\n      const routeBreaks = route.get('routeBreaks').toArray();\n      const orderedStops = route.get('tripStops').map(tripStop => {\n        return {\n          id: tripStop.get('id'),\n          stopStartTime: (0, _moment.default)(tripStop.get('plannedEta')),\n          type: 'stop',\n          stopType: tripStop.get('stopType'),\n          slack: tripStop.get('plannedSlackTime'),\n          ordinal: tripStop.get('plannedRouteOrdinal')\n        };\n      });\n      routeBreaks.forEach(routeBreak => {\n        orderedStops.push({\n          id: routeBreak.get('id'),\n          stopStartTime: (0, _moment.default)(routeBreak.get('estimatedStart')),\n          type: 'break',\n          stopType: 'pick',\n          slack: 0,\n          ordinal: routeBreak.get('plannedRouteOrdinal')\n        });\n        orderedStops.push({\n          id: routeBreak.get('id'),\n          stopStartTime: (0, _moment.default)(routeBreak.get('estimatedEnd')),\n          type: 'break',\n          stopType: 'drop',\n          slack: routeBreak.get('plannedSlackTime'),\n          ordinal: routeBreak.get('plannedRouteOrdinal') + 1\n        });\n      });\n      const stopOrdinals = orderedStops.map(stop => {\n        return stop.ordinal;\n      });\n      const maxOrdinal = Math.max(...stopOrdinals); // Rotue start and end time\n\n      orderedStops.push({\n        stopStartTime: (0, _moment.default)(route.get('plannedStartTime')),\n        type: 'garage',\n        stopType: 'start',\n        slack: route.get('plannedSlackTime'),\n        ordinal: 0\n      });\n      orderedStops.push({\n        stopStartTime: (0, _moment.default)(route.get('plannedEndTime')),\n        type: 'garage',\n        stopType: 'end',\n        slack: 0,\n        ordinal: maxOrdinal + 1\n      });\n      const sortedOrderedStops = orderedStops.sort((a, b) => {\n        // sort by ordinal\n        if (a.ordinal < b.ordinal) {\n          return -1;\n        }\n\n        if (a.ordinal > b.ordinal) {\n          return 1;\n        }\n\n        return 0;\n      });\n      sortedOrderedStops.map((stop, index) => {\n        stop.ordinal = index;\n      });\n      return sortedOrderedStops;\n    },\n\n    findNewBreakRoutePosition(route) {\n      const isEditMode = this.get('isEditMode');\n      const currentTime = (0, _moment.default)();\n      const routePlannedStartTimeMoment = (0, _moment.default)(route.get('plannedStartTime'));\n      const routePlannedStartTime = routePlannedStartTimeMoment.isAfter(currentTime) ? routePlannedStartTimeMoment : currentTime;\n      const routeplannedEndTime = (0, _moment.default)(route.get('plannedEndTime'));\n      const estimatedStartTime = (0, _moment.default)(this.get('routeBreakChangeSet.requestTime'));\n      const estimatedEndTime = (0, _moment.default)(this.get('projectedEndDate'));\n      const routeBreakId = this.get('routeBreakChangeSet.id');\n      const orderedStopsWithGaragesAndBreaks = this.get('orderedStopsWithGaragesAndBreaks')(route) || [];\n      const lastIndex = orderedStopsWithGaragesAndBreaks.length - 1;\n      const originalPlannedDuration = this.get('routeBreakChangeSet.data.plannedDuration');\n      const currentBreakPlannedDuration = originalPlannedDuration ? parseInt(originalPlannedDuration, 10) : 0;\n\n      if (Ember.isEmpty(orderedStopsWithGaragesAndBreaks)) {\n        return 1;\n      }\n\n      let routeOrdinal = -1;\n      let onBoardCount = 0;\n      orderedStopsWithGaragesAndBreaks.forEach((currentStop, currentIndex) => {\n        const isLastStop = currentIndex === lastIndex;\n        const isFirstStop = currentIndex === 0;\n        const stopStartTime = currentStop.stopStartTime.startOf('minute');\n        const nextIndex = currentIndex < lastIndex ? currentIndex + 1 : 0;\n        const nextStop = nextIndex > 0 ? orderedStopsWithGaragesAndBreaks[nextIndex] : null;\n        const additionalSlack = isEditMode && Ember.isPresent(nextStop) && routeBreakId === nextStop.id ? currentBreakPlannedDuration : 0; // if break end time is before the first stop\n\n        if (isFirstStop) {\n          if (estimatedEndTime.isBefore(stopStartTime) && estimatedStartTime.isAfter(routePlannedStartTime)) {\n            routeOrdinal = 1;\n          }\n        } // continue if we have not found a spot\n\n\n        if (routeOrdinal === -1) {\n          if (isLastStop) {\n            // if it is the last stop and requested time is after the current stop\n            if (estimatedStartTime.isAfter(stopStartTime) && estimatedEndTime.isBefore(routeplannedEndTime)) {\n              routeOrdinal = currentStop.routeOrdinal + 1;\n            }\n          } else {\n            if (currentStop.stopType === 'pick') {\n              onBoardCount++;\n            }\n\n            if (currentStop.stopType === 'drop') {\n              onBoardCount--;\n            }\n\n            const slack = currentStop.slack + additionalSlack;\n            const stopEndTime = stopStartTime.clone().add(slack, 'minutes').startOf('second'); // if there are no passenger on board and the break range fits between\n            // the current stop and the next\n\n            if (onBoardCount === 0 && estimatedStartTime.isSameOrAfter(stopStartTime) && estimatedStartTime.isSameOrBefore(stopEndTime) && estimatedEndTime.isSameOrAfter(stopStartTime) && estimatedEndTime.isSameOrBefore(stopEndTime)) {\n              routeOrdinal = currentStop.ordinal + 1;\n            }\n          }\n        }\n      });\n      return routeOrdinal;\n    },\n\n    isValidateDriverBreak() {\n      const errors = [];\n      const breakTypeName = this.get('routeBreakChangeSet.breakType.name');\n      const location = (0, _unwrapProxy.unwrapProxy)(this.get('routeBreakChangeSet.place.location'));\n      const plannedDuration = this.get('routeBreakChangeSet.plannedDuration');\n      const requestTime = (0, _moment.default)(this.get('routeBreakChangeSet.requestTime'));\n      const routePlannedStartTime = (0, _moment.default)(this.get('routeBreakChangeSet.route.plannedStartTime'));\n      const routeActualEndTime = (0, _moment.default)(this.get('routeBreakChangeSet.route.plannedEndTime'));\n      const route = (0, _unwrapProxy.unwrapProxy)(this.get('routeBreakChangeSet.route'));\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes\n\n      const routeBreakChangeSet = this.get('routeBreakChangeSet');\n      const isEditMode = this.get('isEditMode');\n      const breakMessage = isEditMode ? 'edit break' : 'add break';\n\n      if (!plannedDuration) {\n        errors.push('Duration is Required');\n      }\n\n      if (!requestTime.isValid()) {\n        errors.push('Start Time is required');\n      }\n\n      if (!breakTypeName) {\n        errors.push('Break type is required');\n      }\n\n      let changeSetRequestTime = requestTime;\n      let changeSetPlannedDuration = plannedDuration;\n      let changeSetBreakType = routeBreakChangeSet.get('breakType');\n\n      if (isEditMode) {\n        ({\n          changeSetRequestTime,\n          changeSetPlannedDuration,\n          changeSetBreakType\n        } = this.createChangeValueRecord(routeBreakChangeSet));\n      }\n\n      const routeOrdinal = !changeSetRequestTime && !changeSetPlannedDuration ? 0 : this.get('findNewBreakRoutePosition').bind(this)(route);\n\n      if (routeOrdinal === -1) {\n        errors.push(`Cannot ${breakMessage}. Ensure no trip overlap and sufficient slack time.`);\n      }\n\n      if (breakTypeName && breakTypeName === _breakType.FIXED_BREAK && (!location || Ember.isEmpty(location.get('lat'))) && changeSetBreakType) {\n        errors.push('Address for fixed break is required');\n      }\n\n      if (requestTime.isValid() && requestTime.isBefore(routePlannedStartTime) && changeSetRequestTime) {\n        errors.push('Break start time must be after the route\\'s planned start time.');\n      }\n\n      if (requestTime.isAfter(routeActualEndTime) && changeSetRequestTime) {\n        errors.push('Break end time must be before the route\\'s actual end time.');\n      }\n\n      if (plannedDuration > routeMaxExtension && changeSetPlannedDuration) {\n        errors.push(`Duration exceeds the route end time beyond max route extension (${routeMaxExtension})`);\n      }\n\n      this.set('errors', errors);\n      return !errors.length;\n    },\n\n    didInsertElement() {\n      const breakTypes = this.get('store').peekAll('break-type');\n      this.set('breakTypes', breakTypes); // side panel width for add-break\n\n      this.setSideDrawerWidth('600px');\n      this.loadCurrentState();\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n      const routeBreakChangeSet = this.get('routeBreakChangeSet');\n\n      if (currentState) {\n        routeBreakChangeSet.set('breakType', currentState.breakType);\n        routeBreakChangeSet.set('place', currentState.place);\n        routeBreakChangeSet.set('place.address', currentState.address);\n        routeBreakChangeSet.set('place.location', currentState.location);\n        routeBreakChangeSet.set('requestTime', currentState.requestTime);\n        routeBreakChangeSet.set('plannedDuration', currentState.plannedDuration);\n        routeBreakChangeSet.set('notes', currentState.notes);\n        routeBreakChangeSet.execute();\n      }\n    },\n\n    //set default requested time is 5 minutes greater than  plannedStartTime\n    getRequestedTime(plannedStartTime) {\n      const year = plannedStartTime.getFullYear();\n      const month = plannedStartTime.getMonth();\n      const day = plannedStartTime.getDate();\n      const hours = plannedStartTime.getHours();\n      const minutes = plannedStartTime.getMinutes() + 5;\n      const seconds = plannedStartTime.getSeconds();\n      return new Date(year, month, day, hours, minutes, seconds);\n    },\n\n    setDefaultProperties(record) {\n      const trips = (0, _unwrapProxy.unwrapProxy)(record.get('trips'));\n      const routeBreaks = (0, _unwrapProxy.unwrapProxy)(record.get('routeBreaks'));\n      const plannedDuration = 15;\n      const requestTime = this.getRequestedTime(record.get('plannedStartTime'));\n      const floatingBreakType = this.get('store').peekAll('break-type').findBy('id', _breakType.FLOATING_BREAK);\n      const tripStops = trips.reduce((arr, trip) => {\n        const stops = trip.get('stops');\n        stops.forEach(stop => arr.push(stop));\n        return arr;\n      }, []);\n      let lastStop = tripStops.sortBy('plannedRouteOrdinal').get('lastObject'); // if no-trip-stop is present find a last route-break by plannedRouteOrdinal\n\n      if (!lastStop) {\n        lastStop = routeBreaks.sortBy('plannedRouteOrdinal').get('lastObject');\n      }\n\n      const driverBreak = Ember.Object.create({\n        estimatedStart: new Date(),\n        estimatedEnd: new Date(),\n        requestTime,\n        route: record,\n        schedule: record.get('schedule'),\n        notes: '',\n        plannedDuration: plannedDuration,\n        promisedStart: new Date(),\n        place: null,\n        breakType: floatingBreakType,\n        plannedRouteOrdinal: lastStop ? lastStop.get('plannedRouteOrdinal') + 1 : 1,\n        state: 'planned',\n        status: 'scheduled'\n      });\n      const placeModel = this.getDefaultPlaceModel();\n      driverBreak.set('place', placeModel);\n      this.set('pendingRecord', driverBreak);\n      const pendingRecord = this.get('pendingRecord');\n      return new _emberChangeset.default(pendingRecord);\n    },\n\n    setEditingProperties(record) {\n      const placeModel = record.get('place.id') ? (0, _unwrapProxy.unwrapProxy)(record.get('place')) : this.getDefaultPlaceModel();\n      record.set('place', placeModel);\n      return new _emberChangeset.default(record);\n    },\n\n    routeBreakAsync: (0, _emberConcurrency.task)(function* (fixedRouteBreakInfo) {\n      const isEditMode = this.get('isEditMode');\n      const routeBreakChangeSet = this.get('routeBreakChangeSet');\n      const route = (0, _unwrapProxy.unwrapProxy)(routeBreakChangeSet.get('route'));\n      const routeBreakId = (0, _unwrapProxy.unwrapProxy)(routeBreakChangeSet.get('id'));\n      const schedule = (0, _unwrapProxy.unwrapProxy)(routeBreakChangeSet.get('route.schedule'));\n      const scheduleId = parseInt(schedule.get('id'), 10);\n      const destinationRouteId = parseInt(route.get('id'), 10);\n      let requestTime = (0, _moment.default)(routeBreakChangeSet.get('requestTime'));\n      let plannedDuration = routeBreakChangeSet.get('plannedDurationSeconds');\n      let notes = routeBreakChangeSet.get('notes');\n\n      if (isEditMode) {\n        ({\n          changeSetRequestTime: requestTime,\n          changeSetPlannedDuration: plannedDuration,\n          changeSetNotes: notes\n        } = this.createChangeValueRecord(routeBreakChangeSet));\n      }\n\n      let result;\n      let operation = 'addBreak';\n\n      try {\n        const operationData = {\n          scheduleId,\n          destinationRouteId,\n          break: {\n            requestTime: requestTime,\n            plannedDuration,\n            notes\n          }\n        };\n\n        if (isEditMode) {\n          delete operationData.destinationRouteId;\n          operationData.break.id = routeBreakId;\n          operation = 'editBreak';\n        } // NYAAR-19922: we need to send value of breakStop if the breakType is fixed (for edit payload), orElse the breakType is stroed as floating\n\n\n        if (this.get('isFixedBreakType')) {\n          operationData.break.breakStop = {\n            'placeId': fixedRouteBreakInfo.placeId,\n            xyCoord: {\n              x: fixedRouteBreakInfo.lat,\n              y: fixedRouteBreakInfo.lng\n            },\n            geoNode: fixedRouteBreakInfo.geoNode\n          };\n        }\n\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, operation, options);\n\n        if (!result) {\n          throw new Error('Unable to insert break.');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    getDefaultPlaceModel() {\n      const store = this.get('store');\n      const locationModel = store.createRecord('location');\n      const addressModel = store.createRecord('address', {\n        locations: [locationModel]\n      });\n      const placeModel = store.createRecord('place', {\n        address: addressModel,\n        location: locationModel\n      });\n      return placeModel;\n    },\n\n    validateBreakTime() {\n      const tooltip = this.get('tooltip');\n      const workspace = this.get('workspace');\n      const routeBreakChangeSet = this.get('routeBreakChangeSet');\n      const route = (0, _unwrapProxy.unwrapProxy)(routeBreakChangeSet.get('route'));\n      const trips = route.get('trips').map(t => t).sort((a, b) => a.get('drop.plannedEta') - b.get('drop.plannedEta'));\n      const breakStartTime = (0, _moment.default)(routeBreakChangeSet.get('requestTime'));\n      const isFloatingBreakType = this.get('isFloatingBreakType');\n      const isBreakInMiddleOfTrip = workspace.get('isBreakInMiddleOfTrip').bind(workspace);\n      const isValidBreakTime = workspace.get('isValidBreakTime').bind(workspace);\n      const breakEndTime = (0, _moment.default)(this.get('projectedEndDate'));\n      const isEditMode = this.get('isEditMode');\n      const breakMessage = isEditMode ? 'Editing the break' : 'Adding the break';\n      let changeSetRequestTime = breakStartTime;\n      let changeSetPlannedDuration = routeBreakChangeSet.get('plannedDurationSeconds');\n\n      if (isEditMode) {\n        ({\n          changeSetRequestTime,\n          changeSetPlannedDuration\n        } = this.createChangeValueRecord(routeBreakChangeSet));\n      }\n\n      const breakMiddleInfo = {\n        trips: trips,\n        breakTime: breakStartTime,\n        pickKey: 'pick',\n        dropKey: 'drop',\n        plannedEta: 'plannedEta'\n      };\n      this.set('invalidRequestTime', false);\n\n      if (changeSetRequestTime) {\n        if (isBreakInMiddleOfTrip(breakMiddleInfo)) {\n          tooltip.pushConfirmation({\n            tip: `Unable to save. ${breakMessage} will place the break in the middle of a trip.`,\n            title: isEditMode ? 'Edit Driver Break' : 'Add Driver Break',\n            primaryActionText: 'OK',\n            hasOverlay: true,\n            primaryAction: () => {\n              tooltip.reset();\n            }\n          });\n          this.set('invalidRequestTime', true);\n          return false;\n        }\n      }\n\n      if (!changeSetPlannedDuration) return true;\n      const breakTimeInfo = {\n        trips: trips,\n        breakEndTime,\n        pickKey: 'pick',\n        dropKey: 'drop',\n        plannedEta: 'plannedEta',\n        nextTravelTime: 'plannedTravelTimeToNext'\n      };\n\n      if (isFloatingBreakType && !isValidBreakTime(breakTimeInfo)) {\n        tooltip.pushConfirmation({\n          tip: `Unable to save. ${breakMessage} results in not enough time to travel from break to the next stop.`,\n          title: isEditMode ? 'Edit Driver Break' : 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      breakMiddleInfo.breakTime = breakEndTime;\n\n      if (isBreakInMiddleOfTrip(breakMiddleInfo)) {\n        tooltip.pushConfirmation({\n          tip: 'Unable to save. The break\\'s end time will extend past the ETA of the stop after the break',\n          title: isEditMode ? 'Edit Driver Break' : 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      return true;\n    },\n\n    async validateBreakPlace() {\n      const workspace = this.get('workspace');\n      const tooltip = this.get('tooltip');\n      const routeBreakChangeSet = this.get('routeBreakChangeSet');\n      const route = (0, _unwrapProxy.unwrapProxy)(routeBreakChangeSet.get('route'));\n      const trips = route.get('trips').map(t => t).sort((a, b) => a.get('drop.plannedEta') - b.get('drop.plannedEta'));\n      const breakEndTime = (0, _moment.default)(this.get('projectedEndDate'));\n      const validaBreakPlace = workspace.get('validaBreakPlace').bind(workspace);\n      const breakPlace = routeBreakChangeSet.get('place');\n      const isEditMode = this.get('isEditMode');\n      const breakMessage = isEditMode ? 'Editing the break' : 'Adding the break';\n\n      if (isEditMode) {\n        const {\n          changeSetFreeFormAddress\n        } = this.createChangeValueRecord(routeBreakChangeSet);\n        if (!changeSetFreeFormAddress) return true;\n      }\n\n      const breakTimeInfo = {\n        trips: trips,\n        breakEndTime,\n        pickKey: 'pick',\n        dropKey: 'drop',\n        plannedEta: 'plannedEta',\n        breakPlace\n      };\n      const isValidBreakPlace = await validaBreakPlace(breakTimeInfo);\n      this.set('invalidRequestTime', false);\n\n      if (!isValidBreakPlace) {\n        tooltip.pushConfirmation({\n          tip: `Unable to save. ${breakMessage} results in not enough time to travel from break to the next stop.`,\n          title: isEditMode ? 'Edit Driver Break' : 'Add Driver Break',\n          primaryActionText: 'OK',\n          hasOverlay: true,\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        this.set('invalidRequestTime', true);\n        return false;\n      }\n\n      return true;\n    },\n\n    /**\n     * NYAAR-19922: creating the object of values which are changed during editing\n     * @param {*Object} record\n     * @returns {Object}\n     */\n    createChangeValueRecord(record) {\n      const changedRouteBreakValue = {};\n      const changedValuesInRecord = (0, _unwrapProxy.unwrapProxy)(record.changes);\n      changedValuesInRecord.forEach(routeBreak => {\n        changedRouteBreakValue[routeBreak.key] = routeBreak.value;\n      });\n      const changeSetRequestTime = changedRouteBreakValue.requestTime ? (0, _moment.default)(changedRouteBreakValue.requestTime).format() : changedRouteBreakValue.requestTime;\n      const changeSetPlannedDuration = changedRouteBreakValue.plannedDurationSeconds;\n      const changeSetNotes = changedRouteBreakValue.notes;\n      const changeSetBreakType = changedRouteBreakValue.breakType;\n      const changeSetFreeFormAddress = changedRouteBreakValue['place.address.freeformAddress'];\n      const isChangesHappened = !!changedValuesInRecord.length;\n      return {\n        changeSetRequestTime,\n        changeSetPlannedDuration,\n        changeSetNotes,\n        changeSetBreakType,\n        changeSetFreeFormAddress,\n        isChangesHappened\n      };\n    },\n\n    //for resetting the break address marker\n    resetMarker() {\n      const activePickMarker = this.get('geocode.activePickMarker');\n\n      if (activePickMarker) {\n        activePickMarker.remove();\n        this.set('geocode.activePickMarker', null);\n      }\n    },\n\n    actions: {\n      onBreakTypeChange(val) {\n        Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n        const record = this.get('routeBreakChangeSet');\n        record.set('breakType', val);\n        const routeBreakType = val.name;\n\n        if (routeBreakType === _breakType.FLOATING_BREAK) {\n          Ember.$('.leaflet-marker-pane img').remove();\n          const placeModel = this.getDefaultPlaceModel();\n          record.set('place', placeModel);\n          record.execute();\n        }\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        record.set(`${valuePath}.${options.valuePath}`, value);\n        record.execute();\n      },\n\n      onChangeTime(record, valuePath, value) {\n        const momentTime = (0, _moment.default)(value);\n        const dateValue = momentTime.isValid() ? momentTime.toDate() : null;\n        record.set(valuePath, dateValue);\n      },\n\n      onRefreshButtonClick() {\n        const routeBreakChangeSet = this.get('routeBreakChangeSet');\n        const placeModel = this.getDefaultPlaceModel();\n        const floatingBreakType = this.get('store').peekAll('break-type').findBy('id', _breakType.FLOATING_BREAK);\n        const requestTime = this.getRequestedTime(routeBreakChangeSet.get('route.plannedStartTime'));\n        routeBreakChangeSet.set('breakType', floatingBreakType);\n        routeBreakChangeSet.set('place', placeModel);\n        routeBreakChangeSet.set('requestTime', requestTime);\n        routeBreakChangeSet.set('plannedDuration', 15);\n        routeBreakChangeSet.set('notes', null);\n        this.isValidateDriverBreak();\n        routeBreakChangeSet.execute();\n        this.resetMarker();\n      },\n\n      async onSaveClick() {\n        const coreEntityPopulator = this.get('coreEntityPopulator');\n        const store = this.get('store');\n        const record = this.get('routeBreakChangeSet');\n        const requestTime = record.get('requestTime');\n        const plannedDurationSeconds = this.get('plannedDurationSeconds');\n        const estimatedEnd = this.get('projectedEndDate');\n        const notifications = this.get('notifications');\n        const tooltip = this.get('tooltip');\n        const routeBreakAsync = this.get('routeBreakAsync');\n        const isFixedBreakType = this.get('isFixedBreakType');\n        const onCloseClick = this.get('onCloseClick');\n        const refreshTableContent = this.get('activeContext.topActiveContext').get('refreshTableContent');\n        const fixedRouteBreakInfo = {};\n        const isEditMode = this.get('isEditMode');\n        const routeId = this.get('route.id');\n        let message = '';\n        if (!this.isValidateDriverBreak() || !this.validateBreakTime()) return;\n        const isValidBreakPlace = this.get('isFixedBreakType') ? await this.validateBreakPlace() : true;\n        if (isFixedBreakType && !isValidBreakPlace) return;\n        record.set('plannedDurationSeconds', plannedDurationSeconds);\n        record.set('estimatedStart', requestTime);\n        record.set('estimatedEnd', estimatedEnd);\n        const place = (0, _unwrapProxy.unwrapProxy)(record.get('place'));\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        const placeCategoryType = store.peekRecord('place-category-type', _placeCategoryType.PASSENGER_PLACE_CATEGORY_TYPE);\n        place.set('placeCategoryType', placeCategoryType);\n\n        if (isFixedBreakType) {\n          try {\n            await location.save();\n            await address.save();\n            await place.save();\n          } catch (e) {\n            console.error(e); //eslint-disable-line\n          }\n\n          fixedRouteBreakInfo.placeId = parseInt(place.id, 10);\n          fixedRouteBreakInfo.lat = location.get('lat');\n          fixedRouteBreakInfo.lng = location.get('lng');\n          fixedRouteBreakInfo.geoNode = parseInt(location.get('geoNode'), 10);\n        }\n\n        return tooltip.pushConfirmation({\n          tip: 'Would you like to commit your changes?',\n          title: isEditMode ? 'Edit Break' : 'Add Break',\n          primaryActionText: 'Commit',\n          primaryAction: () => {\n            return routeBreakAsync.perform(fixedRouteBreakInfo).then(() => {\n              message = `Break successfully added to route ${record.get('route.name')}`;\n              if (isEditMode) message = 'SUCCESSFULLY EDITED DRIVER BREAK';\n              notifications.success(message);\n              onCloseClick();\n              Ember.run.later(this, function () {\n                coreEntityPopulator.populateRtsRoute(routeId);\n                Ember.run.later(this, function () {\n                  this.get('workspaceContext').manualReloadContext();\n                }, 3000);\n              }, 3000);\n              refreshTableContent.perform(['route', 'route-break']);\n            }).catch(() => {\n              message = `Break failed to be added to route ${record.get('route.name')}`;\n              if (isEditMode) message = 'FAILED TO EDIT DRIVER BREAK';\n              notifications.warning(message);\n            }).finally(() => {\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n      },\n\n      onDurationChange(path, value) {\n        this.set(path, value);\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const record = this.get('routeBreakChangeSet');\n        const breakType = record.get('breakType');\n        const place = (0, _unwrapProxy.unwrapProxy)(record.get('place'));\n        const address = (0, _unwrapProxy.unwrapProxy)(record.get('place.address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(record.get('place.location'));\n        const requestTime = record.get('requestTime');\n        const plannedDuration = record.get('plannedDuration');\n        const notes = record.get('notes'); // save current manual settings\n\n        currentState = {\n          breakType,\n          place,\n          address,\n          location,\n          requestTime,\n          plannedDuration,\n          notes\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-add-break/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.fields = void 0;\n  const fields = {\n    id: 'destinationaddresses',\n    type: 'addresses',\n    valuePath: 'place',\n    modelName: 'place',\n    extra: {\n      aliasPath: 'address.alias',\n      notesPath: 'address.notes',\n      premisePath: 'address.premise',\n      streetNumberPath: 'address.streetNumber',\n      streetNamePath: 'address.streetName',\n      localityPath: 'address.locality',\n      regionPath: 'address.region',\n      subRegionPath: 'address.county',\n      postalCodePath: 'address.postalCode',\n      countryPath: 'address.country',\n      freeformAddressPath: 'address.freeformAddress',\n      tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.streetAddress'\n    }\n  };\n  _exports.fields = fields;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-add-break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"JmcKaypG\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"option\\\",\\\"error\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"add-break-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/scheduling-add-break/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[\\\"Add Driver Break\\\",[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/scheduling-add-break/template.hbs' @ L13:C6) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"add-break-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger m-2\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Errors\\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"ul\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"li\\\"],[9],[1,[22,3,[]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-add-break/template.hbs' @ L26:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Break Information\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n              Route Name:\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"routeBreakChangeSet\\\",\\\"route\\\",\\\"name\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n              Vehicle ID:\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"routeBreakChangeSet\\\",\\\"route\\\",\\\"vehicle\\\",\\\"name\\\"]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n              Route Planned Start Time:\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"moment-format\\\",[[23,[\\\"routeBreakChangeSet\\\",\\\"route\\\",\\\"plannedStartTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row m-0\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-5\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n              Route Planned End Time:\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-info-label\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"moment-format\\\",[[23,[\\\"routeBreakChangeSet\\\",\\\"route\\\",\\\"plannedEndTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-add-break/template.hbs' @ L79:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Break\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-0 mr-0 mb-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-type-info-label\\\"],[9],[0,\\\"\\\\n            Type\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchField\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"breakTypes\\\"]],\\\"name\\\",[23,[\\\"routeBreakChangeSet\\\",\\\"breakType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onBreakTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,2,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-0 mr-0 mb-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-type-info-label\\\"],[9],[0,\\\"\\\\n            Address\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isFloatingBreakType\\\"]]],null,{\\\"statements\\\":[[0,\\\"             \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\"],[\\\"text\\\",\\\"true\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"field\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"format\\\",\\\"extra\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"routeBreakChangeSet\\\",\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"routeBreakChangeSet\\\"]],[23,[\\\"fields\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"routeBreakChangeSet\\\",\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"extra\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"routeBreakChangeSet\\\"]],[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-0 mr-0 mb-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-type-info-label\\\"],[9],[0,\\\"\\\\n            Start Time\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-7 \\\",[27,\\\"if\\\",[[23,[\\\"showClearButton\\\"]],\\\"\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"placeholder\\\",\\\"format\\\",\\\"showClearButton\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[23,[\\\"invalidRequestTime\\\"]],\\\"error\\\"],null],true,false,\\\"HH:MM\\\",[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[23,[\\\"showClearButton\\\"]],[23,[\\\"routeBreakChangeSet\\\",\\\"requestTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",[23,[\\\"routeBreakChangeSet\\\"]],\\\"requestTime\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-0 mr-0 mb-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-type-info-label\\\"],[9],[0,\\\"\\\\n            Duration\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"extra\\\",\\\"placeholder\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"extraPlannedDurationOptions\\\"]],\\\"Time in minutes\\\",[23,[\\\"routeBreakChangeSet\\\",\\\"plannedDuration\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDurationChange\\\",\\\"routeBreakChangeSet.plannedDuration\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-0 mr-0 mb-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-type-info-label\\\"],[9],[0,\\\"\\\\n            End Time\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"placeholder\\\",\\\"format\\\",\\\"disabled\\\",\\\"value\\\"],[true,false,true,\\\"HH:MM\\\",[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],true,[23,[\\\"calcEndTime\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row ml-0 mr-0 mb-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-2 offset-1\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"break-type-info-label\\\"],[9],[0,\\\"\\\\n            Description\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-7\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"value\\\"],[\\\"Optional\\\",[23,[\\\"routeBreakChangeSet\\\",\\\"notes\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Inserting the driver break will result in the route \\\"],[1,[23,[\\\"routeBreakChangeSet\\\",\\\"route\\\",\\\"name\\\"]],false],[0,\\\" gaining a total of \\\"],[1,[23,[\\\"routeBreakChangeSet\\\",\\\"plannedDuration\\\"]],false],[0,\\\" minutes\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/scheduling-add-break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/component\", [\"exports\", \"ember-light-table\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"lodash\", \"adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/config\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/mixins/table-row-value\", \"adept-iq/models/stop-point\", \"adept-iq/config/environment\"], function (_exports, _emberLightTable, _emberConcurrency, _unwrapProxy, _lodash, _config, _asyncScheduleOperation, _tableRowValue, _stopPoint, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROUTE_INCLUDES = ['trips', 'trips.pick', 'trips.pick.segmentStop', 'trips.pick.segmentStop.place', 'trips.pick.segmentStop.place.address', 'trips.drop', 'trips.drop.segmentStop', 'trips.drop.segmentStop.place', 'trips.drop.segmentStop.place.address', 'trips.segment', 'trips.segment.leg', 'trips.segment.leg.rider', 'routeBreaks', 'trips.pick.trip', 'trips.drop.trip', 'vehicle'];\n  const HALF_SEC_DELAY = 500;\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, _tableRowValue.default, {\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // passed by the side drawer container component\n    onCloseClick: null,\n    solutionImpactTable: null,\n    rowComponent: 'table/rows/colored-row',\n    title: 'Trip Rescheduled',\n    previouslyTriedRoutes: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    //passed  by the workspace service\n    trip: Ember.computed.readOnly('stackFrame.options.trip'),\n    status: Ember.computed.readOnly('stackFrame.options.status'),\n    isWaitlisted: Ember.computed.readOnly('stackFrame.options.isWaitlistedTripScheduled'),\n    isUnScheduledTrip: Ember.computed.readOnly('stackFrame.options.isUnscheduledTripScheduled'),\n    isTaxiTravelMode: Ember.computed.readOnly('stackFrame.options.isTaxiTravelMode'),\n    originalRouteId: Ember.computed.readOnly('stackFrame.options.originalRouteId'),\n    originalRouteName: Ember.computed.readOnly('stackFrame.options.originalRouteName'),\n    isFailure: Ember.computed.equal('status', 'failure'),\n    isSuccess: Ember.computed.equal('status', 'success'),\n    rescheduleTrip: null,\n    timeout: 1000,\n    isWaitListedTrip: Ember.computed.readOnly('trip.isWaitlisted'),\n    isOriginalRouteRunning: Ember.computed.readOnly('originalRouteTrip.isRunning'),\n    isRetryRouteRunning: Ember.computed.readOnly('retryTrip.isRunning'),\n    isWaitListTripRunning: Ember.computed.readOnly('waitListTrip.isRunning'),\n    isOriginalRoutePerformed: false,\n    isDisabledOriginalRouteBtn: Ember.computed('isWaitlisted', 'isUnScheduledTrip', 'isOriginalRouteRunning', 'isFailure', 'isOriginalRoutePerformed', 'isTaxiTravelMode', function () {\n      return this.get('isUnScheduledTrip') || this.get('isWaitlisted') || this.get('isOriginalRouteRunning') || this.get('isFailure') || this.get('isOriginalRoutePerformed') || this.get('isTaxiTravelMode');\n    }),\n    isDisabledRetryBtn: Ember.computed('isFailure', 'isRetryRouteRunning', function () {\n      return this.get('isFailure') || this.get('isRetryRouteRunning');\n    }),\n    tripId: Ember.computed('isFailure', 'rescheduleTrip', function () {\n      if (this.get('isFailure')) {\n        return this.get('trip.tripId');\n      }\n\n      return this.get('rescheduleTrip.tripId');\n    }),\n    routeName: Ember.computed('isFailure', 'rescheduleTrip.currentRouteName', function () {\n      if (this.get('isFailure')) {\n        return this.get('originalRouteName');\n      }\n\n      return this.get('rescheduleTrip.currentRouteName');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const table = new _emberLightTable.default(_config.solutionColumns);\n      this.set('solutionImpactTable', table);\n      this.set('previouslyTriedRoutes', []);\n\n      if (this.get('isSuccess')) {\n        const originalRouteId = parseInt(this.get('originalRouteId'), 10);\n        this.set('previouslyTriedRoutes', [originalRouteId]);\n        this.get('fetchRescheduleTrip').perform().then(() => {\n          this.renderSuccessMessage();\n        });\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // side panel width just for trip transfer\n\n\n      this.setSideDrawerWidth('630px');\n    },\n\n    setupSolutionPreview(routeRecord) {\n      const tripId = this.get('tripId');\n      const routeTrips = routeRecord.get('trips').toArray();\n      let tripList = [];\n      routeTrips.forEach(trip => {\n        const stops = trip.get('stops');\n        stops.forEach(tripStop => {\n          const rider = (0, _unwrapProxy.unwrapProxy)(tripStop.get('trip.rider'));\n          const leg = tripStop.get('trip.segment.leg');\n          const anchor = leg.get('anchor'); //NYAAR-20354-Appt Time should display only for Drop anchored trips if the stop type is drop\n\n          const apptTime = tripStop.get('type') === _stopPoint.ANCHOR_DROP_TYPE && anchor === _stopPoint.ANCHOR_DROP_TYPE ? leg.get('requestTime') : '';\n          const computedPromiseTime = tripStop.get('isPick') ? tripStop.get('trip.promiseTime') : '';\n          const data = {\n            tripId: tripStop.get('trip.tripId'),\n            plannedEta: tripStop.get('plannedEta'),\n            stopType: tripStop.get('type'),\n            computedPromiseTime,\n            lastName: rider ? rider.get('lastName') : '',\n            simpleAddress: tripStop.get(`trip.${tripStop.get('type')}.segmentStop.place.address.streetNumberAndAddress`),\n            locality: tripStop.get(`trip.${tripStop.get('type')}.segmentStop.place.address.locality`),\n            apptTime: apptTime\n          };\n\n          if (data.tripId === tripId) {\n            data.selectedOrdinalRow = true;\n          }\n\n          tripList.push(data);\n        });\n      });\n      tripList = (0, _lodash.orderBy)(tripList, tripInfo => {\n        return tripInfo.plannedEta;\n      }, ['asc']);\n      this.get('solutionImpactTable').setRows(tripList);\n    },\n\n    fetchRescheduleTrip: (0, _emberConcurrency.task)(function* () {\n      const tripId = this.get('trip.id');\n      const tripByTripId = `in(id,(${tripId}))`;\n      const previouslyTriedRoutes = this.get('previouslyTriedRoutes');\n      yield this.get('store').query('trip', {\n        filter: tripByTripId\n      });\n      const rescheduleTrip = this.get('store').peekRecord('trip', tripId);\n      this.set('rescheduleTrip', rescheduleTrip);\n      const routeId = parseInt(rescheduleTrip.get('currentRouteId'), 10);\n      const triedRouteIds = (0, _lodash.uniq)(previouslyTriedRoutes.concat(routeId));\n      this.set('previouslyTriedRoutes', (0, _lodash.compact)(triedRouteIds));\n      const routeRecord = yield this.get('store').findRecord('route', routeId, {\n        include: ROUTE_INCLUDES.join(',')\n      }); // give enough time to load to ember store\n\n      yield (0, _emberConcurrency.timeout)(HALF_SEC_DELAY);\n      const placeQuery = this.getPlaceIdForSegmentStops(routeRecord);\n      const routeQuery = `eq(id,${routeId})&include=trips,trips.pick,trips.drop`;\n      yield this.get('store').query('place', {\n        filter: placeQuery\n      });\n      const routeQueryRecord = yield this.get('store').query('route', {\n        filter: routeQuery\n      }); // give enough time to load to ember store\n\n      yield (0, _emberConcurrency.timeout)(HALF_SEC_DELAY);\n      this.resetSolutionTableData();\n      this.setupSolutionPreview(routeQueryRecord.firstObject);\n    }).drop(),\n    waitListTrip: (0, _emberConcurrency.task)(function* () {\n      const schedule = (0, _unwrapProxy.unwrapProxy)(this.get('trip.route.schedule'));\n      const tripId = parseInt(this.get('trip.id'), 10);\n      let result;\n\n      try {\n        const operationData = {\n          tripId\n        };\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, 'tripWaitlist', options);\n\n        if (!result) {\n          throw new Error('Unable to place trip on waitlist.');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n    retryTrip: (0, _emberConcurrency.task)(function* () {\n      const schedule = (0, _unwrapProxy.unwrapProxy)(this.get('trip.route.schedule'));\n      const tripId = parseInt(this.get('trip.id'), 10);\n      const previouslyTriedRoutes = this.get('previouslyTriedRoutes');\n      let result;\n\n      try {\n        const operationData = {\n          tripId,\n          routes: (0, _lodash.compact)(previouslyTriedRoutes),\n          routeUsage: 1\n        };\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, 'tripReschedule', options);\n\n        if (!result) {\n          throw new Error('Unable to retry a different route');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n    originalRouteTrip: (0, _emberConcurrency.task)(function* (routeId) {\n      const schedule = (0, _unwrapProxy.unwrapProxy)(this.get('trip.route.schedule'));\n      const tripId = parseInt(this.get('trip.id'), 10);\n      let result;\n\n      try {\n        const operationData = {\n          tripId,\n          routes: [routeId],\n          routeUsage: 2\n        };\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, 'tripReschedule', options);\n\n        if (!result) {\n          throw new Error('Unable to return trip to original route');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    renderSuccessMessage() {\n      const delay = this.get('timeout');\n      setTimeout(() => {\n        const successMsg = `Trip ${this.get('rescheduleTrip.tripId')} successfully rescheduled to route ${this.get('routeName')}`;\n        this.get('notifications').success(successMsg);\n      }, delay);\n    },\n\n    getPlaceIdForSegmentStops(routeRecord) {\n      const placeIds = routeRecord.get('trips').map(tripData => {\n        const stops = tripData.get('stops');\n        return stops.map(tripStop => {\n          const place = (0, _unwrapProxy.unwrapProxy)(tripStop.get(`trip.${tripStop.get('type')}.segmentStop.place`));\n          return place.get('id');\n        });\n      });\n      const placeIdsInClause = (0, _lodash.flattenDeep)(placeIds).map(p => `'${p}'`).join(',');\n      return `in(id,(${placeIdsInClause}))&include=address,location`;\n    },\n\n    resetSolutionTableData() {\n      // reset stops table data\n      this.set('solutionImpactTable.rows', []);\n    },\n\n    actions: {\n      onColumnSolutionClick(column) {\n        this.sortSolutionPreview(column);\n      },\n\n      onColumnImpactClick(column) {\n        this.sortImpactPreview(column);\n      },\n\n      onAcceptButtonClick() {\n        this.onCloseClick();\n      },\n\n      onWaitListButtonClick() {\n        const tripId = this.get('trip.tripId');\n        const successMsg = `Trip ${tripId} successfully placed on waitlist`;\n        const errorMsg = 'Unable to place trip on waitlist.';\n        this.get('waitListTrip').perform().then(() => {\n          this.get('notifications').success(successMsg);\n          this.onCloseClick();\n        }).catch(() => {\n          this.get('notifications').warning(errorMsg);\n        });\n      },\n\n      onRetryButtonClick() {\n        const errorMsg = 'Unable to retry a different route';\n        this.get('retryTrip').perform().then(async () => {\n          await this.get('fetchRescheduleTrip').perform();\n          this.renderSuccessMessage();\n        }).catch(() => {\n          this.get('notifications').warning(errorMsg);\n          this.get('fetchRescheduleTrip').perform();\n        });\n      },\n\n      onOriginalRouteButtonClick() {\n        const tripId = this.get('trip.tripId');\n        const originalRouteId = this.get('originalRouteId');\n        const originalRouteName = this.get('originalRouteName');\n        const routeAssignments = this.get('trip.routeAssignments');\n        const originalRouteAssignment = routeAssignments.find(routeAssignment => {\n          return routeAssignment.get('route.id') === originalRouteId;\n        });\n        const routeName = originalRouteAssignment ? originalRouteAssignment.get('route.name') : originalRouteName;\n        const routeId = originalRouteAssignment ? parseInt(originalRouteAssignment.get('route.id'), 10) : originalRouteId;\n        const successMsg = `Trip ${tripId} successfully placed back to original route ${routeName}`;\n        const errorMsg = 'Unable to return trip to original route';\n        this.get('originalRouteTrip').perform(routeId).then(async () => {\n          await this.get('fetchRescheduleTrip').perform();\n          this.get('notifications').success(successMsg);\n          this.set('isOriginalRoutePerformed', true);\n        }).catch(() => {\n          this.get('notifications').warning(errorMsg);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.solutionColumns = void 0;\n  const solutionColumns = [{\n    label: 'Trip ID',\n    sortType: 'number',\n    valuePath: 'tripId',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: 50,\n    width: '80px'\n  }, {\n    label: 'Last Name',\n    sortType: 'text',\n    valuePath: 'lastName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: 50,\n    width: '80px'\n  }, {\n    label: 'Address',\n    sortType: 'text',\n    valuePath: 'simpleAddress',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: 50,\n    resizable: true,\n    width: '80px'\n  }, {\n    label: 'City',\n    sortType: 'text',\n    valuePath: 'locality',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: 50,\n    resizable: true,\n    width: '60px'\n  }, {\n    label: 'Stop',\n    sortType: 'text',\n    valuePath: 'stopType',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: 50,\n    resizable: true,\n    width: '60px'\n  }, {\n    label: 'ETA',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'plannedEta',\n    cellComponent: 'table/cells/trip-eta',\n    minResizeWidth: 50,\n    resizable: true,\n    width: '60px'\n  }, {\n    label: 'Promise Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedPromiseTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: 40,\n    resizable: true,\n    format: 'HH:mm',\n    width: '80px'\n  }, {\n    label: 'Appt Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'apptTime',\n    cellComponent: 'table/cells/date-cell',\n    resizable: true,\n    minResizeWidth: 40,\n    format: 'HH:mm',\n    width: '80px'\n  }];\n  _exports.solutionColumns = solutionColumns;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"VV+ibnRk\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"trip-transfer-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-layout auto-reschedule\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L9:C7) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isFailure\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"p-1\\\"],[9],[0,\\\"Unable to find a different route. You may click Place on Waitlist to waitlist the trip or click Accept to keep trip on its current route.\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L15:C9) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container g-schedule-trip-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"tripId\\\"],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"rescheduleTrip\\\",\\\"route\\\",\\\"vehicle\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Name:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"routeName\\\"],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"rider\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n               \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Time:\\\"],[10],[0,\\\"\\\\n               \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[23,[\\\"trip\\\",\\\"pick\\\",\\\"plannedEta\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Time:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[23,[\\\"trip\\\",\\\"drop\\\",\\\"plannedEta\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promise Time:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"formattedScheduledPromiseTime\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Request Time:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[23,[\\\"trip\\\",\\\"booking\\\",\\\"firstLeg\\\",\\\"requestTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"th\\\"],[9],[0,\\\"Anchor:\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"if\\\",[[23,[\\\"trip\\\",\\\"anchorStop\\\",\\\"isPick\\\"]],\\\"pick\\\",\\\"drop\\\"],null],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L59:C9) \\\"],null]],[[\\\"title\\\"],[\\\"Solution\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"solution-preview-header\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\" Route \\\"],[1,[21,\\\"routeName\\\"],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper scheduling-trip-transfer\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionImpactTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\",\\\"height\\\"],[false,true,360,\\\"200px\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n              \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L73:C16) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnImpactClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L80:C17) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\",\\\"rowComponent\\\"],[false,false,[27,\\\"component\\\",[[23,[\\\"rowComponent\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"solutionImpactTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs' @ L87:C21) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                  No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"buttons\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn schedule-btns\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onAcceptButtonClick\\\"],null]],[9],[0,\\\"\\\\n          Accept\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn schedule-btns\\\"],[12,\\\"disabled\\\",[21,\\\"isWaitListTripRunning\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onWaitListButtonClick\\\"],null]],[9],[0,\\\"\\\\n          Place on WaitList\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn schedule-btns\\\"],[12,\\\"disabled\\\",[21,\\\"isDisabledRetryBtn\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRetryButtonClick\\\"],null]],[9],[0,\\\"\\\\n          Retry\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn schedule-btns\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onOriginalRouteButtonClick\\\"],null]],[12,\\\"disabled\\\",[21,\\\"isDisabledOriginalRouteBtn\\\"]],[9],[0,\\\"\\\\n          Original Route\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/scheduling-auto-reschedule/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/component\", [\"exports\", \"ember-light-table\", \"ember-concurrency\", \"adept-iq/utils/batch-load-riders\", \"lodash\", \"adept-iq/config/placeholders\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/config\", \"adept-iq/config/mapped-permIds\", \"adept-iq/classes/impact-stop\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/mixins/table-row-value\", \"adept-iq/config/environment\"], function (_exports, _emberLightTable, _emberConcurrency, _batchLoadRiders, _lodash, _placeholders, _moment, _unwrapProxy, _config, _mappedPermIds, _impactStop, _asyncScheduleOperation, _tableRowValue, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROUTE_INCLUDES = ['trips', 'trips.pick', 'trips.pick.segmentStop', 'trips.pick.segmentStop.place', 'trips.pick.segmentStop.place.address', 'trips.drop', 'trips.drop.segmentStop', 'trips.drop.segmentStop.place', 'trips.drop.segmentStop.place.address', 'trips.segment', 'trips.segment.leg', 'trips.segment.leg.rider', 'routeBreaks'];\n  const PICK_STOP_TYPE = 'pick';\n  const DROP_STOP_TYPE = 'drop';\n  const BEFORE_PERIOD = 'before';\n  const AFTER_PERIOD = 'after';\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, _tableRowValue.default, {\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    //placeholders\n    TIME_PLACEHOLDER: _placeholders.TIME_PLACEHOLDER,\n    // passed by the side drawer container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    currentState: null,\n    solutionPreviewTable: null,\n    solutionImpactTable: null,\n    currentSortImpactPreview: null,\n    activeTabRouteId: null,\n    selectedSolutionId: null,\n    providersList: null,\n    currentRouteSolution: null,\n    solutions: null,\n    selectedImpactPeriod: 'after',\n    routeOverrideOptions: null,\n    overrideSelectedRoute: null,\n    override: false,\n    initialLoadedSolutionIds: null,\n    overrideSelectedProvider: null,\n    overridePickTime: null,\n    pickTime: '',\n    errorText: null,\n    overrideErrorText: null,\n    transferredTripStops: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    title: 'Bulk Transfer Trip',\n    rowComponent: 'table/rows/colored-row',\n    canShrink: Ember.computed.not('isSolutionsTaskRunning'),\n    trips: Ember.computed.readOnly('stackFrame.options.trips'),\n    trip: Ember.computed.readOnly('trips.firstObject'),\n    brokerEligible: Ember.computed.readOnly('trip.segment.leg.brokerEligible'),\n    previousSelectedTripProvider: Ember.computed.readOnly('trip.provider'),\n    //passed  by the workspace service\n    tripStops: null,\n    //Trips could be an array sometimes\n    isAnyManualSchedulingMode: Ember.computed('trips', function () {\n      const trips = this.get('trips');\n      const manualTrips = trips.filter(trip => trip.isManualSchedulingMode);\n      return manualTrips.length > 0;\n    }),\n    canSave: Ember.computed('selectedSolutionId', 'overrideErrorText', 'overrideSelectedProvider', function () {\n      const selectedSolutionId = this.get('selectedSolutionId');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n      const overrideErrorText = this.get('overrideErrorText');\n\n      if (!Ember.isEmpty(selectedSolutionId) && Ember.isEmpty(overrideErrorText)) {\n        return true;\n      }\n\n      if (overrideSelectedProvider && overrideSelectedProvider.get('isBrokerProviderType') || previousSelectedTripProvider && previousSelectedTripProvider.get('isBrokerProviderType')) {\n        return true;\n      }\n\n      return false;\n    }),\n    canDisableOverrideRouteSectionFields: Ember.computed('isNotOverride', 'overrideSelectedProvider', function () {\n      const isNotOverride = this.get('isNotOverride');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n\n      if (isNotOverride || overrideSelectedProvider && overrideSelectedProvider.get('isBrokerProviderType')) {\n        return true;\n      }\n\n      return false;\n    }),\n    canDisableOverrideOrderSectionFields: Ember.computed('canDisableOverrideRouteSectionFields', 'overrideSelectedRoute', function () {\n      const canDisableOverrideRouteSectionFields = this.get('canDisableOverrideRouteSectionFields');\n      const overrideSelectedRoute = this.get('overrideSelectedRoute');\n      return canDisableOverrideRouteSectionFields || Ember.isNone(overrideSelectedRoute);\n    }),\n    currentRoute: Ember.computed('trip.route', function () {\n      let route = '';\n      route = this.get('trip.route');\n\n      if (!route) {\n        return this.get('noRoute');\n      }\n\n      return route;\n    }).readOnly(),\n\n    async populateRoutesList(scheduleId) {\n      if (Ember.isEmpty(scheduleId)) return [];\n      const scheduleRecord = await this.get('store').findRecord('schedule', scheduleId, {\n        include: 'routes'\n      });\n      const routes = scheduleRecord.get('routes').toArray();\n      return routes;\n    },\n\n    overrideRouteOptions: Ember.computed('currentRoute', 'overrideSelectedProvider', async function () {\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const sourceRouteId = this.get('currentRoute.id');\n      const sourceTripScheduleId = this.get('trip.schedule.id');\n      const routes = await this.populateRoutesList(sourceTripScheduleId);\n\n      if (Ember.isNone(routes)) {\n        return [];\n      } //load routes included model records to build the data for solution preview\n\n\n      await routes.reduce((acc, route) => {\n        return acc.then(async () => {\n          const id = route.get('id');\n          if (Ember.isEmpty(id)) return null;\n          return this.get('store').findRecord('route', id, {\n            include: ROUTE_INCLUDES.join(',')\n          });\n        });\n      }, Promise.resolve());\n      return (0, _lodash.sortBy)(routes.filter(route => {\n        const routeScheduleId = route.get('schedule.id');\n        const routeId = route.get('id');\n        let sameProvider = false;\n\n        if (!Ember.isEmpty(overrideSelectedProvider)) {\n          sameProvider = overrideSelectedProvider.get('id') === route.get('provider.id');\n        }\n\n        const sameSchedule = routeScheduleId === sourceTripScheduleId;\n        const differentId = routeId !== sourceRouteId;\n        return sameSchedule && differentId && sameProvider;\n      }), route => route.name);\n    }),\n    isSolutionsTaskRunning: Ember.computed('fetchSolutionsTask.isRunning', 'fetchManualSolutionsTask.isRunning', function () {\n      return this.get('fetchSolutionsTask.isRunning') || this.get('fetchManualSolutionsTask.isRunning');\n    }),\n    isSolutionsTaskCanceled: Ember.computed('fetchSolutionsTask.lastCanceled', 'fetchManualSolutionsTask.lastCanceled', function () {\n      return Ember.isPresent(this.get('fetchSolutionsTask.lastCanceled')) || Ember.isPresent(this.get('fetchManualSolutionsTask.lastCanceled'));\n    }),\n    isNotOverride: Ember.computed('override', function () {\n      return !this.get('override');\n    }),\n    isOverrideChecked: Ember.observer('override', function () {\n      const override = this.get('override');\n      const deselectSolution = this.get('deselectSolution').bind(this);\n\n      if (override) {\n        this.set('selectedSolutionId');\n        this.set('selectedOverrideSolutionId');\n        deselectSolution();\n      }\n\n      if (!override) this.set('overrideErrorText', '');\n    }),\n    currentRouteImpact: Ember.computed('currentRouteSolution', function () {\n      const routeId = this.get('trip.route.id');\n      const currentTripStops = this.get('transferredTripStops');\n      const solutionStops = this.get('solutions') ? this.get('solutions')[0].stops : [];\n      const currentStops = solutionStops.filter(stop => stop.routeId === routeId);\n      const filteredCurrentStops = currentStops.filter(stop => !currentTripStops.includes(stop.id));\n\n      if (Ember.isNone(this.get('currentRouteSolution'))) {\n        const impact = Ember.Object.create({\n          before: this.buildImpactStops(currentStops, BEFORE_PERIOD)\n        });\n        return impact;\n      }\n\n      const impact = Ember.Object.create({\n        before: this.buildImpactStops(currentStops, BEFORE_PERIOD),\n        after: this.buildImpactStops(filteredCurrentStops, AFTER_PERIOD)\n      }); //sorting stops by 'plannedEta'\n\n      const impactBeforeStops = this.sortingStopsByETA(impact.before.stops);\n      const impactAfterStops = this.sortingStopsByETA(impact.after.stops);\n      const {\n        impactBeforeWithBrStops,\n        impactAfterWithBrStops\n      } = this.setGarageDataAndSequenceStops(impactBeforeStops, impactAfterStops); //replacing the impact before and after stops, after adding breaks and garage stops\n\n      impact.before.stops = impactBeforeWithBrStops;\n      impact.after.stops = impactAfterWithBrStops;\n      return impact;\n    }),\n    observeSelectImpactPeriod: Ember.observer('selectedImpactPeriod', function () {\n      const period = this.get('selectedImpactPeriod');\n      const selectedRouteId = this.get('activeTabRouteId'); // TODO: Can the table rows be updated without an observer?\n\n      this.get('solutionImpactTable').setRows(this.get(`impact.${period}.stops`)); // revaluate impact\n\n      this.chooseImpactByRoute(selectedRouteId);\n    }),\n\n    selectedRouteImpact() {\n      const selectedRouteId = this.get('currentSolutionRoute.id');\n      const solutions = this.get('solutions') || [];\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n      const transferTrips = this.get('transferredTripStops');\n      const filteredCurrentTripStops = selectedSolution.stops.filter(tripStop => transferTrips.includes(tripStop.id));\n      const filteredSolutionTrip = selectedSolution.tripStops.filter(tripStop => !transferTrips.includes(tripStop.id));\n      const filteredSelectedSolution = [...filteredCurrentTripStops, ...filteredSolutionTrip];\n      const impact = Ember.Object.create({\n        before: this.buildImpactStops(filteredSolutionTrip, BEFORE_PERIOD),\n        after: this.buildImpactStops(filteredSelectedSolution, AFTER_PERIOD)\n      }); //sorting stops by 'plannedEta'\n\n      const impactBeforeStops = this.sortingStopsByETA(impact.before.stops);\n      const impactAfterStops = this.sortingStopsByETA(impact.after.stops);\n      const {\n        impactBeforeWithBrStops,\n        impactAfterWithBrStops\n      } = this.setGarageDataAndSequenceStops(impactBeforeStops, impactAfterStops); //replacing the impact before and after stops, after adding breaks and garage stops\n\n      impact.before.stops = impactBeforeWithBrStops;\n      impact.after.stops = impactAfterWithBrStops;\n      return impact;\n    },\n\n    /**\n     * NYAAR-19582: Route ID is displayed next to the Route tab in the View Impact section on selecting route\n     */\n    selectedSolutionRoute: Ember.computed('solutions', 'selectedSolutionId', function () {\n      const solutions = this.get('solutions');\n      const selectedSolutionId = this.get('selectedSolutionId'); //if there is solutions and selectedSolutionId in solution table no routeId displayed\n\n      if (Ember.isEmpty(solutions) || Ember.isEmpty(selectedSolutionId)) return null;\n      const route = this.get('store').peekRecord('route', selectedSolutionId);\n      return route;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const solutionImpactTable = new _emberLightTable.default(_config.solutionImpactColumns);\n      const solutionPreviewTable = new _emberLightTable.default(_config.solutionColumns);\n      this.set('solutionImpactTable', solutionImpactTable); // eslint-disable-next-line new-cap\n\n      this.set('solutions', Ember.A([]));\n      this.set('solutionPreviewTable', solutionPreviewTable);\n      this.setOverrideProviderOptions();\n      this.setOverrideInitialData();\n      this.setTransferedTripStops();\n    },\n\n    async setOverrideInitialData() {\n      const provider = this.get('previousSelectedTripProvider');\n      const sourceTripScheduleId = this.get('currentRoute.schedule.id');\n      await this.populateRoutesList(sourceTripScheduleId);\n      Ember.run.later(() => {\n        this.set('overrideSelectedProvider', provider);\n      }, 500);\n    },\n\n    setTransferedTripStops() {\n      const transferedTripStops = [];\n      const trips = this.get('trips');\n      trips.map(trip => {\n        const stops = trip.get('stops');\n        stops.map(stop => {\n          if (Ember.isPresent(stop)) {\n            transferedTripStops.push(stop.id);\n          }\n        });\n      });\n      this.set('transferredTripStops', transferedTripStops);\n    },\n\n    setOverrideProviderOptions() {\n      const overrideProviderOptions = this.get('store').peekAll('provider').filter(provider => {\n        if (provider.get('isInActive')) {\n          return false;\n        }\n\n        return provider.get('userCanAccessProvider');\n      });\n      this.set('overrideProviderOptions', overrideProviderOptions);\n    },\n\n    async didInsertElement() {\n      const isAnyManualSchedulingMode = this.get('isAnyManualSchedulingMode');\n\n      this._super(...arguments); // side panel width just for trip transfer\n\n\n      Ember.$('.side-drawer-modal').css('min-width', '1030px');\n      this.loadCurrentState();\n      this.set('override', isAnyManualSchedulingMode);\n      await this.setupProvidersList();\n\n      if (!isAnyManualSchedulingMode && (0, _moment.default)(this.get('trip.pick.plannedEta')).isAfter((0, _moment.default)())) {\n        this.setupSolutions();\n      }\n    },\n\n    /**\n     * NYAAR-19727: sorting Stops by ETA value\n     * @param {*Array} stops\n     * @returns {*Array}\n     */\n    sortingStopsByETA(stops) {\n      return stops.sort((stop1, stop2) => _moment.default.utc(stop1.plannedEta).diff(_moment.default.utc(stop2.plannedEta)));\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('overrideSelectedProvider', currentState.overrideSelectedProvider);\n        this.set('overrideSelectedRoute', currentState.overrideSelectedRoute);\n        this.set('solutionPreviewTable', currentState.solutionPreviewTable);\n        this.set('pickTime', currentState.pickTime);\n        this.set('overridePickTime', currentState.overridePickTime);\n        this.set('override', currentState.override);\n\n        if (currentState.currentRouteSolution) {\n          this.set('currentRouteSolution', currentState.currentRouteSolution);\n        }\n      }\n    },\n\n    /**\n     * NYAAR-20239: fetchRider record form tripStops\n     */\n    fetchRiderRecord: (0, _emberConcurrency.task)(function* (currentStops) {\n      const store = this.get('store');\n      const filteredCurrentStops = currentStops.map(stop => {\n        const temp = store.peekRecord('trip-stop', stop.id);\n        return temp;\n      }).filter(stop => {\n        if (!stop) {\n          return false;\n        }\n\n        const temp1 = !stop.get('trip.rider.lastName') && stop.get('trip.rider.id');\n        return temp1;\n      }); // batched: one in(riderId,(…)) query instead of N per-rider forced fetches\n\n      yield (0, _batchLoadRiders.default)(this.get('store'), filteredCurrentStops.map(stop => stop.get('trip.rider.id')));\n    }),\n\n    /**\n     * NYAAR-20239: filter rider from selectedRoutes\n     */\n    async filterRiderFromSelectedRoutes() {\n      const routeId = this.get('trip.route.id');\n      const selectedRouteId = this.get('currentSolutionRoute.id');\n      const solutions = this.get('solutions') || [];\n      const solutionStops = this.get('solutions') ? this.get('solutions')[0].stops : [];\n      const currentStops = solutionStops.filter(stop => stop.routeId === routeId);\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n      const transferTrips = this.get('transferredTripStops');\n      const filteredCurrentTripStops = selectedSolution.stops.filter(tripStop => transferTrips.includes(tripStop.id));\n      const filteredSolutionTrip = selectedSolution.tripStops.filter(tripStop => !transferTrips.includes(tripStop.id));\n      const filteredSelectedSolution = [...filteredCurrentTripStops, ...filteredSolutionTrip, ...currentStops];\n      await this.fetchRiderRecord.perform(filteredSelectedSolution);\n    },\n\n    /**\n     * NYAAR-19407: to build impactStops for impact table\n     * @param {Object} stop\n     * @param {*Object} tripStop\n     * @returns {*Object}\n     */\n    buildImpactStops(currentStops, period) {\n      const store = this.get('store');\n      return {\n        stops: currentStops.map(stop => {\n          const tripStop = store.peekRecord('trip-stop', stop.id);\n          const address = tripStop.get('segmentStop.place.address');\n          const segment = tripStop.get('trip.segment');\n          const trip = tripStop.get('trip');\n          const city = tripStop.city || address.get('subLocality') || address.get('region');\n          const type = tripStop.type;\n          const plannedEta = period === BEFORE_PERIOD ? tripStop.get('plannedEta') : stop.plannedEta; //NYAAR-20339-Appt time should only display for drop anchored trips (i.e, stop type is drop)\n\n          const computedApptTime = type === DROP_STOP_TYPE && segment.get('anchor') === DROP_STOP_TYPE ? segment.get('leg.requestTime') : '';\n          return _impactStop.default.create({\n            id: tripStop.trip.id,\n            polyline: null,\n            mrt: null,\n            plannedRouteOrdinal: stop.plannedRouteOrdinal,\n            plannedEta,\n            stop: type,\n            stopStatus: stop.status,\n            computedPromiseTime: type === DROP_STOP_TYPE ? '' : trip.get('promiseTime'),\n            computedApptTime: computedApptTime,\n            lastName: trip.get('rider.lastName'),\n            simpleAddress: address.get('streetNumberAndAddress'),\n            city,\n            tripStop,\n            routeBreakData: stop.routeBreakData || []\n          });\n        })\n      };\n    },\n\n    /**\n     * NYAAR-19407: sets routeBreaks, pullOutGarage, pullInGarage and sequences the stops for impact table\n     * @param {Array} impactBeforeStops\n     * @param {Array} impactAfterStops\n     */\n    setGarageDataAndSequenceStops(impactBeforeStops, impactAfterStops) {\n      const impactBeforeWithBrStops = this.setRouteBreak(impactBeforeStops);\n      const impactAfterWithBrStops = this.setRouteBreak(impactAfterStops);\n      this.buildPullOutGarageData(impactAfterWithBrStops);\n      this.buildPullInGarageData(impactAfterWithBrStops);\n      this.buildPullOutGarageData(impactBeforeWithBrStops);\n      this.buildPullInGarageData(impactBeforeWithBrStops);\n      this.sequencePlannedRouteOrdinal(impactBeforeWithBrStops);\n      this.sequencePlannedRouteOrdinal(impactAfterWithBrStops);\n      return {\n        impactBeforeWithBrStops,\n        impactAfterWithBrStops\n      };\n    },\n\n    onTransferTrip: (0, _emberConcurrency.task)(function* () {\n      const schedule = this.get('overrideSelectedRoute.schedule');\n      const routeId = this.get('overrideSelectedRoute.id');\n      const tripId = this.get('trip.id');\n      const trips = this.get('solutionImpactTable.rows') || [];\n      const pickTrip = trips.find(t => t.get('id') === tripId && t.get('stop') === PICK_STOP_TYPE);\n      let result;\n\n      try {\n        const operationData = {\n          tripId,\n          routeId,\n          pickTime: pickTrip.get('plannedEta')\n        };\n        const options = {\n          operationData\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, 'tripTransfer', options);\n\n        if (!result) {\n          throw new Error('Failed to transfer');\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    resetSolutionTableData() {\n      // reset stops table data\n      this.set('solutionImpactTable.rows', []);\n    },\n\n    getPickAndDropDataForSolutionPreview(trip, tripList) {\n      const drop = (0, _unwrapProxy.unwrapProxy)(trip.get('drop'));\n      const pick = (0, _unwrapProxy.unwrapProxy)(trip.get('pick'));\n      const rider = (0, _unwrapProxy.unwrapProxy)(trip.get('rider'));\n      const pickOrdinal = pick.get('scheduleOrdinal') || pick.get('plannedRouteOrdinal');\n      const dropOrdinal = drop.get('scheduleOrdinal') || drop.get('plannedRouteOrdinal');\n      const pickData = {\n        tripId: trip.get('tripId'),\n        plannedRouteOrdinal: pickOrdinal,\n        plannedEta: pick.get('plannedEta'),\n        stopType: 'pick',\n        tripStop: trip.stops,\n        route: trip.route,\n        currentProviderName: trip.currentProviderName,\n        computedPromiseTime: trip.get('promiseTime'),\n        lastName: rider ? rider.get('lastName') : '',\n        simpleAddress: trip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n        locality: trip.get('pick.segmentStop.place.address.locality')\n      };\n      const dropData = {\n        tripId: trip.get('tripId'),\n        plannedRouteOrdinal: dropOrdinal,\n        plannedEta: drop.get('plannedEta'),\n        stopType: 'drop',\n        tripStop: trip.stops,\n        route: trip.route,\n        currentProviderName: trip.currentProviderName,\n        computedPromiseTime: trip.get('promiseTime'),\n        lastName: rider ? rider.get('lastName') : '',\n        simpleAddress: trip.get('drop.segmentStop.place.address.streetNumberAndAddress'),\n        locality: trip.get('drop.segmentStop.place.address.locality')\n      };\n      tripList.push(pickData, dropData);\n    },\n\n    buildTripList() {\n      const trips = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.trips'));\n      const routeBreaks = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.routeBreaks')) || [];\n      let tripList = [];\n      this.buildPullOutGarageData(tripList);\n      trips.forEach(trip => {\n        this.getPickAndDropDataForSolutionPreview(trip, tripList);\n      });\n      routeBreaks.forEach(routeBreak => {\n        const breakOrdinal = routeBreak.get('scheduleOrdinal') || routeBreak.get('plannedRouteOrdinal');\n        const plannedEta = (0, _moment.default)(routeBreak.get('plannedEta'));\n        const plannedDuration = routeBreak.get('plannedDuration');\n        const plannedEndEta = plannedEta.add(plannedDuration, 'm').toDate();\n        tripList.push({\n          stop: routeBreak.get('type'),\n          plannedEta: routeBreak.get('plannedEta'),\n          plannedEndEta: plannedEndEta,\n          plannedRouteOrdinal: breakOrdinal,\n          isBreak: true\n        });\n      });\n      tripList = (0, _lodash.orderBy)(tripList, trip => {\n        return trip.plannedRouteOrdinal;\n      }, ['asc']);\n      this.set('tripStops', tripList);\n    },\n\n    populateRoute: (0, _emberConcurrency.task)(function* (currentRouteID) {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      yield coreEntityPopulator.populateRtsRoute(currentRouteID, {});\n    }),\n\n    buildPullInGarageData(tripList) {\n      const store = this.get('store');\n      const currentRouteID = this.get('currentSolutionRoute.id');\n      const pullInGarage = store.peekRecord('stop-point', `GD${currentRouteID}`);\n      const pullinGarageData = {\n        stop: 'pullinGarage',\n        plannedEta: !pullInGarage ? '' : pullInGarage.get('stopRoute.plannedEndTime'),\n        plannedRouteOrdinal: tripList.length,\n        simpleAddress: !pullInGarage ? '' : pullInGarage.get('place.address.streetNumberAndAddress'),\n        city: !pullInGarage ? '' : pullInGarage.get('place.address.locality')\n      };\n      tripList.push(pullinGarageData);\n    },\n\n    buildPullOutGarageData(tripList) {\n      const store = this.get('store');\n      const currentRouteID = this.get('currentSolutionRoute.id');\n      const pullOutGarage = store.peekRecord('stop-point', `GP${currentRouteID}`);\n      const pulloutGarageData = {\n        stop: 'pulloutGarage',\n        plannedRouteOrdinal: 0,\n        plannedEta: !pullOutGarage ? '' : pullOutGarage.get('stopRoute.plannedStartTime'),\n        simpleAddress: !pullOutGarage ? '' : pullOutGarage.get('place.address.streetNumberAndAddress'),\n        city: !pullOutGarage ? '' : pullOutGarage.get('place.address.locality')\n      };\n      tripList.unshift(pulloutGarageData);\n    },\n\n    onTransferTripSave() {\n      const brokerEligible = this.get('brokerEligible');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const isBrokerProviderType = overrideSelectedProvider ? overrideSelectedProvider.get('isBrokerProviderType') : false;\n      const currentSolutionRoute = this.get('currentSolutionRoute');\n      const schedule = this.get('trip.schedule') ? this.get('trip.schedule') : null;\n      let tip = '';\n      let successMsg = '';\n      let errorMsg = '';\n      const title = 'Bulk Transfer Trip';\n      const trips = this.get('trips');\n      const tripIds = trips.map(trip => {\n        return trip.get('id') ? parseInt(trip.get('id'), 10) : null;\n      });\n      const tooltip = this.get('tooltip');\n      const routeId = this.get('trip.route.id');\n      const currentSelectedRouteId = currentSolutionRoute.get('id');\n      const currentSelectedRouteName = currentSolutionRoute.get('name'); // const initialLoadedSolutionIds = this.get('initialLoadedSolutionIds');\n      //the call must be \"blockReschedule\" for automatic route (or) \"tripTransfer\" for manual/override route\n      // const isinitialLoadedProviderSelected = initialLoadedSolutionIds.includes(currentSelectedRouteId);\n      // const performAction = isinitialLoadedProviderSelected ? this.createScheduleAsyncOperation : this.onTransferTrip;\n\n      const override = this.get('override');\n      const performAction = this.createScheduleAsyncOperation;\n      const pickTime = (0, _moment.default)(this.get('overridePickTime')).format('YYYY-MM-DD HH:mm:ssZ');\n      let operationType = 'blockReschedule';\n      let operationData = {\n        hypo: false,\n        trips: tripIds,\n        routes: [currentSelectedRouteId],\n        routeUsage: 2\n      };\n\n      if (override) {\n        operationData = {\n          hypo: false,\n          tripIds: tripIds,\n          routeId: currentSelectedRouteId,\n          transferTime: pickTime\n        };\n        operationType = 'blockTransfer';\n      }\n\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      tip = `Are you sure you want to transfer trips ${tripIds} ?`;\n      successMsg = `Trips ${tripIds} successfully transferred to route ${currentSelectedRouteName} `;\n      errorMsg = `Failed to transfer Trips ${tripIds}`; //NYAAR-19315-if the broker is not eligible and the current provider type is broker\n\n      if (!brokerEligible && isBrokerProviderType) {\n        tip = 'This trip will be transferred to a broker, even though the trip is not broker-eligible. Are you sure you want to proceed?';\n      }\n\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          await this.setBrokerEligible(brokerEligible, isBrokerProviderType, true);\n          return performAction.perform(schedule, operationType, options).then(async result => {\n            if (!result.isJobSuccess) {\n              const responseResult = result.jsonData.attributes.results || '';\n              throw new Error(responseResult);\n            }\n\n            this.get('notifications').success(successMsg);\n            await this.get('booking').routeTripQuery(routeId);\n            return this.onCloseClick();\n          }).catch(async err => {\n            // eslint-disable-next-line no-console\n            console.warn(errorMsg);\n            await this.setBrokerEligible(brokerEligible, isBrokerProviderType, false);\n\n            if (!Ember.isEmpty(err) && !Ember.isEmpty(err.message)) {\n              const reason = err.message || err.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n              this.get('notifications').warning(reason);\n            } else {\n              this.get('notifications').warning('The system encountered an error, please try again. If the problem persists contact administrator.');\n            }\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    convertToRegularDateTime(value) {\n      const scheduleName = this.get('overrideSelectedRoute.schedule.name');\n      const dateTimeMoment = (0, _moment.default)(scheduleName).startOf('day');\n      const timeArray = value.masked.split(':');\n      dateTimeMoment.add(timeArray[0], 'hours');\n      dateTimeMoment.add(timeArray[1], 'minutes');\n      return dateTimeMoment;\n    },\n\n    //NYAAR-19315-update leg.brokerEligible as true when the broker is not eligible and the current provider type is broker and the trip is successfully transferred\n    async setBrokerEligible(brokerEligible, isBrokerProviderType, value) {\n      if (!brokerEligible && isBrokerProviderType) {\n        const leg = (0, _unwrapProxy.unwrapProxy)(this.get('trip.segment.leg'));\n        leg.set('brokerEligible', value);\n        await leg.save();\n      }\n    },\n\n    //NYAAR-19434-stop order in solution preview table must be in sequence order\n    sequencePlannedRouteOrdinal(tripList) {\n      tripList.forEach((trip, index) => {\n        trip.plannedRouteOrdinal = index;\n      });\n    },\n\n    /**\n     * sets routeBreak for stops\n     * @param {*Array} tripStopList\n     * @returns {*Array}\n     */\n    setRouteBreak(tripStopList) {\n      const filteredRouteBreak = !tripStopList.length ? [] : tripStopList.filter(stop => stop.routeBreakData[0]).map(stop => stop.routeBreakData).flat();\n      const selectedRouteId = this.get('selectedTableRouteId');\n      const breakForRoute = filteredRouteBreak.filter(routeBreak => routeBreak.relationships.route.data.id === selectedRouteId).uniqBy('attributes.estimatedStart');\n      breakForRoute.forEach(routeBreak => {\n        const breakOrdinal = routeBreak.attributes.plannedRouteOrdinal;\n        tripStopList.push({\n          stop: 'break',\n          plannedEta: routeBreak.attributes.estimatedStart,\n          plannedRouteOrdinal: breakOrdinal,\n          isBreak: true\n        });\n      });\n      return this.sortingStopsByETA(tripStopList);\n    },\n\n    /**\n     * NYAAR-19407: to prepare solutionReview table for Manually select a route to transfer the trip\n     * @param {Object} solution\n     */\n    prepareOverrideSolutionPreviewTable(solution) {\n      const store = this.get('store');\n      const selectedRouteId = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.id'));\n      const destinationSolutionRoutes = this.get('solutions') || [];\n      const foundSolution = destinationSolutionRoutes.findBy('id', solution[0].id); // reset stops table data\n\n      this.get('solutionImpactTable').setRows([]);\n\n      if (!foundSolution) {\n        destinationSolutionRoutes.pushObject(solution[0]);\n        const solutionPreviewTableRow = this.get('solutionPreviewTable.rows').toArray();\n        const solutionsTableRows = solution.map(_ref => {\n          let {\n            id,\n            providerName,\n            routeId\n          } = _ref;\n          const selectedRoute = store.peekRecord('route', id);\n          const routeName = selectedRoute.get('name');\n          return {\n            routeName,\n            providerName,\n            routeId,\n            id\n          };\n        }); //inserting new override route to top of the list, in reviewTable\n\n        solutionPreviewTableRow.splice(0, 0, solutionsTableRows[0]);\n        this.get('solutionPreviewTable').setRows(solutionPreviewTableRow);\n      } else {\n        const solutionPreviewTableRow = this.get('solutionPreviewTable.rows').toArray();\n        const solutionIndex = destinationSolutionRoutes.findIndex(currSolution => currSolution.id === solution[0].id);\n        const solutionPreviewTableRowIindex = solutionPreviewTableRow.findIndex(row => row.get('id') === solution[0].id); // replace the solution with new data\n\n        destinationSolutionRoutes.splice(solutionIndex, 1, solution[0]);\n        const solutionsTableRows = solution.map(_ref2 => {\n          let {\n            id,\n            providerName,\n            routeId\n          } = _ref2;\n          const selectedRoute = store.peekRecord('route', id);\n          const routeName = selectedRoute.get('name');\n          return {\n            routeName,\n            providerName,\n            routeId,\n            id\n          };\n        }); // replace the routes table rows with new solution rows\n\n        this.get('solutionPreviewTable').removeRow(solutionPreviewTableRow[solutionPreviewTableRowIindex]);\n        this.get('solutionPreviewTable').addRow(solutionsTableRows[0]);\n        this.get('solutionPreviewTable').setRows(solutionPreviewTableRow); // refresh stop table with new results\n\n        const selectedRoute = store.peekRecord('route', solution[0].id);\n        this.set('currentSolutionRoute', selectedRoute);\n        this.populateRoute.perform(this.get('currentSolutionRoute.id'));\n      }\n\n      if (!this.get('currentRouteSolution')) {\n        const currentRouteSolution = this.get('trip.route');\n        this.set('currentRouteSolution', currentRouteSolution);\n      }\n\n      this.selectSolution.perform(solution[0].id);\n      this.selectTableSolutionRow(selectedRouteId);\n    },\n\n    /**\n     * NYAAR-19407: sets providerList for solution review table\n     */\n    async setupProvidersList() {\n      const transferBrokerTripDispatch = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferBrokerTripDispatch, null);\n      const previousSelectedTripProvider = (0, _unwrapProxy.unwrapProxy)(this.get('previousSelectedTripProvider'));\n      this.set('providersList', []);\n      const providers = await this.get('store').peekAll('provider').filter(provider => {\n        // filter out broker providers if user does not have permission or InActive\n        if (provider.get('isBrokerProviderType') && !transferBrokerTripDispatch || provider.get('isInActive')) {\n          return false;\n        }\n\n        return !Ember.isEmpty(provider.get('name')) && !Ember.isEmpty(provider.get('id')) && provider.get('userCanAccessProvider');\n      });\n      const providersList = [];\n      providers.forEach(provider => {\n        let isChecked = false;\n\n        if (Ember.isPresent(previousSelectedTripProvider) && provider.get('id') === previousSelectedTripProvider.get('id')) {\n          isChecked = true;\n        }\n\n        providersList.push({\n          id: provider.get('id'),\n          name: provider.get('providerName'),\n          isChecked: isChecked\n        });\n      });\n      this.set('providersList', providersList);\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    /**\n     * NYAAR-19407: sets up solutions, When the panel is first loaded\n     */\n    setupSolutions() {\n      this.set('errorText');\n      const trips = this.get('trips');\n      const currentState = this.get('currentState');\n      let currentSolutionRouteId = null;\n\n      if (currentState) {\n        currentSolutionRouteId = currentState.currentSolutionRoute ? currentState.currentSolutionRoute.get('id') : null;\n      }\n\n      this.cursorWait();\n\n      const fetchOrRestoreTask = async () => {\n        if (currentState) {\n          const restoreSolutions = this.get('currentState.solutions'); // after restore currentState solutions, remove the cache.\n\n          this.set('currentState', null);\n          return restoreSolutions;\n        }\n\n        return await this.get('fetchSolutionsTask').perform(trips);\n      };\n\n      fetchOrRestoreTask().catch(err => {\n        // if the side drawer have been close while doing fetch\n        if (this.get('isSolutionsTaskCanceled')) return null; // Try to be as robust as possible.  Log an error to console for discovery,\n        // but just use an empty solution set to unblock manually transferring\n\n        if (!Ember.isEmpty(err) && !Ember.isEmpty(err.attributes)) {\n          const reason = err.attributes.results || err.attributes.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err.attributes.results)}`); // eslint-disable-line no-console\n\n        return null;\n      }).then(solutions => {\n        // reset stops table data\n        this.get('solutionImpactTable').setRows([]);\n        const providerSelectedHash = this.get('providersList').reduce((hash, p) => {\n          hash[p.id] = p.isChecked;\n          return hash;\n        }, {});\n\n        if (Ember.isPresent(solutions)) {\n          const solutionsFilteredByProvider = solutions.filter(s => providerSelectedHash[s.providerName]); // give it a bit of time for everything to get loaded to ember store\n\n          Ember.run.later(() => {\n            this.prepareSolutionPreviewTable(solutionsFilteredByProvider, currentSolutionRouteId);\n          }, 500);\n        }\n\n        this.cursorDefault();\n      }).catch(() => {\n        const tripIds = trips.map(trip => trip.id);\n        this.get('notifications').info(`Trips ${tripIds} cannot be transferred`);\n        this.cursorDefault();\n        return this.onCloseClick();\n      });\n      this.fetchRouteOverrideOptions();\n    },\n\n    /**\n     * NYAAR-19407: prepare solution review table, When the panel is first loaded\n     * @param {Array} solutions\n     * @param {*Number} currentSolutionRouteId\n     */\n    prepareSolutionPreviewTable(solutions, currentSolutionRouteId) {\n      const store = this.get('store');\n      let solutionsTableRows = [];\n\n      if (!Ember.isEmpty(solutions)) {\n        solutionsTableRows = solutions.map(_ref3 => {\n          let {\n            id,\n            providerName,\n            routeId\n          } = _ref3;\n          const selectedRoute = store.peekRecord('route', id);\n          const routeName = selectedRoute.get('name');\n          return {\n            routeName,\n            providerName,\n            routeId,\n            id\n          };\n        });\n        solutions.forEach(solution => {\n          const index = this.get('solutions').findIndex(s => s.id === solution.id);\n\n          if (index === -1) {\n            this.get('solutions').pushObject(solution);\n          } else {\n            this.get('solutions').splice(index, 1, solution);\n          }\n        });\n      }\n\n      this.get('solutionPreviewTable').setRows(solutionsTableRows); //from initially loaded solution the row ids are selected, for performing transfer route by calling 'blockReschedule'\n\n      this.set('initialLoadedSolutionIds', solutionsTableRows.map(row => row.id));\n\n      if (!Ember.isEmpty(solutions)) {\n        const solutionFound = currentSolutionRouteId ? solutions.find(solution => solution.id === currentSolutionRouteId) : null;\n        const firstSolutionId = solutionFound ? solutionFound.id : solutions[0].routeId;\n        this.selectTableSolutionRow(firstSolutionId);\n        this.selectSolution.perform(firstSolutionId);\n      }\n    },\n\n    /**\n     * NYAAR-19407: fetch solutions for table, when the panel is first loaded\n     */\n    fetchSolutionsTask: (0, _emberConcurrency.task)(function* (trips) {\n      const schedule = trips.get('firstObject.schedule') ? trips.get('firstObject.schedule') : null;\n      const tripIds = trips.map(trip => {\n        return trip.get('id') ? parseInt(trip.get('id'), 10) : null;\n      });\n      const operationData = {\n        hypo: true,\n        trips: tripIds\n      };\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      const {\n        jsonData\n      } = yield this.createScheduleAsyncOperation.perform(schedule, 'blockReschedule', options);\n      const result = jsonData;\n\n      if (result.attributes.state === 'failure') {\n        throw result;\n      }\n\n      if (!Ember.isEmpty(result.attributes)) {\n        return this.prepareSolutionData(result);\n      }\n    }).keepLatest(),\n\n    /**\n     * NYAAR-19407: prepare solutions data, when the panel is first loaded\n     */\n    prepareSolutionData(result) {\n      const store = this.get('store');\n      const trips = this.get('trips');\n      const resultData = JSON.parse(result.attributes.results).trips.data;\n      const routeBreakData = JSON.parse(result.attributes.results).routeBreaks.data;\n      const resultInculudes = JSON.parse(result.attributes.results).trips.included;\n      const promiseTime = resultData.firstObject.attributes.promiseTime;\n      const tripStops = resultInculudes.filter(include => include.type === 'tripStop');\n      const currentRouteSolution = this.get('trip.route');\n      const stops = [];\n      this.set('currentRouteSolution', currentRouteSolution);\n      tripStops.forEach(stop => {\n        /* eslint-disable newline-after-var */\n        let currentTripRider = this.get('trip.rider');\n        let currentTrip = this.get('trip');\n        let tripFromStop;\n        /* eslint-enable newline-after-var */\n\n        const tripStop = store.peekRecord('tripStop', stop.id);\n        const routeId = tripStop ? tripStop.get('route.id') : '';\n\n        if (tripStop) {\n          tripFromStop = tripStop.get('trip');\n          currentTripRider = tripStop.get('trip.rider');\n\n          if (Ember.isPresent(tripFromStop)) {\n            const currentTripTemp = trips.find(trip => {\n              return tripFromStop.get('id') === trip.get('id');\n            });\n\n            if (currentTripTemp) {\n              currentTrip = currentTripTemp;\n            }\n          }\n        }\n\n        stops.push({\n          id: stop.id,\n          plannedRouteOrdinal: stop.attributes.plannedRouteOrdinal,\n          plannedEta: stop.attributes.plannedEta,\n          trip: currentTrip,\n          computedPromiseTime: promiseTime,\n          computedApptTime: currentTrip.get('segment.anchor') === DROP_STOP_TYPE ? currentTrip.get('segment.leg.requestTime') : '',\n          lastName: currentTripRider.get('lastName'),\n          simpleAddress: currentTrip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n          locality: currentTrip.get('pick.segmentStop.place.address.locality'),\n          status: stop.attributes.hasOwnProperty('dropStatus') ? stop.attributes.dropStatus : stop.attributes.pickStatus,\n          routeId,\n          routeBreakData,\n          riderId: currentTripRider.get('id')\n        });\n      });\n      const groupedStops = this.prepareGroupStops(resultData, stops);\n      return this.prepareTripSolutionData(resultData, groupedStops, promiseTime, stops);\n    },\n\n    async prepareTripSolutionData(resultData, groupedStops, promiseTime, tripStops) {\n      const store = this.get('store');\n      const currentTripRouteId = this.get('trip.route.id');\n      const filterdRouteTableResult = [];\n      const transferTripPayloadResult = [];\n      const filteredCurrentStops = tripStops.filter(stop => stop.riderId); // batched: one in(riderId,(…)) query instead of N per-rider forced fetches\n\n      await (0, _batchLoadRiders.default)(this.get('store'), filteredCurrentStops.map(stop => stop.riderId));\n      resultData.forEach(trip => {\n        const route = store.peekRecord('route', trip.relationships.route.data.id);\n        transferTripPayloadResult.push(trip);\n\n        if (currentTripRouteId !== route.id) {\n          transferTripPayloadResult.pop();\n          filterdRouteTableResult.push(trip);\n        }\n      });\n      this.set('transferTripPayloadResult', transferTripPayloadResult);\n      return filterdRouteTableResult.map(tripData => {\n        const currentProvider = store.peekRecord('provider', tripData.relationships.currentProviderName.data.id);\n        const tripRouteId = tripData.relationships.route.data.id;\n        const stops = groupedStops[tripRouteId];\n        return {\n          id: tripRouteId,\n          tripId: tripData.id,\n          tripStops: stops || [],\n          promiseTime,\n          stops: tripStops,\n          routeId: tripRouteId,\n          providerName: currentProvider.name,\n          isNewTrip: true\n        };\n      }).uniqBy('id');\n    },\n\n    /**\n     * NYAAR-19690: prepare GroupStops from payloadData\n     * @param {Array} resultData\n     * @param {Array} stops\n     * @returns\n     */\n    prepareGroupStops(resultData, stops) {\n      const groupedStops = {};\n      const pickDropObj = {};\n      resultData.forEach(data => {\n        const routeId = data.relationships.route.data.id;\n\n        if (!pickDropObj[routeId]) {\n          pickDropObj[routeId] = [data.relationships.drop.data.id, data.relationships.pick.data.id];\n        } else {\n          pickDropObj[routeId].push(data.relationships.drop.data.id, data.relationships.pick.data.id);\n        }\n      });\n      const keyValuePair = Object.entries(pickDropObj);\n      keyValuePair.forEach(keyValue => {\n        const key = keyValue[0];\n        const stopArr = [];\n        keyValue[1].forEach(value => stopArr.push(...stops.filter(stop => stop.id === value)));\n        groupedStops[key] = stopArr;\n      });\n      return groupedStops;\n    },\n\n    /**\n     * NYAAR-19407: select solution for impact table\n     */\n    selectSolution: (0, _emberConcurrency.task)(function* (routeId) {\n      const selectedRoute = this.get('store').peekRecord('route', routeId);\n      this.setProperties({\n        selectedSolutionId: routeId,\n        selectedImpactPeriod: 'after',\n        activeTabRouteId: routeId,\n        currentSolutionRoute: selectedRoute\n      });\n      yield this.populateRoute.perform(this.get('currentSolutionRoute.id'));\n      this.chooseImpactByRoute(routeId);\n    }),\n\n    /**\n     * NYAAR-19407: select solution for impact table\n     * @param {Number} routeId\n     */\n    selectTableSolutionRow(routeId) {\n      const rows = this.get('solutionPreviewTable.rows');\n      const currentSelectedRow = rows.findBy('selected');\n      const rowToSelect = rows.findBy('id', routeId);\n      if (rowToSelect === currentSelectedRow) return;\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n      }\n\n      rowToSelect.set('selected', true);\n      this.selectSolution.perform(routeId);\n    },\n\n    unSelectTableSolutionRow() {\n      const rows = this.get('solutionPreviewTable.rows');\n      const currentSelectedRow = rows.findBy('selected');\n      this.set('selectedSolutionId');\n      this.set('selectedOverrideSolutionId');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n      }\n    },\n\n    /**\n     * NYAAR-19407: choose Impacts (currentRouteImpact/selectedRouteImpact) in impact table\n     * @param {Number} routeId\n     * @returns {Object}\n     */\n    async chooseImpactByRoute(routeId) {\n      const solutions = this.get('solutions');\n      const period = this.get('selectedImpactPeriod');\n      const currentRoute = this.get('currentRoute');\n      const currentRouteSolution = this.get('currentRouteSolution');\n      const trips = this.get('trips');\n      const tripIds = trips.map(trip => trip.id);\n      const selectedRouteImpact = this.get('selectedRouteImpact').bind(this);\n      const currentSortImpactPreview = this.get('currentSortImpactPreview');\n      this.set('selectedTableRouteId', routeId);\n      let selectedSolution = null;\n      let impact = null; // Handle choosing the current route\n\n      await this.filterRiderFromSelectedRoutes();\n\n      if (!Ember.isNone(currentRoute) && routeId === currentRoute.get('id')) {\n        selectedSolution = currentRouteSolution;\n\n        if (Ember.isEmpty(selectedSolution)) {\n          if (this.get('trip.status') === 'waitlisted' && period === 'before') {\n            this.get('solutionImpactTable').setRows(this.get('trip.stops'));\n            return;\n          }\n\n          this.get('solutionImpactTable').setRows([]);\n        }\n\n        impact = this.get('currentRouteImpact');\n      } else {\n        selectedSolution = solutions.findBy('id', routeId);\n\n        if (Ember.isEmpty(selectedSolution)) {\n          this.set('impact', impact);\n          this.get('solutionImpactTable').setRows([]);\n          return impact;\n        }\n\n        impact = selectedRouteImpact();\n      }\n\n      this.set('impact', impact);\n      const stopsRows = impact[period] ? impact[period].stops : [];\n      const rows = this.get('solutionImpactTable').setRows(stopsRows);\n\n      if (currentSortImpactPreview) {\n        this.sortImpactPreview(currentSortImpactPreview, tripIds);\n      } else {\n        rows.forEach(stop => {\n          if (!Ember.isNone(stop.get('tripStop')) && tripIds.includes(stop.get('tripStop.trip.id'))) {\n            stop.set('selected', true);\n          } //adding redRow class to row for showing ETA value in impact table related to lateness flag\n\n\n          if (stop.get('stopStatus') === 1) {\n            stop.set('classNames', 'redRow');\n          }\n        });\n      }\n\n      return impact;\n    },\n\n    fetchRouteOverrideOptions() {\n      const sourceRouteIdValue = this.get('currentRoute.id');\n      const sourceRouteScheduleIdValue = this.get('currentRoute.schedule.id');\n      if (!sourceRouteIdValue) return null;\n      const store = this.get('store');\n      const routes = store.peekAll('route').filter(route => {\n        const routeScheduleIdValue = route.get('schedule.id');\n        const routeIdValue = route.get('id');\n        const sameSchedule = routeScheduleIdValue === sourceRouteScheduleIdValue;\n        const differentId = routeIdValue !== sourceRouteIdValue;\n        return sameSchedule && differentId;\n      });\n      this.set('routeOptions', routes);\n      return routes;\n    },\n\n    selectOverrideSolution() {\n      const route = this.get('overrideSelectedRoute');\n      const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n      const routeId = parseInt(route.get('id'), 10);\n      const routeName = route.get('name');\n      const trips = this.get('trips');\n      const tripIds = trips.map(trip => trip.id);\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n      const store = this.get('store');\n      const pickTime = (0, _moment.default)(this.get('overridePickTime')).format('YYYY-MM-DD HH:mm:ssZ'); // clear error message\n\n      this.set('errorText');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      if (previousSelectedTripProvider.get('isBrokerProviderType')) {\n        const selectedRoute = store.peekRecord('route', routeId);\n        this.set('currentSolutionRoute', selectedRoute);\n        this.populateRoute.perform(this.get('currentSolutionRoute.id'));\n        return;\n      }\n\n      this.cursorWait();\n      this.get('fetchManualSolutionsTask').perform(trips, pickTime, routeId).then(solutionData => {\n        // reset stops table data\n        this.get('solutionImpactTable').setRows([]); // give it a bit of time for everything to get loaded to ember store\n\n        Ember.run.later(() => {\n          this.prepareOverrideSolutionPreviewTable(solutionData);\n        }, 500);\n        this.cursorDefault();\n      }).catch(err => {\n        this.catchBlockManualSolutionsTask(err.results);\n\n        if (!Ember.isEmpty(err) && !Ember.isEmpty(err.results)) {\n          const reason = err.results || err.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        this.get('notifications').warning(`Trips ${tripIds} cannot be transferred to route ${routeName}`);\n        this.cursorDefault();\n      });\n    },\n\n    /**\n     * @param {Object} err\n     * @param {Number} routeId\n     * @returns {String}\n     */\n    catchBlockManualSolutionsTask(err) {\n      // if the side drawer have been close while doing fetch\n      if (this.get('isSolutionsTaskCanceled')) return null; // Try to be as robust as possible.  Log an error to console for discovery,\n      // but just use an empty solution set to unblock manually transferring\n\n      console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err)}`); // eslint-disable-line no-console\n\n      if (!Ember.isEmpty(err) && !Ember.isEmpty(err.payload)) {\n        const reason = err.payload.message || err.payload.detail || '* Error getting hypo trip transfer.';\n        this.set('errorText', `* ${reason}`);\n      } else {\n        this.set('errorText', '* Error getting hypo trip transfer.');\n      }\n\n      this.cursorDefault();\n      return null;\n    },\n\n    /**\n     * NYAAR-19407: fetch ManualSolution for overrider selected route\n     */\n    fetchManualSolutionsTask: (0, _emberConcurrency.task)(function* (trips, pickTime, routeId) {\n      const trip = trips.firstObject;\n      const schedule = trip.get('schedule') ? trip.get('schedule') : null;\n      const tripIds = trips.map(currTrip => {\n        return currTrip.get('id') ? parseInt(currTrip.get('id'), 10) : null;\n      });\n      const operationData = {\n        hypo: true,\n        tripIds: tripIds,\n        routeId: routeId,\n        transferTime: pickTime\n      };\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      const {\n        jsonData\n      } = yield this.createScheduleAsyncOperation.perform(schedule, 'blockTransfer', options);\n      const result = jsonData;\n\n      if (result.attributes.state === 'failure') {\n        throw result.attributes;\n      }\n\n      if (!Ember.isEmpty(result.attributes)) {\n        return this.prepareOverrideSolutionData(result);\n      }\n    }).keepLatest(),\n\n    /**\n     * NYAAR-19407: for prepare overrider solutionData\n     * @param {Object} result\n     * @returns {Object}\n     */\n    prepareOverrideSolutionData(result) {\n      const store = this.get('store');\n      const resultData = JSON.parse(result.attributes.results).trips.data;\n      const routeBreakData = JSON.parse(result.attributes.results).routeBreaks.data;\n      const resultInculudes = JSON.parse(result.attributes.results).trips.included;\n      const promiseTime = resultData.firstObject.attributes.promiseTime;\n      const tripStops = resultInculudes.filter(include => include.type === 'tripStop');\n      const currentTrip = this.get('trip');\n      const currentTripRider = currentTrip.get('rider');\n      const currentRouteSolution = this.get('trip.route');\n      const stops = [];\n      this.set('currentRouteSolution', currentRouteSolution);\n      tripStops.forEach(stop => {\n        let riderId = '';\n        const tripStop = store.peekRecord('tripStop', stop.id);\n        const routeId = tripStop ? tripStop.get('route.id') : '';\n        const plannedEta = stop.attributes.plannedEta;\n        if (tripStop) riderId = tripStop.get('trip.rider.id');\n        stops.push({\n          id: stop.id,\n          plannedRouteOrdinal: stop.attributes.plannedRouteOrdinal,\n          plannedEta,\n          trip: currentTrip,\n          computedPromiseTime: promiseTime,\n          computedApptTime: currentTrip.get('segment.anchor') === DROP_STOP_TYPE ? currentTrip.get('segment.leg.requestTime') : '',\n          lastName: currentTripRider.get('lastName'),\n          simpleAddress: currentTrip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n          locality: currentTrip.get('pick.segmentStop.place.address.locality'),\n          status: stop.attributes.hasOwnProperty('dropStatus') ? stop.attributes.dropStatus : stop.attributes.pickStatus,\n          routeId,\n          routeBreakData,\n          riderId\n        });\n      });\n      const groupedStops = this.prepareGroupStops(resultData, stops);\n      return this.prepareTripSolutionData(resultData, groupedStops, promiseTime, stops);\n    },\n\n    fetchRecord: (0, _emberConcurrency.task)(function* (model, riderId, include) {\n      yield this.get('store').findRecord(model, riderId, include);\n    }),\n\n    deselectSolution() {\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      this.set('overrideErrorText', '');\n    },\n\n    actions: {\n      onColumnSolutionClick(column) {\n        this.sortSolutionPreview(column);\n      },\n\n      onColumnImpactClick(column) {\n        const trips = this.get('trips');\n        const tripIds = trips.map(trip => trip.id);\n        this.sortImpactPreview(column, tripIds);\n        this.set('currentSortImpactPreview', column);\n      },\n\n      onSaveClick() {\n        this.onTransferTripSave();\n      },\n\n      onRefreshClick() {\n        this.set('overrideSelectedProvider', null);\n        this.set('overrideSelectedRoute', null);\n        this.set('pickTime');\n        this.set('overridePickTime');\n        this.set('override', false); // eslint-disable-next-line new-cap\n\n        this.set('solutions', Ember.A([]));\n        this.get('solutionImpactTable').setRows([]);\n        this.get('solutionPreviewTable').setRows([]);\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.setOverrideInitialData();\n        this.setupSolutions();\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState'); // const bulkTripTransfer = this.get('bulkTripTransfer');\n\n        const overrideSelectedProvider = this.get('overrideSelectedProvider');\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const solutionPreviewTable = this.get('solutionPreviewTable');\n        const pickTime = this.get('pickTime');\n        const overridePickTime = this.get('overridePickTime');\n        const solutions = this.get('solutions');\n        const solutionImpactTable = this.get('solutionImpactTable');\n        const currentRouteSolution = this.get('currentRouteSolution');\n        const override = this.get('override'); // save current manual settings\n\n        currentState = {\n          overrideSelectedProvider,\n          overrideSelectedRoute,\n          pickTime,\n          overridePickTime,\n          solutionPreviewTable,\n          solutions,\n          solutionImpactTable,\n          currentRouteSolution,\n          override\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onChangeProvider(provider) {\n        // clear selected route, pick order and drop order\n        this.set('overrideSelectedRoute', null);\n        this.set('pickTime');\n        this.set('overridePickTime');\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n        this.set('overrideSelectedProvider', provider);\n      },\n\n      onChangeRoute(route) {\n        // clear selected pick order and drop time\n        this.set('pickTime');\n        this.set('overridePickTime');\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n        this.set('overrideSelectedRoute', route);\n      },\n\n      onChangePickTime(value) {\n        const deselectSolution = this.get('deselectSolution').bind(this);\n        this.set('pickTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('overridePickTime');\n          deselectSolution();\n          return;\n        }\n\n        const pickTimeMoment = this.convertToRegularDateTime(value);\n        this.set('overridePickTime', pickTimeMoment);\n        this.buildTripList();\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n        this.selectOverrideSolution();\n      },\n\n      onSolutionRowClick(row\n      /*, event */\n      ) {\n        const routeId = row.get('routeId'); // Reset the override\n\n        this.set('selectedOverrideSolutionId');\n        this.selectTableSolutionRow(routeId);\n      },\n\n      selectSolutionRouteTab() {\n        const selectedRouteId = this.get('selectedSolutionId');\n        this.set('selectedImpactView', 'destination');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      selectCurrentRouteTab() {\n        const selectedRouteId = this.get('currentRoute.id');\n        this.set('selectedImpactView', 'current');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      refreshProviderAutoTransfer() {\n        this.setProperties({\n          override: false,\n          overrideSelectedProvider: null,\n          overrideSelectedRoute: null,\n          currentSolutionRoute: null,\n          selectedSolutionId: null,\n          pickTime: null\n        }); // eslint-disable-next-line new-cap\n\n        this.set('solutions', Ember.A([]));\n        this.get('solutionImpactTable').setRows([]);\n        this.get('solutionPreviewTable').setRows([]);\n\n        if ((0, _moment.default)(this.get('trip.pick.plannedEta')).isAfter((0, _moment.default)())) {\n          this.setupSolutions();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.solutionImpactColumns = _exports.solutionColumns = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const solutionImpactColumns = [{\n    label: 'Trip ID',\n    sortType: 'number',\n    valuePath: 'id',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '75px'\n  }, {\n    label: 'Last Name',\n    sortType: 'text',\n    valuePath: 'lastName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '90px'\n  }, {\n    label: 'Address',\n    sortType: 'text',\n    valuePath: 'simpleAddress',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '150px'\n  }, {\n    label: 'City',\n    sortType: 'text',\n    valuePath: 'city',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '100px'\n  }, {\n    label: 'Stop',\n    sortType: 'text',\n    valuePath: 'stop',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'ETA',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'plannedEta',\n    cellComponent: 'table/cells/trip-eta',\n    cellClassNames: 'ETA',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'Promise Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedPromiseTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    format: 'HH:mm',\n    width: '115px'\n  }, {\n    label: 'Appt Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedApptTime',\n    cellComponent: 'table/cells/date-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    format: 'HH:mm',\n    width: '100px'\n  }, {\n    label: 'Stop Break Ord',\n    sortType: 'number',\n    valuePath: 'plannedRouteOrdinal',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '120px'\n  }];\n  _exports.solutionImpactColumns = solutionImpactColumns;\n  const solutionColumns = [{\n    width: '40px',\n    resizable: false,\n    cellComponent: 'side-drawer/trip-transfer/radio-button'\n  }, {\n    label: 'Options',\n    sortType: 'number',\n    valuePath: 'routeName',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Provider',\n    sortType: 'text',\n    valuePath: 'providerName',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }];\n  _exports.solutionColumns = solutionColumns;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"dYSKNWaH\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\",\\\"route\\\",\\\"provider\\\",\\\"trip\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"schedulingTrip-transfer-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"onShrinkClick\\\",\\\"onRefreshClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"schedulingTrip-transfer-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L15:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L16:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container g-schedule-trip-panel\\\"],[11,\\\"style\\\",\\\"overflow-x: hidden;\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"trips\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Status:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"otpLabel\\\"]],false],[0,\\\" \\\"],[1,[22,8,[\\\"otpValueWithSign\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promise Time:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"formattedScheduledPromiseTime\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"vehicle\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Status:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"\\\"],[9],[1,[27,\\\"capitalize\\\",[[23,[\\\"currentRoute\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"status\\\"]]],null],false],[10],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Request Time:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[22,8,[\\\"booking\\\",\\\"firstLeg\\\",\\\"requestTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route Name:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"rider\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Time:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[22,8,[\\\"pick\\\",\\\"plannedEta\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"driver\\\",\\\"driverId\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[22,8,[\\\"driver\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Time:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[22,8,[\\\"drop\\\",\\\"plannedEta\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Anchor:\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"if\\\",[[22,8,[\\\"anchorStop\\\",\\\"isPick\\\"]],\\\"pick\\\",\\\"drop\\\"],null],false],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L62:C3) \\\"],null]],[[\\\"isCollapsible\\\"],[false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[9],[7,\\\"input\\\"],[12,\\\"checked\\\",[21,\\\"override\\\"]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isAnyManualSchedulingMode\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"override\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" Override\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Manually select a route to bulk transfer the trip. Route will be added to \\\\\\\"Solution Preview\\\\\\\".\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"overrideErrorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"overrideErrorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"g-side-drawer-panel-selector \\\",[27,\\\"if\\\",[[23,[\\\"isBulkTripTransfer\\\"]],\\\"bulk-trip\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label1\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideProviderOptions\\\"]],[23,[\\\"isNotOverride\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedProvider\\\"]],\\\"Select provider\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label1\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideRouteOptions\\\"]],[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedRoute\\\"]],\\\"Select Route\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRoute\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label2\\\"],[9],[0,\\\"Pickup Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"trip-transfer-pickup-time\\\",[23,[\\\"pickTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[23,[\\\"canDisableOverrideOrderSectionFields\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickTime\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L114:C4) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Solution Preview\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"provider-solution-preview\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\" \\\\n        \\\"],[1,[27,\\\"form-components/multi-select-dropdown\\\",null,[[\\\"enumList\\\",\\\"allSelectedTitle\\\",\\\"multipleSelectedTitle\\\",\\\"isObjectDisabled\\\"],[[23,[\\\"providersList\\\"]],\\\"All Providers\\\",\\\"Multiple\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isAnyManualSchedulingMode\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isAnyManualSchedulingMode\\\"]]],null]],[11,\\\"class\\\",\\\"provider-solution-button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"refreshProviderAutoTransfer\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"solution-preview-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionPreviewTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,10]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L138:C12) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnSolutionClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L145:C13) \\\"],null]],[[\\\"canSelect\\\",\\\"tableActions\\\",\\\"multiSelect\\\",\\\"onRowClick\\\"],[false,[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L153:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionPreviewTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L159:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L168:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Alternate between before and after to see how trip transfer affects the route\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"trip-transfer-tabs\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"selectedSolutionId\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Route \\\"],[1,[23,[\\\"selectedSolutionRoute\\\",\\\"name\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"selectSolutionRouteTab\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"currentRoute\\\",\\\"id\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Previous Route\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentRouteTab\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-impact-bar\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"toggle-switch\\\",null,[[\\\"toggleProperty\\\",\\\"offValue\\\",\\\"offLabel\\\",\\\"onValue\\\",\\\"onLabel\\\"],[[23,[\\\"selectedImpactPeriod\\\"]],\\\"before\\\",\\\"Before\\\",\\\"after\\\",\\\"After\\\"]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"impact\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"impactScore\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"impact-text\\\"],[9],[0,\\\"\\\\n            Impact:\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[12,\\\"class\\\",[28,[\\\"impact-score \\\",[21,\\\"impactScoreType\\\"]]]],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper scheduling-trip-transfer\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionImpactTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L201:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnImpactClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L208:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\"],[false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L214:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L220:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchVehiclesTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionImpactTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs' @ L226:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedImpactView\\\"]],\\\"current\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                Impact to the previous route is not available.\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                No Solutions Found.\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"The trips will be transferred to the route, with its stops placed at the indicated stop order positions.\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/scheduling-bulk-trip-transfer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-trip-transfer/component\", [\"exports\", \"ember-light-table\", \"ember-concurrency\", \"adept-iq/utils/batch-load-riders\", \"adept-iq/config/environment\", \"lodash\", \"adept-iq/config/placeholders\", \"moment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/side-drawer/scheduling-trip-transfer/config\", \"adept-iq/config/mapped-permIds\", \"adept-iq/classes/impact-stop\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/mixins/table-row-value\"], function (_exports, _emberLightTable, _emberConcurrency, _batchLoadRiders, _environment, _lodash, _placeholders, _moment, _unwrapProxy, _config, _mappedPermIds, _impactStop, _asyncScheduleOperation, _tableRowValue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROUTE_INCLUDES = ['trips', 'trips.pick', 'trips.pick.segmentStop', 'trips.pick.segmentStop.place', 'trips.pick.segmentStop.place.address', 'trips.drop', 'trips.drop.segmentStop', 'trips.drop.segmentStop.place', 'trips.drop.segmentStop.place.address', 'trips.segment', 'trips.segment.leg', 'trips.segment.leg.rider', 'routeBreaks'];\n  const PICK_STOP_TYPE = 'pick';\n  const DROP_STOP_TYPE = 'drop';\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, _tableRowValue.default, {\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    //placeholders\n    TIME_PLACEHOLDER: _placeholders.TIME_PLACEHOLDER,\n    // passed by the side drawer container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    currentState: null,\n    solutionPreviewTable: null,\n    solutionImpactTable: null,\n    currentSortImpactPreview: null,\n    activeTabRouteId: null,\n    selectedSolutionId: null,\n    providersList: null,\n    currentRouteSolution: null,\n    solutions: null,\n    selectedImpactPeriod: 'after',\n    routeOverrideOptions: null,\n    overrideSelectedRoute: null,\n    override: false,\n    initialLoadedSolutionIds: null,\n    overrideSelectedProvider: null,\n    overrideSelectedPickOrder: null,\n    overrideSelectedDropOrder: null,\n    overridePickTime: null,\n    overrideDropTime: null,\n    pickTime: '',\n    dropTime: '',\n    errorText: null,\n    overrideErrorText: null,\n    title: 'Transfer Trip',\n    rowComponent: 'table/rows/colored-row',\n    canShrink: Ember.computed.not('isSolutionsTaskRunning'),\n    trip: Ember.computed.readOnly('stackFrame.options.trip'),\n    brokerEligible: Ember.computed.readOnly('trip.segment.leg.brokerEligible'),\n    pickRouteOrdinals: Ember.computed.alias('overridePickOrderOptions'),\n    previousSelectedTripProvider: Ember.computed.readOnly('trip.provider'),\n    isManualSchedulingMode: Ember.computed.readOnly('trip.isManualSchedulingMode'),\n    isCallback: Ember.computed.readOnly('trip.isCallback'),\n    isWaitlisted: Ember.computed.readOnly('trip.isWaitlisted'),\n    //passed  by the workspace service\n    tripStops: null,\n    //Trips could be an array sometimes\n    formattedPickTime: Ember.computed('trip.pick.plannedEta', function () {\n      const pickTime = this.get('trip.pick.plannedEta');\n\n      if (!_lodash.default.isNil(pickTime)) {\n        return (0, _moment.default)(pickTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n    }),\n    formattedDropTime: Ember.computed('trip.drop.plannedEta', function () {\n      const dropTime = this.get('trip.drop.plannedEta');\n\n      if (!_lodash.default.isNil(dropTime)) {\n        return (0, _moment.default)(dropTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n    }),\n    formattedPromiseTime: Ember.computed('trip.promiseTime', function () {\n      const promiseTime = this.get('trip.promiseTime');\n\n      if (!_lodash.default.isNil(promiseTime)) {\n        return (0, _moment.default)(promiseTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n    }),\n    formattedRequestTime: Ember.computed('trip.segment.leg.requestTime', function () {\n      const requestTime = this.get('trip.segment.leg.requestTime');\n\n      if (!_lodash.default.isNil(requestTime)) {\n        return (0, _moment.default)(requestTime).format(_environment.default.dateTimeFormat.dateTimeMoment);\n      }\n    }),\n    isCallbackWaitlistedAndManual: Ember.computed('isCallback', 'isManualSchedulingMode', function () {\n      const isCallback = this.get('isCallback');\n      const isWaitlisted = this.get('isWaitlisted');\n      const isManualSchedulingMode = this.get('isManualSchedulingMode');\n      return (isCallback || isWaitlisted) && isManualSchedulingMode;\n    }),\n    canSave: Ember.computed('selectedSolutionId', 'overrideSelectedDropOrder', 'overrideErrorText', 'overrideSelectedProvider', function () {\n      const selectedSolutionId = this.get('selectedSolutionId');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n      const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n      const overrideErrorText = this.get('overrideErrorText');\n\n      if (!(0, _lodash.isEmpty)(selectedSolutionId) && (0, _lodash.isEmpty)(overrideErrorText)) {\n        return true;\n      }\n\n      if (overrideSelectedProvider && overrideSelectedProvider.get('isBrokerProviderType') || previousSelectedTripProvider && previousSelectedTripProvider.get('isBrokerProviderType') && !(0, _lodash.isEmpty)(overrideSelectedDropOrder)) {\n        return true;\n      }\n\n      return false;\n    }),\n    canDisableOverrideRouteSectionFields: Ember.computed('isNotOverride', 'overrideSelectedProvider', function () {\n      const isNotOverride = this.get('isNotOverride');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n\n      if (isNotOverride || overrideSelectedProvider && overrideSelectedProvider.get('isBrokerProviderType')) {\n        return true;\n      }\n\n      return false;\n    }),\n    currentRoute: Ember.computed('trip.route', function () {\n      let route = '';\n      route = this.get('trip.route');\n\n      if (!route) {\n        return this.get('noRoute');\n      }\n\n      return route;\n    }).readOnly(),\n\n    async populateRoutesList(scheduleId) {\n      let backendFetch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      let scheduleRecord = null;\n      let routes = null;\n\n      if (backendFetch) {\n        scheduleRecord = await this.get('store').findRecord('schedule', scheduleId, {\n          include: 'routes'\n        });\n        await (0, _emberConcurrency.timeout)(500);\n        routes = scheduleRecord.get('routes').toArray();\n      } else {\n        routes = await this.get('store').peekAll('route').toArray();\n        routes = routes.filter(route => route.get('schedule.id') === scheduleId);\n      }\n\n      return routes;\n    },\n\n    overrideRouteOptions: Ember.computed('override', 'currentRoute', 'overrideSelectedProvider', async function () {\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const sourceRouteId = this.get('currentRoute.id');\n      const sourceTripScheduleId = this.get('trip.schedule.id');\n      const routes = await this.populateRoutesList(sourceTripScheduleId, false);\n\n      if (Ember.isNone(routes)) {\n        return [];\n      } //load routes included model records to build the data for solution preview\n\n\n      await routes.reduce((acc, route) => {\n        return acc.then(async () => {\n          return this.get('store').findRecord('route', route.get('id'), {\n            include: ROUTE_INCLUDES.join(',')\n          });\n        });\n      }, Promise.resolve());\n      return (0, _lodash.sortBy)(routes.filter(route => {\n        const routeScheduleId = route.get('schedule.id');\n        const routeId = route.get('id');\n        let sameProvider = false;\n\n        if (!(0, _lodash.isEmpty)(overrideSelectedProvider)) {\n          sameProvider = overrideSelectedProvider.id === route.get('provider.id');\n        }\n\n        const sameSchedule = routeScheduleId === sourceTripScheduleId;\n        const differentId = routeId !== sourceRouteId;\n        return sameSchedule && differentId && sameProvider;\n      }), route => route.name);\n    }),\n    overridePickOrderOptions: Ember.computed('overrideSelectedRoute', async function () {\n      const overrideSelectedRoute = this.get('overrideSelectedRoute');\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      let routeOrdinals = [];\n\n      if (!(0, _lodash.isEmpty)(overrideSelectedRoute)) {\n        await coreEntityPopulator.populateRtsRoute(overrideSelectedRoute.id, {});\n        const trips = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.trips'));\n        const routeBreaks = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.routeBreaks'));\n        const totalStopsWithBreakCount = trips.length * 2 + routeBreaks.length;\n        routeBreaks.forEach(routeBreak => {\n          routeOrdinals.push(routeBreak.get('scheduleOrdinal'));\n        });\n        trips.forEach(trip => {\n          const pick = (0, _unwrapProxy.unwrapProxy)(trip.get('pick'));\n          const drop = (0, _unwrapProxy.unwrapProxy)(trip.get('drop'));\n          routeOrdinals.push(pick.get('scheduleOrdinal'), drop.get('scheduleOrdinal'));\n        });\n        routeOrdinals = (0, _lodash.orderBy)(routeOrdinals, ordinal => {\n          return ordinal;\n        }, ['asc']);\n        routeOrdinals.push(totalStopsWithBreakCount + 1);\n\n        if (routeOrdinals.length === 0) {\n          routeOrdinals.push(1);\n        }\n\n        return routeOrdinals.map(ord => ord.toString());\n      }\n\n      return routeOrdinals;\n    }),\n    overrideDropOrderOptions: Ember.computed('overrideSelectedPickOrder', async function () {\n      const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n      let routeOrdinals = await this.get('pickRouteOrdinals');\n      routeOrdinals = routeOrdinals.map(ord => parseInt(ord, 10));\n\n      if (!(0, _lodash.isNull)(overrideSelectedPickOrder) && !(0, _lodash.isEmpty)(routeOrdinals)) {\n        routeOrdinals = routeOrdinals.filter(ordinal => {\n          if (ordinal > overrideSelectedPickOrder) {\n            return ordinal;\n          }\n        });\n\n        if (routeOrdinals.length > 0) {\n          routeOrdinals.push(Math.max(...routeOrdinals) + 1);\n        }\n\n        if (routeOrdinals.length === 0) {\n          return [overrideSelectedPickOrder + 1].map(ord => ord.toString());\n        }\n\n        return routeOrdinals.map(ord => ord.toString());\n      }\n\n      return [];\n    }),\n    isSolutionsTaskRunning: Ember.computed('fetchSolutionsTask.isRunning', 'fetchManualSolutionsTask.isRunning', function () {\n      return this.get('fetchSolutionsTask.isRunning') || this.get('fetchManualSolutionsTask.isRunning');\n    }),\n    isSolutionsTaskCanceled: Ember.computed('fetchSolutionsTask.lastCanceled', 'fetchManualSolutionsTask.lastCanceled', function () {\n      return Ember.isPresent(this.get('fetchSolutionsTask.lastCanceled')) || Ember.isPresent(this.get('fetchManualSolutionsTask.lastCanceled'));\n    }),\n    isNotOverride: Ember.computed('override', function () {\n      return !this.get('override');\n    }),\n    isOverrideChecked: Ember.observer('override', function () {\n      const override = this.get('override');\n      const deselectSolution = this.get('deselectSolution').bind(this);\n\n      if (override) {\n        this.set('selectedSolutionId');\n        this.set('selectedOverrideSolutionId');\n        deselectSolution();\n      }\n\n      if (!override) this.set('overrideErrorText', '');\n    }),\n    currentRouteImpact: Ember.computed('currentRouteSolution', function () {\n      const routeId = this.get('trip.route.id');\n      const currentTripStops = this.get('trip.stops').map(stop => stop.id);\n      const solutionStops = this.get('solutions') ? this.get('solutions')[0].stops : [];\n      const currentStops = solutionStops.filter(stop => stop.routeId === routeId);\n      const filteredCurrentStops = currentStops.filter(stop => !currentTripStops.includes(stop.id));\n\n      if (Ember.isNone(this.get('currentRouteSolution'))) {\n        const impact = Ember.Object.create({\n          before: this.buildImpactStops(currentStops, 'before')\n        });\n        return impact;\n      }\n\n      const impact = Ember.Object.create({\n        before: this.buildImpactStops(currentStops, 'before'),\n        after: this.buildImpactStops(filteredCurrentStops, 'after')\n      }); //sorting stops by 'plannedEta'\n\n      const impactBeforeStops = this.sortingStopsByETA(impact.before.stops);\n      const impactAfterStops = this.sortingStopsByETA(impact.after.stops);\n      const {\n        impactBeforeWithBrStops,\n        impactAfterWithBrStops\n      } = this.setGarageDataAndSequenceStops(impactBeforeStops, impactAfterStops); //replacing the impact before and after stops, after adding breaks and garage stops\n\n      impact.before.stops = impactBeforeWithBrStops;\n      impact.after.stops = impactAfterWithBrStops;\n      return impact;\n    }),\n    observeSelectImpactPeriod: Ember.observer('selectedImpactPeriod', function () {\n      const period = this.get('selectedImpactPeriod');\n      const selectedRouteId = this.get('activeTabRouteId'); // TODO: Can the table rows be updated without an observer?\n\n      this.get('solutionImpactTable').setRows(this.get(`impact.${period}.stops`)); // revaluate impact\n\n      this.chooseImpactByRoute(selectedRouteId);\n    }),\n\n    selectedRouteImpact() {\n      const selectedRouteId = this.get('currentSolutionRoute.id');\n      const solutions = this.get('solutions') || [];\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n      const transferTrips = this.get('trip.stops').map(stop => stop.id);\n      const filteredCurrentTripStops = selectedSolution.stops.filter(tripStop => transferTrips.includes(tripStop.id));\n      const filteredSolutionTrip = selectedSolution.tripStops.filter(tripStop => !transferTrips.includes(tripStop.id));\n      const filteredSelectedSolution = [...filteredCurrentTripStops, ...filteredSolutionTrip];\n      const impact = Ember.Object.create({\n        before: this.buildImpactStops(filteredSolutionTrip, 'before'),\n        after: this.buildImpactStops(filteredSelectedSolution, 'after')\n      }); //sorting stops by 'plannedEta'\n\n      const impactBeforeStops = this.sortingStopsByETA(impact.before.stops);\n      const impactAfterStops = this.sortingStopsByETA(impact.after.stops);\n      const {\n        impactBeforeWithBrStops,\n        impactAfterWithBrStops\n      } = this.setGarageDataAndSequenceStops(impactBeforeStops, impactAfterStops); //replacing the impact before and after stops, after adding breaks and garage stops\n\n      impact.before.stops = impactBeforeWithBrStops;\n      impact.after.stops = impactAfterWithBrStops;\n      return impact;\n    },\n\n    /**\n     * NYAAR-19582: Route ID is displayed next to the Route tab in the View Impact section on selecting route\n     */\n    selectedSolutionRoute: Ember.computed('solutions', 'selectedSolutionId', function () {\n      const solutions = this.get('solutions');\n      const selectedSolutionId = this.get('selectedSolutionId'); //if there is solutions and selectedSolutionId in solution table no routeId displayed\n\n      if ((0, _lodash.isEmpty)(solutions) || (0, _lodash.isEmpty)(selectedSolutionId)) return null;\n      const route = this.get('store').peekRecord('route', selectedSolutionId);\n      return route;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const solutionImpactTable = new _emberLightTable.default(_config.solutionImpactColumns);\n      const solutionPreviewTable = new _emberLightTable.default(_config.solutionColumns);\n      this.set('solutionImpactTable', solutionImpactTable); // eslint-disable-next-line new-cap\n\n      this.set('solutions', Ember.A([]));\n      this.set('solutionPreviewTable', solutionPreviewTable);\n      this.setOverrideProviderOptions();\n      this.setOverrideInitialData();\n    },\n\n    setOverrideInitialData() {\n      const anchor = this.get('trip.segment.anchor');\n      const pickTimeMoment = (0, _moment.default)(this.get('trip.promiseTime'));\n      let dropTimeMoment = (0, _moment.default)(this.get('trip.promiseTime')).add(1, 'minute');\n\n      if (anchor !== 'pick') {\n        const serviceWindowDropWindowEnd = this.get('trip.segment.leg.serviceWindow.dropWindowEnd');\n        const calcDropTimeMoment = (0, _moment.default)(this.get('trip.segment.leg.requestTime')).add(serviceWindowDropWindowEnd, 'minute');\n\n        if (calcDropTimeMoment.isAfter(pickTimeMoment)) {\n          dropTimeMoment = calcDropTimeMoment;\n        }\n      }\n\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('trip.provider'));\n      this.set('pickTime', pickTimeMoment.format('HHmm'));\n      this.set('dropTime', dropTimeMoment.format('HHmm'));\n      this.set('overridePickTime', this.convertToRegularDateTime({\n        masked: pickTimeMoment.format('HH:mm')\n      }));\n      this.set('overrideDropTime', this.convertToRegularDateTime({\n        masked: dropTimeMoment.format('HH:mm')\n      }));\n      this.set('overrideSelectedProvider', provider);\n      this.set('overrideSelectedPickOrder');\n      this.set('overrideSelectedDropOrder');\n    },\n\n    setOverrideProviderOptions() {\n      const overrideProviderOptions = this.get('store').peekAll('provider').filter(provider => {\n        if (provider.get('isInActive')) {\n          return false;\n        }\n\n        return provider.get('userCanAccessProvider');\n      });\n      this.set('overrideProviderOptions', overrideProviderOptions);\n    },\n\n    async didInsertElement() {\n      const isManualSchedulingMode = this.get('isManualSchedulingMode');\n\n      this._super(...arguments); // side panel width just for trip transfer\n\n\n      Ember.$('.side-drawer-modal').css('min-width', '1030px');\n      this.loadCurrentState();\n      await this.setupProvidersList();\n      await this.populateRoutesList(this.get('trip.schedule.id'), true);\n      this.set('override', isManualSchedulingMode);\n\n      if (!isManualSchedulingMode && (0, _moment.default)(this.get('trip.pick.plannedEta')).isAfter((0, _moment.default)())) {\n        this.setupSolutions();\n      }\n    },\n\n    /**\n     * NYAAR-19727: sorting Stops by ETA value\n     * @param {*Array} stops\n     * @returns {*Array}\n     */\n    sortingStopsByETA(stops) {\n      return stops.sort((stop1, stop2) => _moment.default.utc(stop1.plannedEta).diff(_moment.default.utc(stop2.plannedEta)));\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('overrideSelectedProvider', currentState.overrideSelectedProvider);\n        this.set('overrideSelectedRoute', currentState.overrideSelectedRoute);\n        this.set('overrideSelectedPickOrder', currentState.overrideSelectedPickOrder);\n        this.set('overrideSelectedDropOrder', currentState.overrideSelectedDropOrder);\n        this.set('solutionPreviewTable', currentState.solutionPreviewTable);\n        this.set('pickTime', currentState.pickTime);\n        this.set('overridePickTime', currentState.overridePickTime);\n        this.set('dropTime', currentState.dropTime);\n        this.set('overrideDropTime', currentState.overrideDropTime);\n        this.set('override', currentState.override);\n\n        if (currentState.currentRouteSolution) {\n          this.set('currentRouteSolution', currentState.currentRouteSolution);\n        }\n      }\n    },\n\n    /**\n     * NYAAR-20239: fetchRider record form tripStops\n     */\n    fetchRiderRecord: (0, _emberConcurrency.task)(function* (currentStops) {\n      const store = this.get('store');\n      const filteredCurrentStops = currentStops.map(stop => store.peekRecord('trip-stop', stop.id)).filter(stop => !stop.get('trip.rider.lastName') && stop.get('trip.rider.id')); // batched: one in(riderId,(…)) query instead of N per-rider forced fetches\n\n      yield (0, _batchLoadRiders.default)(this.get('store'), filteredCurrentStops.map(stop => stop.get('trip.rider.id')));\n    }),\n\n    /**\n     * NYAAR-20239: filter rider from selectedRoutes\n     */\n    async filterRiderFromSelectedRoutes() {\n      const routeId = this.get('trip.route.id');\n      const selectedRouteId = this.get('currentSolutionRoute.id');\n      const solutions = this.get('solutions') || [];\n      const solutionStops = this.get('solutions') ? this.get('solutions')[0].stops : [];\n      const currentStops = solutionStops.filter(stop => stop.routeId === routeId);\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n      const transferTrips = this.get('trip.stops').map(stop => stop.id);\n      const filteredCurrentTripStops = selectedSolution.stops.filter(tripStop => transferTrips.includes(tripStop.id));\n      const filteredSolutionTrip = selectedSolution.tripStops.filter(tripStop => !transferTrips.includes(tripStop.id));\n      const filteredSelectedSolution = [...filteredCurrentTripStops, ...filteredSolutionTrip, ...currentStops];\n      await this.fetchRiderRecord.perform(filteredSelectedSolution);\n    },\n\n    /**\n     * NYAAR-19407: to build impactStops for impact table\n     * @param {Object} stop\n     * @param {*Object} tripStop\n     * @returns {*Object}\n     */\n    buildImpactStops(currentStops, impact) {\n      const store = this.get('store');\n      const isBeforeImpact = impact === 'before';\n      return {\n        stops: currentStops.map(stop => {\n          const tripStop = store.peekRecord('trip-stop', stop.id);\n          const address = tripStop.get('segmentStop.place.address');\n          const segment = tripStop.get('trip.segment');\n          const trip = tripStop.get('trip');\n          const type = tripStop.type;\n          const plannedSlackTime = isBeforeImpact ? tripStop.get('plannedSlackTime') : stop.slack;\n          let city = tripStop.city;\n\n          if (Ember.isBlank(city)) {\n            city = address ? address.get('subLocality') : '';\n          }\n\n          if (Ember.isBlank(city)) {\n            city = address ? address.get('region') : '';\n          } //NYAAR-20339-Appt time should only display for drop anchored trips (i.e, stop type is drop)\n\n\n          const computedApptTime = type === DROP_STOP_TYPE && segment.get('anchor') === DROP_STOP_TYPE ? segment.get('leg.requestTime') : '';\n          return _impactStop.default.create({\n            id: tripStop.trip.id,\n            tripId: tripStop.trip.tripId,\n            polyline: null,\n            mrt: null,\n            plannedRouteOrdinal: stop.plannedRouteOrdinal,\n            plannedEta: isBeforeImpact ? tripStop.get('plannedEta') : stop.plannedEta,\n            stop: type,\n            stopStatus: stop.status,\n            computedPromiseTime: type === DROP_STOP_TYPE ? '' : trip.get('promiseTime'),\n            computedApptTime: computedApptTime,\n            lastName: trip.get('rider.lastName'),\n            simpleAddress: address.get('streetNumberAndAddress'),\n            slack: plannedSlackTime,\n            city,\n            tripStop,\n            routeBreakData: stop.routeBreakData || []\n          });\n        })\n      };\n    },\n\n    /**\n     * NYAAR-19407: sets routeBreaks, pullOutGarage, pullInGarage and sequences the stops for impact table\n     * @param {Array} impactBeforeStops\n     * @param {Array} impactAfterStops\n     */\n    setGarageDataAndSequenceStops(impactBeforeStops, impactAfterStops) {\n      const impactBeforeWithBrStops = this.setRouteBreak(impactBeforeStops, 'before');\n      const impactAfterWithBrStops = this.setRouteBreak(impactAfterStops, 'after');\n      this.buildPullOutGarageData(impactAfterWithBrStops, 'after');\n      this.buildPullInGarageData(impactAfterWithBrStops);\n      this.buildPullOutGarageData(impactBeforeWithBrStops, 'before');\n      this.buildPullInGarageData(impactBeforeWithBrStops);\n      this.sequencePlannedRouteOrdinal(impactBeforeWithBrStops);\n      this.sequencePlannedRouteOrdinal(impactAfterWithBrStops);\n      return {\n        impactBeforeWithBrStops,\n        impactAfterWithBrStops\n      };\n    },\n\n    onTransferTrip: (0, _emberConcurrency.task)(function* () {\n      const isCallbackWaitlistedAndManual = this.get('isCallbackWaitlistedAndManual');\n      const schedule = this.get('overrideSelectedRoute.schedule');\n      const routeId = this.get('overrideSelectedRoute.id');\n      const tripId = this.get('trip.id');\n      const trips = this.get('solutionImpactTable.rows') || [];\n      const pickTrip = trips.find(t => t.get('id') === tripId && t.get('stop') === PICK_STOP_TYPE);\n      const dropTrip = trips.find(t => t.get('id') === tripId && t.get('stop') === DROP_STOP_TYPE);\n      const operationType = isCallbackWaitlistedAndManual ? 'scheduleManualTrip' : 'tripTransfer';\n      let result;\n      const operationData = {\n        routeId\n      };\n\n      if (isCallbackWaitlistedAndManual) {\n        operationData.hypo = false;\n        operationData.tripId = tripId ? parseInt(tripId, 10) : null;\n        operationData.pickTime = (0, _moment.default)(pickTrip.get('plannedEta')).format('YYYY-MM-DD HH:mm:ssZ');\n        operationData.dropTime = (0, _moment.default)(dropTrip.get('plannedEta')).format('YYYY-MM-DD HH:mm:ssZ');\n      } else {\n        operationData.tripId = tripId;\n        operationData.pickTime = pickTrip.get('plannedEta');\n        operationData.dropTime = dropTrip.get('plannedEta');\n      }\n\n      try {\n        const options = {\n          operationData,\n          outputResult: true\n        };\n        result = yield this.createScheduleAsyncOperation.perform(schedule, operationType, options);\n\n        if (!result.isJobSuccess) {\n          const responseResult = result.jsonData.attributes.results || '';\n          throw new Error(responseResult);\n        }\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(result);\n    }).drop(),\n\n    resetSolutionTableData() {\n      // reset stops table data\n      this.set('solutionImpactTable.rows', []);\n    },\n\n    calculateDrop() {\n      const tripList = this.get('tripStops');\n      const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n      const overrideDropTime = this.get('overrideDropTime');\n      let previousStop, dropStopIndex;\n\n      for (let i = 0; i < tripList.length; i++) {\n        const trip = tripList[i];\n\n        if (trip.plannedRouteOrdinal >= overrideSelectedDropOrder) {\n          dropStopIndex = i + 1;\n          previousStop = tripList[i - 1];\n          break;\n        }\n      }\n\n      if ((0, _lodash.isEmpty)(previousStop)) {\n        const stop = tripList[overrideSelectedDropOrder - 1];\n\n        if (stop) {\n          previousStop = stop;\n          dropStopIndex = -1;\n        }\n      }\n\n      return {\n        dropTime: overrideDropTime,\n        dropStopIndex\n      };\n    },\n\n    calculatePickOrder() {\n      const tripList = this.get('tripStops');\n      const overridePickTime = this.get('overridePickTime');\n      let pickStop;\n\n      for (let i = 0; i < tripList.length; i++) {\n        const trip = tripList[i]; // eslint-disable-next-line no-undefined\n\n        if (trip.isBreak && (0, _moment.default)(overridePickTime).isBetween(trip.plannedEta, trip.plannedEndEta, undefined, '[)')) {\n          pickStop = trip;\n          break;\n        }\n\n        if ((0, _moment.default)(trip.plannedEta).isAfter(overridePickTime) || (0, _moment.default)(trip.plannedEta).isSame(overridePickTime)) {\n          pickStop = trip;\n          break;\n        }\n      }\n\n      if ((0, _lodash.isEmpty)(pickStop)) {\n        const stop = tripList[tripList.length - 1];\n\n        if (stop) {\n          const plannedEndTime = this.get('overrideSelectedRoute.plannedEndTime');\n          pickStop = {\n            plannedEta: plannedEndTime,\n            plannedRouteOrdinal: stop.plannedRouteOrdinal + 1\n          };\n        }\n      }\n\n      return pickStop && pickStop.plannedRouteOrdinal ? pickStop.plannedRouteOrdinal : 1;\n    },\n\n    calculateDropOrder() {\n      const tripList = this.get('tripStops');\n      const overrideDropTime = this.get('overrideDropTime');\n      let dropStop;\n\n      for (let i = 0; i < tripList.length; i++) {\n        const trip = tripList[i];\n\n        if ((0, _moment.default)(trip.plannedEta).isAfter(overrideDropTime) || (0, _moment.default)(trip.plannedEta).isSame(overrideDropTime)) {\n          dropStop = trip;\n          break;\n        }\n      }\n\n      if ((0, _lodash.isEmpty)(dropStop)) {\n        const stop = tripList[tripList.length - 1];\n\n        if (stop) {\n          const plannedEndTime = this.get('overrideSelectedRoute.plannedEndTime');\n          dropStop = {\n            plannedEta: plannedEndTime,\n            plannedRouteOrdinal: stop.plannedRouteOrdinal + 1\n          };\n        }\n      }\n\n      return dropStop && dropStop.plannedRouteOrdinal ? dropStop.plannedRouteOrdinal + 1 : 1;\n    },\n\n    getPickAndDropDataForSolutionPreview(trip, tripList) {\n      const drop = (0, _unwrapProxy.unwrapProxy)(trip.get('drop'));\n      const pick = (0, _unwrapProxy.unwrapProxy)(trip.get('pick'));\n      const rider = (0, _unwrapProxy.unwrapProxy)(trip.get('rider'));\n      const pickOrdinal = pick.get('scheduleOrdinal') || pick.get('plannedRouteOrdinal');\n      const dropOrdinal = drop.get('scheduleOrdinal') || drop.get('plannedRouteOrdinal');\n      const pickData = {\n        tripId: trip.get('tripId'),\n        plannedRouteOrdinal: pickOrdinal,\n        plannedEta: pick.get('plannedEta'),\n        stopType: 'pick',\n        tripStop: trip.stops,\n        route: trip.route,\n        currentProviderName: trip.currentProviderName,\n        computedPromiseTime: trip.get('promiseTime'),\n        lastName: rider ? rider.get('lastName') : '',\n        simpleAddress: trip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n        locality: trip.get('pick.segmentStop.place.address.locality')\n      };\n      const dropData = {\n        tripId: trip.get('tripId'),\n        plannedRouteOrdinal: dropOrdinal,\n        plannedEta: drop.get('plannedEta'),\n        stopType: 'drop',\n        tripStop: trip.stops,\n        route: trip.route,\n        currentProviderName: trip.currentProviderName,\n        computedPromiseTime: trip.get('promiseTime'),\n        lastName: rider ? rider.get('lastName') : '',\n        simpleAddress: trip.get('drop.segmentStop.place.address.streetNumberAndAddress'),\n        locality: trip.get('drop.segmentStop.place.address.locality')\n      };\n      tripList.push(pickData, dropData);\n    },\n\n    buildTripList() {\n      const trips = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.trips'));\n      const routeBreaks = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.routeBreaks')) || [];\n      let tripList = [];\n\n      if (Ember.isNone(this.get('overrideSelectedRoute'))) {\n        this.set('tripStops', []);\n        return;\n      }\n\n      this.buildPullOutGarageData(tripList, 'before');\n      trips.forEach(trip => {\n        this.getPickAndDropDataForSolutionPreview(trip, tripList);\n      });\n      routeBreaks.forEach(routeBreak => {\n        const breakOrdinal = routeBreak.get('scheduleOrdinal') || routeBreak.get('plannedRouteOrdinal');\n        const plannedEta = (0, _moment.default)(routeBreak.get('plannedEta'));\n        const plannedDuration = routeBreak.get('plannedDuration');\n        const plannedEndEta = plannedEta.add(plannedDuration, 'm').toDate();\n        tripList.push({\n          stop: routeBreak.get('type'),\n          plannedEta: routeBreak.get('plannedEta'),\n          plannedEndEta: plannedEndEta,\n          plannedRouteOrdinal: breakOrdinal,\n          isBreak: true\n        });\n      });\n      tripList = (0, _lodash.orderBy)(tripList, trip => {\n        return trip.plannedRouteOrdinal;\n      }, ['asc']);\n      this.set('tripStops', tripList);\n    },\n\n    setupSolutionPreview() {\n      const trips = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.trips'));\n      const routeSolution = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute'));\n      let tripList = [];\n      const currentTrip = this.get('trip');\n      const currentTripRider = (0, _unwrapProxy.unwrapProxy)(currentTrip.get('rider'));\n      const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n      const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n      trips.forEach(trip => {\n        this.getPickAndDropDataForSolutionPreview(trip, tripList);\n      });\n      tripList = (0, _lodash.orderBy)(tripList, trip => {\n        return trip.plannedRouteOrdinal;\n      }, ['asc']);\n      this.sequencePlannedRouteOrdinal(tripList);\n      this.set('tripStops', tripList);\n      const convertPickOrdinalToTimeStamp = this.get('overridePickTime');\n      const pickStop = (0, _lodash.findIndex)(tripList, stop => stop.plannedRouteOrdinal === overrideSelectedPickOrder);\n      const pickTripStop = currentTrip.stops.filter(stop => stop.type === PICK_STOP_TYPE);\n      const newpickOne = {\n        id: pickTripStop.firstObject.get('id'),\n        tripId: currentTrip.get('tripId'),\n        plannedRouteOrdinal: overrideSelectedPickOrder,\n        plannedEta: convertPickOrdinalToTimeStamp,\n        stopType: PICK_STOP_TYPE,\n        tripStop: currentTrip.stops,\n        route: currentTrip.route,\n        trip: currentTrip,\n        currentProviderName: currentTrip.currentProviderName,\n        computedPromiseTime: currentTrip.get('promiseTime'),\n        computedApptTime: currentTrip.get('segment.anchor') === 'drop' ? currentTrip.get('segment.leg.requestTime') : '',\n        lastName: currentTripRider.get('lastName'),\n        simpleAddress: currentTrip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n        locality: currentTrip.get('pick.segmentStop.place.address.locality'),\n        isNewTrip: true\n      };\n\n      if (pickStop !== -1) {\n        tripList.splice(pickStop, 0, newpickOne);\n      } else {\n        tripList.pushObject(newpickOne);\n      }\n\n      this.changeOtherPlannedRouted(tripList, overrideSelectedPickOrder);\n      this.set('tripStops', tripList);\n      const {\n        dropTime,\n        dropStopIndex\n      } = this.calculateDrop();\n      const dropTripStop = currentTrip.stops.filter(stop => stop.type === DROP_STOP_TYPE);\n      const newDropOne = {\n        id: dropTripStop.firstObject.get('id'),\n        tripId: currentTrip.get('tripId'),\n        plannedRouteOrdinal: overrideSelectedDropOrder,\n        plannedEta: dropTime,\n        stopType: DROP_STOP_TYPE,\n        tripStop: currentTrip.stops,\n        route: currentTrip.route,\n        trip: currentTrip,\n        currentProviderName: currentTrip.currentProviderName,\n        computedPromiseTime: currentTrip.get('promiseTime'),\n        computedApptTime: currentTrip.get('segment.anchor') === 'drop' ? currentTrip.get('segment.leg.requestTime') : '',\n        lastName: currentTripRider.get('lastName'),\n        simpleAddress: currentTrip.get('drop.segmentStop.place.address.streetNumberAndAddress'),\n        locality: currentTrip.get('drop.segmentStop.place.address.locality'),\n        isNewTrip: true\n      };\n\n      if (dropStopIndex !== -1) {\n        tripList.splice(dropStopIndex, 0, newDropOne);\n      } else {\n        tripList.pushObject(newDropOne);\n      }\n\n      const tripStops = [newpickOne, newDropOne];\n      this.changeOtherPlannedRouted(tripList, overrideSelectedDropOrder);\n      this.setStylesForPickAndDropRows(tripList);\n      tripList = (0, _lodash.orderBy)(tripList, trip => {\n        return trip.plannedRouteOrdinal;\n      }, ['asc']);\n      const solution = Ember.Object.create({\n        id: routeSolution.get('id'),\n        isNewTrip: true,\n        promiseTime: currentTrip.get('promiseTime'),\n        providerName: routeSolution.get('provider.id'),\n        routeId: routeSolution.get('id'),\n        tripId: currentTrip.get('tripId'),\n        tripStops: tripStops\n      });\n      this.prepareOverrideSolutionPreviewTable([solution]);\n    },\n\n    populateRoute: (0, _emberConcurrency.task)(function* (currentRouteID) {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      yield coreEntityPopulator.populateRtsRoute(currentRouteID, {});\n    }),\n\n    buildPullInGarageData(tripList) {\n      const store = this.get('store');\n      const currentRouteID = this.get('currentSolutionRoute.id');\n      const pullInGarage = store.peekRecord('stop-point', `GD${currentRouteID}`);\n      const pullinGarageData = {\n        stop: 'pullinGarage',\n        plannedEta: !pullInGarage ? '' : pullInGarage.get('stopRoute.plannedEndTime'),\n        plannedRouteOrdinal: tripList.length,\n        simpleAddress: !pullInGarage ? '' : pullInGarage.get('place.address.streetNumberAndAddress'),\n        city: !pullInGarage ? '' : pullInGarage.get('place.address.locality'),\n        slack: 0\n      };\n      tripList.push(pullinGarageData);\n    },\n\n    buildPullOutGarageData(tripList, impact) {\n      const store = this.get('store');\n      const currentRouteID = this.get('currentSolutionRoute.id');\n      const isBeforeImpact = impact === 'before';\n      const pullOutGarage = store.peekRecord('stop-point', `GP${currentRouteID}`);\n      const plannedEta = !pullOutGarage ? '' : pullOutGarage.get('stopRoute.plannedStartTime');\n      let slack = 0;\n\n      if (isBeforeImpact) {\n        slack = pullOutGarage ? pullOutGarage.get('stopRoute.plannedSlackTime') : 0;\n      } else {\n        const plannedSlackTime = pullOutGarage ? pullOutGarage.get('stopRoute.plannedSlackTime') : 0;\n        const firstStopEtaMoment = tripList[0] ? (0, _moment.default)(tripList[0].plannedEta) : null;\n        slack = pullOutGarage && firstStopEtaMoment ? _moment.default.duration(firstStopEtaMoment.diff(plannedEta)).as('minutes') : plannedSlackTime;\n      }\n\n      const pulloutGarageData = {\n        stop: 'pulloutGarage',\n        plannedRouteOrdinal: 0,\n        plannedEta: plannedEta,\n        simpleAddress: !pullOutGarage ? '' : pullOutGarage.get('place.address.streetNumberAndAddress'),\n        city: !pullOutGarage ? '' : pullOutGarage.get('place.address.locality'),\n        slack: slack\n      };\n      tripList.unshift(pulloutGarageData);\n    },\n\n    changeOtherPlannedRouted(trips, order) {\n      let isRouteOrdinalChange = false;\n      trips.forEach((trip, index) => {\n        if (isRouteOrdinalChange) {\n          const nextTripStop = trips[index + 1];\n          trip.plannedRouteOrdinal = nextTripStop ? nextTripStop.plannedRouteOrdinal : trip.plannedRouteOrdinal + 1;\n        }\n\n        if (trip.plannedRouteOrdinal === order) {\n          isRouteOrdinalChange = true;\n          return false;\n        }\n      });\n    },\n\n    setStylesForPickAndDropRows(tripList) {\n      const currentTrip = this.get('trip');\n      const pickAndDropStops = tripList.filter(stop => stop.tripId === currentTrip.get('tripId')); // eslint-disable-next-line no-return-assign\n\n      pickAndDropStops.forEach(stop => stop.selectedOrdinalRow = true);\n    },\n\n    onTransferTripSave() {\n      const brokerEligible = this.get('brokerEligible');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const isBrokerProviderType = overrideSelectedProvider ? overrideSelectedProvider.get('isBrokerProviderType') : false;\n      const currentSolutionRoute = this.get('currentSolutionRoute');\n      const schedule = this.get('trip.schedule') ? this.get('trip.schedule') : null;\n      let tip = '';\n      let successMsg = '';\n      let errorMsg = '';\n      const title = 'Transfer Trip';\n      const id = this.get('trip.id');\n      const tripId = this.get('trip.tripId');\n      const tooltip = this.get('tooltip');\n      const routeId = this.get('trip.route.id');\n      const currentSelectedRouteId = currentSolutionRoute.get('id');\n      const currentSelectedRouteName = currentSolutionRoute.get('name');\n      const initialLoadedSolutionIds = this.get('initialLoadedSolutionIds') ? this.get('initialLoadedSolutionIds') : []; //the call must be \"blockReschedule\" for automatic route (or) \"tripTransfer\" for manual/override route\n\n      const isinitialLoadedProviderSelected = initialLoadedSolutionIds.includes(currentSelectedRouteId);\n      const performAction = isinitialLoadedProviderSelected ? this.createScheduleAsyncOperation : this.onTransferTrip;\n      const operationData = {\n        hypo: false,\n        trips: [id],\n        routes: [currentSelectedRouteId],\n        routeUsage: 2\n      };\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      tip = `Are you sure you want to transfer trip ${tripId} ?`;\n      successMsg = `Trip ${tripId} successfully transferred to route ${currentSelectedRouteName} `;\n      errorMsg = `Failed to transfer Trip ${tripId}`; //NYAAR-19315-if the broker is not eligible and the current provider type is broker\n\n      if (!brokerEligible && isBrokerProviderType) {\n        tip = 'This trip will be transferred to a broker, even though the trip is not broker-eligible. Are you sure you want to proceed?';\n      }\n\n      tooltip.pushConfirmation({\n        tip,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          await this.setBrokerEligible(brokerEligible, isBrokerProviderType, true);\n          return performAction.perform(schedule, 'blockReschedule', options).then(async result => {\n            if (!result.isJobSuccess) {\n              const responseResult = result.jsonData.attributes.results || '';\n              throw new Error(responseResult);\n            }\n\n            this.get('notifications').success(successMsg);\n\n            if (routeId) {\n              await this.get('booking').routeTripQuery(routeId);\n            }\n\n            return this.onCloseClick();\n          }).catch(async err => {\n            // eslint-disable-next-line no-console\n            console.warn(errorMsg);\n            await this.setBrokerEligible(brokerEligible, isBrokerProviderType, false);\n\n            if (err && !(0, _lodash.isEmpty)(err.message)) {\n              const reason = err.message || err.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n              this.get('notifications').warning(reason);\n            } else {\n              this.get('notifications').warning('The system encountered an error, please try again. If the problem persists contact administrator.');\n            }\n          }).finally(() => {\n            tooltip.reset();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    checkValidateOrder(type) {\n      const overridePickTime = this.get('overridePickTime');\n      const overrideDropTime = this.get('overrideDropTime');\n      this.set('overrideErrorText', '');\n      let isValid = true;\n\n      if (overridePickTime.isSameOrAfter(overrideDropTime)) {\n        this.set('overrideErrorText', 'Dropoff Time must be after Pickup Time.');\n        isValid = false;\n      }\n\n      if (!isValid) {\n        if (type === 'pick') {\n          Ember.run.schedule('afterRender', () => {\n            this.set('overrideSelectedPickOrder', null);\n            this.set('pickTime');\n            this.set('overridePickTime');\n          });\n        } else {\n          Ember.run.schedule('afterRender', () => {\n            this.set('overrideDropTime');\n            this.set('overrideSelectedDropOrder', null);\n            this.set('dropTime');\n          });\n        }\n      }\n\n      return isValid;\n    },\n\n    /**\n     * NYAAR-20299: to calculate pick and drop order\n     * @param {*Array} stopsRows\n     */\n    calculatePickAndDropOrder(type) {\n      const tripList = this.get('tripStops');\n      const overrideDropTime = this.get('overrideDropTime');\n      const overridePickTime = this.get('overridePickTime');\n      let isValid = true;\n\n      if (overridePickTime && overrideDropTime) {\n        const pickOrder = this.calculatePickOrder(overridePickTime);\n        const dropOrder = this.calculateDropOrder(overrideDropTime);\n        this.set('overrideSelectedPickOrder', pickOrder);\n        this.set('overrideSelectedDropOrder', dropOrder);\n        isValid = this.isBreakInBetweenStops(tripList);\n      }\n\n      if (!isValid) {\n        if (type === 'pick') {\n          Ember.run.schedule('afterRender', () => {\n            this.set('overrideSelectedPickOrder', null);\n            this.set('pickTime');\n            this.set('overridePickTime');\n          });\n        } else {\n          Ember.run.schedule('afterRender', () => {\n            this.set('overrideDropTime');\n            this.set('overrideSelectedDropOrder', null);\n            this.set('dropTime');\n          });\n        }\n      }\n\n      return isValid;\n    },\n\n    /**\n     * NYAAR-20299: to check is there any break beteween override pick and drop\n     * @param {*Array} stopRows\n     * @returns {*Boolean}\n     */\n    isBreakInBetweenStops(stopRows) {\n      let isValid = true;\n      const pickOrder = this.get('overrideSelectedPickOrder');\n      const dropOrder = this.get('overrideSelectedDropOrder');\n      if (!pickOrder && !dropOrder) return isValid;\n      if (pickOrder === dropOrder - 1) return isValid;\n      this.set('overrideErrorText', '');\n      let index = pickOrder;\n\n      while (isValid && index < dropOrder) {\n        // eslint-disable-next-line no-loop-func\n        const stop = (0, _unwrapProxy.unwrapProxy)(stopRows.find(stopData => stopData.plannedRouteOrdinal === index));\n\n        if (Ember.isPresent(stop) && stop.isBreak) {\n          isValid = false;\n          this.get('notifications').info('Invalid pick/drop order. There is a break in between');\n        }\n\n        index++;\n      }\n\n      return isValid;\n    },\n\n    convertToRegularDateTime(value) {\n      const scheduleName = this.get('overrideSelectedRoute.schedule.name');\n      const dateTimeMoment = (0, _moment.default)(scheduleName).startOf('day');\n      const timeArray = value.masked.split(':');\n      dateTimeMoment.add(timeArray[0], 'hours');\n      dateTimeMoment.add(timeArray[1], 'minutes');\n      return dateTimeMoment;\n    },\n\n    //NYAAR-19315-update leg.brokerEligible as true when the broker is not eligible and the current provider type is broker and the trip is successfully transferred\n    async setBrokerEligible(brokerEligible, isBrokerProviderType, value) {\n      if (!brokerEligible && isBrokerProviderType) {\n        const leg = (0, _unwrapProxy.unwrapProxy)(this.get('trip.segment.leg'));\n        leg.set('brokerEligible', value);\n        await leg.save();\n      }\n    },\n\n    //NYAAR-19434-stop order in solution preview table must be in sequence order\n    sequencePlannedRouteOrdinal(tripList) {\n      tripList.forEach((trip, index) => {\n        trip.plannedRouteOrdinal = index;\n      });\n    },\n\n    /**\n     * sets routeBreak for stops\n     * @param {*Array} tripStopList\n     * @returns {*Array}\n     */\n    setRouteBreak(tripStopList, impact) {\n      const isBeforeImpact = impact === 'before';\n      const filteredRouteBreak = !tripStopList.length ? [] : tripStopList.filter(stop => stop.routeBreakData[0]).map(stop => stop.routeBreakData).flat();\n      const selectedRouteId = this.get('selectedTableRouteId');\n      const breakForRoute = filteredRouteBreak.filter(routeBreak => routeBreak.relationships.route.data.id === selectedRouteId).uniqBy('attributes.estimatedStart');\n      breakForRoute.forEach(routeBreak => {\n        const routeBreakModel = this.get('store').peekRecord('route-break', routeBreak.id);\n        const breakOrdinal = routeBreak.attributes.plannedRouteOrdinal;\n        let slack = routeBreak.attributes.plannedSlackTime;\n\n        if (isBeforeImpact) {\n          slack = routeBreakModel ? routeBreakModel.get('plannedSlackTime') : 0;\n        }\n\n        tripStopList.push({\n          stop: 'break',\n          plannedEta: routeBreak.attributes.estimatedStart,\n          plannedRouteOrdinal: breakOrdinal,\n          isBreak: true,\n          slack: slack\n        });\n      });\n      return this.sortingStopsByETA(tripStopList);\n    },\n\n    /**\n     * NYAAR-19407: to prepare solutionReview table for Manually select a route to transfer the trip\n     * @param {Object} solution\n     */\n    prepareOverrideSolutionPreviewTable(solution) {\n      const store = this.get('store');\n      const selectedRouteId = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.id'));\n      const destinationSolutionRoutes = this.get('solutions') || [];\n      const foundSolution = destinationSolutionRoutes.findBy('id', solution[0].id); // reset stops table data\n\n      this.get('solutionImpactTable').setRows([]);\n\n      if (!foundSolution) {\n        destinationSolutionRoutes.pushObject(solution[0]);\n        const solutionPreviewTableRow = this.get('solutionPreviewTable.rows').toArray();\n        const solutionsTableRows = solution.map(_ref => {\n          let {\n            id,\n            providerName,\n            routeId\n          } = _ref;\n          const selectedRoute = store.peekRecord('route', id);\n          const routeName = selectedRoute.get('name');\n          return {\n            routeName,\n            providerName,\n            routeId,\n            id\n          };\n        }); //inserting new override route to top of the list, in reviewTable\n\n        solutionPreviewTableRow.splice(0, 0, solutionsTableRows[0]);\n        this.get('solutionPreviewTable').setRows(solutionPreviewTableRow);\n      } else {\n        const solutionPreviewTableRow = this.get('solutionPreviewTable.rows').toArray();\n        const solutionIndex = destinationSolutionRoutes.findIndex(currSolution => currSolution.id === solution[0].id);\n        const solutionPreviewTableRowIindex = solutionPreviewTableRow.findIndex(row => row.get('id') === solution[0].id); // replace the solution with new data\n\n        destinationSolutionRoutes.splice(solutionIndex, 1, solution[0]);\n        const solutionsTableRows = solution.map(_ref2 => {\n          let {\n            id,\n            providerName,\n            routeId\n          } = _ref2;\n          const selectedRoute = store.peekRecord('route', id);\n          const routeName = selectedRoute.get('name');\n          return {\n            routeName,\n            providerName,\n            routeId,\n            id\n          };\n        }); // replace the routes table rows with new solution rows\n\n        this.get('solutionPreviewTable').removeRow(solutionPreviewTableRow[solutionPreviewTableRowIindex]);\n        this.get('solutionPreviewTable').addRow(solutionsTableRows[0]);\n        this.get('solutionPreviewTable').setRows(solutionPreviewTableRow); // refresh stop table with new results\n\n        const selectedRoute = store.peekRecord('route', solution[0].id);\n        this.set('currentSolutionRoute', selectedRoute);\n        this.populateRoute.perform(this.get('currentSolutionRoute.id'));\n      }\n\n      if (!this.get('currentRouteSolution')) {\n        const currentRouteSolution = this.get('trip.route');\n        this.set('currentRouteSolution', currentRouteSolution);\n      }\n\n      this.selectSolution.perform(solution[0].id);\n      this.selectTableSolutionRow(selectedRouteId);\n    },\n\n    /**\n     * NYAAR-19407: sets providerList for solution review table\n     */\n    async setupProvidersList() {\n      const isManualSchedulingMode = this.get('isManualSchedulingMode');\n      const transferBrokerTripDispatch = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferBrokerTripDispatch, null);\n      const previousSelectedTripProvider = (0, _unwrapProxy.unwrapProxy)(this.get('previousSelectedTripProvider'));\n      this.set('providersList', []);\n      const providers = await this.get('store').peekAll('provider').filter(provider => {\n        // filter out broker providers if user does not have permission or InActive\n        if (provider.get('isBrokerProviderType') && !transferBrokerTripDispatch || provider.get('isInActive')) {\n          return false;\n        }\n\n        return !(0, _lodash.isEmpty)(provider.get('name')) && !(0, _lodash.isEmpty)(provider.get('id')) && provider.get('userCanAccessProvider');\n      });\n      const providersList = [];\n      providers.forEach(provider => {\n        let isChecked = false;\n\n        if (!isManualSchedulingMode && Ember.isPresent(previousSelectedTripProvider) && provider.get('id') === previousSelectedTripProvider.get('id')) {\n          isChecked = true;\n        }\n\n        providersList.push({\n          id: provider.get('id'),\n          name: provider.get('providerName'),\n          isChecked: isChecked\n        });\n      });\n      this.set('providersList', providersList);\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    /**\n     * NYAAR-19407: sets up solutions, When the panel is first loaded\n     */\n    setupSolutions() {\n      this.set('errorText');\n      const trip = this.get('trip');\n      const currentState = this.get('currentState');\n      let currentSolutionRouteId = null;\n\n      if (currentState) {\n        currentSolutionRouteId = currentState.currentSolutionRoute ? currentState.currentSolutionRoute.get('id') : null;\n      }\n\n      this.cursorWait();\n\n      const fetchOrRestoreTask = async () => {\n        if (currentState) {\n          const restoreSolutions = this.get('currentState.solutions'); // after restore currentState solutions, remove the cache.\n\n          this.set('currentState', null);\n          return restoreSolutions;\n        }\n\n        return await this.get('fetchSolutionsTask').perform(trip);\n      };\n\n      fetchOrRestoreTask().catch(err => {\n        // if the side drawer have been close while doing fetch\n        if (this.get('isSolutionsTaskCanceled')) return null; // Try to be as robust as possible.  Log an error to console for discovery,\n        // but just use an empty solution set to unblock manually transferring\n\n        if (!(0, _lodash.isEmpty)(err) && !(0, _lodash.isEmpty)(err.attributes)) {\n          const reason = err.attributes.results || err.attributes.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err.attributes)}`); // eslint-disable-line no-console\n\n        return null;\n      }).then(solutions => {\n        // reset stops table data\n        this.get('solutionImpactTable').setRows([]);\n        const providerSelectedHash = this.get('providersList').reduce((hash, p) => {\n          hash[p.id] = p.isChecked;\n          return hash;\n        }, {});\n        const solutionsFilteredByProvider = solutions ? solutions.filter(s => providerSelectedHash[s.providerName]) : []; // give it a bit of time for everything to get loaded to ember store\n\n        Ember.run.later(() => {\n          this.prepareSolutionPreviewTable(solutionsFilteredByProvider, currentSolutionRouteId);\n        }, 500);\n        this.cursorDefault();\n      }).catch(() => {\n        this.get('notifications').info(`Trip ${trip.get('tripId')} cannot be transferred`);\n        this.cursorDefault();\n        return this.onCloseClick();\n      });\n      this.fetchRouteOverrideOptions();\n    },\n\n    /**\n     * NYAAR-19407: prepare solution review table, When the panel is first loaded\n     * @param {Array} solutions\n     * @param {*Number} currentSolutionRouteId\n     */\n    prepareSolutionPreviewTable(solutions, currentSolutionRouteId) {\n      const store = this.get('store');\n      let solutionsTableRows = [];\n\n      if (!(0, _lodash.isEmpty)(solutions)) {\n        solutionsTableRows = solutions.map(_ref3 => {\n          let {\n            id,\n            providerName,\n            routeId\n          } = _ref3;\n          const selectedRoute = store.peekRecord('route', id);\n          const routeName = selectedRoute.get('name');\n          return {\n            routeName,\n            providerName,\n            routeId,\n            id\n          };\n        });\n        solutions.forEach(solution => {\n          const index = this.get('solutions').findIndex(s => s.id === solution.id);\n\n          if (index === -1) {\n            this.get('solutions').pushObject(solution);\n          } else {\n            this.get('solutions').splice(index, 1, solution);\n          }\n        });\n      }\n\n      this.get('solutionPreviewTable').setRows(solutionsTableRows); //from initially loaded solution the row ids are selected, for performing transfer route by calling 'blockReschedule'\n\n      this.set('initialLoadedSolutionIds', solutionsTableRows.map(row => row.id));\n\n      if (!(0, _lodash.isEmpty)(solutions)) {\n        const solutionFound = currentSolutionRouteId ? solutions.find(solution => solution.id === currentSolutionRouteId) : null;\n        const firstSolutionId = solutionFound ? solutionFound.id : solutions[0].routeId;\n        this.selectTableSolutionRow(firstSolutionId);\n        this.selectSolution.perform(firstSolutionId);\n      }\n    },\n\n    /**\n     * NYAAR-19407: fetch solutions for table, when the panel is first loaded\n     */\n    fetchSolutionsTask: (0, _emberConcurrency.task)(function* (trip) {\n      const schedule = trip.get('schedule') ? trip.get('schedule') : null;\n      const tripId = trip.get('id') ? parseInt(trip.get('id'), 10) : null;\n      const operationData = {\n        hypo: true,\n        trips: [tripId]\n      };\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      const {\n        jsonData\n      } = yield this.createScheduleAsyncOperation.perform(schedule, 'blockReschedule', options);\n      const result = jsonData;\n\n      if (result.attributes.state === 'failure') {\n        throw result;\n      }\n\n      if (!(0, _lodash.isEmpty)(result.attributes)) {\n        return this.prepareSolutionData(result);\n      }\n    }).keepLatest(),\n\n    /**\n     * NYAAR-19407: prepare solutions data, when the panel is first loaded\n     */\n    prepareSolutionData(result) {\n      const store = this.get('store');\n      const resultData = JSON.parse(result.attributes.results).trips.data;\n      const routeBreakData = JSON.parse(result.attributes.results).routeBreaks.data;\n      const resultInculudes = JSON.parse(result.attributes.results).trips.included;\n      const promiseTime = resultData.firstObject.attributes.promiseTime;\n      const tripStops = resultInculudes.filter(include => include.type === 'tripStop');\n      const currentTrip = this.get('trip');\n      const currentTripRider = currentTrip.get('rider');\n      const currentRouteSolution = this.get('trip.route');\n      const stops = [];\n      this.set('currentRouteSolution', currentRouteSolution);\n      tripStops.forEach(stop => {\n        let riderId = '';\n        const tripStop = store.peekRecord('tripStop', stop.id);\n        const routeId = tripStop ? tripStop.get('route.id') : '';\n        if (tripStop) riderId = tripStop.get('trip.rider.id');\n        stops.push({\n          id: stop.id,\n          plannedRouteOrdinal: stop.attributes.plannedRouteOrdinal,\n          plannedEta: stop.attributes.plannedEta,\n          trip: currentTrip,\n          computedPromiseTime: promiseTime,\n          computedApptTime: currentTrip.get('segment.anchor') === DROP_STOP_TYPE ? currentTrip.get('segment.leg.requestTime') : '',\n          lastName: currentTripRider.get('lastName'),\n          simpleAddress: currentTrip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n          locality: currentTrip.get('pick.segmentStop.place.address.locality'),\n          status: stop.attributes.hasOwnProperty('dropStatus') ? stop.attributes.dropStatus : stop.attributes.pickStatus,\n          routeId,\n          routeBreakData,\n          riderId,\n          slack: stop.attributes.plannedSlackTime\n        });\n      });\n      const groupedStops = this.prepareGroupStops(resultData, stops);\n      return this.prepareTripSolutionData(resultData, groupedStops, promiseTime, stops);\n    },\n\n    async prepareTripSolutionData(resultData, groupedStops, promiseTime, tripStops) {\n      const store = this.get('store');\n      const currentTripRouteId = this.get('trip.route.id');\n      const filterdRouteTableResult = [];\n      const transferTripPayloadResult = [];\n      const filteredCurrentStops = tripStops.filter(stop => stop.riderId); // batched: one in(riderId,(…)) query instead of N per-rider forced fetches\n\n      await (0, _batchLoadRiders.default)(this.get('store'), filteredCurrentStops.map(stop => stop.riderId));\n      resultData.forEach(trip => {\n        const route = store.peekRecord('route', trip.relationships.route.data.id);\n        transferTripPayloadResult.push(trip);\n\n        if (currentTripRouteId !== route.id) {\n          transferTripPayloadResult.pop();\n          filterdRouteTableResult.push(trip);\n        }\n      });\n      this.set('transferTripPayloadResult', transferTripPayloadResult);\n      return filterdRouteTableResult.map(tripData => {\n        const currentProvider = store.peekRecord('provider', tripData.relationships.currentProviderName.data.id);\n        const tripRouteId = tripData.relationships.route.data.id;\n        const stops = groupedStops[tripRouteId];\n        return {\n          id: tripRouteId,\n          tripId: tripData.id,\n          tripStops: stops || [],\n          promiseTime,\n          stops: tripStops,\n          routeId: tripRouteId,\n          providerName: currentProvider.id,\n          isNewTrip: true\n        };\n      }).uniqBy('id');\n    },\n\n    /**\n     * NYAAR-19690: prepare GroupStops from payloadData\n     * @param {Array} resultData\n     * @param {Array} stops\n     * @returns\n     */\n    prepareGroupStops(resultData, stops) {\n      const groupedStops = {};\n      const pickDropObj = {};\n      resultData.forEach(data => {\n        const routeId = data.relationships.route.data.id;\n\n        if (!pickDropObj[routeId]) {\n          pickDropObj[routeId] = [data.relationships.drop.data.id, data.relationships.pick.data.id];\n        } else {\n          pickDropObj[routeId].push(data.relationships.drop.data.id, data.relationships.pick.data.id);\n        }\n      });\n      const keyValuePair = Object.entries(pickDropObj);\n      keyValuePair.forEach(keyValue => {\n        const key = keyValue[0];\n        const stopArr = [];\n        keyValue[1].forEach(value => stopArr.push(...stops.filter(stop => stop.id === value)));\n        groupedStops[key] = stopArr;\n      });\n      return groupedStops;\n    },\n\n    /**\n     * NYAAR-19407: select solution for impact table\n     */\n    selectSolution: (0, _emberConcurrency.task)(function* (routeId) {\n      const selectedRoute = this.get('store').peekRecord('route', routeId);\n      this.setProperties({\n        selectedSolutionId: routeId,\n        selectedImpactPeriod: 'after',\n        activeTabRouteId: routeId,\n        currentSolutionRoute: selectedRoute\n      });\n      yield this.populateRoute.perform(this.get('currentSolutionRoute.id'));\n      this.chooseImpactByRoute(routeId);\n    }),\n\n    /**\n     * NYAAR-19407: select solution for impact table\n     * @param {Number} routeId\n     */\n    selectTableSolutionRow(routeId) {\n      const rows = this.get('solutionPreviewTable.rows');\n      const currentSelectedRow = rows.findBy('selected');\n      const rowToSelect = rows.findBy('id', routeId);\n      if (rowToSelect === currentSelectedRow) return;\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n      }\n\n      rowToSelect.set('selected', true);\n      this.selectSolution.perform(routeId);\n    },\n\n    unSelectTableSolutionRow() {\n      const rows = this.get('solutionPreviewTable.rows');\n      const currentSelectedRow = rows.findBy('selected');\n      this.set('selectedSolutionId');\n      this.set('selectedOverrideSolutionId');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n      }\n    },\n\n    /**\n     * NYAAR-19407: choose Impacts (currentRouteImpact/selectedRouteImpact) in impact table\n     * @param {Number} routeId\n     * @returns {Object}\n     */\n    async chooseImpactByRoute(routeId) {\n      const solutions = this.get('solutions');\n      const period = this.get('selectedImpactPeriod');\n      const currentRoute = this.get('currentRoute');\n      const currentRouteSolution = this.get('currentRouteSolution');\n      const currentTripId = this.trip.tripId;\n      const selectedRouteImpact = this.get('selectedRouteImpact').bind(this);\n      const currentSortImpactPreview = this.get('currentSortImpactPreview');\n      this.set('selectedTableRouteId', routeId);\n      let selectedSolution = null;\n      let impact = null; // Handle choosing the current route\n\n      await this.filterRiderFromSelectedRoutes();\n\n      if (!Ember.isNone(currentRoute) && routeId === currentRoute.get('id')) {\n        selectedSolution = currentRouteSolution;\n\n        if ((0, _lodash.isEmpty)(selectedSolution)) {\n          if (this.get('trip.status') === 'waitlisted' && period === 'before') {\n            this.get('solutionImpactTable').setRows(this.get('trip.stops'));\n            return;\n          }\n\n          this.get('solutionImpactTable').setRows([]);\n        }\n\n        impact = this.get('currentRouteImpact');\n      } else {\n        selectedSolution = solutions.findBy('id', routeId);\n\n        if ((0, _lodash.isEmpty)(selectedSolution)) {\n          this.set('impact', impact);\n          this.get('solutionImpactTable').setRows([]);\n          return impact;\n        }\n\n        impact = selectedRouteImpact();\n      }\n\n      this.set('impact', impact);\n      const stopsRows = impact[period] ? impact[period].stops : [];\n      const rows = this.get('solutionImpactTable').setRows(stopsRows);\n\n      if (currentSortImpactPreview) {\n        this.sortImpactPreview(currentSortImpactPreview, [currentTripId]);\n      } else {\n        rows.forEach(stop => {\n          if (!Ember.isNone(stop.get('tripStop')) && stop.get('tripStop.trip.tripId') === currentTripId) {\n            stop.set('selected', true);\n          } //adding redRow class to row for showing ETA value in impact table related to lateness flag\n\n\n          if (stop.get('stopStatus') === 1) {\n            stop.set('classNames', 'redRow');\n          }\n        });\n      }\n\n      return impact;\n    },\n\n    fetchRouteOverrideOptions() {\n      const sourceRouteIdValue = this.get('currentRoute.id');\n      const sourceRouteScheduleIdValue = this.get('currentRoute.schedule.id');\n      if (!sourceRouteIdValue) return null;\n      const store = this.get('store');\n      const routes = store.peekAll('route').filter(route => {\n        const routeScheduleIdValue = route.get('schedule.id');\n        const routeIdValue = route.get('id');\n        const sameSchedule = routeScheduleIdValue === sourceRouteScheduleIdValue;\n        const differentId = routeIdValue !== sourceRouteIdValue;\n        return sameSchedule && differentId;\n      });\n      this.set('routeOptions', routes);\n      return routes;\n    },\n\n    selectOverrideSolution() {\n      const route = this.get('overrideSelectedRoute');\n      const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n      const routeId = route.get('id');\n      const trip = this.get('trip');\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n      const store = this.get('store');\n      const pickTime = (0, _moment.default)(this.get('overridePickTime')).format('YYYY-MM-DD HH:mm:ssZ');\n      const dropTime = (0, _moment.default)(this.get('overrideDropTime')).format('YYYY-MM-DD HH:mm:ssZ'); // clear error message\n\n      this.set('errorText');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      if (previousSelectedTripProvider.get('isBrokerProviderType')) {\n        const selectedRoute = store.peekRecord('route', routeId);\n        this.set('currentSolutionRoute', selectedRoute);\n        this.populateRoute.perform(this.get('currentSolutionRoute.id'));\n        return;\n      }\n\n      this.cursorWait();\n      this.get('fetchManualSolutionsTask').perform(trip, pickTime, dropTime, routeId).then(solutionData => {\n        // reset stops table data\n        this.get('solutionImpactTable').setRows([]); // give it a bit of time for everything to get loaded to ember store\n\n        Ember.run.later(() => {\n          this.prepareOverrideSolutionPreviewTable(solutionData);\n        }, 500);\n        this.cursorDefault();\n      }).catch(err => {\n        this.catchBlockManualSolutionsTask(err.results);\n\n        if (!(0, _lodash.isEmpty)(err) && !(0, _lodash.isEmpty)(err.results)) {\n          const reason = err.results || err.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        this.cursorDefault();\n      });\n    },\n\n    /**\n     * @param {Object} err\n     * @param {Number} routeId\n     * @returns {String}\n     */\n    catchBlockManualSolutionsTask(err) {\n      // if the side drawer have been close while doing fetch\n      if (this.get('isSolutionsTaskCanceled')) return null; // Try to be as robust as possible.  Log an error to console for discovery,\n      // but just use an empty solution set to unblock manually transferring\n\n      console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err)}`); // eslint-disable-line no-console\n\n      if (!(0, _lodash.isEmpty)(err) && !(0, _lodash.isEmpty)(err.payload)) {\n        if (err.payload.message) {\n          const reason = err.payload.message || err.payload.detail || 'The selected route is not available, please try again in a few minutes. If the problem persist contact an administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', '* Error getting hypo trip transfer.');\n        }\n      }\n\n      this.cursorDefault();\n      return null;\n    },\n\n    /**\n     * NYAAR-19407: fetch ManualSolution for overrider selected route\n     */\n    fetchManualSolutionsTask: (0, _emberConcurrency.task)(function* (trip, pickTime, dropTime, routeId) {\n      const isCallbackWaitlistedAndManual = this.get('isCallbackWaitlistedAndManual');\n      const schedule = trip.get('schedule') ? trip.get('schedule') : null;\n      const tripId = trip.get('id') ? parseInt(trip.get('id'), 10) : null;\n      const operationData = {\n        hypo: true,\n        tripId: tripId,\n        routeId,\n        pickTime,\n        dropTime\n      };\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      const operationType = isCallbackWaitlistedAndManual ? 'scheduleManualTrip' : 'tripTransfer';\n      const {\n        jsonData\n      } = yield this.createScheduleAsyncOperation.perform(schedule, operationType, options);\n      const result = jsonData;\n\n      if (result.attributes.state === 'failure') {\n        throw result.attributes;\n      }\n\n      if (!(0, _lodash.isEmpty)(result.attributes)) {\n        return this.prepareOverrideSolutionData(result);\n      }\n    }).keepLatest(),\n\n    /**\n     * NYAAR-19407: for prepare overrider solutionData\n     * @param {Object} result\n     * @returns {Object}\n     */\n    prepareOverrideSolutionData(result) {\n      const store = this.get('store');\n      const resultData = JSON.parse(result.attributes.results).trips.data;\n      const routeBreakData = JSON.parse(result.attributes.results).routeBreaks.data;\n      const resultInculudes = JSON.parse(result.attributes.results).trips.included;\n      const promiseTime = resultData.firstObject.attributes.promiseTime;\n      const tripStops = resultInculudes.filter(include => include.type === 'tripStop');\n      const currentTrip = this.get('trip');\n      const currentTripRider = currentTrip.get('rider');\n      const currentRouteSolution = this.get('trip.route');\n      const stops = [];\n      this.set('currentRouteSolution', currentRouteSolution);\n      tripStops.forEach(stop => {\n        let riderId = '';\n        const tripStop = store.peekRecord('tripStop', stop.id);\n        const routeId = tripStop ? tripStop.get('route.id') : '';\n        const plannedEta = stop.attributes.plannedEta;\n        if (tripStop) riderId = tripStop.get('trip.rider.id');\n        stops.push({\n          id: stop.id,\n          plannedRouteOrdinal: stop.attributes.plannedRouteOrdinal,\n          plannedEta,\n          trip: currentTrip,\n          computedPromiseTime: promiseTime,\n          computedApptTime: currentTrip.get('segment.anchor') === DROP_STOP_TYPE ? currentTrip.get('segment.leg.requestTime') : '',\n          lastName: currentTripRider.get('lastName'),\n          simpleAddress: currentTrip.get('pick.segmentStop.place.address.streetNumberAndAddress'),\n          locality: currentTrip.get('pick.segmentStop.place.address.locality'),\n          status: stop.attributes.hasOwnProperty('dropStatus') ? stop.attributes.dropStatus : stop.attributes.pickStatus,\n          routeId,\n          routeBreakData,\n          riderId,\n          slack: stop.attributes.plannedSlackTime\n        });\n      });\n      const groupedStops = this.prepareGroupStops(resultData, stops);\n      return this.prepareTripSolutionData(resultData, groupedStops, promiseTime, stops);\n    },\n\n    fetchRecord: (0, _emberConcurrency.task)(function* (model, riderId, include) {\n      yield this.get('store').findRecord(model, riderId, include);\n    }),\n\n    deselectSolution() {\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      this.set('overrideErrorText', '');\n    },\n\n    actions: {\n      onColumnSolutionClick(column) {\n        this.sortSolutionPreview(column);\n      },\n\n      onColumnImpactClick(column) {\n        const currentTripId = this.get('trip.id');\n        this.sortImpactPreview(column, [currentTripId]);\n        this.set('currentSortImpactPreview', column);\n      },\n\n      onSaveClick() {\n        this.onTransferTripSave();\n      },\n\n      onRefreshClick() {\n        const isManualSchedulingMode = this.get('isManualSchedulingMode');\n        this.setOverrideInitialData();\n        this.set('override', isManualSchedulingMode);\n        this.set('overrideSelectedRoute'); // eslint-disable-next-line new-cap\n\n        this.set('solutions', Ember.A([]));\n        this.get('solutionImpactTable').setRows([]);\n        this.get('solutionPreviewTable').setRows([]);\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n\n        if (!isManualSchedulingMode && (0, _moment.default)(this.get('trip.pick.plannedEta')).isAfter((0, _moment.default)())) {\n          this.setupSolutions();\n        }\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState'); // const bulkTripTransfer = this.get('bulkTripTransfer');\n\n        const overrideSelectedProvider = this.get('overrideSelectedProvider');\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n        const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n        const solutionPreviewTable = this.get('solutionPreviewTable');\n        const pickTime = this.get('pickTime');\n        const overridePickTime = this.get('overridePickTime');\n        const dropTime = this.get('dropTime');\n        const overrideDropTime = this.get('overrideDropTime');\n        const solutions = this.get('solutions');\n        const solutionImpactTable = this.get('solutionImpactTable');\n        const currentRouteSolution = this.get('currentRouteSolution');\n        const override = this.get('override'); // save current manual settings\n\n        currentState = {\n          overrideSelectedProvider,\n          overrideSelectedRoute,\n          overrideSelectedPickOrder,\n          overrideSelectedDropOrder,\n          pickTime,\n          overridePickTime,\n          dropTime,\n          overrideDropTime,\n          solutionPreviewTable,\n          solutions,\n          solutionImpactTable,\n          currentRouteSolution,\n          override\n        };\n        this.set('currentState', currentState);\n        this.onShrinkClick();\n      },\n\n      onChangeProvider(provider) {\n        // clear selected route, pick order and drop order\n        this.set('overrideSelectedRoute', null);\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n        this.set('overrideSelectedProvider', provider);\n      },\n\n      onChangeRoute(route) {\n        const overridePickTime = this.get('overridePickTime');\n        const overrideDropTime = this.get('overrideDropTime');\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n        this.set('overrideSelectedRoute', route);\n        if (!overridePickTime || !overrideDropTime) return;\n        this.buildTripList();\n        this.set('overridePickTime', this.convertToRegularDateTime({\n          masked: overridePickTime.format('HH:mm')\n        }));\n        this.set('overrideDropTime', this.convertToRegularDateTime({\n          masked: overrideDropTime.format('HH:mm')\n        }));\n        const overrideSelectedPickOrder = this.calculatePickOrder(this.get('overridePickTime'));\n        const overrideSelectedDropOrder = this.calculateDropOrder(this.get('overrideDropTime'));\n        this.set('overrideSelectedPickOrder', overrideSelectedPickOrder);\n        this.set('overrideSelectedDropOrder', overrideSelectedDropOrder);\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n\n        if (overrideSelectedPickOrder && overrideSelectedDropOrder) {\n          const isValid = this.checkValidateOrder('drop') && this.calculatePickAndDropOrder('drop');\n          if (!isValid) return;\n          this.selectOverrideSolution();\n        }\n      },\n\n      onChangePickTime(value) {\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n        const deselectSolution = this.get('deselectSolution').bind(this);\n        let isValid = false;\n        this.set('pickTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('overridePickTime');\n          this.set('overrideSelectedPickOrder');\n          deselectSolution();\n          return;\n        }\n\n        const pickTimeMoment = this.convertToRegularDateTime(value);\n        this.set('overridePickTime', pickTimeMoment);\n        this.buildTripList();\n        const pickOrder = this.calculatePickOrder(pickTimeMoment);\n        this.set('overrideSelectedPickOrder', pickOrder);\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n\n        if (overrideSelectedDropOrder && overrideSelectedRoute) {\n          isValid = this.checkValidateOrder('pick') && this.calculatePickAndDropOrder('pick');\n          if (!isValid) return;\n          this.selectOverrideSolution();\n        }\n      },\n\n      onChangeDropTime(value) {\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n        const deselectSolution = this.get('deselectSolution').bind(this);\n        let isValid = false;\n        this.set('dropTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('overrideDropTime');\n          this.set('overrideSelectedDropOrder');\n          deselectSolution();\n          return;\n        }\n\n        const dropTimeMoment = this.convertToRegularDateTime(value);\n        this.set('overrideDropTime', dropTimeMoment);\n        this.buildTripList();\n        const dropOrder = this.calculateDropOrder(dropTimeMoment);\n        this.set('overrideSelectedDropOrder', dropOrder);\n        this.resetSolutionTableData();\n        this.unSelectTableSolutionRow();\n\n        if (overrideSelectedPickOrder && overrideSelectedRoute) {\n          isValid = this.checkValidateOrder('drop') && this.calculatePickAndDropOrder('drop');\n          if (!isValid) return;\n          this.selectOverrideSolution();\n        }\n      },\n\n      onSolutionRowClick(row\n      /*, event */\n      ) {\n        const routeId = row.get('routeId'); // Reset the override\n\n        this.set('selectedOverrideSolutionId');\n        this.selectTableSolutionRow(routeId);\n      },\n\n      selectSolutionRouteTab() {\n        const selectedRouteId = this.get('selectedSolutionId');\n        this.set('selectedImpactView', 'destination');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      selectCurrentRouteTab() {\n        const selectedRouteId = this.get('currentRoute.id');\n        this.set('selectedImpactView', 'current');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      refreshProviderAutoTransfer() {\n        const isManualSchedulingMode = this.get('isManualSchedulingMode');\n        this.setOverrideInitialData();\n        this.set('override', isManualSchedulingMode);\n        this.set('overrideSelectedRoute'); // eslint-disable-next-line new-cap\n\n        this.set('solutions', Ember.A([]));\n        this.get('solutionImpactTable').setRows([]);\n        this.get('solutionPreviewTable').setRows([]);\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n\n        if (!isManualSchedulingMode && (0, _moment.default)(this.get('trip.pick.plannedEta')).isAfter((0, _moment.default)())) {\n          this.setupSolutions();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-trip-transfer/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.solutionImpactColumns = _exports.solutionColumns = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const solutionImpactColumns = [{\n    label: 'Trip ID',\n    sortType: 'number',\n    valuePath: 'tripId',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '75px'\n  }, {\n    label: 'Last Name',\n    sortType: 'text',\n    valuePath: 'lastName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '90px'\n  }, {\n    label: 'Address',\n    sortType: 'text',\n    valuePath: 'simpleAddress',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '150px'\n  }, {\n    label: 'City',\n    sortType: 'text',\n    valuePath: 'city',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '100px'\n  }, {\n    label: 'Stop',\n    sortType: 'text',\n    valuePath: 'stop',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'ETA',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'plannedEta',\n    cellComponent: 'table/cells/trip-eta',\n    cellClassNames: 'ETA',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'Promise Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedPromiseTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    format: 'HH:mm',\n    width: '115px'\n  }, {\n    label: 'Appt Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedApptTime',\n    cellComponent: 'table/cells/date-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    format: 'HH:mm',\n    width: '100px'\n  }, {\n    label: 'Stop Break Ord',\n    sortType: 'number',\n    valuePath: 'plannedRouteOrdinal',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '120px'\n  }, {\n    label: 'Slack',\n    sortType: 'number',\n    valuePath: 'slack',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }];\n  _exports.solutionImpactColumns = solutionImpactColumns;\n  const solutionColumns = [{\n    width: '40px',\n    resizable: false,\n    cellComponent: 'side-drawer/trip-transfer/radio-button'\n  }, {\n    label: 'Options',\n    sortType: 'number',\n    valuePath: 'routeName',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Provider',\n    sortType: 'text',\n    valuePath: 'providerName',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }];\n  _exports.solutionColumns = solutionColumns;\n});","define(\"adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"H+z0wGKb\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\",\\\"route\\\",\\\"provider\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"schedulingTrip-transfer-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L5:C4) \\\"],null]],[[\\\"title\\\",\\\"canShrink\\\",\\\"onShrinkClick\\\",\\\"onRefreshClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"schedulingTrip-transfer-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L15:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L16:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container g-schedule-trip-panel\\\"],[11,\\\"style\\\",\\\"overflow: hidden;\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"driver\\\",\\\"driverId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"formattedPickTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"rider\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"driver\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"formattedDropTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"vehicle\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip Status:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"otpLabel\\\"]],false],[0,\\\" \\\"],[1,[23,[\\\"trip\\\",\\\"otpValueWithSign\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promise Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"formattedPromiseTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Status:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"\\\"],[9],[1,[27,\\\"capitalize\\\",[[23,[\\\"currentRoute\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"status\\\"]]],null],false],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Request Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"formattedRequestTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Anchor:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"if\\\",[[23,[\\\"trip\\\",\\\"anchorStop\\\",\\\"isPick\\\"]],\\\"pick\\\",\\\"drop\\\"],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L60:C3) \\\"],null]],[[\\\"isCollapsible\\\"],[false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"label\\\"],[9],[7,\\\"input\\\"],[12,\\\"checked\\\",[21,\\\"override\\\"]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isManualSchedulingMode\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"override\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" Override\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Manually select a route to transfer the trip. Trip will be added to \\\\\\\"Solution Preview\\\\\\\".\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"overrideErrorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"overrideErrorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"g-side-drawer-panel-selector half \\\",[27,\\\"if\\\",[[23,[\\\"isBulkTripTransfer\\\"]],\\\"bulk-trip\\\"],null]]]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label1\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideProviderOptions\\\"]],[23,[\\\"isNotOverride\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedProvider\\\"]],\\\"Select provider\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label1\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideRouteOptions\\\"]],[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedRoute\\\"]],\\\"Select Route\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRoute\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label2\\\"],[9],[0,\\\"Pickup Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"trip-transfer-pickup-time\\\",[23,[\\\"pickTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickTime\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label2\\\"],[9],[0,\\\"Dropoff Time\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"trip-transfer-dropoff-time\\\",[23,[\\\"dropTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropTime\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L123:C4) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Solution Preview\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"provider-solution-preview\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\" \\\\n        \\\"],[1,[27,\\\"form-components/multi-select-dropdown\\\",null,[[\\\"enumList\\\",\\\"allSelectedTitle\\\",\\\"multipleSelectedTitle\\\",\\\"isObjectDisabled\\\"],[[23,[\\\"providersList\\\"]],\\\"All Providers\\\",\\\"Multiple\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isManualSchedulingMode\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isManualSchedulingMode\\\"]]],null]],[11,\\\"class\\\",\\\"provider-solution-button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"refreshProviderAutoTransfer\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"solution-preview-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionPreviewTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,10]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L147:C12) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnSolutionClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L154:C13) \\\"],null]],[[\\\"canSelect\\\",\\\"tableActions\\\",\\\"multiSelect\\\",\\\"onRowClick\\\"],[false,[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L162:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionPreviewTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L168:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L177:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Alternate between before and after to see how trip transfer affects the route\\\"],[10],[0,\\\"\\\\n           \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"trip-transfer-tabs\\\"],[11,\\\"style\\\",\\\"padding: 0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"selectedSolutionId\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Route \\\"],[1,[23,[\\\"selectedSolutionRoute\\\",\\\"name\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"selectSolutionRouteTab\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"currentRoute\\\",\\\"id\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Previous Route\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentRouteTab\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-impact-bar\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"toggle-switch\\\",null,[[\\\"toggleProperty\\\",\\\"offValue\\\",\\\"offLabel\\\",\\\"onValue\\\",\\\"onLabel\\\"],[[23,[\\\"selectedImpactPeriod\\\"]],\\\"before\\\",\\\"Before\\\",\\\"after\\\",\\\"After\\\"]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"impact\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"impactScore\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"impact-text\\\"],[9],[0,\\\"\\\\n            Impact:\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"span\\\"],[12,\\\"class\\\",[28,[\\\"impact-score \\\",[21,\\\"impactScoreType\\\"]]]],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper scheduling-trip-transfer\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionImpactTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L210:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnImpactClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L217:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\"],[false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L223:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L229:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchVehiclesTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionImpactTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs' @ L235:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedImpactView\\\"]],\\\"current\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                Impact to the previous route is not available.\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                No Solutions Found.\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"The trip will be transferred to the route, with its stops placed at the indicated stop order positions.\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/scheduling-trip-transfer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundaries-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundaries-table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['ada-boundaries-table'],\n    config: _config.default,\n    adaService: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const store = this.get('store');\n      const selectedAgencyServiceRecord = await this.get('adaService').fetchAgencyServiceByAgencyId();\n      store.pushPayload(selectedAgencyServiceRecord);\n      const activeData = store.peekAll(modelName);\n      return activeData.filter(filterFn).sort(compareFn);\n    },\n\n    actions: {\n      onRowClick(currentRow, event) {\n        this._super(currentRow, event);\n\n        this.tableRowSelect(currentRow);\n        this.get('buildAdaBoundaryInfo')(currentRow.get('id'));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundaries-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'agency-service',\n    title: 'ADA Boundaries',\n    showSelectedRowLength: false,\n    defaultSortId: 'description',\n    fetchModelData: true,\n    defaultSortAsc: false,\n    hideWidgetControls: false,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'string',\n      label: 'Name',\n      valuePath: 'agencyServiceName',\n      defaultWidth: 870,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    init() {\n      this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"YziR8L75\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\"],[\\\"assign-vehicle-checkbox\\\",\\\"checkbox\\\"]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/config\", \"lodash\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _lodash, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['ada-boundary-information-table'],\n    config: _config.default,\n    adaService: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const store = this.get('store');\n      const queryParams = this.get('queryParams') || {};\n\n      if ((0, _lodash.isEmpty)(queryParams)) {\n        return [];\n      }\n\n      const activeData = await store.query(modelName, queryParams);\n      return activeData.filter(filterFn).sort(compareFn);\n    },\n\n    actions: {\n      onRowClick(currentRow) {\n        this._super(currentRow); // there will be only one checkedRow so we can use firstObject\n\n\n        const calendarId = this.get('tableRef.checkedRows.firstObject.id');\n        this.get('adaService').setActiveCalender(calendarId);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-information-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    title: 'Active Period',\n    modelName: 'route-calendar',\n    selectFirstRow: true,\n    defaultSortAsc: true,\n    checkBoxColumn: true,\n    hideWidgetControls: true,\n    showSelectedRowLength: false,\n    columns: [{\n      id: 'startTime',\n      index: 0,\n      type: 'time',\n      label: 'Start time',\n      valuePath: 'startDate',\n      format: 'hh:mm A',\n      defaultWidth: 70,\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'endTime',\n      index: 1,\n      type: 'time',\n      label: 'End time',\n      valuePath: 'endDate',\n      format: 'hh:mm A',\n      defaultWidth: 70,\n      searchable: true,\n      cellItem: 'TimeLocalCellItem'\n    }, {\n      id: 'Mon',\n      index: 2,\n      type: 'checkbox',\n      label: 'Mon',\n      valuePath: 'monday',\n      defaultWidth: 50,\n      searchable: true,\n      editable: true,\n      isChecked: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }, {\n      id: 'Tue',\n      index: 3,\n      type: 'checkbox',\n      label: 'Tue',\n      valuePath: 'tuesday',\n      defaultWidth: 50,\n      searchable: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }, {\n      id: 'Wed',\n      index: 4,\n      type: 'checkbox',\n      label: 'Wed',\n      valuePath: 'wednesday',\n      defaultWidth: 50,\n      searchable: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }, {\n      id: 'Thu',\n      index: 5,\n      type: 'checkbox',\n      label: 'Thu',\n      valuePath: 'thursday',\n      defaultWidth: 50,\n      searchable: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }, {\n      id: 'Fri',\n      index: 6,\n      type: 'checkbox',\n      label: 'Fri',\n      valuePath: 'friday',\n      defaultWidth: 50,\n      searchable: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }, {\n      id: 'sat',\n      index: 7,\n      type: 'checkbox',\n      label: 'Sat',\n      valuePath: 'saturday',\n      defaultWidth: 50,\n      searchable: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }, {\n      id: 'Sun',\n      index: 8,\n      type: 'checkbox',\n      label: 'Sun',\n      valuePath: 'sunday',\n      defaultWidth: 50,\n      searchable: true,\n      cellComponent: 'side-drawer/system-config/ada-boundaries/ada-boundary-information-table/active-cell'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-map/component\", [\"exports\", \"adept-iq/pods/components/generic-widgets/map-widget/component\", \"adept-iq/utils/map-provider\"], function (_exports, _component, _mapProvider) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.RecenterControl = void 0;\n  const config = {\n    title: 'Map'\n  };\n  const recenterControlOptions = {\n    position: 'topleft',\n    recenterAction: null\n  };\n  var RecenterControl = window.L.Control.extend({\n    options: recenterControlOptions,\n    onAdd: function\n      /* map */\n    () {\n      const name = 'leaflet-control-recenter';\n      const container = window.L.DomUtil.create('div', 'leaflet-control-recenter leaflet-bar');\n      this._recenterButton = this._createButton('<i class=\"fa fa-crosshairs fa-lg crosshairs-big\" aria-hidden=\"true\"></i>', 'Recenter', name, container, this._recenterMap);\n      return container;\n    },\n    _recenterMap: function () {\n      this.options.mapWidget.onRecenterClick();\n    },\n    _createButton: function (html, title, className, container, fn) {\n      var link = window.L.DomUtil.create('a', className, container);\n      link.innerHTML = html;\n      link.href = '#';\n      link.title = title;\n      /*\n           * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\n           */\n\n      link.setAttribute('role', 'button');\n      link.setAttribute('aria-label', title);\n      window.L.DomEvent.disableClickPropagation(link);\n      window.L.DomEvent.on(link, 'click', window.L.DomEvent.stop);\n      window.L.DomEvent.on(link, 'click', fn, this);\n      window.L.DomEvent.on(link, 'click', this._refocusOnMap, this);\n      return link;\n    }\n  });\n  _exports.RecenterControl = RecenterControl;\n\n  var _default = _component.default.extend(Ember.Evented, {\n    mapZoomMethodHandler: null,\n    activeContext: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    address: Ember.inject.service(),\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    work: Ember.inject.service(),\n    adaService: Ember.inject.service(),\n    config,\n    componentName: null,\n    lat: Ember.computed.alias('mapContext.lat'),\n    lng: Ember.computed.alias('mapContext.lng'),\n    isVisible: Ember.computed.alias('mapContext.isVisible'),\n    agencyMarkers: Ember.computed.alias('mapContext.agencyMarkers'),\n    _mapContext: null,\n    layerGroup: null,\n    // all map widgets are bound to the top context in stack\n    mapContext: Ember.computed.readOnly('mapService.topMapContext'),\n    layers: Ember.computed.readOnly('mapContext.layers'),\n    bounds: Ember.computed.readOnly('mapContext.bounds'),\n    boundsID: Ember.computed.readOnly('mapContext.boundsID'),\n    polylines: Ember.computed.readOnly('mapContext.polylines'),\n    shapes: Ember.computed.alias('mapContext.shapes'),\n    centerLat: Ember.computed.oneWay('mapContext.centerLat'),\n    centerLng: Ember.computed.oneWay('mapContext.centerLng'),\n    isSearchAllowed: Ember.computed.readOnly('mapContext.isSearchAllowed'),\n    isSearchEnabled: Ember.computed.readOnly('mapContext.isSearchEnabled'),\n    searchText: Ember.computed.readOnly('mapContext.searchText'),\n    clearButtonEnabled: Ember.computed.gt('activeContext.checkedItems.length', 0),\n    //map observer. this observers the calendarId in adaService and renders map\n    activeCalendarObserver: Ember.observer('adaService.activeCalendarId', function () {\n      const activeCalendarId = this.get('adaService.activeCalendarId');\n\n      if (activeCalendarId) {\n        this.get('adaService').fetchRouteShapeByCalendarId(activeCalendarId).then(geoJsonData => {\n          this.get('renderAdaBoundary')(geoJsonData);\n        });\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.renderAdaBoundary = this.get('renderAdaBoundary').bind(this);\n      const typeId = this.get('widget.typeId');\n      this.set('componentName', `${typeId}Widget`); // callback wrappers\n\n      this._onMapContextRefresh = () => this.onMapContextRefresh();\n\n      this._mapZoomMethodHandler = e => this.mapZoomMethod(e); // initialize observer\n\n\n      this.mapContextChanged();\n      this.activeCalendarObserver();\n      this.setProperties({\n        layerGroup: new window.L.LayerGroup()\n      });\n    },\n\n    destroy() {\n      this._onMapContextRefresh = null;\n      this._mapZoomMethodHandler = null;\n\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments); // set up location control; map was initialized in `_super`\n\n\n      const map = this.get('map');\n      const locationControl = new RecenterControl({\n        mapWidget: this\n      });\n      locationControl.addTo(map.native);\n      this.set('locationControl', locationControl);\n      map.native.on('zoom', this._mapZoomMethodHandler);\n      window.L.control.scale({\n        position: 'bottomright'\n      }).addTo(map.native);\n      window.L.DomEvent.on(map.native, 'wheel', this._didWheelZoom); // build data joins\n      // schedule initial map render\n\n      Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n      Ember.run.scheduleOnce('afterRender', this, 'reCenterMapView');\n      Ember.run.scheduleOnce('afterRender', this, 'updateMapView');\n      this.$('a').removeAttr('title'); // dds_map: the DDS Seamless Maps basemap from createLeafletMap is the only basemap\n\n      if (!(0, _mapProvider.isDdsMapProvider)()) {\n        window.L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {\n          attribution: '&copy; <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors'\n        }).addTo(map.native);\n      }\n\n      this.get('map.native').setView([-122.422996877403506, 47.255597113139743], 3);\n    },\n\n    mapContextChanged: Ember.observer('mapContext', function () {\n      const oldMapContext = this.get('_mapContext');\n      const newMapContext = this.get('mapContext'); // need to swap out refresh listener!\n\n      if (oldMapContext) {\n        oldMapContext.off('refresh', this._onMapContextRefresh);\n      }\n\n      if (newMapContext) {\n        newMapContext.on('refresh', this._onMapContextRefresh);\n      }\n\n      this.set('_mapContext', newMapContext); // force a refresh immediately\n\n      this.onMapContextRefresh();\n    }),\n\n    onMapContextRefresh() {\n      Ember.run.scheduleOnce('afterRender', this, 'updateMap');\n    },\n\n    mapZoomMethod(event) {\n      const map = event.target;\n      if (!map) return;\n      const zoom = map.getZoom();\n      const geocodeService = this.get('geocode');\n      geocodeService.set('zoom', zoom);\n    },\n\n    updateMap() {\n      // don't try to update until map is initialized\n      if (!this.get('map')) return;\n      const map = this.get('map');\n      map.on('zoom', this._mapZoomMethodHandler);\n    },\n\n    onRecenterClick() {\n      this.set('autoZoom', false);\n      return this.reCenterMapView(true);\n    },\n\n    renderAdaBoundary(geoJsonData) {\n      const map = this.get('map');\n      this.get('layerGroup').clearLayers();\n      const geoJson = window.L.geoJSON(geoJsonData);\n      this.get('layerGroup').addLayer(geoJson).addTo(map.native);\n      map.native.fitBounds(geoJson.getBounds());\n    },\n\n    actions: {}\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-map/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3cDoPlrz\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-header\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"ada-map-header\\\"],[9],[0,\\\"Map\\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-controls\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"map-widget-button initial-focus-control distance-icon\\\"],[9],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget-body\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[12,\\\"id\\\",[21,\\\"mapElementId\\\"]],[12,\\\"class\\\",[28,[\\\"tomtom-map \\\",[27,\\\"if\\\",[[23,[\\\"isComputingDistance\\\"]],\\\" pinpoint-cursor\\\"],null]]]],[9],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/ada-boundary-map/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    serviceTableRef: null,\n    boundaryInformationTableRef: null,\n    adaService: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n\n      this.buildAdaBoundaryInfo = this.buildAdaBoundaryInfo.bind(this);\n    },\n\n    buildAdaBoundaryInfo(selectedAgencyServiceId) {\n      const boundaryInformationTableRef = this.get('boundaryInformationTableRef');\n      boundaryInformationTableRef.set('queryParams', {\n        agencyServiceId: selectedAgencyServiceId\n      });\n      boundaryInformationTableRef.refreshData();\n    },\n\n    actions: {\n      newAdaBoundaries() {},\n\n      editAdaBoundaries() {},\n\n      deleteAdaBoundaries() {},\n\n      undoAdaBoundaries() {},\n\n      saveAdaBoundaries() {}\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"rgD9w24j\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"disableUndobtn\\\"],[\\\"ADA Boundaries\\\",[27,\\\"action\\\",[[22,0,[]],\\\"newAdaBoundaries\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editAdaBoundaries\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deleteAdaBoundaries\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoAdaBoundaries\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"saveAdaBoundaries\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSaveBtn\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container ada-boundary-container\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ada-boundary-table\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"side-drawer/system-config/ada-boundaries/ada-boundaries-table\\\",null,[[\\\"tableRef\\\",\\\"buildAdaBoundaryInfo\\\"],[[23,[\\\"serviceTableRef\\\"]],[23,[\\\"buildAdaBoundaryInfo\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container ada-boundary-information\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"header-title ada-boundary-information\\\"],[9],[7,\\\"b\\\"],[9],[0,\\\"ADA Boundary Information\\\"],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"name-fields fixed-route ada-boundary-fixed-route\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"b\\\"],[11,\\\"class\\\",\\\"fixed-route-name-size\\\"],[9],[0,\\\"Fixed Route Name\\\"],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"form-components/text\\\",null,[[\\\"class\\\"],[\\\"ada-fixed-route-input\\\"]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"lt-head-wrap ada-table-border\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[27,\\\"side-drawer/system-config/ada-boundaries/ada-boundary-information-table\\\",null,[[\\\"tableRef\\\"],[[23,[\\\"boundaryInformationTableRef\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n           \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"map-widget\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ada-boundary-map\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[21,\\\"side-drawer/system-config/ada-boundaries/ada-boundary-map\\\"],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/ada-boundaries/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/component\", [\"exports\", \"adept-iq/utils/remove-focus\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/component\", \"adept-iq/config/mapped-permIds\"], function (_exports, _removeFocus, _component, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SYSTEM_CONFIG_COMPONENTS = ['contract-management', 'route-master', 'providers', 'places', 'speed-region-groups', 'ivr'];\n  const UNSAVED_CHANGES_CONFIRMATION = 'You have unsaved changes that will be discarded. Close Anyway?';\n  const SECURITY_PERM_IDS = {\n    'Cancel Trips': _mappedPermIds.default.manageCancelTrips || -1,\n    'Book Trips': _mappedPermIds.default.manageBookTrips || -1,\n    'Canned Messages': _mappedPermIds.default.manageCannedMessages || -1,\n    'DB Purge Parameters': _mappedPermIds.default.manageDBPurgeParameters || -1,\n    'Driving Configuration': _mappedPermIds.default.manageDrivingConfiguration || -1,\n    'Fixed Route Engine Parameters': _mappedPermIds.default.manageFixedRouteEngineParameters || -1,\n    'Passwords': _mappedPermIds.default.manageDriverAppAdminPassword || -1,\n    'Route Parameters': _mappedPermIds.default.manageRouteParameters || -1,\n    'Scheduling': _mappedPermIds.default.manageScheduling || -1,\n    'Scheduling Parms': _mappedPermIds.default.manageSchedulingParms || -1,\n    'System Configuration': _mappedPermIds.default.manageSystemConfiguration || -1,\n    'Road Supervisor Configuration': _mappedPermIds.default.manageRoadSupervisorConfiguration || -1,\n    'User Accounts': _mappedPermIds.default.manageUserAccounts || -1\n  };\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    tooltip: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    user: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    title: 'System Configuration',\n    componentName: 'systemConfigurations',\n    // gets passed in by `side-drawer-container`\n    onShrinkClick: null,\n    isSearchEnabled: false,\n    currentComponentPath: Ember.computed.alias('systemConfig.currentComponentPath'),\n    currentRegionSetType: '',\n    // speed or blockout\n    isEmergencySettingsAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return true;\n    }),\n    isContractManagementAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editContractManagement);\n    }),\n    isRouteMasterAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.manageRouteSchedule);\n    }),\n    isPlaceAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editPlaces);\n    }),\n    isProvidersAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editService);\n    }),\n    isSpeedRegionsAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return false; // TODO: enable the permission\n      // return this.get('permissionLayer').permInUserHash(mappedPermIds.manageSpeedRegions);\n    }),\n    isBlockoutRegionsAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.manageBlockoutRegions);\n    }),\n    isAdaBoundariesAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return false; // TODO: enable the permission\n      // return this.get('permissionLayer').permInUserHash(mappedPermIds.manageADABoundaries);\n    }),\n    isIVRAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.editIVR);\n    }),\n    isSearchEffective: Ember.computed.readOnly('systemConfig.isSearchEffective'),\n    searchText: Ember.computed.alias('systemConfig.searchText'),\n    allRootNodes: Ember.computed.readOnly('systemConfig.rootNodes'),\n    rootNodes: Ember.computed('allRootNodes.[]', function () {\n      //check if user has the permission to view and edit the configuration options\n      const systemConfig = this.get('allRootNodes');\n\n      if (systemConfig) {\n        const permissionRootNodes = systemConfig.filter(node => {\n          const permissionRestriction = SECURITY_PERM_IDS[node.label];\n          return !permissionRestriction || this.get('permissionLayer').permInUserHash(permissionRestriction);\n        });\n        return permissionRootNodes;\n      }\n    }),\n    isProcessing: Ember.computed.readOnly('systemConfig.isProcessing'),\n    isModified: Ember.computed.readOnly('systemConfig.isModified'),\n    isError: Ember.computed.readOnly('systemConfig.isError'),\n    isScheduler: Ember.computed.readOnly('user.isScheduler'),\n    hasChanges: Ember.computed.readOnly('systemConfig.hasChanges'),\n    showRightPanel: Ember.computed.alias('systemConfig.showRightPanel'),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('workspace.systemConfigInProgress', true);\n      this.unsavedChangesModal = this.get('unsavedChangesModal').bind(this); // bypass refresh when side panel is being unshrunk\n\n      if (!this.get('systemConfig.isShrinkClick')) {\n        this.get('systemConfig').refresh();\n      }\n\n      this.set('systemConfig.isShrinkClick', false);\n      await this.get('widget').getFutureBookings();\n      await this.get('widget').getFutureSubscriptions();\n\n      if (SYSTEM_CONFIG_COMPONENTS.includes(this.get('systemConfig.currentComponentPath'))) {\n        this.set('systemConfig.showRightPanel', true);\n      }\n    },\n\n    didInsertElement() {\n      this.setSideDrawerWidth('auto');\n    },\n\n    willDestroyElement() {\n      this.set('systemConfig.searchText', null);\n      this.set('showRightPanel', false);\n\n      this._super(...arguments);\n\n      this.set('systemConfig.currentComponentPath', null);\n    },\n\n    focusSearchInput() {\n      Ember.$('.system-config-search-input').focus();\n    },\n\n    switchingRegion() {\n      (0, _removeFocus.cursorWait)();\n      this.set('switchingRegionType', true);\n      Ember.run.later(() => {\n        this.set('switchingRegionType', false);\n        (0, _removeFocus.cursorDefault)();\n      }, _component.WAIT_TIME);\n    },\n\n    unsavedChangesModal(changeFlags, message, action) {\n      const tooltip = this.get('tooltip');\n\n      if (changeFlags.filter(changeFlag => changeFlag).length > 0) {\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          tip: message,\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            tooltip.reset();\n            action();\n          },\n          secondaryActionText: 'Cancel',\n          hasOverlay: true,\n          secondaryAction: () => {\n            tooltip.reset();\n          }\n        });\n      } else {\n        action();\n      }\n    },\n\n    actions: {\n      onSaveClick() {\n        this.get('systemConfig').save();\n      },\n\n      onRefreshClick() {\n        this.unsavedChangesModal([this.get('isModified')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.get('systemConfig').refresh();\n        });\n      },\n\n      onCloseClick() {\n        this.unsavedChangesModal([this.get('isModified'), this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.set('workspace.systemConfigInProgress', false);\n          this.set('showRightPanel', false);\n          this.set('systemConfig.searchText', null);\n          this.set('systemConfig.currentComponentPath', null);\n          this.get('systemConfig').refresh();\n          this.set('systemConfig.hasChanges', false);\n          this.onCloseClick();\n        });\n      },\n\n      onSearchClick() {\n        const isSearchEnabled = this.get('isSearchEnabled');\n\n        if (isSearchEnabled) {\n          this.set('isSearchEnabled', false);\n          return;\n        }\n\n        this.set('searchText', '');\n        this.set('isSearchEnabled', true);\n        Ember.run.scheduleOnce('afterRender', this, 'focusSearchInput');\n      },\n\n      showEmergencySettingsPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.setSideDrawerWidth('auto');\n          this.setProperties({\n            'showRightPanel': true,\n            'currentComponentPath': 'emergency-settings'\n          });\n        });\n      },\n\n      showContractPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.setSideDrawerWidth('auto');\n          this.setProperties({\n            'showRightPanel': true,\n            'currentComponentPath': 'contract-management'\n          });\n        });\n      },\n\n      showRouteMasterPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.setSideDrawerWidth('auto');\n          this.setProperties({\n            'showRightPanel': true,\n            'currentComponentPath': 'route-master'\n          });\n        });\n      },\n\n      showProviderPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.setSideDrawerWidth('auto');\n          this.setProperties({\n            'showRightPanel': true,\n            'currentComponentPath': 'providers'\n          });\n        });\n      },\n\n      showPlacePanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.setSideDrawerWidth('auto');\n          this.setProperties({\n            'showRightPanel': true,\n            'currentComponentPath': 'places'\n          });\n        });\n      },\n\n      showSpeedRegionGroupPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          // do not switch right away\n          if (this.get('switchingRegionType')) {\n            return;\n          }\n\n          this.switchingRegion();\n\n          if (this.get('currentComponentPath') === 'speed-region-groups') {\n            this.set('currentRegionSetType', 'speed');\n          } else {\n            this.setProperties({\n              'showRightPanel': true,\n              'currentComponentPath': 'speed-region-groups',\n              'currentRegionSetType': 'speed'\n            });\n          }\n        });\n      },\n\n      showBlockoutRegionGroupPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          // do not switch right away\n          if (this.get('switchingRegionType')) {\n            return;\n          }\n\n          this.switchingRegion();\n\n          if (this.get('currentComponentPath') === 'speed-region-groups') {\n            this.set('currentRegionSetType', 'blockout');\n          } else {\n            this.setProperties({\n              'showRightPanel': true,\n              'currentComponentPath': 'speed-region-groups',\n              'currentRegionSetType': 'blockout'\n            });\n          }\n        });\n      },\n\n      showIVRPanel() {\n        this.unsavedChangesModal([this.get('hasChanges')], UNSAVED_CHANGES_CONFIRMATION, () => {\n          this.setSideDrawerWidth('auto');\n          this.setProperties({\n            'showRightPanel': true,\n            'currentComponentPath': 'ivr'\n          });\n        });\n      },\n\n      onConfigShrinkClick() {\n        this.set('showRightPanel', false);\n        this.set('systemConfig.isShrinkClick', true);\n        this.onShrinkClick();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/contract-management/component\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/regex-functions\"], function (_exports, _emberConcurrency, _lodash, _regexFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const NUMBER_FORMAT = /^\\d*$/;\n  const REMOVE_TEXT_FORMAT = /[^0-9]+/g;\n  const REMOVE_SPECIAL_FORMAT = /[^a-zA-Z0-9]/g;\n  const CONTRACT_MANAGEMENT_FIELDS = {\n    providerName: '',\n    startRouteName: '',\n    endRouteName: '',\n    adjustMins: '',\n    convertToHourMinutes: '',\n    pullOutMinCap: '',\n    pullOutMaxCap: '',\n    pullInMinCap: '',\n    pullInMaxCap: '',\n    minRouteLength: ''\n  };\n  const CONTRACT_MANAGEMENT_EXCLUSION_FIELDS = ['convertToHourMinutes'];\n  const ZERO_MIN = '00';\n  const IN_ACTIVE_STATUS = 'inactive';\n\n  var _default = Ember.Component.extend({\n    classNames: ['contract-management'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    providers: null,\n    selectedProvider: null,\n    disableBtns: null,\n    contractManagement: null,\n    isNewContract: false,\n    routeError: false,\n    disableForm: true,\n    contractChanges: false,\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    contractFormChanges: Ember.computed('contractChanges', 'contractManagement.{trimSlack,providerName,startRouteName,endRouteName,adjustMins,minRouteLength,convertToHourMinutes,pullOutMinCap,pullOutMaxCap,pullInMinCap,pullInMaxCap}', function () {\n      const contractChanges = this.get('contractChanges');\n      const contractManagement = this.get('contractManagement');\n      const selectedRow = this.get('selectedRow');\n\n      if (selectedRow && this.isContractManagementChanged(contractManagement, selectedRow)) {\n        return true;\n      }\n\n      if (contractChanges) {\n        return true;\n      }\n\n      return false;\n    }),\n    disableSavebtn: Ember.computed('disableForm', 'contractManagement.{providerName,startRouteName,endRouteName,adjustMins,minRouteLength,pullOutMinCap,pullOutMaxCap,pullInMinCap,pullInMaxCap,convertToHourMinutes}', function () {\n      const disableForm = this.get('disableForm');\n      const contractManagement = this.get('contractManagement');\n\n      if (disableForm) {\n        return true;\n      }\n\n      const hasValues = Object.values(contractManagement).every(input => Ember.isPresent(input));\n      return !hasValues;\n    }),\n\n    isContractManagementChanged(contractManagement, selectedRow) {\n      const fields = {};\n      Object.entries(CONTRACT_MANAGEMENT_FIELDS).forEach(key => {\n        if (!CONTRACT_MANAGEMENT_EXCLUSION_FIELDS.includes(key)) {\n          fields[key[0]] = selectedRow.get(key[0]);\n        }\n      });\n      return JSON.stringify(contractManagement) !== JSON.stringify(fields);\n    },\n\n    disableUndobtn: Ember.computed('disableForm', 'contractFormChanges', function () {\n      const disableForm = this.get('disableForm');\n      const contractFormChanges = this.get('contractFormChanges');\n      const returnValue = !(!disableForm && contractFormChanges);\n      this.hasChanges(!returnValue);\n      return returnValue;\n    }),\n    selectedRowChange: Ember.observer('selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      if (selectedRow) this.set('disableForm', true);\n      this.setDefaultProperties(selectedRow);\n      this.defaultSettings();\n    }),\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const providers = this.get('store').peekAll('provider');\n      const activeProviders = providers.filter(provider => !(provider.get('status').toLowerCase() === IN_ACTIVE_STATUS));\n      const providerNames = activeProviders.map(val => val.get('name'));\n      this.get('contractChanges');\n      this.set('providers', providerNames);\n      this.hasChanges = this.get('hasChanges').bind(this);\n      this.setDefaultProperties();\n      this.defaultSettings();\n    },\n\n    setDefaultProperties(record) {\n      const fields = {};\n      Object.entries(CONTRACT_MANAGEMENT_FIELDS).forEach(key => {\n        fields[key[0]] = record ? record.get(key[0]) : CONTRACT_MANAGEMENT_FIELDS[key[0]];\n      });\n      this.resetErrors();\n      this.set('contractManagement', Ember.Object.create(fields));\n      this.set('contractChanges', false);\n      this.hasChanges(false);\n    },\n\n    resetErrors() {\n      this.setProperties({\n        'providerNameError': false,\n        'startRouteError': false,\n        'endrouteError': false,\n        'routeStartError': false,\n        'minRouteLenError': false,\n        'routeOverlapError': false,\n        'adjustMinsError': false,\n        'pullOutMinError': false,\n        'pullOutMaxError': false,\n        'pullInMinError': false,\n        'pullInMaxError': false\n      });\n    },\n\n    defaultSettings() {\n      const disableBtns = {\n        new: false,\n        edit: false,\n        delete: false\n      };\n      this.set('disableBtns', disableBtns);\n    },\n\n    convertToMinutes(hours) {\n      const fieldArray = hours.split(':');\n      return parseInt(fieldArray[1], 10) + 60 * parseInt(fieldArray[0], 10);\n    },\n\n    save: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const convertToHourMinutes = this.get('contractManagement.convertToHourMinutes');\n      let isSaveSuccessful = true;\n      const mins = this.convertToMinutes(convertToHourMinutes);\n      this.set('contractManagement.minRouteLength', mins);\n      const attributes = this.get('contractManagement');\n      const notifications = this.get('notifications');\n      attributes.set('trimSlack', true);\n      let record = null;\n\n      if (!this.get('isNewContract')) {\n        record = this.get('selectedRow');\n        const fields = this.get('contractManagement');\n        Object.entries(fields).forEach(_ref => {\n          let [key, val] = _ref;\n\n          // exclude attributes that are computed properties in request payload\n          if (!CONTRACT_MANAGEMENT_EXCLUSION_FIELDS.includes(key)) {\n            record.set(key, val);\n          }\n        });\n      } else {\n        record = store.createRecord('trim-slack-contract-management', attributes);\n      }\n\n      try {\n        yield record.save(); // Update the value in record so that it shows the latest changes in table\n\n        record.set('convertToHourMinutes', convertToHourMinutes);\n        notifications.success('Record successfully saved');\n      } catch (error) {\n        isSaveSuccessful = false;\n        record.rollbackAttributes(); // eslint-disable-next-line no-console\n\n        console.error(error);\n        notifications.warning('Record failed to save');\n        throw error;\n      } finally {\n        if (isSaveSuccessful) {\n          const tableRef = this.get('tableRef');\n          const selectedRow = this.get('selectedRow');\n          this.set('contractChanges', false);\n\n          if (tableRef) {\n            Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n\n            if (!selectedRow) {\n              tableRef.set('config.selectFirstRow', true);\n              tableRef.get('firstRowSelectedTask').perform();\n            }\n          }\n        }\n\n        this.set('contractManagement.trimSlack');\n      }\n    }).drop(),\n    delete: (0, _emberConcurrency.task)(function* () {\n      const record = this.get('selectedRow');\n      const notifications = this.get('notifications');\n\n      try {\n        record.deleteRecord();\n        yield record.save();\n        notifications.success('Record successfully deleted.');\n      } catch (error) {\n        notifications.warning('Record failed to delete.');\n      } finally {\n        const tableRef = this.get('tableRef');\n\n        if (tableRef) {\n          Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n\n          tableRef.set('config.selectFirstRow', true);\n          tableRef.get('firstRowSelectedTask').perform();\n        }\n      }\n    }).drop(),\n\n    validateRecords() {\n      const store = this.get('store');\n      const record = this.get('contractManagement') || [];\n      const convertToHourMinutes = record.get('convertToHourMinutes');\n      const startRouteName = record.get('startRouteName');\n      const endRouteName = record.get('endRouteName');\n      const startRouteNameTime = parseInt(startRouteName, 10);\n      const endRouteNameTime = parseInt(endRouteName, 10);\n      const providerName = record.get('providerName');\n      const adjustMins = record.get('adjustMins');\n      const pullOutMaxCap = record.get('pullOutMaxCap');\n      const pullOutMinCap = record.get('pullOutMinCap');\n      const pullInMaxCap = record.get('pullInMaxCap');\n      const pullInMinCap = record.get('pullInMinCap');\n\n      const isHHMMformat = _regexFunctions.REGEX_HHMM.test(convertToHourMinutes);\n\n      const isValidMinRouteLength = this.validateMinRouteLengthField(convertToHourMinutes);\n      let errors = [];\n      this.setProperties({\n        'providerNameError': false,\n        'startRouteError': false,\n        'endrouteError': false,\n        'routeStartError': false,\n        'minRouteLenError': false,\n        'routeOverlapError': false,\n        'adjustMinsError': false,\n        'pullOutMinError': false,\n        'pullOutMaxError': false,\n        'pullInMinError': false,\n        'pullInMaxError': false\n      });\n      const id = this.get('selectedRow.id') || '';\n\n      if (!providerName) {\n        errors.pushObject({\n          'validation': 'Provider cannot be empty.'\n        });\n        this.set('providerNameError', true);\n      }\n\n      if (!startRouteName) {\n        errors.pushObject({\n          'validation': 'Start Route cannot be empty.'\n        });\n        this.set('startRouteError', true);\n      }\n\n      if (!endRouteName) {\n        errors.pushObject({\n          'validation': 'End Route cannot be empty.'\n        });\n        this.set('endrouteError', true);\n      }\n\n      if (startRouteNameTime >= endRouteNameTime) {\n        errors.pushObject({\n          'validation': 'Start Route must be less than End Route.'\n        });\n        this.set('routeStartError', true);\n      } else {\n        let data = store.peekAll('trim-slack-contract-management');\n\n        if (!this.get('isNewContract')) {\n          data = data.filter(item => item.get('id') !== id);\n        }\n\n        data.forEach(contract => {\n          if (startRouteNameTime >= contract.get('startRouteName') && startRouteNameTime <= contract.get('endRouteName') || endRouteNameTime >= contract.get('startRouteName') && endRouteNameTime <= contract.get('endRouteName')) {\n            errors.pushObject({\n              'validation': 'Route Number range cannot overlap an existing Route Number range.'\n            });\n            this.set('routeOverlapError', true);\n            return false;\n          }\n        });\n      }\n\n      if (Ember.isEmpty(adjustMins)) {\n        errors.pushObject({\n          'validation': 'Adjust Minutes cannot be empty.'\n        });\n        this.set('adjustMinsError', true);\n      }\n\n      if (!isHHMMformat) {\n        errors.pushObject({\n          'validation': 'Min Route Length value must be entered in hh:mm format.'\n        });\n        this.set('minRouteLenError', true);\n      }\n\n      if (!isValidMinRouteLength) {\n        errors.pushObject({\n          'validation': 'Min Route Length must be at least 00:01.'\n        });\n        this.set('minRouteLenError', true);\n      }\n\n      if (Ember.isEmpty(pullOutMinCap)) {\n        errors.pushObject({\n          'validation': 'Pull Out Min Cap cannot be empty.'\n        });\n        this.set('pullOutMinError', true);\n      }\n\n      if (Ember.isEmpty(pullOutMaxCap)) {\n        errors.pushObject({\n          'validation': 'Pull Out Max Cap cannot be empty.'\n        });\n        this.set('pullOutMaxError', true);\n      }\n\n      if (Ember.isEmpty(pullInMinCap)) {\n        errors.pushObject({\n          'validation': 'Pull In Min Cap cannot be empty.'\n        });\n        this.set('pullInMinError', true);\n      }\n\n      if (Ember.isEmpty(pullInMaxCap)) {\n        errors.pushObject({\n          'validation': 'Pull In Max Cap cannot be empty.'\n        });\n        this.set('pullInMaxError', true);\n      }\n\n      const tooltip = this.get('tooltip'); //both start route and end route range can overlap existing routes\n      // range error message will display twice\n\n      errors = (0, _lodash.uniqBy)(errors, 'validation');\n\n      if (errors.length) {\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          errors,\n          primaryActionText: 'OK',\n          primaryAction: () => tooltip.reset()\n        });\n      }\n\n      return !errors.length;\n    },\n\n    validateRecordTask: (0, _emberConcurrency.task)(function* () {\n      return yield this.validateRecords();\n    }).drop(),\n\n    /**\n     * Input Value(10:11)\n     * @param value\n     * @returns {boolean}\n     */\n    validateMinRouteLengthField(value) {\n      let valid = true;\n      const splits = value.split(':');\n      const isValidMinRouteLength = splits.every(ele => ele === ZERO_MIN);\n\n      if (isValidMinRouteLength) {\n        valid = false;\n      }\n\n      if (splits.length !== 2) {\n        valid = false;\n      }\n\n      splits.forEach(str => {\n        if (str.length !== 2) {\n          valid = false;\n        }\n      });\n      return valid;\n    },\n\n    actions: {\n      onProviderChange(item) {\n        this.set('contractManagement.providerName', item);\n        this.set('contractChanges', true);\n      },\n\n      onRouteLengthChange(contractManagement, maskObj) {\n        const value = maskObj.masked;\n        const mins = this.convertToMinutes(value);\n        contractManagement.set('convertToHourMinutes', value);\n        contractManagement.set('minRouteLength', mins);\n        this.set('contractChanges', true);\n      },\n\n      newContract() {\n        const selectedRow = this.get('selectedRow');\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n          this.set('tableRef.config.selectFirstRow', false);\n        }\n\n        this.setDefaultProperties();\n        this.set('isNewContract', true);\n        this.set('disableForm', false);\n        this.set('contractChanges', false);\n        this.get('tableRef').onUncheckAll();\n        this.set('disableBtns.delete', true);\n        this.set('disableBtns.edit', true);\n        this.set('disableBtns.new', true);\n      },\n\n      editContract() {\n        const selectedRow = this.get('selectedRow');\n        this.setDefaultProperties(selectedRow);\n        this.set('isNewContract', false);\n        this.set('disableForm', false);\n        this.set('contractChanges', false);\n        this.set('disableBtns.delete', true);\n        this.set('disableBtns.edit', true);\n        this.set('disableBtns.new', true);\n      },\n\n      deleteContract() {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          tip: 'Are you sure you want to delete this record?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return this.get('delete').perform().then(() => {\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n        this.resetErrors();\n      },\n\n      saveContract() {\n        this.resetErrors();\n\n        if (this.validateRecords()) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'System Configuration',\n            hasoverlay: true,\n            tip: 'Are you sure you want to save these changes?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              tooltip.reset();\n              return this.get('save').perform().then(() => {\n                this.set('disableForm', true);\n                this.defaultSettings();\n              });\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              tooltip.reset();\n            }\n\n          });\n        }\n      },\n\n      undoContract() {\n        this.resetErrors();\n\n        if (this.get('isNewContract')) {\n          this.setDefaultProperties();\n        } else {\n          const selectedRow = this.get('selectedRow');\n          this.setDefaultProperties(selectedRow);\n        }\n      },\n\n      onContractFormChanges(value) {\n        let finalValue;\n\n        if (!NUMBER_FORMAT.test(value)) {\n          finalValue = value.replace(REMOVE_SPECIAL_FORMAT, '');\n          finalValue = value.replace(REMOVE_TEXT_FORMAT, '');\n          this.set('contractManagement.adjustMins', finalValue);\n          this.set('contractChanges', true);\n        } else {\n          this.set('contractChanges', true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/contract-management/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/contract-management/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    store: Ember.inject.service(),\n    classNames: ['contract-management-table'],\n    config: _config.default,\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    hasPendingChanges: Ember.computed('contractFormChanges', function () {\n      const contractFormChanges = this.get('contractFormChanges') || false;\n      return contractFormChanges;\n    }),\n\n    /**\n     * this method override the save record method in generic table component\n     * @param record\n     * @returns {*}\n     */\n    saveRecord(record) {\n      const saveRecordTask = this.get('saveRecordTask');\n      if (saveRecordTask) return saveRecordTask.perform();\n      return record.save();\n    },\n\n    fetchDataQuery() {\n      return this._super(...arguments).then(records => {\n        records.forEach(rec => {\n          const provider = this.store.peekRecord('provider', rec.providerName);\n          const providerName = provider ? provider.get('name') : rec.providerName;\n          rec.set('providerName', providerName);\n        });\n        return records;\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/contract-management/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'trim-slack-contract-management',\n    title: 'Contract Management',\n    tooltipTitle: 'System Configuration',\n    defaultSortId: 'provider',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    // hideWidgetControls: true,\n    columns: [{\n      id: 'provider',\n      index: 0,\n      type: 'string',\n      label: 'Provider',\n      valuePath: 'providerName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'stratRoute',\n      index: 1,\n      type: 'uuid',\n      //adept 4 is no longer part of the system, route's will include characters\n      label: 'Start Route',\n      valuePath: 'startRouteName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'endRoute',\n      index: 2,\n      type: 'uuid',\n      // adept 4 is no longer part of the system, route's will include characters\n      label: 'End Route',\n      valuePath: 'endRouteName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'trimSlackmin',\n      index: 3,\n      type: 'number',\n      label: 'Adjust Amount',\n      valuePath: 'adjustMins',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'trimslackMinRouteLength',\n      index: 4,\n      type: 'text',\n      label: 'Min Route Length',\n      valuePath: 'convertToHourMinutes',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'pullOutMinCap',\n      index: 5,\n      type: 'number',\n      label: 'Pull Out Min Cap',\n      valuePath: 'pullOutMinCap',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'pullOutMaxCap',\n      index: 6,\n      type: 'number',\n      label: 'Pull Out Max Cap',\n      valuePath: 'pullOutMaxCap',\n      defaultWidth: 90,\n      searchable: true\n    }, {\n      id: 'pullInMinCap',\n      index: 7,\n      type: 'number',\n      label: 'Pull In Min Cap',\n      valuePath: 'pullInMinCap',\n      defaultWidth: 90,\n      searchable: true\n    }, {\n      id: 'pullInMaxCap',\n      index: 8,\n      type: 'number',\n      label: 'Pull In Max Cap',\n      valuePath: 'pullInMaxCap',\n      defaultWidth: 90,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/contract-management/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7CJHsOwx\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"contractFormChanges\\\",\\\"disableUndobtn\\\"],[\\\"Contract Management\\\",[27,\\\"action\\\",[[22,0,[]],\\\"newContract\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editContract\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deleteContract\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoContract\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"saveContract\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"contractFormChanges\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"side-drawer/system-config/contract-management/table\\\",null,[[\\\"tableRef\\\",\\\"contractFormChanges\\\",\\\"saveRecordTask\\\",\\\"validateRecord\\\",\\\"isTaskRunning\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"contractFormChanges\\\"]],[23,[\\\"save\\\"]],[23,[\\\"validateRecordTask\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"contract-management\\\",\\\"Contract Management\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"contract-management-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group  \\\",[27,\\\"if\\\",[[23,[\\\"providerNameError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[\\\"Select provider\\\",[23,[\\\"providers\\\"]],[23,[\\\"contractManagement\\\",\\\"providerName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderChange\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"routeStartError\\\"]],[23,[\\\"routeOverlapError\\\"]],[23,[\\\"startRouteError\\\"]]],null],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start Route\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"#\\\",[23,[\\\"disableForm\\\"]],[23,[\\\"contractManagement\\\",\\\"startRouteName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"contractManagement\\\",\\\"startRouteName\\\"]]],null]],null]]]],false],[0,\\\"\\\\n       \\\"],[10],[0,\\\"\\\\n\\\\n       \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"endrouteError\\\"]],[23,[\\\"routeOverlapError\\\"]]],null],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"End Route\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"#\\\",[23,[\\\"disableForm\\\"]],[23,[\\\"contractManagement\\\",\\\"endRouteName\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"contractManagement\\\",\\\"endRouteName\\\"]]],null]],null]]]],false],[0,\\\"\\\\n       \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n       \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"trim-slack\\\",\\\"Trim Slack\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trim-slack-panel\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[23,[\\\"adjustMinsError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n           \\\"],[7,\\\"label\\\"],[9],[0,\\\" Adjust Amount \\\"],[10],[0,\\\"\\\\n      \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"maxlength\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Minutes\\\",\\\"text\\\",\\\"3\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onContractFormChanges\\\",[23,[\\\"contractManagement\\\",\\\"adjustMins\\\"]]],null],[23,[\\\"contractManagement\\\",\\\"adjustMins\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"minRouteLenError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Min Route Length\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"HH:MM\\\",\\\"99:99\\\",[23,[\\\"disableForm\\\"]],[27,\\\"readonly\\\",[[23,[\\\"contractManagement\\\",\\\"convertToHourMinutes\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteLengthChange\\\",[23,[\\\"contractManagement\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[23,[\\\"pullOutMinError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Pull Out Min Cap\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Minutes\\\",[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[3]]],[23,[\\\"contractManagement\\\",\\\"pullOutMinCap\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"contractManagement\\\",\\\"pullOutMinCap\\\"]]],null]],null]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[23,[\\\"pullOutMaxError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Pull Out Max Cap\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Minutes\\\",[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[3]]],[23,[\\\"contractManagement\\\",\\\"pullOutMaxCap\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"contractManagement\\\",\\\"pullOutMaxCap\\\"]]],null]],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[23,[\\\"pullInMinError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Pull In Min Cap\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Minutes\\\",[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[3]]],[23,[\\\"contractManagement\\\",\\\"pullInMinCap\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"contractManagement\\\",\\\"pullInMinCap\\\"]]],null]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group input-box \\\",[27,\\\"if\\\",[[23,[\\\"pullInMaxError\\\"]],\\\"routeError\\\"],null]]]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Pull In Max Cap\\\"],[10],[0,\\\"\\\\n          \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"Minutes\\\",[23,[\\\"disableForm\\\"]],[27,\\\"hash\\\",null,[[\\\"max\\\"],[3]]],[23,[\\\"contractManagement\\\",\\\"pullInMaxCap\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"contractManagement\\\",\\\"pullInMaxCap\\\"]]],null]],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/contract-management/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/emergency-settings/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    audioAlert: Ember.inject.service(),\n    // component attributes\n    selectedFile: null,\n    selectedFileName: '',\n    isDraggingFile: false,\n    disableUpload: true,\n    originalSettings: null,\n    isEditingAudio: false,\n    disableSavebtn: true,\n    disableUndobtn: true,\n    // audio attributes\n    uploadedAudio: null,\n    reDisplayFrequency: null,\n    audioDataUrl: null,\n    uploadAudioFileTask: (0, _emberConcurrency.task)(function* () {\n      const file = this.get('selectedFile');\n      if (!file) return;\n\n      if (file.size > 5 * 1024 * 1024) {\n        this.get('notifications').warning('File size exceeds the 5MB limit.');\n        return;\n      }\n\n      const configItemId = 'config-Notification_Banners-Emergency/emergency_audio';\n      const configItem = this.get('store').peekRecord('cs-config-item', configItemId);\n      const currentFileId = configItem?.value?.fileId;\n      let isDefaultFile = false;\n\n      if (currentFileId) {\n        const currentFileRecord = yield this.get('store').peekRecord('cs-config-file', currentFileId, {\n          reload: true\n        });\n        const fileName = currentFileRecord.get('fileName')?.toLowerCase();\n        isDefaultFile = fileName === 'defaultalert.wav';\n      }\n\n      try {\n        // Delete existing uploaded file if it's not default\n        if (currentFileId && !isDefaultFile) {\n          const oldFile = yield this.get('store').findRecord('cs-config-file', currentFileId, {\n            reload: true\n          });\n          yield oldFile.destroyRecord();\n        } // Create and save the new file\n\n\n        const newFileRecord = this.get('store').createRecord('cs-config-file', {\n          file\n        });\n        const savedFile = yield newFileRecord.save(); // Update config item with new fileId\n\n        configItem.set('value', { ...configItem.value,\n          fileId: savedFile.id\n        });\n        yield configItem.save(); // Load the new file to get encoded audio for preview\n\n        const freshFile = yield this.get('store').findRecord('cs-config-file', savedFile.id, {\n          reload: true\n        });\n        let dataUrl = freshFile.get('encoded');\n\n        if (typeof dataUrl === 'string' && dataUrl.startsWith('data:audio/wave')) {\n          dataUrl = dataUrl.replace('data:audio/wave', 'data:audio/wav');\n        } // Update UI\n\n\n        this.setProperties({\n          uploadedAudio: {\n            fileName: freshFile.get('fileName'),\n            enabled: configItem.value.enabled !== false\n          },\n          audioDataUrl: dataUrl,\n          selectedFile: null,\n          selectedFileName: '',\n          disableUpload: true\n        });\n        this.get('audioAlert').reloadConfig();\n        this.get('notifications').success('Audio file uploaded successfully.');\n      } catch (err) {\n        this.get('notifications').warning('Failed to upload file.');\n      }\n    }).drop(),\n    resetToDefaultTask: (0, _emberConcurrency.task)(function* () {\n      const audioConfigItem = this.get('store').peekRecord('cs-config-item', 'config-Notification_Banners-Emergency/emergency_audio');\n      const currentFileId = audioConfigItem?.value?.fileId;\n      const defaultValue = JSON.parse(audioConfigItem.defaultValue);\n      const defaultFileId = defaultValue?.fileId; // reset frequency\n\n      const frequencyRecord = this.get('store').peekRecord('cs-config-item', 'config-Notification_Banners-Emergency/re_display_seconds');\n      const defaultFrequency = parseInt(frequencyRecord?.value, 10);\n\n      if (!defaultFileId) {\n        this.get('notifications').warning('Default file not configured.');\n        return;\n      } // Delete current file if it is not the default\n\n\n      if (currentFileId && currentFileId !== defaultFileId) {\n        try {\n          const currentFileRecord = yield this.get('store').findRecord('cs-config-file', currentFileId, {\n            reload: true\n          });\n          yield currentFileRecord.destroyRecord();\n        } catch (e) {\n          console.warn(`Failed to delete current file (id=${currentFileId}):`, e); // eslint-disable-line no-console\n        }\n      }\n\n      try {\n        // Replace value with defaultValue\n        audioConfigItem.set('value', { ...defaultValue\n        });\n        yield audioConfigItem.save(); // Reload default file to get encoded preview\n\n        const defaultFile = yield this.get('store').findRecord('cs-config-file', defaultValue.fileId, {\n          reload: true\n        });\n        let dataUrl = defaultFile.get('encoded');\n\n        if (typeof dataUrl === 'string' && dataUrl.startsWith('data:audio/wave')) {\n          dataUrl = dataUrl.replace('data:audio/wave', 'data:audio/wav');\n        } // Update UI\n\n\n        this.setProperties({\n          uploadedAudio: {\n            fileName: defaultFile.get('fileName'),\n            enabled: defaultValue.enabled !== false\n          },\n          reDisplayFrequency: defaultFrequency || 60,\n          audioDataUrl: dataUrl,\n          selectedFile: null,\n          selectedFileName: '',\n          disableUpload: true\n        });\n        this.get('audioAlert').reloadConfig();\n        this.get('notifications').success('Reset to default alert successfully.');\n      } catch (err) {\n        this.get('notifications').warning('Failed to reset to default.');\n      }\n    }).drop(),\n\n    init() {\n      this._super(...arguments);\n\n      const frequencyId = 'config-Notification_Banners-Emergency/re_display_seconds';\n      const emergencyAudioId = 'config-Notification_Banners-Emergency/emergency_audio';\n      const audioRecord = this.get('store').peekRecord('cs-config-item', emergencyAudioId);\n      const {\n        fileId,\n        enabled\n      } = audioRecord.value; // fetch the audio frequency\n\n      const frequencyRecord = this.get('store').peekRecord('cs-config-item', frequencyId);\n      const frequency = parseInt(frequencyRecord.value, 10); // download the file\n\n      this.get('store').findRecord('cs-config-file', fileId).then(fileRecord => {\n        this.set('uploadedAudio', {\n          fileName: fileRecord.get('fileName'),\n          enabled: enabled !== false\n        });\n        this.set('selectedFileName', fileRecord.get('fileName'));\n        let dataUrl = fileRecord.get('encoded');\n\n        if (typeof dataUrl === 'string' && dataUrl.startsWith('data:audio/wave')) {\n          dataUrl = dataUrl.replace('data:audio/wave', 'data:audio/wav');\n        }\n\n        this.set('audioDataUrl', dataUrl);\n      }); // set component properties\n\n      this.setProperties({\n        originalSettings: {\n          enabled: enabled !== false,\n          reDisplayFrequency: frequency\n        },\n        reDisplayFrequency: frequency\n      });\n    },\n\n    willDestroyElement() {},\n\n    actions: {\n      updateFrequency(event) {\n        const value = Number(event.target.value);\n        this.set('reDisplayFrequency', value);\n      },\n\n      updateEnabled(event) {\n        const value = event.target.checked;\n        this.set('uploadedAudio.enabled', value);\n      },\n\n      saveAudioAlert() {\n        const audioConfigItem = this.get('store').peekRecord('cs-config-item', 'config-Notification_Banners-Emergency/emergency_audio');\n        const uploadedAudio = this.get('uploadedAudio');\n        const updatedValue = { ...audioConfigItem.value,\n          enabled: uploadedAudio.enabled\n        };\n        audioConfigItem.set('value', updatedValue);\n        const frequencyItem = this.get('store').peekRecord('cs-config-item', 'config-Notification_Banners-Emergency/re_display_seconds');\n        const reDisplayFrequency = this.get('reDisplayFrequency');\n        frequencyItem.set('value', reDisplayFrequency);\n        const originalSettings = this.get('originalSettings');\n        const isFrequencyChanged = reDisplayFrequency !== originalSettings.reDisplayFrequency;\n        Promise.all([audioConfigItem.save(), frequencyItem.save()]).then(() => {\n          this.setProperties({\n            originalSettings: {\n              reDisplayFrequency,\n              enabled: updatedValue.enabled\n            },\n            reDisplayFrequency,\n            isEditingAudio: false,\n            disableSavebtn: true,\n            disableUndobtn: true\n          });\n\n          if (isFrequencyChanged) {\n            this.get('notifications').setup();\n          }\n\n          this.get('audioAlert').reloadConfig();\n          this.get('notifications').success('Audio settings saved successfully.');\n        }).catch(() => {\n          this.get('notifications').warning('Failed to save audio settings.');\n        });\n      },\n\n      undoAudioAlert() {\n        const originalSettings = this.get('originalSettings');\n        const {\n          enabled,\n          reDisplayFrequency\n        } = originalSettings || {};\n        this.setProperties({\n          uploadedAudio: { ...this.uploadedAudio,\n            enabled\n          },\n          reDisplayFrequency,\n          isEditingAudio: false,\n          disableSavebtn: true,\n          disableUndobtn: true\n        });\n      },\n\n      editAudioAlert() {\n        this.setProperties({\n          isEditingAudio: true,\n          disableSavebtn: false,\n          disableUndobtn: false\n        });\n      },\n\n      onDragOver(event) {\n        event.preventDefault();\n\n        if (!this.isDraggingFile) {\n          this.set('isDraggingFile', true);\n        }\n      },\n\n      onDragLeave(event) {\n        event.preventDefault();\n        this.set('isDraggingFile', false);\n      },\n\n      onFileDropped(event) {\n        event.preventDefault();\n        this.set('isDraggingFile', false);\n        const file = event.dataTransfer.files?.[0];\n        if (!file) return;\n\n        if (!file.type.startsWith('audio/')) {\n          this.notifications.error('Only audio files are allowed.');\n          return;\n        }\n\n        this.set('selectedFile', file);\n        this.set('selectedFileName', file.name);\n        this.set('disableUpload', false);\n      },\n\n      onFileSelected(event) {\n        const file = event.target.files?.[0];\n        if (!file) return;\n\n        if (!file.type.startsWith('audio/')) {\n          this.notifications.error('Only audio files are allowed.');\n          return;\n        }\n\n        this.set('selectedFile', file);\n        this.set('selectedFileName', file.name);\n        this.set('disableUpload', false);\n      },\n\n      testAudio() {\n        const audio = document.getElementById('emergency-audio-preview');\n\n        if (audio) {\n          audio.currentTime = 0;\n          audio.play();\n        }\n      },\n\n      uploadAudioFile() {\n        this.get('uploadAudioFileTask').perform();\n      },\n\n      resetAudioFile() {\n        this.get('resetToDefaultTask').perform();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/emergency-settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"WwNErZOs\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"saveRecord\\\",\\\"undoRecord\\\",\\\"editRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"disableUndobtn\\\"],[\\\"Emergency Settings\\\",[27,\\\"action\\\",[[22,0,[]],\\\"saveAudioAlert\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoAudioAlert\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editAudioAlert\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"emergency-settings\\\",\\\"\\\",false]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"section-title\\\"],[9],[0,\\\"Audio File\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"upload-notes\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"li\\\"],[9],[0,\\\"Audio uploads must be \\\"],[7,\\\"strong\\\"],[9],[0,\\\".WAV\\\"],[10],[0,\\\" files with a max size of \\\"],[7,\\\"strong\\\"],[9],[0,\\\"5MB\\\"],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"upload-area\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isDraggingFile\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"upload-area-overlay\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"highlight-dropzone\\\"],[9],[0,\\\"Drop your .WAV file here\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropzone\\\"],[12,\\\"ondrop\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFileDropped\\\"],null]],[12,\\\"ondragover\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDragOver\\\"],null]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-cloud-upload upload-icon\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[9],[0,\\\"Drag and drop file here or choose a file\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"file-input-group\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-sm elm\\\"],[9],[0,\\\"Choose File\\\\n        \\\"],[7,\\\"input\\\"],[11,\\\"ccept\\\",\\\"audio/wav\\\"],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onFileSelected\\\"],null]],[12,\\\"disabled\\\",[22,0,[\\\"uploadAudioFileTask\\\",\\\"isRunning\\\"]]],[11,\\\"hidden\\\",\\\"\\\"],[11,\\\"type\\\",\\\"file\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"readonly\\\",\\\"\\\"],[12,\\\"value\\\",[21,\\\"selectedFileName\\\"]],[11,\\\"placeholder\\\",\\\"No file selected\\\"],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-primary btn-sm elm\\\"],[12,\\\"disabled\\\",[21,\\\"disableUpload\\\"]],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"uploadAudioFileTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-spinner fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Uploading...\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        Upload\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"uploadAudioFile\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-secondary btn-sm elm\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"uploadAudioFileTask\\\",\\\"isRunning\\\"]],[23,[\\\"resetToDefaultTask\\\",\\\"isRunning\\\"]],[27,\\\"eq\\\",[[23,[\\\"uploadedAudio\\\",\\\"fileName\\\"]],\\\"defaultAlert.wav\\\"],null]],null]],[9],[0,\\\"\\\\n        Reset to Default\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"resetAudioFile\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"uploaded-audio-details\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"table\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"thead\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"File Name\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tbody\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"file-name-with-icon\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"uploadedAudio\\\",\\\"fileName\\\"]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"audioDataUrl\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"audio\\\"],[11,\\\"id\\\",\\\"emergency-audio-preview\\\"],[12,\\\"src\\\",[21,\\\"audioDataUrl\\\"]],[11,\\\"preload\\\",\\\"auto\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-volume-up speaker-icon \\\",[27,\\\"if\\\",[[23,[\\\"isPlayingAudio\\\"]],\\\" playing\\\"],null]]]],[11,\\\"title\\\",\\\"Play\\\"],[9],[3,\\\"action\\\",[[22,0,[]],\\\"testAudio\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"section-title\\\"],[9],[0,\\\"General Setting\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group-inline\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"notification-frequency\\\"],[9],[0,\\\"Emergency Alert Frequency (in seconds)\\\"],[10],[0,\\\"\\\\n      \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"id\\\",\\\"value\\\",\\\"min\\\",\\\"step\\\",\\\"disabled\\\",\\\"input\\\"],[\\\"number\\\",\\\"notification-generic-label\\\",[27,\\\"or\\\",[[23,[\\\"reDisplayFrequency\\\"]],60],null],\\\"1\\\",\\\"1\\\",[27,\\\"not\\\",[[23,[\\\"isEditingAudio\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"updateFrequency\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-group-inline\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"label\\\"],[11,\\\"for\\\",\\\"notification-generic-label\\\"],[9],[0,\\\"Enable Emergency Alert Audio\\\"],[10],[0,\\\"\\\\n      \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"checked\\\",\\\"disabled\\\",\\\"change\\\"],[\\\"checkbox\\\",[23,[\\\"uploadedAudio\\\",\\\"enabled\\\"]],[27,\\\"not\\\",[[23,[\\\"isEditingAudio\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"updateEnabled\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/emergency-settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ivr/component\", [\"exports\", \"ember-changeset\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/system-config/ivr/messages\"], function (_exports, _emberChangeset, _emberConcurrency, _messages) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['ivr-messages-view'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    disableEditing: true,\n    disableBtns: null,\n    ivrMessages: null,\n    transferHours: null,\n    transferHoursWeekDays: null,\n    // changedValues and _changedAt exist as the isDirty of the weekday changesets does not seem to work\n    changedValues: null,\n    _changedAt: null,\n    weekdaysExpanded: null,\n    weekendExpanded: null,\n    tabOption: null,\n    displayOnlyMessages: _messages.displayOnlyMessages,\n    changedAt: Ember.computed('_changedAt', {\n      get() {\n        const changedAt = this.get('_changedAt');\n        return changedAt;\n      },\n\n      set(key, value) {\n        let saveValue = value;\n\n        if (!saveValue) {\n          saveValue = {};\n        }\n\n        this.set('_changedAt', saveValue);\n        return saveValue;\n      }\n\n    }),\n    displayOnlyTab: Ember.computed('tabOption', function () {\n      return this.get('tabOption') === 'display-only-values';\n    }),\n    initialGreetingMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'initial_greeting');\n    }),\n    optionalGreetingMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'optional_greeting');\n    }),\n    disclaimerMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'disclaimer_message');\n    }),\n    representativePhoneNumberMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'representative_phone_number');\n    }),\n    schedulePhoneNumberMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'schedule_phone_number');\n    }),\n    tripCancelFailurePhoneNumberMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'trip_cancel_failure_phone_number');\n    }),\n    clientHelpMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'client_help_message');\n    }),\n    pickupCancelFailureMessage: Ember.computed('ivrMessages', function () {\n      return this.get('ivrMessages').find(ivrMessage => ivrMessage.get('name') === 'pickup_cancel_failure_message');\n    }),\n    transferUnavailableMessage: Ember.computed('transferHours', function () {\n      return this.get('transferHours').find(transferHoursItem => transferHoursItem.get('name') === 'transfer_unavailable_message');\n    }),\n    isDirty: Ember.computed('ivrMessages.@each.isDirty', 'transferHours.@each.isDirty', '_changedAt', function () {\n      const ivrMessages = this.get('ivrMessages') || [];\n      const transferHours = this.get('transferHours') || [];\n      const transferHoursWeekDays = this.get('transferHoursWeekDays') || [];\n      let isDirty = false;\n      [ivrMessages, transferHours].forEach(changeSet => {\n        changeSet.forEach(change => {\n          const isChangeDirty = change.get('isDirty');\n\n          if (isChangeDirty) {\n            isDirty = isChangeDirty;\n          }\n        });\n      });\n      [transferHoursWeekDays].forEach(changeSet => {\n        const changedValues = this.get('changedValues');\n        changeSet.forEach(change => {\n          const dayName = change.get('name');\n          const dayValue = change.get('value');\n          const value = changedValues[dayName];\n\n          if (!Ember.isNone(value) && (value.openDay !== dayValue.openDay || value.openLocalTime !== dayValue.openLocalTime || value.closedLocalTime !== dayValue.closedLocalTime)) {\n            isDirty = true;\n          }\n        });\n      });\n      return isDirty;\n    }),\n    disableUndobtn: Ember.computed('isDirty', 'disableEditing', 'displayOnlyTab', function () {\n      const displayOnlyTab = this.get('displayOnlyTab');\n      const disableUndoButton = !this.get('isDirty');\n      if (displayOnlyTab) return displayOnlyTab;\n      this.hasChanges(!disableUndoButton);\n      return disableUndoButton;\n    }),\n    disableSavebtn: Ember.computed('isDirty', 'isDaysValid', 'disableEditing', 'displayOnlyTab', function () {\n      const displayOnlyTab = this.get('displayOnlyTab');\n      const disableSaveButton = !this.get('isDirty') || !this.get('isDaysValid');\n      if (displayOnlyTab) return displayOnlyTab;\n      this.hasChanges(!disableSaveButton);\n      return disableSaveButton;\n    }),\n    performTransfers: Ember.computed('transferHours', function () {\n      return this.get('transferHours').find(transferHoursItem => transferHoursItem.get('name') === 'perform_transfers').get('value');\n    }),\n    performTransfersOn: Ember.computed('performTransfers', function () {\n      return this.get('performTransfers') === 'on';\n    }),\n    performTransfersSchedule: Ember.computed('performTransfers', function () {\n      return this.get('performTransfers') === 'schedule';\n    }),\n    performTransfersOff: Ember.computed('performTransfers', function () {\n      return this.get('performTransfers') === 'off';\n    }),\n    sunday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('sunday');\n    }),\n    monday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('monday');\n    }),\n    tuesday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('tuesday');\n    }),\n    wednesday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('wednesday');\n    }),\n    thursday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('thursday');\n    }),\n    friday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('friday');\n    }),\n    saturday: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('saturday');\n    }),\n    holidays: Ember.computed('transferHoursWeekDays', function () {\n      return this.findTransferHoursWeekDay('holidays');\n    }),\n    isDaysValid: Ember.computed('transferHours.@each.isDirty', '_changedAt', function () {\n      return !Ember.isNone(this.get('transferHoursWeekDays')) && this.validateDays();\n    }),\n\n    findTransferHoursWeekDay(name) {\n      const transferHoursWeekDay = this.get('transferHoursWeekDays');\n\n      if (Ember.isNone(transferHoursWeekDay)) {\n        return null;\n      }\n\n      return transferHoursWeekDay.find(transferHoursItem => transferHoursItem.get('name') === name);\n    },\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    async init() {\n      this._super(...arguments);\n\n      this.hasChanges = this.get('hasChanges').bind(this);\n      this.refreshModelsTask.perform();\n      this.changedValues = Ember.Object.extend({});\n      this._changedAt = 0;\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    async willDestroy() {\n      const ivrMessages = this.get('ivrMessages') || [];\n      ivrMessages.forEach(ivrMessage => {\n        if (ivrMessage.get('isDirty')) {\n          ivrMessage.rollback();\n        }\n      });\n\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {},\n\n    validatePhone(phoneChangeSet, errors, validate) {\n      const displayName = phoneChangeSet.get('displayName');\n      const value = phoneChangeSet.get('value') || '';\n      let returnVal = validate;\n\n      if (value.length > 0 && value.length < 10) {\n        phoneChangeSet.addError('value', {\n          value: value,\n          validation: `${displayName} must have 10 digits`\n        });\n\n        if (!Ember.isNone(errors) && !Ember.isNone(validate)) {\n          returnVal = false;\n          errors.pushObject({\n            key: null,\n            validation: `${displayName} must have 10 digits`,\n            value: ''\n          });\n        }\n      }\n\n      return returnVal;\n    },\n\n    validateTime(value) {\n      if (Ember.isNone(value)) {\n        return false;\n      }\n\n      const [hour, minute] = value.split(':');\n      return hour >= '00' && hour <= '23' && minute >= '00' && minute <= '59';\n    },\n\n    validateDayHours(dayName) {\n      const day = this.get(dayName);\n      const value = day.get('value');\n\n      if (value.openDay) {\n        const openLocalTime = value.openLocalTime;\n        const closedLocalTime = value.closedLocalTime;\n        return this.validateTime(openLocalTime) && this.validateTime(closedLocalTime) && openLocalTime <= closedLocalTime;\n      }\n\n      return true;\n    },\n\n    validateDays() {\n      let validate = true;\n      validate = validate && this.validateDayHours('monday');\n      validate = validate && this.validateDayHours('tuesday');\n      validate = validate && this.validateDayHours('wednesday');\n      validate = validate && this.validateDayHours('thursday');\n      validate = validate && this.validateDayHours('friday');\n      validate = validate && this.validateDayHours('saturday');\n      validate = validate && this.validateDayHours('sunday');\n      validate = validate && this.validateDayHours('holidays');\n      return validate;\n    },\n\n    validateRecord() {\n      const representativePhoneNumberMessage = this.get('representativePhoneNumberMessage');\n      const schedulePhoneNumberMessage = this.get('schedulePhoneNumberMessage');\n      const tripCancelFailurePhoneNumberMessage = this.get('tripCancelFailurePhoneNumberMessage');\n      const tooltip = this.get('tooltip');\n      const errors = [];\n      let validate = true;\n      validate = validate && this.validatePhone(representativePhoneNumberMessage, errors, validate);\n      validate = validate && this.validatePhone(schedulePhoneNumberMessage, errors, validate);\n      validate = validate && this.validatePhone(tripCancelFailurePhoneNumberMessage, errors, validate);\n      validate = validate && this.validateDays();\n\n      if (!validate) {\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          tip: 'The configuration entered is invalid.',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n      }\n\n      return validate;\n    },\n\n    async onSaveIVRConfig() {\n      const valid = this.validateRecord();\n      const notifications = this.get('notifications');\n\n      if (valid) {\n        const ivrMessages = this.get('ivrMessages');\n        const transferHours = this.get('transferHours');\n        const transferHoursWeekDays = this.get('transferHoursWeekDays');\n\n        try {\n          [ivrMessages, transferHours].forEach(changeSet => {\n            changeSet.forEach(change => {\n              if (change.get('isDirty')) {\n                change.save();\n              }\n            });\n          });\n          [transferHoursWeekDays].forEach(changeSet => {\n            const changedValues = this.get('changedValues');\n            changeSet.forEach(change => {\n              const dayName = change.get('name');\n              const dayValue = change.get('value');\n              const value = changedValues[dayName];\n\n              if (!Ember.isNone(value) && (value.openDay !== dayValue.openDay || value.openLocalTime !== dayValue.openLocalTime || value.closedLocalTime !== dayValue.closedLocalTime)) {\n                change.save();\n                delete changedValues[dayName];\n              }\n            });\n          });\n          this.set('_changedAt', Date.now());\n          this.resetForm();\n          notifications.success('Successfully Saved IVR messages');\n        } catch (e) {\n          notifications.failure('Failed to save IVR messages');\n        }\n      }\n\n      return false;\n    },\n\n    doUndoIVRConfig() {\n      const ivrMessages = this.get('ivrMessages');\n      const transferHours = this.get('transferHours');\n      const transferHoursWeekDays = this.get('transferHoursWeekDays');\n      [ivrMessages, transferHours].forEach(changeSet => {\n        changeSet.forEach(change => {\n          if (change.get('isDirty')) {\n            change.rollback();\n          }\n        });\n      });\n      [transferHoursWeekDays].forEach(changeSet => {\n        const changedValues = this.get('changedValues');\n        changeSet.forEach(change => {\n          const dayName = change.get('name');\n          const value = changedValues[dayName];\n\n          if (!Ember.isNone(value)) {\n            change.set('value', value);\n            delete changedValues[dayName];\n          }\n        });\n      });\n      this.set('_changedAt', Date.now());\n      this.resetForm();\n      return false;\n    },\n\n    resetForm() {\n      const disableBtns = {\n        new: true,\n        edit: false,\n        delete: true\n      };\n      Ember.run.scheduleOnce('afterRender', this, () => this.set('disableBtns', disableBtns));\n      this.set('disableEditing', true);\n    },\n\n    refreshModelsTask: (0, _emberConcurrency.task)(function* () {\n      const systemConfig = this.get('systemConfig');\n      const ivrMessages = yield systemConfig.findConfigByCategory('config-System_Configuration-IVR_Messages');\n      const ivrMessagesChangesets = ivrMessages.map(ivrMessage => {\n        return new _emberChangeset.default(ivrMessage);\n      });\n      const transferHours = yield systemConfig.findConfigByCategory('config-System_Configuration-IVR_Transfer_Hours');\n      const transferHoursChangesets = transferHours.map(transferHoursItem => {\n        return new _emberChangeset.default(transferHoursItem);\n      });\n      const transferHoursWeekDays = yield systemConfig.findConfigByCategory('config-System_Configuration-IVR_Transfer_Hours-Weekday_Times');\n      const transferHoursWeekDaysChangeSets = transferHoursWeekDays.map(transferHoursWeekDay => {\n        return new _emberChangeset.default(transferHoursWeekDay);\n      });\n      this.set('ivrMessages', ivrMessagesChangesets);\n      this.set('transferHours', transferHoursChangesets);\n      this.set('transferHoursWeekDays', transferHoursWeekDaysChangeSets);\n      this.hasChanges(false);\n    }).drop(),\n    actions: {\n      onTabChange(options) {\n        const {\n          newStep,\n          w\n        } = options;\n        const disableEditing = this.get('disableEditing');\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: true\n        };\n        this.set('tabOption', newStep);\n        w['transition-to'](newStep);\n\n        if (newStep === 'display-only-values') {\n          disableBtns.edit = true;\n          this.set('disableBtns', disableBtns);\n        } else {\n          disableBtns.edit = !disableEditing;\n          this.set('disableBtns', disableBtns);\n        }\n      },\n\n      editIVRConfig() {\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: true\n        };\n        this.set('disableBtns', disableBtns);\n        this.set('disableEditing', false);\n      },\n\n      undoIVRConfig() {\n        this.doUndoIVRConfig();\n      },\n\n      async saveIVRConfig() {\n        return this.onSaveIVRConfig();\n      },\n\n      onInputChanges() {},\n\n      onPhoneValueChange(record, maskObj) {\n        record.set('value', maskObj.unmasked);\n        this.validatePhone(record, null);\n      },\n\n      onPerformTransfersChange(value) {\n        this.get('transferHours').find(transferHoursItem => transferHoursItem.get('name') === 'perform_transfers').set('value', value);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ivr/day-hours-edit/component\", [\"exports\", \"moment\", \"adept-iq/config/environment\", \"lodash\"], function (_exports, _moment, _environment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['day-hours-edit'],\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    timeFormat: null,\n    timePlaceHolder: null,\n    disableEditing: null,\n    changedValues: null,\n    changedAt: null,\n    day: null,\n    previousDay: null,\n\n    init() {\n      this.set('timeFormat', _environment.default.dateTimeFormat.timeFlatPickr);\n      this.set('timePlaceHolder', _environment.default.dateTimeFormat.timePlaceHolder);\n      this.hasChanges = this.get('hasChanges').bind(this);\n\n      this._super(...arguments);\n    },\n\n    timeEditingDisabled: Ember.computed('day.value', 'disableEditing', function () {\n      const disableEditing = this.get('disableEditing');\n\n      if (disableEditing) {\n        return true;\n      }\n\n      const value = this.get('day.value');\n      return !value.openDay;\n    }),\n    value: Ember.computed('day.value', function () {\n      const day = this.get('day');\n      return day.get('value');\n    }),\n    title: Ember.computed('day', function () {\n      const day = this.get('day');\n      return day.get('displayName');\n    }),\n    startTime: Ember.computed('value', function () {\n      const value = this.get('value');\n      return value.openLocalTime;\n    }),\n    endTime: Ember.computed('value', function () {\n      const value = this.get('value');\n      return value.closedLocalTime;\n    }),\n    enabled: Ember.computed('value', function () {\n      const value = this.get('value');\n      return value.openDay;\n    }),\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    setValue(newValues) {\n      const dayValue = this.get('day.value');\n      const changedValues = this.get('changedValues');\n      const dayName = this.get('day.name');\n\n      if (Ember.isNone(changedValues[dayName])) {\n        changedValues[dayName] = {\n          openDay: dayValue.openDay,\n          openLocalTime: dayValue.openLocalTime,\n          closedLocalTime: dayValue.closedLocalTime\n        };\n        this.set('changedValues', changedValues);\n      }\n\n      this.set('changedAt', Date.now());\n\n      _lodash.default.forEach(newValues, (value, property) => {\n        dayValue[property] = value;\n      });\n\n      this.set('day.value', dayValue);\n      this.hasChanges(true);\n    },\n\n    actions: {\n      onEnabledChange(event) {\n        if (event.target.checked) {\n          const newValue = {\n            openDay: true\n          };\n          const previousDay = this.get('previousDay');\n\n          if (!Ember.isNone(previousDay)) {\n            const previousDayValue = this.get('previousDay.value');\n            newValue.openLocalTime = previousDayValue.openLocalTime;\n            newValue.closedLocalTime = previousDayValue.closedLocalTime;\n          }\n\n          this.setValue(newValue);\n        } else {\n          this.setValue({\n            openDay: false,\n            openLocalTime: null,\n            closedLocalTime: null\n          });\n        }\n      },\n\n      onStartTimeChange(timeArray) {\n        const value = (0, _moment.default)(timeArray[0]).format('HH:mm');\n        this.setValue({\n          openLocalTime: value\n        });\n      },\n\n      onEndTimeChange(timeArray) {\n        const value = (0, _moment.default)(timeArray[0]).format('HH:mm');\n        this.setValue({\n          closedLocalTime: value\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ivr/day-hours-edit/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"FtVJikJW\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"click\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"enabled\\\",[22,0,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onEnabledChange\\\"],null],[22,0,[\\\"enabled\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"disabled\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"minuteIncrement\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",[22,0,[\\\"timeEditingDisabled\\\"]],true,true,1,true,[22,0,[\\\"timePlaceHolder\\\"]],true,[22,0,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[22,0,[\\\"startTime\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onStartTimeChange\\\"],null]]]],false],[0,\\\"\\\\n  \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"disabled\\\",\\\"allowInput\\\",\\\"noCalendar\\\",\\\"minuteIncrement\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",[22,0,[\\\"timeEditingDisabled\\\"]],true,true,1,true,[22,0,[\\\"timePlaceHolder\\\"]],true,[22,0,[\\\"timeFormat\\\"]],[27,\\\"readonly\\\",[[22,0,[\\\"endTime\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onEndTimeChange\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/ivr/day-hours-edit/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ivr/messages\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.displayOnlyMessages = void 0;\n  const displayOnlyMessages = {\n    mainMenuStandard: 'For touch tone-only, press 7. What would you like to do? Say schedule to schedule a new trip with a representative. Say cancel to cancel an existing trip. Say information for information about your scheduled trips. Say bus to speak to a representative about the bus schedule. Say help for help with this system. Say repeat to repeat these options. Say representative to speak to a customer representative during normal business hours or press 0 at anytime during this call. If you prefer to enter your responses on your telephone keypad, press 7.',\n    mainMenuIssues: 'For touch tone-only, press 7. What would you like to do? to schedule a new trip with a representative, say schedule or press 1. to cancel an existing trip, say cancel or press 2. for information about your scheduled trips, say information or press 3. to speak to a representative about the bus schedule, say bus or press 6. for help with this system, say help or press star. to repeat these options, say repeat or press 9. Say representative to speak to a customer representative during normal business hours or press 0 at anytime during this call. If you prefer to enter your responses on your telephone keypad, press 7.',\n    mainMenuTouchToneOnly: 'Press 1 to schedule a new trip with a representative. Press 2 to cancel an existing trip. Press 3 for information about your scheduled trips. Press 6 to speak to a representative about the bus schedule. To hear instructions at any time, press the star key. Press 9 to repeat these options. Press 0 to speak to a customer representative during normal business hours at anytime during this call.',\n    mainMenuHelpSpeech: 'Please listen carefully to each option, and speak your responses clearly. If your prefer to use your telephone\\'s touch-tone keypad, press 7.  Also if are calling from an area with loud background noise, we suggest that you press 7.',\n    mainMenuHelpTouchToneOnly: 'Please listen carefully to each option, and enter your response on your telephone keypad.',\n    confirmStandard: 'We think you have said: <speech-to-text result> Is this correct?',\n    confirmIssues: 'We think you have said: <speech-to-text result> If this is correct, say yes or press 1 If this is not correct, say no or press 2',\n    confirmDidNotUnderstand: 'We did not understand your response. Press 7 to disable speech recognition and only use your touch tone keypad. Afterward you will be returned to the previous options. We think you have said: <speech-to-text result> Is this correct?',\n    confirmHelp: 'Please listen carefully to what we thought you said.  If it is what you said, say yes.  If it is not what you said, say no. If you prefer to use your telephone\\'s touch-tone keypad, press 7.  Also if you are calling from an area with loud background noise, we suggest that you press 7.',\n    riderIdStandard: 'What is your rider ID For instructions, say help If you do not know your rider ID, say representative. To return to the main menu, say main menu.',\n    riderIdIssues: 'What is your rider ID For instructions, say help If you do not know your rider ID, say representative. To return to the main menu, say main menu.',\n    riderIdTouchToneOnly: 'Please enter your rider ID for the scheduled pickup, followed by the pound key. For instructions, press star pound. If you do not know your rider ID, press 0 pound. To return to the main menu, press 8 pound.',\n    confirmRiderIdStandard: 'You have entered rider ID: <# # # ...> Is this correct?',\n    confirmRiderIdIssues: 'You have entered rider ID: <# # # ...> If this is correct, say yes or press 1 If this is not correct, say no or press 2',\n    confirmRiderIdTouchToneOnly: 'You have entered rider ID: <# # # ...> If this is correct, press 1. To re-enter, press 2.',\n    confirmRiderIdHelpSpeech: 'Please listen carefully to the rider id that we received and say yes if it is correct or no if it is not correct.',\n    confirmRiderIdHelpTouchToneOnly: 'Please listen carefully to the rider id that we received and press 1 if it is correct or 2 if it is not correct using your telephone\\'s keypad.',\n    wait: 'Please wait ... System not responding.  Transfering you to a representative.',\n    invalidRiderIdNotFound: 'The rider ID you entered was not found.',\n    invalidRiderIdNoTrips: 'There are no scheduled trips for the next <number of booking days> days for the rider ID you entered. For trips scheduled for later dates, you will need to try your call again later or speak to one of our staff.',\n    invalidRiderIdStandardMenu: 'Say try again to try entering the rider id again. Say main menu to go to the main menu. Say representative to speak to a customer representative during normal business hours. Say repeat to repeat these options.',\n    invalidRiderIdIssuesMenu: 'The rider ID you entered was not found. to try entering the rider id again, say try again or press 1. to go to the main menu, say main menu or press 8. to speak to a customer representative during normal business hours, say representative or press 0. to repeat these options, say repeat or press 9.',\n    invalidRiderIdTouchToneOnlyMenu: 'The rider ID you entered was not found. Press 1 to try entering the rider id again. Press 8 to go to the main menu. Press 0 to speak to a customer representative during normal business hours. Press 9 to repeat these options.',\n    invalidRiderIdHelpSpeech: 'The rider Id you entered is not valid and cannot be used. Say try again to enter a correct rider ID or 8 to return to the main menu.',\n    invalidRiderIdHelpTouchToneOnly: 'The rider Id you entered is not valid and cannot be used. Press 1 to enter a correct rider ID or 8 to return to the main menu.',\n    tripListHeader: 'The following is a list of <trip count> scheduled trips for the next <number of booking days> calendar days.',\n    tripListTripSummary: 'Pickup scheduled for <pickup date>. The pickup window is between <pickup window start time> and <pickup window end time>. The pickup address is <pickup street number and name>. The destination address is <dropoff street number and name>.',\n    tripListFirstTripStandardMenu: 'Say next to go to the next trip. Say cancel to cancel this trip. Say main menu to go to the main menu.',\n    tripListFirstTripIssuesMenu: 'to go to the next trip, say next or press 1. to cancel this trip, say cancel or press 2. to go to the main menu, say main menu or press 8.',\n    tripListFirstTripTouchToneOnlyMenu: 'Press 1 to go to the next trip. Press 2 to cancel this trip. Press 8 to go to the main menu.',\n    tripListStandardMenu: 'Say next to go to the next trip. Say cancel to cancel this trip. Say previous to go to the previous trip. Say main menu to go to the main menu.',\n    tripListIssuesMenu: 'to go to the next trip, say next or press 1. to cancel this trip, say cancel or press 2. to go to the previous trip, say previous or press 4. to go to the main menu, say main menu or press 8.',\n    tripListTouchToneOnlyMenu: 'Press 1 to go to the next trip. Press 2 to cancel this trip. Press 4 to go to the previous trip. Press 8 to go to the main menu.',\n    tripListHelp: 'You are being provided details about a specific trip that you have scheduled for the selected client id.  You can choose to cancel this trip or you can move to the next trip you have scheduled.',\n    tripListEmpty: 'There are no scheduled trips for the next <number of booking days> days for the rider ID you entered. For trips scheduled for later dates, you will need to try your call again later or speak to one of our staff.',\n    tripListEndOfList: 'There are no more scheduled trips.',\n    postCancelHeader: 'This trip has been cancelled.',\n    postCancelStandard: 'Your cancellation number is: <# # # ...> Would you like to repeat the cancellation number?',\n    postCancelIssues: 'Your cancellation number is: <# # # ...> Would you like to repeat the cancellation number? Say yes or press 1. Otherwise say no or press 2 to continue.',\n    postCancelTouchToneOnly: 'Your cancellation number is: <# # # ...> To repeat the cancellation number, press 1. Otherwise press 2 to continue.',\n    postCancelHelpSpeech: 'Please listen carefully to your cancellation number and record it for future reference. When you are ready , say continue to return to the list of trips.',\n    postCancelHelpTouchToneOnly: 'Please listen carefully to your cancellation number and record it for future reference. When you are ready , press 2 to return to the list of trips.',\n    transferOutput: 'Please wait while you are transfered to a representative.',\n    didNotUnderstand: 'We did not understand your response.'\n  };\n  _exports.displayOnlyMessages = displayOnlyMessages;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ivr/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Q46tBHlY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"w\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"editRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"disableUndobtn\\\"],[\\\"IVR\\\",[27,\\\"action\\\",[[22,0,[]],\\\"editIVRConfig\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoIVRConfig\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"saveIVRConfig\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ivr-right-side-panel\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab-wrapper\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"step-manager\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-components/tab-group\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\",\\\"onTabClick\\\"],[\\\"Interactive Voice Response\\\",[22,1,[]],\\\"interactive-voice-response\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTabChange\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\",\\\"onTabClick\\\"],[\\\"Display Only Values\\\",[22,1,[]],\\\"display-only-values\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTabChange\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\",\\\"onTabClick\\\"],[\\\"Representative Schedule\\\",[22,1,[]],\\\"transfer-hours\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onTabChange\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-dds\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/side-drawer/system-config/ivr/template.hbs' @ L41:C9) \\\"],null]],[[\\\"name\\\"],[\\\"interactive-voice-response\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"interactive-voice-response-view\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Configurable Values\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Initial Greeting\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"showHint\\\",\\\"maxLength\\\"],[\\\"\\\",[23,[\\\"initialGreetingMessage\\\",\\\"value\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"initialGreetingMessage\\\",\\\"value\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,\\\"1000\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Optional Greeting\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"showHint\\\",\\\"maxLength\\\"],[\\\"\\\",[23,[\\\"optionalGreetingMessage\\\",\\\"value\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"optionalGreetingMessage\\\",\\\"value\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,\\\"1000\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Disclaimer Message\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"showHint\\\",\\\"maxLength\\\"],[\\\"\\\",[23,[\\\"disclaimerMessage\\\",\\\"value\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"disclaimerMessage\\\",\\\"value\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,\\\"1000\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Representative Phone Number\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"ivr-phone-number \\\",[27,\\\"if\\\",[[23,[\\\"representativePhoneNumberMessage\\\",\\\"error\\\",\\\"value\\\"]],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"disableEditing\\\"]],[23,[\\\"representativePhoneNumberMessage\\\",\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"representativePhoneNumberMessage\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Schedule a Trip Phone Number\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"ivr-phone-number \\\",[27,\\\"if\\\",[[23,[\\\"schedulePhoneNumberMessage\\\",\\\"error\\\",\\\"value\\\"]],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"disableEditing\\\"]],[23,[\\\"schedulePhoneNumberMessage\\\",\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"schedulePhoneNumberMessage\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Trip Cancel Failure Phone Number\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"ivr-phone-number \\\",[27,\\\"if\\\",[[23,[\\\"tripCancelFailurePhoneNumberMessage\\\",\\\"error\\\",\\\"value\\\"]],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"PHONE_NUMBER_PLACEHOLDER\\\"]],\\\"999-999-9999\\\",[23,[\\\"disableEditing\\\"]],[23,[\\\"tripCancelFailurePhoneNumberMessage\\\",\\\"value\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPhoneValueChange\\\",[23,[\\\"tripCancelFailurePhoneNumberMessage\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Rider ID Help Message\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"showHint\\\",\\\"maxLength\\\"],[\\\"\\\",[23,[\\\"clientHelpMessage\\\",\\\"value\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"clientHelpMessage\\\",\\\"value\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,\\\"1000\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Pickup Cancelation Failure Message\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"showHint\\\",\\\"maxLength\\\"],[\\\"\\\",[23,[\\\"pickupCancelFailureMessage\\\",\\\"value\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"pickupCancelFailureMessage\\\",\\\"value\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,\\\"1000\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Representative Schedule Message\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"placeholder\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"showHint\\\",\\\"maxLength\\\"],[\\\"\\\",[23,[\\\"transferUnavailableMessage\\\",\\\"value\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"transferUnavailableMessage\\\",\\\"value\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,\\\"1000\\\"]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/side-drawer/system-config/ivr/template.hbs' @ L157:C9) \\\"],null]],[[\\\"name\\\"],[\\\"display-only-values\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"display-only-values-view\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Main Menu\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuStandard\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuIssues\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Speech Recognition\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuHelpSpeech\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuHelpSpeech\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Touch Tone Only\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuHelpTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"mainMenuHelpTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Confirm Speech Command\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmStandard\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmIssues\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Did Not Understand\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmDidNotUnderstand\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmDidNotUnderstand\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmHelp\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmHelp\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Enter Rider ID\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"riderIdStandard\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"riderIdStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"riderIdIssues\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"riderIdIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"riderIdTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"riderIdTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Confirm Rider ID\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdStandard\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdIssues\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Speech Recognition\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdHelpSpeech\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdHelpSpeech\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Touch Tone Only\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdHelpTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"confirmRiderIdHelpTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Wait\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Message While Waiting\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"wait\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"wait\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Invalid Rider ID\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Rider ID Not Found\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdNotFound\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdNotFound\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"No Trips\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdNoTrips\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdNoTrips\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdStandardMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdIssuesMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdTouchToneOnlyMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Speech Recognition\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdHelpSpeech\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdHelpSpeech\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Touch Tone Only\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdHelpTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"invalidRiderIdHelpTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Trip List\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Header For First Read\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListHeader\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListHeader\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Trip Summary\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListTripSummary\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListTripSummary\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu For First Trip\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListFirstTripStandardMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListFirstTripStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu For First Trip\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListFirstTripIssuesMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListFirstTripIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu For First Trip\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListFirstTripTouchToneOnlyMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListFirstTripTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListStandardMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListIssuesMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListTouchToneOnlyMenu\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListHelp\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListHelp\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Empty List\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListEmpty\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListEmpty\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"End Of List\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"tripListEndOfList\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"tripListEndOfList\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Cancellation Number\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Header For First Read\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelHeader\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelHeader\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Standard Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelStandard\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelStandard\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Speech Recognition Issues Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelIssues\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelIssues\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Touch-Tone Only Menu\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Speech Recognition\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelHelpSpeech\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelHelpSpeech\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Help With Touch Tone Only\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelHelpTouchToneOnly\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"postCancelHelpTouchToneOnly\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Transfer\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Read Before Transfering\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"transferOutput\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"transferOutput\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-label\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Did Not Understand\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Read Before Repeating\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"onChange\\\",\\\"onInput\\\",\\\"disabled\\\",\\\"showHint\\\"],[[23,[\\\"displayOnlyMessages\\\",\\\"didNotUnderstand\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"displayOnlyMessages\\\",\\\"didNotUnderstand\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChanges\\\"],null],true,false]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"  \\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/side-drawer/system-config/ivr/template.hbs' @ L641:C9) \\\"],null]],[[\\\"name\\\"],[\\\"transfer-hours\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ivr-transfer-hours-view\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"main-information\\\",\\\"Call Redirect\\\",false]],{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-information-panel information-panel\\\"],[9],[0,\\\"\\\\n                  Determine if IVR will allow caller to redirect to customer service representative.  'Off' will prevent any redirect. 'On' allows redirect for all hours. 'Schedule' will allow for redirect based upon Representative Schedule (below).\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-information-panel information-panel\\\"],[9],[0,\\\"\\\\n                  Callers who request a customer service representative while Call Redirect is set to 'off' or outside of determined hours will hear the editable 'Representative Schedule Message'.\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-panel\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"performTransfers\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"checked\\\",[21,\\\"performTransfersOn\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPerformTransfersChange\\\",\\\"on\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\" \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"continuous-label\\\"],[9],[0,\\\"On\\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"performTransfers\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"checked\\\",[21,\\\"performTransfersSchedule\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPerformTransfersChange\\\",\\\"schedule\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\" \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"continuous-label\\\"],[9],[0,\\\"Schedule\\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"performTransfers\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"checked\\\",[21,\\\"performTransfersOff\\\"]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPerformTransfersChange\\\",\\\"off\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\" \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"continuous-label\\\"],[9],[0,\\\"Off\\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ivr-hours-space\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"main-information\\\",\\\"Representative Schedule\\\",false]],{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-information-panel information-panel\\\"],[9],[0,\\\"\\\\n                  Set schedule for when IVR will allow callers to redirect to a customer service representative.\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"ivr-hours-header\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[9],[0,\\\"End Time\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"monday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"tuesday\\\"]],[22,0,[\\\"monday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"wednesday\\\"]],[22,0,[\\\"tuesday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"thursday\\\"]],[22,0,[\\\"wednesday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"friday\\\"]],[22,0,[\\\"thursday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"saturday\\\"]],[22,0,[\\\"friday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"sunday\\\"]],[22,0,[\\\"saturday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n              \\\"],[1,[27,\\\"side-drawer/system-config/ivr/day-hours-edit\\\",null,[[\\\"day\\\",\\\"previousDay\\\",\\\"disableEditing\\\",\\\"changedValues\\\",\\\"changedAt\\\"],[[22,0,[\\\"holidays\\\"]],[22,0,[\\\"sunday\\\"]],[22,0,[\\\"disableEditing\\\"]],[22,0,[\\\"changedValues\\\"]],[22,0,[\\\"changedAt\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"           \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/ivr/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/ivr/validation\", [\"exports\", \"ember-changeset-validations/validators\"], function (_exports, _validators) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.IVR_PHONE_NUMBER_VALIDATION = void 0;\n  const IVR_PHONE_NUMBER_VALIDATION = {\n    unformattedPhoneNumber: [(0, _validators.validateLength)({\n      is: 10,\n      allowBlank: true,\n      description: 'Phone Number',\n      message: '{description} 10 digit is required.'\n    })]\n  };\n  _exports.IVR_PHONE_NUMBER_VALIDATION = IVR_PHONE_NUMBER_VALIDATION;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/break-days-action-modal/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    didRender() {\n      this._super(...arguments);\n\n      this.$('.ember-modal-dialog').draggable();\n    },\n\n    actions: {\n      onPrimaryActionButtonClick() {\n        this.get('modalData').closeAction();\n      },\n\n      onCloseTooltipModal() {\n        this.get('modalData').closeAction();\n      },\n\n      onClickOverlayTooltipModal() {\n        this.get('modalData').closeAction();\n      },\n\n      onDayClick(index) {\n        this.get('modalData').onDayClick(index + 1);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/break-days-action-modal/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ZiRTDkHh\",\n    \"block\": \"{\\\"symbols\\\":[\\\"numberOfDay\\\",\\\"index\\\",\\\"error\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"onClickOverlay\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseTooltipModal\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickOverlayTooltipModal\\\"],null],\\\"tooltip-modal-styles-overlay\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal day-action-modal\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-header\\\"],[9],[1,[23,[\\\"modalData\\\",\\\"title\\\"]],false],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseTooltipModal\\\"],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times\\\"],[9],[10],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-body\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-text\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"tooltip-tip\\\"],[9],[1,[23,[\\\"modalData\\\",\\\"tip\\\"]],false],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"error-container\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"modalData\\\",\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"error-list\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"modalData\\\",\\\"errors\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"li\\\"],[11,\\\"class\\\",\\\"error-item\\\"],[9],[1,[22,3,[\\\"validation\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[4,\\\"if\\\",[[23,[\\\"modalData\\\",\\\"numberOfDays\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tooltip-modal-button days-btns\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"modalData\\\",\\\"numberOfDays\\\"]]],null,{\\\"statements\\\":[[0,\\\"                  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-primary data-test-primary\\\"],[9],[0,\\\"\\\\n                    \\\"],[1,[22,1,[\\\"day\\\"]],false],[0,\\\" Day\\\\n                  \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onDayClick\\\",[22,2,[]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"                \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-primary data-test-primary\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[23,[\\\"modalData\\\",\\\"primaryActionText\\\"]],false],[0,\\\"\\\\n                \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onPrimaryActionButtonClick\\\"]],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/modals/break-days-action-modal/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/utils/number-to-words\", \"lodash\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/models/break-type\", \"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/config\", \"adept-iq/config/api-urls\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _moment, _numberToWords, _lodash, _unwrapProxy, _breakType, _config, _apiUrls, _asyncScheduleOperation, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const extraBreakLengthOptions = {\n    min: 1,\n    max: 3\n  };\n  const MINUTES_PLANNED_DURATION = 'minutesPlannedDuration';\n\n  var _default = Ember.Component.extend(_asyncScheduleOperation.default, {\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    // passed in attributes\n    isDriverBreakModalEnabled: false,\n    availability: null,\n    breakTypes: null,\n    // properties\n    tableRef: null,\n    searchText: null,\n    selectedBreakType: null,\n    undoShiftBreak: false,\n    isSearchEnabled: false,\n    disableForms: true,\n    showValidations: false,\n    disableBtns: null,\n    addressPublicApi: null,\n    hasOverlay: true,\n    // default to true\n    isTaskRunning: false,\n    locationConfig: _config.locationFieldConfig,\n    extraBreakLengthOptions,\n    errorModel: null,\n    canShowDaysModal: false,\n    modalData: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    disableUndobtn: Ember.computed.readOnly('disableSaveBtn'),\n    selectedRow: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    selectedRecord: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    isFixedBreak: Ember.computed.equal('selectedBreakType.name', _breakType.FIXED_BREAK),\n    isFloatingBreak: Ember.computed.equal('selectedBreakType.name', _breakType.FLOATING_BREAK),\n    shouldDisplayValidations: Ember.computed.or('showValidations').readOnly(),\n    disableEditDeleteBtn: Ember.computed('selectedRecord', 'disableBtns.{edit,delete}', function () {\n      const editBtn = this.get('disableBtns.edit');\n      const selectedRecord = this.get('selectedRecord');\n      return !selectedRecord || editBtn;\n    }),\n    disableAddressSearch: Ember.computed('disableForms', 'isFloatingBreak', function () {\n      const disableForms = this.get('disableForms');\n      const isFloatingBreak = this.get('isFloatingBreak');\n      return isFloatingBreak || disableForms;\n    }),\n    disableSaveBtn: Ember.computed('disableForms', 'shiftBreakChangeSet.{requestTime,minutesPlannedDuration,notes,breakType,place,place.address.freeformAddress}', function () {\n      const disableForms = this.get('disableForms');\n      const selectedRow = this.get('selectedRow');\n      const shiftBreakChangeSet = this.get('shiftBreakChangeSet');\n      if (disableForms) return true;\n\n      if (selectedRow) {\n        return !this.hasShiftBreakChanged(shiftBreakChangeSet, selectedRow);\n      }\n\n      return !this.hasValues(shiftBreakChangeSet);\n    }),\n\n    hasValues(shiftBreakChangeSet) {\n      const requestTime = shiftBreakChangeSet.get('requestTime');\n      const breakType = shiftBreakChangeSet.get('breakType');\n      const minutesPlannedDuration = parseInt(shiftBreakChangeSet.get('minutesPlannedDuration'), 10);\n      return requestTime && breakType && minutesPlannedDuration;\n    },\n\n    hasShiftBreakChanged(shiftBreakChangeSet, selectedRow) {\n      const breakType = (0, _unwrapProxy.unwrapProxy)(shiftBreakChangeSet.get('breakType'));\n      const address = (0, _unwrapProxy.unwrapProxy)(shiftBreakChangeSet.get('place.address'));\n      const isFixedBreak = this.get('isFixedBreak');\n      const shiftBreakChanged = this.isShiftBreakChanged(shiftBreakChangeSet, selectedRow) || this.isBreakTypeChanged(breakType, selectedRow) || this.isPlaceChanged(address, isFixedBreak);\n      return shiftBreakChanged;\n    },\n\n    isShiftBreakChanged(shiftBreakChangeSet, selectedRow) {\n      const requestTime = shiftBreakChangeSet.get('requestTime');\n      const minutesPlannedDuration = parseInt(shiftBreakChangeSet.get('minutesPlannedDuration'), 10);\n      const notes = shiftBreakChangeSet.get('notes');\n\n      if (requestTime !== selectedRow.get('requestTime') || minutesPlannedDuration !== parseInt(selectedRow.get('minutesPlannedDuration'), 10) || notes !== selectedRow.get('notes')) {\n        return true;\n      }\n\n      return false;\n    },\n\n    isBreakTypeChanged(breakType, selectedRow) {\n      const previousBreakType = (0, _unwrapProxy.unwrapProxy)(selectedRow.get('breakType'));\n      return previousBreakType !== breakType;\n    },\n\n    isPlaceChanged(address, isFixedBreak) {\n      if (isFixedBreak && address) {\n        return true;\n      }\n\n      return false;\n    },\n\n    title: Ember.computed('availability.{routeTemplate.name,DOWSelected}', function () {\n      const name = this.get('availability.routeTemplate.name');\n      const DOW = this.get('availability.DOWSelected') || [];\n      const DOWSelected = DOW.map(option => Ember.String.capitalize(option.day)).join(', ');\n      const title = name ? `Driver Break(s) for Route ${name} - ${DOWSelected}` : `Driver Break(s) for New Route - ${DOWSelected}`;\n      return title;\n    }),\n    shiftBreakChangeSet: Ember.computed('selectedRecord', function () {\n      const shiftBreak = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      const addressPublicApi = this.get('addressPublicApi'); // REG-NYAAR-19112 When changing the record the changedPlace should update in address component\n\n      if (addressPublicApi && shiftBreak) {\n        addressPublicApi.onValueChange(shiftBreak.get('place'));\n      }\n\n      return this.setDefaultProperties(shiftBreak);\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('disableBtns', {\n        new: false,\n        save: true,\n        edit: true,\n        delete: true,\n        undo: true\n      });\n      this.get('refreshTask').perform();\n      const defaultBreakType = this.get('breakTypes').find(b => b.get('name') === _breakType.FLOATING_BREAK);\n      this.set('defaultBreakType', defaultBreakType);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('dropdownActions', [{\n        id: 'print',\n        name: 'Download',\n        action: () => {\n          const tableRef = this.get('tableRef');\n          tableRef.exportData();\n        }\n      }]);\n    },\n\n    refreshTask: (0, _emberConcurrency.task)(function* () {}),\n\n    onCloseModal() {\n      this.set('isDriverBreakModalEnabled', false);\n    },\n\n    createPlaceRecord(perviousPlace) {\n      const store = this.get('store'); // required type @TODO hacky might need to refactor for the future\n\n      const placeCategoryType = store.peekAll('place-category-type').firstObject;\n      const perviousAddress = perviousPlace ? (0, _unwrapProxy.unwrapProxy)(perviousPlace.get('address')) : null;\n      const perviousLocation = perviousPlace ? (0, _unwrapProxy.unwrapProxy)(perviousPlace.get('location')) : null;\n      let addressAttr = {};\n      let locationAttr = {};\n\n      if (perviousAddress) {\n        addressAttr = perviousAddress.toJSON();\n      }\n\n      if (perviousLocation) {\n        locationAttr = perviousLocation.toJSON();\n      }\n\n      const location = store.createRecord('location', locationAttr);\n      const address = store.createRecord('address', addressAttr);\n      const place = store.createRecord('place', {\n        address: address,\n        location: location,\n        placeCategoryType\n      });\n      return place;\n    },\n\n    rollbackPlaceRecord(place) {\n      if (place) {\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        if (address) address.rollbackAttributes();\n        if (location) location.rollbackAttributes();\n      }\n    },\n\n    regenratePlaceRecord() {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      const shiftBreakChangeSet = this.get('shiftBreakChangeSet');\n      const place = record ? (0, _unwrapProxy.unwrapProxy)(record.get('place')) : null;\n      const newRecord = this.createPlaceRecord(place);\n      shiftBreakChangeSet.set('place', newRecord);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      let disableForms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const store = this.get('store');\n      const modelClass = store.modelFor('shift-break');\n      const floatBreakType = this.get('defaultBreakType');\n      const fields = Array.from(modelClass.attributes.keys()).reduce((acu, key) => {\n        acu[key] = null;\n        return acu;\n      }, {});\n      fields.place = null;\n      fields.breakType = floatBreakType;\n      fields.requestTime = null;\n\n      if (!Ember.isEmpty(record)) {\n        Object.entries(fields).forEach(_ref => {\n          let [key] = _ref;\n          fields[key] = record.get(key);\n        });\n        fields.id = record.get('id');\n        fields.place = this.createPlaceRecord((0, _unwrapProxy.unwrapProxy)(record.get('place'))); // relationship\n\n        fields.breakType = (0, _unwrapProxy.unwrapProxy)(record.get('breakType')); // relationship\n      }\n\n      if (!(0, _unwrapProxy.unwrapProxy)(fields.place)) fields.place = this.createPlaceRecord(null);\n      this.onBreakTypeChange((0, _unwrapProxy.unwrapProxy)(fields.breakType));\n\n      if (record) {\n        this.resetForm(disableForms);\n        this.resetErrorModel();\n      }\n\n      this.set('pendingRecord', null);\n      return Ember.Object.create(fields);\n    },\n\n    resetForm() {\n      let disableForms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      const disableBtns = {\n        new: false,\n        edit: false,\n        delete: false,\n        undo: true\n      };\n      Ember.run.scheduleOnce('afterRender', this, () => {\n        this.set('disableBtns', disableBtns);\n        this.set('disableForms', disableForms);\n      });\n    },\n\n    saveShiftBreak() {\n      const tableRef = this.get('tableRef');\n      const availabilityChangeSet = this.get('availability');\n      const shiftBreakChangeSet = this.get('shiftBreakChangeSet');\n      const availability = this.getAvailability(availabilityChangeSet);\n      const selectedRow = this.get('selectedRow');\n      const selectedRecord = this.get('selectedRecord');\n      const store = this.get('store');\n      const shiftBreaks = availability.get('shiftBreaks');\n      let pendingRecord = this.get('pendingRecord');\n\n      if (selectedRecord) {\n        selectedRecord.setProperties(shiftBreakChangeSet);\n        pendingRecord = selectedRecord;\n      } else if (!pendingRecord) {\n        pendingRecord = store.createRecord('shift-break', shiftBreakChangeSet);\n        this.set('pendingRecord', pendingRecord);\n      } else {\n        pendingRecord.setProperties(shiftBreakChangeSet);\n      }\n\n      pendingRecord.set('routeTemplateAvailability', availability);\n\n      if (pendingRecord.get('isNew')) {\n        shiftBreaks.pushObject(pendingRecord);\n      }\n\n      availabilityChangeSet.set('shiftBreaks', shiftBreaks);\n      this.resetForm();\n      availabilityChangeSet.execute();\n      Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      availabilityChangeSet.execute();\n      Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      this.selectFirstShiftBreak(selectedRow);\n    },\n\n    onSaveShiftBreakTask: (0, _emberConcurrency.task)(function* () {\n      const availabilityChangeSet = this.get('availability');\n      const availability = this.getAvailability(availabilityChangeSet);\n      const shiftBreakChangeSet = this.get('shiftBreakChangeSet');\n      const valid = yield this.validateRecord(shiftBreakChangeSet, availability);\n\n      if (valid) {\n        this.saveShiftBreak();\n      }\n    }),\n\n    /**\n     *after user create a new record,first record should be selected in shift break table ;\n     */\n    selectFirstShiftBreak(selectedRow) {\n      if (Ember.isEmpty(selectedRow)) this.set('tableRef.config.selectFirstRow', true);\n    },\n\n    //availabilityChangeSet.data will not return the availability model with latest changed attributes\n    getAvailability(availabilityChangeSet) {\n      const availability = availabilityChangeSet.get('data');\n      const availabilitySnapshot = availabilityChangeSet.snapshot();\n      const availabilitychagedAttr = availabilitySnapshot.changes;\n      Object.entries(availabilitychagedAttr).forEach(_ref2 => {\n        let [key] = _ref2;\n        availability.set(key, availabilitychagedAttr[key]);\n      });\n      return availability;\n    },\n\n    onDeleteShiftBreakTask: (0, _emberConcurrency.task)(function* () {\n      const selectedRecord = this.get('selectedRecord');\n      const tableRef = this.get('tableRef');\n      const availabilityChangeSet = this.get('availability');\n\n      if (selectedRecord) {\n        const shiftBreaks = availabilityChangeSet.get('shiftBreaks');\n        const deletedShiftBreaks = availabilityChangeSet.get('deletedShiftBreaks') || [];\n        shiftBreaks.removeObject(selectedRecord);\n        deletedShiftBreaks.pushObject(selectedRecord);\n        availabilityChangeSet.set('shiftBreaks', shiftBreaks);\n        availabilityChangeSet.set('deletedShiftBreaks', deletedShiftBreaks);\n        yield Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData');\n      }\n    }),\n\n    async validateShiftBreak(errors, shiftBreakChangeSet, availability) {\n      const isFixedBreak = this.get('isFixedBreak');\n      const calcEndDate = availability.get('calcShiftEnd');\n      const minutesPlannedDuration = parseInt(shiftBreakChangeSet.get('minutesPlannedDuration'), 10);\n      const startTime = this.getTime(shiftBreakChangeSet.get('requestTime'));\n      const endTime = this.getTimeAfterDuration(startTime, minutesPlannedDuration);\n      const isBreakEndTimeIsBeforeShiftEndTime = this.checkBreakEndTimeIsBeforeShiftEndTime(endTime, calcEndDate);\n      const isBreakStartTimeAfterShiftStartTime = this.checkTimeIsAfterShiftStartTime(startTime);\n      const isBreakStartTimeBeforeShiftEndTime = this.checkTimeIsBeforeShiftEndTime(startTime);\n      let isBreakStartTimeIsEnoughToReachGarageBeforeShiftEnd = true;\n\n      if (isFixedBreak && !Ember.isEmpty(shiftBreakChangeSet.get('place.location.latlng'))) {\n        isBreakStartTimeIsEnoughToReachGarageBeforeShiftEnd = await this.checkBreakStartTimeIsEnoughToReachGarageBeforeShiftEndTime(shiftBreakChangeSet, calcEndDate);\n      }\n\n      const shiftBreakEndTime = this.getTimeAfterDuration(startTime, minutesPlannedDuration);\n      const numberOfDays = this.getNumberOfDays(shiftBreakEndTime, calcEndDate);\n      let validShiftBreakRecord = true;\n      let canShowDaysModal = false;\n      this.set('canShowDaysModal', false);\n\n      if (!minutesPlannedDuration) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Break Length cannot be blank'\n        });\n        this.set('errorModel.invalidLength', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (!startTime) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Start Time cannot be blank'\n        });\n        this.set('errorModel.invalidRequestTime', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (!isBreakStartTimeAfterShiftStartTime) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Break start time cannot be before route start time.'\n        });\n        this.set('errorModel.invalidRequestTime', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (!isBreakStartTimeBeforeShiftEndTime) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Break start time cannot be after route end time.'\n        });\n        this.set('errorModel.invalidRequestTime', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (!this.get('errorModel.invalidRequestTime') && !isBreakStartTimeIsEnoughToReachGarageBeforeShiftEnd) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Break time must allow enough time for vehicle to return to garage.'\n        });\n        this.set('errorModel.invalidRequestTime', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (isFixedBreak && Ember.isEmpty(shiftBreakChangeSet.get('place.location.latlng'))) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Address cannot be blank'\n        });\n        this.set('errorModel.invalidAddress', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (this.requestTimeIsOverlap(shiftBreakChangeSet.get('requestTime'), minutesPlannedDuration)) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Break time cannot overlap existing break time.'\n        });\n        this.set('errorModel.invalidRequestTime', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      }\n\n      if (!this.get('errorModel.invalidLength') && !isBreakEndTimeIsBeforeShiftEndTime) {\n        validShiftBreakRecord = false;\n        errors.pushObject({\n          'validation': 'Break length cannot extend past route end time.'\n        });\n        this.set('errorModel.invalidLength', !validShiftBreakRecord);\n        return validShiftBreakRecord;\n      } // Reg - NYAAR-16786\n\n\n      if (numberOfDays > 1) {\n        this.set('canShowDaysModal', true);\n        errors.pushObject({\n          'validation': `Since the shift time spans ${numberOfDays} days, you must specify the day on which the break should occur.`\n        });\n        this.setModalData({\n          numberOfDays,\n          errors,\n          shiftBreakChangeSet\n        });\n        canShowDaysModal = true;\n      }\n\n      return {\n        validShiftBreakRecord,\n        canShowDaysModal\n      };\n    },\n\n    /**\n     * requestTime cannot overlap the existing routes break time.\n     * @param requestTime\n     * @param minutesPlannedDuration\n     */\n    requestTimeIsOverlap(requestTime, minutesPlannedDuration) {\n      const selectedRow = this.get('selectedRow');\n      const shiftBreaks = this.get('tableRef.table.rows').filter(sb => {\n        return sb !== selectedRow;\n      }); // requestTime with minutesPlannedDuration\n\n      const formatRequestTime = (0, _moment.default)(requestTime).add(minutesPlannedDuration, 'minute').toDate();\n      return shiftBreaks.some(shiftBreak => {\n        const plannedStart = (0, _moment.default)(shiftBreak.get('requestTime')).toDate();\n        const plannedEnd = (0, _moment.default)(shiftBreak.get('requestTime')).add('minute', shiftBreak.get('minutesPlannedDuration')).toDate();\n        const requestedTime = (0, _moment.default)(requestTime).toDate();\n        const isOverlapExististingRoute = (0, _moment.default)(requestTime).isSame(plannedStart) || (0, _moment.default)(requestTime).isSame(plannedEnd) || (0, _moment.default)(formatRequestTime).isSame(plannedEnd) || (0, _moment.default)(plannedStart).isBetween(requestedTime, formatRequestTime) || (0, _moment.default)(plannedEnd).isBetween(requestedTime, formatRequestTime);\n        return isOverlapExististingRoute;\n      });\n    },\n\n    // Checks if requestTime  is between dates in start and end.\n    requestTimeInrange(requestTime, startDate, endDate) {\n      return (0, _moment.default)(requestTime).isBetween(startDate, endDate);\n    },\n\n    getTransformedDate(date) {\n      if (!date) return null;\n      const recordDate = (0, _moment.default)(date);\n      const momentTime = (0, _moment.default)(new Date(null));\n      momentTime.set('hour', recordDate.get('hour'));\n      momentTime.set('minute', recordDate.get('minute'));\n      momentTime.set('second', recordDate.get('second'));\n      return momentTime.toDate();\n    },\n\n    getTransformedCurrentDate(date) {\n      if (!date) return null;\n      const recordDate = (0, _moment.default)(date);\n      const momentTime = (0, _moment.default)();\n      momentTime.set('hour', recordDate.get('hour'));\n      momentTime.set('minute', recordDate.get('minute'));\n      momentTime.set('second', recordDate.get('second'));\n      return momentTime.toDate();\n    },\n\n    /**\n     * add planned break duration to requestTime\n     * @param requestTime\n     * @param minutesPlannedDuration\n     * @returns {Date}\n     */\n    getTimeAfterDuration(requestTime, minutesPlannedDuration) {\n      let formattedRequestTime = (0, _moment.default)(this.getTransformedCurrentDate(requestTime));\n\n      if (formattedRequestTime && minutesPlannedDuration) {\n        formattedRequestTime = formattedRequestTime.add(minutesPlannedDuration, 'minutes');\n        return formattedRequestTime;\n      }\n\n      return formattedRequestTime;\n    },\n\n    /**\n     * get the difference between the requestTime and ShiftEndTime\n     * @param requestTime\n     * @param calcEndDate\n     * @returns {number}\n     */\n    getNumberOfDays(requestTime, calcEndDate) {\n      return (0, _moment.default)((0, _moment.default)(calcEndDate)).diff((0, _moment.default)(requestTime), 'days') + 1;\n    },\n\n    /**\n     * get the difference between the curren and requestTime\n     * @param requestTime\n     * @returns Number{*}\n     */\n    getDateDifference(requestTime) {\n      const currentDate = (0, _moment.default)();\n      return (0, _moment.default)(requestTime).diff(currentDate, 'days');\n    },\n\n    setModalData(_ref3) {\n      let {\n        numberOfDays,\n        errors,\n        shiftBreakChangeSet\n      } = _ref3;\n      const numbers = (0, _lodash.fill)(Array(numberOfDays), numberOfDays);\n      const days = numbers.map((num, index) => ({\n        day: (0, _numberToWords.stringifyNumber)(index + 1)\n      }));\n      this.set('modalData', {\n        numberOfDays: days,\n        title: 'System Configuration',\n        tip: '',\n        errors,\n        primaryActionText: 'Cancel',\n        closeAction: () => {\n          this.set('canShowDaysModal', false);\n        },\n        onDayClick: index => {\n          const requestTime = this.getTransformedCurrentDate(shiftBreakChangeSet.get('requestTime'));\n          this.setRequestTimeDate(requestTime, index);\n          this.onDateChange(shiftBreakChangeSet, 'requestTime', requestTime);\n          this.set('canShowDaysModal', false);\n          this.saveShiftBreak();\n        }\n      });\n    },\n\n    setRequestTimeDate(requestTime, count) {\n      requestTime.setDate(requestTime.getDate() + count);\n    },\n\n    async validateRecord(shiftBreakChangeSet, availability) {\n      const tooltip = this.get('tooltip');\n      const errors = [];\n      this.resetErrorModel();\n      const {\n        validShiftBreakRecord,\n        canShowDaysModal\n      } = await this.validateShiftBreak(errors, shiftBreakChangeSet, availability);\n      const canShowOtherValidations = !validShiftBreakRecord && !canShowDaysModal;\n\n      if (canShowOtherValidations) {\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n      }\n\n      this.set('showValidations', canShowOtherValidations);\n      return validShiftBreakRecord && !canShowDaysModal;\n    },\n\n    clearRecordAttributes(record) {\n      const store = this.get('store');\n      const modelClass = store.modelFor(record.constructor.modelName);\n      Array.from(modelClass.attributes.keys()).forEach(key => {\n        record.set(key, null);\n      });\n    },\n\n    onBreakTypeChange(breakType) {\n      if (breakType) {\n        this.set('selectedBreakType', breakType);\n      }\n    },\n\n    onDateChange(record, path, dateStr) {\n      record.set(path, dateStr);\n    },\n\n    //highlighting the error fields after rollback shift-break\n    setErrorModel(model) {\n      const errorModel = this.get('errorModel');\n      this.set('errorModel', {\n        invalidRequestTime: errorModel.invalidRequestTime,\n        invalidAddress: errorModel.invalidAddress,\n        invalidLength: model.minutesPlannedDuration.isInvalid,\n        invalidNotes: model.notes.isInvalid\n      });\n    },\n\n    resetErrorModel() {\n      const errorModel = {\n        invalidRequestTime: false,\n        invalidLength: false,\n        invalidAddress: false,\n        invalidNotes: false\n      };\n      this.set('errorModel', errorModel);\n    },\n\n    resetDriverBreakDOM() {\n      const record = (0, _unwrapProxy.unwrapProxy)(this.get('selectedRecord'));\n      const shiftBreakChangeSet = this.get('shiftBreakChangeSet'); //onst place = shiftBreakChangeSet.get('place');\n\n      const floatBreakType = this.get('defaultBreakType');\n      const breakTypes = this.get('breakTypes'); //fields.breakType = unwrapProxy(record.get('breakType')); // relationship\n\n      if (record) {\n        shiftBreakChangeSet.set('minutesPlannedDuration', record.get('minutesPlannedDuration'));\n        shiftBreakChangeSet.set('requestTime', record.get('requestTime'));\n        shiftBreakChangeSet.set('notes', record.get('notes'));\n        this.set('selectedBreakType', breakTypes.toArray().find(bt => bt.get('name') === record.get('breakType.name')));\n        shiftBreakChangeSet.set('breakType', breakTypes.toArray().find(bt => bt.get('name') === record.get('breakType.name')));\n      } else {\n        shiftBreakChangeSet.set('minutesPlannedDuration', null);\n        shiftBreakChangeSet.set('requestTime', null);\n        shiftBreakChangeSet.set('notes', null);\n        this.set('selectedBreakType', breakTypes.toArray().find(bt => bt.get('name') === floatBreakType.get('name')));\n        shiftBreakChangeSet.set('breakType', breakTypes.toArray().find(bt => bt.get('name') === floatBreakType.get('name')));\n      }\n\n      this.regenratePlaceRecord();\n    },\n\n    getSchedule() {\n      const schedules = this.get('store').peekAll('schedule');\n      const schedule = schedules.find(s => {\n        return s.get('start') <= new Date() <= s.get('end');\n      });\n      if (!schedule) return;\n      return schedule;\n    },\n\n    //NYAAR-16426-for for fixed break, if user adds a break that ends at a time that doesn't allow the vehicle to return to the garage before shift end time we have to show the popup\n    async checkBreakStartTimeIsEnoughToReachGarageBeforeShiftEndTime(shiftBreakChangeSet, shiftEndTime) {\n      await this.queryEndGaragePlace();\n      const breakTime = shiftBreakChangeSet.requestTime;\n      const minutesPlannedDuration = parseInt(shiftBreakChangeSet.get('minutesPlannedDuration'), 10);\n      const breakLocationLat = shiftBreakChangeSet.get('place.location.lat');\n      const breakLocationLng = shiftBreakChangeSet.get('place.location.lng');\n      const breakEndTime = (0, _moment.default)(breakTime).add(minutesPlannedDuration, 'minute').toDate();\n      const endGarageLat = this.get('availability.vehicle.endGarage.location.lat');\n      const endGarageLng = this.get('availability.vehicle.endGarage.location.lng');\n      const payload = {\n        'data': {\n          'type': 'queryTravelData',\n          'attributes': {\n            'pick': {\n              'lat': breakLocationLat,\n              'lng': breakLocationLng,\n              'nominalTime': breakEndTime\n            },\n            'drop': {\n              'lat': endGarageLat,\n              'lng': endGarageLng,\n              'nominalTime': shiftEndTime\n            }\n          }\n        }\n      };\n      const schedule = this.get('workspace.currentSchedule') ? this.get('workspace.currentSchedule') : this.getSchedule();\n      const options = {\n        operationData: payload.data.attributes,\n        outputResult: true\n      };\n      const res = await this.createScheduleAsyncOperation.perform(schedule, 'queryTravelData', options);\n      const results = res.isJobSuccess ? JSON.parse(res.jsonData.attributes.results) : null;\n      const travelData = Ember.isPresent(results) ? results.travelData : [];\n      const adjustedRoundedTime = travelData.length ? travelData[0].adjustedRoundedTime : 0;\n      const isGarageReachTimeBeforeShiftEndTime = this.checkGarageReachBeforeShiftEndTime(adjustedRoundedTime, breakEndTime, shiftEndTime);\n      return isGarageReachTimeBeforeShiftEndTime;\n    },\n\n    async queryTravelData(payload) {\n      const session = this.get('session');\n      const scheduleHost = _apiUrls.API.schedulingService.host;\n      const currentScheduleId = await this.getScheduleId();\n      const url = `${scheduleHost}/schedule/${currentScheduleId}/query-travel-data`;\n      const {\n        results\n      } = await this.get('ajax').post(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: payload\n      });\n      const resultData = JSON.parse(results);\n      const adjustedRoundedTime = resultData.travelData.length ? resultData.travelData[0].adjustedRoundedTime : 0;\n      return adjustedRoundedTime;\n    },\n\n    async queryEndGaragePlace() {\n      //some times garage place location is not fetched\n      if (!this.get('availability.vehicle.endGarage.location.id')) {\n        const placeId = this.get('availability.vehicle.endGarage.id');\n        const placeQuery = `in(id,(${placeId}))&include=address,location`;\n        await this.get('store').query('place', {\n          filter: placeQuery\n        });\n      }\n    },\n\n    getTime(date) {\n      if (!date) return null;\n      const recordDate = (0, _moment.default)(date);\n      const momentTime = (0, _moment.default)(new Date());\n      momentTime.set('hour', recordDate.get('hour'));\n      momentTime.set('minute', recordDate.get('minute'));\n      momentTime.set('second', recordDate.get('second'));\n      return momentTime.toDate();\n    },\n\n    //to check whether the time to reach to garage from break location is before the shift end time\n    checkGarageReachBeforeShiftEndTime(adjustedRoundedTime, breakEndTime, shiftEndTime) {\n      const garageReachTime = (0, _moment.default)(breakEndTime).add(adjustedRoundedTime, 'minute').toDate();\n      return (0, _moment.default)(garageReachTime).isBefore(shiftEndTime, 'minutes');\n    },\n\n    //NYAAR-16426-If the user enters a break time plus length that causes the break to extend past the shift end time, then after user clicks Save button, we need to show a popup.\n    checkBreakEndTimeIsBeforeShiftEndTime(requestTime, calcEndDate) {\n      return (0, _moment.default)(requestTime).isBefore(calcEndDate, 'minutes');\n    },\n\n    checkTimeIsBeforeShiftEndTime(time) {\n      const shiftEndTime = this.get('availability.calcShiftEnd');\n      return (0, _moment.default)(time).isBefore(shiftEndTime, 'minutes');\n    },\n\n    checkTimeIsAfterShiftStartTime(time) {\n      const shiftStartTime = this.getTime(this.get('availability.shiftStart'));\n      return (0, _moment.default)(time).isAfter(shiftStartTime, 'minutes');\n    },\n\n    async getScheduleId() {\n      const routeTemplateId = this.get('availability.routeTemplate.id');\n      const routeQuery = `eq(routeTemplateId,${routeTemplateId})`;\n      const routes = await this.get('store').query('route', {\n        filter: routeQuery\n      });\n      const scheduleAvailableRoutes = routes.toArray().filter(route => {\n        return (0, _unwrapProxy.unwrapProxy)(route.get('schedule'));\n      });\n      const scheduleId = scheduleAvailableRoutes.get('firstObject.schedule.id');\n      return scheduleId;\n    },\n\n    actions: {\n      // header button functions\n      newDriverBreak() {\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: true,\n          undo: true\n        };\n        const selectedRow = this.get('selectedRow');\n\n        if (selectedRow) {\n          selectedRow.set('selected', false); // triggers cp and on save it should create a new record unless user selects a new record\n\n          this.set('tableRef.config.selectFirstRow', false);\n        }\n\n        this.set('disableBtns', disableBtns);\n        this.set('disableForms', false);\n        this.resetErrorModel();\n      },\n\n      editDriverBreak() {\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: true,\n          undo: false\n        };\n        this.set('disableBtns', disableBtns);\n        this.set('disableForms', false);\n      },\n\n      undoDriverBreak() {\n        //Resetting address\n        if (this.get('shiftBreakChangeSet.breakType') !== _breakType.FLOATING_BREAK) {\n          this.get('addressPublicApi').onValueChange(null);\n        }\n\n        this.resetDriverBreakDOM();\n        this.resetErrorModel();\n      },\n\n      saveDriverBreak() {\n        this.get('onSaveShiftBreakTask').perform();\n      },\n\n      deleteDriverBreak() {\n        this.get('onDeleteShiftBreakTask').perform();\n      },\n\n      onPrimaryActionButtonClick() {\n        const selectedRecord = this.get('selectedRecord');\n\n        if (selectedRecord) {\n          this.get('queryModal.primaryActionTask').perform(selectedRecord).then(() => {\n            this.onCloseModal();\n          });\n        }\n      },\n\n      onCloseModal() {\n        this.onCloseModal();\n      },\n\n      onClickOverlayModal() {\n        const hasOverlay = this.get('hasOverlay');\n\n        if (hasOverlay) {\n          return false;\n        }\n\n        this.get('queryModal').reset();\n      },\n\n      onHelp() {},\n\n      toggleSearchInput() {\n        this.toggleProperty('isSearchEnabled');\n      },\n\n      onSearchTextChange(event) {\n        const previousSearchText = this.get('searchText');\n\n        if (event.target.value === previousSearchText) {\n          return;\n        }\n\n        const tableRef = this.get('tableRef');\n\n        if (!tableRef) {\n          return;\n        }\n\n        this.set('searchText', event.target.value);\n        tableRef.onSearchTextChange(event);\n      },\n\n      onClearSearchText() {\n        this.set('searchText', '');\n        const tableRef = this.get('tableRef');\n\n        if (!tableRef) {\n          return;\n        }\n\n        tableRef.onClearSearchText();\n      },\n\n      onDropDownActionClick(action, dropdown) {\n        dropdown.actions.close();\n        if (action.action) action.action();\n      },\n\n      onDateChange(record, path, value) {\n        const currentDate = (0, _moment.default)();\n        currentDate.hour(value.getHours());\n        currentDate.minute(value.getMinutes());\n        this.onDateChange(record, path, currentDate.toDate());\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        const freeformAddressPath = this.get('locationConfig.extra.freeformAddressPath');\n\n        if (options.valuePath) {\n          //NYAAR-20190-we have to set the address when every address related properties are updated to the record\n          if (options.valuePath === freeformAddressPath) {\n            this.get('addressPublicApi').onValueChange(record.get(`${valuePath}`));\n          }\n\n          return record.set(`${valuePath}.${options.valuePath}`, value);\n        }\n\n        return record.set(valuePath, value);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        // NYAAR-19109-refix Converting Length from string to integer\n        const formattedValue = valuePath === MINUTES_PLANNED_DURATION && value !== '' ? parseInt(value, 10) : value;\n        return record.set(valuePath, formattedValue);\n      },\n\n      // power select event handler\n      onBreakTypeChange(option) {\n        this.set('shiftBreakChangeSet.breakType', option);\n        this.onBreakTypeChange(option);\n        let placeModel = this.get('shiftBreakChangeSet.place');\n\n        if (option.get('name') === _breakType.FLOATING_BREAK) {\n          const shiftBreakChangeSet = this.get('shiftBreakChangeSet');\n          const place = (0, _unwrapProxy.unwrapProxy)(shiftBreakChangeSet.get('place'));\n          const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n          const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n          if (place) this.clearRecordAttributes(place);\n          if (address) this.clearRecordAttributes(address);\n          if (location) this.clearRecordAttributes(location);\n          place.set('address', address);\n          place.set('location', location);\n          placeModel = place;\n        } //Setting the selected address\n\n\n        if (this.get('addressPublicApi')) {\n          this.get('addressPublicApi').onValueChange(placeModel);\n        }\n      },\n\n      registerAddressPublicApi(publicApi) {\n        this.set('addressPublicApi', publicApi);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.locationFieldConfig = void 0;\n  const locationFieldConfig = {\n    id: 'location',\n    type: 'addresses',\n    label: '',\n    valuePath: 'place',\n    modelName: 'place',\n    extra: {\n      aliasPath: 'address.alias',\n      notesPath: 'address.notes',\n      premisePath: 'address.premise',\n      streetNumberPath: 'address.streetNumber',\n      streetNamePath: 'address.streetName',\n      localityPath: 'address.locality',\n      regionPath: 'address.region',\n      subRegionPath: 'address.county',\n      postalCodePath: 'address.postalCode',\n      countryPath: 'address.country',\n      freeformAddressPath: 'address.freeformAddress',\n      tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.streetAddress',\n      locationsPath: 'address.locations.content.firstObject.latlng'\n    }\n  };\n  _exports.locationFieldConfig = locationFieldConfig;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/table/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['route-master-table'],\n    store: Ember.inject.service(),\n    config: _config.default,\n    showHeader: false,\n    source: null,\n    paginationEnabled: true,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const params = {\n        sorts: []\n      };\n\n      try {\n        // this only applies for server-side pagination\n        if (this.get('paginationEnabled')) {\n          params.page = {\n            offset: this.get('records.length'),\n            limit: this.get('limit')\n          };\n        }\n\n        const sort = this.buildSortParam();\n\n        if (sort) {\n          params.sorts.push(sort);\n        }\n\n        const includes = this.get('defaultIncludes');\n\n        if (!Ember.isEmpty(includes)) {\n          params.includes = includes;\n        }\n\n        const filters = this.setupFilterType();\n        params.filter = (0, _filters.buildCompoundFilterNode)('and', filters);\n        const modelName = this.get('config.modelName');\n        return this.query(modelName, params);\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.log('Workspace view is not refreshed on selecting or deselecting' + error);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const activeData = this.get('source').get(modelName) || [];\n      const filteredData = activeData.filter(filterFn).sort(compareFn);\n      return filteredData.filter(model => !model.get('isDeleted'));\n    },\n\n    rollbackRecord() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (this.get('usingRadioRowComponent')) {\n        if (record && !record.get('isNew')) record.rollbackAttributes();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'shiftBreaks',\n    title: 'Driver Break Templates',\n    defaultSortId: 'breakStart',\n    defaultSortAsc: true,\n    fetchModelData: false,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    columns: [{\n      id: 'breakStart',\n      index: 1,\n      type: 'time',\n      label: 'Start Time',\n      valuePath: 'requestTime',\n      defaultWidth: 100,\n      format: 'HH:mm',\n      searchable: true\n    }, {\n      id: 'breakLength',\n      index: 2,\n      type: 'number',\n      label: 'Length',\n      valuePath: 'minutesPlannedDuration',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'breakType',\n      index: 3,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'breakType.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'notes',\n      index: 4,\n      type: 'text',\n      label: 'Notes',\n      valuePath: 'notes',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'address',\n      index: 5,\n      type: 'text',\n      label: 'Address',\n      valuePath: 'place.address.address.address.freeformAddress',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tr3VF0UT\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"dropdown\\\",\\\"event\\\"],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"onClickOverlay\\\",\\\"overlayClass\\\",\\\"translucentOverlay\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onClickOverlayModal\\\"],null],\\\"driver-break-master-styles-overlay\\\",true]],{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driver-break-master\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driver-break-master-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driver-break-master-header-buttons\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-search search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleSearchInput\\\"],null]],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"renderInPlace\\\"],[\\\"right\\\",true]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/side-drawer/system-config/modals/driver-master/template.hbs' @ L17:C13) \\\"],null]],[[\\\"class\\\"],[\\\"data-test-plus-button\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/side-drawer/system-config/modals/driver-master/template.hbs' @ L21:C13) \\\"],null]],[[\\\"class\\\"],[\\\"table-component-content data-test-dropdown\\\"]],{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"dropdownActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onDropDownActionClick\\\",[22,3,[]],[22,2,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-2x fa-times close\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseModal\\\"],null]],[9],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driver-break-master-body\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-input\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"search-box data-test-search-box\\\"],[11,\\\"placeholder\\\",\\\"Search\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSearchTextChange\\\"],null]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"searchText\\\",\\\"length\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"clear-button data-test-clear-button\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-times-circle active-button\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onClearSearchText\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driver-break-master-table\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"side-drawer/system-config/modals/driver-master/table\\\",null,[[\\\"tableRef\\\",\\\"source\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"availability\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"button-group\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"disableBtns\\\",\\\"new\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"New\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"newDriverBreak\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditDeleteBtn\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Edit\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"editDriverBreak\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditDeleteBtn\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Delete\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"deleteDriverBreak\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableSaveBtn\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Save\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"saveDriverBreak\\\"]],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableUndobtn\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Undo\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"undoDriverBreak\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"enable-margin-left\\\",\\\"Break\\\",false]],{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start Time\\\"],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"format\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"errorModel\\\",\\\"invalidRequestTime\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null],true,false,true,[23,[\\\"disableForms\\\"]],\\\"HH:MM\\\",[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[27,\\\"readonly\\\",[[23,[\\\"shiftBreakChangeSet\\\",\\\"requestTime\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",[23,[\\\"shiftBreakChangeSet\\\"]],\\\"requestTime\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Length\\\"],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"errorModel\\\",\\\"invalidLength\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"flex-grow-1 error\\\",\\\"flex-grow-1\\\"],null],\\\"Minutes\\\",[23,[\\\"disableForms\\\"]],[23,[\\\"extraBreakLengthOptions\\\"]],[27,\\\"readonly\\\",[[23,[\\\"shiftBreakChangeSet\\\",\\\"minutesPlannedDuration\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"shiftBreakChangeSet\\\"]],\\\"minutesPlannedDuration\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"renderInPlace\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"placeholder\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"breakTypes\\\"]],true,[23,[\\\"disableForms\\\"]],false,\\\"Select Type\\\",[23,[\\\"selectedBreakType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onBreakTypeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                  \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"form-components/addresses\\\",null,[[\\\"renderInPlace\\\",\\\"class\\\",\\\"disabled\\\",\\\"record\\\",\\\"value\\\",\\\"display\\\",\\\"placeholder\\\",\\\"valuePath\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\",\\\"showPinButton\\\",\\\"registerPublicApi\\\",\\\"onChange\\\"],[false,[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"errorModel\\\",\\\"invalidAddress\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[27,\\\"readonly\\\",[[23,[\\\"disableAddressSearch\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"shiftBreakChangeSet\\\",\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"shiftBreakChangeSet\\\"]],[23,[\\\"locationConfig\\\",\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"shiftBreakChangeSet\\\"]],[23,[\\\"locationConfig\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"readonlyCell\\\"]]],null],false,[27,\\\"action\\\",[[22,0,[]],\\\"registerAddressPublicApi\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"shiftBreakChangeSet\\\"]],[23,[\\\"locationConfig\\\",\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notes-row\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"textarea\\\"],[11,\\\"rows\\\",\\\"6\\\"],[12,\\\"disabled\\\",[21,\\\"disableForms\\\"]],[11,\\\"placeholder\\\",\\\"write a note\\\"],[11,\\\"maxlength\\\",\\\"4096\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"shiftBreakChangeSet\\\",\\\"notes\\\"]]],null]],[12,\\\"onkeyup\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"shiftBreakChangeSet\\\"]],\\\"notes\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[0,\\\"                  \\\"],[10],[0,\\\"              \\\"],[10],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canShowDaysModal\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"side-drawer/system-config/modals/break-days-action-modal\\\",null,[[\\\"modalData\\\"],[[23,[\\\"modalData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/modals/driver-master/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/component\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['no-show-reason-categories'],\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    noShowReasonRec: null,\n    disableForm: true,\n    isNewNoShowReason: false,\n    noShowReasonChanges: false,\n    disableBtns: null,\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    disableUndobtn: Ember.computed.readOnly('disableSavebtn'),\n    noShowReasonFormChanges: Ember.computed('noShowReasonChanges', 'noShowReasonRec.{id,name,code,displayName,minutesFromPromiseTimeStart,minutesFromPromiseTimeEnd,driverNeedsApproval}', function () {\n      const noShowReasonChanges = this.get('noShowReasonChanges');\n\n      if (noShowReasonChanges) {\n        return true;\n      }\n\n      return false;\n    }),\n    disableSavebtn: Ember.computed('disableForm', 'noShowReasonRec.{id,name,displayName,code}', function () {\n      const disableForm = this.get('disableForm');\n\n      if (disableForm) {\n        return true;\n      }\n\n      const hasValues = Object.values(this.get('noShowReasonRec')).some(input => !Ember.isEmpty(input));\n      return !hasValues;\n    }),\n    // @TODO: transform into computed property similar to route master\n    selectedRowChange: Ember.observer('selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      this.setDefaultProperties(selectedRow);\n      this.buttonSettings();\n\n      if (!selectedRow) {\n        this.buttonSettings(false, true, true);\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('trueFalseOptions', [{\n        value: true,\n        display: 'true'\n      }, {\n        value: false,\n        display: 'false'\n      }]);\n      this.set('noShowReasonRec', []);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      const fields = {\n        name: '',\n        displayName: '',\n        code: '',\n        minutesFromPromiseTimeStart: 0,\n        minutesFromPromiseTimeEnd: 0,\n        driverNeedsApproval: false\n      };\n\n      if (Ember.isPresent(record)) {\n        Object.entries(fields).forEach(key => {\n          fields[key[0]] = record.get(key[0]);\n        });\n      }\n\n      this.setProperties({\n        'disableForm': true,\n        'noShowReasonChanges': false,\n        'noShowReasonRec': Ember.Object.create(fields)\n      });\n    },\n\n    buttonSettings() {\n      let newbtn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      let editbtn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let deletebtn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      const disableBtns = {\n        new: newbtn,\n        edit: editbtn,\n        delete: deletebtn\n      };\n      this.set('disableBtns', disableBtns);\n    },\n\n    save: (0, _emberConcurrency.task)(function* () {\n      const record = this.buildNoShowReasonData();\n      return yield record.save();\n    }).drop(),\n\n    buildNoShowReasonData() {\n      let record = null;\n      const store = this.get('store');\n      const value = this.get('noShowReasonRec');\n      const displayName = value.get('displayName');\n      const camelizedName = Ember.String.camelize(displayName);\n      const isNewNoShowReason = this.get('isNewNoShowReason');\n\n      if (isNewNoShowReason) {\n        const name = camelizedName.replace(/[_\\W]+/g, '_');\n        const data = {\n          category: 'config-System_Configuration-no_show_reason_categories',\n          type: 'object',\n          displayName,\n          name,\n          value\n        };\n        record = store.createRecord('cs-config-item', data);\n      } else {\n        const name = value.get('name');\n        const id = `config-System_Configuration-no_show_reason_categories/${name}`;\n        record = store.peekRecord('cs-config-item', id);\n        record.set('displayName', displayName);\n        record.set('value', value);\n      }\n\n      return record;\n    },\n\n    delete: (0, _emberConcurrency.task)(function* () {\n      const record = this.get('selectedRow');\n      const notifications = this.get('notifications');\n\n      try {\n        const id = `config-System_Configuration-no_show_reason_categories/${record.id}`;\n        const configItemRecord = this.get('store').peekRecord('cs-config-item', id);\n        yield configItemRecord.destroyRecord();\n        const noShowCategoryRecord = this.get('store').peekRecord('no-show-reason-category', record.id);\n        yield noShowCategoryRecord.unloadRecord();\n        this.get('tableRef').onUncheckAll();\n        this.get('tableRef').refreshData(); //to refresh table data\n\n        notifications.success('Record successfully deleted.');\n      } catch (error) {\n        console.error(error); // eslint-disable-line\n\n        notifications.warning('Record failed to delete.');\n      }\n    }).drop(),\n\n    async validateNoShowReason(noShowReason) {\n      const notifications = this.get('notifications');\n      const records = this.get('tableRef.records');\n      const id = this.get('selectedRow.id');\n      const minutesFromPromiseTimeStart = noShowReason.get('minutesFromPromiseTimeStart');\n      const minutesFromPromiseTimeEnd = noShowReason.get('minutesFromPromiseTimeEnd');\n      const timeStart = Ember.isEmpty(minutesFromPromiseTimeStart) ? 0 : parseInt(minutesFromPromiseTimeStart, 10);\n      const timeEnd = Ember.isEmpty(minutesFromPromiseTimeEnd) ? 9999 : parseInt(minutesFromPromiseTimeEnd, 10);\n      let isValid = true;\n\n      if (minutesFromPromiseTimeStart.length > 3 || minutesFromPromiseTimeEnd.length > 3) {\n        notifications.warning('Promise time start/end have a maximum value of 999.');\n        isValid = false;\n      }\n\n      if (isValid && minutesFromPromiseTimeStart > minutesFromPromiseTimeEnd && !Ember.isEmpty(minutesFromPromiseTimeEnd)) {\n        notifications.warning('Promise time start must be less than or equal to promise time end.');\n        isValid = false;\n      }\n\n      if (isValid) {\n        records.forEach(record => {\n          const currentId = record.get('id');\n          const currentTimeStart = Ember.isEmpty(record.get('minutesFromPromiseTimeStart')) ? 0 : parseInt(record.get('minutesFromPromiseTimeStart'), 10);\n          const currentTimeEnd = Ember.isEmpty(record.get('minutesFromPromiseTimeEnd')) ? 9999 : parseInt(record.get('minutesFromPromiseTimeEnd'), 10);\n\n          if (currentId !== id) {\n            if (timeStart >= currentTimeStart && timeStart <= currentTimeEnd || timeEnd >= currentTimeStart && timeEnd <= currentTimeEnd) {\n              isValid = false;\n              notifications.warning('Promise time start/end overlaps with another range.');\n            }\n          }\n        });\n      }\n\n      if (Ember.isEmpty(noShowReason.get('displayName')) || noShowReason.get('displayName') === '') {\n        notifications.warning('Display Name cannot be empty.');\n        isValid = false;\n      }\n\n      if (Ember.isEmpty(noShowReason.get('code')) || noShowReason.get('code') === '') {\n        notifications.warning('Code cannot be empty.');\n        isValid = false;\n      }\n\n      return isValid;\n    },\n\n    async refreshNoShowReasonDOM(noShowReason) {\n      const tableRef = this.get('tableRef');\n      await noShowReason.reload();\n      this.get('tableRef').onUncheckAll();\n      this.get('tableRef').refreshData();\n      Ember.run.later(() => {\n        Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n      }, 500);\n      this.set('noShowReasonChanges', false);\n    },\n\n    async resetNoShowReasonDOM() {\n      const selectedRow = this.get('selectedRow');\n      this.setDefaultProperties(selectedRow);\n      this.buttonSettings();\n\n      if (!selectedRow) {\n        this.buttonSettings(false, true, true);\n      }\n\n      this.set('noShowReasonChanges', false);\n    },\n\n    onSaveNoShowReason() {\n      const value = this.get('noShowReasonRec');\n      return this.validateNoShowReason(value).then(isValid => {\n        if (isValid) {\n          const notifications = this.get('notifications');\n          const tableRef = this.get('tableRef');\n          return this.get('save').perform().then(noShowReason => {\n            tableRef.onUncheckAll();\n            notifications.success('Record successfully saved');\n            this.refreshNoShowReasonDOM(noShowReason);\n          }).catch(() => {\n            notifications.warning('Record failed to save');\n          });\n        }\n      });\n    },\n\n    actions: {\n      newNoShowReason() {\n        this.setDefaultProperties();\n        this.setProperties({\n          isNewNoShowReason: true,\n          disableForm: false,\n          noShowReasonChanges: false\n        });\n        this.buttonSettings(true, true, true);\n      },\n\n      editNoShowReason() {\n        const selectedRow = this.get('selectedRow');\n        this.setDefaultProperties(selectedRow);\n        this.setProperties({\n          isNewNoShowReason: false,\n          disableForm: false,\n          noShowReasonChanges: false\n        });\n        this.buttonSettings(true, true, true);\n      },\n\n      deleteNoShowReason() {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          tip: 'Are you sure you want to Delete these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            return this.get('delete').perform().then(() => {\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n      },\n\n      async saveNoShowReason() {\n        this.onSaveNoShowReason();\n      },\n\n      async confirmNoShowReason() {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasOverlay: true,\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            this.onSaveNoShowReason().then(() => {\n              tooltip.reset();\n            });\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n      },\n\n      undoNoShowReason() {\n        this.resetNoShowReasonDOM();\n      },\n\n      onNoShowReasonDropDownChanges(keyToSet, selectedObj) {\n        if (keyToSet) {\n          this.set(keyToSet, selectedObj.value);\n        }\n\n        this.set('noShowReasonChanges', true);\n      },\n\n      onNoShowReasonFormChanges() {\n        this.set('noShowReasonChanges', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['no-show-reason-table'],\n    config: _config.default,\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    configType: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    // if any one of rows is selected, hasPendingChanges method will be executed\n    hasPendingChanges: Ember.computed('noShowReasonFormChanges', function () {\n      const noShowReasonFormChanges = this.get('noShowReasonFormChanges') || false;\n      return noShowReasonFormChanges;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'no-show-reason-category',\n    title: 'No Show Reason Categories',\n    tooltipTitle: 'System Configuration',\n    defaultSortId: 'minutesFromPromiseTimeStart',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    fetchModelData: true,\n    columns: [{\n      id: 'name',\n      index: 1,\n      type: 'string',\n      label: 'Name',\n      valuePath: 'name',\n      defaultWidth: 180,\n      searchable: true\n    }, {\n      id: 'displayName',\n      index: 2,\n      type: 'string',\n      label: 'Display Name',\n      valuePath: 'displayName',\n      defaultWidth: 280,\n      searchable: true\n    }, {\n      id: 'code',\n      index: 3,\n      type: 'text',\n      label: 'Code',\n      valuePath: 'code',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'driverNeedsApproval',\n      index: 4,\n      type: 'boolean',\n      label: 'Driver needs approval',\n      valuePath: 'driverNeedsApproval',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'minutesFromPromiseTimeStart',\n      index: 5,\n      type: 'number',\n      label: 'Minutes from promise start time',\n      valuePath: 'minutesFromPromiseTimeStart',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'minutesFromPromiseTimeEnd',\n      index: 6,\n      type: 'number',\n      label: 'Minutes from promise end time',\n      valuePath: 'minutesFromPromiseTimeEnd',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"MnufHUIT\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"noShowReasonFormChanges\\\",\\\"disableUndobtn\\\"],[\\\"No Show Reason Categories\\\",[27,\\\"action\\\",[[22,0,[]],\\\"newNoShowReason\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editNoShowReason\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deleteNoShowReason\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoNoShowReason\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"confirmNoShowReason\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"noShowReasonFormChanges\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"side-drawer/system-config/no-show-reason-categories/table\\\",null,[[\\\"tableRef\\\",\\\"noShowReasonFormChanges\\\",\\\"saveRecordFunction\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"noShowReasonFormChanges\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"saveNoShowReason\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"main-information\\\",\\\"No Show Information\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-information-panel information-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"duplicateName\\\"]],\\\"error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"noShowReasonRec\\\",\\\"name\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"No show reason name\\\",\\\"text\\\",[27,\\\"readonly\\\",[true],null],[27,\\\"action\\\",[[22,0,[]],\\\"onNoShowReasonFormChanges\\\"],null],[23,[\\\"noShowReasonRec\\\",\\\"name\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"noShowReasonRec\\\",\\\"displayName\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Display Name\\\"],[10],[0,\\\"\\\\n           \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Display name\\\",\\\"text\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNoShowReasonFormChanges\\\"],null],[23,[\\\"noShowReasonRec\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"noShowReasonRec\\\",\\\"code\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Code\\\"],[10],[0,\\\"\\\\n           \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"maxlength\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"No show reason code\\\",\\\"text\\\",\\\"12\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNoShowReasonFormChanges\\\"],null],[23,[\\\"noShowReasonRec\\\",\\\"code\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"noShowReasonRec\\\",\\\"driverNeedsApproval\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Driver Needs Approval\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[\\\"Driver needs approval?\\\",[23,[\\\"trueFalseOptions\\\"]],[27,\\\"find-by\\\",[\\\"value\\\",[23,[\\\"noShowReasonRec\\\",\\\"driverNeedsApproval\\\"]],[23,[\\\"trueFalseOptions\\\"]]],null],[27,\\\"handle-dropdown\\\",[\\\"noShowReasonRec.driverNeedsApproval\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNoShowReasonDropDownChanges\\\"],null]],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[\\\"display\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Minutes From Promise\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"noShowReasonRec\\\",\\\"minutesFromPromiseTimeStart\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Start\\\"],[10],[0,\\\"\\\\n           \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"max\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Minutes from promise start\\\",\\\"number\\\",\\\"999\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNoShowReasonFormChanges\\\"],null],[23,[\\\"noShowReasonRec\\\",\\\"minutesFromPromiseTimeStart\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"noShowReasonRec\\\",\\\"minutesFromPromiseTimeEnd\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"End\\\"],[10],[0,\\\"\\\\n           \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"max\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Minutes from promise end\\\",\\\"number\\\",\\\"999\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNoShowReasonFormChanges\\\"],null],[23,[\\\"noShowReasonRec\\\",\\\"minutesFromPromiseTimeEnd\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/no-show-reason-categories/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/places/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/models/place-category-type\", \"adept-iq/pods/components/side-drawer/system-config/places/config\"], function (_exports, _emberConcurrency, _unwrapProxy, _placeCategoryType, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['places'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    disableForm: true,\n    isNewPlace: false,\n    placeChanges: false,\n    location: null,\n    disableBtns: null,\n    locationConfig: _config.default.fields,\n    addressOptions: null,\n    selectedPlaceTypeCategory: null,\n    inValidName: false,\n    inValidZone: false,\n    inValidCategory: false,\n    inValidAddress: false,\n    addressPublicApi: null,\n    prevPlaceName: null,\n    isEditMode: false,\n    undoChanges: false,\n    currentState: null,\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    isSelectedRowGarageType: Ember.computed.equal('selectedRow.placeCategoryType.name', _placeCategoryType.GARAGE_PLACE_CATEGORY_TYPE),\n    previousPlaceInfo: null,\n    previousAddress: null,\n    name: Ember.computed('location.place.address.alias', 'selectedRow', {\n      get() {\n        const selectedRow = this.get('selectedRow');\n        let alias = this.get('location.place.address.alias');\n\n        if (selectedRow && Ember.isEmpty(alias)) {\n          alias = selectedRow.get('address.alias');\n        }\n\n        return alias;\n      },\n\n      set(key, value) {\n        this.set('location.place.address.alias', value);\n        this.set('location.name', value);\n        return value;\n      }\n\n    }),\n    lat: Ember.computed('location.place.location.lat', 'selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      let lat = this.get('location.place.location.lat');\n\n      if (selectedRow && Ember.isEmpty(lat)) {\n        lat = selectedRow.get('location.lat');\n      }\n\n      return lat;\n    }),\n    lng: Ember.computed('location.place.location.lng', 'selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      let lng = this.get('location.place.location.lng');\n\n      if (selectedRow && Ember.isEmpty(lng)) {\n        lng = selectedRow.get('location.lng');\n      }\n\n      return lng;\n    }),\n    zone: Ember.computed('location.place.address.zoneName.{name}', 'lng', 'selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      let zone = this.get('location.place.address.zoneName.displayName');\n\n      if (selectedRow && Ember.isEmpty(zone)) {\n        zone = selectedRow.get('address.zoneName.displayName');\n      }\n\n      return zone;\n    }),\n    placeFormChanges: Ember.computed('placeChanges', 'location.{name,address,placeTypeCategory,place.address.zoneName,place.location.lat}', function () {\n      const placeChanges = this.get('placeChanges');\n\n      if (placeChanges) {\n        return true;\n      }\n\n      return false;\n    }),\n    disableUndobtn: Ember.computed('disableForm', 'placeChanges', function () {\n      const disableForm = this.get('disableForm');\n      const placeChanges = this.get('placeChanges');\n      const returnValue = !(!disableForm && placeChanges);\n      this.hasChanges(!returnValue);\n      return returnValue;\n    }),\n    disableSavebtn: Ember.computed('disableForm', 'location.{name,address,placeTypeCategory,place.address.zoneName,place.location.lat}', function () {\n      const disableForm = this.get('disableForm');\n\n      if (disableForm) {\n        return true;\n      }\n\n      const hasValues = !Ember.isEmpty(this.get('zone')) && !Ember.isEmpty(this.get('lat')) && !Ember.isEmpty(this.get('location.name')) && !Ember.isEmpty(this.get('location.placeTypeCategory'));\n      return !hasValues;\n    }),\n    selectedRowChange: Ember.observer('selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n\n      if (this.get('isEditMode')) {\n        const address = this.get('location.place.address.previousReadableAddress');\n        this.set('location.place.address.address.address.freeformAddress', address);\n        this.set('isEditMode', false);\n      }\n\n      this.setDefaultProperties(selectedRow);\n    }),\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.setDefaultProperties();\n      this.setupPlaceTypeCategoryList();\n      this.defaultSettings();\n      this.get('providerChanges');\n      this.undoPlaces = this.undoPlaces.bind(this);\n      this.hasChanges = this.get('hasChanges').bind(this);\n    },\n\n    backUpCurrentState() {\n      const placeTypeCategory = this.get('location.placeTypeCategory');\n      const address = this.get('location.place.address.freeformAddress');\n      const name = this.get('location.name');\n      const notes = this.get('location.notes');\n      const {\n        zone,\n        lat,\n        lng\n      } = this;\n      const currentState = {\n        name,\n        zone,\n        lat,\n        lng,\n        placeTypeCategory,\n        address,\n        notes\n      };\n      this.set('currentState', currentState);\n    },\n\n    setDeleteButtonVisibility(deleteSetTo) {\n      const isSelectedRowType = this.get('selectedRow.placeCategoryType.name'); // always disable all category type\n\n      if (Ember.isPresent(isSelectedRowType)) {\n        return true;\n      }\n\n      return deleteSetTo;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      const address = this.get('store').createRecord('address', {});\n      const locationRecord = this.get('store').createRecord('location', {\n        lat: '',\n        lng: '',\n        geoNode: ''\n      });\n      const placeFields = {\n        name: '',\n        placeTypeCategory: '',\n        notes: '',\n        place: Ember.Object.create({\n          location: locationRecord,\n          address\n        })\n      };\n\n      if (this.selectedRow) {\n        if (this.isNewPlace) {\n          this.isNewPlace = false;\n        }\n      }\n\n      if (this.isNewPlace && !this.undoChanges) {\n        this.backUpCurrentState();\n      } else {\n        this.set('location', Ember.Object.create(placeFields));\n      }\n\n      if (!Ember.isEmpty(record)) {\n        const location = this.get('location');\n        const addressRecord = (0, _unwrapProxy.unwrapProxy)(record.get('address'));\n        location.setProperties({\n          name: record.get('address.alias'),\n          notes: record.get('address.notes'),\n          placeTypeCategory: record.get('placeCategoryType.id'),\n          'place.address': this.createNewPlaceAddress(addressRecord),\n          'place.location': (0, _unwrapProxy.unwrapProxy)(record.get('location'))\n        });\n        this.set('disableForm', true);\n        this.set('placeChanges', false);\n        this.defaultSettings();\n      } else {\n        // no selected rows should have edit, delete and save disabled\n        let disableBtns;\n\n        if (this.isNewPlace) {\n          disableBtns = {\n            new: true,\n            edit: true,\n            delete: this.setDeleteButtonVisibility(true)\n          };\n        } else {\n          disableBtns = {\n            new: false,\n            edit: true,\n            delete: this.setDeleteButtonVisibility(true)\n          };\n        }\n\n        this.set('disableBtns', disableBtns);\n        this.set('placeChanges', false);\n      }\n\n      if (this.get('addressPublicApi')) {\n        this.get('addressPublicApi').onValueChange(this.get('location.place'));\n      }\n\n      this.hasChanges(false);\n    },\n\n    defaultSettings() {\n      const disableBtns = {\n        new: false,\n        edit: false,\n        delete: this.setDeleteButtonVisibility(false)\n      };\n      this.set('disableBtns', disableBtns);\n      this.set('inValidName', false);\n      this.set('inValidZone', false);\n      this.set('inValidCategory', false);\n      this.set('inValidAddress', false);\n    },\n\n    resetErrors() {\n      this.set('inValidName', false);\n      this.set('inValidZone', false);\n      this.set('inValidCategory', false);\n      this.set('inValidAddress', false);\n    },\n\n    createNewPlaceAddress(addressRecord) {\n      const store = this.get('store');\n      const zoneNameRecord = (0, _unwrapProxy.unwrapProxy)(addressRecord.get('zoneName'));\n      const addressAttr = addressRecord.toJSON();\n      const clonedAddress = store.createRecord('address', addressAttr);\n      clonedAddress.set('zoneName', zoneNameRecord);\n      return clonedAddress;\n    },\n\n    copyRecordDataToPlace(newAddress, selectedRowAddress, zoneName) {\n      const addressAttr = newAddress.toJSON(); // eslint-disable-next-line guard-for-in\n\n      for (const addressAttrKey in addressAttr) {\n        selectedRowAddress.set(addressAttrKey, addressAttr[addressAttrKey]);\n      }\n\n      selectedRowAddress.set('zoneName', zoneName);\n    },\n\n    setupPlaceTypeCategoryList() {\n      const placeTypeCategory = this.get('store').peekAll('place-category-type');\n      const list = [];\n      placeTypeCategory.forEach(item => {\n        if (item.name.toLowerCase() !== 'passenger') {\n          list.push(item.name);\n        }\n      });\n      this.set('placeTypeCategory', list);\n    },\n\n    async checkDuplicateAddressName() {\n      const {\n        name\n      } = this.get('location');\n      const aliasName = name.trim();\n\n      if (!this.get('isNewPlace') && this.get('prevPlaceName')) {\n        if (this.get('prevPlaceName').toLowerCase() === aliasName.toLowerCase()) return false;\n      }\n\n      const placeRecords = this.get('store').peekAll('place').toArray();\n      const filterRecords = placeRecords.filter(place => {\n        const addressAliasName = place.get('address.alias') && place.get('address.alias').toLowerCase();\n        const newAliasName = aliasName.toLowerCase();\n        return addressAliasName === newAliasName && place.get('placeCategoryType.name') && place.get('placeCategoryType.name').toLowerCase() !== 'passenger';\n      });\n      return filterRecords.length;\n    },\n\n    validateRecordTask: (0, _emberConcurrency.task)(function* () {\n      return yield this.validateName();\n    }).drop(),\n\n    async validateName() {\n      const name = this.get('location.name');\n      const address = this.get('location.place.address');\n      const zoneName = (0, _unwrapProxy.unwrapProxy)(address.get('zoneName'));\n      const category = this.get('location.placeTypeCategory');\n      const addressLat = this.get('location.place.location.lat');\n      const addressLng = this.get('location.place.location.lng');\n      const fullAddress = this.get('location.place.address.fullAddress');\n      const errors = [];\n      let hasDuplicateNames;\n      this.set('inValidName', false);\n      this.set('inValidZone', false);\n      this.set('inValidCategory', false);\n      this.set('inValidAddress', false);\n\n      if (!Ember.isEmpty(name)) {\n        hasDuplicateNames = await this.checkDuplicateAddressName(name);\n      }\n\n      if (Ember.isEmpty(name)) {\n        errors.pushObject({\n          validation: 'Name cannot be empty.'\n        });\n        this.set('inValidName', true);\n      } else if (hasDuplicateNames >= 1) {\n        errors.pushObject({\n          validation: 'Unable to save. Name already exists.'\n        });\n        this.set('inValidName', true);\n      }\n\n      if (!Ember.isEmpty(addressLat) && !Ember.isEmpty(addressLng) && !Ember.isEmpty(fullAddress)) {\n        if (Ember.isEmpty(zoneName)) {\n          errors.pushObject({\n            validation: 'System could not assign a zone to the address.'\n          });\n          this.set('inValidAddress', true);\n        }\n      }\n\n      if (Ember.isEmpty(category)) {\n        errors.pushObject({\n          validation: 'Category cannot be empty.'\n        });\n        this.set('inValidCategory', true);\n      }\n\n      if (Ember.isEmpty(addressLat) && Ember.isEmpty(addressLng) && Ember.isEmpty(fullAddress)) {\n        errors.pushObject({\n          validation: 'Address cannot be empty.'\n        });\n        this.set('inValidAddress', true);\n      }\n\n      if (!errors.length) return true;\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'System Configuration',\n        hasoverlay: true,\n        errors,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n      return false;\n    },\n\n    //if the selected address is already in the address-model we have to patch the address,because backend does'nt allow to post the same address\n    getAddressRecord(address, name) {\n      const addressRecords = this.get('store').peekAll('address').toArray();\n      const filterRecords = addressRecords.filter(adds => {\n        return adds.get('address.address.freeformAddress') === address.get('address.address.freeformAddress') && adds.get('address.alias') && adds.get('address.alias').toLowerCase() === name.toLowerCase() && adds.get('id');\n      });\n      return filterRecords.length ? filterRecords.get('firstObject') : address;\n    },\n\n    //if the selected location is already in the location-model we have to patch the location,because backend does'nt allow to post the same location\n    getLocationRecord(location) {\n      const locationRecords = this.get('store').peekAll('location').toArray();\n      const filterRecords = locationRecords.filter(ltn => {\n        return ltn.get('latlng') === location.get('latlng') && ltn.get('id');\n      });\n      return filterRecords.length ? filterRecords.get('firstObject') : location;\n    },\n\n    save: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const {\n        name,\n        placeTypeCategory,\n        notes\n      } = this.get('location');\n      const address = this.getAddressRecord(this.get('location.place.address'), name);\n      const zoneName = (0, _unwrapProxy.unwrapProxy)(address.get('zoneName'));\n      const location = this.getLocationRecord(this.get('location.place.location'));\n      address.set('alias', name);\n      address.set('notes', notes);\n\n      if (this.get('isNewPlace')) {\n        this.set('tableRef.config.selectFirstRow', false);\n        const place = Ember.Object.create({\n          geocodingMethod: 'something'\n        });\n        const locationResponse = location.get('id') ? yield locationAdapter.patchLocation(location) : yield locationAdapter.postLocation(location);\n        const addressResponse = address.get('id') ? yield addressAdapter.patchAddress(address) : yield addressAdapter.postAddress(address);\n        const addressId = addressResponse ? addressResponse.data.id : address.get('id');\n        const locationId = locationResponse ? locationResponse.data.id : location.get('id');\n        const locationAndAddressId = {\n          'locationId': locationId,\n          'addressId': addressId\n        };\n\n        if (locationResponse && addressResponse) {\n          yield addressAdapter.postAddressLocation(locationResponse, addressResponse);\n        } //patched records does'nt give the response back,so we have to pass the id's as argument,to post the address and location\n\n\n        yield addressAdapter.postAddressLocation(locationResponse, addressResponse, locationAndAddressId);\n        yield placeAdapter.postPlace(place, addressId, locationId, placeTypeCategory);\n        this.set('isNewPlace', false);\n        this.set('tableRef.config.selectFirstRow', true);\n        return;\n      }\n\n      const place = this.get('selectedRow');\n      const selectedRowAddress = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      this.copyRecordDataToPlace(address, selectedRowAddress, zoneName);\n      yield locationAdapter.patchLocation(location);\n      yield addressAdapter.patchAddress(selectedRowAddress);\n      return yield placeAdapter.patchPlace(place, selectedRowAddress.get('id'), location.get('id'), placeTypeCategory);\n    }).drop(),\n    saveRecordTask: (0, _emberConcurrency.task)(function* () {\n      const notifications = this.get('notifications');\n      let isSaveSuccessful = true;\n      yield this.save.perform().then(() => {\n        notifications.success('Record successfully saved');\n\n        if (this.get('isEditMode')) {\n          const address = this.get('selectedRow.address.readableAddress');\n          this.set('selectedRow.address.placeAddress', address);\n          this.set('isEditMode', false);\n        }\n      }).catch(error => {\n        isSaveSuccessful = false; // rollback changes before refreshing table\n\n        const selectedRow = this.get('selectedRow');\n        this.set('placeChanges', true);\n\n        if (this.get('isEditMode') && selectedRow) {\n          const selectedRowAddress = (0, _unwrapProxy.unwrapProxy)(selectedRow.get('address'));\n          if (selectedRowAddress) selectedRowAddress.rollbackAttributes();\n          selectedRow.set('address.placeAddress', selectedRow.get('address.readableAddress'));\n        } // eslint-disable-next-line no-console\n\n\n        console.error(error);\n        notifications.warning('Record failed to save');\n      }).finally(() => {\n        const tableRef = this.get('tableRef');\n\n        if (isSaveSuccessful) {\n          if (tableRef) {\n            Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n          }\n\n          const disableBtns = {\n            new: false,\n            edit: false,\n            delete: this.setDeleteButtonVisibility(false)\n          };\n          this.set('disableBtns', disableBtns);\n          this.set('disableForm', true);\n        }\n      });\n    }).drop(),\n    delete: (0, _emberConcurrency.task)(function* () {\n      const placeRecord = this.get('selectedRow');\n      const addressRecord = this.get('location.place.address');\n      const notifications = this.get('notifications');\n\n      try {\n        yield placeRecord.destroyRecord();\n        addressRecord.destroyRecord();\n        notifications.success('Record successfully deleted.');\n      } catch (error) {\n        notifications.warning('Record failed to delete.');\n      } finally {\n        const tableRef = this.get('tableRef');\n\n        if (tableRef) {\n          Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n        }\n      }\n    }).drop(),\n\n    undoPlaces() {\n      this.resetErrors();\n\n      if (this.get('isNewPlace')) {\n        this.set('undoChanges', true);\n        this.setDefaultProperties();\n      } else {\n        const selectedRow = this.get('selectedRow');\n        const place = this.get('location.place');\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: this.setDeleteButtonVisibility(true)\n        };\n        if (address) address.rollbackAttributes();\n        if (location) location.rollbackAttributes();\n        this.setDefaultProperties(selectedRow);\n        this.set('disableForm', false);\n        this.set('disableBtns', disableBtns);\n      }\n    },\n\n    actions: {\n      newPlaces() {\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: this.setDeleteButtonVisibility(true)\n        };\n        const selectedRow = this.get('selectedRow');\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n          this.set('tableRef.config.selectFirstRow', false);\n        }\n\n        this.get('tableRef').onUncheckAll();\n        this.set('isNewPlace', true);\n        this.set('disableForm', false);\n        this.set('disableBtns', disableBtns);\n        this.set('placeChanges', false);\n      },\n\n      editPlaces() {\n        const selectedRow = this.get('selectedRow');\n        const address = selectedRow.get('address.placeAddress');\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: this.setDeleteButtonVisibility(true)\n        };\n        this.setDefaultProperties(selectedRow);\n        this.set('prevPlaceName', selectedRow.get('address.alias'));\n        this.set('location.place.address.previousReadableAddress', address);\n        this.set('isEditMode', true);\n        this.set('isNewPlace', false);\n        this.set('disableForm', false);\n        this.set('disableBtns', disableBtns);\n        this.set('placeChanges', false);\n      },\n\n      deletePlaces() {\n        if (this.get('selectedRow')) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'System Configuration',\n            hasoverlay: true,\n            tip: 'Are you sure you want to delete this place?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              this.set('placeChanges', false);\n              this.set('tableRef.config.selectFirstRow', true);\n              return this.get('delete').perform().then(() => {\n                tooltip.reset();\n              });\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n          this.resetErrors();\n        }\n      },\n\n      async savePlaces() {\n        const tooltip = this.get('tooltip');\n        const validationResult = await this.validateName();\n        if (!validationResult) return;\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          tip: 'Are you sure you want to save these changes?',\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            tooltip.reset();\n            this.set('placeChanges', false);\n            this.set('tableRef.config.selectFirstRow', true);\n            return this.saveRecordTask.perform();\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            tooltip.reset();\n          }\n\n        });\n      },\n\n      onCellValueChange(record, valuePath, value, options) {\n        this.set('placeChanges', true);\n        record.set(`${valuePath}.${options.valuePath}`, value);\n      },\n\n      onInputValueChange(record, valuePath, value) {\n        this.set('placeChanges', true);\n        return record.set(valuePath, value);\n      },\n\n      registerAddressPublicApi(publicApi) {\n        this.set('addressPublicApi', publicApi);\n      },\n\n      undoPlaces() {\n        this.undoPlaces();\n      },\n\n      onPlaceFormChanges() {\n        this.set('placeChanges', true);\n      },\n\n      onNotesChanges(value) {\n        if (!Ember.isEmpty(value)) {\n          this.set('placeChanges', true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/places/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.fields = void 0;\n  const fields = {\n    id: 'location',\n    type: 'addresses',\n    label: '',\n    valuePath: 'place',\n    modelName: 'place',\n    addressOptions: [],\n    addressType: 'originlocations',\n    extra: {\n      displayPath: 'address.address',\n      premisePath: 'address.premise',\n      streetNumberPath: 'address.streetNumber',\n      streetNamePath: 'address.streetName',\n      localityPath: 'address.locality',\n      regionPath: 'address.region',\n      subRegionPath: 'address.county',\n      postalCodePath: 'address.postalCode',\n      countryPath: 'address.country',\n      freeformAddressPath: 'address.freeformAddress',\n      tomtomFormattedAddressPath: 'address.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.streetAddress',\n      aliasPath: 'address.alias',\n      lat: 'location.lat',\n      lng: 'location.lng',\n      geoNode: 'location.geoNode'\n    }\n  };\n  _exports.fields = fields;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/places/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/places/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PASSENGER_TYPE_PLACE_CATEGORY = 'passenger';\n\n  var _default = _component.default.extend({\n    classNames: ['places-table'],\n    config: _config.default,\n    enableWarningRowChangeAlert: true,\n    paginationEnabled: true,\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      this.set('queryParams', {\n        filter: `ne(placeCategoryTypeName,${PASSENGER_TYPE_PLACE_CATEGORY})`\n      });\n      return this._super(...arguments);\n    },\n\n    /**\n     * this method override the save record method in generic table component\n     * @param record\n     * @returns {*}\n     */\n    saveRecord(record) {\n      const saveRecordTask = this.get('saveRecordTask');\n      if (saveRecordTask) return saveRecordTask.perform();\n      return record.save();\n    },\n\n    hasPendingChanges: Ember.computed('placeFormChanges', function () {\n      const placeFormChanges = this.get('placeFormChanges') || false;\n      return placeFormChanges;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/places/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'place',\n    title: 'Places',\n    tooltipTitle: 'System Configuration',\n    defaultSortId: 'address',\n    selectFirstRow: true,\n    queryModelData: true,\n    defaultSortAsc: true,\n    hideWidgetControls: true,\n    columns: [{\n      id: 'id',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'id',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'name',\n      index: 1,\n      type: 'string',\n      label: 'Name',\n      valuePath: 'address.alias',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'address',\n      index: 2,\n      type: 'text',\n      label: 'Address',\n      valuePath: 'address.placeAddress',\n      defaultWidth: 100,\n      searchable: true,\n      editable: true\n    }, {\n      id: 'zoneId',\n      index: 3,\n      type: 'text',\n      label: 'Zone Name',\n      valuePath: 'address.zoneName.displayName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'type',\n      index: 4,\n      type: 'string',\n      label: 'Type',\n      valuePath: 'placeCategoryType.id',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/places/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"x5EiVyKs\",\n    \"block\": \"{\\\"symbols\\\":[\\\"name\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"placeFormChanges\\\",\\\"disableSavebtn\\\",\\\"disableUndobtn\\\"],[\\\"Places\\\",[27,\\\"action\\\",[[22,0,[]],\\\"newPlaces\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editPlaces\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deletePlaces\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoPlaces\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"savePlaces\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"placeFormChanges\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"side-drawer/system-config/places/table\\\",null,[[\\\"placeFormChanges\\\",\\\"saveRecordTask\\\",\\\"validateRecord\\\",\\\"hasPendingChanges\\\",\\\"rollbackRecord\\\",\\\"tableRef\\\"],[[23,[\\\"placeFormChanges\\\"]],[23,[\\\"saveRecordTask\\\"]],[23,[\\\"validateRecordTask\\\"]],[23,[\\\"placeChanges\\\"]],[23,[\\\"undoPlaces\\\"]],[23,[\\\"tableRef\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"places-form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"address\\\",\\\"Address\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"address-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"inValidName\\\"]],\\\"errorField\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Enter Name\\\",\\\"text\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPlaceFormChanges\\\"],null],[23,[\\\"name\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"inValidAddress\\\"]],\\\"errorField\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Address\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"form-components/addresses\\\",null,[[\\\"class\\\",\\\"record\\\",\\\"addressRef\\\",\\\"showPinButton\\\",\\\"renderInPlace\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"valuePath\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\",\\\"registerPublicApi\\\",\\\"onChange\\\"],[\\\"limit-address-width\\\",[27,\\\"readonly\\\",[[23,[\\\"location\\\",\\\"place\\\"]]],null],[23,[\\\"addressRef\\\"]],false,false,\\\"Select Address\\\",[27,\\\"or\\\",[[23,[\\\"disableForm\\\"]],[23,[\\\"isEditMode\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"location\\\"]],[23,[\\\"locationConfig\\\",\\\"valuePath\\\"]]],null]],null],[27,\\\"get\\\",[[23,[\\\"locationConfig\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"location\\\"]],[23,[\\\"locationConfig\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"locationConfig\\\",\\\"readonlyCell\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"registerAddressPublicApi\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"location\\\"]],[23,[\\\"locationConfig\\\",\\\"valuePath\\\"]]],null]]],{\\\"statements\\\":[],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"inValidZone\\\"]],\\\"errorField\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Zone\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"zone\\\",\\\"text\\\",\\\"disabled\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlaceFormChanges\\\"],null],[23,[\\\"zone\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Geo\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"input-group-geo\\\",\\\"lng\\\",\\\"disabled\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlaceFormChanges\\\"],null],[23,[\\\"lng\\\"]]]]],false],[0,\\\"\\\\n\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"input-group-geo\\\",\\\"lat\\\",\\\"disabled\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPlaceFormChanges\\\"],null],[23,[\\\"lat\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"inValidCategory\\\"]],\\\"errorField\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Category\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[\\\"Select Type\\\",[23,[\\\"placeTypeCategory\\\"]],[23,[\\\"location\\\",\\\"placeTypeCategory\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"location\\\"]],\\\"placeTypeCategory\\\"],null],[27,\\\"or\\\",[[23,[\\\"disableForm\\\"]],[23,[\\\"isEditMode\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"notes\\\",\\\"Notes\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notes-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-notes\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-area\\\",null,[[\\\"value\\\",\\\"placeholder\\\",\\\"onChange\\\",\\\"showHint\\\",\\\"disabled\\\",\\\"maxLength\\\"],[[23,[\\\"location\\\",\\\"notes\\\"]],\\\"\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInputValueChange\\\",[23,[\\\"location\\\"]],\\\"notes\\\"],null],false,[23,[\\\"disableForm\\\"]],\\\"4096\\\"]]],false],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/places/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/providers/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"lodash\", \"adept-iq/config/api-urls\", \"adept-iq/utils/regex-functions\"], function (_exports, _emberConcurrency, _moment, _lodash, _apiUrls, _regexFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const NUMBER_FORMAT = /^[\\d]*$/;\n  const REMOVE_TEXT_FORMAT = /[^0-9.]+/;\n  const SPECIAL_CHARACTER_FORMAT = /[^a-zA-Z0-9]/g;\n  const daysOfService = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Holidays', null];\n  const costLimit = {\n    min: -1,\n    isFloat: true,\n    digitPrecision: 2\n  };\n  const BROKER_PROVIDER_TYPE = 'broker';\n  const MAX_BROKER_PROVIDER = 10;\n  const ACTIVE_STATUS = 'active';\n  const PROVIDER_ASSOCIATIONS = [{\n    model: 'subscription',\n    providerName: 'providerName'\n  }, {\n    model: 'driver',\n    providerName: 'providerName'\n  }, {\n    model: 'vehicle',\n    providerName: 'providerName'\n  }, {\n    model: 'trip',\n    providerName: 'currentProviderName'\n  }, {\n    model: 'route',\n    providerName: 'providerName'\n  }];\n\n  var _default = Ember.Component.extend({\n    classNames: ['providers'],\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    daysOfService,\n    dayOfWeeks: null,\n    value: null,\n    selected: null,\n    status: null,\n    disableBtns: null,\n    minTripCountDate: null,\n    maxTripCountDate: null,\n    tripCountWeekDays: null,\n    zipCodes: null,\n    zipCodesSelected: null,\n    zoneNames: null,\n    zones: null,\n    selectedZone: null,\n    selectedCostZoneOne: null,\n    selectedCostZoneTwo: null,\n    newZoneName: null,\n    firstZoneName: null,\n    secondZoneName: null,\n    zoneCost: null,\n    cost: null,\n    providersList: null,\n    isNewProvider: false,\n    disableForm: true,\n    providerChanges: false,\n    inValidEmail: false,\n    inValidId: false,\n    disableTripCount: true,\n    addZoneName: false,\n    addCostName: false,\n    inValidZone: false,\n    inValidCostZone: false,\n    isNewZoneCost: true,\n    isNewBroker: false,\n    mandatoryError: false,\n    isZipCodeAvailabel: true,\n    duplicateIDError: false,\n    duplicateNameError: false,\n    inValidZoneError: false,\n    disableBrokerForm: true,\n    disableZoneRemoveAction: true,\n    disableZoneSaveAction: true,\n    disableCostRemoveAction: true,\n    disableCostSaveAction: true,\n    disableCostForm: true,\n    configType: null,\n    costLimit,\n    isDeleteProvider: false,\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    disableUndobtn: Ember.computed('disableForm', 'providerFormChanges', function () {\n      const disableForm = this.get('disableForm');\n      const providerFormChanges = this.get('providerFormChanges');\n      const returnValue = !(!disableForm && providerFormChanges);\n      this.hasChanges(!returnValue);\n      return returnValue;\n    }),\n    showBrokerPanel: Ember.computed('provider.providerTypeName', function () {\n      const type = this.get('provider.providerTypeName');\n      return type === 'broker';\n    }),\n    providerFormChanges: Ember.computed('providerChanges', 'provider.{id,name,status,providerTypeName,contactName,contactPhone,contactEmail}', function () {\n      const providerChanges = this.get('providerChanges');\n\n      if (providerChanges) {\n        return true;\n      }\n\n      return false;\n    }),\n    disableSavebtn: Ember.computed('disableForm', 'provider.{id,name,status,providerTypeName,contactName,contactPhone,contactEmail}', function () {\n      const disableForm = this.get('disableForm');\n\n      if (disableForm) {\n        return true;\n      }\n\n      const hasValues = Object.values(this.get('provider')).some(input => !Ember.isEmpty(input));\n      return !hasValues;\n    }),\n    disableSelectedZone: Ember.computed('disableForm', 'addZoneName', function () {\n      const disableForm = this.get('disableForm');\n      const addZoneName = this.get('addZoneName');\n      if (addZoneName) return true;\n      return disableForm;\n    }),\n    // @TODO: transform into computed property similar to route master\n    selectedRowChange: Ember.observer('selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      this.clearPerviousRecordPropertites();\n      this.setDefaultProperties(selectedRow);\n      this.buttonSettings();\n\n      if (!selectedRow) {\n        this.buttonSettings(false, true, true);\n      }\n    }),\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.set('status', ['Active', 'Inactive']);\n      this.setupProviderList();\n      this.setDefaultProperties();\n      this.setupZipCodes();\n      this.buttonSettings();\n      const today = new Date().toDateString();\n      const minDate = (0, _moment.default)(today).add(0, 'days').toDate();\n      const maxDate = (0, _moment.default)(today).add(2, 'days').toDate(); // The following line added to initialize the service reference\n\n      this.get('providerChanges');\n      this.set('maxTripCountDate', maxDate);\n      this.set('minTripCountDate', minDate);\n      this.undoProvider = this.undoProvider.bind(this);\n      this.saveProvider = this.saveProvider.bind(this);\n      this.hasChanges = this.get('hasChanges').bind(this);\n      this.maxBrokerProviderWarning = this.maxBrokerProviderWarning.bind(this);\n      this.checkMaxBrokerProviderRecords = this.checkMaxBrokerProviderRecords.bind(this);\n    },\n\n    willDestroyElement() {\n      const providerChanges = this.get('providerChanges');\n\n      if (providerChanges) {\n        this.undoProvider();\n      }\n\n      this._super(...arguments);\n    },\n\n    clearPerviousRecordPropertites() {\n      this.setProperties({\n        zipCodesSelected: null,\n        selectedZone: null,\n        modifiedZoneName: null,\n        selectedCostZoneOne: null,\n        selectedCostZoneTwo: null,\n        cost: null,\n        originalTripCount: null,\n        originalServiceZones: null,\n        originalCosts: null\n      });\n    },\n\n    /**\n     * for returning tripCountValues\n     * @param {Array} tripCountWeekDays\n     * @returns {*Array}  tripCountWeekDays\n     */\n    tripCountWeekDaysValues(tripCountWeekDays) {\n      this.get('daysOfService').forEach(day => {\n        const item = Ember.Object.create({\n          day,\n          values: {\n            targetCount: 0,\n            underage: 0,\n            overage: 0\n          }\n        });\n        tripCountWeekDays.push(item);\n      });\n      return tripCountWeekDays;\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      const fields = {\n        id: '',\n        name: '',\n        displayName: '',\n        status: '',\n        providerTypeName: '',\n        contactName: '',\n        contactPhone: '',\n        contactEmail: '',\n        costs: [],\n        serviceZones: []\n      };\n      const tripCountWeekDays = [];\n\n      if (Ember.isPresent(record)) {\n        Object.entries(fields).forEach(key => {\n          fields[key[0]] = record.get(key[0]);\n        });\n\n        if (record.get('providerTypeName') === 'broker') {\n          if (Ember.isPresent(this.get('originalTripCount'))) {\n            record.set('tripCount', (0, _lodash.cloneDeep)(this.get('originalTripCount')));\n          }\n\n          if (Ember.isPresent(this.get('originalServiceZones'))) {\n            record.set('serviceZones', (0, _lodash.cloneDeep)(this.get('originalServiceZones')));\n          }\n\n          if (Ember.isPresent(this.get('originalCosts'))) {\n            record.set('costs', (0, _lodash.cloneDeep)(this.get('originalCosts')));\n          }\n\n          const tripCountWeekDaysValues = this.tripCountWeekDaysValues(tripCountWeekDays);\n          const tripCount = record.get('tripCount') || tripCountWeekDaysValues;\n          const serviceZones = record.get('serviceZones') || [];\n          const zipCodes = serviceZones.length ? serviceZones.firstObject.zipCodes : [];\n          const costs = record.get('costs') || [];\n          this.set('zipCodesSelected', zipCodes);\n          this.set('tripCountWeekDays', tripCount);\n          this.set('zones', serviceZones);\n          this.set('zoneCost', costs);\n\n          if (Ember.isPresent(serviceZones)) {\n            this.set('selectedZone', serviceZones.firstObject);\n            this.set('modifiedZoneName', serviceZones.firstObject.name);\n          }\n\n          if (Ember.isPresent(costs)) {\n            const firstServiceZone = serviceZones.firstObject;\n\n            if (Ember.isPresent(firstServiceZone)) {\n              const isZonesPresent = this.get('zones').some(zone => {\n                return Ember.isPresent(costs.find(cost => cost.group.includes(zone.name)));\n              });\n\n              if (isZonesPresent) {\n                const firstGroupCost = costs.firstObject;\n                const zones = Ember.isPresent(firstGroupCost) ? firstGroupCost.group.split('-') : null;\n\n                if (zones) {\n                  const zoneOne = serviceZones.filter(zone => zone.name === parseInt(zones.firstObject, 10));\n                  const zoneTwo = serviceZones.filter(zone => zone.name === parseInt(zones.lastObject, 10));\n\n                  if (zoneOne.firstObject || zoneTwo.firstObject) {\n                    this.set('selectedCostZoneOne', zoneOne.firstObject);\n                    this.set('selectedCostZoneTwo', zoneTwo.firstObject);\n                    this.set('cost', firstGroupCost.cost);\n                  }\n                }\n              }\n            }\n          }\n        }\n\n        this.set('disableForm', true);\n        this.set('providerChanges', false);\n        this.hasChanges(false);\n      } else {\n        const tripCountWeekDaysValues = this.tripCountWeekDaysValues(tripCountWeekDays);\n        this.set('tripCountWeekDays', tripCountWeekDaysValues);\n        this.set('zones', null);\n        this.set('zoneCost', null);\n        this.set('selectedCostZoneOne', '');\n        this.set('selectedCostZoneTwo', '');\n        this.set('cost', '');\n        this.set('providerChanges', false);\n        this.set('configType', null);\n      }\n\n      this.setProperties({\n        'provider': Ember.Object.create(fields),\n        'inValidEmail': false,\n        'inValidId': false,\n        'mandatoryError': false,\n        'duplicateID': false,\n        'duplicateName': false,\n        'disableTripCount': true,\n        'newZoneName': '',\n        'addZoneName': false,\n        'addCostName': true,\n        'disableZoneAdd': true,\n        'disableCostForm': true,\n        'disableZoneRemoveAction': true,\n        'disableCostRemoveAction': true,\n        'disableBrokerForm': true,\n        'disableZoneSaveAction': true,\n        'duplicateIDError': false,\n        'duplicateNameError': false\n      });\n      this.set('systemConfig.hasChanges', false);\n    },\n\n    setupZipCodes() {\n      const store = this.get('store');\n      const configZipCodeList = store.peekAll('zip-code');\n      const zipcodes = configZipCodeList.map(zipCode => zipCode.name) || [];\n      this.set('zipCodes', zipcodes.sort());\n    },\n\n    buttonSettings() {\n      let newbtn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      let editbtn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let deletebtn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      const disableBtns = {\n        new: newbtn,\n        edit: editbtn,\n        delete: deletebtn\n      };\n      this.set('disableBtns', disableBtns);\n    },\n\n    validateEmail() {\n      const email = this.get('provider.contactEmail');\n      const error = 'Invalid Email';\n      if (Ember.isEmpty(email)) return false;\n\n      const isValid = _regexFunctions.REGEX_EMAIL.test(email);\n\n      if (isValid) {\n        this.set('inValidEmail', false);\n        return false;\n      }\n\n      this.set('inValidEmail', true);\n      return error;\n    },\n\n    validateId() {\n      const id = this.get('provider.id');\n      const error = 'Provider ID must be letters only.';\n      if (Ember.isEmpty(id)) return false;\n\n      const isValid = _regexFunctions.REGEX_ONLY_TEXT_FORMAT.test(id);\n\n      if (isValid) {\n        this.set('inValidId', false);\n        return false;\n      }\n\n      this.set('inValidId', true);\n      return error;\n    },\n\n    duplicateCheck() {\n      const store = this.get('store');\n      const providers = store.peekAll('provider');\n      const id = this.get('provider.id').toLowerCase();\n      const name = this.get('provider.name').toLowerCase();\n      const isNewProvider = this.get('isNewProvider');\n      let duplicateIds = [];\n      let duplicateNames = [];\n\n      if (isNewProvider) {\n        duplicateIds = providers.filter(record => Ember.isPresent(record.get('id')) && record.get('id').toLowerCase() === id);\n        duplicateNames = providers.filter(record => {\n          const providerName = record.get('name') || '';\n          return providerName.toLowerCase() === name;\n        });\n      } else {\n        duplicateNames = providers.filter(record => {\n          const providerName = record.get('name') || '';\n          return record.get('id').toLowerCase() !== id && providerName.toLowerCase() === name;\n        });\n      }\n\n      this.set('duplicateID', duplicateIds.length);\n      this.set('duplicateName', duplicateNames.length);\n\n      if (Ember.isEmpty(duplicateIds) && Ember.isEmpty(duplicateNames)) {\n        return false;\n      }\n\n      const tip = [];\n\n      if (!Ember.isEmpty(duplicateNames) && !Ember.isEmpty(name)) {\n        tip.push('Provider Name cannot duplicate an existing provider Name');\n      }\n\n      if (!Ember.isEmpty(duplicateIds)) {\n        tip.push('Provider ID cannot duplicate an existing provider ID');\n      }\n\n      return tip;\n    },\n\n    getZoneName() {\n      const addZoneName = this.get('addZoneName');\n      let newZoneName = '';\n\n      if (addZoneName) {\n        newZoneName = this.get('newZoneName');\n      } else {\n        newZoneName = this.get('selectedZone.name') !== this.get('modifiedZoneName') ? this.get('modifiedZoneName') : '';\n      }\n\n      return newZoneName;\n    },\n\n    validateServiceZone() {\n      const newZoneName = this.getZoneName();\n      let zones = this.get('zones') || [];\n\n      if (this.get('addZoneName')) {\n        zones = zones.slice(0, -1);\n      }\n\n      const availableZone = zones.filter(zone => zone.name.toString() === newZoneName.toString()) || [];\n      if (Ember.isEmpty(availableZone)) return true;\n      const existingZipCodes = availableZone.firstObject.zipCodes || [];\n\n      if (!existingZipCodes.length) {\n        return true;\n      }\n\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'Providers-Broker Zone',\n        hasoverlay: true,\n        tip: `${newZoneName} already exist`,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          this.set('inValidZone', true);\n          tooltip.reset();\n        }\n      });\n      this.set('zones', zones);\n      return false;\n    },\n\n    mandatoryValidation() {\n      const displayName = this.get('provider.displayName');\n      const contactPhone = this.get('provider.contactPhone');\n      const errors = [];\n      const providerTypeName = this.get('provider.providerTypeName');\n      const providerStatus = this.get('provider.status');\n      const contactName = this.get('provider.contactName');\n      const providerId = this.get('provider.id');\n      this.set('inValidZoneError', false);\n      if (Ember.isEmpty(displayName.trim())) errors.pushObject({\n        validation: 'Provider Name is required'\n      });\n      if (Ember.isEmpty(providerTypeName)) errors.pushObject({\n        validation: 'Provider Type is required'\n      });\n      if (Ember.isEmpty(providerStatus)) errors.pushObject({\n        validation: 'Provider Status is required'\n      });\n      if (Ember.isEmpty(contactPhone)) errors.pushObject({\n        validation: 'Contact Phone Number is required'\n      });\n      if (Ember.isEmpty(contactName)) errors.pushObject({\n        validation: 'Contact Name is required'\n      });\n      if (Ember.isEmpty(providerId)) errors.pushObject({\n        validation: 'Provider ID is required'\n      });\n      const isInValidProviderId = this.validateId();\n      if (isInValidProviderId) errors.pushObject({\n        validation: isInValidProviderId\n      });\n\n      if (displayName || this.get('provider.id')) {\n        const isDuplicate = this.duplicateCheck();\n\n        if (isDuplicate) {\n          isDuplicate.forEach(tip => {\n            errors.pushObject({\n              validation: tip\n            });\n          });\n        }\n      }\n\n      const isInValidEmail = this.validateEmail();\n      if (isInValidEmail) errors.pushObject({\n        validation: isInValidEmail\n      });\n      const isValidProvider = this.validateProviderType();\n\n      if (isValidProvider) {\n        if (providerTypeName === 'broker') {\n          const zones = this.setupPayloadForZone() || [];\n\n          if (Ember.isEmpty(zones)) {\n            errors.pushObject({\n              validation: 'User must enter at least one zone in order to save.'\n            });\n            this.set('inValidZoneError', true);\n          }\n        }\n      } else {\n        return false;\n      }\n\n      if (!errors.length) return true;\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'System Configuration',\n        hasoverlay: true,\n        errors,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          this.set('mandatoryError', true);\n          this.set('duplicateIDError', this.get('duplicateID') || this.get('inValidId'));\n          this.set('duplicateNameError', this.get('duplicateName'));\n          this.set('inValidZone', this.get('inValidZoneError'));\n          tooltip.reset();\n        }\n      });\n      return false;\n    },\n\n    validateRecordTask: (0, _emberConcurrency.task)(function* () {\n      return yield this.validateProvider();\n    }).drop(),\n\n    validateZone() {\n      const newZoneName = this.get('newZoneName');\n      const addZoneName = this.get('addZoneName');\n      const zones = this.get('zones') || [];\n      const modifiedZoneName = this.get('modifiedZoneName');\n      const errors = [];\n      let isValid = Ember.isEmpty(zones.filter(zone => Ember.isEmpty(zone.zipCodes)));\n\n      if (Ember.isEmpty(newZoneName) && this.get('addZoneName')) {\n        errors.pushObject({\n          validation: 'Zone cannot be empty'\n        });\n        isValid = !Ember.isEmpty(newZoneName);\n      }\n\n      if (Ember.isEmpty(modifiedZoneName) && !this.get('addZoneName')) {\n        errors.pushObject({\n          validation: 'Zone cannot be empty'\n        });\n        isValid = !Ember.isEmpty(modifiedZoneName);\n      }\n\n      if (!Ember.isEmpty(newZoneName) || !Ember.isEmpty(modifiedZoneName)) {\n        const zone = zones.find(z => Ember.isEmpty(z.zipCodes));\n        const selectedZipcodes = this.get('zipCodesSelected') || [];\n        let zoneName = zone ? zone.name : '';\n\n        if (addZoneName && Ember.isEmpty(selectedZipcodes)) {\n          zoneName = newZoneName ? newZoneName : modifiedZoneName;\n        }\n\n        if (Ember.isPresent(zoneName)) {\n          isValid = false;\n          errors.pushObject({\n            validation: `Zone ${zoneName} zipcode cannot be empty`\n          });\n        }\n      }\n\n      if (isValid) {\n        const serviceZones = this.setupPayloadForZone();\n\n        if (Ember.isEmpty(serviceZones)) {\n          errors.pushObject({\n            validation: 'User must enter at least one zone in order to save.'\n          });\n          this.set('inValidZoneError', true);\n        }\n      }\n\n      if (!errors.length) return true;\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: 'System Configuration',\n        hasoverlay: true,\n        errors,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          this.set('mandatoryError', true);\n          this.set('duplicateIDError', this.get('duplicateID') || this.get('inValidId'));\n          this.set('duplicateNameError', this.get('duplicateName'));\n          this.set('inValidZone', this.get('inValidZoneError'));\n          tooltip.reset();\n        }\n      });\n      return false;\n    },\n\n    fetchZoneCost() {\n      const zoneCost = this.get('zoneCost');\n      const zone1 = this.get('selectedCostZoneOne') || '';\n      const zone2 = this.get('selectedCostZoneTwo') || '';\n      this.set('cost', null);\n      this.set('isNewZoneCost', true);\n      if (Ember.isEmpty(zone1) || Ember.isEmpty(zone2)) return;\n      const zoneCombination1 = `${zone1.name}-${zone2.name}`;\n      const zoneCombination2 = `${zone2.name}-${zone1.name}`;\n      const selectedCost = zoneCost.filter(item => item.group === zoneCombination1 || item.group === zoneCombination2);\n\n      if (!Ember.isEmpty(selectedCost)) {\n        const value = selectedCost.firstObject.cost;\n        this.set('cost', value);\n        this.set('isNewZoneCost', false);\n      }\n    },\n\n    setupProviderList() {\n      const providerTypes = this.get('store').peekAll('provider-type');\n      const list = [];\n      providerTypes.forEach(item => {\n        // AIQ-2087 - ADEPT IQ currently does not support the scheduing of 'broker' trips\n        // This should be re-visited in the future when 'broker' trips are supported\n        if (item.id !== BROKER_PROVIDER_TYPE) {\n          list.push(item.id);\n        }\n      });\n      this.set('providersList', list);\n    },\n\n    setupPayloadForZone() {\n      const zones = this.get('zones') || [];\n      const selectedZone = this.get('selectedZone.name') || '';\n      const name = this.get('newZoneName');\n      const modifiedZoneName = this.get('modifiedZoneName');\n      const zipCodes = this.get('zipCodesSelected') || [];\n      const newZone = {\n        name,\n        zipCodes\n      };\n\n      if (!Ember.isEmpty(selectedZone) && this.validateServiceZone()) {\n        const newZones = [];\n        zones.forEach(zone => {\n          if (zone.name.toString() === selectedZone.toString()) {\n            newZones.push({\n              name: modifiedZoneName,\n              zipCodes\n            });\n          } else {\n            newZones.push(zone);\n          }\n        });\n        return newZones;\n      } else if (!Ember.isEmpty(name) && !this.isExistingZone(zones, newZone) && !Ember.isEmpty(zipCodes)) {\n        zones.push(newZone);\n      }\n\n      return zones;\n    },\n\n    isExistingZone(zones, newZone) {\n      return zones.some(zone => JSON.stringify(zone) === JSON.stringify(newZone));\n    },\n\n    setupPayloadForCost() {\n      const zoneCost = this.get('zoneCost');\n      const zone1 = this.get('selectedCostZoneOne') || '';\n      const zone2 = this.get('selectedCostZoneTwo') || '';\n      const cost = this.get('cost');\n      if (Ember.isEmpty(zone1) || Ember.isEmpty(zone2) || Ember.isEmpty(cost)) return zoneCost;\n      const group = `${zone1.name}-${zone2.name}`;\n      const group1 = `${zone2.name}-${zone1.name}`;\n      let costUpdated = false;\n      zoneCost.forEach(item => {\n        if (item.group === group || item.group === group1) {\n          item.cost = parseFloat(cost);\n          costUpdated = true;\n          return;\n        }\n      });\n\n      if (!costUpdated) {\n        zoneCost.push({\n          group,\n          cost\n        });\n      }\n\n      return zoneCost;\n    },\n\n    save: (0, _emberConcurrency.task)(function* () {\n      const record = this.buildProviderData();\n      const notifications = this.get('notifications');\n      let isSaveSuccessful = true;\n\n      try {\n        this.set('providerChanges', false);\n        return yield record.save();\n      } catch (error) {\n        isSaveSuccessful = false;\n        this.set('providerChanges', true); // eslint-disable-next-line no-console\n\n        console.error(error);\n        notifications.warning('Record failed to save');\n      } finally {\n        if (isSaveSuccessful) {\n          yield this.updateSsoProviderData();\n          const tableRef = this.get('tableRef');\n          const selectedRow = this.get('selectedRow');\n\n          if (tableRef) {\n            Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n\n            if (!selectedRow) {\n              tableRef.set('config.selectFirstRow', true);\n              tableRef.get('firstRowSelectedTask').perform();\n            }\n\n            this.buttonSettings();\n            this.setProperties({\n              'disableForm': true,\n              'disableCostForm': true,\n              'disableBrokerForm': true,\n              'addZoneName': true,\n              'addCostName': true,\n              'disableZoneAdd': true,\n              'disableZoneRemoveAction': true,\n              'disableCostRemoveAction': true,\n              'disableZoneSaveAction': true,\n              'inValidZone': false\n            });\n          }\n\n          this.resetPreviousRecordProperities(record.get('value'));\n        } else {\n          throw new Error('Record failed to save'); // eslint-disable-line\n        }\n      }\n    }).drop(),\n\n    buildProviderData() {\n      let record = null;\n      const store = this.get('store');\n      const value = this.get('provider');\n      const displayName = value.get('displayName');\n      const name = value.get('id');\n      const providerType = this.get('provider.providerTypeName');\n      const isNewProvider = this.get('isNewProvider');\n      value.set('name', name);\n\n      if (providerType === BROKER_PROVIDER_TYPE) {\n        value.tripCount = this.get('tripCountWeekDays');\n        value.costs = this.setupPayloadForCost();\n        value.serviceZones = this.setupPayloadForZone();\n      } else {\n        //provider type is dedicated carrier set empty values to this fields\n        value.tripCount = [];\n        value.costs = [];\n        value.serviceZones = [];\n      }\n\n      if (isNewProvider) {\n        const data = {\n          category: 'config-System_Configuration-providers',\n          type: 'object',\n          displayName,\n          name,\n          value\n        };\n        record = store.createRecord('cs-config-item', data);\n      } else {\n        const id = `config-System_Configuration-providers/${name}`;\n        record = store.peekRecord('cs-config-item', id);\n        record.set('value', value);\n        record.set('displayName', displayName);\n      }\n\n      return record;\n    },\n\n    async updateSsoProviderData() {\n      const value = this.get('provider');\n      const providerId = value.get('id');\n      const adaptor = 'perm-sso-user';\n      const token = this.get('session.data.authenticated.token');\n      const permUserAdapter = this.get('store').adapterFor(adaptor);\n      const payload = {\n        'providerName': providerId\n      };\n      let providerExists = false; //check if the current provider name is already exists in SSO service\n\n      const providersList = await permUserAdapter.getSSOProvider(); //if there is a new record this part will run\n      //finding the id of new provider in sso db\n\n      providerExists = providersList.find(item => item.provider === providerId); //if the new provider name exists in sso db it return true\n\n      if (providerExists) return true; //else it would request to insert it\n\n      return this.get('ajax').post(_apiUrls.API.ssoService.host + '/provider', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${token}`\n        },\n        data: payload\n      }).catch(() => {\n        return false;\n      });\n    },\n\n    delete: (0, _emberConcurrency.task)(function* () {\n      const record = this.get('selectedRow');\n      const notifications = this.get('notifications');\n      const tableRef = this.get('tableRef');\n      const store = this.get('store');\n      const value = this.get('provider');\n      const name = value.get('id');\n      const checkedRow = tableRef.get('checkedRows.firstObject');\n      const checkedRowRecord = store.peekRecord(checkedRow.constructor.modelName, checkedRow.get('id'));\n      const id = `config-System_Configuration-providers/${name}`;\n      const configRecord = store.peekRecord('cs-config-item', id);\n\n      try {\n        if (checkedRow.isDeleted) {\n          yield configRecord.destroyRecord();\n          yield checkedRowRecord.unloadRecord();\n        } else {\n          yield record.destroyRecord();\n          yield configRecord.unloadRecord();\n        }\n\n        yield this.deleteSsoProviderData(); //removes the provider models record from ember store\n\n        store._removeFromIdMap(record._internalModel);\n\n        store._removeFromIdMap(configRecord._internalModel); // NYAAR-18959 delete table cache by ID when delete the record\n\n\n        this.removeIdFromTableCache(name);\n      } catch (error) {\n        console.error(error); // eslint-disable-line\n\n        notifications.warning('Record failed to delete.');\n      } finally {\n        if (tableRef) {\n          Ember.run.scheduleOnce('afterRender', tableRef, 'onUncheckAll');\n          Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n\n          notifications.success('Record successfully deleted.');\n          tableRef.set('config.selectFirstRow', true);\n          tableRef.get('firstRowSelectedTask').perform();\n        }\n      }\n    }).drop(),\n\n    async deleteSsoProviderData() {\n      const value = this.get('provider');\n      const providerId = value.get('id');\n      const adaptor = 'perm-sso-user';\n      const token = this.get('session.data.authenticated.token');\n      const permUserAdapter = this.get('store').adapterFor(adaptor); //check if the current provider name is already exists in SSO service\n\n      const providersList = await permUserAdapter.getSSOProvider();\n      const providerExists = providersList.find(item => item.provider === providerId);\n      if (!providerExists) return true;\n      return this.get('ajax').delete(_apiUrls.API.ssoService.host + '/provider/' + providerExists.id, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${token}`\n        }\n      }).catch(() => {\n        return true;\n      });\n    },\n\n    deleteServiceZone: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const selectedRow = this.get('selectedRow');\n      const selectedZone = this.get('selectedZone');\n      const value = this.get('provider');\n\n      if (selectedRow && selectedRow.get('id')) {\n        const id = `config-System_Configuration-providers/${selectedRow.get('id')}`;\n        const record = store.peekRecord('cs-config-item', id);\n        const serviceZones = record.get('value.serviceZones');\n        value.tripCount = selectedRow.get('tripCount');\n        value.serviceZones = serviceZones.filter(zone => zone.name !== selectedZone.name);\n        const zoneCost = selectedRow.get('costs');\n        value.costs = zoneCost.filter(item => !item.group.includes(selectedZone.name));\n        record.set('value', value);\n        return yield record.save();\n      }\n\n      this.set('zones', value.serviceZones.filter(zone => zone.name !== selectedZone.name));\n      return this.buildProviderData();\n    }).drop(),\n    deleteServiceCostZone: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const selectedRow = this.get('selectedRow');\n      const value = this.get('provider');\n      const zone1 = this.get('selectedCostZoneOne') || '';\n      const zone2 = this.get('selectedCostZoneTwo') || '';\n      let zoneCost = this.get('zoneCost');\n      const zoneCombination1 = `${zone1.name}-${zone2.name}`;\n      const zoneCombination2 = `${zone2.name}-${zone1.name}`;\n\n      if (selectedRow && selectedRow.get('id')) {\n        const id = `config-System_Configuration-providers/${selectedRow.get('id')}`;\n        const record = store.peekRecord('cs-config-item', id);\n        zoneCost = selectedRow.get('costs');\n        value.costs = zoneCost.filter(item => item.group !== zoneCombination1 && item.group !== zoneCombination2);\n        record.set('value', value);\n        return yield record.save();\n      }\n\n      this.set('zoneCost', zoneCost.filter(item => item.group !== zoneCombination1 && item.group !== zoneCombination2));\n      this.set('selectedCostZoneOne', '');\n      this.set('selectedCostZoneTwo', '');\n      this.set('cost', '');\n      return this.buildProviderData();\n    }).drop(),\n\n    async refreshProviderDOM(provider) {\n      await provider.reload();\n      const serviceZones = provider.get('value.serviceZones') || [];\n      const costs = provider.get('value.costs') || [];\n      Ember.run.next(() => {\n        // power select requires all selected items to remove to update collection options\n        this.set('zones', serviceZones); // update zone options\n\n        this.set('zoneCost', costs);\n        const firstServiceZone = serviceZones.firstObject;\n\n        if (provider.get('isBrokerProviderType')) {\n          this.set('selectedZone', firstServiceZone);\n          this.set('modifiedZoneName', firstServiceZone.name);\n          this.set('newZoneName', firstServiceZone.name);\n          this.set('zipCodesSelected', firstServiceZone.zipCodes);\n        }\n\n        this.set('configType', null);\n      });\n    },\n\n    async refreshZoneBrokerData(provider) {\n      let serviceZones = provider.get('serviceZones') || provider.get('value.serviceZones');\n      let zoneCost = this.get('zoneCost') || [];\n      zoneCost = zoneCost.filter(cost => !cost.group.includes(this.get('selectedZone.name')));\n      serviceZones = serviceZones.map(_ref => {\n        let {\n          name,\n          zipCodes\n        } = _ref;\n        return Ember.Object.create({\n          name,\n          zipCodes\n        });\n      });\n      Ember.run.next(() => {\n        // power select requires all selected items to remove to update collection options\n        this.set('zones', serviceZones); // update zone options\n\n        if (Ember.isEmpty(this.get('zones'))) {\n          this.set('selectedZone', null);\n          this.set('modifiedZoneName', '');\n          this.set('zipCodesSelected', []);\n        } else {\n          const firstServiceZone = serviceZones.firstObject;\n          this.set('selectedZone', firstServiceZone);\n          this.set('modifiedZoneName', firstServiceZone.name);\n          this.set('zipCodesSelected', firstServiceZone.zipCodes);\n        }\n\n        if (Ember.isEmpty(this.get('zones')) || Ember.isEmpty(zoneCost)) {\n          this.set('selectedCostZoneOne', '');\n          this.set('selectedCostZoneTwo', '');\n          this.set('cost', null);\n          this.set('zoneCost', zoneCost);\n        } else {\n          const firstServiceZone = serviceZones.firstObject;\n\n          if (Ember.isPresent(firstServiceZone)) {\n            const isZonesPresent = this.get('zones').some(zone => {\n              return Ember.isPresent(zoneCost.find(cost => cost.group.includes(zone.name)));\n            });\n\n            if (isZonesPresent) {\n              const firstGroupCost = zoneCost.firstObject;\n              const zones = Ember.isPresent(firstGroupCost) ? firstGroupCost.group.split('-') : null;\n\n              if (zones) {\n                const zoneOne = serviceZones.filter(zone => zone.name === parseInt(zones.firstObject, 10));\n                const zoneTwo = serviceZones.filter(zone => zone.name === parseInt(zones.lastObject, 10));\n\n                if (zoneOne.firstObject || zoneTwo.firstObject) {\n                  this.set('selectedCostZoneOne', zoneOne.firstObject);\n                  this.set('selectedCostZoneTwo', zoneTwo.firstObject);\n                  this.set('cost', firstGroupCost.cost);\n                  this.set('zoneCost', zoneCost);\n                }\n              }\n            }\n          }\n        }\n      });\n    },\n\n    refreshCostBrokerData(provider) {\n      let serviceZones = provider.get('value.serviceZones') || [];\n      const costs = provider.get('value.costs') || [];\n      serviceZones = serviceZones.map(_ref2 => {\n        let {\n          name,\n          zipCodes\n        } = _ref2;\n        return Ember.Object.create({\n          name,\n          zipCodes\n        });\n      });\n      Ember.run.next(() => {\n        // power select requires all selected items to remove to update collection options\n        this.set('zones', serviceZones); // update zone options\n\n        if (Ember.isEmpty(this.get('zones'))) {\n          this.set('selectedZone', null);\n          this.set('modifiedZoneName', '');\n          this.set('zipCodesSelected', []);\n        } else {\n          const firstServiceZone = serviceZones.firstObject;\n          this.set('selectedZone', firstServiceZone);\n          this.set('modifiedZoneName', firstServiceZone.name);\n          this.set('zipCodesSelected', firstServiceZone.zipCodes);\n        }\n\n        this.set('selectedCostZoneOne', '');\n        this.set('selectedCostZoneTwo', '');\n        this.set('cost', null);\n        this.set('zoneCost', costs);\n      });\n    },\n\n    /**\n     * First, validate the mandatory fields. If the provider type is broker\n     * then it validates zone cost and zone\n     * @returns {boolean}\n     */\n    async validateProvider() {\n      let valid = this.mandatoryValidation();\n      const providerType = this.get('provider.providerTypeName');\n\n      if (valid && providerType === 'broker') {\n        valid = this.validateCostZone() && this.validateZone() && this.validateServiceZone();\n      }\n\n      return valid;\n    },\n\n    validateProviderType() {\n      const provider = this.get('provider');\n      const store = this.get('store');\n      const isNewProvider = this.get('isNewProvider');\n      const providerTypeName = this.get('provider.providerTypeName');\n      const routes = store.peekAll('route');\n      const scheduledRoutes = routes.filter(route => route.get('provider.id') === provider.get('id') && route.get('isScheduled'));\n      if (isNewProvider) return true;\n\n      if (this.get('selectedRow.providerTypeName') !== providerTypeName && !Ember.isEmpty(scheduledRoutes)) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          tip: 'Unable to save because a schedule exists that contains routes assigned to the provider',\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    saveProvider() {\n      const notifications = this.get('notifications');\n      this.set('providerChanges', false);\n      return this.get('save').perform().then(provider => {\n        notifications.success('Record successfully saved');\n        return this.refreshProviderDOM(provider);\n      }).catch(() => {\n        notifications.warning('Record failed to save');\n      });\n    },\n\n    onSaveProviders() {\n      const notifications = this.get('notifications');\n      this.validateProvider().then(isValid => {\n        if (isValid) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'System Configuration',\n            hasOverlay: true,\n            tip: 'Are you sure you want to save these changes?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              this.set('providerChanges', false);\n              this.set('isZipCodeAvailabel', true);\n              tooltip.reset();\n              return this.get('save').perform().then(async provider => {\n                notifications.success('Record successfully saved');\n                await this.get('workspaceContext').fetchProviderList();\n                return this.refreshProviderDOM(provider);\n              });\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n      });\n    },\n\n    validateCostZone() {\n      const zone1 = this.get('selectedCostZoneOne');\n      const zone2 = this.get('selectedCostZoneTwo');\n      const cost = this.get('cost');\n      const errors = [];\n      if (Ember.isEmpty(zone1) && Ember.isEmpty(zone2) && Ember.isEmpty(cost)) errors.pushObject({\n        'validation': 'User must enter at least one cost in order to save'\n      });else {\n        if (Ember.isEmpty(zone1) || Ember.isEmpty(zone2)) errors.pushObject({\n          'validation': 'Zone names must be selected'\n        });\n        if (Ember.isEmpty(cost)) errors.pushObject({\n          'validation': 'Cost is required'\n        });\n      }\n      const tooltip = this.get('tooltip');\n\n      if (errors.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          errors,\n          tip: '',\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    async providerHasScheduedRoutes() {\n      const currentProviderName = this.get('provider.id');\n      const scheduledRoutes = await this.checkAvailableProvider(currentProviderName);\n      const tipMessage = this.get('isDeleteProvider') ? 'Unable to delete. The provider is associated with other records, such as vehicles, trips. You may want to try setting the provider to \\'Inactive\\' instead.' : 'Unable to set provider to Inactive. The provider is currently associated with future records, such as routes, trips. You must first remove those associations and then try again.';\n\n      if (scheduledRoutes) {\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          hasoverlay: true,\n          tip: tipMessage,\n          primaryActionText: 'OK',\n          primaryAction: () => {\n            tooltip.reset();\n          }\n        });\n        return false;\n      }\n\n      return true;\n    },\n\n    async checkAvailableProvider(currentProviderName) {\n      let isProviderPresent = false;\n\n      for (const provider of PROVIDER_ASSOCIATIONS) {\n        const modelProvider = await this.fetchProvidersTask.perform(provider.model, provider.providerName, currentProviderName);\n\n        if (Ember.isPresent(modelProvider)) {\n          isProviderPresent = true;\n          break;\n        }\n      }\n\n      return isProviderPresent;\n    },\n\n    fetchProvidersTask: (0, _emberConcurrency.task)(function* (model, modelProviderName, currentProvider) {\n      const store = this.get('store');\n      const fetchProvider = yield store.query(model, {\n        filter: `eq(${modelProviderName},${currentProvider})`,\n        'page[limit]': 1\n      });\n      return fetchProvider;\n    }),\n\n    undoProvider() {\n      const selectedRow = this.get('selectedRow');\n      const isNewProvider = this.get('isNewProvider');\n\n      if (isNewProvider) {\n        this.set('provider', null);\n      }\n\n      this.setDefaultProperties(selectedRow);\n      this.setProperties({\n        disableForm: false,\n        disableCostForm: false,\n        disableBrokerForm: false,\n        disableZoneRemoveAction: false,\n        disableZoneAdd: false,\n        disableZoneSaveAction: false,\n        disableCostRemoveAction: false,\n        addCostName: false\n      });\n    },\n\n    resetPreviousRecordProperities(_ref3) {\n      let {\n        tripCount,\n        serviceZones,\n        costs\n      } = _ref3;\n      this.setProperties({\n        originalTripCount: tripCount,\n        originalServiceZones: serviceZones,\n        originalCosts: costs\n      });\n    },\n\n    checkMaxBrokerProviderRecords() {\n      const providerRecord = this.get('tableRef.records');\n      const brokerProviderRecords = providerRecord.filter(provider => provider.isBrokerProviderType);\n      const currentProvider = this.get('provider');\n      const isNewProvider = this.get('isNewProvider');\n      return brokerProviderRecords.length === MAX_BROKER_PROVIDER && currentProvider.providerTypeName === BROKER_PROVIDER_TYPE && (isNewProvider || !isNewProvider && providerRecord.length > MAX_BROKER_PROVIDER);\n    },\n\n    // NYAAR-19080 One zone should be deleted from the Broker Provider Record.\n    deleteSelectedBrokerServiceZone(provider) {\n      const store = this.get('store');\n      const selectedRow = this.get('selectedRow');\n      const selectedZone = this.get('selectedZone');\n      const value = provider;\n\n      if (selectedRow && selectedRow.get('id')) {\n        const id = `config-System_Configuration-providers/${selectedRow.get('id')}`;\n        const record = store.peekRecord('cs-config-item', id);\n        const serviceZones = record.get('value.serviceZones');\n        value.tripCount = selectedRow.get('tripCount');\n        value.serviceZones = serviceZones.filter(zone => zone.name !== selectedZone.name);\n        const zoneCost = selectedRow.get('costs');\n        value.costs = zoneCost.filter(item => !item.group.includes(selectedZone.name));\n        record.set('value', value);\n      }\n\n      this.set('zones', value.serviceZones.filter(zone => zone.name !== selectedZone.name));\n      return this.buildProviderData();\n    },\n\n    maxBrokerProviderWarning() {\n      const tooltip = this.get('tooltip');\n      return tooltip.pushConfirmation({\n        title: 'System Configuration',\n        hasoverlay: true,\n        tip: `Unable to create provider. This exceeds the maximum number of allowed broker providers (${MAX_BROKER_PROVIDER}).`,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    removeIdFromTableCache(id) {\n      const tableRef = this.get('tableRef');\n      const tableCache = tableRef.dataJoin.cache;\n      delete tableCache[id];\n    },\n\n    actions: {\n      newProviders() {\n        const selectedRow = this.get('selectedRow');\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n          this.set('tableRef.config.selectFirstRow', false);\n        }\n\n        this.setDefaultProperties();\n        this.setProperties({\n          isNewProvider: true,\n          disableForm: false,\n          providerChanges: false,\n          addZoneName: false,\n          addCostName: false,\n          disableZoneRemoveAction: true,\n          disableZoneSaveAction: true,\n          disableCostRemoveAction: true,\n          disableCostSaveAction: true,\n          disableCostForm: true,\n          zones: null,\n          selectedCostZoneOne: null,\n          selectedCostZoneTwo: null,\n          configType: null\n        });\n        this.get('tableRef').onUncheckAll();\n        this.send('onAddServiceZone');\n        this.send('onAddCostZone');\n        this.buttonSettings(true, true, true);\n        this.set('systemConfig.hasChanges', true);\n        this.set('disableZoneAdd', false);\n        this.setupZipCodes();\n      },\n\n      editProviders() {\n        const selectedRow = this.get('selectedRow');\n\n        if (Ember.isPresent(selectedRow)) {\n          this.set('originalTripCount', (0, _lodash.cloneDeep)(selectedRow.get('tripCount')));\n        }\n\n        this.setDefaultProperties(selectedRow);\n        this.setProperties({\n          isNewProvider: false,\n          disableForm: false,\n          providerChanges: false,\n          addZoneName: false,\n          addCostName: false,\n          disableCostForm: false,\n          disableCostRemoveAction: false,\n          disableCostSaveAction: true,\n          disableZoneAdd: false,\n          disableZoneRemoveAction: true,\n          disableZoneSaveAction: true,\n          configType: null,\n          originalServiceZones: null,\n          originalCosts: null\n        });\n\n        if (Ember.isPresent(selectedRow.get('serviceZones'))) {\n          this.set('disableZoneSaveAction', false);\n          this.set('disableBrokerForm', false);\n          this.set('disableZoneRemoveAction', false);\n          this.set('originalServiceZones', (0, _lodash.cloneDeep)(selectedRow.get('serviceZones')));\n          this.set('originalCosts', (0, _lodash.cloneDeep)(selectedRow.get('costs')));\n        }\n\n        this.buttonSettings(true, true, true);\n        this.set('systemConfig.hasChanges', true);\n      },\n\n      async deleteProviders() {\n        this.set('isDeleteProvider', true);\n        const tooltip = this.get('tooltip');\n        const isValidProvider = await this.providerHasScheduedRoutes();\n\n        if (isValidProvider) {\n          tooltip.pushConfirmation({\n            title: 'System Configuration',\n            hasoverlay: true,\n            tip: 'Are you sure you want to Delete these changes?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('delete').perform().then(async () => {\n                await this.get('workspaceContext').fetchProviderList();\n                tooltip.reset();\n                this.set('isDeleteProvider', false);\n              });\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n\n        this.set('isDeleteProvider', false);\n      },\n\n      async saveProviders() {\n        if (this.checkMaxBrokerProviderRecords()) {\n          return this.maxBrokerProviderWarning();\n        }\n\n        this.onSaveProviders();\n      },\n\n      undoProvider() {\n        this.undoProvider();\n      },\n\n      async onStatusChange(val) {\n        if (this.get('provider.status').toLowerCase() === ACTIVE_STATUS && !this.get('isNewProvider')) {\n          const isValidProvider = await this.providerHasScheduedRoutes();\n          if (!isValidProvider) return;\n        }\n\n        this.set('provider.status', val);\n        this.set('providerChanges', true);\n      },\n\n      onProviderTypeChange(val) {\n        this.set('provider.providerTypeName', val);\n        this.set('providerChanges', true);\n\n        if (val === BROKER_PROVIDER_TYPE) {\n          const serviceZones = this.get('zones') || [];\n          if (Ember.isEmpty(serviceZones)) this.setProperties({\n            zipCodesSelected: null,\n            selectedZone: null,\n            newZoneName: null,\n            selectedCostZoneOne: null,\n            selectedCostZoneTwo: null,\n            cost: null,\n            addZoneName: true,\n            disableBrokerForm: true,\n            disableCostForm: true,\n            disableZoneRemoveAction: true,\n            disableZoneSaveAction: true,\n            disableCostRemoveAction: true,\n            disableCostSaveAction: true,\n            disableZoneAdd: false\n          });\n        }\n      },\n\n      onUpdateTripCountDate(day) {\n        const tripDays = this.get('tripCountWeekDays');\n        this.set('tripCountWeekDays', []);\n        tripDays.pop();\n        tripDays.push({\n          day,\n          values: {\n            targetCount: 0,\n            underage: 0,\n            overage: 0\n          }\n        });\n        this.set('tripCountWeekDays', tripDays);\n        this.set('disableTripCount', false);\n      },\n\n      onAddServiceZone() {\n        this.setProperties({\n          zipCodesSelected: null,\n          modifiedZoneName: null,\n          selectedZone: null,\n          addZoneName: true,\n          disableZoneAdd: true,\n          disableZoneRemoveAction: true,\n          disableZoneSaveAction: false,\n          disableBrokerForm: false,\n          inValidZone: false\n        });\n      },\n\n      onRemoveServiceZone() {\n        const tooltip = this.get('tooltip');\n        const selectedZone = this.get('selectedZone');\n        const notifications = this.get('notifications');\n        const addZoneName = this.get('addZoneName');\n        const provider = this.get('provider');\n\n        if (!selectedZone && addZoneName) {\n          this.set('newZoneName', '');\n          this.set('zipCodesSelected', '');\n        } else {\n          tooltip.pushConfirmation({\n            title: 'Providers-Broker Zone',\n            hasoverlay: true,\n            tip: `Do you want to delete zone ${selectedZone.name}?`,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              this.deleteSelectedBrokerServiceZone(provider);\n              this.refreshZoneBrokerData(provider);\n              notifications.success(`successfully deleted zone ${selectedZone.name}.`);\n              this.set('providerChanges', true);\n              this.set('disableZoneSaveAction', true);\n              this.set('disableZoneAdd', false);\n\n              if (Ember.isEmpty(provider.get('serviceZones'))) {\n                this.set('disableBrokerForm', true);\n                this.set('disableZoneRemoveAction', true);\n              } else {\n                this.set('disableZoneRemoveAction', false);\n              }\n\n              tooltip.reset();\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n      },\n\n      onSaveServiceZone() {\n        let isValid = this.validateZone();\n\n        if (isValid) {\n          const tooltip = this.get('tooltip');\n          const zoneName = this.getZoneName();\n          const isNewProvider = this.get('isNewProvider');\n          const notifications = this.get('notifications');\n          let tip = 'Are you sure you want to save these changes?';\n\n          if (!Ember.isEmpty(zoneName) && isValid) {\n            isValid = this.validateServiceZone();\n\n            if (!isNewProvider) {\n              tip = `Do you want to save ${zoneName}?`;\n            }\n          }\n\n          if (isValid) {\n            tooltip.pushConfirmation({\n              title: 'Providers-Broker Zone',\n              hasoverlay: true,\n              tip,\n              primaryActionText: 'Confirm',\n              primaryAction: () => {\n                this.set('addZoneName', false);\n                const provider = this.buildProviderData();\n\n                if (provider) {\n                  const zonesExist = provider.get('value').serviceZones;\n                  this.set('newZoneName', '');\n                  this.set('zipCodesSelected', []);\n\n                  if (zonesExist && zonesExist.length >= 1) {\n                    this.setProperties({\n                      'disableZoneAdd': false,\n                      'disableZoneRemoveAction': false,\n                      'disableZoneSaveAction': true,\n                      'addCostName': false,\n                      'disableCostRemoveAction': true,\n                      'disableCostSaveAction': true\n                    });\n                  } else {\n                    this.set('disableZoneAdd', false);\n                    this.set('disableZoneRemoveAction', true);\n                    this.set('disableZoneSaveAction', true);\n                  }\n\n                  this.set('isZipCodeAvailabel', true);\n                  this.set('disableBrokerForm', true);\n                  this.set('providerChanges', true);\n                  this.refreshZoneBrokerData(provider);\n                  notifications.success(`${zoneName} saved successfully`);\n                }\n\n                tooltip.reset();\n              },\n              secondaryActionText: 'Cancel',\n\n              secondaryAction() {\n                return tooltip.reset();\n              }\n\n            });\n          }\n        }\n      },\n\n      removeSelectedZipCode(zipCode) {\n        const selectedZipcodes = this.get('zipCodesSelected') || [];\n        selectedZipcodes.removeObject(zipCode);\n        this.set('zipCodesSelected', selectedZipcodes);\n        if (!this.get('zipCodesSelected').length) this.set('isZipCodeAvailabel', false);\n        this.set('disableZoneSaveAction', false);\n        this.set('providerChanges', true);\n      },\n\n      onZoneChange(selectedZone) {\n        const selectedZipCodes = selectedZone.zipCodes || [];\n        this.set('selectedZone', selectedZone);\n        this.set('modifiedZoneName', selectedZone.name);\n        this.set('zipCodesSelected', selectedZipCodes);\n\n        if (this.get('selectedZone')) {\n          this.set('disableBrokerForm', false);\n        }\n\n        this.set('disableZoneSaveAction', false);\n      },\n\n      onZipCodeChange(selectedZipCode) {\n        if (!selectedZipCode.lastObject) {\n          return;\n        }\n\n        const serviceZones = this.get('zones') || [];\n        const zipCode = parseInt(selectedZipCode.lastObject, 10);\n        const assignedZipCodes = serviceZones.filter(zone => zone.zipCodes.includes(zipCode));\n\n        if (!Ember.isEmpty(assignedZipCodes)) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'Providers-Broker Zone',\n            hasoverlay: true,\n            tip: `${zipCode} already assigned to ${assignedZipCodes.firstObject.name}`,\n            primaryActionText: 'OK',\n            primaryAction: () => {\n              tooltip.reset();\n            }\n          });\n        } else {\n          const zipCodesSelected = this.get('zipCodesSelected') || [];\n\n          if (!zipCodesSelected.includes(zipCode)) {\n            this.set('zipCodesSelected', null);\n            zipCodesSelected.push(zipCode);\n          }\n\n          this.set('zipCodesSelected', zipCodesSelected);\n          this.set('disableZoneSaveAction', false);\n          this.set('providerChanges', true);\n        }\n      },\n\n      onZoneOneChange(selectedZone) {\n        this.set('selectedCostZoneOne', selectedZone);\n        this.fetchZoneCost();\n        this.set('providerChanges', true);\n        this.set('disableCostSaveAction', false);\n      },\n\n      onZoneTwoChange(selectedZone) {\n        this.set('selectedCostZoneTwo', selectedZone);\n        this.fetchZoneCost();\n        this.set('providerChanges', true);\n        this.set('disableCostSaveAction', false);\n      },\n\n      onZoneCostChange(path, value) {\n        this.set(path, value);\n        const zone1 = this.get('selectedCostZoneOne');\n        const zone2 = this.get('selectedCostZoneTwo');\n\n        if (zone1 && zone2) {\n          this.set('providerChanges', true);\n          this.set('disableCostSaveAction', false);\n        }\n      },\n\n      findZipCode(newZoneName) {\n        let zoneName = newZoneName.value; // Automatic removal of characters other than numbers\n\n        if (!NUMBER_FORMAT.test(zoneName)) {\n          zoneName = zoneName.replace(REMOVE_TEXT_FORMAT, '');\n          zoneName = zoneName.replace(SPECIAL_CHARACTER_FORMAT, '');\n          this.set('newZoneName', zoneName ? parseInt(zoneName, 10) : '');\n          return this.notifyPropertyChange('newZoneName');\n        } // Replacing '0' and undefined value\n\n\n        if (!zoneName || zoneName === '0') {\n          this.set('newZoneName', zoneName = '');\n          return this.notifyPropertyChange('newZoneName');\n        }\n\n        this.set('newZoneName', parseInt(zoneName, 10));\n        this.set('inValidZone', false);\n        this.set('zipCodesSelected', []);\n      },\n\n      removeCharacters(contactPhone) {\n        let phone = contactPhone.value;\n        this.send('onProviderFormChanges'); // Automatic removal of characters other than numbers\n\n        if (!NUMBER_FORMAT.test(phone)) {\n          phone = phone.replace(REMOVE_TEXT_FORMAT, '');\n          phone = phone.replace(SPECIAL_CHARACTER_FORMAT, '');\n          this.set('provider.contactPhone', phone ? parseInt(phone, 10) : '');\n          return this.notifyPropertyChange('provider');\n        }\n\n        this.set('provider.contactPhone', phone ? parseInt(phone, 10) : '');\n      },\n\n      onRemoveCostZone() {\n        const tooltip = this.get('tooltip');\n        const zone1 = this.get('selectedCostZoneOne');\n        const zone2 = this.get('selectedCostZoneTwo');\n        const notifications = this.get('notifications');\n        const addCostName = this.get('addCostName');\n\n        if (addCostName) {\n          this.set('selectedCostZoneOne', '');\n          this.set('selectedCostZoneTwo', '');\n          this.set('cost', '');\n        } else {\n          tooltip.pushConfirmation({\n            title: 'Providers-Cost',\n            hasoverlay: true,\n            tip: `Do you want to delete cost for ${zone1.name} to ${zone2.name}?`,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('deleteServiceCostZone').perform().then(provider => {\n                this.refreshCostBrokerData(provider);\n                notifications.success(`Cost for ${zone1.name} to ${zone2.name} deleted successfully`);\n                this.set('providerChanges', true);\n              }).catch(() => {\n                notifications.warning(`Failed to delete cost for ${zone1.name} to ${zone2.name}`);\n              }).finally(() => {\n                tooltip.reset();\n              });\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n      },\n\n      onAddCostZone() {\n        this.setProperties({\n          selectedCostZoneOne: null,\n          selectedCostZoneTwo: null,\n          cost: null,\n          addCostName: true,\n          disableCostRemoveAction: true,\n          disableCostSaveAction: false,\n          disableCostForm: false\n        });\n      },\n\n      onSaveCostZone() {\n        const isValid = this.validateCostZone();\n\n        if (isValid) {\n          const tooltip = this.get('tooltip');\n          const zone1 = this.get('selectedCostZoneOne');\n          const zone2 = this.get('selectedCostZoneTwo');\n          const tip = `Do you want to modify cost for ${zone1.name} to ${zone2.name}?`;\n          const notifications = this.get('notifications');\n          tooltip.pushConfirmation({\n            title: 'Providers-Cost',\n            hasoverlay: true,\n            tip,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              const provider = this.buildProviderData();\n\n              if (provider) {\n                if (zone1 || zone2) {\n                  this.set('addCostName', false);\n                  this.set('disableCostRemoveAction', false);\n                  this.set('disableCostSaveAction', true);\n                  this.set('disableCostForm', false);\n                } else {\n                  this.set('addCostName', false);\n                  this.set('disableCostRemoveAction', true);\n                  this.set('disableCostSaveAction', true);\n                  this.set('disableCostForm', true);\n                }\n\n                notifications.success(`Cost for ${zone1.name} to ${zone2.name} saved successfully`);\n                tooltip.reset();\n              }\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n      },\n\n      onTripCountChange(record, valuePath, val) {\n        const value = parseInt(val, 10) || 0;\n        Ember.set(record, valuePath, value);\n        this.set('providerChanges', true);\n      },\n\n      onProviderFormChanges() {\n        this.set('providerChanges', true);\n      },\n\n      onInputChange(value) {\n        let zoneName = value; // Automatic removal of characters other than numbers\n\n        if (!NUMBER_FORMAT.test(zoneName)) {\n          zoneName = zoneName.replace(REMOVE_TEXT_FORMAT, '');\n          zoneName = zoneName.replace(SPECIAL_CHARACTER_FORMAT, '');\n          this.set('modifiedZoneName', zoneName ? parseInt(zoneName, 10) : '');\n          return;\n        } // Replacing '0' and undefined value\n\n\n        if (!zoneName || zoneName === '0') {\n          this.set('modifiedZoneName', zoneName = '');\n          return;\n        }\n\n        this.set('modifiedZoneName', parseInt(zoneName, 10));\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/providers/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/providers/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['providers-table'],\n    config: _config.default,\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    configType: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    hasPendingChanges: Ember.computed('providerFormChanges', function () {\n      const providerFormChanges = this.get('providerFormChanges') || false;\n      return providerFormChanges;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/providers/table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'provider',\n    title: 'Providers',\n    tooltipTitle: 'System Configuration',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    columns: [{\n      id: 'id',\n      index: 0,\n      type: 'string',\n      label: 'ID',\n      valuePath: 'id',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'name',\n      index: 1,\n      type: 'string',\n      label: 'Name',\n      valuePath: 'displayName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'status',\n      index: 2,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'type',\n      index: 3,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'providerTypeName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'contactName',\n      index: 4,\n      type: 'string',\n      label: 'Contact Name',\n      valuePath: 'contactName',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/providers/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1Y0ybZMP\",\n    \"block\": \"{\\\"symbols\\\":[\\\"tripDay\\\",\\\"index\\\",\\\"option\\\",\\\"option\\\",\\\"zipcode\\\",\\\"name\\\",\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"providerFormChanges\\\",\\\"disableUndobtn\\\"],[\\\"Providers\\\",[27,\\\"action\\\",[[22,0,[]],\\\"newProviders\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editProviders\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deleteProviders\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoProvider\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"saveProviders\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"providerFormChanges\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"side-drawer/system-config/providers/table\\\",null,[[\\\"tableRef\\\",\\\"providerFormChanges\\\",\\\"validateRecord\\\",\\\"rollbackRecord\\\",\\\"saveRecord\\\",\\\"isTaskRunning\\\",\\\"maxBrokerProviderWarning\\\",\\\"checkMaxBrokerProviderRecords\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"providerFormChanges\\\"]],[23,[\\\"validateRecordTask\\\"]],[23,[\\\"undoProvider\\\"]],[23,[\\\"saveProvider\\\"]],[23,[\\\"isTaskRunning\\\"]],[23,[\\\"maxBrokerProviderWarning\\\"]],[23,[\\\"checkMaxBrokerProviderRecords\\\"]]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"main-information\\\",\\\"Provider Information\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-information-panel information-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"duplicateIDError\\\"]],\\\"error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"provider\\\",\\\"id\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"ID\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Provider Id\\\",\\\"text\\\",[27,\\\"or\\\",[[23,[\\\"disableForm\\\"]],[27,\\\"not\\\",[[23,[\\\"isNewProvider\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderFormChanges\\\"],null],[23,[\\\"provider\\\",\\\"id\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"duplicateNameError\\\"]],\\\"error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"provider\\\",\\\"displayName\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Provider Name\\\",\\\"text\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderFormChanges\\\"],null],[23,[\\\"provider\\\",\\\"displayName\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"provider\\\",\\\"status\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Status\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[\\\"Select Status\\\",[23,[\\\"status\\\"]],[23,[\\\"provider\\\",\\\"status\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onStatusChange\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,9,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[9]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"provider\\\",\\\"providerTypeName\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"options\\\",\\\"selected\\\",\\\"onchange\\\",\\\"disabled\\\"],[\\\"Select Type\\\",[23,[\\\"providersList\\\"]],[23,[\\\"provider\\\",\\\"providerTypeName\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderTypeChange\\\"],null],[23,[\\\"disableForm\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,8,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[8]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"contact-information\\\",\\\"Contact Information\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"contact-information-panel information-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"provider\\\",\\\"contactName\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Full Name\\\",\\\"text\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderFormChanges\\\"],null],[23,[\\\"provider\\\",\\\"contactName\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Phone\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"input\\\"],[12,\\\"class\\\",[28,[\\\"input-group col-6 input-box \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"provider\\\",\\\"contactPhone\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[11,\\\"placeholder\\\",\\\"Phone Number\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"removeCharacters\\\"],[[\\\"value\\\"],[\\\"target\\\"]]]],[12,\\\"value\\\",[23,[\\\"provider\\\",\\\"contactPhone\\\"]]],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"inValidEmail\\\"]],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Email\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"Email\\\",\\\"Email\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderFormChanges\\\"],null],[23,[\\\"provider\\\",\\\"contactEmail\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showBrokerPanel\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"isCollapsible\\\"],[\\\"service-zone\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-header\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"panel-title\\\"],[9],[0,\\\"Broker Zone\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-header-buttons\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[11,\\\"title\\\",\\\"Delete\\\"],[12,\\\"disabled\\\",[21,\\\"disableZoneRemoveAction\\\"]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveServiceZone\\\",[23,[\\\"zone\\\"]]]],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[11,\\\"title\\\",\\\"Add\\\"],[12,\\\"disabled\\\",[21,\\\"disableZoneAdd\\\"]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAddServiceZone\\\",[23,[\\\"zone\\\"]]]],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[11,\\\"title\\\",\\\"Save\\\"],[12,\\\"disabled\\\",[21,\\\"disableZoneSaveAction\\\"]],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n        \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSaveServiceZone\\\",[23,[\\\"zone\\\"]]]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"service-zone-panel information-panel\\\"],[9],[0,\\\"\\\\n\\\\n\\\\n         \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n           \\\"],[7,\\\"label\\\"],[9],[0,\\\" Selected Zone \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"options\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"zone\\\",\\\"name\\\",[23,[\\\"zones\\\"]],[23,[\\\"disableSelectedZone\\\"]],[23,[\\\"selectedZone\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\" Zone \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"addZoneName\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"input\\\"],[12,\\\"class\\\",[28,[\\\"input-add-zone ember-text-field \\\",[27,\\\"if\\\",[[23,[\\\"inValidZone\\\"]],\\\"error\\\"],null]]]],[11,\\\"placeholder\\\",\\\"Enter Zone\\\"],[11,\\\"maxlength\\\",\\\"3\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"findZipCode\\\"],[[\\\"value\\\"],[\\\"target\\\"]]]],[12,\\\"value\\\",[21,\\\"newZoneName\\\"]],[12,\\\"input\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onProviderFormChanges\\\"],null]],[12,\\\"disabled\\\",[21,\\\"disableBrokerForm\\\"]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"type\\\",\\\"maxlength\\\",\\\"disabled\\\",\\\"input\\\",\\\"key-up\\\",\\\"value\\\"],[\\\"input-add-zone ember-text-field\\\",\\\"Enter Zone\\\",\\\"text\\\",\\\"3\\\",[23,[\\\"disableBrokerForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputChange\\\",[23,[\\\"modifiedZoneName\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderFormChanges\\\"],null],[23,[\\\"modifiedZoneName\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"          \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[23,[\\\"addZoneName\\\"]],\\\"new-zone-code\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Zip Code(s)\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"closeOnSelect\\\",\\\"disabled\\\",\\\"onchange\\\"],[[23,[\\\"zipCodes\\\"]],[23,[\\\"zipCodesSelected\\\"]],\\\"Add Zip Codes.....\\\",true,[27,\\\"and\\\",[[23,[\\\"disableBrokerForm\\\"]],[23,[\\\"isZipCodeAvailabel\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onZipCodeChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,6,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group zipcode-options\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"ul\\\"],[11,\\\"class\\\",\\\"ember-power-select-multiple-options\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"zipCodesSelected\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"li\\\"],[12,\\\"class\\\",[28,[\\\"ember-power-select-multiple-option \\\",[27,\\\"if\\\",[[23,[\\\"disableForm\\\"]],\\\"disable-btn\\\"],null]]]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"role\\\",\\\"button\\\"],[11,\\\"class\\\",\\\"ember-power-select-multiple-remove-btn\\\"],[9],[0,\\\"\\\\n                  ×\\\\n                \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"removeSelectedZipCode\\\",[22,5,[]]]],[10],[0,\\\"\\\\n                \\\"],[1,[22,5,[]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"left-form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"isCollapsible\\\"],[\\\"cost-info\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h2\\\"],[11,\\\"class\\\",\\\"panel-title\\\"],[9],[0,\\\"Cost\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"panel-header-buttons\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[11,\\\"title\\\",\\\"Delete\\\"],[12,\\\"disabled\\\",[21,\\\"disableCostRemoveAction\\\"]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onRemoveCostZone\\\"]],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[11,\\\"title\\\",\\\"Add\\\"],[12,\\\"disabled\\\",[21,\\\"addCostName\\\"]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAddCostZone\\\"]],[10],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-secondary\\\"],[11,\\\"title\\\",\\\"Save\\\"],[12,\\\"disabled\\\",[21,\\\"disableCostSaveAction\\\"]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-check\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[0,\\\" \\\"],[10],[0,\\\"\\\\n          \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSaveCostZone\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"form\\\"],[11,\\\"onsubmit\\\",\\\"return false\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cost-count-panel information-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cost-header\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Zone\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Zone\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"label\\\"],[9],[0,\\\"Cost\\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group-container \\\",[27,\\\"if\\\",[[23,[\\\"addCostName\\\"]],\\\"new-cost\\\"],null]]]],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"options\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"Select\\\",\\\"name\\\",[27,\\\"readonly\\\",[[23,[\\\"zones\\\"]]],null],[23,[\\\"disableCostForm\\\"]],[23,[\\\"selectedCostZoneOne\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneOneChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,4,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"mx-2\\\"],[9],[0,\\\"To\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"placeholder\\\",\\\"searchField\\\",\\\"options\\\",\\\"disabled\\\",\\\"selected\\\",\\\"onchange\\\"],[\\\"Select\\\",\\\"name\\\",[23,[\\\"zones\\\"]],[23,[\\\"disableCostForm\\\"]],[23,[\\\"selectedCostZoneTwo\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneTwoChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"mx-2\\\"],[9],[0,\\\"=\\\"],[10],[0,\\\" \\\"],[2,\\\" HTML equivalent for '=' \\\"],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group\\\"],[9],[0,\\\"\\\\n                 \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"placeholder\\\",\\\"disabled\\\",\\\"type\\\",\\\"value\\\",\\\"extra\\\",\\\"onChange\\\"],[\\\"Enter Cost\\\",[23,[\\\"disableCostForm\\\"]],\\\"text\\\",[23,[\\\"cost\\\"]],[23,[\\\"costLimit\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onZoneCostChange\\\",\\\"cost\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"trip-count\\\",\\\"Trip Count\\\",false]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-count-panel information-panel\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"days-of-service-table\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-count-form-container\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section spacer-0\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section table-header\\\"],[9],[0,\\\"TargetCount\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section table-header\\\"],[9],[0,\\\"Underage\\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section table-header\\\"],[9],[0,\\\"Overage\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"tripCountWeekDays\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"not-eq\\\",[[22,2,[]],[27,\\\"sub\\\",[[23,[\\\"tripCountWeekDays\\\",\\\"length\\\"]],1],null]],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-count-form-container\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"label\\\"],[9],[1,[27,\\\"capitalize\\\",[[27,\\\"get\\\",[[23,[\\\"daysOfService\\\"]],[22,2,[]]],null]],null],false],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableForm\\\"]],[22,1,[\\\"values\\\",\\\"targetCount\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCountChange\\\",[22,1,[]],\\\"values.targetCount\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableForm\\\"]],[22,1,[\\\"values\\\",\\\"underage\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCountChange\\\",[22,1,[]],\\\"values.underage\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableForm\\\"]],[22,1,[\\\"values\\\",\\\"overage\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCountChange\\\",[22,1,[]],\\\"values.overage\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-count-form-container\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section datetimeflatpickr-wrapper trip-count-datePicker\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"class\\\",\\\"minDate\\\",\\\"disabled\\\",\\\"maxDate\\\",\\\"placeholder\\\",\\\"value\\\",\\\"onChange\\\"],[\\\"trip-count-dateInput\\\",[23,[\\\"minTripCountDate\\\"]],[23,[\\\"disableForm\\\"]],[23,[\\\"maxTripCountDate\\\"]],\\\"Trip Date\\\",[22,1,[\\\"day\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdateTripCountDate\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableTripCount\\\"]],[22,1,[\\\"values\\\",\\\"targetCount\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCountChange\\\",[22,1,[]],\\\"values.targetCount\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableTripCount\\\"]],[22,1,[\\\"values\\\",\\\"underage\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCountChange\\\",[22,1,[]],\\\"values.underage\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"section\\\"],[9],[0,\\\"\\\\n                  \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"disableTripCount\\\"]],[22,1,[\\\"values\\\",\\\"overage\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTripCountChange\\\",[22,1,[]],\\\"values.overage\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[1,2]},null],[0,\\\"\\\\n\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/providers/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/component\", [\"exports\", \"ember-changeset-cp-validations\", \"ember-changeset\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/side-drawer/system-config/route-master/vehicle-search-config\", \"adept-iq/pods/components/side-drawer/system-config/route-master/driver-search-config\", \"lodash\", \"adept-iq/config/environment\", \"adept-iq/models/route-template\", \"adept-iq/models/zone\", \"moment\"], function (_exports, _emberChangesetCpValidations, _emberChangeset, _emberConcurrency, _unwrapProxy, _vehicleSearchConfig, _driverSearchConfig, _lodash, _environment, _routeTemplate, _zone, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const MAX_DATE = (0, _moment.default)().add(1000, 'years');\n  const MAX_TRIP_LIMIT = 9;\n  const MAX_DISTANCE_LIMIT = 99;\n  const MAX_ROUTE_VALUE = 2147483647;\n  const daysOfService = {\n    '0': 'monday',\n    '1': 'tuesday',\n    '2': 'wednesday',\n    '3': 'thursday',\n    '4': 'friday',\n    '5': 'saturday',\n    '6': 'sunday',\n    '7': 'holiday'\n  };\n  const daysOfWeek = [{\n    day: 'monday',\n    display: 'Mon',\n    disabled: false\n  }, {\n    day: 'tuesday',\n    display: 'Tues',\n    disabled: false\n  }, {\n    day: 'wednesday',\n    display: 'Wed',\n    disabled: false\n  }, {\n    day: 'thursday',\n    display: 'Thurs',\n    disabled: false\n  }, {\n    day: 'friday',\n    display: 'Fri',\n    disabled: false\n  }, {\n    day: 'saturday',\n    display: 'Sat',\n    disabled: false\n  }, {\n    day: 'sunday',\n    display: 'Sun',\n    disabled: false\n  }, {\n    day: 'holiday',\n    display: 'Holiday',\n    disabled: false\n  }];\n  const extraTripLimitOptions = {\n    min: 1,\n    max: 1\n  };\n  const extraDistanceLimitOptions = {\n    min: 1,\n    max: 2\n  };\n\n  const getTimeInMilliseconds = date => {\n    const dateOnly = new Date(date);\n    dateOnly.setHours(0, 0, 0, 0);\n    return date.getTime() - dateOnly.getTime();\n  };\n\n  var _default = Ember.Component.extend({\n    classNames: ['route-master-view'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    daysOfService,\n    daysOfWeek,\n    tableRef: null,\n    zoneTableRef: null,\n    isDriverBreakModalEnabled: false,\n    driverBreakAvailability: null,\n    disableEditing: true,\n    disableBtns: null,\n    showValidations: false,\n    breakTypes: null,\n    zones: null,\n    options: null,\n    selectedRouteTemplateAvailabilities: null,\n    selectedAvailability: null,\n    extraDistanceLimitOptions,\n    extraTripLimitOptions,\n    noneDriverModel: null,\n    noneRecord: null,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    routeTemplate: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedRow: Ember.computed.readOnly('tableRef.table.selectedRows.firstObject'),\n    isEdited: false,\n    isNew: false,\n    isSavePerformed: false,\n    selectedRecord: Ember.computed.readOnly('selectedRow.record'),\n    error: Ember.computed.readOnly('routeTemplateChangeSet.error'),\n    previousVehicleMap: null,\n    hasZoneSelected: Ember.computed.readOnly('zoneTableRef.hasZoneSelected'),\n    shouldDisplayValidations: Ember.computed.or('showValidations').readOnly(),\n    hasRouteTemplateChanged: Ember.computed('routeTemplateChangeSet.{isDirty,changes}', 'routeTemplateAvailabilities.@each{isDirty,shiftBreaks.length}', 'selectedAvailability.{routeLength,DOWSelected}', function () {\n      const routeTemplateChangeSet = this.get('routeTemplateChangeSet');\n      const oldAvailabilitiesLength = routeTemplateChangeSet.get('availabilities').length;\n      const avalabilityLengthChanged = oldAvailabilitiesLength !== this.get('routeTemplateAvailabilities').length;\n      const routeTemplateChanged = routeTemplateChangeSet.get('isDirty') || routeTemplateChangeSet.get('changes').length;\n      const availabilitiesChanged = this.get('routeTemplateAvailabilities').some(availability => {\n        return availability.get('isDirty') || availability.get('changes').length || availability.get('isNew');\n      });\n      return routeTemplateChanged || availabilitiesChanged || avalabilityLengthChanged;\n    }),\n    isShiftLengthZero: Ember.computed('routeTemplateAvailabilities.[]', function () {\n      const zeroShiftLengthAvailabilities = this.get('routeTemplateAvailabilities').filter(availability => {\n        if (!availability.get('routeLength')) return 1;\n        const avail = availability.get('routeLength').replace(/_/img, '0');\n        const shiftLengthDuration = avail.split(':');\n        const hours = shiftLengthDuration[0];\n        const minutes = shiftLengthDuration.length > 1 ? shiftLengthDuration[1] : 0;\n        return parseInt(minutes, 10) === 0 && parseInt(hours, 10) === 0 || avail === '';\n      });\n      const isShiftLengthZero = zeroShiftLengthAvailabilities.length ? 0 : 1;\n\n      if (!this.get('routeTemplateAvailabilities').length) {\n        return false;\n      }\n\n      return isShiftLengthZero;\n    }),\n    disableUndobtn: Ember.computed('routeTemplateChangeSet.{isDirty,changes}', 'routeTemplateAvailabilities.@each{isDirty,shiftBreaks.length}', 'selectedAvailability.{routeLength,DOWSelected}', 'isEdited', 'disableEditing', 'hasRouteTemplateChanged', function () {\n      const routeTemplateChangeSet = this.get('routeTemplateChangeSet');\n      const disableEditing = this.get('disableEditing');\n      const hasRouteTemplateChanged = this.get('hasRouteTemplateChanged');\n      const isEdited = this.get('isEdited');\n      const isNew = this.get('isNew');\n      const isSavePerformed = this.get('isSavePerformed');\n      const currentAvailabilitiesLength = this.get('routeTemplateAvailabilities').length;\n      const routeTemplateChanged = routeTemplateChangeSet.get('isDirty') || routeTemplateChangeSet.get('changes').length;\n\n      if (isSavePerformed) {\n        this.hasChanges(!isSavePerformed);\n        return isSavePerformed;\n      }\n\n      if (!currentAvailabilitiesLength && !isNew) {\n        this.hasChanges(!currentAvailabilitiesLength);\n        return currentAvailabilitiesLength;\n      }\n\n      if ((isEdited || isNew) && routeTemplateChanged) {\n        this.hasChanges(true);\n        return false;\n      }\n\n      const returnValue = disableEditing || !hasRouteTemplateChanged || isNew;\n      this.hasChanges(!returnValue);\n      return returnValue;\n    }),\n    disableSavebtn: Ember.computed('routeTemplateChangeSet.{isDirty,changes}', 'routeTemplateAvailabilities.@each{isDirty,shiftBreaks.length}', 'selectedAvailability.{routeLength,DOWSelected}', 'isEdited', 'disableEditing', 'hasRouteTemplateChanged', function () {\n      const disableEditing = this.get('disableEditing');\n      const hasRouteTemplateChanged = this.get('hasRouteTemplateChanged');\n      const isEdited = this.get('isEdited');\n      const currentAvailabilitiesLength = this.get('routeTemplateAvailabilities').length;\n      const isSavePerformed = this.get('isSavePerformed');\n      const zeroShiftLengthAvailabilities = this.get('routeTemplateAvailabilities').filter(availability => {\n        if (!availability.get('routeLength')) return 1;\n        const avail = availability.get('routeLength').replace(/_/img, '0');\n        const shiftLengthDuration = avail.split(':');\n        const hours = shiftLengthDuration[0];\n        const minutes = shiftLengthDuration.length > 1 ? shiftLengthDuration[1] : 0;\n        return parseInt(minutes, 10) === 0 && parseInt(hours, 10) === 0 || avail === '';\n      });\n      const isShiftLengthZero = zeroShiftLengthAvailabilities.length ? 0 : 1;\n      if (isSavePerformed) return isSavePerformed;\n      if (!currentAvailabilitiesLength) return !currentAvailabilitiesLength;\n\n      if (isEdited) {\n        if (!isShiftLengthZero) return !isShiftLengthZero;\n        return !isEdited;\n      }\n\n      return disableEditing || !hasRouteTemplateChanged;\n    }),\n    routeTemplateChangeSet: Ember.computed('routeTemplate', 'selectedRow.selected', 'isSavePerformed', function () {\n      const routeTemplate = (0, _unwrapProxy.unwrapProxy)(this.get('routeTemplate'));\n      return this.setDefaultProperties(routeTemplate);\n    }),\n    routeTemplateAvailabilities: Ember.computed('sortedAvailabilities.@each.{isDeleted,shiftBreaks.length}', function () {\n      const sortedAvailabilities = this.get('sortedAvailabilities') || [];\n      return sortedAvailabilities.filter(avail => !avail.get('isDeleted')).sortBy('DOWSelected.length').reverse();\n    }),\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    async init() {\n      this._super(...arguments);\n\n      const store = this.get('store');\n      const breakTypes = store.peekAll('break-type');\n      const zones = store.peekAll('zone');\n      const noneDriverModel = this.get('noneDriverModel');\n      this.set('options', {\n        max: 10\n      });\n      this.set('breakTypes', breakTypes);\n      this.set('availableZones', zones);\n      this.set('affinityTypes', [_zone.AFFINITY_PREFERRED, _zone.AFFINITY_NORMAL, _zone.AFFINITY_LAST_RESORT, _zone.AFFINITY_NO_SERVICE]);\n      this.hasChanges = this.get('hasChanges').bind(this);\n\n      if (Ember.isNone(noneDriverModel)) {\n        const newRecord = this.get('store').createRecord('driver', {\n          driverId: 'None'\n        });\n        this.set('noneDriverModel', newRecord);\n      }\n\n      this.refreshModelsTask.perform();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const routeMasterSaveFunction = this.get('onSaveRouteMaster').bind(this);\n      const routeMasterEditFunction = this.get('enableEditRouteMaster').bind(this);\n      const onSelectRow = this.get('onSelectRow').bind(this);\n      this.set('routeMasterEditFunction', routeMasterEditFunction);\n      this.set('routeMasterSaveFunction', routeMasterSaveFunction);\n      this.set('onSelectRow', onSelectRow);\n    },\n\n    cleanupNoneDriverModel() {\n      const noneDriverModel = this.get('noneDriverModel');\n\n      if (Ember.isPresent(noneDriverModel)) {\n        noneDriverModel.destroyRecord();\n        this.set('noneDriverModel');\n      }\n    },\n\n    async willDestroy() {\n      const store = this.get('store');\n      const routeTemplates = store.peekAll('route-template');\n      routeTemplates.forEach(routeTemplate => {\n        if (routeTemplate.get('isNew')) {\n          routeTemplate.rollbackAttributes(); // delete any created records\n        } //to remove the newly created or unsaved  route-template-availabilities relationship form route-template\n\n\n        const filteredSortedAvailabilities = routeTemplate.get('availabilities').filter(availability => !availability.get('isNew'));\n        routeTemplate.set('availabilities', filteredSortedAvailabilities);\n      });\n      this.cleanupNoneDriverModel();\n\n      this._super(...arguments);\n    },\n\n    willDestroyElement() {\n      const doUndoRouteMaster = this.get('doUndoRouteMaster').bind(this);\n      doUndoRouteMaster();\n\n      this._super(...arguments);\n    },\n\n    onSelectRow() {\n      const disableBtns = {\n        new: false,\n        edit: false,\n        delete: false // temporary disable deletion option\n\n      };\n      Ember.run.scheduleOnce('afterRender', this, () => this.set('disableBtns', disableBtns));\n      this.set('disableEditing', true);\n      this.set('isEdited', false);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      const store = this.get('store');\n      let pendingRecord = this.get('pendingRecord');\n      this.set('selectedAffinityType', null);\n\n      if (record) {\n        pendingRecord = record;\n      } else if (!pendingRecord) {\n        pendingRecord = store.createRecord('route-template');\n        this.set('pendingRecord', pendingRecord);\n        this.setRouteTemplateAffinity(pendingRecord);\n      }\n\n      if (pendingRecord.get('isNew')) {\n        pendingRecord.setProperties({\n          name: '',\n          tripLimit: '',\n          distanceLimit: '',\n          shiftBreaks: [],\n          vehicle: null\n        });\n      }\n\n      if (record) {\n        this.setPerviousVehicleMap(record.get('availabilities'));\n      }\n\n      const zoneTableRef = this.get('zoneTableRef');\n      const {\n        validateFn,\n        validationMap\n      } = (0, _emberChangesetCpValidations.buildChangeset)(pendingRecord);\n\n      if (zoneTableRef) {\n        Ember.run.scheduleOnce('afterRender', zoneTableRef, 'refreshData');\n        Ember.run.later(() => zoneTableRef.onUncheckAll(), 1000);\n      }\n\n      this.set('showValidations', false);\n      this.hasChanges(false);\n\n      if (pendingRecord) {\n        const availabilities = pendingRecord.get('availabilities') || [];\n        this.configureRouteTemplateAvailabilities(availabilities);\n      }\n\n      return new _emberChangeset.default(pendingRecord, validateFn, validationMap, {\n        skipValidate: true\n      });\n    },\n\n    setRouteTemplateAffinity(routeTemplate) {\n      const zones = this.get('availableZones');\n      const affinities = Array(zones.length).fill(_zone.AFFINITY_NORMAL.val);\n      routeTemplate.set('affinities', affinities);\n    },\n\n    setPerviousVehicleMap(availabilities) {\n      const previousVehicleMap = {};\n      availabilities.forEach((availability, availIndex) => {\n        const vehicleKey = availIndex + availability.get('id');\n        previousVehicleMap[vehicleKey] = availability.get('vehicle');\n      });\n      this.set('previousVehicleMap', previousVehicleMap);\n    },\n\n    configureOptimizationFlags(checked, bitFlag) {\n      const routeTemplate = this.get('routeTemplateChangeSet');\n      const optimizationFlags = routeTemplate.get('optimizationFlags');\n\n      if (checked) {\n        routeTemplate.set('optimizationFlags', optimizationFlags | bitFlag); // turn bit on\n      } else {\n        routeTemplate.set('optimizationFlags', optimizationFlags & ~bitFlag); // turn bit off\n      }\n    },\n\n    configureRouteTemplateAvailabilities(availabilities) {\n      const dayOptions = this.get('daysOfWeek');\n      dayOptions.forEach(option => {\n        Ember.set(option, 'disabled', false);\n      });\n      availabilities.forEach(availability => {\n        const DOWSelected = [];\n        dayOptions.forEach(option => {\n          if (availability.get(option.day)) {\n            Ember.set(option, 'disabled', true);\n            DOWSelected.pushObject(option);\n          }\n        });\n        availability.setProperties({\n          DOWSelected\n        });\n      });\n      const changesets = availabilities.map(availability => {\n        const {\n          validateFn,\n          validationMap\n        } = (0, _emberChangesetCpValidations.buildChangeset)(availability);\n        return new _emberChangeset.default(availability, validateFn, validationMap);\n      });\n      this.set('sortedAvailabilities', changesets);\n      const deSelectedDaysOfOptions = dayOptions.filter(option => option.disabled === false); // no available options remain\n\n      if (!deSelectedDaysOfOptions.length) {\n        this.set('disableAddAvailabilityBtn', true);\n      } else {\n        this.set('disableAddAvailabilityBtn', false);\n      }\n    },\n\n    deleteRecords(records) {\n      return records.reduce((acu, record) => {\n        return acu.then(() => {\n          if (record.get('isNew')) return record.rollbackAttributes();\n          return record.destroyRecord();\n        });\n      }, Promise.resolve());\n    },\n\n    async savePlaceRecord(place) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n\n      if (place) {\n        const zoneType = (0, _unwrapProxy.unwrapProxy)(this.get('store').peekAll('zone-type').get('firstObject'));\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n\n        if (address) {\n          // TODO: We need to deal with how zone name is populated\n          if (Ember.isNone(address.get('zoneName.id'))) {\n            address.set('zoneName', zoneType);\n          }\n\n          await address.save();\n        }\n\n        if (location) {\n          const locationResponse = await locationAdapter.postLocation(location);\n          const locationRecord = await store.findRecord('location', locationResponse.data.id);\n          place.set('location', locationRecord);\n        }\n\n        return place.save();\n      }\n    },\n\n    rollbackPlaceRecord(place) {\n      if (place) {\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n        if (address) address.rollbackAttributes();\n        if (location) location.rollbackAttributes();\n        place.rollbackAttributes();\n      }\n    },\n\n    saveShiftBreakRecords(records) {\n      return records.reduce((acu, record) => {\n        return acu.then(async () => {\n          const place = (0, _unwrapProxy.unwrapProxy)(record.get('place'));\n\n          if (!record.get('isFloatingBreak')) {\n            await this.savePlaceRecord(place);\n          } else {\n            this.rollbackPlaceRecord(place);\n          }\n\n          return record.save();\n        });\n      }, Promise.resolve());\n    },\n\n    async deletePlaceRecord(place) {\n      if (place && !place.get('isNew')) {\n        const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n        if (address) await address.destroyRecord();\n        return;\n      }\n\n      return this.rollbackPlaceRecord(place);\n    },\n\n    deleteShiftBreakRecords(records) {\n      return records.reduce((acu, record) => {\n        return acu.then(async () => {\n          if (record.isDeleted) return;\n          await this.deletePlaceRecord((0, _unwrapProxy.unwrapProxy)(record.get('place')));\n          if (record.get('isNew')) return record.rollbackAttributes();\n          return record.destroyRecord();\n        });\n      }, Promise.resolve());\n    },\n\n    getShiftEndDate(shiftStart, routeLength) {\n      const momentShiftStart = (0, _moment.default)(shiftStart);\n      const {\n        hours,\n        minutes\n      } = this.getDateForRouteLength(routeLength);\n      momentShiftStart.add('hour', hours);\n      momentShiftStart.add('minute', minutes);\n      return momentShiftStart.toDate();\n    },\n\n    rollbackModel() {\n      const routeTemplateModel = this.get('routeTemplate');\n      const availabilities = Ember.isPresent(routeTemplateModel) ? routeTemplateModel.get('availabilities') : [];\n      const previousVehicleMap = this.get('previousVehicleMap');\n\n      if (Ember.isPresent(routeTemplateModel)) {\n        routeTemplateModel.rollbackAttributes();\n      }\n\n      availabilities.forEach((availability, availIndex) => {\n        const shBrks = availability.get('shiftBreaks');\n        const previousSelectedDOW = availability.get('DOWSelected');\n        const previousVehicleMapKey = availIndex + availability.get('id');\n        const previousVehicle = previousVehicleMap[previousVehicleMapKey]; // ember data records if a record is new, it will be removed from the store, otherwise reset it's attributes\n\n        shBrks.forEach(shBrk => {\n          shBrk.rollbackAttributes();\n        });\n        availability.rollbackAttributes();\n\n        if (!availability.get('isDeleted')) {\n          availability.set('DOWSelected', previousSelectedDOW);\n          availability.set('vehicle', previousVehicle);\n        }\n      });\n    },\n\n    onRouteMasterSaveTask: (0, _emberConcurrency.task)(function* () {\n      const routeTemplate = this.get('routeTemplateChangeSet');\n      const availabilities = this.get('routeTemplateAvailabilities');\n      const editedAvailabilities = availabilities.filter(availability => availability.get('isDirty') || availability.get('changes.length') || availability.get('isNew'));\n      const deletedAvailabilities = this.get('sortedAvailabilities').filterBy('isDeleted');\n      const notifications = this.get('notifications');\n      const isNew = this.get('isNew');\n      const isEdited = this.get('isEdited');\n      let isRouteSaveError = '';\n      this.validateTripAndDistanceLimit(routeTemplate);\n      editedAvailabilities.forEach(avail => {\n        const shiftStart = avail.get('shiftStart');\n        avail.setProperties({\n          startTime: shiftStart,\n          shiftEnd: this.getShiftEndDate(shiftStart, avail.get('routeLength')),\n          endTime: MAX_DATE.toDate()\n        });\n        if (avail.get('isNew')) avail.set('routeTemplate', routeTemplate.data);\n      });\n\n      try {\n        if (isNew) {\n          // save route template record\n          yield this.saveRouteTemplateForNew.perform(); // save all shift breaks per availability\n          // including all place, address, and location records\n\n          yield this.saveRouteTemplateAvailabilityForNew.perform();\n        }\n\n        if (isEdited) {\n          // save all shift breaks per availability\n          // including all place, address, and location records\n          yield this.saveRouteTemplateAvailabilityForEdit.perform(editedAvailabilities);\n          const routeTemplateChanged = routeTemplate.get('isDirty') || routeTemplate.get('changes').length;\n\n          if (routeTemplateChanged) {\n            // update route template record when any changes happen\n            yield this.saveRouteTemplateForEdit.perform();\n          }\n        }\n\n        availabilities.map(avail => {\n          const deletedShiftBreaks = avail.get('deletedShiftBreaks') || [];\n          deletedShiftBreaks.map(deletedShiftBreak => {\n            if (deletedShiftBreak.isDeleted) {\n              deletedShiftBreaks.removeObject(deletedShiftBreak);\n            }\n          });\n        });\n        yield deletedAvailabilities.reduce((acu, avail) => {\n          const shiftBreaks = avail.get('shiftBreaks') || [];\n          const deletedShiftBreaks = avail.get('deletedShiftBreaks') || [];\n          shiftBreaks.pushObjects(deletedShiftBreaks);\n          return acu.then(() => avail.data.destroyRecord());\n        }, Promise.resolve());\n        this.get('sortedAvailabilities').removeObject(...deletedAvailabilities);\n        notifications.success(`Successfully Saved Route ${routeTemplate.get('name')}`);\n        this.set('isSavePerformed', true);\n        this.set('isEdited', false);\n        this.set('disableEditing', true);\n      } catch (e) {\n        // rollback model when changesets fails to get saved\n        this.rollbackModel();\n        console.warn(e); //eslint-disable-line\n\n        isRouteSaveError = e;\n        const error = Ember.isPresent(e.errors) ? e.errors.firstObject : {\n          status: e.message\n        };\n        let message;\n\n        switch (error.status) {\n          case '409':\n            message = 'Failed to save. Route Name already exists.';\n            break;\n\n          default:\n            message = 'Failed to save.';\n            break;\n        }\n\n        notifications.warning(message);\n      } finally {\n        if (isRouteSaveError === '') {\n          this.set('pendingRecord', null); // newly record has been saved or been edited\n\n          this.resetForm();\n          this.refreshModelsTask.perform();\n          const tableRef = this.get('tableRef');\n\n          if (tableRef) {\n            tableRef.set('config.selectFirstRow', true);\n            tableRef.get('firstRowSelectedTask').perform();\n          }\n        }\n      }\n    }),\n    saveRouteTemplateForNew: (0, _emberConcurrency.task)(function* () {\n      const routeTemplate = this.get('routeTemplateChangeSet');\n\n      try {\n        return yield routeTemplate.save();\n      } catch (e) {\n        console.warn(e); //eslint-disable-line\n\n        yield routeTemplate.destroyRecord();\n        throw e;\n      }\n    }),\n    saveRouteTemplateForEdit: (0, _emberConcurrency.task)(function* () {\n      const routeTemplate = this.get('routeTemplateChangeSet');\n\n      try {\n        return yield routeTemplate.save();\n      } catch (e) {\n        console.warn(e); //eslint-disable-line\n\n        throw e;\n      }\n    }),\n    saveRouteTemplateAvailabilityForNew: (0, _emberConcurrency.task)(function* () {\n      const availabilities = this.get('routeTemplateAvailabilities');\n\n      try {\n        return yield this.saveRouteTemplateAvailabilityRecords.perform(availabilities);\n      } catch (e) {\n        console.warn(e); //eslint-disable-line\n\n        yield this.routeTemplateAvailabilityOnError.perform(availabilities);\n        throw e;\n      }\n    }),\n    saveRouteTemplateAvailabilityForEdit: (0, _emberConcurrency.task)(function* (changedAvailabilities) {\n      try {\n        return yield this.saveRouteTemplateAvailabilityRecords.perform(changedAvailabilities);\n      } catch (e) {\n        console.warn(e); //eslint-disable-line\n\n        throw e;\n      }\n    }),\n    saveRouteTemplateAvailabilityRecords: (0, _emberConcurrency.task)(function* (availabilities) {\n      yield availabilities.reduce((acu, avail) => {\n        const shiftBreaks = avail.get('shiftBreaks') || [];\n        const deletedShiftBreaks = avail.get('deletedShiftBreaks') || [];\n        return avail.save().then(() => this.saveShiftBreakRecords(shiftBreaks)).then(() => this.deleteShiftBreakRecords(deletedShiftBreaks)).then(() => {\n          avail.set('deletedShiftBreaks', []);\n        });\n      }, Promise.resolve());\n    }),\n    routeTemplateAvailabilityOnError: (0, _emberConcurrency.task)(function* (availabilities) {\n      // delete all shift breaks per availability\n      // including all place, address, and location records\n      yield availabilities.reduce((acu, avail) => {\n        const shiftBreaks = avail.get('shiftBreaks') || [];\n        const deletedShiftBreaks = avail.get('deletedShiftBreaks') || [];\n        shiftBreaks.pushObjects(deletedShiftBreaks);\n        return acu.then(() => this.deleteShiftBreakRecords(shiftBreaks));\n      }, Promise.resolve()); // delete all availabilities\n\n      yield availabilities.reduce((acu, record) => {\n        return acu.then(() => {\n          if (record.get('isNew')) return record.rollback();\n          return record.data.destroyRecord();\n        });\n      }, Promise.resolve());\n    }),\n\n    resetForm() {\n      const disableBtns = {\n        new: false,\n        edit: false,\n        delete: true // temporary disable deletion option\n\n      };\n      Ember.run.scheduleOnce('afterRender', this, () => this.set('disableBtns', disableBtns));\n      this.set('disableEditing', true);\n    },\n\n    onDeleteTask: (0, _emberConcurrency.task)(function* () {\n      const routeTemplate = this.get('routeTemplate'); // selected record to delete\n\n      const availabilities = this.get('routeTemplate.availabilities');\n      const notifications = this.get('notifications');\n\n      try {\n        // delete all shift breaks per availability\n        // including all place, address, and location records\n        yield availabilities.reduce((acu, avail) => {\n          const shiftBreaks = avail.get('shiftBreaks') || [];\n          const deletedShiftBreaks = avail.get('deletedShiftBreaks') || [];\n          shiftBreaks.pushObjects(deletedShiftBreaks);\n          return acu.then(() => this.deleteShiftBreakRecords(shiftBreaks));\n        }, Promise.resolve()); // delete all availabilities\n\n        yield this.deleteRecords(availabilities); // delete route template record\n\n        yield routeTemplate.destroyRecord();\n        notifications.success('Route Master record successfully deleted');\n      } catch (e) {\n        console.warn(e); //eslint-disable-line\n\n        notifications.warning('Route Master record failed to delete.');\n      }\n\n      this.set('pendingRecord', null); // newly record has been saved or been edited\n\n      this.refreshModelsTask.perform();\n      const tableRef = this.get('tableRef');\n\n      if (tableRef) {\n        tableRef.set('config.selectFirstRow', true);\n        tableRef.get('firstRowSelectedTask').perform();\n      }\n    }),\n    onRouteMasterDeleteTask: (0, _emberConcurrency.task)(function* () {\n      const routes = this.get('routeTemplate.routes');\n      const tooltip = this.get('tooltip');\n      const onDeleteTask = this.get('onDeleteTask');\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      const activeRoutes = routes.filter(route => route.get('schedule.id') === currentScheduleId);\n      const sumTrips = activeRoutes.reduce((acu, route) => {\n        const trips = route.get('trips').filter(trip => trip.get('schedule.id') === currentScheduleId);\n        return trips.length + acu;\n      }, 0);\n      const tip = sumTrips > 0 ? `Are you sure you want to delete this Route Master record? Note: There are ${activeRoutes.length} future route(s) and ${sumTrips} future trip(s) associated with this route. Deleting this record will delete the routes and reschedule the trips the next time the schedule is reoptimized.` : `Are you sure you want to delete this Route Master record? There are ${activeRoutes.length} future route(s) associated with this route. Deleting this record will also delete the future route(s).`;\n\n      if (!Ember.isEqual(activeRoutes.get('length'), 0)) {\n        yield tooltip.pushConfirmation({\n          title: 'System Configuration',\n          tip: tip,\n          warning: true,\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            return tooltip.reset();\n          },\n\n          primaryActionText: 'Confirm',\n\n          primaryAction() {\n            onDeleteTask.perform().then(() => {\n              tooltip.reset();\n            });\n          }\n\n        });\n      } else {\n        onDeleteTask.perform();\n      }\n    }),\n    refreshModelsTask: (0, _emberConcurrency.task)(function* () {\n      const tableRef = this.get('tableRef');\n      const routeTemplate = this.get('routeTemplate');\n      if (routeTemplate && routeTemplate.isDeleted) Ember.run.scheduleOnce('afterRender', tableRef, 'onUncheckAll'); // empty tableRef checkedrows\n\n      if (tableRef) Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n\n      yield this.get('store').query('route-template', {});\n      yield this.get('store').findAll('route-template-availability'); // find a better place for api\n\n      yield this.get('store').findAll('shift-break'); // find a better place for api\n    }).drop(),\n    validateRecordTask: (0, _emberConcurrency.task)(function* () {\n      const result = this.validateRecord();\n      return yield result.then(valid => {\n        this.set('showValidations', !valid);\n        return valid;\n      });\n    }).drop(),\n\n    checkShiftLength(availability) {\n      //routeLength is required field,validate the routeLength if only routeLength is available\n      if (Ember.isEmpty(availability.get('routeLength'))) return;\n      const availableLength = availability.get('routeLength').replace(/_/img, '0');\n      const shiftLengthDuration = availableLength.split(':');\n      const shiftHours = shiftLengthDuration[0];\n      const shiftMinutes = shiftLengthDuration.length > 1 ? shiftLengthDuration[1] : 0;\n\n      if (parseInt(shiftHours, 10) === 0 && parseInt(shiftMinutes, 10) === 0) {\n        availability.addError('routeLength', {\n          value: availableLength,\n          validation: 'Shift Length must be greater than 00:00.'\n        });\n      }\n    },\n\n    isEndSpanToFuture(shiftStart, routeLength) {\n      // Parse shiftStart as a moment object\n      var t1 = (0, _moment.default)(shiftStart, 'HH:mm');\n      var t2 = routeLength.split(':'); // Extract hours and minutes for routeLength\n\n      var hours2 = parseInt(t2[0], 10);\n      var minutes2 = parseInt(t2[1], 10); // Add routeLength to shiftStart\n\n      t1.add(hours2, 'hours').add(minutes2, 'minutes'); // Check if the resulting time is on the next day\n\n      return t1.isAfter((0, _moment.default)(shiftStart, 'HH:mm').endOf('day'));\n    },\n\n    getTransformedCurrentDate(date) {\n      let spanToFuture = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (!date) return null;\n      const recordDate = (0, _moment.default)(date);\n      const momentTime = (0, _moment.default)();\n\n      if (spanToFuture) {\n        momentTime.add(1, 'days');\n      }\n\n      momentTime.set('hour', recordDate.get('hour'));\n      momentTime.set('minute', recordDate.get('minute'));\n      momentTime.set('second', recordDate.get('second'));\n      return momentTime.toDate();\n    },\n\n    async validateRecord() {\n      const routeTemplateChangeSet = this.get('routeTemplateChangeSet');\n      const sortedAvailabilities = this.get('routeTemplateAvailabilities');\n      const routeName = this.get('routeTemplateChangeSet.name');\n      const tooltip = this.get('tooltip');\n      let errors = [];\n      let validate = false;\n      validate = await routeTemplateChangeSet.validate();\n      errors = routeTemplateChangeSet.errors;\n      await sortedAvailabilities.reduce((acu, availability) => {\n        return acu.then(async () => {\n          const shiftBreaks = availability.get('shiftBreaks') || [];\n          const availableLength = availability.get('routeLength');\n          await availability.validate(); // Checking the Vehicle name\n\n          if (!(0, _unwrapProxy.unwrapProxy)(availability.get('vehicle'))) {\n            availability.addError('vehicle', {\n              value: null,\n              validation: 'Vehicle cannot be blank.'\n            });\n          } // Chekcing the Shift length\n\n\n          this.checkShiftLength(availability); // Prevents entering Shift End Time less than the Existing Break Time\n\n          const isShiftBreaksValid = shiftBreaks.every(shiftBreak => {\n            const shiftStartTime = this.getTransformedCurrentDate(availability.get('shiftStart'));\n            const spanToFuture = this.isEndSpanToFuture(availability.get('shiftStart'), availability.get('routeLength'));\n            const calcEndDate = this.getTransformedCurrentDate(availability.get('calcEndDate'), spanToFuture);\n            const minutesPlannedDuration = parseInt(shiftBreak.get('minutesPlannedDuration'), 10);\n            const requestTime = this.getTransformedCurrentDate(this.getRequestTime(shiftBreak.get('requestTime'), minutesPlannedDuration));\n            return (0, _moment.default)(requestTime).isBetween(shiftStartTime, calcEndDate);\n          });\n\n          if (isShiftBreaksValid) {\n            return;\n          }\n\n          availability.addError('routeLength', {\n            value: availableLength,\n            validation: 'Shift length must include existing break time.'\n          });\n        });\n      }, Promise.resolve());\n      sortedAvailabilities.forEach(availability => {\n        if (availability.errors.length > 0) {\n          errors.pushObjects(availability.errors);\n        }\n      });\n      errors = (0, _lodash.uniqBy)(errors, error => error.key);\n      validate = sortedAvailabilities.every(availability => availability.isValid);\n\n      if (sortedAvailabilities.length <= 0) {\n        errors.pushObject({\n          key: '',\n          validation: 'Must have at least one availability.',\n          value: ''\n        });\n        validate = false;\n      } // NYAAR-16513 maximum route name value length 10 digit and below 2,147,483,647.\n\n\n      if (parseInt(routeName, 10) > MAX_ROUTE_VALUE) {\n        errors.pushObject({\n          key: '',\n          validation: 'Route Name should not exceeds the maximum value 2147483647',\n          value: ''\n        });\n        validate = false;\n      }\n\n      if (!validate || !routeTemplateChangeSet.isValid) {\n        tooltip.pushConfirmation({\n          title: 'System Configuration',\n          tip: '',\n          errors,\n          primaryActionText: 'OK',\n\n          primaryAction() {\n            return tooltip.popConfirmation();\n          }\n\n        });\n      }\n\n      return routeTemplateChangeSet.isValid && validate;\n    },\n\n    calcShiftEndFromShiftStart(targetShiftStart, targetRouteLength) {\n      const shiftStart = targetShiftStart;\n      const routeLength = targetRouteLength.split(':');\n      const shiftEnd = (0, _moment.default)(shiftStart);\n\n      if (routeLength || routeLength.length === 2) {\n        const routeLengthHour = parseInt(routeLength[0], 10) || 0;\n        const routeLengthMinute = parseInt(routeLength[1], 10) || 0;\n        shiftEnd.add({\n          h: routeLengthHour,\n          m: routeLengthMinute\n        });\n      }\n\n      return shiftEnd.toDate();\n    },\n\n    _isDayOrHolidayOverlap(target, item) {\n      return item.monday && target.monday || item.tuesday && target.tuesday || item.wednesday && target.wednesday || item.thursday && target.thursday || item.friday && target.friday || item.saturday && target.saturday || item.sunday && target.sunday || item.holiday && target.holiday;\n    },\n\n    hasVehicleShiftOverlap(availability, availabilities) {\n      const availabilitiesArr = availabilities.toArray();\n\n      if (!availability || availabilitiesArr.length < 1) {\n        return false;\n      }\n\n      const targetId = availability.get('id');\n      const targetVehicleId = availability.get('vehicle.id');\n      const targetVehiclePlaceholder = availability.get('vehicle.placeholder');\n\n      if (targetVehiclePlaceholder) {\n        return false;\n      }\n\n      const targetStart = availability.get('shiftStart');\n      const targetRouteLength = availability.get('routeLength');\n      const targetEnd = this.calcShiftEndFromShiftStart(targetStart, targetRouteLength);\n      const targetDays = {\n        monday: availability.get('monday'),\n        tuesday: availability.get('tuesday'),\n        wednesday: availability.get('wednesday'),\n        thursday: availability.get('thursday'),\n        friday: availability.get('friday'),\n        saturday: availability.get('saturday'),\n        sunday: availability.get('sunday'),\n        holiday: availability.get('holiday')\n      };\n      return availabilitiesArr.some(item => {\n        if (!item || item.get('vehicle.id') !== targetVehicleId || item.get('id') === targetId || item.get('vehicle.placeholder')) {\n          return false;\n        }\n\n        const itemStartTimeMs = getTimeInMilliseconds(item.get('shiftStart'));\n        const itemEndTimeMs = getTimeInMilliseconds(item.get('shiftEnd'));\n        const targetStartTimeMs = getTimeInMilliseconds(targetStart);\n        const targetEndTimeMs = getTimeInMilliseconds(targetEnd);\n        const isTimeOverlapping = itemStartTimeMs < targetEndTimeMs && itemEndTimeMs > targetStartTimeMs;\n\n        if (!isTimeOverlapping) {\n          return false;\n        }\n\n        const itemDays = {\n          monday: item.get('monday'),\n          tuesday: item.get('tuesday'),\n          wednesday: item.get('wednesday'),\n          thursday: item.get('thursday'),\n          friday: item.get('friday'),\n          saturday: item.get('saturday'),\n          sunday: item.get('sunday'),\n          holiday: item.get('holiday')\n        };\n        return this._isDayOrHolidayOverlap(targetDays, itemDays);\n      });\n    },\n\n    async validateShiftOverlap() {\n      const routeTemplateAvailabilities = this.get('routeTemplateAvailabilities');\n      const allAvailabilities = await this.store.peekAll('route-template-availability');\n      const result = {\n        hasShiftOverlap: false,\n        vehicleName: null\n      };\n      routeTemplateAvailabilities.forEach(availability => {\n        result.hasShiftOverlap = this.hasVehicleShiftOverlap(availability, allAvailabilities);\n        result.vehicleName = availability.get('vehicle.name');\n      });\n      return result;\n    },\n\n    getRequestTime(requestTime, minutesPlannedDuration) {\n      const formattedRequestTime = this.getTransformedDate(requestTime);\n\n      if (formattedRequestTime && minutesPlannedDuration) {\n        formattedRequestTime.setMinutes(formattedRequestTime.getMinutes() + minutesPlannedDuration);\n        return formattedRequestTime;\n      }\n\n      return formattedRequestTime;\n    },\n\n    getTransformedDate(date) {\n      if (!date) return null;\n      const recordDate = (0, _moment.default)(date);\n      const momentTime = (0, _moment.default)(new Date(null));\n      momentTime.set('hour', recordDate.get('hour'));\n      momentTime.set('minute', recordDate.get('minute'));\n      momentTime.set('second', recordDate.get('second'));\n      return momentTime.toDate();\n    },\n\n    async onVehicleChange(record, vehicle) {\n      let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'vehicle';\n      record.set(path, vehicle);\n\n      if (!record.get('vehicle.provider.isBrokerProviderType')) {\n        record.set('routeLimit', 0);\n      } else {\n        this.actions.onRouteLimitChange(record, 0);\n      }\n    },\n\n    async onDriverChange(record, driver) {\n      let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'driver';\n\n      if (Ember.isEmpty(driver.get('id'))) {\n        record.set(path, null);\n      } else {\n        record.set(path, driver);\n      }\n    },\n\n    async onDateChange(record, path, dateStr) {\n      record.set(path, dateStr);\n      const calcEndDate = this.get('calcEndDate').call(this, dateStr, record.get('routeLength'));\n      record.set('calcEndDate', calcEndDate);\n    },\n\n    async onSaveRouteMaster() {\n      const notifications = this.get('notifications');\n      const valid = await this.validateRecord();\n      const overlapResult = await this.validateShiftOverlap();\n\n      if (valid && !overlapResult.hasShiftOverlap) {\n        this.set('showValidations', false);\n        return this.onRouteMasterSaveTask.perform();\n      }\n\n      if (overlapResult.hasShiftOverlap) {\n        notifications.warning(`There are overlapping shift for this vehicle ${overlapResult.vehicleName}.`);\n        return false;\n      }\n\n      this.set('showValidations', true);\n      return false;\n    },\n\n    validateTripAndDistanceLimit(routeTemplate) {\n      // default values\n      if (Ember.isEmpty(routeTemplate.get('tripLimit'))) {\n        routeTemplate.set('tripLimit', MAX_TRIP_LIMIT);\n      }\n\n      if (Ember.isEmpty(routeTemplate.get('distanceLimit'))) {\n        routeTemplate.set('distanceLimit', MAX_DISTANCE_LIMIT);\n      }\n    },\n\n    enableEditRouteMaster() {\n      const routeTemplate = this.get('routeTemplate');\n      if (!routeTemplate) return;\n      const disableBtns = {\n        new: true,\n        edit: true,\n        delete: true\n      };\n      Ember.run.scheduleOnce('afterRender', this, () => {\n        this.set('disableBtns', disableBtns);\n        this.set('disableEditing', false);\n      });\n    },\n\n    getShiftStartDate(shiftStart) {\n      if (!shiftStart) return null;\n      const momentShiftStart = (0, _moment.default)(shiftStart);\n      const momentTime = (0, _moment.default)(new Date(null));\n      momentTime.set('hour', momentShiftStart.get('hour'));\n      momentTime.set('minute', momentShiftStart.get('minute'));\n      momentTime.set('second', momentShiftStart.get('second'));\n      return momentTime.toDate();\n    },\n\n    calcEndDate(shiftStart, routeLength) {\n      const start = this.getShiftStartDate(shiftStart);\n      if (!start || !routeLength) return null;\n      const clone = (0, _moment.default)(start);\n      const {\n        hours,\n        minutes\n      } = this.getDateForRouteLength(routeLength);\n      clone.add(hours, 'hours');\n      clone.add(minutes, 'minutes');\n      return clone.toDate();\n    },\n\n    getDateForRouteLength(routeLength) {\n      const duration = routeLength.split(':');\n      const hours = duration[0];\n      const minutes = duration.length > 1 ? duration[1] : 0;\n      return {\n        hours,\n        minutes\n      };\n    },\n\n    setAvailability(availability) {\n      this.set('selectedAvailability', availability);\n    },\n\n    doUndoRouteMaster() {\n      const routeTemplateChangeSet = this.get('routeTemplateChangeSet');\n      const routeTemplateAvailabilities = this.get('routeTemplateAvailabilities');\n      const previousVehicleMap = this.get('previousVehicleMap');\n      const zoneTableRef = this.get('zoneTableRef'); // On rollback, all changes are dropped and the underlying Object is left untouched for all changeset objects\n      // ember data related records will be rolled back and if its new deleted\n\n      routeTemplateChangeSet.rollback();\n      const availabilities = routeTemplateChangeSet.get('availabilities') || [];\n      availabilities.filter(avail => Ember.isPresent((0, _unwrapProxy.unwrapProxy)(avail))).forEach((availability, availIndex) => {\n        const shBrks = availability.get('shiftBreaks');\n        const previousSelectedDOW = availability.get('DOWSelected');\n        const previousVehicleMapKey = availIndex + availability.get('id');\n        const previousVehicle = previousVehicleMap[previousVehicleMapKey]; // ember data records if a record is new, it will be removed from the store, otherwise reset it's attributes\n\n        shBrks.forEach(shBrk => {\n          shBrk.rollbackAttributes();\n        });\n        availability.rollbackAttributes();\n\n        if (Ember.isPresent(routeTemplateAvailabilities)) {\n          routeTemplateAvailabilities.forEach(avail => {\n            const shiftBreaks = avail.get('shiftBreaks') || [];\n            const deletedShiftBreaks = avail.get('deletedShiftBreaks') || [];\n\n            if (Ember.isPresent(deletedShiftBreaks)) {\n              shiftBreaks.pushObjects(deletedShiftBreaks);\n            }\n          });\n        }\n\n        if (!availability.get('isDeleted')) {\n          availability.set('DOWSelected', previousSelectedDOW);\n          availability.set('vehicle', previousVehicle);\n        }\n      });\n      this.configureRouteTemplateAvailabilities(availabilities);\n\n      if (zoneTableRef !== null) {\n        zoneTableRef.refreshData();\n        zoneTableRef.onUncheckAll();\n      }\n\n      this.set('selectedAffinityType', null);\n    },\n\n    actions: {\n      newRouteMaster() {\n        const selectedRow = this.get('selectedRow');\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n          this.set('tableRef.config.selectFirstRow', false);\n        }\n\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: true\n        };\n        const dayOptions = this.get('daysOfWeek');\n        dayOptions.forEach(option => {\n          Ember.set(option, 'disabled', false);\n        });\n        this.set('disableBtns', disableBtns);\n        this.set('disableEditing', false);\n        this.set('isEdited', false);\n        this.set('isSavePerformed', false);\n        this.set('isNew', true);\n      },\n\n      editRouteMaster() {\n        this.enableEditRouteMaster();\n        const routeTemplate = this.get('routeTemplate');\n        const selectedRecord = this.get('selectedRecord');\n        this.setPerviousVehicleMap(selectedRecord.get('availabilities'));\n        if (!routeTemplate) return;\n        const disableBtns = {\n          new: true,\n          edit: true,\n          delete: true\n        };\n        this.set('disableBtns', disableBtns);\n        this.set('isEdited', true);\n        this.set('isSavePerformed', false);\n        this.set('disableEditing', false);\n        this.set('isNew', false);\n      },\n\n      undoRouteMaster() {\n        this.doUndoRouteMaster();\n      },\n\n      async saveRouteMaster() {\n        return this.onSaveRouteMaster();\n      },\n\n      deleteRouteMaster() {\n        this.onRouteMasterDeleteTask.perform();\n      },\n\n      openVehicleSearchModal(availability) {\n        const onVehicleChange = this.get('onVehicleChange').bind(this);\n        const searchVehicleObj = Ember.Object.create({\n          title: 'Find Vehicles',\n          hasOverlay: true,\n          config: _vehicleSearchConfig.default,\n          primaryActionText: 'Select',\n          className: 'vehicle-search',\n          primaryAction: record => {\n            onVehicleChange(availability, record);\n          },\n          queryParams: {\n            useVehicleService: true\n          }\n        });\n        this.set('noneRecord');\n        this.set('modalAPI', searchVehicleObj);\n      },\n\n      openDriverSearchModal(availability) {\n        const onDriverChange = this.get('onDriverChange').bind(this);\n        const noneDriverModel = this.get('noneDriverModel');\n        const searchDriverObj = Ember.Object.create({\n          title: 'Find Drivers',\n          hasOverlay: true,\n          config: _driverSearchConfig.default,\n          primaryActionText: 'Select',\n          className: 'vehicle-search',\n          primaryAction: record => {\n            onDriverChange(availability, record);\n          }\n        });\n        this.set('noneRecord', noneDriverModel);\n        this.set('modalAPI', searchDriverObj);\n      },\n\n      /**\n       * REG-NYAAR-19112 fetch shift break place address by shift break place\n       * @param availability - route-template-availablity\n       * @param day\n       * @returns {Promise<void>}\n       */\n      async openBreakModal(availability, day) {\n        const shiftBreaks = availability.get('shiftBreaks').toArray();\n        const breakPlaceIds = shiftBreaks.filter(shiftBreak => {\n          const place = (0, _unwrapProxy.unwrapProxy)(shiftBreak.get('place'));\n          return place && place.get('id');\n        }).map(shiftBreak => shiftBreak.get('place.id')).join(',');\n        const placesQuery = `in(id,(${breakPlaceIds}))&include=address,location`;\n        await this.get('store').query('place', {\n          filter: placesQuery\n        });\n        availability.set('day', day);\n        this.set('isDriverBreakModalEnabled', true);\n        this.set('driverBreakAvailability', availability);\n      },\n\n      onDateChange(record, path, value) {\n        this.onDateChange(record, path, value);\n      },\n\n      onTextChange(record, path, value) {\n        record.set(path, value);\n      },\n\n      onRouteLengthChange: async function (availability, maskObj) {\n        const routeLength = maskObj.masked;\n        const oldVal = availability.get('routeLength'); // This method gets called multiple times (even while hitting a ENTER key). So If oldValue is equal to newValue then no need to validate\n\n        if (routeLength === oldVal) {\n          return;\n        }\n\n        let value = maskObj.masked.replace(/_/img, '0');\n        if (!value) value = '00:00';\n        availability.set('routeLength', routeLength);\n        const calcEndDate = this.get('calcEndDate').call(this, availability.get('shiftStart'), value);\n        availability.set('calcEndDate', calcEndDate);\n        this.setAvailability(availability);\n      },\n\n      onAffinitySelect(option) {\n        const availableZones = this.get('availableZones');\n        const pendingRecord = this.get('routeTemplateChangeSet');\n        const zones = this.get('zoneTableRef.checkedRows');\n        const zoneIds = availableZones.map(zone => parseInt(zone.get('id'), 10)).filter(zoneId => Ember.isPresent(zoneId) && !(0, _lodash.isNaN)(zoneId));\n        const affinities = pendingRecord.get('affinities') || [];\n        const maxZoneId = Math.max(...zoneIds, affinities.length);\n        const newSize = Math.max(maxZoneId, affinities.length);\n        const newAffinities = Array(newSize).fill(0);\n        this.set('selectedAffinityType', option);\n        zones.setEach('affinityValue', option.val); // configured affinities to contain all imaginable zone changes\n\n        affinities.forEach((aff, index) => {\n          newAffinities[index] = aff;\n        });\n        zones.forEach(zone => {\n          //affinities index start from [0-16] and zone Ids starts from 1-17\n          const zoneId = parseInt(zone.get('zoneId') - 1, 10);\n          newAffinities[zoneId] = option.val;\n        });\n        pendingRecord.set('affinities', newAffinities);\n      },\n\n      onAdjustDriverBreakCheckBoxClick(event) {\n        const checked = event.target.checked;\n        this.configureOptimizationFlags(checked, _routeTemplate.ADJUST_BREAK_FLAG);\n      },\n\n      onConsolidateCheckBoxClick(event) {\n        const checked = event.target.checked;\n        this.configureOptimizationFlags(checked, _routeTemplate.CONSOLIDATE_ROUTE_FLAG);\n      },\n\n      onSchedulingModeClick(event) {\n        const checked = event.target.checked;\n        const routeTemplate = this.get('routeTemplateChangeSet');\n\n        if (checked) {\n          routeTemplate.set('schedulingMode', _routeTemplate.MANUAL_SCHEDULING_MODE);\n        } else {\n          routeTemplate.set('schedulingMode', _routeTemplate.AUTOMATIC_SCHEDULING_MODE);\n        }\n      },\n\n      onKeeperTypeClick(event) {\n        const checked = event.target.checked;\n        const routeTemplate = this.get('routeTemplateChangeSet');\n\n        if (checked) {\n          routeTemplate.set('type', _routeTemplate.ROUTE_TEMPLATE_TYPE_KEEPER);\n        } else {\n          routeTemplate.set('type', _routeTemplate.ROUTE_TEMPLATE_TYPE_REGULAR);\n        }\n      },\n\n      async onRouteLimitChange(availability, value) {\n        let routeLimitValue = parseInt(value, 10);\n\n        if ((0, _lodash.isNaN)(routeLimitValue)) {\n          routeLimitValue = 0;\n        }\n\n        availability.set('routeLimit', routeLimitValue);\n      },\n\n      async onDOWChange(availability, options) {\n        const routeTemplateAvailabilities = this.get('routeTemplateAvailabilities').filter(avail => avail !== availability);\n        const dayOptions = this.get('daysOfWeek');\n        const DOWSelected = [];\n        dayOptions.forEach(day => {\n          availability.set(day.day, false);\n        });\n        let deselectedDayOptions = (0, _lodash.difference)(dayOptions, options);\n        options.forEach(option => {\n          availability.set(option.day, true);\n          const findDay = dayOptions.find(dayOption => dayOption.day === option.day);\n          Ember.set(findDay, 'disabled', true);\n          DOWSelected.pushObject(findDay);\n        });\n        routeTemplateAvailabilities.forEach(avail => {\n          deselectedDayOptions = (0, _lodash.difference)(deselectedDayOptions, avail.get('DOWSelected'));\n        });\n        deselectedDayOptions.forEach(option => {\n          Ember.set(option, 'disabled', false);\n        }); // no available options remain\n\n        if (!deselectedDayOptions.length) {\n          this.set('disableAddAvailabilityBtn', true);\n        } else {\n          this.set('disableAddAvailabilityBtn', false);\n        }\n\n        availability.set('DOWSelected', DOWSelected);\n        this.setAvailability(availability);\n      },\n\n      addNewAvailability() {\n        const store = this.get('store');\n        const routeTemplate = this.get('routeTemplate');\n        const routeTemplateAvailability = store.createRecord('route-template-availability', {\n          shiftStart: new Date(),\n          routeTemplate\n        });\n        const {\n          validateFn,\n          validationMap\n        } = (0, _emberChangesetCpValidations.buildChangeset)(routeTemplateAvailability);\n        const changeset = new _emberChangeset.default(routeTemplateAvailability, validateFn, validationMap);\n        this.get('sortedAvailabilities').pushObject(changeset);\n      },\n\n      onRemoveAvailability(availability) {\n        const dayOptions = this.get('daysOfWeek');\n        const DOWSelected = availability.get('DOWSelected');\n        const deselectedDayOptions = (0, _lodash.intersection)(dayOptions, DOWSelected);\n        deselectedDayOptions.forEach(option => {\n          Ember.set(option, 'disabled', false);\n        });\n        availability.set('isDeleted', true);\n        const remainingDays = dayOptions.filter(option => !option.disabled);\n\n        if (remainingDays.length > 0) {\n          this.set('disableAddAvailabilityBtn', false);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/driver-search-config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'driver',\n    title: 'Driver',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    inactiveProviderFilterPath: 'provider.id',\n    columns: [{\n      id: 'id',\n      index: 0,\n      type: 'uuid',\n      label: 'ID',\n      valuePath: 'driverId',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'providerID',\n      index: 1,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'lastName',\n      index: 2,\n      type: 'text',\n      label: 'Last Name',\n      valuePath: 'lastName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'firstName',\n      index: 3,\n      type: 'text',\n      label: 'First Name',\n      valuePath: 'firstName',\n      defaultWidth: 130,\n      searchable: true\n    }, {\n      id: 'middleInitial',\n      index: 4,\n      type: 'text',\n      label: 'MI',\n      valuePath: 'middleInitial',\n      defaultWidth: 30,\n      format: 'HH:mm',\n      searchable: true\n    }, {\n      id: 'driverCdlNumber',\n      index: 5,\n      type: 'string',\n      label: 'CDL',\n      valuePath: 'license.license',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'startDate',\n      index: 6,\n      type: 'date',\n      label: 'Start Date',\n      valuePath: 'startDateDs870',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'phoneNumbers',\n      index: 7,\n      type: 'text',\n      label: 'Phone Number',\n      valuePath: 'phoneNumbers.firstObject.formattedPhoneNumber',\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/route-master/table/config\"], function (_exports, _component, _config) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const LOAD_INTERVAL = 1000;\n\n  var _default = _component.default.extend({\n    classNames: ['route-master-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    workspace: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      } //Before loading route-template records, fetch the models(route-template-availability, vehicle,shift-break )\n\n\n      this.set('isLoading', true);\n      await this.fetchModels();\n      Ember.run.later(() => {\n        if (this.get('isDestroyed')) return;\n        this.set('isLoading', false);\n        Ember.run.scheduleOnce('afterRender', this, 'refreshData');\n      }, LOAD_INTERVAL);\n    },\n\n    async fetchModels() {\n      const currentScheduleId = this.get('workspace.currentSchedule.id');\n      const store = this.get('store');\n      const modelPromises = [store.findAll('route-template-availability'), store.findAll('driver'), store.query('vehicle', {\n        useVehicleService: true\n      }), store.findAll('shift-break'), store.query('route', {\n        filter: `eq(scheduleId,${currentScheduleId})&include=trips`\n      })];\n      await Promise.all(modelPromises);\n    },\n\n    fetchDataQuery() {\n      if (this.get('isLoading')) {\n        return Promise.resolve([]);\n      }\n\n      return this._super(...arguments).then(records => {\n        return records.filter(record => !record.get('isNew'));\n      });\n    },\n\n    hasPendingChanges: Ember.computed('hasRouteTemplateChanged', function () {\n      const hasRouteTemplateChanged = this.get('hasRouteTemplateChanged') || false;\n      return hasRouteTemplateChanged;\n    }),\n\n    saveRecord(record) {\n      const saveRecordTask = this.get('saveRecordTask');\n      if (saveRecordTask) return saveRecordTask();\n      return record.save();\n    },\n\n    actions: {\n      onRowClick(currentRow, event) {\n        this._super(currentRow, event);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/table/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'route-template',\n    title: 'Route Master',\n    tooltipTitle: 'System Configuration',\n    defaultSortId: 'routeName',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'routeName',\n      index: 0,\n      type: 'text',\n      label: 'Route Name',\n      valuePath: 'name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'active',\n      index: 1,\n      type: 'boolean',\n      label: 'Active',\n      valuePath: 'active',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'manualTripsOnly',\n      index: 2,\n      type: 'text',\n      label: 'Manual Trips Only',\n      valuePath: 'schedulingMode',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'monVehicle',\n      index: 3,\n      type: 'uuid',\n      label: 'Mon Vehicle',\n      valuePath: 'mondayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'monDriver',\n      index: 4,\n      type: 'uuid',\n      label: 'Mon Driver',\n      valuePath: 'mondayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'monShiftStart',\n      index: 5,\n      type: 'date',\n      label: 'Mon Shift Start',\n      valuePath: 'mondayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'monShiftEnd',\n      index: 6,\n      type: 'date',\n      label: 'Mon Shift End',\n      valuePath: 'mondayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'monShiftLength',\n      index: 7,\n      type: 'text',\n      label: 'Mon Shift Length',\n      valuePath: 'mondayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'tuesVehicle',\n      index: 8,\n      type: 'uuid',\n      label: 'Tues Vehicle',\n      valuePath: 'tuesdayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'tueDriver',\n      index: 9,\n      type: 'uuid',\n      label: 'Tues Driver',\n      valuePath: 'tuesdayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'tuesShiftStart',\n      index: 10,\n      type: 'date',\n      label: 'Tues Shift Start',\n      valuePath: 'tuesdayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'tuesShiftEnd',\n      index: 11,\n      type: 'date',\n      label: 'Tues Shift End',\n      valuePath: 'tuesdayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'tuesShiftLength',\n      index: 12,\n      type: 'text',\n      label: 'Tues Shift Length',\n      valuePath: 'tuesdayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'wedVehicle',\n      index: 13,\n      type: 'uuid',\n      label: 'Wed Vehicle',\n      valuePath: 'wednesdayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'wedDriver',\n      index: 14,\n      type: 'uuid',\n      label: 'Wed Driver',\n      valuePath: 'wednesdayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'wedShiftStart',\n      index: 15,\n      type: 'date',\n      label: 'Wed Shift Start',\n      valuePath: 'wednesdayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: false\n    }, {\n      id: 'wedShiftEnd',\n      index: 16,\n      type: 'date',\n      label: 'Wed Shift End',\n      valuePath: 'wednesdayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'wedShiftLength',\n      index: 17,\n      type: 'text',\n      label: 'Wed Shift Length',\n      valuePath: 'wednesdayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'thurVehicle',\n      index: 18,\n      type: 'uuid',\n      label: 'Thur Vehicle',\n      valuePath: 'thursdayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'thurDriver',\n      index: 19,\n      type: 'uuid',\n      label: 'Thur Driver',\n      valuePath: 'thursdayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'thurShiftStart',\n      index: 20,\n      type: 'date',\n      label: 'Thur Shift Start',\n      valuePath: 'thursdayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: false\n    }, {\n      id: 'thurShiftEnd',\n      index: 21,\n      type: 'date',\n      label: 'Thur Shift End',\n      valuePath: 'thursdayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'thurShiftLength',\n      index: 22,\n      type: 'text',\n      label: 'Thur Shift Length',\n      valuePath: 'thursdayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'friVehicle',\n      index: 23,\n      type: 'uuid',\n      label: 'Fri Vehicle',\n      valuePath: 'fridayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'friDriver',\n      index: 24,\n      type: 'uuid',\n      label: 'Fri Driver',\n      valuePath: 'fridayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'friShiftStart',\n      index: 25,\n      type: 'date',\n      label: 'Fri Shift Start',\n      valuePath: 'fridayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'friShiftEnd',\n      index: 26,\n      type: 'date',\n      label: 'Fri Shift End',\n      valuePath: 'fridayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'friShiftLength',\n      index: 27,\n      type: 'text',\n      label: 'Fri Shift Length',\n      valuePath: 'fridayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'satVehicle',\n      index: 28,\n      type: 'uuid',\n      label: 'Sat Vehicle',\n      valuePath: 'saturdayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'satDriver',\n      index: 29,\n      type: 'uuid',\n      label: 'Sat Driver',\n      valuePath: 'saturdayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'satShiftStart',\n      index: 30,\n      type: 'date',\n      label: 'Sat Shift Start',\n      valuePath: 'saturdayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'satShiftEnd',\n      index: 31,\n      type: 'date',\n      label: 'Sat Shift End',\n      valuePath: 'saturdayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'satShiftLength',\n      index: 32,\n      type: 'text',\n      label: 'Sat Shift Length',\n      valuePath: 'saturdayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'sunVehicle',\n      index: 33,\n      type: 'uuid',\n      label: 'Sun Vehicle',\n      valuePath: 'sundayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'sunDriver',\n      index: 34,\n      type: 'uuid',\n      label: 'Sun Driver',\n      valuePath: 'sundayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'sunShiftStart',\n      index: 35,\n      type: 'date',\n      label: 'Sun Shift Start',\n      valuePath: 'sundayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: false\n    }, {\n      id: 'sunShiftEnd',\n      index: 36,\n      type: 'date',\n      label: 'Sun Shift End',\n      valuePath: 'sundayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'sunShiftLength',\n      index: 37,\n      type: 'text',\n      label: 'Sun Shift Length',\n      valuePath: 'sundayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }, {\n      id: 'holVehicle',\n      index: 38,\n      type: 'uuid',\n      label: 'Holiday Vehicle',\n      valuePath: 'holidayAvailability.vehicle.name',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'holDriver',\n      index: 39,\n      type: 'uuid',\n      label: 'Holiday Driver',\n      valuePath: 'holidayAvailability.driver.driverId',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'holShiftStart',\n      index: 40,\n      type: 'date',\n      label: 'Holiday Shift Start',\n      valuePath: 'holidayAvailability.shiftStart',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'holShiftEnd',\n      index: 41,\n      type: 'date',\n      label: 'Holiday Shift End',\n      valuePath: 'holidayAvailability.shiftEnd',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.timeMoment}`,\n      searchable: true\n    }, {\n      id: 'holShiftLength',\n      index: 42,\n      type: 'text',\n      label: 'Holiday Shift Length',\n      valuePath: 'holidayAvailability.routeLength',\n      defaultWidth: 100,\n      format: 'hh:mm',\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"pa8KUa2f\",\n    \"block\": \"{\\\"symbols\\\":[\\\"w\\\",\\\"option\\\",\\\"availability\\\",\\\"index\\\",\\\"option\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"disableUndobtn\\\"],[\\\"Route Master\\\",[27,\\\"action\\\",[[22,0,[]],\\\"newRouteMaster\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editRouteMaster\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deleteRouteMaster\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoRouteMaster\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"saveRouteMaster\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-dds\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"side-drawer/system-config/route-master/table\\\",null,[[\\\"tableRef\\\",\\\"onSelectRow\\\",\\\"disabled\\\",\\\"saveRecordTask\\\",\\\"hasRouteTemplateChanged\\\",\\\"validateRecord\\\",\\\"rollbackRecord\\\"],[[23,[\\\"tableRef\\\"]],[23,[\\\"onSelectRow\\\"]],[27,\\\"not\\\",[[23,[\\\"disableEditing\\\"]]],null],[23,[\\\"routeMasterSaveFunction\\\"]],[23,[\\\"hasRouteTemplateChanged\\\"]],[23,[\\\"validateRecordTask\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"undoRouteMaster\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"routeTemplateChangeSet\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"route-information-panel\\\",\\\"Route Information\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-dds\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"extra\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"error\\\",\\\"name\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"routeTemplateChangeSet\\\",\\\"name\\\"]],[23,[\\\"options\\\"]],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTextChange\\\",[23,[\\\"routeTemplateChangeSet\\\"]],\\\"name\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"check-box-group\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"click\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"Keeper Route\\\",[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onKeeperTypeClick\\\"],null],[23,[\\\"routeTemplateChangeSet\\\",\\\"isKeeperType\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Keeper Route\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Maximum Trips Per Hour\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"error\\\",\\\"tripLimit\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"disableEditing\\\"]],[23,[\\\"extraTripLimitOptions\\\"]],[23,[\\\"routeTemplateChangeSet\\\",\\\"tripLimit\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTextChange\\\",[23,[\\\"routeTemplateChangeSet\\\"]],\\\"tripLimit\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"check-box-group\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"click\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"Manual Trips Only\\\",[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSchedulingModeClick\\\"],null],[23,[\\\"routeTemplateChangeSet\\\",\\\"isManualTrips\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Manual Trips Only\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"label\\\"],[9],[0,\\\"Maximum Miles Per Hour\\\"],[10],[0,\\\"\\\\n        \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"disabled\\\",\\\"extra\\\",\\\"value\\\",\\\"onChange\\\",\\\"size\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"error\\\",\\\"tripLimit\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null],[23,[\\\"disableEditing\\\"]],[23,[\\\"extraDistanceLimitOptions\\\"]],[23,[\\\"routeTemplateChangeSet\\\",\\\"distanceLimit\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onTextChange\\\",[23,[\\\"routeTemplateChangeSet\\\"]],\\\"distanceLimit\\\"],null],\\\"4\\\"]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"check-box-group\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"checked\\\",\\\"change\\\"],[\\\"checkbox\\\",\\\"Active\\\",[23,[\\\"disableEditing\\\"]],[23,[\\\"routeTemplateChangeSet\\\",\\\"active\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"changeset-set\\\",[[23,[\\\"routeTemplateChangeSet\\\"]],\\\"active\\\"],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Active\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"enable-margin-left\\\",\\\"Reoptimization Options\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-dds\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"route-master-options\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h4\\\"],[9],[0,\\\"Include in the following options:\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"check-box-group\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"click\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"\\\",[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAdjustDriverBreakCheckBoxClick\\\"],null],[23,[\\\"routeTemplateChangeSet\\\",\\\"isAdjustBreak\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Adjust Driver Breaks\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"check-box-group\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"disabled\\\",\\\"click\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"Consolidate Routes\\\",[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onConsolidateCheckBoxClick\\\"],null],[23,[\\\"routeTemplateChangeSet\\\",\\\"isConsolidateRoute\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Consolidate Routes\\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab-wrapper\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"step-manager\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"generic-components/tab-group\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\"],[\\\"Days of Service\\\",[22,1,[]],\\\"days-of-service\\\"]]],false],[0,\\\"\\\\n    \\\"],[1,[27,\\\"generic-components/tab-group/tab-button\\\",null,[[\\\"link\\\",\\\"wizard\\\",\\\"transitionName\\\"],[\\\"Zones\\\",[22,1,[]],\\\"zones\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container-dds\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/side-drawer/system-config/route-master/template.hbs' @ L136:C9) \\\"],null]],[[\\\"name\\\"],[\\\"days-of-service\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"add-new-availability-btn\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableEditing\\\"]],[23,[\\\"disableAddAvailabilityBtn\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"addNewAvailability\\\"],null]],[9],[0,\\\"\\\\n          Add Availability \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"routeTemplateAvailabilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"availability-layout\\\"],[9],[0,\\\"\\\\n        \\\"],[2,\\\" information label row \\\"],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"routeTemplateAvailabilities\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-lg-5 col-3\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Vehicle\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Driver\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Shift Start\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Shift Length\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Shift End\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"Break(s)\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col table-header\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,3,[\\\"vehicle\\\",\\\"provider\\\",\\\"isBrokerProviderType\\\"]]],null,{\\\"statements\\\":[[0,\\\"            Max Route\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[2,\\\" input row \\\"],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row \\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col-lg-5 col-3 \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[22,3,[\\\"error\\\",\\\"DOWSelected\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select-multiple\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"closeOnSelect\\\",\\\"onchange\\\"],[[23,[\\\"daysOfWeek\\\"]],[23,[\\\"disableEditing\\\"]],[22,3,[\\\"DOWSelected\\\"]],\\\"Select Day Of Week\\\",false,[27,\\\"action\\\",[[22,0,[]],\\\"onDOWChange\\\",[22,3,[]]],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[22,5,[\\\"display\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"type\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[22,3,[\\\"error\\\",\\\"vehicle\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"vehicle-name enable-uppercase error\\\",\\\"vehicle-name enable-uppercase\\\"],null],\\\"text\\\",\\\"\\\",true,[27,\\\"changeset-get\\\",[[22,3,[]],\\\"vehicle.name\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[22,3,[\\\"vehicle\\\",\\\"noOfAmbulatorySeats\\\"]],[22,3,[\\\"vehicle\\\",\\\"noOfWheelChairSeats\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"ember-tooltip\\\",null,[[\\\"side\\\"],[\\\"bottom\\\"]],{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"config-group\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[0,\\\"Amb: \\\"],[1,[22,3,[\\\"vehicle\\\",\\\"noOfAmbulatorySeats\\\"]],false],[10],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"enable-margin-left\\\"],[9],[0,\\\"WC: \\\"],[1,[22,3,[\\\"vehicle\\\",\\\"noOfWheelChairSeats\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"flex\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"span\\\"],[9],[1,[22,3,[\\\"vehicle\\\",\\\"startGarage\\\",\\\"address\\\",\\\"simpleAddress\\\"]],false],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openVehicleSearchModal\\\",[22,3,[]]],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"value\\\"],[\\\"text\\\",\\\"\\\",true,[27,\\\"changeset-get\\\",[[22,3,[]],\\\"driver.driverId\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openDriverSearchModal\\\",[22,3,[]]],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-search\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"col \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[22,3,[\\\"error\\\",\\\"shiftStart\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null],\\\"error\\\",\\\"\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"placeholder\\\",\\\"time_24hr\\\",\\\"format\\\",\\\"disabled\\\",\\\"value\\\",\\\"onChange\\\"],[true,false,true,\\\"HH:MM\\\",true,[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],[23,[\\\"disableEditing\\\"]],[22,3,[\\\"shiftStart\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",[22,3,[]],\\\"shiftStart\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[[27,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"and\\\",[[22,3,[\\\"error\\\",\\\"routeLength\\\"]],[23,[\\\"shouldDisplayValidations\\\"]]],null]],null],\\\"error route-length\\\",\\\"route-length\\\"],null],[27,\\\"changeset-get\\\",[[22,3,[]],\\\"routeLength\\\"],null],\\\"__:__\\\",\\\"99:99\\\",[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteLengthChange\\\",[22,3,[]]],null]]]],false],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"enableTime\\\",\\\"showCaret\\\",\\\"noCalendar\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"time_24hr\\\",\\\"format\\\",\\\"readonlyCell\\\",\\\"value\\\",\\\"onChange\\\"],[true,false,true,\\\"\\\",true,true,[23,[\\\"dateTimeFormat\\\",\\\"timeFlatPickr\\\"]],true,[22,3,[\\\"calcEndDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onDateChange\\\",[22,3,[]],\\\"endTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"disabled\\\",\\\"class\\\",\\\"value\\\"],[\\\"text\\\",true,\\\"break-length\\\",[27,\\\"changeset-get\\\",[[22,3,[]],\\\"shiftBreaks.length\\\"],null]]]],false],[0,\\\"\\\\n              \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openBreakModal\\\",[22,3,[]]],null]],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-pencil\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,3,[\\\"vehicle\\\",\\\"provider\\\",\\\"isBrokerProviderType\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[1,[27,\\\"generic-components/number-format\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"route-limit\\\",[27,\\\"changeset-get\\\",[[22,3,[]],\\\"routeLimit\\\"],null],[23,[\\\"disableEditing\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteLimitChange\\\",[22,3,[]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"route-limit-delete\\\"],[12,\\\"disabled\\\",[21,\\\"disableEditing\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRemoveAvailability\\\",[22,3,[]]],null]],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-1x fa-trash-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"text\\\"],[\\\"bottom\\\",\\\"Remove Availability\\\"]]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},null],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"step\\\"]],\\\"expected `w.step` to be a contextual component but found a string. Did you mean `(component w.step)`? ('adept-iq/pods/components/side-drawer/system-config/route-master/template.hbs' @ L286:C9) \\\"],null]],[[\\\"name\\\"],[\\\"zones\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"side-drawer/system-config/route-master/zone-table\\\",null,[[\\\"tableRef\\\",\\\"disableRowSelection\\\",\\\"routeTemplateChangeSet\\\"],[[23,[\\\"zoneTableRef\\\"]],[23,[\\\"disableEditing\\\"]],[23,[\\\"routeTemplateChangeSet\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"zone-button-wrapper\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group-dds\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"label\\\"],[9],[0,\\\"Affinity Value\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"searchEnabled\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"selected\\\",\\\"onchange\\\"],[[23,[\\\"affinityTypes\\\"]],false,[27,\\\"or\\\",[[23,[\\\"disableEditing\\\"]],[27,\\\"not\\\",[[23,[\\\"hasZoneSelected\\\"]]],null]],null],\\\"Select Affinity\\\",[23,[\\\"selectedAffinityType\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onAffinitySelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"          \\\"],[1,[22,2,[\\\"type\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isDriverBreakModalEnabled\\\"]]],null,{\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/modals/driver-master\\\",null,[[\\\"breakTypes\\\",\\\"isDriverBreakModalEnabled\\\",\\\"availability\\\"],[[23,[\\\"breakTypes\\\"]],[23,[\\\"isDriverBreakModalEnabled\\\"]],[23,[\\\"driverBreakAvailability\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[27,\\\"search-modal\\\",null,[[\\\"modalAPI\\\",\\\"noneRecord\\\"],[[23,[\\\"modalAPI\\\"]],[23,[\\\"noneRecord\\\"]]]]],false]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/route-master/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/vehicle-search-config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'vehicle',\n    title: 'Vehicle',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: true,\n    hideWidgetControls: true,\n    inactiveProviderFilterPath: 'provider.id',\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'ID',\n      valuePath: 'name',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'placeholder',\n      index: 1,\n      type: 'boolean',\n      label: 'Placeholder',\n      valuePath: 'placeholder',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'provider',\n      index: 2,\n      type: 'text',\n      label: 'Provider',\n      valuePath: 'provider.name',\n      defaultWidth: 80,\n      searchable: true\n    }, {\n      id: 'licensePlate',\n      index: 3,\n      type: 'text',\n      label: 'License Plate',\n      valuePath: 'licensePlate',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vehicleStatus',\n      index: 4,\n      type: 'text',\n      label: 'Vehicle Status',\n      valuePath: 'vehicleStatusName.description',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'vin',\n      index: 5,\n      type: 'text',\n      label: 'VIN',\n      valuePath: 'vin',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'leaseCompanyName',\n      index: 6,\n      type: 'text',\n      label: 'Lease Company',\n      valuePath: 'leaseCompanyName',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'leaseEndDate',\n      index: 7,\n      type: 'date',\n      label: 'Lease End Date',\n      valuePath: 'leaseEndDate',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'inService',\n      index: 8,\n      type: 'boolean',\n      label: 'In Service',\n      valuePath: 'inService',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'vehicleTypeName',\n      index: 9,\n      type: 'text',\n      label: 'Type',\n      valuePath: 'vehicleTypeName',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'manufacturerName',\n      index: 10,\n      type: 'boolean',\n      label: 'Manufacturer',\n      valuePath: 'manufacturerName.description',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'modelYear',\n      index: 11,\n      type: 'number',\n      label: 'Model Year',\n      valuePath: 'modelYear',\n      defaultWidth: 100,\n      format: `${_environment.default.dateTimeFormat.dateMoment}`,\n      searchable: true\n    }, {\n      id: 'comments',\n      index: 12,\n      type: 'text',\n      label: 'Comments',\n      valuePath: 'comments',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'extraWideLift',\n      index: 13,\n      type: 'number',\n      label: 'XWide Lift',\n      valuePath: 'vehicleType.extraWideLift',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfAmbulatorySeats',\n      index: 14,\n      type: 'number',\n      label: 'Amb Seats',\n      valuePath: 'noOfAmbulatorySeats',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfWheelChairSeats',\n      index: 15,\n      type: 'number',\n      label: 'WC Seats',\n      valuePath: 'noOfWheelChairSeats',\n      defaultWidth: 100,\n      searchable: true\n    }, {\n      id: 'noOfServiceAnimalSeats',\n      index: 16,\n      type: 'number',\n      label: 'Max Service Animals',\n      valuePath: 'noOfServiceAnimalSeats',\n      defaultWidth: 100,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/zone-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/route-master/zone-table/config\", \"adept-iq/models/zone\"], function (_exports, _component, _config, _zone) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['zone-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    // passed in from parent component\n    routeTemplateChangeSet: null,\n    disableRowSelection: false,\n    hasZoneSelected: Ember.computed.gte('tableRef.checkedRows.length', 1),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    fetchDataQuery() {\n      const affinities = this.get('routeTemplateChangeSet.affinities') || [];\n      return this._super(...arguments).then(records => {\n        return records.filter(record => {\n          //affinities index start from [0-16] and zone Ids starts from 1-17\n          const zoneId = record.get('zoneId') - 1;\n          const affVal = affinities[zoneId] || _zone.AFFINITY_NO_SERVICE.val;\n          record.set('affinityValue', affVal);\n          return record;\n        });\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/route-master/zone-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    modelName: 'zone',\n    title: 'Zones',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    fetchModelData: true,\n    columns: [{\n      id: 'name',\n      index: 0,\n      type: 'text',\n      label: 'Name',\n      valuePath: 'displayName',\n      defaultWidth: 70,\n      searchable: true\n    }, {\n      id: 'affinity',\n      index: 1,\n      type: 'text',\n      label: 'Affinity',\n      valuePath: 'convertAffinityValue',\n      defaultWidth: 70,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"lodash\", \"turfHelpers\", \"booleanPointInPolygon\", \"adept-iq/utils/guid\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-region-groups/config\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-zones/config\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/config\", \"adept-iq/models/speed-region-group\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _moment, _lodash, _turfHelpers, _booleanPointInPolygon, _guid, _config, _config2, _config3, _speedRegionGroup, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.WAIT_TIME = void 0;\n  const WAIT_TIME = 500;\n  _exports.WAIT_TIME = WAIT_TIME;\n  const MAX_ADDRESS = 25;\n  const MIN_SPEED_PERCENTAGE = -90;\n  const MAX_SPEED_PERCENTAGE = 100;\n  const daysOfWeekMap = [{\n    label: 'Mon',\n    index: 1\n  }, {\n    label: 'Tue',\n    index: 2\n  }, {\n    label: 'Wed',\n    index: 3\n  }, {\n    label: 'Thu',\n    index: 4\n  }, {\n    label: 'Fri',\n    index: 5\n  }, {\n    label: 'Sat',\n    index: 6\n  }, {\n    label: 'Sun',\n    index: 0\n  }];\n  /* eslint-disable comma-spacing */\n  // speed factor defaults to 1.0\n\n  const defaultSpeedFactor = [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]];\n  /* eslint-enable comma-spacing */\n\n  var _default = Ember.Component.extend({\n    classNames: ['speed-region-groups'],\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    systemConfig: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    addressConfig: _config3.addressConfig,\n    srgConfig: _config.default,\n    srConfig: _config2.default,\n    place: null,\n    speedRegionGroupNameDupError: false,\n    dateRangeError: false,\n    mandatoryError: false,\n    disableBtns: null,\n    dateFormat: _environment.default.dateTimeFormat.dateFlatPickr,\n    timeFormat: _environment.default.dateTimeFormat.timeFlatPickr,\n    dateTimeFormat: _environment.default.dateTimeFormat.dateTimeFlatPickr,\n    timeIntervalMap: null,\n    speedRegionGroupChanges: false,\n    isNewSpeedRegionGroup: false,\n    isNewSpeedRegion: false,\n    isDeleteSpeedRegionGroup: false,\n    currentRegionSetType: '',\n    // speed or blockout, exported from system-config main view\n    selectedRow: Ember.computed.readOnly('tableRef.checkedRows.firstObject'),\n    selectedSpeedRegionRow: Ember.computed.readOnly('speedRegionTableRef.checkedRows.firstObject'),\n    selectedSpeedRegionAddressRow: Ember.computed.readOnly('speedRegionAddressTableRef.checkedRows.firstObject'),\n    disableUndobtn: Ember.computed('disableForm', 'speedRegionGroupFormChanges', function () {\n      const disableForm = this.get('disableForm');\n      const speedRegionGroupFormChanges = this.get('speedRegionGroupFormChanges');\n      const returnValue = !(!disableForm && speedRegionGroupFormChanges);\n      this.hasChanges(!returnValue);\n      return returnValue;\n    }),\n    speedRegionGroupFormChanges: Ember.computed('speedRegionGroupChanges', 'speedRegionGroup.{id,name}', function () {\n      const speedRegionGroupChanges = this.get('speedRegionGroupChanges');\n      return speedRegionGroupChanges;\n    }),\n    disableSavebtn: Ember.computed('speedRegionGroupChanges', 'speedRegionGroup.{id,name}', function () {\n      const speedRegionGroupChanges = this.get('speedRegionGroupChanges');\n      return !speedRegionGroupChanges;\n    }),\n    disableRegionChanges: Ember.computed('disableForm', 'selectedSpeedRegionRow', function () {\n      const disableForm = this.get('disableForm');\n      const selectedSpeedRegionRow = this.get('selectedSpeedRegionRow');\n      return disableForm || Ember.isEmpty(selectedSpeedRegionRow);\n    }),\n    isBlockoutRegionSetType: Ember.computed('currentRegionSetType', function () {\n      return this.get('currentRegionSetType') === 'blockout';\n    }),\n\n    updateViewLabels(isBlockoutRegionSetType) {\n      if (isBlockoutRegionSetType) {\n        this.set('srgConfig.title', 'Blockout Region Sets');\n        this.set('srConfig.title', 'Blockout Regions');\n        this.set('pageTitle', 'Blockout Regions');\n      } else {\n        this.set('srgConfig.title', 'Speed Region Sets');\n        this.set('srConfig.title', 'Speed Regions');\n        this.set('pageTitle', 'Speed Regions');\n      }\n    },\n\n    selectedRowChange: Ember.observer('selectedRow', function () {\n      const selectedRow = this.get('selectedRow');\n      if (this.get('loadingInProgress')) return;\n      this.cleanupSpeedRegionGroup();\n\n      if (Ember.isPresent(selectedRow) || this.get('isNewSpeedRegionGroup')) {\n        this.cleanupPlaceModel();\n        this.cleanupSpeedRegionModel();\n        this.cleanupSpeedRegionAddressModel();\n      } // user selected a group row while on creating a new group region\n\n\n      if (Ember.isPresent(selectedRow) && this.get('isNewSpeedRegionGroup')) {\n        this.setProperties({\n          'disableForm': true,\n          'isNewSpeedRegion': false,\n          'speedRegionGroupChanges': false,\n          'isNewSpeedRegionGroup': false\n        });\n      }\n\n      if (Ember.isPresent(selectedRow)) {\n        this.createSpeedRegionRecords(selectedRow.get('regions'));\n        this.createSpeedAddressRecords(selectedRow.get('addresses'));\n      }\n\n      this.setDefaultProperties(selectedRow);\n      this.buttonSettings();\n\n      if (!selectedRow) {\n        this.buttonSettings(false, true, true);\n      }\n    }),\n    selectedSpeedRegionRowChange: Ember.observer('selectedSpeedRegionRow', function () {\n      const selectedSpeedRegionRow = this.get('selectedSpeedRegionRow');\n      this.setSpeedRegionDefaultProperties(selectedSpeedRegionRow);\n    }),\n    currentRegionSetTypeChange: Ember.observer('isBlockoutRegionSetType', function () {\n      const selectedRow = this.get('selectedRow');\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const tableRef = this.get('tableRef'); // user selected a group row while on creating a new group region\n\n      if (this.get('isNewSpeedRegionGroup')) {\n        this.setProperties({\n          'disableForm': true,\n          'isNewSpeedRegion': false,\n          'speedRegionGroupChanges': false\n        });\n        tableRef.set('config.selectFirstRow', true);\n      }\n\n      this.updateViewLabels(isBlockoutRegionSetType);\n      this.buttonSettings();\n\n      if (!selectedRow) {\n        this.buttonSettings(false, true, true);\n      }\n\n      if (Ember.isPresent(tableRef)) {\n        Ember.run.later(() => {\n          Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n        }, WAIT_TIME);\n      }\n    }),\n\n    cleanupSpeedRegionGroup() {\n      const speedRegionGroupId = this.get('speedRegionGroup.id');\n\n      if (Ember.isPresent(speedRegionGroupId)) {\n        const speedRegionGroupModel = this.get('store').peekRecord('speed-region-group', speedRegionGroupId);\n\n        if (Ember.isPresent(speedRegionGroupModel)) {\n          speedRegionGroupModel.rollbackAttributes();\n        }\n      }\n    },\n\n    createSpeedRegionRecords(regions) {\n      const store = this.get('store');\n      const speedRegionTableRef = this.get('speedRegionTableRef');\n\n      if (Ember.isPresent(regions)) {\n        regions.forEach(region => {\n          const originalName = Ember.isEmpty(region.originalName) ? (0, _guid.guid)() : region.originalName;\n          store.createRecord('speed-region', {\n            originalName: originalName,\n            name: region.name,\n            polygon: region.polygon,\n            speedFactor: region.speedFactor\n          });\n          region.originalName = originalName;\n        });\n      }\n\n      if (Ember.isPresent(speedRegionTableRef)) {\n        Ember.run.scheduleOnce('afterRender', speedRegionTableRef, 'refreshData'); // refresh data\n      }\n    },\n\n    createSpeedAddressRecords(addresses) {\n      const speedRegionAddressTableRef = this.get('speedRegionAddressTableRef');\n\n      if (Ember.isPresent(addresses)) {\n        addresses.forEach(address => {\n          this.createSingleAddressRecord(address);\n        });\n      }\n\n      if (Ember.isPresent(speedRegionAddressTableRef)) {\n        Ember.run.scheduleOnce('afterRender', speedRegionAddressTableRef, 'refreshData'); // refresh data\n      }\n    },\n\n    createSingleAddressRecord(address) {\n      const store = this.get('store');\n      store.createRecord('speed-region-address', {\n        streetNumber: address.streetNumber,\n        streetAddress: address.streetAddress,\n        locality: address.locality,\n        subLocality: address.subLocality,\n        region: address.region,\n        postalCode: address.postalCode,\n        country: address.country,\n        lat: address.lat,\n        lng: address.lng\n      });\n    },\n\n    cleanupPlaceModel() {\n      const place = this.get('place');\n      const address = place.get('address');\n      const location = place.get('location');\n      address.set('streetNumber');\n      address.set('streetAddress');\n      address.set('locality');\n      address.set('subLocality');\n      address.set('region');\n      address.set('postalCode');\n      address.set('freeformAddress');\n      address.set('subRegion');\n      address.set('country');\n      location.set('lat');\n      location.set('lng');\n      location.set('geoNode');\n      Ember.$('html,body,.tomtom-map,#speed-region').removeClass('custom-cursor');\n      this.get('geocode').activateGeocode(false, this.get('place'), 'speed-region');\n    },\n\n    cleanupSpeedRegionModel() {\n      const selectedRow = this.get('selectedRow');\n      const speedRegionTableRef = this.get('speedRegionTableRef');\n      let regions = [];\n\n      if (Ember.isPresent(selectedRow)) {\n        regions = selectedRow.regions.filter(region => !Ember.isEmpty(region.name));\n        selectedRow.set('regions', regions);\n      }\n\n      if (Ember.isPresent(speedRegionTableRef)) speedRegionTableRef.dataJoin.clear();\n      const store = this.get('store');\n      store.peekAll('speed-region').forEach(region => {\n        store.deleteRecord(region);\n      });\n    },\n\n    cleanupSpeedRegionAddressModel() {\n      const selectedRow = this.get('selectedRow');\n      const speedRegionAddressTableRef = this.get('speedRegionAddressTableRef');\n      let addresses = [];\n\n      if (Ember.isPresent(selectedRow) && Ember.isPresent(selectedRow.addresses)) {\n        addresses = selectedRow.addresses.filter(address => !Ember.isEmpty(address.streetAddress));\n        selectedRow.set('addresses', addresses);\n      }\n\n      if (Ember.isPresent(speedRegionAddressTableRef)) speedRegionAddressTableRef.dataJoin.clear();\n      const store = this.get('store');\n      store.peekAll('speed-region-address').forEach(address => {\n        store.deleteRecord(address);\n      });\n    },\n\n    hasChanges(value) {\n      this.set('systemConfig.hasChanges', value);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.hasChanges = this.get('hasChanges').bind(this);\n      this.set('minSpeedPercentage', MIN_SPEED_PERCENTAGE);\n      this.set('maxSpeedPercentage', MAX_SPEED_PERCENTAGE);\n      this.setupTimeIntervalMap();\n      this.setDefaultProperties();\n      this.setSpeedRegionDefaultProperties();\n      this.updateViewLabels(this.get('isBlockoutRegionSetType'));\n      this.setupSpeedRegionTableActions();\n      this.setupPlaceModel();\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._onKeyDown = event => {\n        Ember.run.schedule('afterRender', this, 'onKeyDown', event);\n      };\n\n      this.$().on('keydown', this._onKeyDown);\n    },\n\n    willDestroyElement() {\n      const speedRegionGroupChanges = this.get('speedRegionGroupChanges');\n\n      if (speedRegionGroupChanges) {\n        this.undoSpeedRegionGroup();\n      }\n\n      this._super(...arguments);\n\n      this.cleanupPlaceModel();\n      this.cleanupSpeedRegionModel();\n      this.cleanupSpeedRegionAddressModel();\n    },\n\n    /*eslint-disable */\n    onKeyDown(event) {\n      switch (event.key) {\n        case 'Enter':\n          {\n            event.preventDefault();\n          }\n\n        default:\n          break;\n      }\n    },\n\n    /*eslint-enable */\n    setupPlaceModel() {\n      const store = this.get('store');\n      const address = store.createRecord('address');\n      const location = store.createRecord('location');\n      const place = store.createRecord('place', {\n        address,\n        location\n      });\n      this.set('place', place);\n    },\n\n    setupSpeedRegionTableActions() {\n      const newConfigurationActions = [{\n        id: 'newRegion',\n        name: 'New Region',\n        action: () => {\n          this.addNewSpeedRegion();\n        }\n      }];\n      this.set('additionalTableActions', newConfigurationActions);\n    },\n\n    setupTimeIntervalMap() {\n      const timeInverval = 30;\n      const startMoment = (0, _moment.default)('00:00:00', 'hh:mm:ss');\n      const endMoment = startMoment.clone().add(timeInverval - 1, 'minutes');\n      const timeIntervalMap = [];\n      const maxIndex = 48;\n\n      for (let i = 0; i < maxIndex; i++) {\n        timeIntervalMap.push({\n          label: `${startMoment.format('hh:mm A')} - ${endMoment.format('hh:mm A')}`,\n          index: i\n        });\n        startMoment.add(timeInverval, 'minutes');\n        endMoment.add(timeInverval, 'minutes');\n      }\n\n      this.set('timeIntervalMap', timeIntervalMap);\n      this.set('daysOfWeekMap', daysOfWeekMap);\n    },\n\n    setDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      let skipDisableForm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const fields = {\n        id: null,\n        name: '',\n        start: null,\n        end: null,\n        startTime: null,\n        endTime: null,\n        message: null,\n        recurrence: _speedRegionGroup.CONTINUOUS_RECUR_TYPE,\n        blockout: isBlockoutRegionSetType,\n        regions: [],\n        addresses: []\n      };\n\n      if (Ember.isPresent(record)) {\n        Object.entries(fields).forEach(key => {\n          if (key[0] === 'startTime' || key[0] === 'endTime') {\n            fields[key[0]] = Ember.isEmpty(record.get(key[0])) ? null : record.get(key[0]);\n          } else if (key[0] === 'regions') {\n            const regions = record.get(key[0]) || [];\n            regions.forEach(region => {\n              if (Ember.isEmpty(region.originalName)) {\n                region.originalName = (0, _guid.guid)();\n              }\n            });\n            fields[key[0]] = regions;\n          } else {\n            fields[key[0]] = record.get(key[0]);\n          }\n        });\n\n        if (!skipDisableForm) {\n          this.set('disableForm', true);\n        }\n      }\n\n      this.setProperties({\n        'speedRegionGroup': Ember.Object.create(fields),\n        'mandatoryError': false,\n        'dateRangeError': false,\n        'speedRegionGroupNameDupError': false,\n        'speedRegionGroupChanges': false\n      });\n      this.hasChanges(false);\n    },\n\n    addNewSpeedRegion() {\n      if (this.get('disableForm')) return;\n      const selectedSpeedRegionRow = this.get('selectedSpeedRegionRow');\n      const speedRegionTableRef = this.get('speedRegionTableRef');\n      speedRegionTableRef.onUncheckAll();\n\n      if (selectedSpeedRegionRow) {\n        selectedSpeedRegionRow.set('selected', false);\n      }\n\n      const newRecord = this.get('store').createRecord('speed-region', {\n        originalName: (0, _guid.guid)(),\n        name: '',\n        polygon: [],\n        speedFactor: defaultSpeedFactor,\n        isNewRow: true\n      });\n      this.setSpeedRegionDefaultProperties(newRecord);\n      this.setProperties({\n        isNewSpeedRegion: true,\n        disableForm: false,\n        speedRegionGroupChanges: true\n      });\n      this.updateSpeedRegionGroup();\n\n      if (Ember.isPresent(speedRegionTableRef)) {\n        Ember.run.scheduleOnce('afterRender', speedRegionTableRef, 'refreshData'); // refresh data\n\n        Ember.run.next(() => {\n          speedRegionTableRef.get('firstRowSelectedTask').perform();\n        });\n      }\n\n      this.buttonSettings(true, true, true);\n      Ember.$('.region-name-input').focus().select();\n    },\n\n    speedRegionTableRefChange: Ember.observer('speedRegionTableRef.table.rows.[]', function () {\n      const speedRegionTableRef = this.get('speedRegionTableRef');\n      const isNewSpeedRegion = this.get('isNewSpeedRegion');\n\n      if (isNewSpeedRegion) {\n        speedRegionTableRef.onUncheckAll();\n        speedRegionTableRef.get('firstRowSelectedTask').perform();\n      }\n    }),\n\n    removeSpeedRegion() {\n      if (this.get('disableForm')) return;\n      const speedRegionTableRef = this.get('speedRegionTableRef');\n      const selectedSpeedRegionRow = this.get('selectedSpeedRegionRow');\n\n      if (selectedSpeedRegionRow) {\n        selectedSpeedRegionRow.set('selected', false);\n        selectedSpeedRegionRow.set('isSoftDeletedRow', true);\n        speedRegionTableRef.set('config.selectFirstRow', true);\n      }\n\n      this.set('speedRegionGroupChanges', true);\n\n      if (Ember.isPresent(speedRegionTableRef)) {\n        Ember.run.scheduleOnce('afterRender', speedRegionTableRef, 'refreshData'); // refresh data\n      }\n    },\n\n    removeSpeedAddress() {\n      if (this.get('disableForm')) return;\n      const speedRegionAddressTableRef = this.get('speedRegionAddressTableRef');\n      const selectedSpeedRegionAddressRow = this.get('selectedSpeedRegionAddressRow');\n\n      if (selectedSpeedRegionAddressRow) {\n        selectedSpeedRegionAddressRow.set('selected', false);\n        selectedSpeedRegionAddressRow.set('isSoftDeletedRow', true);\n        speedRegionAddressTableRef.set('config.selectFirstRow', true);\n      }\n\n      this.set('speedRegionGroupChanges', true);\n\n      if (Ember.isPresent(speedRegionAddressTableRef)) {\n        Ember.run.scheduleOnce('afterRender', speedRegionAddressTableRef, 'refreshData'); // refresh data\n      }\n    },\n\n    speedFactorToPercentage(speedFactor) {\n      const speedFactorFloat = parseFloat(speedFactor).toFixed(2);\n      return parseInt(Math.round(speedFactorFloat * 100) - 100, 10);\n    },\n\n    percentageToSpeedFactor(percentage) {\n      const percentageInt = typeof percentage === 'string' && percentage.length === 0 ? 0 : parseFloat(percentage);\n      return (percentageInt + 100) / 100;\n    },\n\n    convertAllSpeedFactorToPercentage(speedFactorDays) {\n      if (Ember.isEmpty(speedFactorDays)) return [];\n      return speedFactorDays.map(speedFactorDay => {\n        return speedFactorDay.map(speedFactor => {\n          return this.speedFactorToPercentage(speedFactor);\n        });\n      });\n    },\n\n    convertAllPercentageToSpeedFactor(percentageDays) {\n      if (Ember.isEmpty(percentageDays)) return [];\n      return percentageDays.map(percentageDay => {\n        return percentageDay.map(percentage => {\n          return this.percentageToSpeedFactor(percentage);\n        });\n      });\n    },\n\n    setSpeedRegionDefaultProperties() {\n      let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      const originalName = record.get('originalName');\n      const fields = {\n        originalName: originalName ? originalName : (0, _guid.guid)(),\n        name: '',\n        polygon: [],\n        speedFactor: defaultSpeedFactor,\n        isNewRow: false\n      };\n\n      if (Ember.isPresent(record)) {\n        Object.entries(fields).forEach(key => {\n          fields[key[0]] = record.get(key[0]);\n        });\n      }\n\n      fields.speedFactor = this.convertAllSpeedFactorToPercentage(fields.speedFactor);\n      this.setProperties({\n        'speedRegion': Ember.Object.create(fields)\n      });\n    },\n\n    buttonSettings() {\n      let newbtn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      let editbtn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      let deletebtn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      const disableBtns = {\n        new: newbtn,\n        edit: editbtn,\n        delete: deletebtn\n      };\n      this.set('disableBtns', disableBtns);\n    },\n\n    mandatoryValidation() {\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const typeName = isBlockoutRegionSetType ? 'blockout' : 'speed';\n      const speedRegionsModels = this.get('store').peekAll('speed-region') || [];\n      const speedRegionGroupModels = this.get('store').peekAll('speed-region-group').filter(data => {\n        if (isBlockoutRegionSetType) {\n          return data.get('isBlockoutRegionType');\n        }\n\n        return !data.get('isBlockoutRegionType');\n      }) || [];\n      const speedRegionGroup = this.get('speedRegionGroup');\n      const name = speedRegionGroup.get('name') || '';\n      const startDate = (0, _moment.default)(speedRegionGroup.get('start'));\n      const endDate = (0, _moment.default)(speedRegionGroup.get('end'));\n      const startTime = (0, _moment.default)(speedRegionGroup.get('startTime'), 'HH:mm');\n      const endTime = (0, _moment.default)(speedRegionGroup.get('endTime'), 'HH:mm');\n      const newSpeedRegions = speedRegionsModels.filterBy('isNewRow', true);\n      const oldSpeedRegions = speedRegionsModels.filterBy('isNewRow', false);\n      const errors = [];\n      let speedRegionCount = 0;\n      let speedRegionNameCount = 0;\n      let speedRegionGroupNameCount = 0;\n      let speedFactorOutOfRangeCount = 0;\n      let mainMessage = `${_lodash.default.capitalize(typeName)} region set cannot be saved.`;\n      this.setProperties({\n        'mandatoryError': false,\n        'dateRangeError': false,\n        'speedRegionGroupNameDupError': false\n      });\n\n      if (isBlockoutRegionSetType && speedRegionGroup.get('recurrence') === _speedRegionGroup.CONTINUOUS_RECUR_TYPE) {\n        startDate.set('hour', startTime.get('hour'));\n        startDate.set('minute', startTime.get('minute'));\n        endDate.set('hour', endTime.get('hour'));\n        endDate.set('minute', endTime.get('minute'));\n      }\n\n      const overlapDateSR = speedRegionGroupModels.find(speedRegionGroupModel => {\n        const currStartDate = (0, _moment.default)(speedRegionGroupModel.get('start'));\n        const currEndDate = (0, _moment.default)(speedRegionGroupModel.get('end'));\n        if (speedRegionGroupModel.get('id') === speedRegionGroup.get('id')) return false;\n\n        if (startDate.isSameOrAfter(currStartDate) && startDate.isSameOrBefore(currEndDate) || endDate.isSameOrAfter(currStartDate) && endDate.isSameOrBefore(currEndDate) || currStartDate.isSameOrAfter(startDate) && currStartDate.isSameOrBefore(endDate) || currEndDate.isSameOrAfter(startDate) && currEndDate.isSameOrBefore(endDate)) {\n          return true;\n        }\n\n        return false;\n      });\n      speedRegionGroupModels.forEach(speedRegionGroupModel => {\n        if (speedRegionGroupModel.get('name').trim().toUpperCase() === name.trim().toUpperCase() && speedRegionGroupModel.get('id') !== speedRegionGroup.get('id')) speedRegionGroupNameCount++;\n      });\n      speedRegionsModels.forEach(speedRegionsModel => {\n        const speedFactor = speedRegionsModel.get('speedFactor');\n        const minPercentage = (MIN_SPEED_PERCENTAGE + 100) / 100;\n        const maxPercentage = (MAX_SPEED_PERCENTAGE + 100) / 100;\n\n        if (!isBlockoutRegionSetType) {\n          for (let i = 0; i < 7; i++) {\n            for (let j = 0; j < 48; j++) {\n              if (speedFactor[i][j] < minPercentage || speedFactor[i][j] > maxPercentage) speedFactorOutOfRangeCount++;\n            }\n          }\n        }\n\n        if (!speedRegionsModel.get('isSoftDeletedRow')) speedRegionCount++;\n        if (newSpeedRegions.find(record => record.get('name').trim().toUpperCase() === speedRegionsModel.get('name').trim().toUpperCase() && speedRegionsModel.get('originalName') !== record.get('originalName'))) speedRegionNameCount++;\n        if (oldSpeedRegions.find(record => record.get('name').trim().toUpperCase() === speedRegionsModel.get('name').trim().toUpperCase() && speedRegionsModel.get('originalName') !== record.get('originalName'))) speedRegionNameCount++;\n      });\n      if (Ember.isEmpty(name.trim())) errors.pushObject({\n        validation: `${_lodash.default.capitalize(typeName)} region set name is required.`\n      });\n      if (Ember.isPresent(speedRegionsModels.find(record => Ember.isEmpty(record.get('name')) && !record.get('isSoftDeletedRow')))) errors.pushObject({\n        validation: `One or more ${typeName} region names are blank.`\n      });\n      if (!startDate.isValid()) errors.pushObject({\n        validation: 'Start date is required.'\n      });\n      if (!endDate.isValid()) errors.pushObject({\n        validation: 'End date is required.'\n      });\n\n      if (isBlockoutRegionSetType) {\n        if (!startTime.isValid()) errors.pushObject({\n          validation: 'Start time is required.'\n        });\n        if (!endTime.isValid()) errors.pushObject({\n          validation: 'End time is required.'\n        });\n      }\n\n      if (speedRegionCount === 0) errors.pushObject({\n        validation: `Must have at least 1 ${typeName} region.`\n      });\n\n      if (speedRegionNameCount > 0) {\n        errors.pushObject({\n          validation: `Its name duplicates an existing ${typeName} region's name.`\n        });\n        mainMessage = `${_lodash.default.capitalize(typeName)} region cannot be saved.`;\n      }\n\n      if (speedRegionGroupNameCount > 0) {\n        errors.pushObject({\n          validation: `Its name duplicates an existing ${typeName} region set's name.`\n        });\n        this.set('speedRegionGroupNameDupError', true);\n      }\n\n      if (speedFactorOutOfRangeCount > 0) {\n        errors.pushObject({\n          validation: `${_lodash.default.capitalize(typeName)} percentage must be between ${MIN_SPEED_PERCENTAGE} and ${MAX_SPEED_PERCENTAGE}`\n        });\n      }\n\n      if (startDate.isSameOrAfter(endDate)) {\n        errors.pushObject({\n          validation: 'End date must be greater than start date.'\n        });\n        this.set('dateRangeError', true);\n      }\n\n      if (isBlockoutRegionSetType && speedRegionGroup.get('recurrence') === _speedRegionGroup.DAILY_RECUR_TYPE) {\n        if (startTime.isSameOrAfter(endTime)) {\n          errors.pushObject({\n            validation: 'End time must be greater than start time for daily recurrence.'\n          });\n          this.set('dateRangeError', true);\n        }\n      }\n\n      if (!Ember.isEmpty(overlapDateSR)) {\n        errors.pushObject({\n          validation: `Its timeframe overlaps an existing ${typeName} region set's timeframe.`\n        });\n        this.set('dateRangeError', true);\n      }\n\n      if (!errors.length) return true;\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: `${_lodash.default.capitalize(typeName)} Regions`,\n        hasoverlay: true,\n        errors,\n        errorMainMessage: mainMessage,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          this.set('mandatoryError', true);\n          tooltip.reset();\n        }\n      });\n      return false;\n    },\n\n    save: (0, _emberConcurrency.task)(function* () {\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const typeName = isBlockoutRegionSetType ? 'blockout' : 'speed';\n      const record = this.buildSpeedRegionGroupData();\n      const notifications = this.get('notifications');\n      let isSaveSuccessful = true;\n\n      try {\n        return yield record.save();\n      } catch (error) {\n        isSaveSuccessful = false;\n        this.set('speedRegionGroupChanges', true); // eslint-disable-next-line no-console\n\n        console.error(error);\n        notifications.warning(`${typeName} REGION SET FAILED TO SAVED`);\n      } finally {\n        if (isSaveSuccessful) {\n          const tableRef = this.get('tableRef');\n\n          if (tableRef) {\n            Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n\n            tableRef.set('config.selectFirstRow', true);\n            tableRef.get('firstRowSelectedTask').perform();\n          }\n\n          this.buttonSettings();\n          this.setProperties({\n            'disableForm': true,\n            'isNewSpeedRegion': false,\n            'speedRegionGroupChanges': false,\n            'isNewSpeedRegionGroup': false\n          });\n        } else {\n          throw new Error(`${typeName} REGION SET FAILED TO SAVED`); // eslint-disable-line\n        }\n      }\n    }).drop(),\n\n    buildSpeedRegionGroupData() {\n      let record = null;\n      const store = this.get('store');\n      const value = this.get('speedRegionGroup');\n      const displayName = value.get('name');\n      const name = value.get('id');\n      const isNewSpeedRegionGroup = this.get('isNewSpeedRegionGroup');\n      const prefix = this.get('isBlockoutRegionSetType') ? 'BLOCK_' : 'SPEED_'; // remove delete regions from value\n\n      if (Ember.isPresent(value)) {\n        const speedRegions = store.peekAll('speed-region') || [];\n        speedRegions.forEach(speedRegion => {\n          if (speedRegion.get('isSoftDeletedRow')) {\n            const removeIndex = value.regions.findIndex(data => data.originalName === speedRegion.originalName);\n\n            if (removeIndex > -1) {\n              value.regions.splice(removeIndex, 1);\n            }\n          }\n        });\n      }\n\n      if (isNewSpeedRegionGroup) {\n        const data = {\n          category: 'config-System_Configuration-speed_region_groups',\n          type: 'object',\n          displayName,\n          name: prefix + Ember.String.camelize(displayName),\n          value\n        };\n        record = store.createRecord('cs-config-item', data);\n      } else {\n        const id = `config-System_Configuration-speed_region_groups/${name}`;\n        record = store.peekRecord('cs-config-item', id);\n        record.set('value', value);\n      }\n\n      return record;\n    },\n\n    delete: (0, _emberConcurrency.task)(function* () {\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const typeName = isBlockoutRegionSetType ? 'blockout' : 'speed';\n      const record = this.get('selectedRow');\n      const notifications = this.get('notifications');\n      const tableRef = this.get('tableRef');\n      const store = this.get('store');\n      const value = this.get('speedRegionGroup');\n      const name = value.get('id');\n      const checkedRow = tableRef.get('checkedRows.firstObject');\n      const id = `config-System_Configuration-speed_region_groups/${name}`;\n      const configRecord = store.peekRecord('cs-config-item', id);\n\n      try {\n        if (checkedRow.isDeleted) {\n          yield configRecord.destroyRecord();\n        } else {\n          yield record.destroyRecord();\n        } // completely remove id from store so it can be reused\n\n\n        store._removeFromIdMap(configRecord._internalModel);\n      } catch (error) {\n        console.error(error); // eslint-disable-line\n\n        notifications.warning(`${typeName} REGION SET FAILED TO DELETE`);\n      } finally {\n        if (tableRef) {\n          Ember.run.scheduleOnce('afterRender', tableRef, 'refreshData'); // refresh data\n        }\n      }\n    }).drop(),\n\n    /**\n     * First, validate the mandatory fields.\n     * @returns {boolean}\n     */\n    async validateSpeedRegionGroup() {\n      const valid = this.mandatoryValidation();\n      return valid;\n    },\n\n    updateSpeedRegionGroup() {\n      const speedRegionGroup = this.get('speedRegionGroup');\n      const speedRegionModels = this.get('store').peekAll('speed-region');\n      const speedRegionAddressModels = this.get('store').peekAll('speed-region-address');\n      const addressesArray = [];\n      const regionsArray = [];\n      speedRegionAddressModels.map(addressModel => {\n        if (!addressModel.get('isSoftDeletedRow')) {\n          addressesArray.push({\n            streetNumber: addressModel.get('streetNumber'),\n            streetAddress: addressModel.get('streetAddress'),\n            locality: addressModel.get('locality'),\n            region: addressModel.get('region'),\n            postalCode: addressModel.get('postalCode'),\n            country: addressModel.get('country'),\n            subLocality: addressModel.get('subLocality'),\n            lat: addressModel.get('lat'),\n            lng: addressModel.get('lng')\n          });\n        }\n      });\n      speedRegionGroup.set('addresses', addressesArray);\n      this.updateCurrentSpeedRegionGroupModel('addresses');\n      speedRegionModels.forEach(speedRegionModel => {\n        if (!speedRegionModel.get('isSoftDeletedRow')) {\n          regionsArray.push({\n            originalName: speedRegionModel.get('originalName'),\n            name: speedRegionModel.get('name'),\n            blockout: speedRegionModel.get('blockout'),\n            polygon: speedRegionModel.get('polygon'),\n            speedFactor: speedRegionModel.get('speedFactor')\n          });\n        }\n      });\n      speedRegionGroup.set('regions', regionsArray);\n      this.updateCurrentSpeedRegionGroupModel('regions');\n    },\n\n    onSaveSpeedRegionGroup() {\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const typeName = isBlockoutRegionSetType ? 'blockout' : 'speed';\n      const notifications = this.get('notifications');\n      const speedRegionGroupName = this.get('speedRegionGroup.name');\n      const isNewSpeedRegionGroup = this.get('isNewSpeedRegionGroup');\n      const activity = isNewSpeedRegionGroup ? `Create ${_lodash.default.capitalize(typeName)} Region` : `Edit ${_lodash.default.capitalize(typeName)} Region`;\n      const details = isNewSpeedRegionGroup ? `Created ${typeName} region set ${speedRegionGroupName}.` : `Edited ${typeName} region set ${speedRegionGroupName}.`;\n      this.updateSpeedRegionGroup();\n      this.validateSpeedRegionGroup().then(isValid => {\n        if (isValid) {\n          const tooltip = this.get('tooltip');\n          tooltip.pushConfirmation({\n            title: 'System Configuration',\n            hasOverlay: true,\n            tip: 'Are you sure you want to save these changes?',\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              this.set('speedRegionGroupChanges', false);\n              tooltip.reset();\n              return this.get('save').perform().then(async () => {\n                await this.createSpeedRegionGroupActivityLog(activity, details);\n                notifications.success(`${typeName} REGION SET SUCCESSFULLY SAVED`);\n              });\n            },\n            secondaryActionText: 'Cancel',\n\n            secondaryAction() {\n              return tooltip.reset();\n            }\n\n          });\n        }\n      });\n    },\n\n    undoSpeedRegionGroup() {\n      const selectedRow = this.get('selectedRow');\n      const selectedSpeedRegionRow = this.get('selectedSpeedRegionRow');\n      const isNewSpeedRegionGroup = this.get('isNewSpeedRegionGroup');\n      const isNewSpeedRegion = this.get('isNewSpeedRegion');\n\n      if (isNewSpeedRegionGroup) {\n        this.cleanupPlaceModel();\n        this.cleanupSpeedRegionModel();\n        this.cleanupSpeedRegionAddressModel();\n        this.setDefaultProperties();\n        this.setSpeedRegionDefaultProperties();\n      }\n\n      if (Ember.isPresent(selectedRow)) {\n        selectedRow.rollbackAttributes();\n        this.cleanupPlaceModel();\n        this.cleanupSpeedRegionModel();\n        this.cleanupSpeedRegionAddressModel();\n\n        if (Ember.isPresent(selectedRow)) {\n          this.createSpeedRegionRecords(selectedRow.get('regions'));\n          this.createSpeedAddressRecords(selectedRow.get('addresses'));\n        }\n\n        this.setDefaultProperties(selectedRow, true);\n      } else {\n        this.setDefaultProperties(selectedRow, true);\n      }\n\n      if (isNewSpeedRegion && Ember.isPresent(selectedSpeedRegionRow) && !selectedSpeedRegionRow.isNewRow) {\n        this.setSpeedRegionDefaultProperties(selectedSpeedRegionRow);\n      }\n    },\n\n    updateCurrentSpeedRegionModel(propertyName) {\n      const speedRegion = this.get('speedRegion');\n      const speedRegionModel = this.get('store').peekAll('speed-region').find(speedRegionRec => speedRegionRec.get('originalName') === speedRegion.get('originalName'));\n\n      if (propertyName === 'speedFactor') {\n        speedRegionModel.set(propertyName, this.convertAllPercentageToSpeedFactor(speedRegion.get(propertyName)));\n      } else if (propertyName === 'name') {\n        const newName = speedRegion.get(propertyName).trimStart();\n        speedRegion.set(propertyName, newName);\n        speedRegionModel.set(propertyName, newName.trimEnd());\n      } else {\n        speedRegionModel.set(propertyName, speedRegion.get(propertyName));\n      }\n\n      this.updateSpeedRegionGroup();\n    },\n\n    updateCurrentSpeedRegionGroupModel(propertyName) {\n      const speedRegionGroup = this.get('speedRegionGroup');\n      const id = speedRegionGroup.get('id');\n      if (Ember.isEmpty(id)) return;\n      const speedRegionGroupModel = this.get('store').peekRecord('speed-region-group', id);\n      speedRegionGroupModel.set(propertyName, speedRegionGroup.get(propertyName));\n    },\n\n    validateSpeedFactor(dayOfWeek, timeInterval, value) {\n      const isNewSpeedRegionGroup = this.get('isNewSpeedRegionGroup');\n      const speedRegion = this.get('speedRegion');\n      const speedRegionModel = this.get('store').peekAll('speed-region').find(speedRegionRec => speedRegionRec.get('originalName') === speedRegion.get('originalName'));\n      const currSpeedFactor = isNewSpeedRegionGroup ? null : speedRegionModel.get('speedFactor');\n      const newSpeedFactor = speedRegion.get('speedFactor');\n      const newValue = parseInt(value, 10);\n\n      if (newValue < MIN_SPEED_PERCENTAGE || newValue > MAX_SPEED_PERCENTAGE) {\n        if (Ember.isPresent(currSpeedFactor)) {\n          newSpeedFactor[dayOfWeek].set(timeInterval, this.speedFactorToPercentage(currSpeedFactor[dayOfWeek][timeInterval]));\n        } else {\n          newSpeedFactor[dayOfWeek].set(timeInterval, this.speedFactorToPercentage(defaultSpeedFactor[dayOfWeek][timeInterval]));\n        }\n\n        return false;\n      }\n\n      return true;\n    },\n\n    validateLocationInBlockoutRegion(place) {\n      const location = Ember.isPresent(place) ? place.get('location') : null;\n      return this.isLocationInsidePolygons(location);\n    },\n\n    isLocationInsidePolygons(location) {\n      const speedRegionModels = this.get('store').peekAll('speed-region');\n\n      const point = _turfHelpers.default.point([location.get('lng'), location.get('lat')]);\n\n      let isInsidePolygons = false;\n      speedRegionModels.forEach(speedRegionModel => {\n        if (speedRegionModel.polygon.length <= 0) return;\n        const lnglat = speedRegionModel.polygon.map(latlng => {\n          return [latlng[1], latlng[0]];\n        });\n\n        const polygon = _turfHelpers.default.polygon([lnglat]);\n\n        if ((0, _booleanPointInPolygon.default)(point, polygon)) {\n          isInsidePolygons = true;\n        }\n      });\n      return isInsidePolygons;\n    },\n\n    validateAddress(place) {\n      const address = Ember.isPresent(place) ? place.get('address') : null;\n      const location = Ember.isPresent(place) ? place.get('location') : null;\n      const speedAddressModels = this.get('store').peekAll('speed-region-address').filter(currAddress => !currAddress.isSoftDeletedRow);\n      let valid = true;\n      if (Ember.isEmpty(address.get('streetAddress')) || Ember.isEmpty(address.get('locality')) || Ember.isEmpty(location.get('lat'))) return false;\n      if (speedAddressModels.length >= MAX_ADDRESS) return false;\n\n      if (Ember.isPresent(address)) {\n        const result = speedAddressModels.find(speedAddressModel => {\n          if (speedAddressModel.get('streetNumber') === address.get('streetNumber') && speedAddressModel.get('streetAddress') === address.get('streetAddress') && speedAddressModel.get('locality') === address.get('locality') && speedAddressModel.get('region') === address.get('region')) {\n            return true;\n          }\n\n          return false;\n        });\n\n        if (Ember.isPresent(result)) {\n          this.showErrorPopupMessage('This address is already on the list.');\n          valid = false;\n        }\n      }\n\n      if (valid && Ember.isPresent(location)) {\n        valid = !this.isLocationInsidePolygons(location);\n\n        if (!valid) {\n          this.showErrorPopupMessage('Address cannot be inside a blocked polygon.');\n        }\n      }\n\n      return valid;\n    },\n\n    showErrorPopupMessage(message) {\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const typeName = isBlockoutRegionSetType ? 'blockout' : 'speed';\n      const tooltip = this.get('tooltip');\n      tooltip.pushConfirmation({\n        title: `${_lodash.default.capitalize(typeName)} Regions`,\n        hasoverlay: true,\n        errors: [{\n          validation: message\n        }],\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          tooltip.reset();\n        }\n      });\n    },\n\n    addNewAddress(place) {\n      const speedRegionAddressTableRef = this.get('speedRegionAddressTableRef');\n      const address = place.get('address');\n      const location = place.get('location');\n      const addressObject = {\n        streetNumber: address.get('streetNumber'),\n        streetAddress: address.get('streetAddress'),\n        locality: address.get('locality'),\n        subLocality: address.get('subLocality'),\n        region: address.get('region'),\n        postalCode: address.get('postalCode'),\n        country: address.get('country'),\n        lat: location.get('lat'),\n        lng: location.get('lng')\n      };\n      this.set('speedRegionGroupChanges', true);\n      this.createSingleAddressRecord(addressObject);\n\n      if (Ember.isPresent(speedRegionAddressTableRef)) {\n        Ember.run.scheduleOnce('afterRender', speedRegionAddressTableRef, 'refreshData'); // refresh data\n      }\n    },\n\n    //NYAAR-19947,NYAAR-19948-for creating activity log ,while creating, editing and deleting a speed and blockout region group\n    async createSpeedRegionGroupActivityLog(activity, details) {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const eventLog = {\n        type: 'event',\n        attributes: {\n          source: 'webApp',\n          eventType: 'UE',\n          actionType: 'genericLogging',\n          userId: this.get('session.data.authenticated.userId'),\n          receivedAt: (0, _moment.default)().toDate(),\n          eventLog: {\n            genericLogging: [{\n              activity: activity,\n              loggingType: 'user',\n              details: details\n            }]\n          }\n        }\n      };\n      await activityLogAdapter.createEventActivity(eventLog);\n    },\n\n    actions: {\n      onAddAddress(place) {\n        if (!this.validateAddress(place)) return false;\n        this.addNewAddress(place);\n      },\n\n      onCellValueChange(record, value, options) {\n        if (options.valuePath === 'location.geoNode' && Ember.isEmpty(value)) {\n          this.cleanupPlaceModel();\n          return;\n        }\n\n        record.set(`${options.valuePath}`, value);\n\n        if (options.valuePath === 'location.lng' && Ember.isPresent(value) && this.isLocationInsidePolygons(record.get('location'))) {\n          this.cleanupPlaceModel();\n          return;\n        }\n      },\n\n      validateLocationInBlockoutRegion(position) {\n        const location = Ember.Object.create({\n          lat: position.lat,\n          lng: position.lon\n        });\n        return this.isLocationInsidePolygons(location);\n      },\n\n      onSpeedFactorChange(dayOfWeek, timeInterval, value) {\n        if (!this.validateSpeedFactor(dayOfWeek, timeInterval, value)) return false;\n        this.updateCurrentSpeedRegionModel('speedFactor');\n        this.set('speedRegionGroupChanges', true);\n      },\n\n      onSpeedRegionNameChanges() {\n        this.updateCurrentSpeedRegionModel('name');\n        this.set('speedRegionGroupChanges', true);\n      },\n\n      onChangeDateTime(valuePath, value) {\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set('speedRegionGroupChanges', true);\n        this.set(valuePath, momentTime.toDate());\n      },\n\n      onChangeDate(valuePath, value) {\n        const momentDate = (0, _moment.default)(value[0]);\n        this.set('speedRegionGroupChanges', true);\n\n        if (valuePath === 'speedRegionGroup.end') {\n          momentDate.endOf('day');\n        }\n\n        this.set(valuePath, momentDate.toDate());\n      },\n\n      onChangeTime(valuePath, value) {\n        const momentDate = (0, _moment.default)(value[0]);\n        this.set('speedRegionGroupChanges', true);\n        this.set(valuePath, momentDate.format('HH:mm'));\n      },\n\n      toggleRecurrence(value) {\n        this.set('speedRegionGroupChanges', true);\n        this.set('speedRegionGroup.recurrence', value);\n      },\n\n      onSpeedRegionGroupFormChanges() {\n        this.set('speedRegionGroupChanges', true);\n      },\n\n      newRegionGroup() {\n        const selectedRow = this.get('selectedRow');\n        const selectedSpeedRegionRow = this.get('selectedSpeedRegionRow');\n        const speedRegionTableRef = this.get('speedRegionTableRef');\n        const speedRegionAddressTableRef = this.get('speedRegionAddressTableRef');\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n          this.set('tableRef.config.selectFirstRow', false);\n        }\n\n        if (selectedSpeedRegionRow) {\n          selectedSpeedRegionRow.set('selected', false);\n        }\n\n        this.setDefaultProperties();\n        this.setSpeedRegionDefaultProperties();\n        this.setProperties({\n          isNewSpeedRegionGroup: true,\n          disableForm: false,\n          speedRegionGroupChanges: false\n        });\n        this.get('tableRef').onUncheckAll();\n        speedRegionTableRef.onUncheckAll();\n\n        if (Ember.isPresent(speedRegionTableRef)) {\n          Ember.run.scheduleOnce('afterRender', speedRegionTableRef, 'refreshData'); // refresh data\n        }\n\n        if (Ember.isPresent(speedRegionAddressTableRef)) {\n          Ember.run.scheduleOnce('afterRender', speedRegionAddressTableRef, 'refreshData'); // refresh data\n        }\n\n        this.buttonSettings(true, true, true);\n      },\n\n      editRegionGroup() {\n        const selectedRow = this.get('selectedRow');\n        this.setDefaultProperties(selectedRow);\n        this.setProperties({\n          isNewSpeedRegionGroup: false,\n          disableForm: false\n        });\n        this.buttonSettings(true, true, true);\n      },\n\n      async deleteRegionGroup() {\n        const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n        const typeName = isBlockoutRegionSetType ? 'blockout' : 'speed';\n        const notifications = this.get('notifications');\n        const speedRegionName = this.get('speedRegionGroup.name');\n        const activity = `Delete ${_lodash.default.capitalize(typeName)} Region`;\n        const details = `Deleted ${typeName} region set ${speedRegionName}.`;\n        this.set('isDeleteSpeedRegionGroup', true);\n        const tooltip = this.get('tooltip');\n        tooltip.pushConfirmation({\n          title: ' Blockout Regions',\n          hasoverlay: true,\n          tip: `Are you sure you want to delete the ${typeName} region set? Once deleted, it cannot be recovered.`,\n          primaryActionText: 'Confirm',\n          primaryAction: () => {\n            this.cleanupPlaceModel();\n            this.cleanupSpeedRegionModel();\n            this.cleanupSpeedRegionAddressModel();\n            return this.get('delete').perform().then(async () => {\n              await this.createSpeedRegionGroupActivityLog(activity, details);\n              notifications.success(`${typeName} REGION SET SUCCESSFULLY DELETED`);\n              tooltip.reset();\n              this.set('isDeleteSpeedRegionGroup', false);\n            });\n          },\n          secondaryActionText: 'Cancel',\n\n          secondaryAction() {\n            return tooltip.reset();\n          }\n\n        });\n      },\n\n      async saveRegionGroup() {\n        this.onSaveSpeedRegionGroup();\n      },\n\n      undoRegionGroup() {\n        this.undoSpeedRegionGroup();\n      },\n\n      removeSpeedRegion() {\n        this.removeSpeedRegion();\n      },\n\n      removeSpeedAddress() {\n        this.removeSpeedAddress();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.addressConfig = void 0;\n  const addressConfig = {\n    valuePath: 'place',\n    modelName: 'place',\n    extra: {\n      aliasPath: 'address.content.alias',\n      notesPath: 'address.content.notes',\n      displayPath: 'address.content.address',\n      premisePath: 'address.content.premise',\n      streetNumberPath: 'address.content.streetNumber',\n      streetNamePath: 'address.content.streetName',\n      localityPath: 'address.content.locality',\n      regionPath: 'address.content.region',\n      subRegionPath: 'address.content.county',\n      postalCodePath: 'address.content.postalCode',\n      countryPath: 'address.content.country',\n      freeformAddressPath: 'address.content.freeformAddress',\n      tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n      useOptionRecord: true,\n      streetAddressPath: 'address.content.streetAddress',\n      locationsPath: 'address.locations.content.firstObject.latlng',\n      markerTypeOption: 'speed-region'\n    }\n  };\n  _exports.addressConfig = addressConfig;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/speed-region-map/component\", [\"exports\", \"adept-iq/config/environment\", \"lodash\", \"turfHelpers\", \"geometryDifference\", \"booleanOverlap\"], function (_exports, _environment, _lodash, _turfHelpers, _geometryDifference, _booleanOverlap) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SEARCH_PLACE_TYPE = 'search-place';\n  const SPEED_ADDRESS_TYPE = 'speed-address';\n  const SPEED_REGION_TYPE = 'speed-region';\n  const SPEED_REGION_GROUP_TYPE = 'speed-region-group';\n  const MAX_NUMBER_POLYGON = 1;\n\n  var _default = Ember.Component.extend(Ember.Evented, {\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    mapService: Ember.inject.service('map'),\n    zoom: 10,\n    softDeletedPolygons: null,\n    // passed on\n    isEditMode: false,\n    speedAddress: null,\n    speedRegion: null,\n    speedRegionGroup: null,\n    isBlockoutRegionSetType: false,\n    showErrorPopupMessage: null,\n    searchPlace: null,\n    onSpeedRegionGroupFormChanges: null,\n    drawnItems: null,\n    errorInfoControl: null,\n    restorePosition: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('softDeletedPolygons', []);\n      this.set('geocode.isInvalidAddress', true);\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.setupMapDrawControl();\n      this.activeGeocodeChange();\n    },\n\n    activeGeocodeChange: Ember.observer('geocode.activeGeo', function () {\n      const map = this.get('map');\n      const geocodeService = this.get('geocode');\n      const activeGeocode = geocodeService.get('activeGeo');\n      if (!map) return;\n\n      if (activeGeocode) {\n        map.on('click', function (event) {\n          geocodeService.saveNewGeocode(event.latlng);\n        });\n      } else {\n        map.off('click');\n      }\n    }),\n\n    setupMapDrawControl() {\n      const mapService = this.get('mapService');\n      const validateBlockoutAddresses = this.validateBlockoutAddresses.bind(this);\n      const undoPolygon = this.undoPolygon.bind(this);\n      const updateInfoControl = this.updateInfoControl.bind(this);\n      const validatePolygon = this.validatePolygon.bind(this);\n      const createNewPolygon = this.createNewPolygon.bind(this);\n      const mapElementId = this.get('elementId');\n      const zoomLevel = this.get('zoom');\n      const bnomadmap = mapService.createLeafletMap(mapElementId, {\n        zoom: zoomLevel\n      });\n      const map = bnomadmap.native;\n      const drawnItems = new window.L.FeatureGroup();\n      const errorInfoControl = this.addInfoControl(map);\n      map.setView({\n        lat: mapService.get('center.lat'),\n        lng: mapService.get('center.lon')\n      }, zoomLevel);\n      map.addLayer(drawnItems);\n      this.set('drawnItems', drawnItems);\n      map.pm.addControls({\n        position: 'topright',\n        drawCircle: false,\n        drawMarker: false,\n        drawCircleMarker: false,\n        drawPolyline: false,\n        drawRectangle: false,\n        drawText: false,\n        cutPolygon: false,\n        rotateMode: false\n      });\n      map.pm.setPathOptions({\n        color: 'blue',\n        allowSelfIntersection: false\n      });\n      map.pm.setGlobalOptions({\n        allowSelfIntersection: false,\n        templineStyle: {\n          color: 'blue'\n        },\n        hintlineStyle: {\n          color: 'blue'\n        },\n        snappable: true,\n        snapDistance: 5\n      });\n      map.on('pm:create', e => {\n        const layer = e.layer;\n\n        if (validatePolygon(layer)) {\n          const geoJSON = layer.toGeoJSON();\n          const latlngs = geoJSON.geometry.coordinates[0].map(point => {\n            const newPoint = [point[1], point[0]];\n            return newPoint;\n          });\n          createNewPolygon(latlngs);\n          layer.pm.remove();\n        } else {\n          updateInfoControl('Zone polygon cannot intersect with other zones.');\n          undoPolygon(layer);\n        }\n      });\n      map.on('pm:globaleditmodetoggled', e => {\n        validateBlockoutAddresses(e);\n      });\n      map.on('pm:globaldragmodetoggled', e => {\n        validateBlockoutAddresses(e);\n      });\n      map.on('pm:globalremovalmodetoggled', e => {\n        validateBlockoutAddresses(e);\n      });\n      map.on('pm:globaldrawmodetoggled', e => {\n        validateBlockoutAddresses(e);\n      });\n      this.set('map', map);\n      this.set('errorInfoControl', errorInfoControl);\n      this.toggleToolbarButton(this.get('isEditMode'));\n    },\n\n    validateBlockoutAddresses(e) {\n      if (!e.enabled) return;\n      const map = this.get('map');\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      const speedRegionAddressModels = this.get('store').peekAll('speed-region-address');\n\n      if (isBlockoutRegionSetType) {\n        const speedRegionGroupAddresses = speedRegionAddressModels.filter(address => !address.isSoftDeletedRow);\n\n        if (speedRegionGroupAddresses.length > 0) {\n          map.pm.disableGlobalEditMode();\n          map.pm.disableGlobalDragMode();\n          map.pm.disableGlobalRemovalMode();\n          map.pm.disableDraw();\n          this.showErrorPopupMessage('Blockout region shapes cannot be modified if there are addresses associated with the blockout region set. Either delete the addresses and try again or create a new blockout region set.');\n        }\n      }\n    },\n\n    updateInfoControl(errorMessage) {\n      const errorInfoControl = this.get('errorInfoControl');\n\n      if (Ember.isEmpty(errorMessage)) {\n        errorInfoControl.update();\n        return;\n      }\n\n      errorInfoControl.update(errorMessage);\n      Ember.run.later(this, function () {\n        errorInfoControl.update();\n      }, 2000);\n    },\n\n    createMarker(lat, lng, id, fullAddress, type) {\n      const map = this.get('map');\n      let addressMarker = null;\n\n      if (type === SPEED_ADDRESS_TYPE) {\n        addressMarker = window.L.AwesomeMarkers.icon({\n          icon: 'plus',\n          prefix: 'fa',\n          markerColor: 'green'\n        });\n      } else if (type === SEARCH_PLACE_TYPE) {\n        addressMarker = window.L.AwesomeMarkers.icon({\n          icon: 'circle',\n          prefix: 'fa',\n          markerColor: 'red'\n        });\n      }\n\n      const marker = window.L.marker([lat, lng], {\n        pmIgnore: true,\n        properties: {\n          id: id,\n          type: type\n        },\n        icon: addressMarker\n      });\n\n      if (type === SPEED_ADDRESS_TYPE) {\n        marker.bindTooltip(fullAddress, {\n          permanent: false,\n          direction: 'auto',\n          className: 'marker-labels'\n        });\n      } else if (type === SEARCH_PLACE_TYPE) {\n        marker.bindTooltip(fullAddress, {\n          permanent: false,\n          direction: 'auto',\n          className: 'marker-labels'\n        });\n      }\n\n      return marker;\n    },\n\n    createPolygon(latlngs, color, speedRegionName, originalName, type) {\n      const undoPolygon = this.undoPolygon.bind(this);\n      const updateInfoControl = this.updateInfoControl.bind(this);\n      const deletePolygon = this.deletePolygon.bind(this);\n      const validatePolygon = this.validatePolygon.bind(this);\n      const updatePolygon = this.updatePolygon.bind(this);\n      const map = this.get('map');\n      const self = this;\n      const polygon = window.L.polygon([latlngs], {\n        color: color,\n        properties: {\n          originalName: originalName,\n          speedRegionName: speedRegionName,\n          type: type\n        }\n      });\n\n      if (type === SPEED_REGION_GROUP_TYPE) {\n        polygon.pm.setOptions({\n          allowEditing: false,\n          allowRemoval: false,\n          allowCutting: false,\n          allowRotation: false,\n          draggable: false\n        });\n      } else {\n        polygon.on('pm:remove', function (e) {\n          const layer = e.layer;\n          deletePolygon(layer);\n          map.pm.disableGlobalRemovalMode();\n        });\n        polygon.on('pm:markerdragstart', function (e) {\n          const layer = e.layer;\n          const restorePosition = layer.getLatLngs();\n          self.set('restorePosition', restorePosition);\n        });\n        polygon.on('pm:markerdragend', function (e) {\n          const layer = e.layer;\n\n          if (validatePolygon(layer)) {\n            updatePolygon(layer);\n          } else {\n            undoPolygon(layer);\n            updateInfoControl('Zone polygon cannot intersect with other zones.');\n          }\n        });\n        polygon.on('pm:dragstart', function (e) {\n          const layer = e.layer;\n          const restorePosition = layer.getLatLngs();\n          self.set('restorePosition', restorePosition);\n        });\n        polygon.on('pm:dragend', function (e) {\n          const layer = e.layer;\n\n          if (validatePolygon(layer)) {\n            updatePolygon(layer);\n          } else {\n            undoPolygon(layer);\n            updateInfoControl('Zone polygon cannot intersect with other zones.');\n          }\n        });\n      }\n\n      if (type === SPEED_REGION_GROUP_TYPE) {\n        polygon.bindTooltip(speedRegionName, {\n          permanent: true,\n          direction: 'center',\n          className: 'polygon-labels'\n        });\n      }\n\n      return polygon;\n    },\n\n    clearDrawnItems(type) {\n      if (type === SPEED_REGION_TYPE) {\n        const drawnItems = this.get('drawnItems');\n        const polygonLayers = drawnItems.getLayers();\n        polygonLayers.forEach(polygonLayer => {\n          const currentType = polygonLayer?.options?.properties?.type;\n\n          if (currentType === type) {\n            drawnItems.removeLayer(polygonLayer);\n          }\n        });\n        this.set('restorePosition');\n      } else if (type === SPEED_REGION_GROUP_TYPE) {\n        const map = this.get('map');\n        map.eachLayer(layer => {\n          const currLayerType = layer?.options?.properties?.type;\n\n          if (currLayerType === SPEED_REGION_GROUP_TYPE) {\n            map.removeLayer(layer);\n          }\n        });\n      } else if (type === SPEED_ADDRESS_TYPE) {\n        const map = this.get('map');\n        map.eachLayer(polygonLayer => {\n          const currentType = polygonLayer?.options?.properties?.type;\n\n          if (currentType === type) {\n            map.removeLayer(polygonLayer);\n          }\n        });\n      } else if (type === SEARCH_PLACE_TYPE) {\n        const map = this.get('map');\n        map.eachLayer(polygonLayer => {\n          const currentType = polygonLayer?.options?.properties?.type;\n\n          if (currentType === type) {\n            map.removeLayer(polygonLayer);\n          }\n        });\n      }\n    },\n\n    addInfoControl(map) {\n      const info = window.L.control({\n        position: 'bottomleft'\n      });\n\n      info.onAdd = function () {\n        this._div = window.L.DomUtil.create('div', 'speed_region_map_error'); // create a div with a class \"info\"\n\n        this.update();\n        return this._div;\n      };\n\n      info.update = function (message) {\n        const infoDiv = Ember.$(this._div);\n\n        if (message) {\n          this._div.innerHTML = message;\n          infoDiv.removeClass('disabled');\n        } else {\n          this._div.innerHTML = '';\n          infoDiv.addClass('disabled');\n        }\n      };\n\n      info.addTo(map);\n      return info;\n    },\n\n    convertSpeedRegionToGeoJSON(speedRegion) {\n      const lnglat = speedRegion.polygon.map(latlng => {\n        return [latlng[1], latlng[0]];\n      });\n      if (lnglat.length <= 0) return null;\n\n      const speedRegionGeoJson = _turfHelpers.default.polygon([lnglat], {\n        speedRegionName: speedRegion.name,\n        originalName: speedRegion.originalName\n      });\n\n      return speedRegionGeoJson;\n    },\n\n    validatePolygon(layer) {\n      const newPolygonGeoJson = layer.toGeoJSON();\n      const speedRegionGroupRegions = this.get('speedRegionGroup.regions');\n      const softDeletedPolygons = this.get('softDeletedPolygons');\n      newPolygonGeoJson.properties.speedRegionName = layer.options?.properties?.speedRegionName;\n      newPolygonGeoJson.properties.originalName = layer.options?.properties?.originalName; // check other existing zones for intersects\n\n      const intersectRegionPolygon = Ember.isPresent(speedRegionGroupRegions) ? speedRegionGroupRegions.find(region => {\n        const currentRegionGeoJson = this.convertSpeedRegionToGeoJSON(region);\n\n        if (Ember.isPresent(currentRegionGeoJson) && !softDeletedPolygons.includes(region.name) && newPolygonGeoJson.properties.originalName !== currentRegionGeoJson.properties.originalName && currentRegionGeoJson.geometry.coordinates[0].length > 1) {\n          const diffInPolygon = (0, _geometryDifference.default)(newPolygonGeoJson, currentRegionGeoJson);\n\n          if (Ember.isEmpty(diffInPolygon)) {\n            return true;\n          }\n\n          return (0, _booleanOverlap.default)(diffInPolygon, newPolygonGeoJson);\n        }\n\n        return false;\n      }) : null;\n      return !Ember.isPresent(intersectRegionPolygon) && !layer.intersects();\n    },\n\n    undoPolygon(layer) {\n      const restorePosition = this.get('restorePosition');\n\n      if (Ember.isEmpty(restorePosition)) {\n        layer.pm.remove();\n      } else {\n        layer.setLatLngs(restorePosition);\n        layer.pm.disable();\n        layer.pm.enable();\n      }\n    },\n\n    // just dimming instead of compltely removing from map\n    toggleToolbarButton(state) {\n      // toggle button dimming and clickability\n      const drawControl = Ember.$('.leaflet-buttons-control-button');\n\n      if (Ember.isPresent(drawControl)) {\n        if (state) {\n          // enable toolbar control\n          drawControl.removeClass('draw-control-disabled');\n        } else {\n          // disable toolbar control\n          drawControl.addClass('draw-control-disabled');\n        }\n      }\n    },\n\n    // just dimming instead of compltely removing from map\n    toggleIndividualToolbarButtons() {\n      const layers = this.get('drawnItems._layers');\n      const createControl = Ember.$('.leaflet-pm-draw');\n\n      if (Ember.isPresent(layers) && Ember.isPresent(createControl)) {\n        if (Object.keys(layers).length >= MAX_NUMBER_POLYGON) {\n          // disable toolbar control\n          createControl.addClass('draw-control-disabled');\n        } else {\n          // enable toolbar control\n          createControl.removeClass('draw-control-disabled');\n        }\n      }\n\n      const editControl = Ember.$('.leaflet-pm-edit');\n\n      if (Ember.isPresent(layers) && Ember.isPresent(editControl)) {\n        if (Object.keys(layers).length === 0) {\n          // disable toolbar control\n          editControl.addClass('draw-control-disabled');\n        } else {\n          // enable toolbar control\n          editControl.removeClass('draw-control-disabled');\n        }\n      }\n    },\n\n    // isEditMode is triggered from main screen\n    isEditModeChange: Ember.observer('isEditMode', function () {\n      const isEditMode = this.get('isEditMode');\n      const map = this.get('map');\n      this.toggleToolbarButton(isEditMode);\n      this.set('softDeletedPolygons', []);\n\n      if (!isEditMode) {\n        const speedRegionGroupRegions = this.get('speedRegionGroup.regions') || [];\n        this.updateSpeedRegionGroupPolygons(speedRegionGroupRegions);\n        map.pm.disableGlobalRemovalMode();\n        map.pm.disableGlobalEditMode();\n      }\n    }),\n    searchPlaceChange: Ember.observer('searchPlace.location.lat', 'searchPlace.location.lng', function () {\n      const map = this.get('map');\n      const searchPlace = this.get('searchPlace');\n      const address = searchPlace.get('address');\n      const location = searchPlace.get('location');\n      const drawnItems = this.get('drawnItems');\n\n      if (Ember.isPresent(drawnItems)) {\n        this.clearDrawnItems(SEARCH_PLACE_TYPE);\n      }\n\n      if (Ember.isPresent(location)) {\n        const lat = location.get('lat');\n        const lng = location.get('lng');\n\n        if (Ember.isPresent(lat) && Ember.isPresent(lng)) {\n          const lmarker = this.createMarker(lat, lng, address.get('id'), address.get('fullAddress'), SEARCH_PLACE_TYPE);\n          lmarker.addTo(map);\n        }\n      }\n    }),\n    speedAddressChange: Ember.observer('speedAddress', function () {\n      const map = this.get('map');\n      const speedAddress = this.get('speedAddress');\n      const drawnItems = this.get('drawnItems');\n\n      if (Ember.isPresent(drawnItems)) {\n        this.clearDrawnItems(SPEED_ADDRESS_TYPE);\n      }\n\n      if (Ember.isPresent(speedAddress)) {\n        const lat = speedAddress.get('lat');\n        const lng = speedAddress.get('lng');\n\n        if (Ember.isPresent(lat) && Ember.isPresent(lng)) {\n          const lmarker = this.createMarker(lat, lng, speedAddress.get('id'), speedAddress.get('fullAddress'), SPEED_ADDRESS_TYPE);\n          lmarker.addTo(map);\n        }\n      }\n    }),\n    speedRegionChange: Ember.observer('speedRegion', function () {\n      const speedRegion = this.get('speedRegion');\n      const drawnItems = this.get('drawnItems');\n\n      if (Ember.isPresent(drawnItems)) {\n        this.clearDrawnItems(SPEED_REGION_TYPE);\n      }\n\n      if (Ember.isPresent(speedRegion)) {\n        const polygon = speedRegion.get('polygon') ? speedRegion.get('polygon') : [];\n\n        if (!Ember.isEmpty(polygon)) {\n          const lpolygon = this.createPolygon(polygon, 'blue', speedRegion.get('name'), speedRegion.get('originalName'), SPEED_REGION_TYPE);\n          lpolygon.addTo(drawnItems);\n        }\n\n        this.toggleIndividualToolbarButtons();\n      }\n    }),\n    speedRegionGroupChange: Ember.observer('speedRegionGroup', function () {\n      const speedRegionGroupRegions = this.get('speedRegionGroup.regions');\n      const drawnItems = this.get('drawnItems');\n\n      if (Ember.isPresent(drawnItems)) {\n        this.clearDrawnItems(SPEED_REGION_GROUP_TYPE);\n      }\n\n      if (Ember.isEmpty(speedRegionGroupRegions)) return;\n      this.updateSpeedRegionGroupPolygons(speedRegionGroupRegions);\n    }),\n\n    createNewPolygon(polygon) {\n      const speedRegion = this.get('speedRegion');\n      const drawnItems = this.get('drawnItems');\n      if (Ember.isEmpty(speedRegion)) return;\n      this.onSpeedRegionGroupFormChanges();\n      const newPolygon = this.createPolygon(polygon, 'blue', speedRegion.get('name'), speedRegion.get('originalName'), SPEED_REGION_TYPE);\n      newPolygon.addTo(drawnItems);\n      speedRegion.set('polygon', polygon);\n      this.updateSpeedRegionGroup(speedRegion);\n      this.toggleIndividualToolbarButtons();\n    },\n\n    updateSpeedRegionGroup(updateSpeedRegion) {\n      const speedRegionGroupRegions = _lodash.default.cloneDeep(this.get('speedRegionGroup.regions'));\n\n      const speedRegion = speedRegionGroupRegions.find(region => region.originalName === updateSpeedRegion.originalName);\n\n      if (Ember.isPresent(speedRegion)) {\n        speedRegion.polygon = updateSpeedRegion.polygon;\n        this.set('speedRegionGroup.regions', speedRegionGroupRegions);\n      }\n\n      this.updateSpeedRegionGroupPolygons(speedRegionGroupRegions);\n    },\n\n    updatePolygon(layer) {\n      const speedRegion = this.get('speedRegion');\n\n      if (Ember.isPresent(speedRegion)) {\n        const geoJSON = layer.toGeoJSON();\n        this.onSpeedRegionGroupFormChanges();\n        this.updateSpeedRegion(speedRegion, geoJSON.geometry.coordinates);\n        this.updateSpeedRegionGroup(speedRegion);\n      }\n    },\n\n    deletePolygon(layer) {\n      const speedRegion = this.get('speedRegion');\n      const drawnItems = this.get('drawnItems');\n\n      if (Ember.isPresent(speedRegion)) {\n        this.onSpeedRegionGroupFormChanges();\n        this.updateSpeedRegion(speedRegion, [[]]);\n        drawnItems.removeLayer(layer);\n        this.flagRegionPolygonDeleted(speedRegion);\n        this.updateSpeedRegionGroup(speedRegion);\n        this.toggleIndividualToolbarButtons();\n      }\n    },\n\n    flagRegionPolygonDeleted(speedRegion) {\n      const softDeletedPolygons = this.get('softDeletedPolygons');\n\n      if (Ember.isPresent(speedRegion)) {\n        softDeletedPolygons.push(speedRegion.get('name'));\n      }\n    },\n\n    updateSpeedRegion(speedRegion, latlngs) {\n      const lpolygon = latlngs[0];\n      const polygon = lpolygon.map(point => {\n        const newPoint = [point[1], point[0]];\n        return newPoint;\n      });\n      speedRegion.set('polygon', polygon);\n    },\n\n    updateSpeedRegionGroupPolygons(regions) {\n      const map = this.get('map');\n      this.clearDrawnItems(SPEED_REGION_GROUP_TYPE);\n      regions.forEach(region => {\n        const polygon = region.polygon;\n\n        if (!Ember.isEmpty(polygon)) {\n          const polygons = this.createPolygon([polygon], 'grey', region.name, region.originalName, SPEED_REGION_GROUP_TYPE);\n          polygons.addTo(map);\n        }\n      });\n      this.bringCurrentRegionToFront();\n    },\n\n    bringCurrentRegionToFront() {\n      const drawnItems = this.get('drawnItems');\n      const polygonLayers = drawnItems.getLayers();\n      polygonLayers.forEach(layer => {\n        const type = layer?.options?.properties?.type;\n\n        if (type !== SPEED_ADDRESS_TYPE) {\n          layer.bringToFront();\n        }\n      });\n    },\n\n    destroy() {\n      this._super(...arguments);\n\n      Ember.$('html,body,.tomtom-map,#speed-region').removeClass('custom-cursor');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/addresses/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/addresses/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['blockout-addresses-table'],\n    store: Ember.inject.service(),\n    config: _config.default,\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    configType: null,\n    // passed in attributes\n    additionalTableActions: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n      this.set('tableActions', this.get('additionalTableActions'));\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let activeData = store.peekAll(modelName) || [];\n\n      if (Ember.isPresent(this.get('config.fetchModelData'))) {\n        activeData = (await store.findAll(modelName)) || [];\n      }\n\n      if (Ember.isPresent(this.get('config.queryModelData'))) {\n        const queryParams = this.get('queryParams') || {};\n        activeData = await store.query(modelName, queryParams);\n      }\n\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        return data.get('isSoftDeletedRow') === false;\n      });\n      return filteredData;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/addresses/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'speed-region-address',\n    title: 'Alternative Addresses',\n    tooltipTitle: 'Alternative Addresses',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'address',\n      index: 1,\n      type: 'string',\n      label: 'Address',\n      valuePath: 'fullAddress',\n      defaultWidth: 270,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-region-groups/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-region-groups/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\", \"adept-iq/utils/remove-focus\"], function (_exports, _component, _config, _sorts, _filters, _removeFocus) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['speed-region-group-table'],\n    store: Ember.inject.service(),\n    config: _config.default,\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    configType: null,\n    // coming from caller\n    isBlockoutRegionSetType: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      const isBlockoutRegionSetType = this.get('isBlockoutRegionSetType');\n      let activeData = store.peekAll(modelName) || [];\n\n      if (Ember.isPresent(this.get('config.fetchModelData'))) {\n        activeData = (await store.findAll(modelName)) || [];\n      }\n\n      if (Ember.isPresent(this.get('config.queryModelData'))) {\n        const queryParams = this.get('queryParams') || {};\n        activeData = await store.query(modelName, queryParams);\n      }\n\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        const isSoftDeletedRow = data.get('isSoftDeletedRow') || false;\n\n        if (isBlockoutRegionSetType) {\n          return !isSoftDeletedRow && data.get('isBlockoutRegionType');\n        }\n\n        return !isSoftDeletedRow && !data.get('isBlockoutRegionType');\n      });\n      return filteredData;\n    },\n\n    workingInProgress() {\n      const speedRegionGroup = Ember.$('.speed-region-groups');\n      this.set('switchingRow', true);\n      speedRegionGroup.addClass('speed-region-disabled');\n      (0, _removeFocus.cursorWait)();\n      Ember.run.later(() => {\n        this.set('switchingRow', false);\n        speedRegionGroup.removeClass('speed-region-disabled');\n        (0, _removeFocus.cursorDefault)();\n      }, 2000);\n    },\n\n    actions: {\n      onRowClick(row, event) {\n        if (this.get('switchingRow')) {\n          this.cancelRow(event);\n          return;\n        }\n\n        this.workingInProgress();\n        this.tableRowSelect(row, event);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-region-groups/config\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'speed-region-group',\n    title: 'Speed Region Sets',\n    tooltipTitle: 'System Configuration',\n    defaultSortId: 'id',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    queryModelData: true,\n    columns: [{\n      id: 'name',\n      index: 1,\n      type: 'string',\n      label: 'Name',\n      valuePath: 'name',\n      defaultWidth: 300,\n      searchable: true\n    }, {\n      id: 'start',\n      index: 2,\n      type: 'date',\n      label: 'Start',\n      valuePath: 'start',\n      defaultWidth: 300,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      exportFormat: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      prefixExportDateFormat: ' ',\n      searchable: true\n    }, {\n      id: 'end',\n      index: 3,\n      type: 'date',\n      label: 'End',\n      valuePath: 'end',\n      defaultWidth: 300,\n      format: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      exportFormat: `${_environment.default.dateTimeFormat.dateTimeMoment}`,\n      prefixExportDateFormat: ' ',\n      prefixDateFormat: ' ',\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-zones/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-zones/config\", \"adept-iq/utils/sorts\", \"adept-iq/utils/filters\"], function (_exports, _component, _config, _sorts, _filters) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['speed-region-table'],\n    store: Ember.inject.service(),\n    config: _config.default,\n    paginationEnabled: true,\n    enableWarningRowChangeAlert: true,\n    configType: null,\n    // passed in attributes\n    additionalTableActions: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async didInsertElement() {\n      this._super(...arguments);\n\n      const table = this.get('table');\n      this.set('tableActions', this.get('additionalTableActions'));\n\n      if (table) {\n        this.set('tableRef', this);\n      }\n    },\n\n    async query(modelName) {\n      let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      const compareFn = (0, _sorts.buildCompareFunction)(params.sorts);\n      const filterFn = (0, _filters.buildFilterFunction)(params.filter);\n      let activeData = store.peekAll(modelName) || [];\n\n      if (Ember.isPresent(this.get('config.fetchModelData'))) {\n        activeData = (await store.findAll(modelName)) || [];\n      }\n\n      if (Ember.isPresent(this.get('config.queryModelData'))) {\n        const queryParams = this.get('queryParams') || {};\n        activeData = await store.query(modelName, queryParams);\n      }\n\n      let filteredData = activeData.filter(filterFn).sort(compareFn);\n      filteredData = filteredData.filter(data => {\n        return data.get('isSoftDeletedRow') === false;\n      });\n      return filteredData;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/table/speed-zones/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'radio',\n    modelName: 'speed-region',\n    title: 'Speed Regions',\n    tooltipTitle: 'Speed Regions',\n    defaultSortId: 'name',\n    defaultSortAsc: true,\n    selectFirstRow: true,\n    columns: [{\n      id: 'name',\n      index: 1,\n      type: 'string',\n      label: 'Name',\n      valuePath: 'name',\n      defaultWidth: 290,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"WAudoKWu\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dayOfWeek\\\",\\\"timeInterval\\\"],\\\"statements\\\":[[1,[27,\\\"side-drawer/system-config/system-config-header\\\",null,[[\\\"title\\\",\\\"newRecord\\\",\\\"editRecord\\\",\\\"deleteRecord\\\",\\\"undoRecord\\\",\\\"saveRecord\\\",\\\"disableBtns\\\",\\\"disableSavebtn\\\",\\\"speedRegionGroupFormChanges\\\",\\\"disableUndobtn\\\"],[[23,[\\\"pageTitle\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"newRegionGroup\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"editRegionGroup\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"deleteRegionGroup\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"undoRegionGroup\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"saveRegionGroup\\\"],null],[23,[\\\"disableBtns\\\"]],[23,[\\\"disableSavebtn\\\"]],[23,[\\\"speedRegionGroupFormChanges\\\"]],[23,[\\\"disableUndobtn\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"side-drawer/system-config/speed-region-groups/table/speed-region-groups\\\",null,[[\\\"isBlockoutRegionSetType\\\",\\\"regions\\\",\\\"tableRef\\\",\\\"speedRegionGroupFormChanges\\\",\\\"validateRecord\\\"],[[23,[\\\"isBlockoutRegionSetType\\\"]],[23,[\\\"regions\\\"]],[23,[\\\"tableRef\\\"]],[23,[\\\"speedRegionGroupFormChanges\\\"]],[23,[\\\"validateRecordTask\\\"]]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"form-panel-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"generic-components/panel\\\",null,[[\\\"class\\\",\\\"title\\\",\\\"isCollapsible\\\"],[\\\"main-information\\\",\\\"\\\",false]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"form\\\"],[9],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"main-information-panel information-panel\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[23,[\\\"speedRegionGroupNameDupError\\\"]]],null],\\\" error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"name\\\"]],\\\"\\\"],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"maxlength\\\",\\\"input\\\",\\\"value\\\"],[\\\"Enter Region Set Name\\\",\\\"text\\\",[23,[\\\"disableForm\\\"]],\\\"58\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSpeedRegionGroupFormChanges\\\"],null],[23,[\\\"speedRegionGroup\\\",\\\"name\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isBlockoutRegionSetType\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[23,[\\\"dateRangeError\\\"]]],null],\\\" error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"or\\\",[[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"start\\\"]],null],null],[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"startTime\\\"]],null],null]],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Starts\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"class\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",\\\"blockout-dateTime-input\\\",1,false,true,\\\"Start Date\\\",[23,[\\\"disableForm\\\"]],false,[23,[\\\"dateFormat\\\"]],[23,[\\\"speedRegionGroup\\\",\\\"start\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",\\\"speedRegionGroup.start\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"class\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"noCalendar\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",\\\"blockout-time-input\\\",1,false,true,\\\"Start Time\\\",[23,[\\\"disableForm\\\"]],true,true,[23,[\\\"timeFormat\\\"]],[23,[\\\"speedRegionGroup\\\",\\\"startTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"speedRegionGroup.startTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[23,[\\\"dateRangeError\\\"]]],null],\\\" error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"or\\\",[[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"end\\\"]],null],null],[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"endTime\\\"]],null],null]],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Ends\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"class\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",\\\"blockout-dateTime-input\\\",1,false,false,\\\"End Date\\\",[23,[\\\"disableForm\\\"]],false,[23,[\\\"dateFormat\\\"]],[23,[\\\"speedRegionGroup\\\",\\\"end\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDate\\\",\\\"speedRegionGroup.end\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"class\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"noCalendar\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",\\\"blockout-time-input\\\",1,false,false,\\\"End Time\\\",[23,[\\\"disableForm\\\"]],true,true,[23,[\\\"timeFormat\\\"]],[23,[\\\"speedRegionGroup\\\",\\\"endTime\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTime\\\",\\\"speedRegionGroup.endTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[23,[\\\"dateRangeError\\\"]]],null],\\\" error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"start\\\"]],null],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Starts\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,false,[23,[\\\"timePlaceHolder\\\"]],[23,[\\\"disableForm\\\"]],true,[23,[\\\"dateTimeFormat\\\"]],[23,[\\\"speedRegionGroup\\\",\\\"start\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDateTime\\\",\\\"speedRegionGroup.start\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[23,[\\\"dateRangeError\\\"]]],null],\\\" error\\\"],null],\\\" \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"end\\\"]],null],null]],null],\\\"error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Ends\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"enableTime\\\",\\\"dateFormat\\\",\\\"date\\\",\\\"onChange\\\"],[\\\"en\\\",1,false,false,[23,[\\\"timePlaceHolder\\\"]],[23,[\\\"disableForm\\\"]],true,[23,[\\\"dateTimeFormat\\\"]],[23,[\\\"speedRegionGroup\\\",\\\"end\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDateTime\\\",\\\"speedRegionGroup.end\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[23,[\\\"isBlockoutRegionSetType\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"blockout-recurrence-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"first-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[9],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"recurrence-label\\\"],[9],[0,\\\"Recurrence\\\"],[10],[10],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"recurrence\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"checked\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"recurrence\\\"]],\\\"continuous\\\"],null],true],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleRecurrence\\\",\\\"continuous\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"continuous-label\\\"],[9],[0,\\\"Continuous\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"second-row\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"recurrence\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[12,\\\"checked\\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"speedRegionGroup\\\",\\\"recurrence\\\"]],\\\"daily\\\"],null],true],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggleRecurrence\\\",\\\"daily\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"recurs-label\\\"],[9],[0,\\\"Recurs Daily\\\"],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"message-group\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[9],[0,\\\"Message\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"textarea\\\",null,[[\\\"class\\\",\\\"rows\\\",\\\"placeholder\\\",\\\"disabled\\\",\\\"maxlength\\\",\\\"input\\\",\\\"value\\\"],[\\\"message-text-area\\\",\\\"2\\\",\\\"\\\",[23,[\\\"disableForm\\\"]],\\\"250\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSpeedRegionGroupFormChanges\\\"],null],[23,[\\\"speedRegionGroup\\\",\\\"message\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"],[1,[27,\\\"side-drawer/system-config/speed-region-groups/table/speed-zones\\\",null,[[\\\"additionalTableActions\\\",\\\"onDeleteButtonClick\\\",\\\"isSearchAllowed\\\",\\\"disableDeleteBtn\\\",\\\"disableAdditionalBtn\\\",\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[23,[\\\"additionalTableActions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"removeSpeedRegion\\\"],null],false,[23,[\\\"disableForm\\\"]],[23,[\\\"disableForm\\\"]],[23,[\\\"speedRegionTableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"input-group \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"mandatoryError\\\"]],[27,\\\"eq\\\",[[23,[\\\"speedRegion\\\",\\\"name\\\"]],\\\"\\\"],null]],null],\\\" error\\\"],null]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"region-name-label\\\"],[9],[0,\\\"Region Name\\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"type\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"region-name-input\\\",\\\"Enter Region Name\\\",\\\"text\\\",[23,[\\\"disableForm\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSpeedRegionNameChanges\\\"],null],[23,[\\\"speedRegion\\\",\\\"name\\\"]]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"isBlockoutRegionSetType\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"speed-factor-tabs\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"wrapper\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tabs\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"daysOfWeekMap\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"input\\\"],[11,\\\"name\\\",\\\"css-tabs\\\"],[12,\\\"id\\\",[28,[\\\"tab-\\\",[22,1,[\\\"index\\\"]]]]],[12,\\\"checked\\\",[28,[[27,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"index\\\"]],1],null],true],null]]]],[11,\\\"class\\\",\\\"tab-switch\\\"],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"label\\\"],[12,\\\"for\\\",[28,[\\\"tab-\\\",[22,1,[\\\"index\\\"]]]]],[11,\\\"class\\\",\\\"tab-label\\\"],[9],[1,[22,1,[\\\"label\\\"]],false],[10],[0,\\\"\\\\n                  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab-content\\\"],[9],[0,\\\"\\\\n                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab-content-row\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"time-period-col speed-factor-label\\\"],[9],[0,\\\"Time Period \\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"change-by-col speed-factor-label\\\"],[9],[0,\\\"Change By\\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"percent-col\\\"],[9],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"timeIntervalMap\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tab-content-row\\\"],[9],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"time-period-col\\\"],[9],[1,[22,2,[\\\"label\\\"]],false],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"change-by-col\\\"],[9],[0,\\\"\\\\n                        \\\"],[1,[27,\\\"input\\\",null,[[\\\"class\\\",\\\"placeholder\\\",\\\"type\\\",\\\"min\\\",\\\"max\\\",\\\"disabled\\\",\\\"input\\\",\\\"value\\\"],[\\\"speed-factor-input\\\",\\\"\\\",\\\"number\\\",[23,[\\\"minSpeedPercentage\\\"]],[23,[\\\"maxSpeedPercentage\\\"]],[23,[\\\"disableRegionChanges\\\"]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onSpeedFactorChange\\\",[22,1,[\\\"index\\\"]],[22,2,[\\\"index\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]],[27,\\\"get\\\",[[27,\\\"get\\\",[[23,[\\\"speedRegion\\\",\\\"speedFactor\\\"]],[22,1,[\\\"index\\\"]]],null],[22,2,[\\\"index\\\"]]],null]]]],false],[0,\\\"\\\\n                      \\\"],[10],[0,\\\"\\\\n                      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"percent-col speed-factor-label\\\"],[9],[0,\\\"%\\\"],[10],[0,\\\"\\\\n                    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                  \\\"],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"isBlockoutRegionSetType\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"input-group blockout-search-address\\\"],[9],[0,\\\"\\\\n              \\\"],[1,[27,\\\"form-components/addresses\\\",null,[[\\\"record\\\",\\\"value\\\",\\\"disabled\\\",\\\"placeholder\\\",\\\"valuePath\\\",\\\"extra\\\",\\\"showPinButton\\\",\\\"validateLocationInBlockoutRegion\\\",\\\"onChange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"place\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"place\\\"]]],null],[23,[\\\"disableForm\\\"]],\\\"City, Address, Zip\\\",[27,\\\"readonly\\\",[[23,[\\\"addressConfig\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"addressConfig\\\",\\\"extra\\\"]]],null],true,[27,\\\"action\\\",[[22,0,[]],\\\"validateLocationInBlockoutRegion\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCellValueChange\\\",[23,[\\\"place\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n              \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableForm\\\"]],[11,\\\"class\\\",\\\"cell button\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[3,\\\"action\\\",[[22,0,[]],\\\"onAddAddress\\\",[23,[\\\"place\\\"]]]],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n            \\\"],[1,[27,\\\"side-drawer/system-config/speed-region-groups/table/addresses\\\",null,[[\\\"onDeleteButtonClick\\\",\\\"isSearchAllowed\\\",\\\"disableDeleteBtn\\\",\\\"disableAdditionalBtn\\\",\\\"tableRef\\\",\\\"isTaskRunning\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"removeSpeedAddress\\\"],null],false,[23,[\\\"disableForm\\\"]],[23,[\\\"disableForm\\\"]],[23,[\\\"speedRegionAddressTableRef\\\"]],[23,[\\\"isTaskRunning\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"id\\\",\\\"speed-region-map\\\"],[11,\\\"class\\\",\\\"speed-region-map\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"side-drawer/system-config/speed-region-groups/speed-region-map\\\",null,[[\\\"elementId\\\",\\\"widget\\\",\\\"speedRegionGroup\\\",\\\"speedRegion\\\",\\\"speedAddress\\\",\\\"isEditMode\\\",\\\"isBlockoutRegionSetType\\\",\\\"showErrorPopupMessage\\\",\\\"selectedSpeedRegionAddressRow\\\",\\\"searchPlace\\\",\\\"onSpeedRegionGroupFormChanges\\\"],[\\\"speed-region\\\",[23,[\\\"widget\\\"]],[23,[\\\"speedRegionGroup\\\"]],[23,[\\\"selectedSpeedRegionRow\\\"]],[23,[\\\"selectedSpeedRegionAddressRow\\\"]],[27,\\\"not\\\",[[23,[\\\"disableRegionChanges\\\"]]],null],[23,[\\\"isBlockoutRegionSetType\\\"]],[23,[\\\"showErrorPopupMessage\\\"]],[23,[\\\"selectedSpeedRegionAddressRow\\\"]],[23,[\\\"place\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSpeedRegionGroupFormChanges\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/speed-region-groups/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/system-config-header/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['g-side-drawer-header'],\n    // passed into header\n    title: null,\n    disableBtns: null,\n    newRecord: null,\n    editRecord: null,\n    saveRecord: null,\n    deleteRecord: null,\n    undoRecord: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    actions: {\n      new() {\n        if (this.get('newRecord')) this.get('newRecord')();\n      },\n\n      edit() {\n        if (this.get('editRecord')) this.get('editRecord')();\n      },\n\n      save() {\n        if (this.get('saveRecord')) this.get('saveRecord')();\n      },\n\n      undo() {\n        if (this.get('undoRecord')) this.get('undoRecord')();\n      },\n\n      delete() {\n        if (this.get('deleteRecord')) this.get('deleteRecord')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/system-config-header/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"NEabbjaG\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"h1\\\"],[11,\\\"class\\\",\\\"header-title\\\"],[9],[1,[21,\\\"title\\\"],false],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-buttons\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"newRecord\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"disableBtns\\\",\\\"new\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"New\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"new\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"disableBtns\\\",\\\"edit\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Edit\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"edit\\\"]],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"deleteRecord\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[23,[\\\"disableBtns\\\",\\\"delete\\\"]]],[9],[7,\\\"span\\\"],[9],[0,\\\"Delete\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"delete\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableSavebtn\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Save\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"save\\\"]],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"undoRecord\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"disableUndobtn\\\"]],[9],[7,\\\"span\\\"],[9],[0,\\\"Undo\\\"],[10],[3,\\\"action\\\",[[22,0,[]],\\\"undo\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/system-config-header/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/system-config/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Yqq+oOfg\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"system-config-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"system-config-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"left-panel\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/system-config/template.hbs' @ L7:C7) \\\"],null]],[[\\\"class\\\",\\\"title\\\",\\\"componentName\\\",\\\"canSearch\\\",\\\"canSave\\\",\\\"canRefresh\\\",\\\"isSearchEnabled\\\",\\\"onShrinkClick\\\",\\\"onSearchClick\\\",\\\"onRefreshClick\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[27,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]],\\\"\\\",\\\"enable-border-bottom\\\"],null],[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isModified\\\"]]],null],[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isSearchEnabled\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onConfigShrinkClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSearchClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onCloseClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSearchEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"system-config-search-panel\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"system-config-search-input\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"searchText\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"searchText\\\"]]],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[11,\\\"placeholder\\\",\\\"Search\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/system-config/template.hbs' @ L28:C7) \\\"],null]],[[\\\"class\\\"],[\\\"no-padding\\\"]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isError\\\"]]],null,{\\\"statements\\\":[[0,\\\"        Could not load system configuration.\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"unless\\\",[[23,[\\\"isScheduler\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[1,[27,\\\"generic-widgets/tree-widget\\\",null,[[\\\"isSearchEnabled\\\",\\\"isSearchEffective\\\",\\\"rootNodes\\\",\\\"isLoading\\\"],[[27,\\\"readonly\\\",[[23,[\\\"isSearchEnabled\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"isSearchEffective\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"rootNodes\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"isProcessing\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isEmergencySettingsAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"emergency-settings\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Emergency Settings\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showEmergencySettingsPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isContractManagementAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"contract-management\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Contract Management\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showContractPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isRouteMasterAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"route-master\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Route Master\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showRouteMasterPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isProvidersAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"providers\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Providers\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showProviderPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isPlaceAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"places\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Places\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showPlacePanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isSpeedRegionsAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"speed-region-groups\\\"],null]],null],[27,\\\"eq\\\",[[23,[\\\"currentRegionSetType\\\"]],\\\"speed\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Speed Regions\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showSpeedRegionGroupPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isBlockoutRegionsAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"speed-region-groups\\\"],null]],null],[27,\\\"eq\\\",[[23,[\\\"currentRegionSetType\\\"]],\\\"blockout\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"Blockout Regions\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showBlockoutRegionGroupPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isAdaBoundariesAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"ada-boundaries\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"ADA Boundaries\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showAdaBoundaryPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[27,\\\"not\\\",[[23,[\\\"isProcessing\\\"]]],null],[23,[\\\"isIVRAllowed\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"a\\\"],[12,\\\"class\\\",[28,[\\\"component-link \\\",[27,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"showRightPanel\\\"]],[27,\\\"eq\\\",[[23,[\\\"currentComponentPath\\\"]],\\\"ivr\\\"],null]],null],\\\"active\\\"],null]]]],[9],[0,\\\"IVR\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"showIVRPanel\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showRightPanel\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"right-panel\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/system-config/\\\",[23,[\\\"currentComponentPath\\\"]]],null],[23,[\\\"currentRegionSetType\\\"]]],[[\\\"currentRegionSetType\\\"],[[23,[\\\"currentRegionSetType\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/system-config/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/base-cell/component\", [\"exports\", \"adept-iq/pods/components/side-drawer/trip-transfer/base-cell/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['solution-table-base-cell', 'data-test-solution-table-base-cell'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    solution: Ember.computed.readOnly('row.content'),\n    isDisabled: false,\n    isExceeded: Ember.computed.alias('solution.extensionExceeded'),\n    tooltipText: Ember.computed('isExceeded', function () {\n      const isExceeded = this.get('isExceeded');\n      const solution = this.get('solution');\n\n      if (Ember.isNone(isExceeded)) {\n        return null;\n      }\n\n      if (isExceeded) {\n        return `Transfer extends route beyond planned end time.\n      Planned End Time: ${solution.plannedEndTime},\n      Route End ETA: ${solution.prevEndEta},\n      Solution Route End ETA: ${solution.endEta},\n      Change the route end time and try again`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'isExceeded', function () {\n      const tooltipText = this.get('tooltipText');\n      const isExceeded = this.get('isExceeded');\n      return Ember.isPresent(tooltipText) && isExceeded;\n    }),\n    tabindex: 0\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"bErmcdt0\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"popperContainer\\\",\\\"text\\\",\\\"tooltipClass\\\",\\\"innerClass\\\"],[\\\"bottom-start\\\",500,\\\"body\\\",[23,[\\\"tooltipText\\\"]],\\\"ember-tooltip-solution-table\\\",\\\"tooltip-inner-solution-table\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/trip-transfer/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/component\", [\"exports\", \"ember-light-table\", \"adept-iq/utils/unwrapProxy\", \"ember-concurrency\", \"adept-iq/pods/components/side-drawer/trip-transfer/config\", \"adept-iq/mixins/table-row-value\", \"adept-iq/mixins/trip-transfer-promise-time\", \"moment\", \"adept-iq/config/environment\", \"adept-iq/classes/map-contexts/side-drawers/trip-transfer\", \"adept-iq/classes/impact-stop\", \"lodash\", \"adept-iq/config/mapped-permIds\", \"adept-iq/utils/vehicleCapacity\", \"adept-iq/config/placeholders\"], function (_exports, _emberLightTable, _unwrapProxy, _emberConcurrency, _config, _tableRowValue, _tripTransferPromiseTime, _moment, _environment, _tripTransfer, _impactStop, _lodash, _mappedPermIds, _vehicleCapacity, _placeholders) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_tableRowValue.default, _tripTransferPromiseTime.default, {\n    tagName: '',\n    map: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    // placeholders\n    TIME_PLACEHOLDER: _placeholders.TIME_PLACEHOLDER,\n    // passed by the side drawer container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    currentState: null,\n    // component properties\n    solutionPreviewTable: null,\n    solutionImpactTable: null,\n    currentSortImpactPreview: null,\n    routeOverrideOptions: null,\n    overrideSelectedRoute: null,\n    overrideSelectedProvider: null,\n    previousSelectedProvider: null,\n    overrideSelectedPickOrder: null,\n    overrideSelectedDropOrder: null,\n    overridePickTime: null,\n    overrideDropTime: null,\n    pickTime: null,\n    dropTime: null,\n    isBrokerProviderType: false,\n    errorText: null,\n    overrideErrorText: null,\n    solutions: null,\n    impact: null,\n    selectedSolutionId: null,\n    selectedOverrideSolutionId: null,\n    selectedImpactPeriod: 'after',\n    activeTabRouteId: null,\n    currentSolutionDispatchRoute: null,\n    providersList: null,\n    override: false,\n    hasPermissionOverride: false,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    selectedImpactView: 'destination',\n    title: 'Transfer Trip',\n    componentName: 'tripTransfer',\n    canShrink: Ember.computed.not('isSolutionsTaskRunning'),\n    isShrunken: Ember.computed.alias('workspace.isDrawerShrunken'),\n    //passed  by the workspace service\n    trip: Ember.computed.readOnly('stackFrame.options.trip'),\n    //Trips could be an array sometimes\n    callback: Ember.computed.readOnly('stackFrame.options.callback'),\n    currentDispatchRoute: Ember.computed.readOnly('currentRoute.dispatchRoute'),\n    currentSolutionRoute: Ember.computed.readOnly('currentSolutionDispatchRoute.route'),\n    overrideSelectedDispatchRoute: Ember.computed.readOnly('overrideSelectedRoute.dispatchRoute'),\n    previousSelectedTripProvider: Ember.computed.readOnly('trip.provider'),\n    isManualSchedulingMode: Ember.computed.readOnly('trip.isManualSchedulingMode'),\n    isNotOverride: Ember.computed('override', function () {\n      return !this.get('override');\n    }),\n    canDisableOverrideRouteSectionFields: Ember.computed('isNotOverride', 'overrideSelectedProvider', function () {\n      const isNotOverride = this.get('isNotOverride');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n\n      if (isNotOverride || overrideSelectedProvider && overrideSelectedProvider.get('isBrokerProviderType')) {\n        return true;\n      }\n\n      return false;\n    }),\n    canSave: Ember.computed('selectedSolutionId', 'overrideSelectedDropOrder', 'overrideErrorText', function () {\n      const selectedSolutionId = this.get('selectedSolutionId');\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n      const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n      const overrideErrorText = this.get('overrideErrorText');\n\n      if (!Ember.isEmpty(selectedSolutionId) && Ember.isEmpty(overrideErrorText)) {\n        return true;\n      }\n\n      if (overrideSelectedProvider && overrideSelectedProvider.get('isBrokerProviderType') || previousSelectedTripProvider && previousSelectedTripProvider.get('isBrokerProviderType') && !Ember.isEmpty(overrideSelectedDropOrder)) {\n        return true;\n      }\n\n      return false;\n    }),\n    isOverrideChecked: Ember.observer('override', function () {\n      const override = this.get('override');\n      if (!override) this.set('overrideErrorText', '');\n    }),\n    isSolutionsTaskRunning: Ember.computed('fetchSolutionsTask.isRunning', 'fetchManualSolutionsTask.isRunning', function () {\n      return this.get('fetchSolutionsTask.isRunning') || this.get('fetchManualSolutionsTask.isRunning');\n    }),\n    isSolutionsTaskCanceled: Ember.computed('fetchSolutionsTask.lastCanceled', 'fetchManualSolutionsTask.lastCanceled', function () {\n      return Ember.isPresent(this.get('fetchSolutionsTask.lastCanceled')) || Ember.isPresent(this.get('fetchManualSolutionsTask.lastCanceled'));\n    }),\n    isStopPickTime: Ember.computed('trip.isWaitlisted', function () {\n      return this.get('trip.isWaitlisted') ? '' : (0, _moment.default)(this.get('trip.pickStopPoint.computedStartTime')).format(_environment.default.dateTimeFormat.dateTimeMoment);\n    }),\n    isStopDropTime: Ember.computed('trip.isWaitlisted', function () {\n      return this.get('trip.isWaitlisted') ? '' : (0, _moment.default)(this.get('trip.dropStopPoint.computedStartTime')).format(_environment.default.dateTimeFormat.dateTimeMoment);\n    }),\n    currentRoute: Ember.computed('trip.pickStopPoint.dispatchRoute.route', function () {\n      const route = this.get('trip.pickStopPoint.dispatchRoute.route');\n\n      if (!route) {\n        return this.get('noRoute');\n      }\n\n      return route;\n    }).readOnly(),\n    brokerEligible: Ember.computed.readOnly('trip.segment.leg.brokerEligible'),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('routesList', []);\n      const solutionPreviewTable = new _emberLightTable.default(_config.solutionColumns);\n      const solutionImpactTable = new _emberLightTable.default(_config.stopColumns);\n      const map = this.get('map');\n      this.set('solutionPreviewTable', solutionPreviewTable); // eslint-disable-next-line new-cap\n\n      this.set('solutions', Ember.A([]));\n      this.set('solutionImpactTable', solutionImpactTable);\n      this.set('hasPermissionOverride', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferTrip, null)); // run-time bindings; this avoids having a ton of observers\n\n      const mapContext = _tripTransfer.default.extend({\n        trip: Ember.computed.readOnly('_component.trip'),\n        destinationIqRoute: Ember.computed.readOnly('_component.selectedSolutionDispatchRoute'),\n        currentIqRoute: Ember.computed.readOnly('_component.currentDispatchRoute'),\n        impactPayload: Ember.computed.readOnly('_component.impact'),\n        inDanger: Ember.computed.readOnly('_component.inDanger'),\n        selectedImpactPeriod: Ember.computed.readOnly('_component.selectedImpactPeriod'),\n        // 'before' or 'after',\n        selectedImpactView: Ember.computed.readOnly('_component.selectedImpactView'),\n        // 'current' or 'destination'\n        map: map\n      }).create({\n        _component: this\n      });\n\n      this.set('mapContext', mapContext);\n      this.setOverrideProviderOptions();\n      await this.setOverrideInitialData();\n    },\n\n    async setOverrideInitialData() {\n      // If the trip is pick anchored, use the pickup time plus 1 minute for the override section field dropoff time.\n      // If the trip is appointment-anchored, use the trip request time plus the trip service window \"drop window end\" for the field dropoff time.\n      let pickTimeMoment = (0, _moment.default)(this.get('trip.promiseTime'));\n      const dropWindowEnd = parseInt(this.get('trip.segment.leg.serviceWindow.dropWindowEnd'), 10);\n      const dropTimeMoment = this.get('trip.anchor') === 'pick' ? pickTimeMoment.clone().add(1, 'minutes') : (0, _moment.default)(this.get('trip.segment.leg.requestTime')).add(dropWindowEnd, 'minutes');\n      const provider = (0, _unwrapProxy.unwrapProxy)(this.get('trip.provider'));\n\n      if (dropTimeMoment.isBefore(pickTimeMoment)) {\n        pickTimeMoment = dropTimeMoment.clone().add(-1, 'minutes');\n      }\n\n      this.set('pickTime', pickTimeMoment.format('HHmm'));\n      this.set('dropTime', dropTimeMoment.format('HHmm'));\n      this.set('overridePickTime', this.convertToRegularDateTime({\n        masked: pickTimeMoment.format('HH:mm')\n      }));\n      this.set('overrideDropTime', this.convertToRegularDateTime({\n        masked: dropTimeMoment.format('HH:mm')\n      }));\n      this.set('overrideSelectedProvider', provider);\n      this.set('overrideSelectedPickOrder');\n      this.set('overrideSelectedDropOrder');\n    },\n\n    async setupProvidersList() {\n      const transferBrokerTripDispatch = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferBrokerTripDispatch, null);\n      const previousSelectedTripProvider = (0, _unwrapProxy.unwrapProxy)(this.get('previousSelectedTripProvider'));\n      this.set('providersList', []);\n      const providers = await this.get('store').peekAll('provider').filter(provider => {\n        // filter out broker providers if user does not have permission or InActive\n        if (provider.get('isBrokerProviderType') && !transferBrokerTripDispatch || provider.get('isInActive')) {\n          return false;\n        }\n\n        return !Ember.isEmpty(provider.get('name')) && !Ember.isEmpty(provider.get('id')) && provider.get('userCanAccessProvider');\n      });\n      const providersList = [];\n      providers.forEach(provider => {\n        let isChecked = false;\n\n        if (Ember.isPresent(previousSelectedTripProvider) && provider.get('id') === previousSelectedTripProvider.get('id')) {\n          isChecked = true;\n        }\n\n        providersList.push({\n          id: provider.get('id'),\n          name: provider.get('providerName'),\n          isChecked: isChecked\n        });\n      });\n      this.set('providersList', providersList);\n    },\n\n    setOverrideProviderOptions() {\n      const transferBrokerTripDispatch = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.transferBrokerTripDispatch, null);\n      const selectedProvider = this.get('trip.provider');\n      const overrideProviderOptions = this.get('store').peekAll('provider').filter(provider => {\n        let canAllowProvider = provider.get('userCanAccessProvider'); // filter out broker providers if user does not have permission\n\n        if (provider.get('isBrokerProviderType') && !transferBrokerTripDispatch || provider.get('isInActive')) {\n          return false;\n        }\n\n        if (canAllowProvider && selectedProvider.get('isBrokerProviderType')) {\n          canAllowProvider = selectedProvider.get('id') !== provider.get('id');\n        }\n\n        return canAllowProvider;\n      });\n      this.set('overrideProviderOptions', overrideProviderOptions);\n    },\n\n    async didInsertElement() {\n      const isManualSchedulingMode = this.get('isManualSchedulingMode');\n\n      this._super(...arguments);\n\n      const mapContext = this.get('mapContext'); // side panel width just for trip transfers\n\n      this.setSideDrawerWidth('1030px');\n      this.get('map').pushContext(mapContext);\n      this.loadCurrentState();\n      await this.setupProvidersList();\n      const routesList = await this.populateRoutesList(this.get('trip.schedule.id'), true);\n      this.set('override', isManualSchedulingMode);\n      this.set('routesList', routesList);\n    },\n\n    willDestroyElement() {\n      const mapContext = this.get('mapContext');\n      this.get('map').removeContext(mapContext);\n\n      this._super(...arguments);\n    },\n\n    destroy() {\n      this.get('mapContext').set('_component', null);\n\n      this._super(...arguments);\n    },\n\n    isFoundSolution(route) {\n      const solutions = this.get('solutions');\n      const isFound = solutions.findBy('id', route.get('dispatchRoute.id'));\n      return Ember.isPresent(isFound);\n    },\n\n    loadCurrentState() {\n      const currentState = this.get('currentState');\n\n      if (currentState) {\n        this.set('override', currentState.override);\n        this.set('overrideSelectedProvider', currentState.overrideSelectedProvider);\n        this.set('overrideSelectedRoute', currentState.overrideSelectedRoute);\n        this.set('overrideSelectedPickOrder', currentState.overrideSelectedPickOrder);\n        this.set('overrideSelectedDropOrder', currentState.overrideSelectedDropOrder);\n        this.set('pickTime', currentState.pickTime);\n        this.set('overridePickTime', currentState.overridePickTime);\n        this.set('dropTime', currentState.dropTime);\n        this.set('overrideDropTime', currentState.overrideDropTime);\n        this.set('override', currentState.override);\n\n        if (currentState.currentRouteSolution) {\n          this.set('currentRouteSolution', currentState.currentRouteSolution);\n        }\n      }\n    },\n\n    // creates impact after payload\n    createManualSolution(route) {\n      let trip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      const dsTrip = this.get('trip');\n      let dsRouteId = null;\n      let stops = [];\n\n      if (Ember.isPresent(route)) {\n        dsRouteId = route.get('dispatchRoute.id');\n        stops = route.get('dispatchRoute.orderedStopsWithBreaks');\n      } // current route impact after remove transferrable trip\n\n\n      if (dsTrip.get('pickStopPoint.dispatchRoute.id') === dsRouteId) {\n        stops = stops.filter(stop => stop.get('trip.id') !== dsTrip.get('id'));\n      }\n\n      const newSolution = {\n        id: dsRouteId,\n        gain: 'unknown',\n        otp: {\n          delta: 'unknown',\n          originalValue: 'unknown',\n          newValue: 'unknown'\n        },\n        stops: [],\n        recipe: null\n      };\n\n      if (!Ember.isEmpty(stops)) {\n        stops.forEach(stop => {\n          newSolution.stops.push({\n            eta: {\n              originalValue: null,\n              newValue: null\n            },\n            otp: {\n              originalValue: null,\n              newValue: null,\n              delta: null\n            },\n            promiseTime: null,\n            id: stop.get('id'),\n            polyline: null\n          });\n        });\n      }\n\n      if (trip) {\n        const pick = {\n          eta: {\n            originalValue: null,\n            newValue: null\n          },\n          otp: {\n            originalValue: null,\n            newValue: null,\n            delta: null\n          },\n          promiseTime: null,\n          id: trip.get('pickStopPoint.id'),\n          polyline: null\n        };\n        const drop = {\n          eta: {\n            originalValue: null,\n            newValue: null\n          },\n          otp: {\n            originalValue: null,\n            newValue: null,\n            delta: null\n          },\n          promiseTime: null,\n          id: trip.get('dropStopPoint.id'),\n          polyline: null\n        };\n        newSolution.stops.push(pick);\n        newSolution.stops.push(drop);\n        newSolution.recipe = this.createManualRecipe([pick, drop], route, trip);\n      }\n\n      return newSolution;\n    },\n\n    createManualRecipe(stops, route, trip) {\n      // last stop ordinal needs to be at least greater than last actual stop ordinal, it doesn't matter as longer as its bigger\n      // cos will be able to normalize it and put it at the end\n      const lastStopOrdinal = route.get('dispatchRoute.orderedStopsWithGaragesAndBreaks.length') + 100;\n      const destinationId = route.get('dispatchRoute.id');\n      let currentSourceId = this.get('currentDispatchRoute.id');\n\n      if (trip.get('isCanceled')) {\n        currentSourceId = 'cancel';\n      } else if (trip.get('isWaitlisted')) {\n        currentSourceId = 'waitlist';\n      }\n\n      const recipe = {\n        instructions: stops.map((stop, index) => {\n          return {\n            id: stop.id,\n            type: 'stop',\n            source: currentSourceId,\n            destination: destinationId,\n            ordinal: lastStopOrdinal + index\n          };\n        })\n      };\n      return recipe;\n    },\n\n    noRoute: Ember.computed('trip.{isCanceled,isWaitlisted}', function () {\n      const trip = this.get('trip');\n      const pickStopPoint = trip.get('pickStopPoint');\n      const dropStopPoint = trip.get('dropStopPoint');\n      const schedule = this.get('store').peekAll('schedule').find(sch => Ember.isPresent((0, _unwrapProxy.unwrapProxy)(sch.get('dispatchSchedule'))));\n\n      if (trip.get('isCanceled') || trip.get('isWaitlisted')) {\n        return Ember.Object.create({\n          id: null,\n          name: 'No Route',\n          schedule,\n          dispatchRoute: {\n            orderedStopsWithBreaks: [pickStopPoint, dropStopPoint],\n            iqRoute: this\n          }\n        });\n      }\n\n      return null;\n    }),\n    overrideOrderOptions: Ember.computed('overrideSelectedRoute', function () {\n      const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(this.get('overrideSelectedRoute.dispatchRoute'));\n\n      if (!Ember.isEmpty(dispatchRoute)) {\n        const plannedRouteStartTime = dispatchRoute.get('plannedStartTime');\n        const plannedRouteEndTime = dispatchRoute.get('plannedEndTime');\n        const unperformedStops = dispatchRoute.getUnArrivedStopsInSequence(0) || [];\n        const lastPerformedStop = dispatchRoute.get('lastPerformedStop');\n        const routeOrdinals = [];\n        unperformedStops.forEach(stop => {\n          routeOrdinals.push({\n            routeOrdinal: stop.get('routeOrdinal'),\n            eta: (0, _moment.default)(stop.get('widgetEta'))\n          });\n        });\n\n        if (unperformedStops.length === 0 && Ember.isNone(lastPerformedStop)) {\n          routeOrdinals.push({\n            routeOrdinal: 1,\n            eta: (0, _moment.default)(plannedRouteStartTime)\n          });\n        } else if (unperformedStops.length === 0 && Ember.isPresent(lastPerformedStop)) {\n          routeOrdinals.push({\n            routeOrdinal: lastPerformedStop.get('routeOrdinal') + 1,\n            eta: (0, _moment.default)(plannedRouteEndTime)\n          });\n        } else if (unperformedStops.length > 0) {\n          const routeOrdinalArray = routeOrdinals.map(x => x.routeOrdinal);\n          routeOrdinals.push({\n            routeOrdinal: Math.max(...routeOrdinalArray) + 1,\n            eta: (0, _moment.default)(plannedRouteEndTime)\n          });\n        }\n\n        return routeOrdinals;\n      }\n\n      return [];\n    }),\n\n    async populateRoutesList(scheduleId) {\n      let backendFetch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      let scheduleRecord = null;\n      let routes = null;\n\n      if (backendFetch) {\n        scheduleRecord = await this.get('store').findRecord('schedule', scheduleId, {\n          include: 'routes'\n        });\n        await (0, _emberConcurrency.timeout)(500);\n        routes = await scheduleRecord.get('routes').toArray();\n      } else {\n        routes = this.get('store').peekAll('route').toArray();\n        routes = routes.filter(route => route.get('schedule.id') === scheduleId);\n      }\n\n      const routeEndHash = await coreEntityPopulator.populateDispatchRouteEndHash(scheduleId);\n      routes = routes.filter(route => !routeEndHash[route.id]);\n      return routes;\n    },\n\n    overrideRouteOptions: Ember.computed('currentRoute', 'routesList', async function () {\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const sourceRouteId = this.get('currentRoute.id');\n      const sourceTripScheduleId = this.get('trip.schedule.id');\n      const routes = this.get('routesList');\n\n      if (Ember.isNone(routes)) {\n        return [];\n      }\n\n      return _lodash.default.sortBy(routes.filter(route => {\n        const routeScheduleId = route.get('schedule.id');\n        const routeId = route.get('id');\n        const sameSchedule = routeScheduleId === sourceTripScheduleId;\n        const isBreakdown = route.get('status') === 'breakdown';\n        const isCompleted = !!route.get('actualEndTimestamp');\n        let sameProvider = false;\n\n        if (!Ember.isEmpty(overrideSelectedProvider)) {\n          sameProvider = overrideSelectedProvider.id === route.get('provider.id');\n        }\n\n        const differentId = routeId !== sourceRouteId;\n        return sameSchedule && differentId && sameProvider && !isBreakdown && !isCompleted;\n      }), route => route.name);\n    }),\n    selectedGain: Ember.computed('selectedSolutionId', 'solutions.[]', function () {\n      const solutions = this.get('solutions');\n      if (!solutions) return 0;\n      const solution = solutions.findBy('id', this.get('selectedSolutionId')); // TODO: update to use delta otp value\n\n      if (solution) {\n        return solution.otp.deltaValue;\n      }\n\n      return 0;\n    }),\n    selectedGainType: Ember.computed('impactScore', function () {\n      let gainType = 'spending';\n\n      if (this.get('impactScore') > 0) {\n        gainType = 'gaining';\n      }\n\n      return gainType;\n    }),\n    impactScore: Ember.computed('selectedSolutionId', 'selectedImpactPeriod', 'impact', function () {\n      const impact = this.get('impact');\n      const period = this.get('selectedImpactPeriod');\n      if (!impact) return null;\n      let score = impact.otpDelta ? impact.otpDelta : null;\n      if (period === 'before') score = -score; // transform after back to negative value\n\n      return score > 0 ? -score : Math.abs(score); // transform score based on positive being late and negative being positive\n    }),\n    impactScoreType: Ember.computed('impactScore', function () {\n      let impactType = 'negative';\n\n      if (this.get('impactScore') > 0) {\n        impactType = 'positive';\n      }\n\n      return impactType;\n    }),\n    currentRouteImpactScoreType: Ember.computed('impactScore', function () {\n      let impactType = 'spending';\n\n      if (this.get('impactScore') > 0) {\n        impactType = 'saving';\n      }\n\n      return impactType;\n    }),\n    selectedSolutionDispatchRoute: Ember.computed('solutions', 'selectedSolutionId', function () {\n      const solutions = this.get('solutions');\n      const selectedSolutionId = this.get('selectedSolutionId');\n      if (Ember.isEmpty(solutions) || Ember.isEmpty(selectedSolutionId)) return null;\n      const route = this.get('store').peekRecord('route', selectedSolutionId);\n      const dsRoute = this.get('store').peekRecord('dispatch-route', route.get('dispatchRoute.id'));\n      return dsRoute;\n    }),\n    inDanger: Ember.computed('solutions', 'selectedSolutionId', function () {\n      const solutions = this.get('solutions');\n      if (Ember.isEmpty(solutions)) return false; // TODO: connect to real data here\n\n      const selectedSolutionId = this.get('selectedSolutionId');\n      const index = solutions.mapBy('id').indexOf(selectedSolutionId);\n      return index % 2 === 1;\n    }),\n\n    setupSolutions() {\n      this.set('errorText');\n      const trip = this.get('trip');\n      const store = this.get('store');\n      const currentState = this.get('currentState');\n      let currentSolutionRouteId = null;\n\n      if (currentState) {\n        currentSolutionRouteId = currentState.currentSolutionRoute ? currentState.currentSolutionRoute.get('id') : null;\n      }\n\n      this.cursorWait();\n\n      const fetchOrRestoreTask = async () => {\n        if (currentState) {\n          const restoreSolutions = this.get('currentState.solutions'); // after restore currentState solutions, remove the cache.\n\n          this.set('currentState', null);\n          return restoreSolutions;\n        }\n\n        return await this.get('fetchSolutionsTask').perform(trip);\n      };\n\n      fetchOrRestoreTask().catch(err => {\n        // if the side drawer have been close while doing fetch\n        if (this.get('isSolutionsTaskCanceled')) return null; // Try to be as robust as possible.  Log an error to console for discovery,\n        // but just use an empty solution set to unblock manually transferring\n\n        if (!Ember.isEmpty(err) && !Ember.isEmpty(err.payload)) {\n          const reason = err.payload.message || err.payload.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n          this.set('errorText', `* ${reason}`);\n        } else {\n          this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n        }\n\n        console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err)}`); // eslint-disable-line no-console\n\n        return null;\n      }).then(solutions => {\n        let solutionsTableRows = []; // reset stops table data\n\n        this.get('solutionImpactTable').setRows([]); // give it a bit of time for everything to get loaded to ember store\n\n        Ember.run.later(() => {\n          if (!Ember.isEmpty(solutions)) {\n            solutionsTableRows = solutions.map(_ref => {\n              let {\n                id,\n                otp,\n                extensionExceeded,\n                plannedEndTime,\n                prevEndEta,\n                endEta\n              } = _ref;\n              const selectedRoute = store.peekRecord('route', id);\n              return {\n                id,\n                otp,\n                extensionExceeded,\n                plannedEndTime,\n                prevEndEta,\n                endEta,\n                dispatchRoute: selectedRoute.get('dispatchRoute')\n              };\n            });\n            solutions.forEach(solution => {\n              const index = this.get('solutions').findIndex(s => s.id === solution.id);\n\n              if (index === -1) {\n                this.get('solutions').pushObject(solution);\n              } else {\n                this.get('solutions').splice(index, 1, solution);\n              }\n            });\n          }\n\n          this.get('solutionPreviewTable').setRows(solutionsTableRows);\n          const availableSolutions = solutions || [];\n          availableSolutions.sort((a, b) => a.otp.newValue - b.otp.newValue);\n\n          if (!Ember.isEmpty(availableSolutions)) {\n            const solutionFound = currentSolutionRouteId ? availableSolutions.find(solution => solution.id === currentSolutionRouteId) : null;\n            const firstSolutionId = solutionFound ? solutionFound.id : availableSolutions[0].id;\n            this.sortTableSolutionRow();\n            this.selectTableSolutionRow(firstSolutionId);\n            this.selectSolution(firstSolutionId);\n          }\n        }, 500);\n        this.cursorDefault();\n      }).catch(() => {\n        this.get('notifications').info(`Trip ${trip.get('tripId')} cannot be transferred`);\n        this.cursorDefault();\n        return this.onCloseClick();\n      });\n      this.fetchRouteOverrideOptions();\n    },\n\n    fetchRouteOverrideOptions() {\n      const sourceRouteIdValue = this.get('currentRoute.id');\n      const sourceRouteScheduleIdValue = this.get('currentRoute.schedule.id');\n      if (!sourceRouteIdValue) return null;\n      const store = this.get('store');\n      const routes = store.peekAll('route').filter(route => {\n        const routeScheduleIdValue = route.get('schedule.id');\n        const routeIdValue = route.get('id');\n        const sameSchedule = routeScheduleIdValue === sourceRouteScheduleIdValue;\n        const differentId = routeIdValue !== sourceRouteIdValue;\n        return sameSchedule && differentId;\n      });\n      this.set('routeOptions', routes);\n      return routes;\n    },\n\n    // if all providers or none are selected then it means\n    // we return null. We don't send anything to COS trip transfer\n    getAutoTripTransferProvidersList() {\n      const providersList = this.get('providersList');\n      const checkedProvidersList = providersList.filter(provider => provider.isChecked).map(provider => provider.id);\n      if (checkedProvidersList.length === 0) return null;\n      if (checkedProvidersList.length === providersList.length) return null;\n      return checkedProvidersList;\n    },\n\n    validateRouteExtensionLimit(solution) {\n      const store = this.get('store');\n      const selectedRoute = store.peekRecord('route', solution.id);\n      const plannedEndTime = (0, _moment.default)(selectedRoute.get('computedPlannedEndTime'));\n      const actualStartTime = selectedRoute.get('actualStartTimestamp') ? (0, _moment.default)(selectedRoute.get('actualStartTimestamp')) : (0, _moment.default)(selectedRoute.get('dispatchRoute.plannedStartTime'));\n      const TIME_FORMAT = 'MM-DD HH:mm';\n      solution.extensionExceeded = false;\n\n      if (solution.stops && solution.stops.length > 0 && actualStartTime) {\n        const endEta = solution.stops[solution.stops.length - 1].eta.newValue;\n        const preEndEta = solution.stops[solution.stops.length - 1].eta.originalValue;\n        const actualEndTime = (0, _moment.default)(endEta);\n        const prevEndTime = (0, _moment.default)(preEndEta); //   if planned end time < eta return error\n\n        const extensionExceeded = actualEndTime.diff(plannedEndTime, 'minutes') > 0;\n        solution.extensionExceeded = extensionExceeded;\n        solution.plannedEndTime = plannedEndTime.format(TIME_FORMAT);\n        solution.prevEndEta = prevEndTime.format(TIME_FORMAT);\n        solution.endEta = actualEndTime.format(TIME_FORMAT);\n      }\n    },\n\n    validateSolutions(solutions, routeMaxExtension) {\n      solutions.forEach(solution => {\n        this.validateRouteExtensionLimit(solution, routeMaxExtension);\n      });\n      return solutions;\n    },\n\n    fetchSolutionsTask: (0, _emberConcurrency.task)(function* (trip, routeId) {\n      const providersList = this.getAutoTripTransferProvidersList();\n      const tripTransferAdapter = yield this.get('store').adapterFor('trip-transfer');\n      const dispatchScheduleId = trip.get('schedule.dispatchSchedule.id') ? parseInt(trip.get('schedule.dispatchSchedule.id'), 10) : null;\n      const tripId = trip.get('id') ? parseInt(trip.get('id'), 10) : null;\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes;\n\n      const result = yield tripTransferAdapter.createTripTransferAsyncOperation.perform([tripId], dispatchScheduleId, routeId ? parseInt(routeId, 10) : routeId, providersList);\n\n      if (!Ember.isEmpty(result.data)) {\n        const currentRouteSolution = result.data.attributes.sourceRoute;\n        const solutions = result.data.attributes.destinationRoutes; // get core entity records from solution result\n\n        return this.getRouteResults(solutions).then(() => {\n          this.set('currentRouteSolution', currentRouteSolution);\n          return this.validateSolutions(solutions, routeMaxExtension);\n        });\n      }\n\n      if (!result.isJobSuccess) {\n        throw result;\n      }\n\n      return;\n    }).keepLatest(),\n\n    async getRouteResults(solutions) {\n      const coreEntityPopulator = this.get('coreEntityPopulator');\n      const solutionPromises = [];\n      solutions.forEach(solution => {\n        const routeId = solution.id;\n        solutionPromises.push(coreEntityPopulator.populateRtsRoute(routeId, {}));\n      });\n      await Promise.all(solutionPromises);\n    },\n\n    fetchManualSolutionsTask: (0, _emberConcurrency.task)(function* (trip, pickOrdinal, dropOrdinal, routeId) {\n      const tripTransferAdapter = yield this.get('store').adapterFor('trip-transfer');\n      const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n      const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes;\n\n      const payloadData = [];\n      const dispatchScheduleId = trip.get('schedule.dispatchSchedule.id') ? parseInt(trip.get('schedule.dispatchSchedule.id'), 10) : null;\n      const id = trip.get('id') ? parseInt(trip.get('id'), 10) : null;\n      payloadData.push({\n        id,\n        pickOrdinal,\n        dropOrdinal\n      });\n      const result = yield tripTransferAdapter.postManualTransfer(payloadData, dispatchScheduleId, routeId ? parseInt(routeId, 10) : routeId);\n\n      if (!Ember.isEmpty(result.data)) {\n        const currentRouteSolution = result.data.attributes.sourceRoute;\n        const solutions = result.data.attributes.destinationRoutes; // get core entity records from solution result\n\n        return this.getRouteResults(solutions).then(() => {\n          this.set('currentRouteSolution', currentRouteSolution);\n          return this.validateSolutions(solutions, routeMaxExtension);\n        });\n      }\n\n      return;\n    }).keepLatest(),\n    currentRouteImpact: Ember.computed('currentRouteSolution', function () {\n      const store = this.get('store');\n      const currentSolution = this.get('currentRouteSolution') || {};\n      const currentStops = this.get('currentDispatchRoute.orderedStopsWithGaragesAndBreaks') || [];\n      const currentRouteStart = this.get('currentDispatchRoute.route.actualStartTimestamp') || this.get('currentDispatchRoute.route.computedPlannedStartTime');\n\n      if (Ember.isNone(this.get('currentRouteSolution'))) {\n        const impact = Ember.Object.create({\n          routeOtp: currentSolution.otp,\n          otpDelta: '',\n          before: {\n            otp: '',\n            stops: currentStops.map(stop => {\n              const garagePoint = stop.id.includes('GP') || stop.id.includes('GD');\n              const garagePullInPoint = stop.id.includes('GD');\n              const stopPoint = store.peekRecord('stop-point', stop.id);\n              return _impactStop.default.create({\n                id: stop.id,\n                eta: stopPoint.get('widgetEta'),\n                otp: stop.get('otp'),\n                promiseTime: stop.get('promisedTime'),\n                otpValue: stop.get('otpValue'),\n                polyline: null,\n                mrt: null,\n                routeOrdinal: stopPoint.get('routeOrdinal'),\n                stopPoint: stopPoint,\n                isBreak: garagePoint ? false : stopPoint.get('isBreak'),\n                slack: garagePullInPoint ? 0 : stopPoint.get('slackInMinutes')\n              });\n            })\n          }\n        });\n        return impact;\n      } // @TODO we should refactor to make it more flexible for map context\n\n\n      const impact = Ember.Object.create({\n        routeOtp: currentSolution.otp,\n        otpDelta: currentSolution.otp.deltaValue,\n        before: {\n          otp: currentSolution.otp.originalValue,\n          stops: currentStops.map(stop => {\n            const stopPoint = store.peekRecord('stop-point', stop.id);\n            return _impactStop.default.create({\n              id: stop.id,\n              eta: stopPoint.get('widgetEta'),\n              otp: stop.get('otp'),\n              promiseTime: stop.get('promisedTime'),\n              otpValue: stop.get('otpValue'),\n              polyline: null,\n              mrt: null,\n              routeOrdinal: stopPoint.get('routeOrdinal'),\n              stopPoint: stopPoint,\n              isBreak: stopPoint.get('isBreak'),\n              slack: stopPoint.get('slackInMinutes')\n            });\n          })\n        },\n        after: {\n          otp: currentSolution.otp.newStatus,\n          stops: currentSolution.stops.map(stop => {\n            const garagePoint = stop.id.includes('GP') || stop.id.includes('GD');\n            const garagePullOutPoint = stop.id.includes('GP');\n            const garagePullInPoint = stop.id.includes('GD');\n            let stopPoint = null;\n            let slack = 0;\n\n            if (!garagePullInPoint && stop.slack) {\n              slack = stop.slack.newValue;\n            }\n\n            if (stop.id.includes('B')) {\n              const stopId = stop.id.replace('B', '');\n              stopPoint = store.peekRecord('route-break', stopId).stopPoint;\n            } else {\n              stopPoint = store.peekRecord('stop-point', stop.id);\n            }\n\n            return _impactStop.default.create({\n              id: garagePoint ? stop.id : stopPoint.get('id'),\n              eta: garagePullOutPoint ? currentRouteStart : stop.eta.newValue,\n              otp: stop.otp.newStatus,\n              otpValue: stop.otp,\n              mrt: stop.otp.delta,\n              promiseTime: stop.promiseTime,\n              polyline: stop.polyline,\n              routeOrdinal: stop.ordinal,\n              stopPoint,\n              isBreak: garagePoint ? false : stopPoint.get('isBreak'),\n              slack: slack\n            });\n          })\n        }\n      });\n      return impact;\n    }),\n    selectedRouteImpact: Ember.computed('currentSolutionDispatchRoute', function () {\n      const store = this.get('store');\n      const selectedRouteId = this.get('currentSolutionDispatchRoute.route.id');\n      const solutions = this.get('solutions') || [];\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n      const currentStops = this.get('currentSolutionDispatchRoute.orderedStopsWithGaragesAndBreaks') || [];\n      const selectedRouteStart = this.get('currentSolutionDispatchRoute.route.actualStartTimestamp') || this.get('currentSolutionDispatchRoute.route.computedPlannedStartTime'); // @TODO we should refactor to make it more flexible for map context\n\n      const impact = Ember.Object.create({\n        routeOtp: selectedSolution.otp,\n        otpDelta: selectedSolution.otp.deltaValue,\n        before: {\n          otp: selectedSolution.otp.originalValue,\n          stops: currentStops.map(stop => {\n            const stopPoint = store.peekRecord('stop-point', stop.id);\n            const garagePullInPoint = stop.id.includes('GD');\n            return _impactStop.default.create({\n              id: stop.id,\n              eta: stopPoint.get('widgetEta'),\n              otp: stop.get('otp'),\n              promiseTime: stop.get('promisedTime'),\n              otpValue: stop.get('otpValue'),\n              polyline: null,\n              mrt: null,\n              routeOrdinal: stopPoint.get('routeOrdinal'),\n              stopPoint: stopPoint,\n              isBreak: stopPoint.get('isBreak'),\n              slack: garagePullInPoint ? 0 : stopPoint.get('slackInMinutes')\n            });\n          })\n        },\n        after: {\n          otp: selectedSolution.otp.newValue,\n          stops: selectedSolution.stops.map(stop => {\n            const garagePoint = stop.id.includes('GP') || stop.id.includes('GD');\n            const garagePullOutPoint = stop.id.includes('GP');\n            const garagePullInPoint = stop.id.includes('GD');\n            let stopPoint = null;\n            let slack = 0;\n\n            if (!garagePullInPoint && stop.slack) {\n              slack = stop.slack.newValue;\n            }\n\n            if (stop.id.includes('B')) {\n              const stopId = stop.id.replace('B', '');\n              stopPoint = store.peekRecord('route-break', stopId).stopPoint;\n            } else {\n              stopPoint = store.peekRecord('stop-point', stop.id);\n            }\n\n            return _impactStop.default.create({\n              id: garagePoint ? stop.id : stopPoint.get('id'),\n              eta: garagePullOutPoint ? selectedRouteStart : stop.eta.newValue,\n              otp: stop.otp.newStatus,\n              otpValue: stop.otp,\n              mrt: stop.otp.delta,\n              promiseTime: stop.promiseTime,\n              polyline: stop.polyline,\n              routeOrdinal: stop.ordinal,\n              stopPoint: stopPoint,\n              isBreak: garagePoint ? false : stopPoint.get('isBreak'),\n              slack: slack\n            });\n          })\n        }\n      });\n      return impact;\n    }),\n\n    chooseImpactByRoute(routeId) {\n      const solutions = this.get('solutions');\n      const period = this.get('selectedImpactPeriod');\n      const currentRoute = this.get('currentRoute');\n      const currentRouteSolution = this.get('currentRouteSolution');\n      const currentTripId = this.trip.id;\n      const currentSortImpactPreview = this.get('currentSortImpactPreview');\n      let selectedSolution = null;\n      let impact = null; // Handle choosing the current route\n\n      if (!Ember.isNone(currentRoute) && routeId === currentRoute.get('dispatchRoute.route.id')) {\n        selectedSolution = currentRouteSolution;\n\n        if (Ember.isEmpty(selectedSolution)) {\n          if (this.get('trip.status') === 'waitlisted' && period === 'before') {\n            this.get('solutionImpactTable').setRows(this.get('trip.stops'));\n            return;\n          }\n\n          this.get('solutionImpactTable').setRows([]);\n        }\n\n        impact = this.get('currentRouteImpact');\n      } else {\n        selectedSolution = solutions.findBy('id', routeId);\n\n        if (Ember.isEmpty(selectedSolution)) {\n          this.set('impact', impact);\n          this.get('solutionImpactTable').setRows([]);\n          return impact;\n        }\n\n        impact = this.get('selectedRouteImpact');\n      }\n\n      this.set('impact', impact);\n      const stopsRows = impact[period] ? impact[period].stops : [];\n      const rows = this.get('solutionImpactTable').setRows(stopsRows);\n\n      if (currentSortImpactPreview) {\n        this.sortImpactPreview(currentSortImpactPreview, [currentTripId]);\n      } else {\n        rows.map(stop => {\n          if (!Ember.isNone(stop.get('stopPoint')) && stop.get('stopPoint.trip.id') === currentTripId) {\n            return stop.set('selected', true);\n          }\n        });\n      }\n\n      return impact;\n    },\n\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const solutions = this.get('solutions');\n      const selectedSolutionId = this.get('currentSolutionDispatchRoute.route.id');\n      const selectedSolution = solutions.findBy('id', selectedSolutionId);\n      const recipe = selectedSolution.recipe;\n      const bulkOperationAdapter = this.get('store').adapterFor('bulk-operation');\n      const finalRecipe = this.setRecipePrerequisites(recipe);\n      return yield bulkOperationAdapter.createBulkAsyncOperation.perform(finalRecipe).then(async result => {\n        if (result.isJobSuccess) {\n          await this.persistAcceptedPromiseTimes(selectedSolution, [this.get('trip')]);\n          this.get('workspace').requestWootricSurvey('on_tripTransfer');\n          return Promise.resolve();\n        }\n\n        return Promise.reject(result.result);\n      }).catch(function (error) {\n        return Promise.reject(error);\n      });\n    }),\n\n    setRecipePrerequisites(recipe) {\n      const currentRoute = this.get('currentRoute');\n      const currentDispatchRoute = this.get('currentDispatchRoute');\n      const selectedSolutionDispatchRoute = this.get('selectedSolutionDispatchRoute');\n      let currentDispatchRouteId = null;\n      if (_lodash.default.isNil(recipe.prerequisites)) recipe.prerequisites = [];\n\n      if (currentRoute.get('name') !== 'No Route' && currentDispatchRoute) {\n        currentDispatchRouteId = currentDispatchRoute.get('id');\n        const existPrerequisiteIndex = recipe.prerequisites.findIndex(v => v.id === currentDispatchRouteId);\n\n        if (existPrerequisiteIndex !== -1) {\n          recipe.prerequisites[existPrerequisiteIndex].version = currentDispatchRoute.get('version');\n        } else {\n          recipe.prerequisites.push({\n            id: currentDispatchRouteId,\n            type: 'route',\n            version: currentDispatchRoute.get('version')\n          });\n        }\n      }\n\n      if (selectedSolutionDispatchRoute) {\n        const selectedSolutionDispatchRouteId = selectedSolutionDispatchRoute.get('id');\n        const existSelectedSolutionIndex = recipe.prerequisites.findIndex(v => v.id === selectedSolutionDispatchRouteId);\n\n        if (existSelectedSolutionIndex !== -1) {\n          recipe.prerequisites[existSelectedSolutionIndex].version = selectedSolutionDispatchRoute.get('version');\n        } else if (selectedSolutionDispatchRouteId !== currentDispatchRouteId) {\n          recipe.prerequisites.push({\n            id: selectedSolutionDispatchRouteId,\n            type: 'route',\n            version: selectedSolutionDispatchRoute.get('version')\n          });\n        }\n      }\n\n      return recipe;\n    },\n\n    selectSolution(routeId) {\n      const selectedRoute = this.get('store').peekRecord('route', routeId);\n      const selectedDispatchRoute = this.get('store').peekRecord('dispatch-route', selectedRoute.get('dispatchRoute.id'));\n      this.setProperties({\n        selectedSolutionId: routeId,\n        selectedImpactPeriod: 'after',\n        activeTabRouteId: routeId,\n        currentSolutionDispatchRoute: selectedDispatchRoute\n      });\n      this.chooseImpactByRoute(routeId);\n    },\n\n    observeSelectImpactPeriod: Ember.observer('selectedImpactPeriod', function () {\n      const period = this.get('selectedImpactPeriod');\n      const selectedRouteId = this.get('activeTabRouteId'); // TODO: Can the table rows be updated without an observer?\n\n      this.get('solutionImpactTable').setRows(this.get(`impact.${period}.stops`)); // revaluate impact\n\n      this.chooseImpactByRoute(selectedRouteId);\n    }),\n\n    sortTableSolutionRow() {\n      const rows = this.get('solutionPreviewTable.rows');\n      const sortedRows = rows.get('content').sort(function (a, b) {\n        if (a && b) {\n          const aExtensionExceeded = a.get('extensionExceeded');\n          const bExtensionExceeded = b.get('extensionExceeded');\n          if (aExtensionExceeded && !bExtensionExceeded) return 1;\n          if (bExtensionExceeded && !aExtensionExceeded) return -1;\n          const aNewOtp = a.get('otp.newValue') || 0;\n          const bNewOtp = b.get('otp.newValue') || 0;\n          return aNewOtp - bNewOtp;\n        }\n\n        return 0;\n      });\n      this.get('solutionPreviewTable').setRows(sortedRows);\n    },\n\n    selectTableSolutionRow(routeId) {\n      const rows = this.get('solutionPreviewTable.rows');\n      const currentSelectedRow = rows.findBy('selected');\n      const rowToSelect = rows.findBy('id', routeId);\n      if (rowToSelect === currentSelectedRow) return;\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n      }\n\n      rowToSelect.set('selected', true);\n      this.selectSolution(routeId);\n    },\n\n    deselectSolution() {\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      this.set('overrideErrorText', '');\n    },\n\n    cursorWait() {\n      Ember.$('html,body').css('cursor', 'wait');\n    },\n\n    cursorDefault() {\n      Ember.$('html,body').css('cursor', 'default');\n    },\n\n    selectOverrideSolution() {\n      const route = this.get('overrideSelectedRoute');\n      const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n      const routeId = route.get('id');\n      const routeName = route.get('name');\n      const trip = this.get('trip');\n      const currentSelectedRow = this.get('solutionPreviewTable.rows').findBy('selected');\n      const store = this.get('store');\n      const solutions = this.get('solutions');\n      const pickOrdinal = this.get('overrideSelectedPickOrder');\n      const dropOrdinal = this.get('overrideSelectedDropOrder'); // clear error message\n\n      this.set('errorText');\n\n      if (currentSelectedRow) {\n        currentSelectedRow.set('selected', false);\n        this.set('selectedSolutionId');\n      }\n\n      if (previousSelectedTripProvider.get('isBrokerProviderType')) {\n        const selectedRoute = store.peekRecord('route', routeId);\n        this.set('currentSolutionDispatchRoute', selectedRoute.get('dispatchRoute'));\n        return;\n      }\n\n      this.cursorWait();\n      this.get('fetchManualSolutionsTask').perform(trip, pickOrdinal, dropOrdinal, routeId).catch(err => {\n        // if the side drawer have been close while doing fetch\n        if (this.get('isSolutionsTaskCanceled')) return null; // Try to be as robust as possible.  Log an error to console for discovery,\n        // but just use an empty solution set to unblock manually transferring\n\n        console.warn(`Unable to fetch trip transfer solutions: ${JSON.stringify(err)}`); // eslint-disable-line no-console\n\n        if (!Ember.isEmpty(err) && !Ember.isEmpty(err.payload)) {\n          if (err.payload.message) {\n            const reason = err.payload.message || err.payload.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n            this.set('errorText', `* ${reason}`);\n          } else {\n            this.set('errorText', 'The system encountered an error, please try again. If the problem persists contact administrator.');\n          }\n        }\n\n        return null;\n      }).then(solution => {\n        if (solution) {\n          const destinationRoutes = solution || [];\n          const foundSolution = solutions.findBy('id', destinationRoutes[0].id); // reset stops table data\n\n          this.get('solutionImpactTable').setRows([]);\n\n          if (!foundSolution) {\n            this.get('solutions').pushObject(destinationRoutes[0]);\n            const solutionsTableRows = destinationRoutes.map(_ref2 => {\n              let {\n                id,\n                otp,\n                extensionExceeded,\n                plannedEndTime,\n                prevEndEta,\n                endEta\n              } = _ref2;\n              const selectedRoute = store.peekRecord('route', id);\n              return {\n                id,\n                otp,\n                extensionExceeded,\n                plannedEndTime,\n                prevEndEta,\n                endEta,\n                dispatchRoute: selectedRoute.get('dispatchRoute')\n              };\n            }); // this.get('solutionPreviewTable').push(solutionsTableRows[0]);\n\n            this.get('solutionPreviewTable').addRows(solutionsTableRows);\n          } else {\n            const solutionPreviewTableRow = this.get('solutionPreviewTable.rows').toArray();\n            const solutionIndex = solutions.findIndex(currSolution => currSolution.id === destinationRoutes[0].id);\n            const solutionPreviewTableRowIindex = solutionPreviewTableRow.findIndex(row => row.get('id') === destinationRoutes[0].id); // replace the solution with new data\n\n            solutions.splice(solutionIndex, 1, destinationRoutes[0]);\n            const solutionsTableRows = destinationRoutes.map(_ref3 => {\n              let {\n                id,\n                otp,\n                extensionExceeded,\n                plannedEndTime,\n                prevEndEta,\n                endEta\n              } = _ref3;\n              const selectedRoute = store.peekRecord('route', id);\n              return {\n                id,\n                otp,\n                extensionExceeded,\n                plannedEndTime,\n                prevEndEta,\n                endEta,\n                dispatchRoute: selectedRoute.get('dispatchRoute')\n              };\n            }); // replace the routes table rows with new solution rows\n\n            this.get('solutionPreviewTable').removeRow(solutionPreviewTableRow[solutionPreviewTableRowIindex]);\n            this.get('solutionPreviewTable').addRow(solutionsTableRows[0]);\n            this.get('solutionPreviewTable').setRows(solutionPreviewTableRow); // refresh stop table with new results\n\n            const selectedRoute = store.peekRecord('route', destinationRoutes[0].id);\n            this.set('currentSolutionDispatchRoute', selectedRoute.get('dispatchRoute'));\n          }\n\n          this.sortTableSolutionRow();\n          this.selectSolution(destinationRoutes[0].id);\n          this.selectTableSolutionRow(routeId);\n        }\n\n        this.cursorDefault();\n      }).catch(e => {\n        if (e.status) {\n          this.get('notifications').warning(`Trip ${trip.get('tripId')} cannot be transferred to route ${routeName}`);\n        }\n\n        this.cursorDefault();\n      });\n    },\n\n    onCancelBookingPatchTask() {\n      const trip = this.get('trip');\n      const booking = (0, _unwrapProxy.unwrapProxy)(trip.get('booking'));\n      booking.set('status', 'canceled');\n      return booking.save();\n    },\n\n    async waitListTripInDispatch() {\n      const dispatchAdapter = this.get('store').adapterFor('dispatch-schedule');\n      const tripId = parseInt(this.get('trip.id'), 10);\n      const response = await dispatchAdapter.waitListTrip(tripId);\n      return response;\n    },\n\n    onManualTripTransfer() {\n      const bulkOperationAdapter = this.get('store').adapterFor('bulk-operation');\n      const currentSolutionDispatchRoute = this.get('currentSolutionDispatchRoute');\n      const currentRouteId = this.get('currentRoute.name');\n      const title = 'Transfer Trip';\n      const tripId = this.get('trip.tripId');\n      const tooltip = this.get('tooltip');\n      const currentRouteIdTip = !this.get('trip.isScheduled') ? '' : `from route ${currentRouteId}`;\n      const tip = `Transfer trip ${tripId} ${currentRouteIdTip} to route ${currentSolutionDispatchRoute.get('route.name')}`;\n      const subTips = {\n        header: 'Please consider the following:',\n        items: []\n      };\n      const successMsg = `Trip transfer ${tripId} was successful`;\n      const errorMsg = `Trip transfer ${tripId} failed`;\n      const selectedRouteId = this.get('currentSolutionDispatchRoute.route.id');\n      const solutions = this.get('solutions') || [];\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n\n      const _selectedSolution = _lodash.default.cloneDeep(selectedSolution);\n\n      if (Ember.isPresent(selectedSolution)) {\n        const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n        const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes;\n\n        this.validateRouteExtensionLimit(_selectedSolution, routeMaxExtension);\n\n        if (_selectedSolution.extensionExceeded) {\n          subTips.items.push('Proceed with the trip transfer, this trip might push past the end time of the route.');\n        }\n      }\n\n      const recipe = selectedSolution.recipe;\n      const finalRecipe = this.setRecipePrerequisites(recipe);\n      tooltip.pushConfirmation({\n        tip,\n        subTips: subTips.items.length > 0 ? subTips : null,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: async () => {\n          await this.onCancelBookingPatchTask();\n          return bulkOperationAdapter.createBulkAsyncOperation.perform(finalRecipe).then(async result => {\n            if (result.isJobSuccess) {\n              await this.persistAcceptedPromiseTimes(selectedSolution, [this.get('trip')]);\n\n              if (this.get('callback')) {\n                this.get('callback')();\n              }\n\n              this.get('notifications').success(successMsg);\n              tooltip.reset();\n              this.get('workspace').popState('tripTransfer');\n            } else {\n              tooltip.reset();\n              this.get('notifications').warning(result.result);\n            }\n          }).catch(async err => {\n            if (err && err.payload && err.payload.message) {\n              const reason = err.payload.message || err.payload.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n              this.get('notifications').warning(reason);\n            } else {\n              this.get('notifications').warning(errorMsg);\n            }\n\n            tooltip.reset();\n            await this.waitListTripInDispatch();\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          tooltip.reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    onAutoGeneratedSolutions() {\n      const tripId = this.get('trip.tripId');\n      const currentSolutionDispatchRoute = this.get('currentSolutionDispatchRoute');\n      const currentRouteId = this.get('currentRoute.name');\n      const title = 'Transfer Trip';\n      const currentRouteIdTip = !this.get('trip.isScheduled') ? '' : `from route ${currentRouteId}`;\n      const vehicle = currentSolutionDispatchRoute.get('assignedVehicle');\n      const tip = `Transfer trip ${tripId} ${currentRouteIdTip} to route ${currentSolutionDispatchRoute.get('route.name')}?`;\n      const subTips = {\n        header: 'Please consider the following:',\n        items: []\n      };\n      let missingNonConsumableArray = [];\n\n      if (Ember.isPresent(vehicle)) {\n        const capacityCounts = vehicle.get('capacityCounts');\n        const travelNeedCounts = this.get('trip.travelNeedCounts');\n        const travelNeedTypes = this.get('store').peekAll('travel-need-type').toArray();\n        const routeVehicleType = vehicle.get('vehicleType.name');\n        const tripVehicleType = this.get('currentDispatchRoute.assignedVehicle.vehicleType.name');\n        missingNonConsumableArray = (0, _vehicleCapacity.missingNonConsumable)(travelNeedCounts.nonConsumables, capacityCounts.nonConsumables, travelNeedTypes);\n\n        if (missingNonConsumableArray.length > 0) {\n          subTips.items.push(`The trip has an ${missingNonConsumableArray.map(obj => obj.displayName).join(' , ')}, but the vehicle on this route does not.`);\n        }\n\n        if (tripVehicleType && routeVehicleType && routeVehicleType !== tripVehicleType) {\n          subTips.items.push('The vehicle type does not match the original vehicle for this trip.');\n        }\n      }\n\n      const selectedRouteId = this.get('currentSolutionDispatchRoute.route.id');\n      const solutions = this.get('solutions') || [];\n      const selectedSolution = solutions.findBy('id', selectedRouteId) || {};\n\n      const _selectedSolution = _lodash.default.cloneDeep(selectedSolution);\n\n      if (Ember.isPresent(selectedSolution)) {\n        const routeMaxParam = this.get('store').peekRecord('cs-config-item', 'config-Route_parameters/routeMaxExtension');\n        const routeMaxExtension = routeMaxParam ? parseInt(routeMaxParam.get('value'), 10) : 60; // minutes;\n\n        this.validateRouteExtensionLimit(_selectedSolution, routeMaxExtension);\n\n        if (_selectedSolution.extensionExceeded) {\n          subTips.items.push('Proceed with the trip transfer, this trip might push past the end time of the route.');\n        }\n      }\n\n      this.get('tooltip').pushConfirmation({\n        tip: tip,\n        subTips: subTips,\n        title,\n        primaryActionText: 'Confirm',\n        primaryAction: () => {\n          return this.get('saveTask').perform().then(() => {\n            if (this.get('callback')) {\n              this.get('callback')();\n            }\n\n            this.get('notifications').success(`Trip transfer ${tripId} was successful`);\n            this.get('tooltip').reset();\n            return this.onCloseClick();\n          }).catch(err => {\n            if (err) {\n              const reason = err || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n              this.get('notifications').warning(`Unable to transfer trip ${tripId}. ${reason}`);\n              this.get('tooltip').reset();\n            }\n          });\n        },\n        secondaryActionText: 'Cancel',\n        secondaryAction: () => {\n          this.get('tooltip').reset();\n        },\n        hasOverlay: true\n      });\n    },\n\n    async onPostBooking() {\n      const bookingAdapter = this.get('store').adapterFor('booking');\n      const rider = (0, _unwrapProxy.unwrapProxy)(this.get('trip.rider'));\n      const pick = (0, _unwrapProxy.unwrapProxy)(this.get('trip.pick'));\n      const drop = (0, _unwrapProxy.unwrapProxy)(this.get('trip.drop'));\n      const segment = (0, _unwrapProxy.unwrapProxy)(this.get('trip.segment'));\n      const leg = (0, _unwrapProxy.unwrapProxy)(segment.get('leg'));\n      const legTravelNeed = (0, _unwrapProxy.unwrapProxy)(leg.get('legTravelNeeds.firstObject'));\n      const stopPointsJson = this.buildStopPointsJson(pick, drop);\n      const tripId = this.get('trip.tripId');\n      const json = {\n        data: {\n          type: 'booking',\n          attributes: {\n            trackingId: tripId,\n            externalBookingId: '',\n            requestedProvider: {\n              type: 'dedicated',\n              id: '',\n              name: 'Verifone'\n            },\n            source: {\n              type: 'callAgent',\n              id: '1'\n            },\n            status: 'active',\n            passengers: [{\n              id: rider.get('id'),\n              name: rider.get('fullName'),\n              lastName: rider.get('lastName'),\n              firstName: rider.get('firstName'),\n              middleName: rider.get('middleName'),\n              email: `${rider.get('firstName')}@emaple.com`,\n              phone1: {\n                number: rider.get('riderPhoneNumbers').length ? rider.get('riderPhoneNumbers')[0].get('phoneNumber') : ''\n              },\n              bookingNote: rider.get('notes') ? rider.get('notes') : '',\n              requiredAttributes: [{\n                type: legTravelNeed.get('travelNeedTypeName'),\n                cnt: legTravelNeed.get('count')\n              }]\n            }],\n            stopPoints: stopPointsJson,\n            price: {\n              payerIdentifier: '',\n              currencyCode: 'USD',\n              estimate: segment.get('fare'),\n              paymengTypeName: segment.get('fareTypeName'),\n              tip: {\n                percent: 1,\n                minValue: 0\n              }\n            }\n          }\n        }\n      };\n      const bookingResponse = await bookingAdapter.postBooking(json);\n      return bookingResponse;\n    },\n\n    buildStopPointsJson(pick, drop) {\n      const stopPointsJson = [];\n      const pickAddress = (0, _unwrapProxy.unwrapProxy)(pick.get('segmentStop.place.address'));\n      const dropAddress = (0, _unwrapProxy.unwrapProxy)(drop.get('segmentStop.place.address'));\n      const rider = (0, _unwrapProxy.unwrapProxy)(this.get('trip.rider'));\n      const segment = (0, _unwrapProxy.unwrapProxy)(this.get('trip.segment'));\n      const pickJson = {\n        index: pick.get('plannedRouteOrdinal'),\n        'address': {\n          'formattedAddress': pickAddress.get('simpleAddress'),\n          'streetName': pickAddress.get('streetAddress'),\n          'streetNr': pickAddress.get('streetNumber'),\n          'region': pickAddress.get('region'),\n          'postCode': pickAddress.get('postalCode'),\n          'city': pickAddress.get('locality'),\n          'state': pickAddress.get('region'),\n          'coord': {\n            'lat': pick.get('lat'),\n            'lng': pick.get('lng')\n          }\n        },\n        'passengerEvents': [{\n          'type': 'pickup',\n          'passengerId': rider.get('riderId'),\n          'time': (0, _moment.default)(segment.get('promiseTime')).format(),\n          'anchor': true,\n          'driverNote': rider.get('notes') ? rider.get('notes') : ''\n        }]\n      };\n      const dropJson = {\n        index: drop.get('plannedRouteOrdinal'),\n        'address': {\n          'formattedAddress': dropAddress.get('simpleAddress'),\n          'streetName': dropAddress.get('streetAddress'),\n          'streetNr': dropAddress.get('streetNumber'),\n          'region': dropAddress.get('region'),\n          'postCode': dropAddress.get('postalCode'),\n          'city': dropAddress.get('locality'),\n          'state': dropAddress.get('region'),\n          'coord': {\n            'lat': drop.get('lat'),\n            'lng': drop.get('lng')\n          }\n        },\n        'passengerEvents': [{\n          'type': 'dropoff',\n          'passengerId': rider.get('riderId'),\n          'time': (0, _moment.default)(segment.get('promiseTime')).format(),\n          'anchor': false,\n          'driverNote': rider.get('notes') ? rider.get('notes') : ''\n        }]\n      };\n      stopPointsJson.push(pickJson, dropJson);\n      return stopPointsJson;\n    },\n\n    onValidateBrokerProvider() {\n      const overrideSelectedProvider = this.get('overrideSelectedProvider');\n      const previousSelectedProvider = this.get('previousSelectedProvider');\n      const isAnotherBrokerProviderSelected = previousSelectedProvider && previousSelectedProvider.get('isBrokerProviderType') && overrideSelectedProvider.get('isBrokerProviderType');\n\n      if (isAnotherBrokerProviderSelected || overrideSelectedProvider.get('isBrokerProviderType')) {\n        this.set('isBrokerProviderType', true);\n      }\n    },\n\n    validatePickDropOrder(pickOrder, dropOrder) {\n      const currentStops = this.get('overrideSelectedRoute.dispatchRoute.orderedStopsWithBreaks') || [];\n      const pickOrderMin = pickOrder - 1; // because array is zero based\n\n      const dropOrderMax = dropOrder - 2; // because array is zero based and the inserted pick stop moves everything down one.\n\n      const overridePickTime = this.get('overridePickTime');\n      const overrideDropTime = this.get('overrideDropTime');\n      this.set('overrideErrorText', '');\n      let isValid = true;\n      let index = pickOrderMin;\n\n      if (overridePickTime.isSameOrAfter(overrideDropTime)) {\n        this.set('overrideErrorText', 'Dropoff Time must be after Pickup Time.');\n        isValid = false;\n      }\n\n      if (isValid && dropOrder < pickOrder) {\n        this.set('overrideErrorText', 'Dropoff Time must be after Pickup Time.');\n        isValid = false;\n      }\n\n      while (isValid && index < dropOrderMax) {\n        const stop = currentStops.objectAt(index);\n\n        if (Ember.isPresent(stop) && stop.get('isBreak')) {\n          this.set('overrideErrorText', 'Invalid pick/drop time. There is a break in between');\n          isValid = false;\n        }\n\n        index++;\n      }\n\n      return isValid;\n    },\n\n    manualTripTransferForDispatch: (0, _emberConcurrency.task)(function* (routeId, pickOrdinal, dropOrdinal, ignoreCapacityViolation) {\n      const dispatchRouteAdapter = this.get('store').adapterFor('dispatch-route');\n      const tripId = parseInt(this.get('trip.id'), 10);\n      yield dispatchRouteAdapter.manualTripTransferForDispatch(routeId, tripId, pickOrdinal, dropOrdinal, ignoreCapacityViolation);\n    }),\n\n    convertToRegularDateTime(value) {\n      const scheduleName = this.get('overrideSelectedRoute.schedule.name');\n      const dateTimeMoment = (0, _moment.default)(scheduleName).startOf('day');\n      const timeArray = value.masked.split(':');\n      dateTimeMoment.add(timeArray[0], 'hours');\n      dateTimeMoment.add(timeArray[1], 'minutes');\n      return dateTimeMoment;\n    },\n\n    getOrderfromDateTime(selectDateTime, overrideOrderOptions) {\n      const selectedRouteOrderOption = overrideOrderOptions.find(option => {\n        const currentTime = option.eta;\n\n        if (selectDateTime <= currentTime) {\n          return true;\n        }\n\n        return false;\n      });\n      return Ember.isPresent(selectedRouteOrderOption) ? selectedRouteOrderOption.routeOrdinal : 1;\n    },\n\n    async setBrokerEligible(value) {\n      const leg = (0, _unwrapProxy.unwrapProxy)(this.get('trip.segment.leg'));\n      leg.set('brokerEligible', value);\n      await leg.save();\n    },\n\n    actions: {\n      onColumnSolutionClick(column) {\n        this.sortSolutionPreview(column);\n      },\n\n      onColumnImpactClick(column) {\n        const currentTripId = this.get('trip.id');\n        this.sortImpactPreview(column, [currentTripId]);\n        this.set('currentSortImpactPreview', column);\n      },\n\n      refreshProviderAutoTransfer() {\n        const isManualSchedulingMode = this.get('isManualSchedulingMode');\n        this.setProperties({\n          override: null,\n          overrideSelectedRoute: null\n        });\n        this.setOverrideInitialData();\n        this.set('overrideSelectedRoute'); // eslint-disable-next-line new-cap\n\n        this.set('solutions', Ember.A([]));\n        this.get('solutionPreviewTable').setRows([]);\n        this.get('solutionImpactTable').setRows([]);\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        const pickDepartTime = this.get('trip.pickStopPoint.departTime');\n        const mPickDepartTime = pickDepartTime ? (0, _moment.default)(pickDepartTime) : null;\n\n        if (isManualSchedulingMode) {\n          this.set('errorText', 'Unable to generate a solution preview for a manually scheduled trip. Use override to transfer trip.');\n        } // an unknown pickup time (no planned ETA and no promise time) is not a reason to block the search\n        else if (mPickDepartTime && mPickDepartTime.isValid() && mPickDepartTime.isBefore((0, _moment.default)())) {\n          this.set('errorText', 'Unable to generate a solution preview because the pickup promise time has already passed. Use override to transfer trip.');\n        } else {\n          this.setupSolutions();\n        }\n      },\n\n      onSolutionRowClick(row\n      /*, event */\n      ) {\n        const routeId = row.get('id'); // Reset the override\n\n        this.set('selectedOverrideSolutionId');\n        this.selectTableSolutionRow(routeId);\n      },\n\n      onChangePickTime(value) {\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const deselectSolution = this.get('deselectSolution').bind(this);\n        this.set('pickTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('overridePickTime');\n          this.set('overrideSelectedPickOrder');\n          deselectSolution();\n          return;\n        }\n\n        let overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n        const overrideOrderOptions = this.get('overrideOrderOptions');\n        const pickTimeMoment = this.convertToRegularDateTime(value);\n        const pickRouteOrinal = this.getOrderfromDateTime(pickTimeMoment, overrideOrderOptions);\n\n        if (Ember.isNone(pickRouteOrinal)) {\n          this.set('pickTime');\n          this.get('notifications').info('Invalid pick order.');\n        }\n\n        if (overrideSelectedDropOrder === pickRouteOrinal) {\n          overrideSelectedDropOrder = overrideSelectedDropOrder + 1;\n          this.set('overrideSelectedDropOrder', overrideSelectedDropOrder);\n        }\n\n        this.set('overridePickTime', pickTimeMoment);\n        this.set('overrideSelectedPickOrder', pickRouteOrinal);\n\n        if (Ember.isPresent(overrideSelectedDropOrder) && Ember.isPresent(overrideSelectedRoute)) {\n          if (this.validatePickDropOrder(pickRouteOrinal, overrideSelectedDropOrder)) {\n            this.selectOverrideSolution(this.get('overrideSelectedRoute'));\n          } else {\n            this.set('pickTime');\n            this.set('overridePickTime');\n            this.set('overrideSelectedPickOrder');\n          }\n        }\n      },\n\n      onChangeDropTime(value) {\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const deselectSolution = this.get('deselectSolution').bind(this);\n        this.set('dropTime', value.unmasked);\n\n        if (value.unmasked.length < 4) {\n          this.set('overrideDropTime');\n          this.set('overrideSelectedDropOrder');\n          deselectSolution();\n          return;\n        }\n\n        const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n        const overrideOrderOptions = this.get('overrideOrderOptions');\n        const dropTimeMoment = this.convertToRegularDateTime(value);\n        let dropRouteOrdinal = this.getOrderfromDateTime(dropTimeMoment, overrideOrderOptions);\n\n        if (overrideSelectedPickOrder === dropRouteOrdinal) {\n          dropRouteOrdinal = dropRouteOrdinal + 1;\n        } else if (overrideSelectedPickOrder < dropRouteOrdinal) {\n          dropRouteOrdinal = dropRouteOrdinal + 1;\n        }\n\n        this.set('overrideDropTime', dropTimeMoment);\n        this.set('overrideSelectedDropOrder', dropRouteOrdinal);\n\n        if (Ember.isPresent(overrideSelectedPickOrder) && Ember.isPresent(overrideSelectedRoute)) {\n          if (this.validatePickDropOrder(overrideSelectedPickOrder, dropRouteOrdinal)) {\n            this.selectOverrideSolution(this.get('overrideSelectedRoute'));\n            return;\n          }\n\n          this.set('dropTime');\n          this.set('overrideDropTime');\n          this.set('overrideSelectedDropOrder');\n        }\n      },\n\n      onRefreshClick() {\n        const isManualSchedulingMode = this.get('isManualSchedulingMode');\n        this.setProperties({\n          override: null,\n          overrideSelectedRoute: null\n        });\n        this.setOverrideInitialData();\n        this.set('overrideSelectedRoute');\n        this.set('override', isManualSchedulingMode); // eslint-disable-next-line new-cap\n\n        this.set('solutions', Ember.A([]));\n        this.get('solutionPreviewTable').setRows([]);\n        this.get('solutionImpactTable').setRows([]);\n        this.set('currentSortImpactPreview');\n        this.get('solutionImpactTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n        this.get('solutionPreviewTable.allColumns').toArray().forEach(column => {\n          column.set('sorted', false);\n        });\n\n        if (!isManualSchedulingMode) {\n          this.setupSolutions();\n        }\n      },\n\n      async onSaveClick() {\n        const override = this.get('override');\n        const coreEntityPopulator = this.get('coreEntityPopulator');\n        const overrideSelectedProvider = this.get('overrideSelectedProvider');\n        const overrideRouteOptions = await this.get('overrideRouteOptions');\n        const previousSelectedTripProvider = this.get('previousSelectedTripProvider');\n        const currentSolutionDispatchRoute = this.get('currentSolutionDispatchRoute');\n        const brokerEligible = this.get('brokerEligible'); // Reg-NYAAR-19415 - if no override selected isBrokerProviderType will be false\n\n        const isBrokerProviderType = overrideSelectedProvider ? overrideSelectedProvider.get('isBrokerProviderType') : false; // no routes exists for selected provider\n\n        if (!overrideRouteOptions.length && overrideRouteOptions.length > 0) {\n          const warningMsg = overrideSelectedProvider.get('isBrokerProviderType') ? 'Failed to transfer trip. No broker routes exist' : 'Failed to transfer trip. No routes exist';\n          this.onCloseClick();\n          this.get('notifications').warning(warningMsg);\n          return;\n        }\n\n        if (override && overrideRouteOptions.length > 0) {\n          const routeId = parseInt((0, _unwrapProxy.unwrapProxy)(overrideRouteOptions.get('firstObject.id')), 10);\n          await coreEntityPopulator.populateRtsRoute(routeId, {});\n          const dispatchRouteId = parseInt((0, _unwrapProxy.unwrapProxy)(overrideRouteOptions.get('firstObject.dispatchRoute.id')), 10);\n          const pickOrdinal = 1;\n          const dropOrdinal = 2; //NYAAR-19315-if the broker is not eligible and the current provider type is broker\n\n          if (!brokerEligible && isBrokerProviderType) {\n            const overrideSelectedRoute = this.get('overrideSelectedRoute');\n            const tripId = this.get('trip.tripId');\n            const tip = 'This trip will be transferred to a broker, even though the trip is not broker-eligible. Are you sure you want to proceed?';\n            const successMsg = `Trip ${tripId} successfully transferred to route ${overrideSelectedRoute.get('name')} `;\n            const title = 'Transfer Trip';\n            const tooltip = this.get('tooltip');\n            tooltip.pushConfirmation({\n              tip,\n              title,\n              primaryActionText: 'Confirm',\n              primaryAction: async () => {\n                this.cursorWait();\n                await this.setBrokerEligible(true);\n                await this.waitListTripInDispatch();\n                this.get('manualTripTransferForDispatch').perform(dispatchRouteId, pickOrdinal, dropOrdinal, true).then(this.onPostBooking.bind(this)).then(() => {\n                  this.cursorDefault();\n                  this.get('notifications').success(successMsg);\n                  this.onCloseClick();\n                }).catch(async error => {\n                  const reason = error.message || error.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n                  this.get('notifications').warning(reason);\n                  await this.setBrokerEligible(false);\n                  await this.waitListTripInDispatch();\n                  this.cursorDefault();\n                  this.onCloseClick();\n                }).finally(() => {\n                  tooltip.reset();\n                });\n              },\n              secondaryActionText: 'Cancel',\n              secondaryAction: () => {\n                tooltip.reset();\n              },\n              hasOverlay: true\n            });\n          } // if trip selected provider is non-broker type  and current select provider has a broker type\n          else if (!previousSelectedTripProvider.get('isBrokerProviderType') && overrideSelectedProvider.get('isBrokerProviderType')) {\n            this.cursorWait();\n            await this.waitListTripInDispatch();\n            this.get('manualTripTransferForDispatch').perform(dispatchRouteId, pickOrdinal, dropOrdinal, true).then(this.onPostBooking.bind(this)).then(() => {\n              this.cursorDefault();\n              this.onCloseClick();\n            }).catch(async error => {\n              const reason = error.message || error.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n              this.get('notifications').warning(reason);\n              await this.waitListTripInDispatch();\n              this.cursorDefault();\n              this.onCloseClick();\n            });\n          } // if trip selected provider and current select provider has a broker type\n          else if (previousSelectedTripProvider && previousSelectedTripProvider.get('isBrokerProviderType') && overrideSelectedProvider.get('isBrokerProviderType')) {\n            this.cursorWait();\n            await this.onCancelBookingPatchTask();\n            this.get('manualTripTransferForDispatch').perform(dispatchRouteId, pickOrdinal, dropOrdinal, true).then(this.onPostBooking.bind(this)).then(() => {\n              this.cursorDefault();\n              this.onCloseClick();\n            }).catch(async error => {\n              const reason = error.message || error.detail || 'The system encountered an error, please try again. If the problem persists contact administrator.';\n              this.get('notifications').warning(reason);\n              await this.waitListTripInDispatch();\n              this.cursorDefault();\n              this.onCloseClick();\n            });\n          } //if trip selected provider is broker type  and current select provider has a non-broker type\n          else {\n            this.onManualTripTransfer();\n          }\n        } else if (!Ember.isNone(currentSolutionDispatchRoute)) {\n          // auto generated solutions\n          this.onAutoGeneratedSolutions();\n        }\n      },\n\n      onShrinkClick() {\n        let currentState = this.get('currentState');\n        const currentSolutionRoute = this.get('currentSolutionRoute');\n        const solutions = this.get('solutions');\n        const currentRouteSolution = this.get('currentRouteSolution');\n        const overrideSelectedProvider = this.get('overrideSelectedProvider');\n        const overrideSelectedRoute = this.get('overrideSelectedRoute');\n        const overrideSelectedPickOrder = this.get('overrideSelectedPickOrder');\n        const overrideSelectedDropOrder = this.get('overrideSelectedDropOrder');\n        const override = this.get('override');\n        const pickTime = this.get('pickTime');\n        const overridePickTime = this.get('overridePickTime');\n        const dropTime = this.get('dropTime');\n        const overrideDropTime = this.get('overrideDropTime'); // save current manual settings\n\n        currentState = {\n          currentSolutionRoute: (0, _unwrapProxy.unwrapProxy)(currentSolutionRoute),\n          solutions,\n          currentRouteSolution,\n          overrideSelectedProvider,\n          overrideSelectedRoute,\n          overrideSelectedPickOrder,\n          overrideSelectedDropOrder,\n          override,\n          pickTime,\n          overridePickTime,\n          dropTime,\n          overrideDropTime\n        };\n        this.set('currentState', currentState);\n        this.set('overrideSelectedDropOrder');\n        this.onShrinkClick();\n      },\n\n      async onChangeProvider(provider) {\n        const routesList = await this.populateRoutesList(this.get('trip.schedule.id'), false);\n        this.set('overrideSelectedRoute');\n        this.set('previousSelectedProvider', this.get('overrideSelectedProvider'));\n        this.set('overrideSelectedProvider', provider);\n        this.set('routesList', routesList);\n        this.onValidateBrokerProvider();\n      },\n\n      async onChangeRoute(route) {\n        await this.get('coreEntityPopulator').populateRtsRoute(route.id, {}); // give it a bit of time for everything to get loaded to ember store\n\n        Ember.run.later(() => {\n          this.set('overrideSelectedRoute', route);\n          const overrideOrderOptions = this.get('overrideOrderOptions');\n          const overrideSelectedPickOrder = this.getOrderfromDateTime(this.get('overridePickTime'), overrideOrderOptions);\n          let overrideSelectedDropOrder = this.getOrderfromDateTime(this.get('overrideDropTime'), overrideOrderOptions);\n\n          if (overrideSelectedPickOrder === overrideSelectedDropOrder) {\n            overrideSelectedDropOrder = overrideSelectedDropOrder + 1;\n          }\n\n          this.set('overrideSelectedPickOrder', overrideSelectedPickOrder);\n          this.set('overrideSelectedDropOrder', overrideSelectedDropOrder);\n\n          if (Ember.isPresent(overrideSelectedPickOrder) && Ember.isPresent(overrideSelectedDropOrder)) {\n            if (this.validatePickDropOrder(overrideSelectedPickOrder, overrideSelectedDropOrder)) {\n              this.selectOverrideSolution(this.get('overrideSelectedRoute'));\n              return;\n            }\n          }\n        }, 500);\n      },\n\n      selectSolutionRouteTab() {\n        const selectedRouteId = this.get('selectedSolutionId');\n        this.set('selectedImpactView', 'destination');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      },\n\n      selectCurrentRouteTab() {\n        const selectedRouteId = this.get('currentDispatchRoute.route.id');\n        this.set('selectedImpactView', 'current');\n        this.set('activeTabRouteId', selectedRouteId);\n        this.chooseImpactByRoute(selectedRouteId);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stopColumns = _exports.solutionColumns = void 0;\n  const MIN_COLUMN_WIDTH = 50;\n  const solutionColumns = [{\n    width: '40px',\n    resizable: false,\n    cellComponent: 'side-drawer/trip-transfer/radio-button'\n  }, {\n    label: 'Options',\n    sortType: 'number',\n    valuePath: 'dispatchRoute.route.name',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Current OTP',\n    sortType: 'number',\n    valuePath: 'otp.originalValue',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'New OTP',\n    sortType: 'number',\n    valuePath: 'otp.newValue',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Result',\n    sortType: 'number',\n    valuePath: 'otp.deltaValue',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }, {\n    label: 'Provider',\n    sortType: 'text',\n    valuePath: 'dispatchRoute.provider.name',\n    cellComponent: 'side-drawer/trip-transfer/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH\n  }];\n  _exports.solutionColumns = solutionColumns;\n  const stopColumns = [{\n    label: 'Trip ID',\n    sortType: 'number',\n    valuePath: 'stopPoint.trip.tripId',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '75px'\n  }, {\n    label: 'Last Name',\n    sortType: 'text',\n    valuePath: 'stopPoint.trip.rider.lastName',\n    cellComponent: 'table/cells/base-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    width: '90px'\n  }, {\n    label: 'Address',\n    sortType: 'text',\n    valuePath: 'stopPoint.place.address.simpleAddress',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '150px'\n  }, {\n    label: 'City',\n    sortType: 'text',\n    valuePath: 'stopPoint.place.address.locality',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '100px'\n  }, {\n    label: 'Stop',\n    sortType: 'text',\n    valuePath: 'stopPoint.stopType',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'ETA',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'eta',\n    cellComponent: 'table/cells/trip-eta',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }, {\n    label: 'Promise Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'computedPromiseTime',\n    cellComponent: 'table/cells/date-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    format: 'HH:mm',\n    width: '115px'\n  }, {\n    label: 'Appt Time',\n    sortType: 'time',\n    sortFormat: 'HH:mm',\n    valuePath: 'stopPoint.computedApptTime',\n    cellComponent: 'table/cells/date-cell',\n    resizable: true,\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    format: 'HH:mm',\n    width: '100px'\n  }, {\n    label: 'Stop Break Ord',\n    sortType: 'number',\n    valuePath: 'routeOrdinal',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '120px'\n  }, {\n    label: 'Slack',\n    sortType: 'number',\n    valuePath: 'slack',\n    cellComponent: 'table/cells/base-cell',\n    minResizeWidth: MIN_COLUMN_WIDTH,\n    resizable: true,\n    width: '70px'\n  }];\n  _exports.stopColumns = stopColumns;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/radio-button/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-radio-button-cell', 'data-test-table-radio-button-cell'],\n    solution: Ember.computed.readOnly('row.content'),\n    isDisabled: false,\n    actions: {\n      onRadioButtonClick() {\n        // prevents `click` event from bubbling to row component\n        // event.stopPropagation();\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const selectedRow = rows.findBy('selected', true);\n        const buttonClickAction = this.get('tableActions.radioButtonClick');\n        if (row === selectedRow) return;\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n        }\n\n        if (buttonClickAction) {\n          buttonClickAction(row);\n        }\n\n        row.set('selected', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/radio-button/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XBrwappV\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"disabled\\\",[21,\\\"isDisabled\\\"]],[12,\\\"checked\\\",[23,[\\\"row\\\",\\\"selected\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/trip-transfer/radio-button/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/stubs\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.solutionImpactDataStub = _exports.solutionDataStub = _exports.currentRouteImpactDataStub = void 0;\n  const solutionDataStub = [{\n    id: '234535',\n    gain: 3000000,\n    transferSaves: 1200000\n  }, {\n    id: '213244',\n    gain: 3600000,\n    transferSaves: 600000\n  }, {\n    id: '222342',\n    gain: 4800000,\n    transferSaves: 480000\n  }];\n  _exports.solutionDataStub = solutionDataStub;\n  const currentRouteImpactDataStub = {\n    before: {\n      delta: 0,\n      trips: [{\n        id: '182345467',\n        action: 'added',\n        lastName: 'Jackson',\n        stop: 'Pick',\n        eta: (0, _moment.default)('06:20 AM', 'hh:mm A'),\n        mrt: 0,\n        address: '12 Ave.',\n        city: 'Bronx',\n        pick: '06:20 AM',\n        drop: ''\n      }, {\n        id: '162342345',\n        lastName: 'Freeman',\n        stop: 'Pick',\n        eta: (0, _moment.default)('06:15 AM', 'hh:mm A'),\n        mrt: 0,\n        address: '30 Ave.',\n        city: 'Bronx',\n        pick: '06:15 AM',\n        drop: ''\n      }, {\n        id: '182345467',\n        action: 'added',\n        lastName: 'Jackson',\n        stop: 'Pick',\n        eta: (0, _moment.default)('06:20 AM', 'hh:mm A'),\n        mrt: 0,\n        address: '12 Ave.',\n        city: 'Bronx',\n        pick: '06:20 AM',\n        drop: ''\n      }]\n    },\n    after: {\n      delta: 0,\n      trips: [{\n        id: '162342345',\n        lastName: 'Freeman',\n        stop: 'Pick',\n        eta: (0, _moment.default)('06:15 AM', 'hh:mm A'),\n        mrt: 0,\n        address: '30 Ave.',\n        city: 'Bronx',\n        pick: '06:15 AM',\n        drop: ''\n      }]\n    }\n  };\n  _exports.currentRouteImpactDataStub = currentRouteImpactDataStub;\n  const solutionImpactDataStub = {\n    '234535': {\n      before: {\n        delta: 0,\n        trips: [{\n          id: '162342345',\n          lastName: 'Freeman',\n          stop: 'Pick',\n          eta: (0, _moment.default)('06:15 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '30 Ave.',\n          city: 'Bronx',\n          pick: '06:15 AM',\n          drop: ''\n        }, {\n          id: '132343244',\n          lastName: 'Fallon',\n          stop: 'Pick',\n          eta: (0, _moment.default)('07:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '33 St.',\n          city: 'Bronx',\n          pick: '07:50 AM',\n          drop: ''\n        }, {\n          id: '182346908',\n          lastName: 'Aniston',\n          stop: 'Pick',\n          eta: (0, _moment.default)('08:10 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '22 Ave.',\n          city: 'Bronx',\n          pick: '08:10 AM',\n          drop: ''\n        }]\n      },\n      after: {\n        delta: 600000,\n        trips: [{\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Pick',\n          eta: (0, _moment.default)('06:20 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '12 Ave.',\n          city: 'Bronx',\n          pick: '06:20 AM',\n          drop: ''\n        }, {\n          id: '162342345',\n          lastName: 'Freeman',\n          stop: 'Pick',\n          eta: (0, _moment.default)('06:35 AM', 'hh:mm A'),\n          mrt: 600000,\n          otp: 'late',\n          address: '30 Ave.',\n          city: 'Bronx',\n          pick: '06:25 AM',\n          drop: ''\n        }, {\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Drop',\n          eta: (0, _moment.default)('07:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '12 Ave.',\n          city: 'Bronx',\n          pick: '',\n          drop: '07:50 AM'\n        }, {\n          id: '132343244',\n          lastName: 'Fallon',\n          stop: 'Pick',\n          eta: (0, _moment.default)('08:10 AM', 'hh:mm A'),\n          mrt: 600000,\n          otp: 'late',\n          address: '33 St.',\n          city: 'Bronx',\n          pick: '08:00 AM',\n          drop: ''\n        }, {\n          id: '182346908',\n          lastName: 'Aniston',\n          stop: 'Pick',\n          eta: (0, _moment.default)('08:30 AM', 'hh:mm A'),\n          mrt: 600000,\n          otp: 'late',\n          address: '22 Ave.',\n          city: 'Bronx',\n          pick: '08:20 AM',\n          drop: ''\n        }]\n      }\n    },\n    '213244': {\n      before: {\n        delta: 0,\n        trips: [{\n          id: '349',\n          lastName: 'Capone',\n          stop: 'Pick',\n          eta: (0, _moment.default)('08:15 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '80 Ave.',\n          city: 'Bronx',\n          pick: '08:15 AM',\n          drop: ''\n        }, {\n          id: '3285',\n          lastName: 'Doe',\n          stop: 'Pick',\n          eta: (0, _moment.default)('09:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '99 St.',\n          city: 'Bronx',\n          pick: '09:50 AM',\n          drop: ''\n        }, {\n          id: '9322',\n          lastName: 'Bauer',\n          stop: 'Pick',\n          eta: (0, _moment.default)('10:10 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '11 Ave.',\n          city: 'Bronx',\n          pick: '10:10 AM',\n          drop: ''\n        }]\n      },\n      after: {\n        delta: 660000,\n        trips: [{\n          id: '44408',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Pick',\n          eta: (0, _moment.default)('08:20 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '13 Ave.',\n          city: 'Bronx',\n          pick: '08:20 AM',\n          drop: ''\n        }, {\n          id: '349',\n          lastName: 'Capone',\n          stop: 'Pick',\n          eta: (0, _moment.default)('08:25 AM', 'hh:mm A'),\n          mrt: 600000,\n          otp: 'late',\n          address: '80 Ave.',\n          city: 'Bronx',\n          pick: '08:25 AM',\n          drop: ''\n        }, {\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Drop',\n          eta: (0, _moment.default)('07:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '12 Ave.',\n          city: 'Bronx',\n          pick: '',\n          drop: '07:50 AM'\n        }, {\n          id: '3285',\n          lastName: 'Doe',\n          stop: 'Pick',\n          eta: (0, _moment.default)('10:00 AM', 'hh:mm A'),\n          mrt: 600000,\n          otp: 'late',\n          address: '99 St.',\n          city: 'Bronx',\n          pick: '10:00 AM',\n          drop: ''\n        }, {\n          id: '9322',\n          lastName: 'Bauer',\n          stop: 'Pick',\n          eta: (0, _moment.default)('10:20 AM', 'hh:mm A'),\n          mrt: 600000,\n          otp: 'late',\n          address: '11 Ave.',\n          city: 'Bronx',\n          pick: '10:20 AM',\n          drop: ''\n        }]\n      }\n    },\n    '222342': {\n      before: {\n        delta: 0,\n        trips: [{\n          id: '340825',\n          lastName: 'Smith',\n          stop: 'Pick',\n          eta: (0, _moment.default)('09:20 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '1 St.',\n          city: 'Bronx',\n          pick: '09:20 AM',\n          drop: ''\n        }, {\n          id: '34698',\n          lastName: 'Jones',\n          stop: 'Pick',\n          eta: (0, _moment.default)('10:30 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '2 Ave.',\n          city: 'Bronx',\n          pick: '10:30 AM',\n          drop: ''\n        }]\n      },\n      after: {\n        delta: 330000,\n        trips: [{\n          id: '340825',\n          lastName: 'Smith',\n          stop: 'Pick',\n          eta: (0, _moment.default)('09:20 AM', 'hh:mm A'),\n          mrt: 1200000,\n          otp: 'late',\n          address: '1 St.',\n          city: 'Bronx',\n          pick: '09:20 AM',\n          drop: ''\n        }, {\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Pick',\n          eta: (0, _moment.default)('09:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '12 Ave.',\n          city: 'Bronx',\n          pick: '09:50 AM',\n          drop: ''\n        }, {\n          id: '34698',\n          lastName: 'Jones',\n          stop: 'Pick',\n          eta: (0, _moment.default)('10:30 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '2 Ave.',\n          city: 'Bronx',\n          pick: '10:30 AM',\n          drop: ''\n        }, {\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Drop',\n          eta: (0, _moment.default)('11:30 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '111 Dr.',\n          city: 'Bronx',\n          pick: '',\n          drop: '11:30 AM'\n        }]\n      }\n    },\n    '236349': {\n      before: {\n        delta: 0,\n        trips: [{\n          id: '34698',\n          lastName: 'Zach',\n          stop: 'Pick',\n          eta: (0, _moment.default)('12:30 PM', 'mm:hh A'),\n          mrt: 0,\n          address: '2222 Ave.',\n          city: 'Bronx',\n          pick: '12:30 PM',\n          drop: ''\n        }]\n      },\n      after: {\n        delta: 330000,\n        trips: [{\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Pick',\n          eta: (0, _moment.default)('09:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '12 Ave.',\n          city: 'Bronx',\n          pick: '09:50 AM',\n          drop: ''\n        }, {\n          id: '182345467',\n          action: 'added',\n          lastName: 'Jackson',\n          stop: 'Drop',\n          eta: (0, _moment.default)('11:30 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '111 Dr.',\n          city: 'Bronx',\n          pick: '',\n          drop: '11:30 AM'\n        }, {\n          id: '34698',\n          lastName: 'Zach',\n          stop: 'Pick',\n          eta: (0, _moment.default)('12:50 AM', 'hh:mm A'),\n          mrt: 0,\n          address: '2222 Ave.',\n          city: 'Bronx',\n          pick: '12:50 AM',\n          drop: ''\n        }]\n      }\n    }\n  };\n  _exports.solutionImpactDataStub = solutionImpactDataStub;\n});","define(\"adept-iq/pods/components/side-drawer/trip-transfer/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3ndB495Q\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"t\\\",\\\"body\\\",\\\"t\\\",\\\"body\\\",\\\"route\\\",\\\"provider\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,[[\\\"class\\\"],[\\\"trip-transfer-side-drawer\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[0,\\\"  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L6:C4) \\\"],null]],[[\\\"title\\\",\\\"componentName\\\",\\\"canShrink\\\",\\\"onShrinkClick\\\",\\\"canRefresh\\\",\\\"onRefreshClick\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"componentName\\\"]],[23,[\\\"canShrink\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onShrinkClick\\\"],null],[27,\\\"not\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshClick\\\"],null],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSaveClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-layout \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L18:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L19:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Trip Information\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-scroll-container\\\"],[11,\\\"style\\\",\\\"overflow: hidden;\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form compact\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"tripId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"driver\\\",\\\"driverId\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"isStopPickTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"rider\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver Name:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"driver\\\",\\\"fullName\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[21,\\\"isStopDropTime\\\"],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Trip Status:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"otpLabel\\\"]],false],[0,\\\" \\\"],[1,[23,[\\\"trip\\\",\\\"otpValueWithSign\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Promise Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"trip\\\",\\\"formattedPromiseTime\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"currentRoute\\\",\\\"name\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Vehicle Status:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"\\\"],[9],[1,[27,\\\"capitalize\\\",[[23,[\\\"currentRoute\\\",\\\"dispatchRoute\\\",\\\"assignedVehicle\\\",\\\"status\\\"]]],null],false],[10],[10],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Request Time:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"moment-format\\\",[[23,[\\\"trip\\\",\\\"booking\\\",\\\"firstLeg\\\",\\\"requestTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"th\\\"],[9],[0,\\\"Anchor:\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"if\\\",[[23,[\\\"trip\\\",\\\"anchorStop\\\",\\\"isPick\\\"]],\\\"pick\\\",\\\"drop\\\"],null],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"hasPermissionOverride\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L64:C9) \\\"],null]],[[\\\"isCollapsible\\\"],[false]],{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"label\\\"],[11,\\\"style\\\",\\\"width: fit-content;\\\"],[9],[7,\\\"input\\\"],[12,\\\"checked\\\",[21,\\\"override\\\"]],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isManualSchedulingMode\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"override\\\"]]],null]],[[\\\"value\\\"],[\\\"target.checked\\\"]]]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" Override\\\"],[10],[0,\\\"\\\\n\\\\n        \\\"],[7,\\\"p\\\"],[9],[0,\\\"Manually select a route to transfer the trip. Route will be added to \\\\\\\"Solution Preview\\\\\\\"\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"overrideErrorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"overrideErrorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-selector half\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label1\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideProviderOptions\\\"]],[23,[\\\"isNotOverride\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedProvider\\\"]],\\\"Select provider\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeProvider\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,7,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label2\\\"],[9],[0,\\\"Route Name\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown ml-4\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"options\\\",\\\"disabled\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"placeholder\\\",\\\"onchange\\\"],[[23,[\\\"overrideRouteOptions\\\"]],[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],\\\"name\\\",true,[23,[\\\"overrideSelectedRoute\\\"]],\\\"Select Route\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeRoute\\\"],null]]],{\\\"statements\\\":[[0,\\\"              \\\"],[1,[22,6,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label3\\\"],[9],[0,\\\"Pickup Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"trip-transfer-pickup-time\\\",[23,[\\\"pickTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangePickTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"h5\\\"],[11,\\\"class\\\",\\\"override-label4\\\"],[9],[0,\\\"Dropoff Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown\\\"],[9],[0,\\\"\\\\n            \\\"],[1,[27,\\\"form-components/text-mask\\\",null,[[\\\"class\\\",\\\"value\\\",\\\"placeholder\\\",\\\"mask\\\",\\\"disabled\\\",\\\"onChange\\\"],[\\\"trip-transfer-dropoff-time\\\",[23,[\\\"dropTime\\\"]],[23,[\\\"TIME_PLACEHOLDER\\\"]],\\\"99:99\\\",[23,[\\\"canDisableOverrideRouteSectionFields\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeDropTime\\\"],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"    \\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L129:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Solution Preview\\\",true]],{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"solution-preview-note\\\"],[9],[0,\\\"The lower the OTP value the better the solution.\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"provider-solution-preview\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Provider\\\"],[10],[0,\\\" \\\\n        \\\"],[1,[27,\\\"form-components/multi-select-dropdown\\\",null,[[\\\"enumList\\\",\\\"allSelectedTitle\\\",\\\"multipleSelectedTitle\\\",\\\"isObjectDisabled\\\"],[[23,[\\\"providersList\\\"]],\\\"All Providers\\\",\\\"Multiple\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isManualSchedulingMode\\\"]]],null]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]],[23,[\\\"isManualSchedulingMode\\\"]]],null]],[11,\\\"class\\\",\\\"provider-solution-button\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Search \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"refreshProviderAutoTransfer\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"solution-preview-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionPreviewTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,10]],{\\\"statements\\\":[[0,\\\"\\\\n          \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L154:C12) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnSolutionClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,4,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L161:C13) \\\"],null]],[[\\\"canSelect\\\",\\\"tableActions\\\",\\\"multiSelect\\\",\\\"onRowClick\\\"],[false,[27,\\\"hash\\\",null,[[\\\"radioButtonClick\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]]],false,[27,\\\"action\\\",[[22,0,[]],\\\"onSolutionRowClick\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isSolutionsTaskRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L169:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n                \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionPreviewTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,5,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L175:C17) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"                No solutions found.\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[4]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L184:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"View Impact\\\",true]],{\\\"statements\\\":[[0,\\\"     \\\"],[7,\\\"p\\\"],[9],[0,\\\"Alternate between before and after to see how trip transfer affects the route\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"nav\\\"],[11,\\\"class\\\",\\\"trip-transfer-tabs\\\"],[11,\\\"style\\\",\\\"padding: 0\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"selectedSolutionId\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Route \\\"],[1,[23,[\\\"selectedSolutionDispatchRoute\\\",\\\"route\\\",\\\"name\\\"]],false],[3,\\\"action\\\",[[22,0,[]],\\\"selectSolutionRouteTab\\\"]],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"isSolutionsTaskRunning\\\"]],[12,\\\"class\\\",[28,[\\\"tab \\\",[27,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"activeTabRouteId\\\"]],[23,[\\\"currentDispatchRoute\\\",\\\"route\\\",\\\"id\\\"]]],null],\\\"active\\\"],null]]]],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Previous Route\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"selectCurrentRouteTab\\\"]],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-transfer-impact-bar\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"toggle-switch\\\",null,[[\\\"toggleProperty\\\",\\\"offValue\\\",\\\"offLabel\\\",\\\"onValue\\\",\\\"onLabel\\\"],[[23,[\\\"selectedImpactPeriod\\\"]],\\\"before\\\",\\\"Before\\\",\\\"after\\\",\\\"After\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"view-impact-table-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"light-table\\\",[[23,[\\\"solutionImpactTable\\\"]]],[[\\\"responsive\\\",\\\"occlusion\\\",\\\"estimatedRowHeight\\\"],[false,true,160]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"head\\\"]],\\\"expected `t.head` to be a contextual component but found a string. Did you mean `(component t.head)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L207:C10) \\\"],null]],[[\\\"onColumnClick\\\",\\\"iconAscending\\\",\\\"iconDescending\\\",\\\"fixed\\\",\\\"resizeOnDrag\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onColumnImpactClick\\\"],null],\\\"fa fa-sort-asc\\\",\\\"fa fa-sort-desc\\\",true,false]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,2,[\\\"body\\\"]],\\\"expected `t.body` to be a contextual component but found a string. Did you mean `(component t.body)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L214:C11) \\\"],null]],[[\\\"canSelect\\\",\\\"multiSelect\\\"],[false,false]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isRunning\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"loader\\\"]],\\\"expected `body.loader` to be a contextual component but found a string. Did you mean `(component body.loader)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L220:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"fetchImpactTask\\\",\\\"isError\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L226:C15) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-danger mt-2 mb-2\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[23,[\\\"fetchVehiclesTask\\\",\\\"last\\\",\\\"error\\\"]],false],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"solutionImpactTable\\\",\\\"isEmpty\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,3,[\\\"no-data\\\"]],\\\"expected `body.no-data` to be a contextual component but found a string. Did you mean `(component body.no-data)`? ('adept-iq/pods/components/side-drawer/trip-transfer/template.hbs' @ L232:C15) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"selectedImpactView\\\"]],\\\"current\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                Impact to the previous route is not available.\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                No Solutions Found.\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"          \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[2]},null],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"The trip transfer will result in the late route \\\"],[7,\\\"strong\\\"],[9],[1,[21,\\\"currentRouteImpactScoreType\\\"],false],[10],[0,\\\" \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[0,\\\" and the new route \\\"],[1,[21,\\\"selectedDestinationRouteName\\\"],false],[0,\\\" \\\"],[1,[21,\\\"selectedGainType\\\"],false],[0,\\\" a total of \\\"],[1,[27,\\\"moment-duration\\\",[[23,[\\\"impactScore\\\"]],\\\"minutes\\\"],null],false],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/trip-transfer/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-break-stop/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/config/environment\", \"adept-iq/pods/components/side-drawer/unperform-break-stop/config\", \"adept-iq/models/route-break\", \"adept-iq/mixins/version-check\"], function (_exports, _emberConcurrency, _moment, _environment, _config, _routeBreak, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly,\n    equal\n  } = Ember.computed;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['perform-stop-drawer'],\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    fields: _config.default.fields,\n    timeFormat: _environment.default.dateTimeFormat.timeFlatPickr,\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // passed in by side-drawer-container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    errorText: null,\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n    },\n\n    stopPoint: readOnly('stackFrame.options.stopPoint'),\n    dispatchRouteVersionSnapshot: readOnly('stackFrame.options.dispatchRouteVersionSnapshot'),\n    driverBreak: readOnly('stopPoint.routeBreak'),\n    title: readOnly('stackFrame.options.title'),\n    trip: readOnly('stopPoint.trip'),\n    route: readOnly('stopPoint.route'),\n    rider: readOnly('trip.rider'),\n    address: readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    routeVehicleDriver: readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    driver: readOnly('routeVehicleDriver.driver'),\n    isArrived: equal('stopPoint.computedStatus', _routeBreak.ON_BREAK_STOP_STATUS),\n    isPerformed: equal('stopPoint.computedStatus', _routeBreak.OFF_BREAK_STOP_STATUS),\n    estimatedStart: Ember.computed('stopPoint.actualArriveTime', function () {\n      const actualArriveTime = this.get('stopPoint.actualArriveTime');\n\n      if (actualArriveTime) {\n        return (0, _moment.default)(actualArriveTime).format('hh:mm A');\n      }\n\n      return '';\n    }),\n    estimatedEnd: Ember.computed('stopPoint.actualDepartTime', function () {\n      const actualDepartTime = this.get('stopPoint.actualDepartTime');\n\n      if (actualDepartTime) {\n        return (0, _moment.default)(actualDepartTime).format('hh:mm A');\n      }\n\n      return '';\n    }),\n    canSave: Ember.computed('arrive', 'depart', function () {\n      return this.get('arrive') || this.get('depart');\n    }),\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      // TODO: should this be a no-op?\n      const isArrived = this.get('isArrived');\n      const isPerformed = this.get('isPerformed');\n\n      if (isArrived) {\n        this.set('arrive', isArrived);\n      } else if (isPerformed) {\n        this.set('arrive', isPerformed);\n        this.set('depart', isPerformed);\n      }\n\n      yield (0, _emberConcurrency.timeout)(300);\n    }).keepLatest(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const stopPoint = this.get('stopPoint');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null; // if user checks the arrive then it also means\n      // that the depart is also checked. Send accept\n      // to remove both arrive and depart in AVLM\n\n      if (this.get('arrive')) {\n        avlmVersion = yield routeExecEventAdapter.createAcceptBreakEvent(stopPoint, avlmVersion);\n      } else if (this.get('depart')) {\n        avlmVersion = yield routeExecEventAdapter.createAcceptBreakEvent(stopPoint, avlmVersion);\n        let arriveTimestamp = stopPoint.get('actualArriveTime');\n\n        if (Ember.isNone(arriveTimestamp)) {\n          arriveTimestamp = stopPoint.get('actualArriveTime');\n        }\n\n        stopPoint.set('arriveTimestamp', arriveTimestamp); // sending another arrive event will unperform the Off break\n        // for this stop\n\n        avlmVersion = yield routeExecEventAdapter.createStartBreakEvent(stopPoint, avlmVersion);\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n    actions: {\n      noop() {\n        return false;\n      },\n\n      onRefreshButtonClick() {\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          // Check dispatchRoute version first\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction(); // Reset error text\n\n          this.set('errorText');\n          const title = 'Unperform Break';\n          this.get('tooltip').pushConfirmation({\n            tip: 'Unperform Break?',\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('notifications').success('Unperformed break successfully');\n              }).catch(response => {\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                let messageText = 'Unperformed break failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('Execution version is different')) {\n                    messageText = `UNPERFORM BREAK FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                this.get('tooltip').reset();\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              this.get('tooltip').reset();\n              return;\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-break-stop/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    fields: {\n      id: 'location',\n      type: 'locations',\n      label: '',\n      valuePath: 'place',\n      modelName: 'place',\n      addressType: 'originlocations',\n      isMultiType: true,\n      readonlyCell: true,\n      extra: {\n        aliasPath: 'address.content.alias',\n        notesPath: 'address.content.notes',\n        displayPath: 'address.content.address',\n        premisePath: 'address.content.premise',\n        streetNumberPath: 'address.content.streetNumber',\n        streetNamePath: 'address.content.streetName',\n        localityPath: 'address.content.locality',\n        regionPath: 'address.content.region',\n        subRegionPath: 'address.content.county',\n        postalCodePath: 'address.content.postalCode',\n        countryPath: 'address.content.country',\n        freeformAddressPath: 'address.content.freeformAddress',\n        tomtomFormattedAddressPath: 'address.content.tomtomFormattedAddress',\n        useOptionRecord: true,\n        streetAddressPath: 'address.content.streetAddress',\n        locationsPath: 'address.locations.content.firstObject.latlng'\n      }\n    }\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-break-stop/locations/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/zone-validation\"], function (_exports, _emberConcurrency, _zoneValidation) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  var _default = Ember.Component.extend({\n    classNames: ['locations-input'],\n    editModal: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    map: Ember.inject.service(),\n    value: null,\n    addressOptions: null,\n    notesReadOnly: false,\n    addressType: null,\n    address: null,\n    addressLabel: Ember.computed.readOnly('field.label'),\n    aliasPath: Ember.computed.readOnly('extra.aliasPath'),\n    streetNumberPath: Ember.computed.readOnly('extra.streetNumberPath'),\n    streetAddressPath: Ember.computed.readOnly('extra.streetAddressPath'),\n    tomtomFormattedAddressPath: Ember.computed.readOnly('extra.tomtomFormattedAddressPath'),\n    premisePath: Ember.computed.readOnly('extra.premisePath'),\n    streetNamePath: Ember.computed.readOnly('extra.streetNamePath'),\n    localityPath: Ember.computed.readOnly('extra.localityPath'),\n    regionPath: Ember.computed.readOnly('extra.regionPath'),\n    subRegionPath: Ember.computed.readOnly('extra.subRegionPath'),\n    postalCodePath: Ember.computed.readOnly('extra.postalCodePath'),\n    countryPath: Ember.computed.readOnly('extra.countryPath'),\n    notesPath: Ember.computed.readOnly('extra.notesPath'),\n    freeformAddressPath: Ember.computed.readOnly('extra.freeformAddressPath'),\n    defaultOptionsPath: Ember.computed.readOnly('extra.defaultOptionsPath'),\n    useOptionRecord: Ember.computed.readOnly('extra.useOptionRecord'),\n    useRecordWithId: Ember.computed.readOnly('extra.useRecordWithId'),\n    locationsPath: 'latlng',\n    addressRecord: null,\n    selected: null,\n\n    geocodeAddressChange() {\n      const record = this.get('addressRecord');\n      const address = this.get('geocode.address');\n\n      if (!Ember.isEmpty(address)) {\n        this.convertTTAddressToModel(record, address).then(() => {\n          this.disableAddressSearchOnMap(record, record.get('type'));\n        });\n      }\n    },\n\n    saveReverseGeocodeAddress() {\n      this.geocodeAddressChange();\n      this.removeObserver('geocode.address', this.saveReverseGeocodeAddress);\n    },\n\n    validateAddresses() {\n      const record = this.get('address');\n      this.set('editModal.errors', []);\n\n      if (record.get('location.content.lat') === 0 || record.get('location.content.lng') === 0) {\n        this.get('editModal.errors').pushObject('Address does not have lat/lng. Please select position on the map.');\n      }\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const place = this.get('value');\n      this.set('address', place);\n      this.set('addressOptions', []);\n      this.get('addressOptions').push(place);\n    },\n\n    willDestroyElement() {\n      this.get('geocode').deactivateGeocode();\n\n      this._super(...arguments);\n    },\n\n    addressSearchResults(results) {\n      this.set('addressOptions', results);\n    },\n\n    searchAddress: (0, _emberConcurrency.task)(function* (term) {\n      const result = yield this.get('geocode').geoCodingApi(term);\n      this.addressSearchResults(result);\n    }),\n    convertTTAddressToModel: function (record, ttAddress) {\n      const useOptionRecord = this.get('useOptionRecord');\n      const geocode = this.get('geocode') || [];\n\n      if (Ember.isNone(ttAddress.id)) {\n        const valuePath = this.get('streetNumberPath');\n        const options = {\n          record,\n          valuePath,\n          useOptionRecord\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(cleanFieldString(ttAddress.address.streetNumber), options);\n        options.valuePath = this.get('premisePath');\n        this.get('onChange')(cleanFieldString(ttAddress.premise), options);\n        options.valuePath = this.get('streetNamePath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n        options.valuePath = this.get('localityPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.municipality), options);\n        options.valuePath = this.get('regionPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.countrySubdivisionName), options);\n        options.valuePath = this.get('subRegionPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.countrySecondarySubdivision), options);\n        options.valuePath = this.get('postalCodePath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.postalCode), options);\n        options.valuePath = this.get('countryPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.countryCode), options);\n        options.valuePath = this.get('streetAddressPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.streetName), options);\n\n        if (this.get('freeformAddressPath')) {\n          options.valuePath = this.get('freeformAddressPath');\n          this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n        }\n\n        record.set('address.content.locations.firstObject.lat', ttAddress.position.lat);\n        record.set('address.content.locations.firstObject.lng', ttAddress.position.lon);\n        record.set('address.content.locations.firstObject.geoNode', ttAddress.position.geoNode);\n        return geocode.calculateZone(ttAddress.position.lat, ttAddress.position.lon).then(result => {\n          if (!Ember.isNone(result)) {\n            record.set('address.content.locations.firstObject.geoNode', result.geonode);\n          } else {\n            this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n          }\n\n          geocode.activateGeocode(false, record, 'pick');\n          this.validateAddresses();\n          this.set('addressOptions', ttAddress);\n        });\n      }\n\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath,\n        useOptionRecord\n      };\n      this.set('record.isForceDirty', true);\n      this.get('onChange')(cleanFieldString(ttAddress.streetNumber), options);\n      options.valuePath = this.get('premisePath');\n      this.get('onChange')(cleanFieldString(ttAddress.premise), options);\n      options.valuePath = this.get('streetNamePath');\n      this.get('onChange')(cleanFieldString(ttAddress.streetAddress), options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')(cleanFieldString(ttAddress.locality), options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')(cleanFieldString(ttAddress.countrySubdivisionName), options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')(cleanFieldString(ttAddress.countrySecondarySubdivision), options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')(cleanFieldString(ttAddress.postalCode), options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')(cleanFieldString(ttAddress.countryCode), options);\n\n      if (this.get('freeformAddressPath')) {\n        options.valuePath = this.get('freeformAddressPath');\n        this.get('onChange')(cleanFieldString(ttAddress.address.freeformAddress), options);\n      }\n\n      record.set('address.content.locations.firstObject.lat', ttAddress.locations.firstObject.lat);\n      record.set('address.content.locations.firstObject.lng', ttAddress.locations.firstObject.lng);\n      record.set('address.content.locations.firstObject.geoNode', ttAddress.locations.firstObject.geoNode);\n      return geocode.calculateZone(ttAddress.locations.firstObject.lat, ttAddress.locations.firstObject.lng).then(result => {\n        if (!Ember.isNone(result)) {\n          record.set('address.content.locations.firstObject.geoNode', result.geonode);\n        } else {\n          this.get('notifications').warning(`CAN'T GET ZONE FOR ${ttAddress.address.freeformAddress}`);\n        }\n\n        geocode.activateGeocode(false, record, 'pick');\n        this.validateAddresses();\n        this.set('addressOptions', ttAddress);\n      });\n    },\n    clearAddressModel: function (record) {\n      const valuePath = this.get('streetNumberPath');\n      const options = {\n        record,\n        valuePath\n      };\n      this.get('onChange')('', options);\n      options.valuePath = this.get('streetNamePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('localityPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('regionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('subRegionPath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('postalCodePath');\n      this.get('onChange')('', options);\n      options.valuePath = this.get('countryPath');\n      this.get('onChange')('', options);\n      record.set('lat', 0);\n      record.set('lng', 0);\n    },\n\n    enableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').addClass('custom-cursor');\n      this.get('geocode').activateGeocode(true, record, 'pick');\n      this.set('addressRecord', record);\n      this.addObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    disableAddressSearchOnMap(record) {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n      this.get('geocode').activateGeocode(false, record, 'pick');\n      this.set('addressRecord', null);\n      this.removeObserver('geocode.address', this.geocodeAddressChange);\n    },\n\n    actions: {\n      onInput(record, valuePath, value) {\n        const options = {\n          record,\n          valuePath\n        };\n        this.set('record.isForceDirty', true);\n        this.get('onChange')(value, options);\n      },\n\n      onAddressSelected(record, valuePath, value) {\n        const boundingBox = this.get('map.boundingBox');\n\n        if (this.get('useRecordWithId') && !Ember.isNone(value.get('id'))) {\n          this.set('record.place', value);\n          this.set('addresses', [value]);\n        } else {\n          if (!(0, _zoneValidation.insideZone)([value.position.lat, value.position.lon], boundingBox)) {\n            this.get('notifications').warning('Invalid Zone');\n            return;\n          }\n\n          this.convertTTAddressToModel(record, value).then(() => {\n            // reposition flag\n            this.get('geocode').saveNewGeocode(record.get('address.position'), value);\n          });\n        }\n      },\n\n      onPickOnMap(record) {\n        const activeGeocode = this.get('geocode.activeGeocode');\n\n        if (activeGeocode) {\n          this.disableAddressSearchOnMap(record, 'pick');\n        } else {\n          this.enableAddressSearchOnMap(record, 'pick');\n        }\n      },\n\n      handleKeydown(record, valuePath, dropdown, e) {\n        if (e.keyCode !== 13) {\n          return;\n        }\n\n        const text = e.target.value;\n        const options = {\n          record,\n          valuePath: 'streetAddress'\n        }; // address has been forced without geocodes\n        // this.set('record.isForceDirty', true);\n\n        this.clearAddressModel(record); // this.set('record.isForceDirty', true);\n\n        this.get('onChange')(text, options);\n        this.set('addressRecord', record);\n        this.validateAddresses();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-break-stop/locations/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"jaBg7ALD\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell edit\\\"],[11,\\\"data-test-address-field\\\",\\\"\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"class\\\",\\\"options\\\",\\\"disabled\\\",\\\"search\\\",\\\"selected\\\",\\\"onkeydown\\\",\\\"onchange\\\"],[\\\"data-test-power-select\\\",[23,[\\\"addressOptions\\\"]],true,[27,\\\"perform\\\",[[23,[\\\"searchAddress\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"address\\\"]],[23,[\\\"tomtomFormattedAddressPath\\\"]]],null]],null],[27,\\\"action\\\",[[22,0,[]],\\\"handleKeydown\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onAddressSelected\\\",[23,[\\\"address\\\"]],[23,[\\\"addressType\\\"]]],null]],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[22,1,[\\\"address\\\",\\\"freeformAddress\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[10],[0,\\\"\\\\n\\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"cell button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onPickOnMap\\\",[23,[\\\"address\\\"]]],null]],[11,\\\"disabled\\\",\\\"true\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-map-marker\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/unperform-break-stop/locations/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-break-stop/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"swtjsdRt\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/unperform-break-stop/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"canRefresh\\\",\\\"canSave\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],false,[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/unperform-break-stop/template.hbs' @ L14:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Break ID: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"id\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"perform-stop-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/unperform-break-stop/template.hbs' @ L19:C5) \\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-break-stop/template.hbs' @ L24:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Detail\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driver\\\",\\\"driverId\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Type\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"routeBreak\\\",\\\"breakType\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-break-stop/template.hbs' @ L45:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Unperformed break\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Location\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n          \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"side-drawer/unperform-break-stop/\\\",[23,[\\\"fields\\\",\\\"type\\\"]]],null]],[[\\\"record\\\",\\\"addressType\\\",\\\"display\\\",\\\"placeholder\\\",\\\"value\\\",\\\"valuePath\\\",\\\"disabled\\\",\\\"format\\\",\\\"extra\\\",\\\"readonlyCell\\\"],[[27,\\\"readonly\\\",[[23,[\\\"driverBreak\\\"]]],null],[27,\\\"get\\\",[[23,[\\\"fields\\\",\\\"addressType\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"displayPath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"placeholder\\\"]]],null],[27,\\\"readonly\\\",[[27,\\\"get\\\",[[23,[\\\"driverBreak\\\"]],[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"valuePath\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"isLocationsDisabled\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"format\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"extra\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"fields\\\",\\\"readonlyCell\\\"]]],null]]]],false],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"checked\\\"],[\\\"arrive\\\",\\\"arrive\\\",\\\"checkbox\\\",[23,[\\\"arrive\\\"]]]]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"On Break\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Performed \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedArrivePerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Break Start \\\"],[10],[0,\\\"\\\\n          \\\"],[2,\\\" TODO: confirm if this is appropriate to use as a planned arrival time \\\"],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"routeBreak\\\",\\\"estimatedStart\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Break Start \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"estimatedStart\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"depart\\\",\\\"depart\\\",\\\"checkbox\\\",[23,[\\\"depart\\\"]],true]]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Off Break\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Performed \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedDepartPerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Break End \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"routeBreak\\\",\\\"estimatedEnd\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Break End \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[21,\\\"estimatedEnd\\\"]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/unperform-break-stop/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-drop-stop/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/environment\", \"adept-iq/models/stop-point\", \"adept-iq/mixins/version-check\"], function (_exports, _emberConcurrency, _environment, _stopPoint, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['perform-stop-drawer'],\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    dateTimeFormat: _environment.default.dateTimeFormat,\n    // passed in by side-drawer-container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    errorText: null,\n    unperformTitle: 'Unperform',\n    unperformMessage: 'Unperforming Stop will NOT change Appointment Time.',\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n    },\n\n    stopPoint: Ember.computed.readOnly('stackFrame.options.stopPoint'),\n    dispatchRouteVersionSnapshot: Ember.computed.readOnly('stackFrame.options.dispatchRouteVersionSnapshot'),\n    title: Ember.computed.readOnly('stackFrame.options.title'),\n    trip: Ember.computed.readOnly('stopPoint.trip'),\n    route: Ember.computed.readOnly('stopPoint.route'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    address: Ember.computed.readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    routeVehicleDriver: Ember.computed.readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    isArrived: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.ARRIVE_STOP_STATUS),\n    isPerformed: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.PERFORMED_STOP_STATUS),\n    canSave: Ember.computed('arrive', 'depart', function () {\n      return this.get('arrive') || this.get('depart');\n    }),\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      // TODO: should this be a no-op?\n      const isArrived = this.get('isArrived');\n      const isPerformed = this.get('isPerformed');\n\n      if (isArrived) {\n        this.set('arrive', isArrived);\n      } else if (isPerformed) {\n        this.set('arrive', isPerformed);\n        this.set('depart', isPerformed);\n      }\n\n      yield (0, _emberConcurrency.timeout)(300);\n    }).keepLatest(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const stopPoint = this.get('stopPoint');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null; // if user checks the arrive then it also means\n      // that the depart is also checked. Send accept\n      // to remove both arrive and depart in AVLM\n\n      if (this.get('arrive')) {\n        avlmVersion = yield routeExecEventAdapter.createAcceptEvent(stopPoint, avlmVersion);\n      } else if (this.get('depart')) {\n        avlmVersion = yield routeExecEventAdapter.createAcceptEvent(stopPoint, avlmVersion);\n        let arriveTimestamp = stopPoint.get('actualArriveTime');\n\n        if (Ember.isNone(arriveTimestamp)) {\n          arriveTimestamp = stopPoint.get('actualDepartTime');\n        }\n\n        stopPoint.set('arriveTimestamp', arriveTimestamp); // sending another arrive event will unperform the depart\n        // for this stop\n\n        avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion);\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n    actions: {\n      noop() {\n        return false;\n      },\n\n      onRefreshButtonClick() {\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          // Check dispatchRoute version first\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction(); // Reset error text\n\n          this.set('errorText');\n          const title = 'Unperform Drop Stop';\n          this.get('tooltip').pushConfirmation({\n            tip: 'Unperform Drop stop?',\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('notifications').success('Unperformed stop successful');\n              }).catch(response => {\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                let messageText = 'Unperformed stop failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('Execution version is different')) {\n                    messageText = `UNPERFORM STOP FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                this.get('tooltip').reset();\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              this.get('tooltip').reset();\n              return;\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-drop-stop/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"qMRzq9Pg\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"riderPhoneNumbers\\\",\\\"riderPhoneNumber\\\",\\\"i\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/unperform-drop-stop/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/unperform-drop-stop/template.hbs' @ L13:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Trip: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"perform-stop-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/unperform-drop-stop/template.hbs' @ L18:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unperform-title\\\"],[9],[1,[21,\\\"unperformTitle\\\"],false],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unperform-message\\\"],[9],[1,[21,\\\"unperformMessage\\\"],false],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-drop-stop/template.hbs' @ L25:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Drop Stop\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driver\\\",\\\"driverId\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"rider\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"with\\\",[[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"rider\\\",\\\"riderPhoneNumbers\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,2,[]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"\\\\n                Phone Number\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[22,2,[\\\"length\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                  (\\\"],[1,[27,\\\"add\\\",[[22,4,[]],1],null],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,3,[\\\"formattedPhoneNumber\\\"]]],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Drop Location\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"address\\\",\\\"fullAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"notes\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-drop-stop/template.hbs' @ L75:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Unperformed\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"arrive\\\",\\\"arrive\\\",\\\"checkbox\\\",[23,[\\\"arrive\\\"]],[27,\\\"not\\\",[[23,[\\\"depart\\\"]]],null]]]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Arrive\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Performed \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedArrivePerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Arrival Time \\\"],[10],[0,\\\"\\\\n          \\\"],[2,\\\" TODO: confirm if this is appropriate to use as a planned arrival time \\\"],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"tripStop\\\",\\\"plannedEta\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Arrival Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"actualArriveTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"depart\\\",\\\"depart\\\",\\\"checkbox\\\",[23,[\\\"depart\\\"]],[23,[\\\"arrive\\\"]]]]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Depart\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Performed \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedDepartPerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Drop Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"departTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Drop Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"actualDepartTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/unperform-drop-stop/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-no-show/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/mixins/version-check\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _unwrapProxy, _versionCheck, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly\n  } = Ember.computed;\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['perform-stop-drawer'],\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    // passed in by side-drawer-container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    noShowTime: null,\n    noShowNotes: '',\n    errorText: null,\n    unperformTitle: 'Unperform No Show',\n    unperformMessage: 'Unperforming Stop will NOT change Promise Time.',\n    dateTimeFormat: _environment.default.dateTimeFormat,\n\n    init() {\n      this._super(...arguments);\n\n      const noShowTime = this.get('stopPoint.actualDepartTime');\n      this.set('noShowTime', noShowTime);\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n    },\n\n    stopPoint: readOnly('stackFrame.options.stopPoint'),\n    dispatchRouteVersionSnapshot: readOnly('stackFrame.options.dispatchRouteVersionSnapshot'),\n    title: readOnly('stackFrame.options.title'),\n    trip: readOnly('stopPoint.trip'),\n    route: readOnly('stopPoint.route'),\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const noShowTime = this.get('stopPoint.actualDepartTime');\n      this.set('noShowTime', noShowTime);\n      this.set('noShowNotes', '');\n      yield (0, _emberConcurrency.timeout)(30);\n    }).keepLatest(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const stopPoint = (0, _unwrapProxy.unwrapProxy)(this.get('stopPoint'));\n      const trip = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('trip'));\n      const otherStopPoint = (0, _unwrapProxy.unwrapProxy)(trip.get('dropStopPoint'));\n      const noShowTime = this.get('noShowTime');\n      const noShowNotes = this.get('noShowNotes');\n      const arriveTimestamp = stopPoint.get('actualArriveTime');\n      const routeExecEventAdapter = store.adapterFor('route-exec-event'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null;\n\n      if (stopPoint.get('isNoShow')) {\n        const tripNoShowAdapter = store.adapterFor('trip-noshow');\n        avlmVersion = yield routeExecEventAdapter.createUndoNoShowEvent(stopPoint, noShowTime, noShowNotes, avlmVersion);\n\n        if (otherStopPoint.get('isPerformed') || otherStopPoint.get('isNoShow')) {\n          avlmVersion = yield routeExecEventAdapter.createUndoNoShowEvent(otherStopPoint, noShowTime, noShowNotes, avlmVersion);\n        } // if this stop point have been arrived before then change state back to arrive\n\n\n        if (arriveTimestamp) {\n          stopPoint.set('arriveTimestamp', arriveTimestamp);\n          avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion);\n        }\n\n        yield tripNoShowAdapter.deleteTripNoShow(trip);\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n    actions: {\n      noop() {\n        return false;\n      },\n\n      onRefreshButtonClick() {\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          // Check dispatchRoute version first\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction(); // Reset error text\n\n          this.set('errorText');\n          const tip = 'Unperforming No Show';\n          const message = 'Unperformed No Show';\n          const title = 'Unperform';\n          this.get('tooltip').pushConfirmation({\n            tip: tip,\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('notifications').success(`${message} successfully`);\n              }).catch(response => {\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                let messageText = 'Unperformed noshow failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('Execution version is different')) {\n                    messageText = `UNPERFORM NOSHOW FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                this.get('tooltip').reset();\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              this.get('tooltip').reset();\n              return;\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-no-show/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"6lfj0WVY\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/unperform-no-show/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/unperform-no-show/template.hbs' @ L12:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Trip: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"perform-stop-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/unperform-no-show/template.hbs' @ L17:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unperform-title\\\"],[9],[1,[21,\\\"unperformTitle\\\"],false],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unperform-message\\\"],[9],[1,[21,\\\"unperformMessage\\\"],false],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-no-show/template.hbs' @ L25:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"No Show\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Performed\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedPerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Time\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"noShowTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateTimeMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"value\\\"],[\\\"text\\\",[23,[\\\"noShowNotes\\\"]]]]],false],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"g-side-drawer-summary\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h5\\\"],[9],[0,\\\"Summary\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Unperforming a no show will assign the trip back to its route.\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/unperform-no-show/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-pick-stop/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/models/stop-point\", \"adept-iq/mixins/version-check\"], function (_exports, _emberConcurrency, _environment, _unwrapProxy, _stopPoint, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const paymentTypeOptions = ['Cash', 'Credit Card', 'Smart Card'];\n  const TravelNeedItem = Ember.Object.extend({\n    type: null,\n    count: null\n  }); // \"service animal\" is the one client travel need not shown in dropdowns\n\n  const dropdownExemptedTravelNeedTypeNames = ['serviceAnimal'];\n\n  var _default = Ember.Component.extend(_versionCheck.default, {\n    classNames: ['perform-stop-drawer'],\n    activeContext: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    timeFormat: _environment.default.dateTimeFormat.timeFlatPickr,\n    // passed in by side-drawer-container component\n    onShrinkClick: null,\n    onCloseClick: null,\n    pcaCount: null,\n    serviceAnimalCount: null,\n    companionCount: null,\n    travelNeedItems: null,\n    _travelNeedTypesQuery: null,\n    errorText: null,\n    unperformTitle: 'Unperform',\n    unperformMessage: 'Unperforming Stop will NOT change Promise Time.',\n    canSave: Ember.computed('arrive', 'depart', function () {\n      return this.get('arrive') || this.get('depart');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      const stopPoint = this.get('stopPoint'); // only need to do this query once\n\n      const travelNeedTypesQuery = this.get('store').findAll('travel-need-type');\n      this.set('amount', stopPoint.get('trip.fare'));\n      this.set('selectedPaymentType', stopPoint.get('trip.paymentType'));\n      this.set('_travelNeedTypesQuery', travelNeedTypesQuery);\n    },\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      this.get('refreshTask').perform();\n    },\n\n    stopPoint: Ember.computed.readOnly('stackFrame.options.stopPoint'),\n    dispatchRouteVersionSnapshot: Ember.computed.readOnly('stackFrame.options.dispatchRouteVersionSnapshot'),\n    title: Ember.computed.readOnly('stackFrame.options.title'),\n    trip: Ember.computed.readOnly('stopPoint.trip'),\n    route: Ember.computed.readOnly('stopPoint.route'),\n    rider: Ember.computed.readOnly('trip.rider'),\n    address: Ember.computed.readOnly('stopPoint.tripStop.segmentStop.place.address'),\n    routeVehicleDriver: Ember.computed.readOnly('route.dispatchRoute.latestRouteVehicleDriver'),\n    driver: Ember.computed.readOnly('routeVehicleDriver.driver'),\n    isArrived: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.ARRIVE_STOP_STATUS),\n    isPerformed: Ember.computed.equal('stopPoint.computedStatus', _stopPoint.PERFORMED_STOP_STATUS),\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      const isArrived = this.get('isArrived');\n      const isPerformed = this.get('isPerformed');\n\n      if (isArrived) {\n        this.set('arrive', isArrived);\n      } else if (isPerformed) {\n        this.set('arrive', isPerformed);\n        this.set('depart', isPerformed);\n      }\n\n      const travelNeedTypes = yield this.get('_travelNeedTypesQuery');\n      const stopPoint = this.get('stopPoint'); // \"Travel Needs\" panel\n\n      const travelNeedOptions = travelNeedTypes.reduce((arr, travelNeedType) => {\n        const name = travelNeedType.get('name');\n        const displayName = travelNeedType.get('displayName'); // e.g. don't include \"serviceAnimal\" since it has its own UI\n\n        if (dropdownExemptedTravelNeedTypeNames.includes(name)) return arr;\n        arr.push({\n          type: name,\n          label: displayName || name\n        });\n        return arr;\n      }, []);\n      this.set('travelNeedOptions', travelNeedOptions); // dropdown travel needs\n\n      const travelNeeds = stopPoint.get('trip.segment.leg.legTravelNeeds');\n      const clientTravelNeeds = travelNeeds.filterBy('isClient', true);\n      const travelNeedItems = travelNeedOptions.reduce((arr, _ref) => {\n        let {\n          type\n        } = _ref;\n        const travelNeed = clientTravelNeeds.findBy('travelNeedTypeName', type);\n        const count = travelNeed ? travelNeed.get('count') : 0;\n        if (Ember.isNone(count) || count === 0) return arr;\n        const travelNeedItem = TravelNeedItem.create({\n          type,\n          count\n        });\n        arr.push(travelNeedItem);\n        return arr;\n      }, []);\n      this.set('travelNeedItems', travelNeedItems); // additional travel needs\n\n      const serviceAnimalTravelNeed = clientTravelNeeds.findBy('isServiceAnimal', true);\n      const ambulatoryTravelNeeds = travelNeeds.filterBy('isAmbulatory', true);\n      const pcaTravelNeed = ambulatoryTravelNeeds.findBy('isPca', true);\n      const companionTravelNeed = ambulatoryTravelNeeds.findBy('isCompanion', true);\n      this.set('serviceAnimalCount', serviceAnimalTravelNeed ? serviceAnimalTravelNeed.get('count') : 0);\n      this.set('pcaCount', pcaTravelNeed ? pcaTravelNeed.get('count') : 0);\n      this.set('companionCount', companionTravelNeed ? companionTravelNeed.get('count') : 0); // \"Fare\" panel\n\n      this.set('paymentTypeOptions', paymentTypeOptions);\n    }).keepLatest(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store');\n      const stopPoint = (0, _unwrapProxy.unwrapProxy)(this.get('stopPoint'));\n      const routeExecEventAdapter = store.adapterFor('route-exec-event'); // eslint-disable-next-line no-unused-vars\n\n      let avlmVersion = null; // if user checks the arrive then it also means\n      // that the depart is also checked. Send accept\n      // to remove both arrive and depart in AVLM\n\n      if (this.get('arrive')) {\n        avlmVersion = yield routeExecEventAdapter.createAcceptEvent(stopPoint, avlmVersion);\n      } else if (this.get('depart')) {\n        avlmVersion = yield routeExecEventAdapter.createAcceptEvent(stopPoint, avlmVersion);\n        let arriveTimestamp = stopPoint.get('actualArriveTime');\n\n        if (Ember.isNone(arriveTimestamp)) {\n          arriveTimestamp = stopPoint.get('actualDepartTime');\n        }\n\n        stopPoint.set('arriveTimestamp', arriveTimestamp); // sending another arrive event will unperform the depart\n        // for this stop\n\n        avlmVersion = yield routeExecEventAdapter.createStopArriveEvent(stopPoint, avlmVersion);\n      }\n\n      yield this.get('versionUpdateOperation').perform();\n    }).drop(),\n    actions: {\n      noop() {\n        return false;\n      },\n\n      onRefreshButtonClick() {\n        this.get('refreshTask').perform();\n      },\n\n      onCancelButtonClick() {\n        this.onCloseClick();\n      },\n\n      async onPerformButtonClick() {\n        const lockRouteAction = this.get('lockRouteAction').bind(this);\n        const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n\n        try {\n          // Check dispatchRoute version first\n          await this.get('versionCheckOperation').perform(this.onCloseClick.bind(this));\n          await lockRouteAction(); // Reset error text\n\n          this.set('errorText');\n          const tooltip = this.get('tooltip');\n          const stopPoint = (0, _unwrapProxy.unwrapProxy)(this.get('stopPoint'));\n          const trip = (0, _unwrapProxy.unwrapProxy)(stopPoint.get('trip'));\n          const otherStopPoint = (0, _unwrapProxy.unwrapProxy)(trip.get('dropStopPoint'));\n          const title = 'Unperform Pick Stop';\n          let tip = 'Unperforming pick stop?';\n          let message = 'Unperformed stop';\n\n          if (otherStopPoint.get('isPerformed')) {\n            tip = 'Unperforming trip';\n            message = 'Unperformed Trip';\n          }\n\n          this.get('tooltip').pushConfirmation({\n            tip: tip,\n            title,\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              return this.get('saveTask').perform().then(() => {\n                this.get('notifications').success(`${message} successfully`);\n              }).catch(response => {\n                const payloadMessage = Ember.get(response, 'payload.message') ? JSON.parse(Ember.get(response, 'payload.message')) : null;\n                let messageText = 'Unperformed stop failed';\n\n                if (response.status === 400 || response.status === 500) {\n                  if (payloadMessage.errorDetail.includes('Execution version is different') || payloadMessage.errorDetail.includes('it was changed by another request')) {\n                    messageText = `UNPERFORM STOP FAILED. THE ROUTE (${this.get('route.name')}) HAS ALREADY BEEN MODIFIED WITH ANOTHER REQUEST`;\n                  }\n                }\n\n                this.get('notifications').warning(`${messageText}`);\n              }).finally(async () => {\n                await unlockRouteAction(0);\n                this.get('tooltip').reset();\n                return this.onCloseClick();\n              });\n            },\n            secondaryActionText: 'Cancel',\n            secondaryAction: async () => {\n              await unlockRouteAction(0);\n              tooltip.reset();\n              return;\n            },\n            closeAction: async () => {\n              await unlockRouteAction(0);\n            }\n          });\n        } catch (e) {\n          await unlockRouteAction();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/side-drawer/unperform-pick-stop/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"aodMN0Js\",\n    \"block\": \"{\\\"symbols\\\":[\\\"drawer\\\",\\\"riderPhoneNumbers\\\",\\\"riderPhoneNumber\\\",\\\"i\\\"],\\\"statements\\\":[[4,\\\"generic-widgets/side-drawer\\\",null,null,{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"header\\\"]],\\\"expected `drawer.header` to be a contextual component but found a string. Did you mean `(component drawer.header)`? ('adept-iq/pods/components/side-drawer/unperform-pick-stop/template.hbs' @ L4:C4) \\\"],null]],[[\\\"title\\\",\\\"canSave\\\",\\\"onSaveClick\\\",\\\"onRefreshClick\\\",\\\"onShrinkClick\\\",\\\"onCloseClick\\\"],[[23,[\\\"title\\\"]],[23,[\\\"canSave\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onPerformButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onRefreshButtonClick\\\"],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onShrinkClick\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],[23,[\\\"onCloseClick\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"subHeader\\\"]],\\\"expected `drawer.subHeader` to be a contextual component but found a string. Did you mean `(component drawer.subHeader)`? ('adept-iq/pods/components/side-drawer/unperform-pick-stop/template.hbs' @ L13:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    Trip: \\\"],[1,[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"tripId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"perform-stop-layout\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"body\\\"]],\\\"expected `drawer.body` to be a contextual component but found a string. Did you mean `(component drawer.body)`? ('adept-iq/pods/components/side-drawer/unperform-pick-stop/template.hbs' @ L18:C5) \\\"],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unperform-title\\\"],[9],[1,[21,\\\"unperformTitle\\\"],false],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"unperform-message\\\"],[9],[1,[21,\\\"unperformMessage\\\"],false],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"errorText\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"error-message padded\\\"],[9],[1,[21,\\\"errorText\\\"],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-pick-stop/template.hbs' @ L26:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Pick Stop\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"route\\\",\\\"name\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Driver ID\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"driver\\\",\\\"driverId\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Date\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"promisedTime\\\"]],[23,[\\\"dateTimeFormat\\\",\\\"dateMoment\\\"]]],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Passenger\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"rider\\\",\\\"fullName\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"with\\\",[[23,[\\\"stopPoint\\\",\\\"trip\\\",\\\"rider\\\",\\\"riderPhoneNumbers\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,2,[]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"\\\\n                Phone Number\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"gt\\\",[[22,2,[\\\"length\\\"]],1],null]],null,{\\\"statements\\\":[[0,\\\"                  (\\\"],[1,[27,\\\"add\\\",[[22,4,[]],1],null],false],[0,\\\")\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"              \\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[22,3,[\\\"formattedPhoneNumber\\\"]]],[9],[10],[0,\\\"\\\\n              \\\"],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n              \\\"],[7,\\\"th\\\"],[9],[0,\\\"Phone Number\\\"],[10],[0,\\\"\\\\n              \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[9],[10],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null],[0,\\\"        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Pick Location\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"address\\\",\\\"fullAddress\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[9],[0,\\\"Notes\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"notes\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"panel\\\"]],\\\"expected `drawer.panel` to be a contextual component but found a string. Did you mean `(component drawer.panel)`? ('adept-iq/pods/components/side-drawer/unperform-pick-stop/template.hbs' @ L76:C7) \\\"],null]],[[\\\"title\\\",\\\"isCollapsible\\\"],[\\\"Unperformed\\\",true]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"g-side-drawer-panel-form\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"arrive\\\",\\\"arrive\\\",\\\"checkbox\\\",[23,[\\\"arrive\\\"]],[27,\\\"not\\\",[[23,[\\\"depart\\\"]]],null]]]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Arrived\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Performed \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedArrivePerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Arrival Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"tripStop\\\",\\\"plannedEta\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Arrival Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"actualArriveTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[11,\\\"class\\\",\\\"right-padded\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"id\\\",\\\"name\\\",\\\"type\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"depart\\\",\\\"depart\\\",\\\"checkbox\\\",[23,[\\\"depart\\\"]],[23,[\\\"arrive\\\"]]]]],false],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Picked Up\\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Performed \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[23,[\\\"stopPoint\\\",\\\"computedDepartPerformedBy\\\"]]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Planned Pick Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"departTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\" \\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"th\\\"],[11,\\\"class\\\",\\\"left\\\"],[9],[0,\\\"Actual Pick Time \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"td\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"disabled\\\"],[12,\\\"value\\\",[27,\\\"moment-format\\\",[[23,[\\\"stopPoint\\\",\\\"actualDepartTime\\\"]],\\\"hh:mm A\\\"],null]],[9],[10],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/side-drawer/unperform-pick-stop/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/base-cell/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/template\"], function (_exports, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNameBindings: ['overrideClassName'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    columns: Ember.computed('table.allColumns', function () {\n      const tableColumns = this.get('table.allColumns');\n      return tableColumns;\n    }),\n    overrideClassName: Ember.computed('config', function () {\n      const tableColumn = this.get('columns');\n      const found = tableColumn.find(tc => tc.id === 'description');\n      const baseClassTestName = 'data-test-table-base-cell';\n\n      if (!Ember.isPresent(found)) {\n        return [`table-base-cell  ${baseClassTestName}`];\n      }\n\n      return [`table-base-cell-white-space ${baseClassTestName}`];\n    }),\n    tooltipText: Ember.computed('row.isLocked', function () {\n      const isLocked = this.get('row.isLocked');\n\n      if (Ember.isNone(isLocked)) {\n        return null;\n      }\n\n      if (isLocked) {\n        return `Locked by ${this.get('row.lockedBy')}`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'row.isLocked', function () {\n      const tooltipText = this.get('tooltipText');\n      const isLocked = this.get('row.isLocked');\n      return Ember.isPresent(tooltipText) && isLocked;\n    }),\n    tabindex: 0\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/base-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"W3dSlI1x\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"duration\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",500,3000,\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/base-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/check-box/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/utils/mobile\"], function (_exports, _component, _mobile) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-check-box-cell', 'data-test-table-check-box-cell'],\n    classNameBindings: ['isTouchDevice'],\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'isTouchDevice', _mobile.isTouchDevice);\n    },\n\n    activeContext: Ember.inject.service(),\n    isChecked: Ember.computed.alias('row.isChecked'),\n    isAlertCheckBox: Ember.computed.alias('row.isAlertCheckBox'),\n    isDisabled: Ember.computed.alias('row.isDisabled'),\n    onHidden: Ember.observer('row.hidden', function () {\n      const hidden = this.get('row.hidden');\n\n      if (hidden) {\n        // Unchecked row when row is hidden.\n        this.send('onToggleCheckbox', {\n          target: {\n            checked: false\n          }\n        });\n      }\n    }),\n    // click(e) {\n    //   // if (isTouchDevice && this.row.selected && this.extra.onRightClick) {\n    //   //   this.extra.onRightClick(this.row, e);\n    //   // } else {\n    //     this.onToggleCheckbox(e);\n    //   // }\n    // },\n    actions: {\n      onToggleCheckbox(event) {\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const lastCheckedRow = rows.findBy('isLastChecked', true);\n        const affectedRows = [];\n\n        if (this.get('row').content._internalModel.modelName === 'avlm-alert') {\n          for (let i = 0; i < rows.length; i++) {\n            if (i === rows.indexOf(row)) {\n              console.log('checked row is ', row); // eslint-disable-line no-console\n            } else {\n              rows.objectAt(i).set('isAlertCheckBox', event.target.checked);\n            }\n\n            affectedRows.push(rows.objectAt(i));\n          }\n        }\n\n        if (event.shiftKey && lastCheckedRow) {\n          const lastCheckedIndex = rows.indexOf(lastCheckedRow);\n          const checkedIndex = rows.indexOf(row);\n          const start = Math.min(checkedIndex, lastCheckedIndex);\n          const end = Math.max(checkedIndex, lastCheckedIndex);\n\n          for (let i = start; i <= end; i++) {\n            rows.objectAt(i).set('isChecked', event.target.checked);\n            rows.objectAt(i).set('selected', event.target.checked);\n            affectedRows.push(rows.objectAt(i));\n          }\n        } else {\n          row.set('isChecked', event.target.checked);\n          row.set('selected', event.target.checked);\n          affectedRows.push(row);\n        }\n\n        rows.setEach('isLastChecked', false);\n        row.set('isLastChecked', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"6TyfPop9\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"isAlertCheckBox\\\"]],[23,[\\\"isDisabled\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus checkbox-disable\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"disabled\\\",[21,\\\"isDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"disabled\\\",\\\"\\\"],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onToggleCheckbox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"fa fa-cog \\\",[27,\\\"if\\\",[[23,[\\\"isChecked\\\"]],\\\"is-checked\\\"],null]]]],[11,\\\"aria-hidden\\\",\\\"true\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],[23,[\\\"extra\\\",\\\"onRightClick\\\"]],[23,[\\\"row\\\"]]],null]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/date-cell/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/config/environment\"], function (_exports, _component, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-trip-eta-cell'],\n    classNameBindings: ['row.otp'],\n    format: _environment.default.dateTimeFormat.dateTimeMoment,\n    dateFormat: Ember.computed('column.format', 'format', function () {\n      const columnFormat = this.get('column.format');\n      if (columnFormat) return columnFormat;\n      return this.get('format');\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/date-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"8k1MdeiT\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"value\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"moment-format\\\",[[23,[\\\"value\\\"]],[23,[\\\"dateFormat\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/date-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/icon-cell/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-booking-summary-cell-icon']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/icon-cell/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"JzEJcqbr\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col pr-1\\\"],[9],[0,\\\"    \\\\n   \\\"],[7,\\\"img\\\"],[12,\\\"src\\\",[21,\\\"value\\\"]],[11,\\\"class\\\",\\\"image-icon\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/icon-cell/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/radio-button/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-radio-button-cell', 'data-test-table-radio-button-cell'],\n    vehicle: Ember.computed.readOnly('row.vehicle'),\n    isPlaceholder: Ember.computed.readOnly('vehicle.placeholder'),\n    actions: {\n      onRadioButtonClick() {\n        // prevents `click` event from bubbling to row component\n        // event.stopPropagation();\n        const row = this.get('row');\n        const rows = this.get('table.rows');\n        const selectedRow = rows.findBy('selected', true);\n        const buttonClickAction = this.get('tableActions.radioButtonClick');\n        if (row === selectedRow) return;\n\n        if (selectedRow) {\n          selectedRow.set('selected', false);\n        }\n\n        if (buttonClickAction) {\n          buttonClickAction(row);\n        }\n\n        row.set('selected', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/radio-button/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"r4yNtNrL\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"disabled\\\",[21,\\\"isPlaceholder\\\"]],[12,\\\"checked\\\",[23,[\\\"row\\\",\\\"selected\\\"]]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\"],null]],[11,\\\"type\\\",\\\"radio\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/radio-button/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/text-break/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/pods/components/table/cells/text-break/template\", \"adept-iq/mixins/table-row-value\"], function (_exports, _component, _template, _tableRowValue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_tableRowValue.default, {\n    classNameBindings: ['overrideClassName'],\n    attributeBindings: ['tabindex'],\n    layout: _template.default,\n    textContent: Ember.computed('value', function () {\n      const value = this.get('value.values');\n      if (!value || value.length < 1) return '';\n      const length = value.filter(val => val.className === 'valueItem').length; // show the actual value when there is only one item\n\n      if (length > 1) {\n        return `${length} ${this.get('column.cellDesc')}`;\n      } else if (length === 1) {\n        return value.firstObject.value;\n      }\n\n      return '';\n    }),\n    columns: Ember.computed('table.allColumns', function () {\n      const tableColumns = this.get('table.allColumns');\n      return tableColumns;\n    }),\n    overrideClassName: Ember.computed('config', 'value', function () {\n      const value = this.get('value');\n      const tableColumn = this.get('columns');\n      const found = tableColumn.find(tc => tc.id === 'description');\n      let baseClassTestName = 'data-test-table-base-cell';\n\n      if (value === 'Success') {\n        baseClassTestName = 'highlightable-success';\n      }\n\n      if (!Ember.isPresent(found)) {\n        //coming from here\n        return [`table-base-cell1  ${baseClassTestName}`];\n      }\n\n      return [`table-base-cell-white-space ${baseClassTestName}`];\n    }),\n    overrideResult: Ember.computed('config', 'config.result', function () {\n      const tableColumn = this.get('columns');\n      const found = tableColumn.find(tc => tc.id === 'description');\n      const baseClassTestName = 'data-test-table-base-cell';\n\n      if (!Ember.isPresent(found)) {\n        //coming from here\n        return [`table-base-cell1  ${baseClassTestName}`];\n      }\n\n      return [`table-base-cell-white-space ${baseClassTestName}`];\n    }),\n    tooltipText: Ember.computed('row.isLocked', function () {\n      const isLocked = this.get('row.isLocked');\n\n      if (Ember.isNone(isLocked)) {\n        return null;\n      }\n\n      if (isLocked) {\n        return `Locked by ${this.get('row.lockedBy')}`;\n      }\n    }),\n    displayTooltip: Ember.computed('tooltipText', 'row.isLocked', function () {\n      const tooltipText = this.get('tooltipText');\n      const isLocked = this.get('row.isLocked');\n      return Ember.isPresent(tooltipText) && isLocked;\n    }),\n    tabindex: 0\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/text-break/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"BBXnxJxZ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"delay\\\",\\\"duration\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",500,3000,\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/text-break/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/text-extension/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/mixins/table-row-value\"], function (_exports, _component, _tableRowValue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend(_tableRowValue.default, {\n    classNames: ['table-text-extension-cell'],\n    textContent: Ember.computed('value', function () {\n      const value = this.get('value.values');\n      if (!value || value.length < 1) return '';\n      const length = value.filter(val => val.className === 'valueItem').length; // show the actual value when there is only one item\n\n      if (length > 1) {\n        return `${length} ${this.get('column.cellDesc')}`;\n      } else if (length === 1) {\n        return value.firstObject.value;\n      }\n\n      return '';\n    }),\n    actions: {\n      prevent(e) {\n        return e.stopImmediatePropagation();\n      },\n\n      showDropdown(dropdown, event) {\n        if (this.value.values.length > 1) {\n          if (this.closeTimer) {\n            Ember.run.cancel(this.closeTimer);\n            this.closeTimer = null;\n          } else {\n            dropdown.actions.open(event);\n          }\n        }\n      },\n\n      hideDropdown(dropdown, event) {\n        if (this.value.values.length > 1) {\n          this.closeTimer = Ember.run.later(() => {\n            this.closeTimer = null;\n            dropdown.actions.close(event);\n          }, 200);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/text-extension/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Wrhihhqz\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"item\\\"],\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,[[\\\"horizontalPosition\\\",\\\"verticalPosition\\\"],[\\\"auto\\\",\\\"auto\\\"]],{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"trigger\\\"]],\\\"expected `dropdown.trigger` to be a contextual component but found a string. Did you mean `(component dropdown.trigger)`? ('adept-iq/pods/components/table/cells/text-extension/template.hbs' @ L5:C5) \\\"],null]],[[\\\"class\\\",\\\"onMouseEnter\\\",\\\"onMouseLeave\\\",\\\"mousedown\\\",\\\"eventType\\\"],[\\\"can-focus\\\",[27,\\\"action\\\",[[22,0,[]],\\\"showDropdown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hideDropdown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"prevent\\\"],null],\\\"onMouseEnter\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"textContent\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/table/cells/text-extension/template.hbs' @ L14:C5) \\\"],null]],[[\\\"onMouseEnter\\\",\\\"onMouseLeave\\\",\\\"class\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"showDropdown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"hideDropdown\\\"],null],\\\"cell-dropdown-content\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"cell-text-content-extension\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header\\\"],[9],[1,[23,[\\\"value\\\",\\\"header\\\"]],false],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"value\\\",\\\"values\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[7,\\\"label\\\"],[12,\\\"class\\\",[22,2,[\\\"className\\\"]]],[9],[1,[22,2,[\\\"value\\\"]],false],[10],[7,\\\"br\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/text-extension/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/trip-eta/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"moment\"], function (_exports, _component, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-trip-eta-cell'],\n    classNameBindings: ['row.otp'],\n    tooltipText: Ember.computed('row.mrt', function () {\n      const mrt = this.get('row.mrt');\n\n      const duration = _moment.default.duration(mrt);\n\n      if (!mrt) return null; // don't show the tooltip text if the mrt value is less than 1 minute\n      // assuming that mrt values will be in milliseconds\n\n      if (mrt < 60000) {\n        return null;\n      }\n\n      return `+${duration.humanize()}`;\n    }),\n    displayTooltip: Ember.computed('tooltipText,column.showToolTip', function () {\n      const tooltipText = this.get('tooltipText');\n      const showToolTip = this.get('column.showToolTip');\n\n      if (showToolTip) {\n        return Ember.isPresent(tooltipText);\n      }\n\n      return false;\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/trip-eta/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EBBWAzSU\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"value\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"moment-format\\\",[[23,[\\\"value\\\"]],\\\"HH:mm\\\"],null],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"displayTooltip\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"ember-tooltip\\\",null,[[\\\"side\\\",\\\"popperContainer\\\",\\\"text\\\"],[\\\"bottom\\\",\\\"body\\\",[23,[\\\"tooltipText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/trip-eta/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/user-editable-enum/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/utils/save-records\"], function (_exports, _component, _saveRecords) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const KEYCODE_TAB = 9;\n  const KEYCODE_ENTER = 13;\n  const KEYCODE_ESCAPE = 27;\n\n  var _default = _component.default.extend({\n    classNames: ['table-user-editable-enum-cell'],\n    classNameBindings: ['canFocus'],\n    isEditing: false,\n    value: null,\n    dropdownClass: null,\n    dropdownAPI: null,\n    options: Ember.computed.alias('column.options'),\n    allowMultiple: Ember.computed.alias('column.allowMultiple'),\n    canFocus: Ember.computed.not('isEditing'),\n    isDoubleClick: Ember.computed.and('row.isEditing', 'column.isEditing'),\n    onIsEditingChange: Ember.observer('isDoubleClick', function () {\n      if (this.get('isDoubleClick')) {\n        this.startEditing();\n      }\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.set('dropdownClass', `${this.elementId}-dropdown`);\n    },\n\n    startEditing() {\n      if (this.get('isEditing')) return;\n      this.set('isEditing', true);\n      const row = this.get('row');\n      const valuePath = this.get('column.valuePath');\n      const value = row.get(valuePath);\n      this.set('value', Ember.copy(value));\n      Ember.run.scheduleOnce('afterRender', () => {\n        this.get('dropdownAPI').actions.open(); // Close on click outside.\n\n        Ember.$(document).on('click', e => {\n          Ember.run.scheduleOnce('afterRender', () => {\n            const componentElements = [this.element, Ember.$(this.get('dropdownClass')).get(0)];\n            const isClickInside = componentElements.any(element => {\n              return element && element.contains(e.target);\n            });\n            if (isClickInside) return;\n            this.saveChanges();\n            Ember.$(document).off('click');\n          });\n        });\n      });\n    },\n\n    saveChanges() {\n      if (!this.get('isEditing')) return;\n      this.set('isEditing', false);\n      const row = this.get('row');\n      const valuePath = this.get('column.valuePath');\n      const value = this.get('value');\n      row.set(valuePath, value);\n      (0, _saveRecords.default)([row.content.record]);\n    },\n\n    discardChanges() {\n      if (!this.get('isEditing')) return;\n      this.set('isEditing', false);\n      const row = this.get('row');\n      const valuePath = this.get('column.valuePath');\n      const value = row.get(valuePath);\n      this.set('value', Ember.copy(value));\n    },\n\n    actions: {\n      onChange(value) {\n        this.set('value', value);\n\n        if (this.get('allowMultiple') === false) {\n          this.saveChanges();\n        }\n      },\n\n      onKeydown(api, event) {\n        const {\n          keyCode\n        } = event; // Allow default enter to select and escape to close drop down when open.\n\n        if (api.isOpen) {\n          event.stopPropagation();\n          return;\n        }\n\n        if (keyCode === KEYCODE_ESCAPE) {\n          this.discardChanges();\n        }\n\n        if (keyCode === KEYCODE_TAB || keyCode === KEYCODE_ENTER) {\n          this.saveChanges();\n        }\n      },\n\n      onDidInsertDropdownElement(dropdownAPI) {\n        this.set('dropdownAPI', dropdownAPI);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/user-editable-enum/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"diTR3eCj\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isDoubleClick\\\"]]],null,{\\\"statements\\\":[[4,\\\"component\\\",[[27,\\\"if\\\",[[23,[\\\"allowMultiple\\\"]],\\\"power-select-multiple\\\",\\\"power-select\\\"],null]],[[\\\"selected\\\",\\\"options\\\",\\\"disabled\\\",\\\"searchEnabled\\\",\\\"triggerClass\\\",\\\"dropdownClass\\\",\\\"registerAPI\\\",\\\"onkeydown\\\",\\\"onchange\\\"],[[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"options\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"disabled\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"allowMultiple\\\"]]],null],\\\"can-focus\\\",[27,\\\"readonly\\\",[[23,[\\\"dropdownClass\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onDidInsertDropdownElement\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onKeydown\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onChange\\\"],null]]],{\\\"statements\\\":[[0,\\\"\\\\n    \\\"],[1,[22,1,[]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/user-editable-enum/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/user-editable/component\", [\"exports\", \"adept-iq/pods/components/table/cells/base-cell/component\", \"adept-iq/utils/save-records\", \"adept-iq/mixins/table-row-value\", \"moment\", \"adept-iq/config/environment\"], function (_exports, _component, _saveRecords, _tableRowValue, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const KEYCODE_TAB = 9;\n  const KEYCODE_ENTER = 13;\n  const KEYCODE_ESCAPE = 27;\n\n  var _default = _component.default.extend(_tableRowValue.default, {\n    classNames: ['table-user-editable-cell', 'data-test-table-user-editable-cell'],\n    classNameBindings: ['canFocus'],\n    notifications: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    isEditing: false,\n    buffer: null,\n    canFocus: Ember.computed.not('isEditing'),\n    isDoubleClick: Ember.computed.and('row.isEditing', 'column.isEditing'),\n    onIsEditingChange: Ember.observer('isDoubleClick', function () {\n      if (this.get('isDoubleClick')) {\n        this.startEditing();\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    startEditing() {\n      if (this.get('isEditing')) return;\n      this.set('isEditing', true);\n      const row = this.get('row');\n      const valuePath = this.get('column.valuePath');\n      const value = row.get(valuePath);\n      const type = this.get('column.columnType');\n      const format = this.get('column.format');\n      const buffer = this.formatInputValue(value, type, format);\n      this.set('buffer', buffer);\n      Ember.run.scheduleOnce('afterRender', () => {\n        this.$('input').focus();\n      });\n    },\n\n    formatInputValue(value, type, format) {\n      switch (type.id) {\n        case 'date':\n        case 'datetime':\n        case 'datetimeflatpickr':\n        case 'time':\n          return format(value);\n\n        default:\n          return value ? value.toString() : '';\n      }\n    },\n\n    parseInputValue(value, type, parse, originalValue) {\n      switch (type.id) {\n        case 'date':\n          return new Date(value);\n\n        case 'datetime':\n        case 'datetimeflatpickr':\n        case 'time':\n          return parse(value, originalValue);\n\n        default:\n          return value;\n      }\n    },\n\n    validate(value) {\n      let valid = true;\n      const config = this.get('column.config');\n\n      if (Ember.isNone(config.validation)) {\n        return true;\n      }\n\n      const minValue = config.validation.minValue;\n      const maxValue = config.validation.maxValue;\n      const type = config.validation.type;\n\n      if (!Ember.isNone(minValue) && !Ember.isNone(maxValue)) {\n        switch (type) {\n          case 'text':\n            {\n              if (value.length < minValue || value.length > maxValue) {\n                let message = '';\n\n                if (minValue === maxValue) {\n                  message = `${config.label} must be ${minValue} characters in length.`;\n                } else {\n                  message = `${config.label} must be between ${minValue} and ${maxValue} characters in length.`;\n                }\n\n                valid = false;\n                this.get('notifications').warning(message);\n              }\n\n              break;\n            }\n\n          case 'phoneNumber':\n            {\n              const numOnly = value.replace(/[^0-9]/g, '');\n\n              if (numOnly.length < minValue || numOnly.length > maxValue) {\n                let message = '';\n\n                if (minValue === maxValue) {\n                  message = `${config.label} must have ${minValue} digits.`;\n                } else {\n                  message = `${config.label} must be between ${minValue} and ${maxValue} digits.`;\n                }\n\n                valid = false;\n                this.get('notifications').warning(message);\n              }\n\n              break;\n            }\n\n          case 'date':\n            {\n              const valueMoment = (0, _moment.default)(value);\n              const minValueMoment = minValue === 'now' ? (0, _moment.default)() : (0, _moment.default)(minValue);\n              const maxValueMoment = maxValue === 'now' ? (0, _moment.default)() : (0, _moment.default)(maxValue);\n              let message = '';\n\n              if (!valueMoment.isBetween(minValueMoment, maxValueMoment, null, '[]')) {\n                valid = false;\n                message = `${config.label} must be between ${minValueMoment.format(_environment.default.dateTimeFormat.dateMoment)} and ${maxValueMoment.format(_environment.default.dateTimeFormat.dateMoment)}.`;\n                this.get('notifications').warning(message);\n              }\n\n              break;\n            }\n\n          default:\n            {\n              valid = false;\n              break;\n            }\n        }\n      }\n\n      return valid;\n    },\n\n    saveChanges() {\n      if (!this.get('isEditing')) return;\n      this.set('row.isEditing', false);\n      this.set('column.isEditing', false);\n      this.set('isEditing', false);\n      const buffer = this.get('buffer');\n      const type = this.get('column.columnType');\n      const parse = this.get('column.parse');\n      const row = this.get('row');\n      const valuePath = this.get('column.valuePath');\n      const origialValue = row.get(valuePath) || '';\n      const newValue = this.parseInputValue(buffer, type, parse, origialValue) || '';\n\n      if (this.validate(newValue)) {\n        row.set(valuePath, newValue); // get the last model in the value path\n\n        const path = valuePath.split('.');\n        path.pop();\n        const modelPatch = path.join('.'); // patch that specific model\n\n        row.get(modelPatch).reload().then(res => {\n          return (0, _saveRecords.default)([res]);\n        });\n      }\n    },\n\n    discardChanges() {\n      if (!this.get('isEditing')) return;\n      this.set('isEditing', false);\n      this.set('row.isEditing', false);\n      this.set('column.isEditing', false);\n    },\n\n    actions: {\n      onInput(text) {\n        this.set('buffer', text);\n      },\n\n      onKeydown(keyCode) {\n        if (keyCode === KEYCODE_ESCAPE) {\n          this.discardChanges();\n        }\n\n        if (keyCode === KEYCODE_TAB || keyCode === KEYCODE_ENTER) {\n          this.saveChanges();\n        }\n      },\n\n      onBlur() {\n        this.saveChanges();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/cells/user-editable/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tImqWS+R\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isDoubleClick\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"can-focus\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"buffer\\\"]]],null]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onInput\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onblur\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onBlur\\\"],null]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onKeydown\\\"],[[\\\"value\\\"],[\\\"keyCode\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"  \\\"],[1,[21,\\\"value\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/cells/user-editable/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/columns/base-column/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-base-column'],\n    attributeBindings: ['tabindex'],\n    tabindex: 0,\n    isEditing: false,\n    sortIconProperty: Ember.computed('column.{sortable,sorted,ascending}', function () {\n      const sorted = this.get('column.sorted');\n\n      if (sorted) {\n        const ascending = this.get('column.ascending');\n        return ascending ? 'iconAscending' : 'iconDescending';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/columns/check-box/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['table-check-box-column'],\n    isChecked: Ember.computed('table.rows.@each.isChecked', function () {\n      const rows = this.get('table.rows'); // it's weird to see checkbox when no records are shown\n\n      if (!rows || rows.length === 0) return false;\n      return rows.isEvery('isChecked');\n    }),\n    isAlertCheckBox: Ember.computed('table.rows.@each.isChecked', function () {\n      if (this.get('extra.options.title') === 'Alerts') return true;\n    }),\n    actions: {\n      onCheckboxToggle(event) {\n        // these are passed by the generic column widget's template\n        const {\n          checkAll,\n          uncheckAll\n        } = this.get('extra');\n\n        if (event.target.checked && checkAll) {\n          Ember.run.next(checkAll);\n        } else if (uncheckAll) {\n          Ember.run.next(uncheckAll);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/columns/check-box/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"3BWbj71R\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isAlertCheckBox\\\"]]],null,{\\\"statements\\\":[[0,\\\" \\\"],[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],null]],[11,\\\"disabled\\\",\\\"\\\"],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\" \\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[7,\\\"input\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isChecked\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCheckboxToggle\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/columns/check-box/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/columns/filter-capable/component\", [\"exports\", \"adept-iq/pods/components/table/columns/base-column/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-filter-capable-column']\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/columns/filter-capable/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7+O+CY/G\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-label\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[23,[\\\"column\\\",\\\"config\\\",\\\"label\\\"]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"column-controls\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"sortIconProperty\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[12,\\\"class\\\",[28,[\\\"lt-sort-icon \\\",[27,\\\"get\\\",[[23,[\\\"sortIcons\\\"]],[23,[\\\"sortIconProperty\\\"]]],null]]]],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"column\\\",\\\"isFiltered\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-filter\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/columns/filter-capable/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/rows/action-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/base-row/component\", \"adept-iq/pods/components/table/rows/action-row/template\"], function (_exports, _component, _template) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['table-action-row', 'data-test-table-action-row'],\n    classNameBindings: ['status', 'isLocked'],\n    attributeBindings: ['data-record-id'],\n    layout: _template.default,\n    // this property name must be dasherized\n    'data-record-id': Ember.computed.alias('row.content.id'),\n    status: Ember.computed.alias('row.content.status'),\n    modelName: Ember.computed.alias('row.content.constructor.modelName'),\n    isLocked: Ember.computed.alias('row.content.isLocked'),\n\n    didInsertElement() {\n      this.$().on('contextmenu', Ember.run.bind(this, this.onSecondClick));\n    },\n\n    async onSecondClick(event) {\n      event.preventDefault();\n\n      if (event.target.type !== 'checkbox') {\n        const extra = this.get('extra');\n\n        if (extra.onUpdateIQUXRow) {\n          await extra.onUpdateIQUXRow(this.get('row'));\n        }\n\n        if (extra.onRightClick) {\n          extra.onRightClick(this.get('row'), event);\n        }\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/rows/action-row/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"lTTBJ4Zy\",\n    \"block\": \"{\\\"symbols\\\":[\\\"column\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"row\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[23,[\\\"columns\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"component\\\",[[27,\\\"concat\\\",[\\\"light-table/cells/\\\",[22,1,[\\\"cellType\\\"]]],null]],[[\\\"table\\\",\\\"tableActions\\\",\\\"extra\\\",\\\"row\\\",\\\"column\\\",\\\"rawValue\\\"],[[23,[\\\"table\\\"]],[23,[\\\"tableActions\\\"]],[23,[\\\"extra\\\"]],[23,[\\\"row\\\"]],[22,1,[]],[27,\\\"if\\\",[[23,[\\\"row\\\"]],[27,\\\"get\\\",[[23,[\\\"row\\\"]],[27,\\\"if\\\",[[22,1,[\\\"valuePaths\\\"]],[27,\\\"get\\\",[[22,1,[\\\"valuePathMap\\\"]],[23,[\\\"modelName\\\"]]],null],[22,1,[\\\"valuePath\\\"]]],null]],null]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/table/rows/action-row/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/rows/base-row/component\", [\"exports\", \"ember-light-table/components/lt-row\"], function (_exports, _ltRow) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ltRow.default.extend({\n    classNames: ['table-base-row', 'data-test-table-base-row'],\n    isEditing: false\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/rows/colored-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/action-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNameBindings: ['coloredRow', 'selectedOrdinalRow'],\n    coloredRow: Ember.computed('row.coloredRow', function () {\n      const color = this.get('row.coloredRow');\n\n      if (color) {\n        return 'yellow-table-row';\n      }\n\n      return '';\n    }),\n    selectedOrdinalRow: Ember.computed('row.selectedOrdinalRow', function () {\n      const selectedOrdinalRow = this.get('row.selectedOrdinalRow');\n\n      if (selectedOrdinalRow) {\n        return 'yellow-table-row';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/rows/text-formatted-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/action-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNameBindings: ['alertCategory', 'data-test-alertCategory'],\n    alertCategory: Ember.computed('row.otp', function () {\n      const otp = this.get('otp');\n\n      if (otp === 'L') {\n        return 'otp-danger';\n      } else if (otp === 'D') {\n        return 'otp-warning';\n      }\n\n      return '';\n    }),\n    // override with sub-class-specific CP\n    otp: Ember.computed.alias('row.otp')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/table/rows/zonestat-formatted-row/component\", [\"exports\", \"adept-iq/pods/components/table/rows/action-row/component\"], function (_exports, _component) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNameBindings: ['alertCategory'],\n    // override with sub-class-specific CP\n    alertCategory: Ember.computed('row.status', function () {\n      const status = this.get('status');\n\n      if (status === 'high') {\n        return 'zone-danger';\n      } else if (status === 'medium') {\n        return 'zone-warning';\n      }\n\n      return '';\n    })\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/tile-dashboard/component\", [\"exports\", \"adept-iq/config/widget-types\", \"resize-observer-polyfill\"], function (_exports, _widgetTypes, _resizeObserverPolyfill) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CLIP_COLUMNS_IN_NORMAL_MODE = false;\n  const RESIZE_DEBOUNCE_TIME = 250;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    isMapWidgetMaximized: Ember.computed.alias('maximizer.isMapWidgetMaximized'),\n    classNames: ['tile-dashboard', 'data-test-tile-dashboard'],\n    dashboard: null,\n    widgetTypesHash: _widgetTypes.widgetTypesHash,\n    isEditing: Ember.computed.alias('workspace.isEditing'),\n    isEditingPlayback: Ember.computed.alias('workspace.isEditingPlayback'),\n    isEditingReconcile: Ember.computed.alias('workspace.isEditingReconcile'),\n    isDragging: Ember.computed.alias('workspace.isDragging'),\n    isResizing: Ember.computed.alias('workspace.isResizing'),\n    tileSize: Ember.computed.alias('workspace.tileSize'),\n    tileSpacing: Ember.computed.alias('workspace.tileSpacing'),\n    contentWidth: Ember.computed.alias('workspace.contentWidth'),\n    contentHeight: Ember.computed.alias('workspace.contentHeight'),\n    modeClass: Ember.computed('isEditing', function () {\n      const mode = this.get('isEditing') ? 'edit' : 'normal';\n      return `dashboard-mode-${mode}`;\n    }),\n    tileSizeClass: Ember.computed('tileSize', function () {\n      return 'tile-size-' + this.get('tileSize');\n    }),\n    tileSpacingClass: Ember.computed('tileSpacing', function () {\n      return 'tile-spacing-' + this.get('tileSpacing');\n    }),\n    colsClass: Ember.computed('dashboard.widgets.@each.{x,width}', 'isEditing', 'gridWidth', function () {\n      let cols = this.get('gridWidth');\n      const widgets = this.get('dashboard.widgets') || [];\n\n      if (!this.get('isEditing') && CLIP_COLUMNS_IN_NORMAL_MODE) {\n        const maxWidth = widgets.reduce((max, widget) => {\n          const x = widget.get('x');\n          const width = widget.get('width');\n          return Math.max(max, x + width);\n        }, 0);\n        cols = Math.min(cols, maxWidth);\n      }\n\n      return `cols-${cols}`;\n    }),\n    rowsClass: Ember.computed('widgets.@each.{y,height}', 'gridHeight', function () {\n      const gridHeight = this.get('gridHeight');\n      const widgets = this.get('dashboard.widgets') || [];\n      const rows = widgets.reduce((max, widget) => {\n        const y = widget.get('y');\n        const height = widget.get('height');\n        return Math.max(max, y + height);\n      }, gridHeight);\n      return `rows-${rows}`;\n    }),\n    gridWidth: Ember.computed.alias('workspace.gridWidth'),\n    gridHeight: Ember.computed.alias('workspace.gridHeight'),\n\n    didInsertElement() {\n      this._onResize = () => {\n        if (this.get('isDragging') || this.get('isResizing')) return;\n        Ember.run.debounce(this, 'updateContentDimensions', RESIZE_DEBOUNCE_TIME);\n      };\n\n      this._resizeObserver = new _resizeObserverPolyfill.default(this._onResize);\n\n      this._resizeObserver.observe(this.$()[0]); // add change listener here instead of in the template; ember-gridstack\n      // does not handle event listener teardown properly when attrs change\n\n\n      this._onGridStackChange = (event, items) => {\n        Ember.run.scheduleOnce('afterRender', this, 'onGridStackChange', event, items);\n      };\n\n      this.$('.grid-stack').on('change', this._onGridStackChange);\n      this.updateContentDimensions();\n      this.restoreStaticGridSetting();\n    },\n\n    willDestroyElement() {\n      this.$('.grid-stack').off('change', this._onGridStackChange);\n\n      this._resizeObserver.disconnect();\n\n      this._resizeObserver = null;\n      this._onResize = null;\n    },\n\n    restoreWidgetLayout() {\n      // unfortunately, we have to drop down to the GridStack level here;\n      // the changes we make will trigger `onGridstackChange` actions\n      const widgets = this.get('dashboard.widgets');\n      if (Ember.isEmpty(widgets)) return;\n      Ember.run.scheduleOnce('afterRender', () => {\n        const gridStack = this.$('.grid-stack');\n        if (!gridStack) return;\n        const grid = gridStack.data('gridstack');\n        widgets.forEach(widget => {\n          const id = widget.get('id');\n          const el = this.$(`.grid-stack-item[id=\"${id}\"]`);\n          const currentX = parseInt(el.attr('data-gs-x'), 10);\n          const currentY = parseInt(el.attr('data-gs-y'), 10);\n          const x = widget.get('x');\n          const y = widget.get('y');\n\n          if (currentX !== x || currentY !== y) {\n            grid.move(el, x, y);\n          }\n\n          const currentWidth = parseInt(el.attr('data-gs-width'), 10);\n          const currentHeight = parseInt(el.attr('data-gs-height'), 10);\n          const width = widget.get('width');\n          const height = widget.get('height');\n\n          if (currentWidth !== width || currentHeight !== height) {\n            grid.resize(el, width, height);\n          }\n        });\n      });\n    },\n\n    restoreStaticGridSetting() {\n      // gridstack resets to non-static when widgets are added or removed;\n      // this happens even when dashboard model changes, so always set here\n      this.$('.grid-stack').data('gridstack').setStatic(!this.get('isEditing'));\n    },\n\n    updateContentDimensions() {\n      const content = this.$();\n      if (!content) return;\n      this.set('contentWidth', content.innerWidth());\n      this.set('contentHeight', content.innerHeight());\n    },\n\n    onTileGeometryChange: Ember.observer('tileSize', 'tileSpacing', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'restoreWidgetLayout');\n    }),\n    onGridWidthChange: Ember.observer('gridWidth', function () {\n      // in editing mode, we do not respond to window size\n      if (this.get('isEditing')) return;\n      const debounceInterval = this.get('windowResize.debounceInterval');\n      Ember.run.debounce(this, 'restoreWidgetLayout', debounceInterval, false);\n    }),\n    onIsEditingChange: Ember.observer('isEditing', function () {\n      if (this.get('isEditing') === false) {\n        this.restoreWidgetLayout();\n      }\n    }),\n    onDashboardChange: Ember.observer('dashboard', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'restoreWidgetLayout');\n    }),\n\n    onGridStackChange(event, items) {\n      this.restoreStaticGridSetting();\n      if (!items || !this.get('isEditing')) return;\n      const widgets = this.get('dashboard.widgets');\n      items.forEach(gridItem => {\n        const {\n          id,\n          x,\n          y,\n          width,\n          height\n        } = gridItem;\n        const widget = widgets.findBy('id', `${id}`);\n        if (!widget) return;\n        widget.setProperties({\n          x,\n          y,\n          width,\n          height\n        });\n      });\n    },\n\n    actions: {\n      onXButtonClick(widget) {\n        this.get('dashboard').removeWidget(widget);\n        widget.destroy();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/tile-dashboard/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"H66lkeWr\",\n    \"block\": \"{\\\"symbols\\\":[\\\"widget\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"tile-dashboard-content \\\",[21,\\\"tileSizeClass\\\"],\\\" \\\",[21,\\\"tileSpacingClass\\\"],\\\" \\\",[21,\\\"rowsClass\\\"],\\\" \\\",[21,\\\"colsClass\\\"],\\\" \\\",[21,\\\"modeClass\\\"]]]],[9],[0,\\\"\\\\n\\\"],[4,\\\"grid-stack\\\",null,[[\\\"options\\\",\\\"onDragstart\\\",\\\"onDragstop\\\",\\\"onResizestart\\\",\\\"onResizestop\\\"],[[27,\\\"hash\\\",null,[[\\\"animate\\\",\\\"float\\\",\\\"disableOneColumnMode\\\",\\\"width\\\",\\\"minWidth\\\",\\\"verticalMargin\\\",\\\"cellHeight\\\",\\\"resizable\\\",\\\"staticGrid\\\"],[false,true,true,[23,[\\\"gridWidth\\\"]],0,0,[23,[\\\"tileSize\\\"]],[27,\\\"hash\\\",null,[[\\\"handles\\\"],[\\\"n, e, s, w, nw, se, sw\\\"]]],[27,\\\"not\\\",[[23,[\\\"isEditing\\\"]]],null]]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"isDragging\\\"]]],null],true],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"isDragging\\\"]]],null],false],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"isResizing\\\"]]],null],true],null],[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"isResizing\\\"]]],null],false],null]]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"dashboard\\\",\\\"widgets\\\"]]],null,{\\\"statements\\\":[[4,\\\"grid-stack-item\\\",null,[[\\\"id\\\",\\\"options\\\"],[[22,1,[\\\"id\\\"]],[27,\\\"hash\\\",null,[[\\\"id\\\",\\\"x\\\",\\\"y\\\",\\\"height\\\",\\\"width\\\",\\\"minHeight\\\",\\\"minWidth\\\"],[[22,1,[\\\"id\\\"]],[22,1,[\\\"x\\\"]],[22,1,[\\\"y\\\"]],[22,1,[\\\"height\\\"]],[22,1,[\\\"width\\\"]],[22,1,[\\\"type\\\",\\\"minHeight\\\"]],[22,1,[\\\"type\\\",\\\"minWidth\\\"]]]]]]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tile-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isEditing\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-top-left\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-top-middle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-top-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-center-left\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-center-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-bottom-left\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-bottom-middle\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n            \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-square handles handle-bottom-right\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"not\\\",[[27,\\\"or\\\",[[23,[\\\"isEditingPlayback\\\"]],[23,[\\\"isEditingReconcile\\\"]]],null]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[7,\\\"button\\\"],[12,\\\"class\\\",[28,[\\\"x-button data-test-\\\",[22,1,[\\\"typeId\\\"]],\\\"-remove\\\"]]],[9],[0,\\\"\\\\n              ✕\\\\n            \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onXButtonClick\\\",[22,1,[]]]],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"eq\\\",[[22,1,[\\\"typeId\\\"]],\\\"map\\\"],null]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[23,[\\\"isMapWidgetMaximized\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[1,[27,\\\"component\\\",[[27,\\\"get\\\",[[27,\\\"get\\\",[[23,[\\\"widgetTypesHash\\\"]],[22,1,[\\\"typeId\\\"]]],null],\\\"componentName\\\"],null]],[[\\\"widget\\\"],[[22,1,[]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[1,[27,\\\"component\\\",[[27,\\\"get\\\",[[27,\\\"get\\\",[[23,[\\\"widgetTypesHash\\\"]],[22,1,[\\\"typeId\\\"]]],null],\\\"componentName\\\"],null]],[[\\\"widget\\\"],[[22,1,[]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/tile-dashboard/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    timeSpan: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    classNames: ['timeline-picker'],\n    zoomPercent: 50,\n    minZoomPercent: 25,\n    maxZoomPercent: 100,\n    zoomPercentStep: 1,\n    proposedStartDate: null,\n    proposedEndDate: null,\n    isRelative: null,\n    isFullAccess: true,\n    fieldValidity: null,\n    areFieldsValid: Ember.computed('fieldValidity.{startDate,endDate,calendar}', function () {\n      // body\n\n      /*eslint-disable */\n      const fv = this.get('fieldValidity');\n\n      for (let state in fv) {\n        if (fv[state] === false) {\n          return false;\n        }\n      }\n      /*eslint-enable */\n\n\n      return true;\n    }),\n    isAbsoluteMode: true,\n    minusValue: Ember.computed('timeSpan.minusValue', function () {\n      return this.get('timeSpan.minusValue');\n    }),\n    plusValue: Ember.computed('timeSpan.plusValue', function () {\n      return this.get('timeSpan.plusValue');\n    }),\n    closeTimelinePicker: Ember.observer('workspace.isDispatchDashboard', function () {\n      this.send('close');\n    }),\n    canChooseRelative: Ember.computed('proposedStartDate', 'proposedEndDate', function () {\n      const start = this.get('proposedStartDate').getTime();\n      const end = this.get('proposedEndDate').getTime();\n      const now = Date.now();\n\n      if (now <= start || now > end) {\n        return false;\n      }\n\n      return true;\n    }),\n\n    updateTimeSpanService(minusValue, plusValue) {\n      this.get('timeSpan').setSpanMillis(minusValue, plusValue);\n    },\n\n    stopTimeSpanService() {\n      this.get('timeSpan').stopInterval();\n    },\n\n    init() {\n      this._super(...arguments);\n\n      const startDate = this.get('workspace.startDate');\n      const proposedStartDate = new Date();\n      proposedStartDate.setTime(startDate.getTime());\n      this.set('proposedStartDate', proposedStartDate);\n      const endDate = this.get('workspace.endDate');\n      const proposedEndDate = new Date();\n      proposedEndDate.setTime(endDate.getTime());\n      this.set('proposedEndDate', proposedEndDate);\n      this.set('isRelative', this.get('timeSpan.isTimeSpanRunning'));\n      this.set('fieldValidity', {});\n      const isFullAccess = this.store.peekAll('cs-config-permission').get('firstObject.isFullAccessTimeline');\n      this.set('isFullAccess', isFullAccess);\n    },\n\n    async reInitializeStore() {\n      const store = this.store;\n      const workspace = this.get('workspace');\n      const topActiveContext = this.get('activeContext.topActiveContext'); // clear active context traversal\n\n      topActiveContext.reset();\n      await this.get('notifications').get('monitorForEmergencyTask').cancelAll(); // dump ember store\n\n      await Ember.run(() => store.init()); // dump all widget data\n\n      topActiveContext.trigger('clear');\n      await Ember.run.next(async () => {\n        await this.get('store').findAll('cs-config-category');\n        await this.get('store').findAll('cs-config-item');\n        await store.findAll('cs-config-permission').then(configPermissions => {\n          return workspace.set('configPermissions', configPermissions.get('firstObject.value'));\n        });\n        this.updateTimeRange();\n        this.get('notifications').get('monitorForEmergencyTask').perform();\n      });\n    },\n\n    updateTimeRange() {\n      const newStartDate = this.get('proposedStartDate');\n      const newEndDate = this.get('proposedEndDate');\n\n      if (this.get('isRelative') && this.get('canChooseRelative')) {\n        const now = Date.now();\n        this.updateTimeSpanService(now - newStartDate.getTime(), newEndDate.getTime() - now);\n      } else {\n        this.stopTimeSpanService();\n        this.set('workspace.startDate', newStartDate);\n        this.set('workspace.endDate', newEndDate);\n      }\n\n      this.send('close');\n      this.get('workspace').saveTempDashboardState();\n    },\n\n    actions: {\n      onZoomPercentChange(zoomPercent) {\n        this.set('zoomPercent', parseInt(zoomPercent, 10));\n      },\n\n      checkValidity() {\n        return this.get('areFieldsValid');\n      },\n\n      onCloseButtonClick() {\n        this.send('close');\n      },\n\n      async onApplyButtonClick() {\n        if (this.get('areFieldsValid')) {\n          const newStartDate = this.get('proposedStartDate');\n          const newEndDate = this.get('proposedEndDate');\n          const topActiveContext = this.get('activeContext.topActiveContext');\n          const activeContextNodes = topActiveContext.get('nodes') || [];\n\n          if (this.get('isRelative') && this.get('canChooseRelative')) {\n            const now = Date.now();\n            this.updateTimeSpanService(now - newStartDate.getTime(), newEndDate.getTime() - now);\n          } else {\n            this.stopTimeSpanService();\n            this.set('workspace.startDate', newStartDate);\n            this.set('workspace.endDate', newEndDate);\n          }\n\n          this.send('close');\n          this.get('workspace').saveTempDashboardState();\n          this.get('widget').globalFilterChanged();\n          topActiveContext.clearCheckedItems();\n          activeContextNodes.reduce((obj, node) => {\n            this.get('workspaceContext').trigger('change', [node.modelName]);\n          });\n        }\n      },\n\n      onChangeAbsoluteCheckBox() {\n        this.toggleProperty('isRelative');\n      },\n\n      close() {\n        const workspace = this.get('workspace');\n        workspace.toggleProperty('isEditingTimeline');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/date-picker/component\", [\"exports\", \"moment\", \"adept-iq/utils/encoding\", \"adept-iq/config/environment\"], function (_exports, _moment, _encoding, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DATE_FORMAT = `ddd ${_environment.default.dateTimeFormat.dateMoment}`;\n  const KEY_CODE_ENTER = 13;\n  const INVALID_DATE_STRING = 'Invalid';\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    classNames: ['timeline-date-picker', 'data-test-timeline-date-picker'],\n    classNameBindings: ['isValid', 'isInvalid', 'isDirty'],\n    startDate: null,\n    endDate: null,\n    fieldValidityObject: null,\n    dateString: null,\n    rangeStart: null,\n    rangeEnd: null,\n    isValid: Ember.computed.readOnly('isDateStringValid'),\n    isInvalid: Ember.computed.not('isValid'),\n    isDirty: Ember.computed.readOnly('isDateStringDirty'),\n    isDateStringValid: Ember.computed('dateString', function () {\n      const dateString = this.get('dateString');\n      return this.validateDateString(dateString);\n    }),\n    isDateStringDirty: Ember.computed('dateString', 'startDate', 'endDate', function () {\n      const dateString = this.get('dateString');\n      if (!this.validateDateString(dateString)) return true; // take the provided dates, build a date string, then parse it\n\n      const startDate = this.get('startDate');\n      const endDate = this.get('endDate');\n      const effectiveDateString = this.buildDateString(startDate, endDate);\n      const [effectiveStartDate, effectiveEndDate] = this.parseDateString(effectiveDateString); // compare against the parsed values from the current time string\n\n      const [encodedStartDate, encodedEndDate] = this.parseDateString(dateString); // string is dirty when parsed times don't match\n\n      return effectiveStartDate.getTime() !== encodedStartDate.getTime() || effectiveEndDate.getTime() !== encodedEndDate.getTime();\n    }),\n    isRangeStartDirty: Ember.computed('rangeStart', 'startDate', function () {\n      const rangeStart = this.get('rangeStart');\n      if (!rangeStart) return true;\n      const startDate = this.get('startDate');\n      const start = (0, _moment.default)(startDate).startOf('day');\n      return start.valueOf() !== rangeStart.valueOf();\n    }),\n    isRangeEndDirty: Ember.computed('rangeStart', 'rangeEnd', 'endDate', function () {\n      const rangeStart = this.get('rangeStart');\n      if (!rangeStart) return true;\n      const rangeEnd = this.get('rangeEnd');\n      const endDate = this.get('endDate');\n      const end = (0, _moment.default)(endDate).startOf('day'); // it's ok for no end to be specified, so long as window is single date\n\n      if (!rangeEnd) {\n        return end.valueOf() !== rangeStart.valueOf();\n      }\n\n      return end.valueOf() !== rangeEnd.valueOf();\n    }),\n    center: Ember.computed('startDate', function () {\n      const startDate = this.get('startDate');\n      return (0, _moment.default)(startDate).startOf('day');\n    }),\n\n    didReceiveAttrs() {\n      this._super(...arguments);\n\n      const startDate = this.get('startDate');\n      const endDate = this.get('endDate');\n\n      if (this.get('isDateStringDirty')) {\n        const dateString = this.buildDateString(startDate, endDate);\n        this.set('dateString', dateString);\n      } // check this before rangeStart!\n\n\n      if (this.get('isRangeEndDirty')) {\n        const rangeEnd = (0, _moment.default)(endDate).startOf('day');\n        this.set('rangeEnd', rangeEnd);\n      }\n\n      if (this.get('isRangeStartDirty')) {\n        const rangeStart = (0, _moment.default)(startDate).startOf('day');\n        this.set('rangeStart', rangeStart);\n      }\n    },\n\n    buildDateString(startDate, endDate) {\n      let start = (0, _moment.default)(startDate);\n      let end = (0, _moment.default)(endDate);\n      if (!start.isValid() || !end.isValid()) return INVALID_DATE_STRING;\n      start = start.startOf('day');\n      end = end.startOf('day');\n\n      if (start.valueOf() === end.valueOf()) {\n        return start.format(DATE_FORMAT);\n      }\n\n      return `${start.format(DATE_FORMAT)} to ${end.format(DATE_FORMAT)}`;\n    },\n\n    validateDateString(dateString) {\n      if (Ember.typeOf(dateString) !== 'string') return false;\n\n      if (dateString.includes(' to ')) {\n        const arr = dateString.split(' to ');\n        if (arr.length !== 2) return false;\n        if (!arr.every(_encoding.isEncodedDate)) return false;\n        const [startDate, endDate] = arr.map(_encoding.parseDate);\n        return startDate.getTime() <= endDate.getTime();\n      }\n\n      return (0, _encoding.isEncodedDate)(dateString);\n    },\n\n    parseDateString(dateString) {\n      let start, end;\n\n      if (dateString.includes(' to ')) {\n        const [startString, endString] = dateString.split(' to ');\n        start = (0, _moment.default)(startString).startOf('day');\n        end = (0, _moment.default)(endString).endOf('day');\n      } else {\n        start = (0, _moment.default)(dateString).startOf('day');\n        end = start.clone().endOf('day');\n      }\n\n      return [start.toDate(), end.toDate()];\n    },\n\n    checkValidity(startDate, endDate) {\n      if ((0, _moment.default)(startDate).format('YYYY-MM-DD') > (0, _moment.default)(endDate).format('YYYY-MM-DD')) {\n        return false;\n      }\n\n      return true;\n    },\n\n    setDates(startDate, endDate) {\n      // first: get the hours of the existing dates and apply those\n      const existingStart = this.get('startDate');\n      startDate.setHours(existingStart.getHours());\n      startDate.setMinutes(existingStart.getMinutes());\n      const existingEnd = this.get('endDate');\n      endDate.setHours(existingEnd.getHours());\n      endDate.setMinutes(existingEnd.getMinutes());\n      this.set('fieldValidityObject.calendar', this.checkValidity(startDate, endDate));\n      this.set('startDate', startDate);\n      this.set('endDate', endDate);\n    },\n\n    actions: {\n      onInputTextChange(text) {\n        this.set('dateString', text);\n      },\n\n      onKeydown(keyCode) {\n        if (keyCode === KEY_CODE_ENTER && this.get('isDateStringValid')) {\n          const dateString = this.get('dateString');\n          const [startDate, endDate] = this.parseDateString(dateString);\n          this.setDates(startDate, endDate);\n        }\n      },\n\n      onYesterdayButtonClick(dropdown) {\n        dropdown.actions.close();\n        const start = (0, _moment.default)().startOf('day').subtract(1, 'day');\n        const end = start.clone().endOf('day');\n        this.setDates(start.toDate(), end.toDate());\n      },\n\n      onTodayButtonClick(dropdown) {\n        dropdown.actions.close();\n        const start = (0, _moment.default)().startOf('day');\n        const end = start.clone().endOf('day');\n        this.setDates(start.toDate(), end.toDate());\n      },\n\n      onTomorrowButtonClick(dropdown) {\n        dropdown.actions.close();\n        const start = (0, _moment.default)().startOf('day').add(1, 'day');\n        const end = start.clone().endOf('day');\n        this.setDates(start.toDate(), end.toDate());\n      },\n\n      onRangeSelect(range) {\n        this.set('rangeStart', range.start);\n        this.set('rangeEnd', range.end);\n        let end;\n\n        if (range.end) {\n          end = range.end.clone().endOf('day');\n        } else {\n          end = range.start.clone().endOf('day');\n        }\n\n        this.setDates(range.start.toDate(), end.toDate());\n      },\n\n      onDoneButtonClick(dropdown) {\n        dropdown.actions.close();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/date-picker/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"TCfydxyM\",\n    \"block\": \"{\\\"symbols\\\":[\\\"dropdown\\\",\\\"calendar\\\"],\\\"statements\\\":[[4,\\\"basic-dropdown\\\",null,null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isFullAccess\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"input\\\"],[12,\\\"data-ebd-id\\\",[28,[[22,1,[\\\"uniqueId\\\"]],\\\"-trigger\\\"]]],[12,\\\"class\\\",[28,[\\\"timeline-date-picker-input \\\",[27,\\\"if\\\",[[23,[\\\"isValid\\\"]],\\\"is-valid\\\",\\\"is-invalid\\\"],null],\\\" \\\",[27,\\\"if\\\",[[23,[\\\"isDirty\\\"]],\\\"is-dirty\\\",\\\"is-clean\\\"],null]]]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"dateString\\\"]]],null]],[12,\\\"onclick\\\",[22,1,[\\\"actions\\\",\\\"open\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputTextChange\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onKeydown\\\"],[[\\\"value\\\"],[\\\"keyCode\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"input\\\"],[12,\\\"data-ebd-id\\\",[28,[[22,1,[\\\"uniqueId\\\"]],\\\"-trigger\\\"]]],[12,\\\"class\\\",[28,[\\\"timeline-date-picker-input \\\",[27,\\\"if\\\",[[23,[\\\"isValid\\\"]],\\\"is-valid\\\",\\\"is-invalid\\\"],null],\\\" \\\",[27,\\\"if\\\",[[23,[\\\"isDirty\\\"]],\\\"is-dirty\\\",\\\"is-clean\\\"],null]]]],[11,\\\"disabled\\\",\\\"\\\"],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"dateString\\\"]]],null]],[12,\\\"onclick\\\",[22,1,[\\\"actions\\\",\\\"open\\\"]]],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onInputTextChange\\\"],null]],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[12,\\\"onkeydown\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onKeydown\\\"],[[\\\"value\\\"],[\\\"keyCode\\\"]]]],[11,\\\"type\\\",\\\"text\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"component\\\",[[27,\\\"-assert-implicit-component-helper-argument\\\",[[22,1,[\\\"content\\\"]],\\\"expected `dropdown.content` to be a contextual component but found a string. Did you mean `(component dropdown.content)`? ('adept-iq/pods/components/timeline-picker/date-picker/template.hbs' @ L21:C5) \\\"],null]],[[\\\"class\\\"],[\\\"timeline-date-picker-dropdown\\\"]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"power-calendar-range\\\",null,[[\\\"class\\\",\\\"center\\\",\\\"minRange\\\",\\\"onCenterChange\\\",\\\"selected\\\",\\\"onSelect\\\"],[\\\"timeline-date-picker-calendar\\\",[23,[\\\"center\\\"]],0,[27,\\\"action\\\",[[22,0,[]],[27,\\\"mut\\\",[[23,[\\\"center\\\"]]],null]],[[\\\"value\\\"],[\\\"date\\\"]]],[27,\\\"hash\\\",null,[[\\\"start\\\",\\\"end\\\"],[[23,[\\\"rangeStart\\\"]],[23,[\\\"rangeEnd\\\"]]]]],[27,\\\"action\\\",[[22,0,[]],[27,\\\"action\\\",[[22,0,[]],\\\"onRangeSelect\\\"],null]],[[\\\"value\\\"],[\\\"moment\\\"]]]]],{\\\"statements\\\":[[0,\\\"\\\\n      \\\"],[1,[22,2,[\\\"nav\\\"]],false],[0,\\\"\\\\n      \\\"],[1,[22,2,[\\\"days\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/timeline-picker/date-picker/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/relative-time-input/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: 'span',\n    classNames: ['timeline-relative-time-picker', 'data-test-timeline-relative-time-picker'],\n    classNameBindings: ['isValid', 'isInvalid', 'isDirty'],\n    value: null,\n    isValid: Ember.computed('value', function () {\n      // The <input type=\"number\"> will return '' when the input is invalid.\n      // The <input type=\"number\"> will allow floating point numbers: decimal point and engineering notation.\n      return /^[0-9]+$/.test(this.get('value'));\n    }),\n    isInvalid: Ember.computed.not('isValid'),\n    actions: {\n      setValue() {\n        const val = this.$('input').val();\n        this.set('value', val);\n        this.set('isDirty', true);\n      },\n\n      update(event) {\n        if (event.key === 'Enter' || event.type === 'blur') {\n          this.set('isDirty', false);\n\n          if (this.get('isValid')) {\n            this.sendAction('onUpdateValue', this.get('value')); // eslint-disable-line ember/closure-actions\n          } else {\n            this.sendAction('onUpdateValue', null); // eslint-disable-line ember/closure-actions\n          }\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/relative-time-input/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"7JRnySfQ\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"input\\\"],[11,\\\"class\\\",\\\"timeline-relative-time-picker-input\\\"],[12,\\\"oninput\\\",[27,\\\"action\\\",[[22,0,[]],\\\"setValue\\\"],null]],[12,\\\"onkeyup\\\",[27,\\\"action\\\",[[22,0,[]],\\\"update\\\"],null]],[12,\\\"onblur\\\",[27,\\\"action\\\",[[22,0,[]],\\\"update\\\"],null]],[12,\\\"value\\\",[27,\\\"readonly\\\",[[23,[\\\"value\\\"]]],null]],[11,\\\"type\\\",\\\"number\\\"],[9],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/timeline-picker/relative-time-input/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/relative-time-picker/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    tagName: '',\n    minusValue: null,\n    plusValue: null,\n\n    updateTimeline() {\n      if (!(this.get('minusValue') === null || this.get('plusValue') === null)) {\n        this.sendAction('onSpanChange', this.get('minusValue'), this.get('plusValue')); // eslint-disable-line ember/closure-actions\n      }\n    },\n\n    actions: {\n      onUpdateMinusValue(value) {\n        this.set('minusValue', value);\n        this.updateTimeline();\n      },\n\n      onUpdatePlusValue(value) {\n        this.set('plusValue', value);\n        this.updateTimeline();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/relative-time-picker/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"XrYV7ajc\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-picker-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"strong\\\"],[9],[0,\\\"-\\\"],[10],[0,\\\"\\\\n  \\\"],[1,[27,\\\"timeline-picker/relative-time-input\\\",null,[[\\\"value\\\",\\\"onUpdateValue\\\"],[[27,\\\"readonly\\\",[[23,[\\\"minusValue\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdateMinusValue\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-picker-wrapper\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"strong\\\"],[9],[0,\\\"+\\\"],[10],[0,\\\"\\\\n  \\\"],[1,[27,\\\"timeline-picker/relative-time-input\\\",null,[[\\\"value\\\",\\\"onUpdateValue\\\"],[[27,\\\"readonly\\\",[[23,[\\\"plusValue\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdatePlusValue\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/timeline-picker/relative-time-picker/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"rfaVyOsU\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"controls-row\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"timeline-picker/time-picker\\\",null,[[\\\"startDate\\\",\\\"endDate\\\",\\\"editingDateProperty\\\",\\\"fieldValidityObject\\\",\\\"isFullAccess\\\",\\\"fieldValidityCheck\\\"],[[23,[\\\"proposedStartDate\\\"]],[23,[\\\"proposedEndDate\\\"]],\\\"startDate\\\",[23,[\\\"fieldValidity\\\"]],[23,[\\\"isFullAccess\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"checkValidity\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"date-picker-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"timeline-picker/date-picker\\\",null,[[\\\"startDate\\\",\\\"endDate\\\",\\\"isFullAccess\\\",\\\"fieldValidityObject\\\"],[[23,[\\\"proposedStartDate\\\"]],[23,[\\\"proposedEndDate\\\"]],[23,[\\\"isFullAccess\\\"]],[23,[\\\"fieldValidity\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[1,[27,\\\"timeline-picker/time-picker\\\",null,[[\\\"startDate\\\",\\\"endDate\\\",\\\"editingDateProperty\\\",\\\"fieldValidityObject\\\",\\\"isFullAccess\\\",\\\"fieldValidityCheck\\\"],[[23,[\\\"proposedStartDate\\\"]],[23,[\\\"proposedEndDate\\\"]],\\\"endDate\\\",[23,[\\\"fieldValidity\\\"]],[23,[\\\"isFullAccess\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"checkValidity\\\"],null]]]],false],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"relative-checkbox-section\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"canChooseRelative\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"label\\\"],[9],[7,\\\"input\\\"],[11,\\\"id\\\",\\\"absolute\\\"],[11,\\\"name\\\",\\\"time-selection-mode\\\"],[12,\\\"checked\\\",[27,\\\"readonly\\\",[[23,[\\\"isRelative\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onChangeAbsoluteCheckBox\\\"],null]],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"Progress window with current time (every 15 minutes)\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"label\\\"],[11,\\\"class\\\",\\\"greyed\\\"],[9],[7,\\\"input\\\"],[11,\\\"disabled\\\",\\\"\\\"],[11,\\\"type\\\",\\\"checkbox\\\"],[9],[10],[0,\\\"Progress window with current time (every 15 minutes)\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"spacer\\\"],[9],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-primary-simple\\\"],[12,\\\"disabled\\\",[27,\\\"unless\\\",[[23,[\\\"areFieldsValid\\\"]],\\\"true\\\"],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onApplyButtonClick\\\"],null]],[9],[0,\\\"\\\\n    Apply\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-outline-primary-simple\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onCloseButtonClick\\\"],null]],[9],[0,\\\"\\\\n    Close\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/timeline-picker/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/time-bar/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    workspace: Ember.inject.service(),\n    classNames: ['bar', 'data-test-bar'],\n\n    /* one 24-hour day */\n    numIncrements: 24,\n    startDateAbbrev: Ember.computed('startDate', function () {\n      return this.get('startDate').toDateString();\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      const parentEl = this.$(); // To keep the zoomPercent related to the original size.\n\n      this.set('baseLineWidth', parentEl.width());\n      parentEl.css('width', `${parentEl.width() * this.get('zoomPercent') / 100}px`);\n      this.set('parentWidth', parentEl.width());\n      this.resetAllElements();\n    },\n\n    setDates(startDate, endDate) {\n      Ember.run.scheduleOnce('afterRender', this, 'onDatesChange', startDate, endDate);\n    },\n\n    resetAllElements() {\n      this.insertTimeScale();\n      this.insertTimeIncrements();\n      this.setLeftHandle();\n      this.setRightHandle();\n      this.setNowMarker();\n      this.insertOperatingBox();\n    },\n\n    insertTimeScale() {\n      const rowEl = this.$('#time-scale-row'); // Clear out the old cells before we add new ones.\n\n      rowEl.empty();\n      const numIncrements = this.get('numIncrements');\n      const cellWidth = Math.floor(this.get('parentWidth') / numIncrements);\n      const startEndCell = `<td style=\"width:${cellWidth / 2}px\"></td>`;\n      rowEl.append(startEndCell);\n\n      for (let i = 1; i < numIncrements; i++) {\n        const cell = `<td class=\"time-scale-cell\" style=\"width:${cellWidth}px\">${i}:00</td>`;\n        rowEl.append(cell);\n      }\n\n      rowEl.append(startEndCell);\n    },\n\n    insertTimeIncrements() {\n      const rowEl = this.$('#increment-row');\n      rowEl.empty();\n      const numIncrements = this.get('numIncrements');\n      const cellWidth = Math.floor(this.get('parentWidth') / numIncrements);\n      const cell = `<td class=\"time-bar-increment\" style=\"width:${cellWidth}px\"></td>`;\n\n      for (let i = 0; i < numIncrements; i++) {\n        rowEl.append(cell);\n      }\n    },\n\n    setLeftHandle() {\n      const leftHandle = this.$('.time-bar-handle-left');\n      const startDate = this.get('startDate');\n      const decimalTime = startDate.getHours() + startDate.getMinutes() / 60;\n      const leftPosition = Math.floor(this.get('parentWidth') / 24 * decimalTime);\n      leftHandle.css('left', `${leftPosition}px`);\n    },\n\n    setRightHandle() {\n      const rightHandle = this.$('.time-bar-handle-right');\n      const offset = rightHandle.width();\n      const endDate = this.get('endDate');\n      const decimalTime = endDate.getHours() + endDate.getMinutes() / 60;\n      const rightPosition = Math.floor(this.get('parentWidth') / 24 * decimalTime) - offset;\n      rightHandle.css('left', `${rightPosition}px`);\n    },\n\n    setNowMarker() {\n      const newMarker = this.$('.time-bar-now-marker'); // Arbitrarily picking 12:00PM,\n\n      const leftPosition = Math.floor(this.get('parentWidth') / 24 * 12);\n      newMarker.css('left', `${leftPosition}px`);\n    },\n\n    insertOperatingBox() {\n      const operatingBox = this.$('.time-bar-operating-box'); // The agency begins operations at 9:00am.\n\n      const leftPosition = Math.floor(this.get('parentWidth') / 24 * 9); // THe agency operates 8 hours / day.\n\n      const boxWidth = Math.floor(this.get('parentWidth') / 24 * 8);\n      operatingBox.css('left', `${leftPosition}px`);\n      operatingBox.css('width', `${boxWidth}px`);\n    },\n\n    startDateObserver: Ember.observer('startDate', function () {\n      this.setLeftHandle();\n    }),\n    endDateObserver: Ember.observer('endDate', function () {\n      this.setRightHandle();\n    }),\n    zoomObserver: Ember.observer('zoomPercent', function () {\n      const parentEl = this.$();\n      parentEl.css('width', `${this.get('baseLineWidth') * this.get('zoomPercent') / 100}px`);\n      this.set('parentWidth', parentEl.width());\n      this.resetAllElements();\n    }),\n\n    dragEnd(event) {\n      const target = this.$(`#${event.originalEvent.target.id}`);\n      const startingPosition = parseInt(target.css('left').replace(/px/, ''), 10);\n      const newPosition = startingPosition + event.originalEvent.offsetX;\n\n      switch (event.originalEvent.target.id) {\n        case 'left-handle':\n          {\n            // Gives a fractional hour.\n            const startDate = new Date(this.get('startDate').getTime());\n            const newTime = this.convertTime(newPosition / (this.get('parentWidth') / 24));\n            startDate.setHours(newTime.hours, newTime.minutes, 0);\n            this.setDates(startDate, this.get('endDate'));\n            break;\n          }\n\n        case 'right-handle':\n          {\n            const endDate = new Date(this.get('endDate').getTime());\n            const newTime = this.convertTime(newPosition / (this.get('parentWidth') / 24));\n            endDate.setHours(newTime.hours, newTime.minutes, 0);\n            this.setDates(this.get('startDate'), endDate);\n            break;\n          }\n\n        case 'now-marker':\n          {\n            target.css('left', `${newPosition}px`);\n            break;\n          }\n\n        default:\n          break;\n      }\n    },\n\n    convertTime(decimal) {\n      const hours = Math.floor(decimal / 24);\n      const minutes = Math.floor(decimal * 60);\n      return {\n        hours: hours,\n        minutes: minutes\n      };\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/time-bar/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"HoCYBhqi\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[9],[1,[21,\\\"startDateAbbrev\\\"],false],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-bar-handle-left\\\"],[11,\\\"draggable\\\",\\\"true\\\"],[11,\\\"id\\\",\\\"left-handle\\\"],[9],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-bar-handle-right\\\"],[11,\\\"draggable\\\",\\\"true\\\"],[11,\\\"id\\\",\\\"right-handle\\\"],[9],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-bar-now-marker\\\"],[11,\\\"draggable\\\",\\\"true\\\"],[11,\\\"id\\\",\\\"now-marker\\\"],[9],[10],[0,\\\"\\\\n\\\\n\\\"],[7,\\\"table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[11,\\\"id\\\",\\\"time-scale-row\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"table\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"tr\\\"],[11,\\\"id\\\",\\\"increment-row\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-bar-operating-box-background\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"time-bar-operating-box\\\"],[9],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/timeline-picker/time-bar/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/time-picker/component\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['time-picker-wrapper'],\n    classNameBindings: ['isValid', 'isInvalid', 'isDirty'],\n    timePickerOptions: Ember.computed('startDate', 'endDate', 'editingDateProperty', function () {\n      return {\n        timeFormat: 'HH:mm',\n        dropdown: true,\n        interval: 30,\n        scrollbar: true,\n        defaultTime: this.get(this.get('editingDateProperty'))\n      };\n    }),\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      if (!this.get('isFullAccess')) {\n        this.$().find('.ember-timepicker').prop('disabled', true);\n      }\n    },\n\n    isValid: Ember.computed('fieldValidityObject.{startDate,endDate}', function () {\n      const fieldValidityObj = this.get('fieldValidityObject');\n      const editingDateProperty = this.get('editingDateProperty');\n\n      if (fieldValidityObj[editingDateProperty] === false) {\n        return false;\n      }\n\n      return true;\n    }),\n    startDate: null,\n    endDate: null,\n    editingDateProperty: null,\n    fieldValidityObject: null,\n    timeString: null,\n    actions: {\n      onTimeChange(selectedTime) {\n        const propertyName = this.get('editingDateProperty');\n        const editingDate = this.get(propertyName);\n        const selectedDate = new Date(editingDate.getTime());\n        selectedDate.setHours(selectedTime.getHours());\n        selectedDate.setMinutes(selectedTime.getMinutes());\n\n        if (propertyName === 'startDate') {\n          selectedDate.setSeconds(0);\n          selectedDate.setMilliseconds(0);\n        } else {\n          selectedDate.setSeconds(59);\n          selectedDate.setMilliseconds(999);\n        } // do validation here!\n\n\n        if (editingDate.getTime() === selectedDate.getTime()) {\n          // nothing changed\n          this.set(`fieldValidityObject.${propertyName}`, true);\n        } else if (propertyName === 'startDate') {\n          const endDate = this.get('endDate');\n\n          if (selectedDate > endDate) {\n            this.set(`fieldValidityObject.${propertyName}`, false);\n            this.set('startDate', selectedDate);\n          } else {\n            this.set(`fieldValidityObject.${propertyName}`, true);\n            this.set('startDate', selectedDate);\n          }\n        } else {\n          // endDate being set\n          const startDate = this.get('startDate');\n\n          if (selectedDate < startDate) {\n            this.set(`fieldValidityObject.${propertyName}`, false);\n            this.set('endDate', selectedDate);\n          } else {\n            this.set(`fieldValidityObject.${propertyName}`, true);\n            this.set('endDate', selectedDate);\n          }\n        }\n\n        this.get('isValid');\n        this.get('fieldValidityCheck')();\n      },\n\n      onLastHourButtonClick(dropdown) {\n        dropdown.actions.close();\n        const end = (0, _moment.default)().startOf('minute');\n        const start = end.clone().subtract(1, 'hour');\n        this.setDates(start.toDate(), end.toDate());\n      },\n\n      onNowButtonClick(dropdown) {\n        dropdown.actions.close();\n        const start = (0, _moment.default)();\n        const end = start.clone().add(1, 'hour');\n        this.setDates(start.toDate(), end.toDate());\n      },\n\n      onNextTwoHoursButtonClick(dropdown) {\n        dropdown.actions.close();\n        const start = (0, _moment.default)();\n        const end = start.clone().add(2, 'hour');\n        this.setDates(start.toDate(), end.toDate());\n      },\n\n      onDoneButtonClick(dropdown) {\n        dropdown.actions.close();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/timeline-picker/time-picker/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Kxsg8yHc\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"timeline-time-picker \\\",[27,\\\"if\\\",[[23,[\\\"isValid\\\"]],\\\"\\\",\\\"is-invalid\\\"],null]]]],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"ember-timepicker\\\",null,[[\\\"onChange\\\",\\\"options\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"onTimeChange\\\"],null],[23,[\\\"timePickerOptions\\\"]]]]],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/timeline-picker/time-picker/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/toggle-switch/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['toggle-switch'],\n    classNameBindings: ['isActive'],\n    toggleProperty: null,\n    onValue: true,\n    onLabel: null,\n    offValue: false,\n    offLabel: null,\n    disabled: false,\n    isActive: Ember.computed('toggleProperty', 'onValue', function () {\n      return this.get('toggleProperty') === this.get('onValue');\n    }),\n\n    setOn() {\n      this.set('toggleProperty', this.get('onValue'));\n    },\n\n    setOff() {\n      this.set('toggleProperty', this.get('offValue'));\n    },\n\n    actions: {\n      on() {\n        this.setOn();\n      },\n\n      off() {\n        this.setOff();\n      },\n\n      toggle() {\n        const disabled = this.get('disabled');\n\n        if (!disabled) {\n          const currentValue = this.get('toggleProperty');\n\n          if (currentValue === this.get('onValue')) {\n            this.setOff();\n          } else {\n            this.setOn();\n          }\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/toggle-switch/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"57cLJDZT\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"span\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[1,[21,\\\"offLabel\\\"],false],[3,\\\"action\\\",[[22,0,[]],\\\"off\\\"]],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"track\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"toggle\\\"],null]],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"button \\\",[27,\\\"if\\\",[[23,[\\\"disabled\\\"]],\\\"is-disabled\\\"],null]]]],[9],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"label\\\"],[9],[1,[21,\\\"onLabel\\\"],false],[3,\\\"action\\\",[[22,0,[]],\\\"on\\\"]],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/toggle-switch/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/wootric-survey/component\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    user: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // eslint-disable-next-line ember/no-function-prototype-extensions\n    setup: function () {\n      const email = this.get('session.data.authenticated.tokenInfo.email') || localStorage.getItem('currentUser');\n      const workspace = localStorage.getItem('lastDashboardId');\n      const roles = this.get('user.roles').join(',');\n      window.wootricSettings = {\n        account_token: _environment.default.APP.WOOTRIC_TOKEN,\n        email: email,\n        // created_at: Math.floor(Date.now() / 1000),\n        properties: {\n          workspace,\n          roles\n        },\n        event_name: ''\n      };\n    }.on('init')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/wootric-survey/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"K/lnRNlO\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/wootric-survey/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar-reconcile-csv-only/component\", [\"exports\", \"moment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/pods/components/workspace-navbar-reconcile-csv-only/config\", \"papaparse\"], function (_exports, _moment, _mappedPermIds, _config, _papaparse) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['workspace-navbar'],\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    config: null,\n    timeFormat: 'm-d-Y',\n    submitBtnClicked: false,\n    uploadBinary: null,\n    uploadInput: null,\n    reconcileAction: null,\n    isReviewButton: Ember.computed.equal('reconcileAction', 'review'),\n    isReviewButtonReady: Ember.computed.and('isReviewButton', 'dwhService.reconcileDate'),\n    isReconExport: Ember.computed.equal('reconcileAction', 'export'),\n    isReconExportReady: Ember.computed.and('isReconExport', 'dwhService.reconcileDate'),\n    isReconImport: Ember.computed.equal('reconcileAction', 'import'),\n    isReconImportReady: Ember.computed.and('isReconImport', 'dwhService.reconcileDate'),\n    isReconImportFileReady: Ember.computed.and('isReconImportReady', 'uploadBinary'),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('reconcileAction', 'review');\n      Ember.set(this, 'selectedDateTimeRage', {\n        today: (0, _moment.default)().subtract(1, 'day').format('MM-DD-YYYY'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(6, 'months').format('MM-DD-YYYY')\n      });\n      this.set('config', _config.default);\n      this.configurePermission();\n    },\n\n    configurePermission() {\n      Ember.set(this, 'isAddNewRouteAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.addNewRouteRecon, null));\n      Ember.set(this, 'isCloseDateAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.closeEditDateRecon, null));\n      Ember.set(this, 'isReopenDateAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.reopenEditDateRecon, null));\n      Ember.set(this, 'isSearchByClientAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByClientRecon, null));\n      Ember.set(this, 'isSearchByDriverAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByDriverRecon, null));\n      Ember.set(this, 'isSearchByVehicleAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByVehicleRecon, null));\n      Ember.set(this, 'isSearchByAddressAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByAddrRecon, null));\n      Ember.set(this, 'isSearchByTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByTripRecon, null));\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    async exportToCsv() {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const date = this.get('dwhService.reconcileDate');\n        const dateString = (0, _moment.default)(date).format('YYYY-MM-DD');\n        const data = await this.get('dwhService').fetchDwhStops(dateString);\n        const columns = this.get('config.columns').map(c => c.id);\n        const emptyObj = columns.reduce((obj, c) => {\n          obj[c] = '';\n          return obj;\n        }, {});\n        const dataWithBlankColumns = data.map(d => {\n          return { ...emptyObj,\n            ...d\n          };\n        });\n\n        const csv = _papaparse.default.unparse(dataWithBlankColumns, {\n          quotes: true,\n          quoteChar: '\"',\n          escapeChar: '\"',\n          escapeFormulae: true,\n          columns\n        });\n\n        const link = document.createElement('a');\n        const filename = `${dateString}.csv`;\n        const blob = new Blob([csv], {\n          type: 'text/csv;charset=utf-8;'\n        });\n        const url = URL.createObjectURL(blob);\n        link.setAttribute('href', url);\n        link.setAttribute('download', filename);\n        link.style.visibility = 'hidden';\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n        await this.createUserReconExportLog(date);\n      } catch (e) {\n        this.get('notifications').warning(e);\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    async importFromCsv() {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const date = this.get('dwhService.reconcileDate');\n        const dateString = (0, _moment.default)(date).format('YYYY-MM-DD');\n        const uploadBinary = this.get('uploadBinary');\n        await this.get('dwhService').patchDwhStops(dateString, uploadBinary);\n        await this.createUserReconImportLog();\n\n        if (this.get('uploadInput')) {\n          this.get('uploadInput').value = null;\n          this.set('uploadBinary', null);\n        }\n\n        this.get('notifications').success('UPLOAD SUCCESS');\n      } catch (e) {\n        const missingRecordIds = e?.payload?.data?.[0]?.missingRecordIds;\n        this.get('notifications').warning(missingRecordIds ? 'UNABLE TO IMPORT. FILE DATE MUST MATCH THE DATE CURRENTLY BEING VIEWED.' : e);\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    async createUserReconExportLog(date) {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const dateString = (0, _moment.default)(date).format('MM/DD/YYYY');\n      const eventLog = {\n        type: 'event',\n        attributes: {\n          source: 'webApp',\n          eventType: 'UE',\n          actionType: 'genericLogging',\n          userId: this.get('session.data.authenticated.userId'),\n          receivedAt: (0, _moment.default)().toDate(),\n          eventLog: {\n            genericLogging: [{\n              activity: 'Reconcile Export',\n              loggingType: 'user',\n              details: `Exported stops to CSV for date ${dateString}.`\n            }]\n          }\n        }\n      };\n      return activityLogAdapter.createEventActivity(eventLog);\n    },\n\n    async createUserReconImportLog() {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const eventLog = {\n        type: 'event',\n        attributes: {\n          source: 'webApp',\n          eventType: 'UE',\n          actionType: 'genericLogging',\n          userId: this.get('session.data.authenticated.userId'),\n          receivedAt: (0, _moment.default)().toDate(),\n          eventLog: {\n            genericLogging: [{\n              activity: 'Reconcile Import',\n              loggingType: 'user',\n              details: 'Imported stops CSV.'\n            }]\n          }\n        }\n      };\n      return activityLogAdapter.createEventActivity(eventLog);\n    },\n\n    _arrayBufferToBase64(bytes) {\n      const uint8Array = new Uint8Array(bytes);\n      const data = uint8Array.reduce((acc, i) => {\n        const _acc = acc + String.fromCharCode.apply(null, [i]);\n\n        return _acc;\n      }, '');\n      return data;\n    },\n\n    actions: {\n      onSubmitButtonClick() {\n        this.get('activeContext.topActiveContext').clearAndRefreshAll();\n      },\n\n      onRadioButtonClick(val) {\n        this.set('reconcileAction', val);\n      },\n\n      resetFile(event) {\n        this.set('uploadBinary', null);\n        event.target.value = null;\n      },\n\n      readFile(event) {\n        const file = event.target.files[0];\n        const reader = new FileReader();\n        this.set('uploadInput', event.target);\n        let csvData;\n\n        reader.onload = () => {\n          csvData = reader.result;\n\n          const binaryString = this._arrayBufferToBase64(csvData);\n\n          this.set('uploadBinary', binaryString);\n        };\n\n        if (file) {\n          reader.readAsArrayBuffer(file);\n        }\n      },\n\n      upload() {\n        this.importFromCsv();\n      },\n\n      download() {\n        this.exportToCsv();\n      },\n\n      onChangeTripDate(valuePath, value) {\n        const momentTime = value ? (0, _moment.default)(value) : null;\n        const formattedDate = momentTime && momentTime.isValid() ? momentTime.toISOString() : null;\n        this.set(valuePath, formattedDate);\n      },\n\n      reopenDatesClick() {\n        this.get('workspace').pushState('reconcileOpenDates', {});\n      },\n\n      closeDatesClick() {\n        this.get('workspace').pushState('reconcileCloseDates', {});\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar-reconcile-csv-only/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    modelName: 'stop-point',\n    defaultSortId: 'tripId',\n    defaultSortAsc: false,\n    title: 'Stops',\n    columns: [{\n      id: 'id',\n      type: 'text',\n      label: 'id',\n      valuePath: 'id'\n    }, {\n      id: 'iqid',\n      type: 'text',\n      label: 'iqid',\n      valuePath: 'attributes.iqid'\n    }, {\n      id: 'routename',\n      type: 'text',\n      label: 'routename',\n      valuePath: 'attributes.routename'\n    }, {\n      id: 'stoptype',\n      type: 'text',\n      label: 'stoptype',\n      valuePath: 'attributes.stoptype'\n    }, {\n      id: 'requesttime',\n      type: 'text',\n      label: 'requesttime',\n      valuePath: 'attributes.requesttime'\n    }, {\n      id: 'promisetime',\n      type: 'text',\n      label: 'promisetime',\n      valuePath: 'attributes.promisetime'\n    }, {\n      id: 'passengerfirstname',\n      type: 'text',\n      label: 'passengerfirstname',\n      valuePath: 'attributes.passengerfirstname'\n    }, {\n      id: 'passengerlastname',\n      type: 'text',\n      label: 'passengerlastname',\n      valuePath: 'attributes.passengerlastname'\n    }, {\n      id: 'streetnumber',\n      type: 'text',\n      label: 'streetnumber',\n      valuePath: 'attributes.streetnumber'\n    }, {\n      id: 'streetaddress',\n      type: 'text',\n      label: 'streetaddress',\n      valuePath: 'attributes.streetaddress'\n    }, {\n      id: 'sublocality',\n      type: 'text',\n      label: 'sublocality',\n      valuePath: 'attributes.sublocality'\n    }, {\n      id: 'locality',\n      type: 'text',\n      label: 'locality',\n      valuePath: 'attributes.locality'\n    }, {\n      id: 'subregion',\n      type: 'text',\n      label: 'subregion',\n      valuePath: 'attributes.subregion'\n    }, {\n      id: 'region',\n      type: 'text',\n      label: 'region',\n      valuePath: 'attributes.region'\n    }, {\n      id: 'postalcode',\n      type: 'text',\n      label: 'postalcode',\n      valuePath: 'attributes.postalcode'\n    }, {\n      id: 'actualodometer',\n      type: 'text',\n      label: 'actualodometer',\n      valuePath: 'attributes.actualodometer'\n    }, {\n      id: 'actualarrivetime',\n      type: 'text',\n      label: 'actualarrivetime',\n      valuePath: 'attributes.actualarrivetime'\n    }, {\n      id: 'actualdeparttime',\n      type: 'text',\n      label: 'actualdeparttime',\n      valuePath: 'attributes.actualdeparttime'\n    }, {\n      id: 'tripId',\n      type: 'text',\n      label: 'tripId',\n      valuePath: 'attributes.tripId'\n    }, {\n      id: 'tripStatus',\n      type: 'text',\n      label: 'tripStatus',\n      valuePath: 'attributes.tripStatus'\n    }, {\n      id: 'tripStatusReason',\n      type: 'text',\n      label: 'tripStatusReason',\n      valuePath: 'attributes.tripStatusReason'\n    }, {\n      id: 'tripPurpose',\n      type: 'text',\n      label: 'tripPurpose',\n      valuePath: 'attributes.tripPurpose'\n    }, {\n      id: 'fareCategory',\n      type: 'text',\n      label: 'fareCategory',\n      valuePath: 'attributes.fareCategory'\n    }, {\n      id: 'tripWCCount',\n      type: 'text',\n      label: 'tripWCCount',\n      valuePath: 'attributes.tripWCCount'\n    }, {\n      id: 'tripPCACount',\n      type: 'text',\n      label: 'tripPCACount',\n      valuePath: 'attributes.tripPCACount'\n    }, {\n      id: 'tripCompCount',\n      type: 'text',\n      label: 'tripCompCount',\n      valuePath: 'attributes.tripCompCount'\n    }, {\n      id: 'vehicleId',\n      type: 'text',\n      label: 'vehicleId',\n      valuePath: 'attributes.vehicleId'\n    }, {\n      id: 'driverId',\n      type: 'text',\n      label: 'driverId',\n      valuePath: 'attributes.driverId'\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar-reconcile-csv-only/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"9tk+wVx/\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-fields-group d-flex reconcile-header-btn\\\"],[9],[0,\\\"\\\\n  \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"en\\\",1,true,false,\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",false,[23,[\\\"dwhService\\\",\\\"reconcileDate\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTripDate\\\",\\\"dwhService.reconcileDate\\\"],null]]]],false],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"navbar-divider\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"review\\\",[23,[\\\"reconcileAction\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"review\\\"],null],\\\"header-radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex; flex-direction:row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[11,\\\"style\\\",\\\"align-self: center;\\\"],[9],[0,\\\"Review\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"btns-group\\\"],[11,\\\"style\\\",\\\"display: flex;\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isReviewButtonReady\\\"]]],null]],[11,\\\"class\\\",\\\"btn\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Submit\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSubmitButtonClick\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"navbar-divider\\\"],[9],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"export\\\",[23,[\\\"reconcileAction\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"export\\\"],null],\\\"header-radio-button-input\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex; flex-direction:row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[11,\\\"style\\\",\\\"align-self: center;\\\"],[9],[0,\\\"Export\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"btns-group\\\"],[11,\\\"style\\\",\\\"display: flex;\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isReconExportReady\\\"]]],null]],[11,\\\"class\\\",\\\"btn\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Download\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"download\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"radio-button\\\",null,[[\\\"value\\\",\\\"groupValue\\\",\\\"changed\\\",\\\"classNames\\\"],[\\\"import\\\",[23,[\\\"reconcileAction\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRadioButtonClick\\\",\\\"import\\\"],null],\\\"header-radio-button-input ml-4\\\"]],{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"style\\\",\\\"display:flex; flex-direction:row\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[11,\\\"style\\\",\\\"align-self: center;\\\"],[9],[0,\\\"Import\\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"btns-group\\\"],[11,\\\"style\\\",\\\"display: flex;\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"input\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isReconImportReady\\\"]]],null]],[12,\\\"onchange\\\",[27,\\\"action\\\",[[22,0,[]],\\\"readFile\\\"],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"resetFile\\\"],null]],[11,\\\"accept\\\",\\\"text/csv\\\"],[11,\\\"type\\\",\\\"file\\\"],[9],[10],[0,\\\"\\\\n          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isReconImportFileReady\\\"]]],null]],[11,\\\"class\\\",\\\"btn\\\"],[11,\\\"style\\\",\\\"align-self: center;\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Upload\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"upload\\\"]],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\"],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/workspace-navbar-reconcile-csv-only/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar-reconcile/component\", [\"exports\", \"adept-iq/pods/components/workspace-navbar-reconcile/stub\", \"moment\", \"adept-iq/config/mapped-permIds\"], function (_exports, _stub, _moment, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    classNames: ['workspace-navbar'],\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    dwhService: Ember.inject.service(),\n    timeFormat: 'm-d-Y',\n    submitBtnClicked: false,\n    selectedProvider: Ember.computed.alias('dwhService.selectedProvider'),\n    selectedRoute: Ember.computed.alias('dwhService.selectedRoute'),\n    routeOptions: Ember.computed.alias('dwhService.routeOptions'),\n    providerOptions: Ember.computed('dwhService.routes', function () {\n      const routes = this.get('dwhService.routes');\n      const providerSet = routes.reduce((pSet, route) => {\n        pSet.add(route.provider);\n        return pSet;\n      }, new Set());\n      return Array.from(providerSet).map(p => {\n        return {\n          id: p,\n          name: p\n        };\n      });\n    }),\n    submitBtnDisabled: Ember.computed.empty('dwhService.reconcileDate'),\n    providerOptionEnabled: Ember.computed.gt('providerOptions.length', 0),\n    routeOptionEnabled: Ember.computed.gt('routeOptions.length', 0),\n    searchOptionEnabled: Ember.computed.not('submitBtnDisabled'),\n    disableAddRouteOption: Ember.computed.empty('selectedProvider'),\n    searchOptions: Ember.computed('selectedSearchMode', function () {\n      const searchModes = _stub.default.searchOptions;\n      return this.enableDisableOption(searchModes);\n    }),\n\n    enableDisableOption(options) {\n      const optionArray = [];\n      options.map(opt => {\n        const option = {\n          disabled: false,\n          name: opt\n        };\n\n        switch (opt) {\n          case 'Client':\n            option.disabled = !this.isSearchByClientAllowed;\n            break;\n\n          case 'Driver':\n            option.disabled = !this.isSearchByDriverAllowed;\n            break;\n\n          case 'Vehicle':\n            option.disabled = !this.isSearchByVehicleAllowed;\n            break;\n\n          case 'Address':\n            option.disabled = !this.isSearchByAddressAllowed;\n            break;\n\n          case 'Trip':\n            option.disabled = !this.isSearchByTripAllowed;\n            break;\n\n          default:\n            break;\n        }\n\n        optionArray.push(option);\n      });\n      return optionArray;\n    },\n\n    updateReconcileSearchRoute: Ember.observer('dwhService.selectedSearchRoute', function () {\n      const selectedSearchRoute = this.get('dwhService.selectedSearchRoute');\n\n      if (selectedSearchRoute) {\n        this.set('selectedRoute', selectedSearchRoute);\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'selectedDateTimeRage', {\n        today: (0, _moment.default)().subtract(1, 'day').format('MM-DD-YYYY'),\n        date: null,\n        starttime: null,\n        endtime: null,\n        startforendtime: (0, _moment.default)().startOf('day').toISOString(),\n        startofday: (0, _moment.default)().startOf('day').toISOString(),\n        endofday: (0, _moment.default)().endOf('day').toISOString(),\n        endDateSelection: (0, _moment.default)().subtract(7, 'years').format('MM-DD-YYYY')\n      });\n      this.configurePermission(); // this.set('providerOptions', this.get('store').peekAll('provider'));\n\n      this.set('dwhService.routes', []);\n      this.resetTripFromMap();\n    },\n\n    configurePermission() {\n      Ember.set(this, 'isAddNewRouteAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.addNewRouteRecon, null));\n      Ember.set(this, 'isCloseDateAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.closeEditDateRecon, null));\n      Ember.set(this, 'isReopenDateAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.reopenEditDateRecon, null));\n      Ember.set(this, 'isSearchByClientAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByClientRecon, null));\n      Ember.set(this, 'isSearchByDriverAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByDriverRecon, null));\n      Ember.set(this, 'isSearchByVehicleAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByVehicleRecon, null));\n      Ember.set(this, 'isSearchByAddressAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByAddrRecon, null));\n      Ember.set(this, 'isSearchByTripAllowed', this.get('permissionLayer').permInUserHash(_mappedPermIds.default.searchByTripRecon, null));\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n    },\n\n    callbackHandler(optionId) {\n      if (optionId === 'reconcileAddNewRoute') {\n        Ember.set(this, 'workspace.activeContext.topActiveContext.resetMapFlag', true);\n      }\n    },\n\n    resetTripFromMap() {\n      Ember.set(this, 'workspace.activeContext.topActiveContext.structuredMapData', {\n        'reconcile-trip': [],\n        'reconcile-trip-stops': []\n      });\n    },\n\n    async fetchRoutesOnTripDate() {\n      const date = this.get('dwhService.reconcileDate');\n      const dateString = (0, _moment.default)(date).format('YYYY-MM-DD'); // const data = await this.get('dwhService').fetchDwhRoutes(dateString);\n\n      const dwhRouteAdapter = this.get('store').adapterFor('dwh-route');\n      const routes = await dwhRouteAdapter.getDwhRoutesByDate(dateString);\n      this.set('dwhService.routes', routes);\n    },\n\n    actions: {\n      onSearchOptionSelect(option) {\n        this.resetTripFromMap();\n        Ember.set(this, 'selectedMode', option);\n        Ember.set(this, 'selectedSearchMode', option.name.toLowerCase());\n        this.dwhService.closePopups();\n        this.get('dwhService').toggleProperty('showSearchPopUp');\n        Ember.set(this, 'dwhService.selectedRoute', null);\n        Ember.set(this, 'dwhService.seletectedProvider', null);\n      },\n\n      onProviderOptionSelect(option) {\n        this.resetTripFromMap();\n        this.set('dwhService.selectedProvider', option);\n        this.dwhService.closePopups();\n      },\n\n      async onRouteOptionSelect(option) {\n        this.resetTripFromMap();\n        Ember.set(this, 'dwhService.selectedRoute', option);\n        await this.get('dwhService.fetchTripsWithBreaks').perform(option.id);\n        Ember.set(this, 'selectedSearchMode', null);\n        this.dwhService.closePopups();\n      },\n\n      onChangeTripDate(valuePath, value) {\n        // this.resetTripFromMap();\n        const momentTime = (0, _moment.default)(value[0]);\n        this.set(valuePath, momentTime.toISOString());\n      },\n\n      onSubmitButtonClick() {\n        // this.set('submitBtnClicked', true);\n        // this.fetchRoutesOnTripDate();\n        this.get('activeContext.topActiveContext').refreshAll();\n      },\n\n      onAddRouteButtonClick() {\n        const provider = Ember.get(this, 'selectedProvider') ? Ember.get(this, 'selectedProvider') : '';\n        const routeId = Ember.get(this, 'selectedRoute') ? Ember.get(this, 'selectedRoute').routeId : '';\n\n        if (provider) {\n          this.get('workspace').pushState('reconcileAddNewRoute', {\n            provider,\n            routeId,\n            action: this.callbackHandler.bind(this, 'reconcileAddNewRoute')\n          });\n        }\n      },\n\n      reopenDatesClick() {\n        this.get('workspace').pushState('reconcileOpenDates', {});\n      },\n\n      closeDatesClick() {\n        this.get('workspace').pushState('reconcileCloseDates', {});\n      },\n\n      closePopupHandler() {\n        if (this.dwhService.closePopupHandler) {\n          this.dwhService.closePopupHandler();\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar-reconcile/stub\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    routes: [{\n      id: 746263,\n      providerName: 'MAG'\n    }, {\n      id: 453454,\n      providerName: 'MAG'\n    }, {\n      id: 232323,\n      providerName: 'MAG'\n    }, {\n      id: 342342,\n      providerName: 'MVC'\n    }, {\n      id: 746263,\n      providerName: 'MVC'\n    }, {\n      id: 231231,\n      providerName: 'EPC'\n    }, {\n      id: 897873,\n      providerName: 'EPC'\n    }, {\n      id: 343534,\n      providerName: 'PTC'\n    }, {\n      id: 575757,\n      providerName: 'PTC'\n    }, {\n      id: 986988,\n      providerName: 'PTC'\n    }],\n    providers: [{\n      id: 1,\n      name: 'MAG'\n    }, {\n      id: 2,\n      name: 'MVC'\n    }, {\n      id: 3,\n      name: 'MVP'\n    }, {\n      id: 4,\n      name: 'EPC'\n    }, {\n      id: 5,\n      name: 'PTC'\n    }],\n    serviceModes: ['Taxi', 'Paratransit / Broker'],\n    searchOptions: ['Client', 'Driver', 'Vehicle', 'Address', 'Trip']\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar-reconcile/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"1gtdw0MM\",\n    \"block\": \"{\\\"symbols\\\":[\\\"option\\\",\\\"option\\\",\\\"option\\\"],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"header-fields-group d-flex reconcile-header-btn\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"trip-date v-divider\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Trip Date\\\"],[10],[0,\\\"\\\\n    \\\"],[1,[27,\\\"ember-flatpickr\\\",null,[[\\\"locale\\\",\\\"minuteIncrement\\\",\\\"class\\\",\\\"allowInput\\\",\\\"time_24hr\\\",\\\"placeholder\\\",\\\"dateFormat\\\",\\\"enableTime\\\",\\\"date\\\",\\\"minDate\\\",\\\"maxDate\\\",\\\"onChange\\\"],[\\\"en\\\",1,\\\"width-100\\\",false,false,\\\"MM-DD-YYYY\\\",\\\"m-d-Y\\\",false,[23,[\\\"selectedDateTimeRage\\\",\\\"date\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"endDateSelection\\\"]],[23,[\\\"selectedDateTimeRage\\\",\\\"today\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onChangeTripDate\\\",\\\"dwhService.reconcileDate\\\"],null]]]],false],[0,\\\"\\\\n             \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"btns-group\\\"],[11,\\\"style\\\",\\\"display: flex;\\\"],[9],[0,\\\"\\\\n                \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[21,\\\"submitBtnDisabled\\\"]],[11,\\\"class\\\",\\\"btn\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Submit\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onSubmitButtonClick\\\"]],[10],[0,\\\"\\\\n            \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"gvc v-divider\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"searchField\\\",\\\"searchEnabled\\\",\\\"tagName\\\",\\\"class\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[[27,\\\"not\\\",[[23,[\\\"providerOptionEnabled\\\"]]],null],\\\"Provider\\\",\\\"name\\\",true,\\\"div\\\",\\\"width-100\\\",[23,[\\\"selectedProvider\\\"]],[23,[\\\"providerOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onProviderOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[22,3,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"route-id\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Route ID\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"searchField\\\",\\\"tagName\\\",\\\"class\\\",\\\"searchEnabled\\\",\\\"selected\\\",\\\"options\\\",\\\"onchange\\\"],[[27,\\\"not\\\",[[23,[\\\"routeOptionEnabled\\\"]]],null],\\\"Route Id\\\",\\\"routeId\\\",\\\"div\\\",\\\"width-75\\\",true,[23,[\\\"selectedRoute\\\"]],[23,[\\\"routeOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onRouteOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[22,2,[\\\"routeId\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"flex btns-group\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableAddRouteOption\\\"]],[27,\\\"not\\\",[[23,[\\\"isAddNewRouteAllowed\\\"]]],null]],null]],[11,\\\"class\\\",\\\"add-route-btn\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-plus\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\" Add Route\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAddRouteButtonClick\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"search-group\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[0,\\\"Search\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"power-select\\\",null,[[\\\"disabled\\\",\\\"placeholder\\\",\\\"tagName\\\",\\\"class\\\",\\\"selected\\\",\\\"searchEnabled\\\",\\\"options\\\",\\\"onchange\\\"],[[27,\\\"not\\\",[[23,[\\\"searchOptionEnabled\\\"]]],null],\\\"Search\\\",\\\"div\\\",\\\"width-75\\\",[23,[\\\"selectedMode\\\"]],false,[23,[\\\"searchOptions\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onSearchOptionSelect\\\"],null]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[22,1,[\\\"name\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"  \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"d-flex justify-content-end flex-1\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"btns-group\\\"],[11,\\\"style\\\",\\\"display: flex;\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"disabled\\\",\\\"\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Deduct\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isCloseDateAllowed\\\"]]],null]],[11,\\\"disabled\\\",\\\"\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"\\\\n      Close Dates\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"closeDatesClick\\\"]],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"isReopenDateAllowed\\\"]]],null]],[11,\\\"disabled\\\",\\\"\\\"],[11,\\\"type\\\",\\\"button\\\"],[9],[0,\\\"Reopen Dates\\\"],[3,\\\"action\\\",[[22,0,[]],\\\"reopenDatesClick\\\"]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"dwhService\\\",\\\"showSearchPopUp\\\"]],true],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/reconcile-search-mode-pop-up\\\",null,[[\\\"selectedSearchMode\\\"],[[23,[\\\"selectedSearchMode\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"dwhService\\\",\\\"isLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"text-center loading-spinner mt-2 mb-2 loader-icon\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-circle-o-notch fa-spin\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"dwhService\\\",\\\"verifyRouteErrors\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[27,\\\"iq-widgets/reconcile-verify-route\\\",null,[[\\\"unverifiedRouteData\\\",\\\"onCloseClick\\\"],[[23,[\\\"dwhService\\\",\\\"verifyRouteErrors\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"closePopupHandler\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/workspace-navbar-reconcile/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar/component\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/environment\", \"adept-iq/mixins/async-initiation-operation\", \"lodash\", \"moment\"], function (_exports, _emberConcurrency, _environment, _asyncInitiationOperation, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly,\n    or,\n    equal,\n    and\n  } = Ember.computed;\n  const DEFAULT_TERM = 'default';\n  const BOOKING_TIMELINE_CONFIG_PATH = 'config-Book_Trips/Future_Booking_Timeline';\n\n  var _default = Ember.Component.extend(_asyncInitiationOperation.default, {\n    classNames: ['workspace-navbar'],\n    classNameBindings: ['reoptimizeInProgress', 'isExported'],\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    ajax: Ember.inject.service('ajax'),\n    schedules: null,\n    scheduleDate: null,\n    isReoptimizeOpen: false,\n    minScheduleDate: null,\n    isReconcileCsvOnly: true,\n    showNotificationFailureResults: false,\n    responseSourceIds: null,\n    currentScheduleAdvanceNotificationSent: false,\n    // TODO: saved in schedule table\n    notificationEnabled: false,\n    isScheduleDashboard: readOnly('workspace.isScheduleDashboard'),\n    isDispatchDashboard: readOnly('workspace.isDispatchDashboard'),\n    isBookingDashboard: readOnly('workspace.isBookingDashboard'),\n    isRiderManagementDashboard: readOnly('workspace.isRiderManagementDashboard'),\n    currentSchedule: readOnly('workspace.currentSchedule'),\n    isExported: readOnly('workspace.isExported'),\n    operationType: readOnly('workspace.operationType'),\n    reoptimizeInProgress: or('workspace.reoptimizeInProgress'),\n    systemConfigInProgress: or('workspace.systemConfigInProgress'),\n    disableReoptimizeBtn: Ember.computed('isExported', 'reoptimizeInProgress', 'currentSchedule', function () {\n      const currentSchedule = this.get('currentSchedule');\n      if (Ember.isEmpty(currentSchedule)) return true;\n      return this.get('isExported') || this.get('reoptimizeInProgress');\n    }),\n    isExporting: equal('operationType', 'export'),\n    isBrokerExporting: equal('operationType', 'brokerExport'),\n    isExportedAndEnabled: and('isExported', 'notificationEnabled'),\n\n    async init() {\n      this._super(...arguments);\n\n      const {\n        value: notificationEnabled\n      } = _environment.default.APP.test ? {\n        value: false\n      } : await this.get('store').findRecord('cs-config-item', 'config-System_Configuration-notifications-advance_trip_reminder/enabled');\n      this.set('notificationEnabled', notificationEnabled);\n      this.set('minScheduleDate', (0, _moment.default)().startOf('day').add(1, 'day').toISOString());\n    },\n\n    didInsertElement() {\n      this._super(...arguments);\n\n      this.refreshTask.perform();\n    },\n\n    canSendAdvanceNotification: Ember.computed('workspace.currentSchedule', function () {\n      const currentSchedule = this.get('currentSchedule');\n\n      if (Ember.isNone(currentSchedule)) {\n        return false;\n      }\n\n      const scheduleStart = (0, _moment.default)(currentSchedule.get('start'));\n      const currentTime = (0, _moment.default)();\n      const canSend = currentTime.isBefore(scheduleStart);\n      return canSend;\n    }),\n    workspaceName: Ember.computed('workspace.dashboardModel.{category,role,name}', function () {\n      const dashboard = this.get('workspace.dashboardModel');\n\n      if (dashboard) {\n        const dashboardRole = dashboard.get('role');\n        const dashboardName = dashboard.get('name');\n        const category = dashboard.get('category');\n\n        if (category && category.includes(DEFAULT_TERM)) {\n          return `${dashboardRole} [default]`;\n        } else if (dashboardName && dashboardRole) return `${dashboardRole} - ${dashboardName}`;\n\n        return dashboardRole;\n      }\n\n      return null;\n    }),\n    // in used by release schedule / reoptimize\n    inProgressTitle: Ember.computed('reoptimizeInProgress', 'isExported', 'isExporting', 'isBrokerExporting', 'operationType', function () {\n      const isExported = this.get('isExported');\n      const isExporting = this.get('isExporting');\n      const isBrokerExporting = this.get('isBrokerExporting');\n      const operationType = this.get('operationType');\n      if (isExporting || isBrokerExporting) return 'RELEASE ROUTES IN PROGRESS';else if (isExported) return '';else if (operationType === 'recovery') return 'RECOVERY IN PROGRESS';\n      return 'REOPTIMIZATION IN PROGRESS';\n    }),\n    // in used by release schedule / reoptimize\n    progress: Ember.computed('workspace.progressValue', function () {\n      const progressValue = this.get('workspace.progressValue');\n\n      if (progressValue) {\n        // reoptimize progress value should not greater than 100\n        return progressValue > 100 ? 100 : progressValue;\n      }\n\n      return 0;\n    }),\n    maxScheduleDate: Ember.computed('bookingWindow.value', function () {\n      const bookingWindowVal = parseInt(this.get('bookingWindow.value'), 10);\n      return bookingWindowVal ? (0, _moment.default)().endOf('day').add(bookingWindowVal, 'days').toDate() : null;\n    }),\n    refreshTask: (0, _emberConcurrency.task)(function* () {\n      // incase today ever stretches into the next day, this will update once the user moves to that date\n      // thus today -> tomorrow, and booking window will also slide forward\n      this.get('fetchBookingWindow').perform();\n      this.get('fetchSchedulesTask').perform();\n      this.set('minScheduleDate', (0, _moment.default)().startOf('day').add(1, 'day').toISOString());\n      yield;\n    }),\n    fetchBookingWindow: (0, _emberConcurrency.task)(function* () {\n      const config = yield this.store.findRecord('cs-config-item', BOOKING_TIMELINE_CONFIG_PATH);\n\n      if (config) {\n        this.set('bookingWindow', config);\n      }\n    }),\n    fetchSchedulesTask: (0, _emberConcurrency.task)(function* () {\n      const filterQuery = 'eq(type,\\'primary\\')';\n      let schedules = yield this.store.query('schedule', {\n        filter: filterQuery\n      });\n\n      if (schedules) {\n        schedules = schedules.sortBy('end');\n      }\n\n      this.set('schedules', schedules);\n    }),\n\n    async reInitializeStore() {\n      const store = this.store;\n      const workspace = this.get('workspace');\n      const topActiveContext = this.get('activeContext.topActiveContext');\n      const notifications = this.get('notifications'); // clear active context traversal\n\n      Ember.run.scheduleOnce('actions', topActiveContext, 'reset'); // dump all widget data\n\n      topActiveContext.trigger('clear');\n      await notifications.get('monitorForEmergencyTask').cancelAll(); // dump ember store\n\n      await Ember.run.scheduleOnce('destroy', store, 'init');\n      await Ember.run.next(() => {\n        store.findAll('cs-config-category');\n        store.findAll('cs-config-item');\n        store.findAll('route-template');\n        store.findAll('cs-config-permission').then(configPermissions => {\n          return workspace.set('configPermissions', configPermissions.get('firstObject.value'));\n        });\n        notifications.get('monitorForEmergencyTask').perform();\n      });\n    },\n\n    async updateSchedulingWorkspaceTimeRange(date) {\n      const momentDate = (0, _moment.default)(date);\n      await this.reInitializeStore();\n      await Ember.run.later(() => {\n        this.workspace.setProperties({\n          startDate: momentDate.startOf('day').toDate(),\n          endDate: momentDate.endOf('day').toDate()\n        });\n        this.refreshTask.perform();\n      }, 1000); // delay because of reInitializeStore.\n    },\n\n    async validateAndReoptimize(currentSchedule) {\n      const tooltip = this.get('tooltip');\n      const widget = this.get('widget');\n      const widgetInstanceId = widget.GLOBAL_WIDGET_INST;\n      const modelName = 'routeWidget';\n      const offset = 0;\n      const limit = 500;\n      const sort = null;\n      const dateQueryFields = widget.getDateQueryFields();\n      const selectedProviders = widget.getAllProviders();\n      const isLocked = true; // get locked records for this schedule\n\n      const lockedRoutes = await widget.requestWidgetApi(widgetInstanceId, modelName, null, offset, limit, sort, dateQueryFields, selectedProviders, isLocked);\n\n      if (Ember.isPresent(lockedRoutes) && lockedRoutes.length > 0) {\n        tooltip.pushConfirmation({\n          title: 'Reoptimize',\n          tip: 'Unable to reoptimize because one or more routes are currently locked.',\n          warning: true,\n          primaryActionText: 'Ok',\n\n          primaryAction() {\n            tooltip.reset();\n          }\n\n        });\n        return;\n      }\n\n      this.get('workspace').pushState('reoptimize', {\n        currentSchedule\n      });\n    },\n\n    performPostAdvanceTripReminder: (0, _emberConcurrency.task)(function* (currentSchedule) {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const activity = 'Notification Sent';\n      const details = 'Sent out Advance Trip Reminders.';\n      const scheduleDate = (0, _moment.default)(currentSchedule.get('start')).startOf('day');\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const options = {\n        outputResult: true\n      };\n\n      try {\n        const scheduleTag = `schedule-${(0, _moment.default)(scheduleDate).format('YYYY-MM-DD')}`;\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createInitiationAsyncOperation.perform(scheduleDate, null, null, 'advanceTripRemindersGroupedByTextToSpeech', [scheduleTag], options);\n        activityLogAdapter.createUserActivityLog(activity, details);\n\n        if (isJobSuccess) {\n          if (!currentSchedule.get('isNotificationInitiated')) {\n            currentSchedule.set('notificationStatus', 'initiated');\n            currentSchedule.save();\n          }\n\n          const response = JSON.parse(results);\n          this.set('responseSourceIds', _lodash.default.get(response, 'data.attributes.sourceIds', {}));\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          this.actions.onShowAdvanceNotificationStatus.call(this);\n          return;\n        }\n\n        this.get('notifications').warning('Processing Advance Trip Reminder failed.');\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      } catch (error) {\n        console.log(error.message); // eslint-disable-line no-console\n\n        this.get('notifications').warning('Processing Advance Trip Reminder failed.');\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    }).drop(),\n\n    changeModalZIndex(zindex) {\n      const modalPopup = Ember.$('.ember-modal-overlay.translucent.tooltip-modal-styles-overlay');\n      modalPopup.css('z-index', zindex);\n    },\n\n    actions: {\n      onUpdateTimeRangeScheduleWorkspace(selectedDate) {\n        const currentWorkspaceDate = this.get('workspace.startDate');\n\n        if (!(0, _moment.default)(selectedDate).isSame(currentWorkspaceDate)) {\n          this.updateSchedulingWorkspaceTimeRange(selectedDate);\n        }\n      },\n\n      openReoptimizeModal() {\n        const currentSchedule = this.get('currentSchedule');\n        this.validateAndReoptimize(currentSchedule);\n      },\n\n      onSendAdvanceNotification() {\n        const currentSchedule = this.get('currentSchedule');\n        this.performPostAdvanceTripReminder.perform(currentSchedule);\n      },\n\n      onShowAdvanceNotificationStatus() {\n        this.changeModalZIndex(90);\n        this.set('showNotificationResults', true);\n      },\n\n      onNotificationResultsClose() {\n        this.set('showNotificationResults', false);\n        this.set('responseSourceIds', null);\n        this.changeModalZIndex(9001);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar/notification-results/component\", [\"exports\", \"ember-concurrency\", \"moment\", \"lodash\"], function (_exports, _emberConcurrency, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    notificationInitiationService: Ember.inject.service('notification-initiation'),\n    workspace: Ember.inject.service(),\n    showInProgress: true,\n    showSuccessful: true,\n    showFailed: true,\n    responseSourceIds: null,\n    showDialog: false,\n    onClose: null,\n    onResend: null,\n    notificationResponseRecords: null,\n\n    init() {\n      this._super(...arguments);\n\n      const responseSourceIds = this.get('responseSourceIds');\n      const showDialog = this.get('showDialog');\n\n      if (_lodash.default.isNil(responseSourceIds) && showDialog) {\n        this.reloadNotificationResponses.perform();\n      }\n    },\n\n    filteredNotificationResponses: Ember.computed('notificationResponses', 'showInProgress', 'showSuccessful', 'showFailed', function () {\n      const notificationResponses = this.get('notificationResponses');\n      const showInProgress = this.get('showInProgress');\n      const showSuccessful = this.get('showSuccessful');\n      const showFailed = this.get('showFailed');\n      const filteredNotificationResponses = notificationResponses.filter(notificationResponse => {\n        switch (notificationResponse.status) {\n          case 'In Progress':\n            return showInProgress;\n\n          case 'Successful':\n            return showSuccessful;\n\n          case 'Failed':\n            return showFailed;\n\n          default:\n            return false;\n        }\n      });\n      return filteredNotificationResponses;\n    }),\n    notificationResponses: Ember.computed('responseSourceIds', function () {\n      const responseSourceIds = this.get('responseSourceIds', {});\n\n      const notificationResponses = _lodash.default.flatMap(responseSourceIds, (responses, sourceId) => {\n        return _lodash.default.compact(_lodash.default.map(responses, response => {\n          if (response.status.code === 'errorResent' || _lodash.default.isNil(_lodash.default.get(response, 'destination', null))) {\n            return null;\n          }\n\n          const notificationResponse = this.createNotificationResponseFromResponseSourceId(response, sourceId);\n          return notificationResponse;\n        }));\n      });\n\n      return notificationResponses;\n    }),\n    count: Ember.computed('notificationResponses', function () {\n      const notificationResponses = this.get('notificationResponses');\n\n      const statusCounts = _lodash.default.countBy(notificationResponses, 'status');\n\n      return {\n        total: _lodash.default.size(notificationResponses),\n        inProgress: _lodash.default.defaultTo(statusCounts['In Progress'], 0),\n        successful: _lodash.default.defaultTo(statusCounts.Successful, 0),\n        failed: _lodash.default.defaultTo(statusCounts.Failed, 0)\n      };\n    }),\n    isResendDisabled: Ember.computed('count', function () {\n      const count = this.get('count');\n      return count.inProgress > 0 || count.inProgress === 0 && count.failed === 0;\n    }),\n\n    createNotificationResponseFromResponseSourceId(response, sourceId) {\n      const parsedSourceId = JSON.parse(sourceId);\n\n      const riderId = _lodash.default.join(parsedSourceId.externalRiderIds, ',');\n\n      const status = this.formatStatusCode(response.status.code);\n\n      const errorMessage = _lodash.default.get(response, 'status.message', '');\n\n      const destination = _lodash.default.join(_lodash.default.map(response.destination, singleDestination => this.formatPhoneNumber(singleDestination)), ',');\n\n      return Ember.Object.create({\n        riderId,\n        destination,\n        status,\n        errorMessage\n      });\n    },\n\n    formatStatusCode(statusCode) {\n      switch (statusCode) {\n        case 'error':\n          return 'Failed';\n\n        case 'complete':\n          return 'Successful';\n\n        case 'in-progress':\n          return 'In Progress';\n\n        default:\n          return statusCode;\n      }\n    },\n\n    formatPhoneNumber(phone) {\n      if (!phone) {\n        return;\n      }\n\n      const phoneNoStr = phone.toString().substring(0, 10).replace(/[^\\d]/g, '');\n\n      if (phoneNoStr.length === 10) {\n        return phoneNoStr.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3');\n      }\n\n      return phoneNoStr;\n    },\n\n    reloadNotificationResponses: (0, _emberConcurrency.task)(function* () {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const notificationInitiationService = this.get('notificationInitiationService');\n        const scheduleDate = (0, _moment.default)(this.get('workspace.currentSchedule.name'));\n        const scheduleTag = `schedule-${(0, _moment.default)(scheduleDate).format('YYYY-MM-DD')}`;\n        const newSourceIds = yield notificationInitiationService.getResponsesByTag('advanceTripReminderGroupedByTextToSpeech', scheduleTag);\n        this.set('responseSourceIds', newSourceIds);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      } catch (error) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    }).drop(),\n    actions: {\n      onEligibleWarningClose() {\n        this.get('onClose')();\n      },\n\n      onResend() {\n        this.get('onResend')();\n      },\n\n      onRefresh() {\n        this.get('reloadNotificationResponses').perform(this.get('scheduleDate'));\n      },\n\n      onClose() {\n        this.get('onClose')();\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar/notification-results/notification-responses-table/component\", [\"exports\", \"adept-iq/pods/components/generic-components/table/component\", \"adept-iq/pods/components/workspace-navbar/notification-results/notification-responses-table/config\", \"lodash\"], function (_exports, _component, _config, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _component.default.extend({\n    classNames: ['notification-response-table'],\n    config: _config.default,\n    store: Ember.inject.service(),\n    hasPendingChanges: false,\n    enableWarningRowChangeAlert: false,\n    notificationResponses: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    updateNotificationResponseRecords: Ember.observer('notificationResponses', function () {\n      this.refreshData();\n    }),\n\n    fetchDataQuery() {\n      return this.query();\n    },\n\n    async query() {\n      const searchText = this.get('searchText');\n      const notificationResponses = this.get('notificationResponses');\n\n      const filteredNotificationResponses = _lodash.default.filter(notificationResponses, notificationResponse => {\n        if (_lodash.default.size(searchText) > 0) {\n          const textFound = _lodash.default.find(notificationResponse, value => {\n            return value.includes(searchText);\n          });\n\n          if (_lodash.default.isNil(textFound)) {\n            return null;\n          }\n        }\n\n        return true;\n      });\n\n      const state = this.get('state');\n      const tableConfig = this.get('config');\n\n      const sortField = _lodash.default.get(state, 'sortId', _lodash.default.get(tableConfig, 'defaultSortId'));\n\n      const asc = _lodash.default.get(state, 'sortAsc', _lodash.default.get(tableConfig, 'defaultSortAsc'));\n\n      const allSortFields = ['riderId', 'destination', 'status', 'errorMessage'];\n\n      const otherSortFields = _lodash.default.filter(allSortFields, allSortField => allSortField !== sortField);\n\n      const sortFields = _lodash.default.concat([sortField], otherSortFields);\n\n      const sortedNotificationResponses = _lodash.default.sortBy(filteredNotificationResponses, sortFields);\n\n      if (!asc) {\n        return _lodash.default.reverse(sortedNotificationResponses);\n      }\n\n      this.set('records', sortedNotificationResponses);\n      return sortedNotificationResponses;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar/notification-results/notification-responses-table/config\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    rowComponent: 'generic-components/table/rows/row',\n    // default row component\n    rowSelectionType: 'spacer',\n    modelName: 'notificationResponse',\n    title: 'Notifications',\n    defaultSortId: 'riderId',\n    defaultSortAsc: true,\n    queryModelData: true,\n    selectFirstRow: false,\n    showSelectedRowLength: false,\n    columns: [{\n      id: 'destination',\n      index: 0,\n      type: 'test',\n      label: 'Destination',\n      valuePath: 'destination',\n      defaultWidth: 110,\n      searchable: true\n    }, {\n      id: 'riderId',\n      index: 1,\n      type: 'text',\n      label: 'Rider ID',\n      valuePath: 'riderId',\n      defaultWidth: 110,\n      searchable: true\n    }, {\n      id: 'status',\n      index: 2,\n      type: 'text',\n      label: 'Status',\n      valuePath: 'status',\n      defaultWidth: 80,\n      searchable: true\n    }, {\n      id: 'errorMessage',\n      index: 3,\n      type: 'text',\n      label: 'Error Message',\n      valuePath: 'errorMessage',\n      defaultWidth: 450,\n      searchable: true\n    }]\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar/notification-results/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"iTvkdFFM\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notification-result-modal\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"mb-4\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-save-as-body col-md-10 offset-md-1 mt-1\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"table\\\"],[11,\\\"class\\\",\\\"table wigt-tbl\\\"],[9],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"showInProgress\\\",[23,[\\\"showInProgress\\\"]]]]],false],[0,\\\" In Progress\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"showSuccessful\\\",[23,[\\\"showSuccessful\\\"]]]]],false],[0,\\\" Successful\\\"],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[27,\\\"input\\\",null,[[\\\"type\\\",\\\"name\\\",\\\"checked\\\"],[\\\"checkbox\\\",\\\"showFailed\\\",[23,[\\\"showFailed\\\"]]]]],false],[0,\\\" Failed\\\"],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n          \\\"],[7,\\\"tr\\\"],[9],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"count\\\",\\\"inProgress\\\"]],false],[0,\\\"/\\\"],[1,[23,[\\\"count\\\",\\\"total\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"count\\\",\\\"successful\\\"]],false],[0,\\\"/\\\"],[1,[23,[\\\"count\\\",\\\"total\\\"]],false],[10],[0,\\\"\\\\n            \\\"],[7,\\\"td\\\"],[9],[1,[23,[\\\"count\\\",\\\"failed\\\"]],false],[0,\\\"/\\\"],[1,[23,[\\\"count\\\",\\\"total\\\"]],false],[10],[0,\\\"\\\\n          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row no-gutters\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-md-10 offset-md-1 mt-1\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"workspace-navbar/notification-results/notification-responses-table\\\",null,[[\\\"notificationResponses\\\"],[[23,[\\\"filteredNotificationResponses\\\"]]]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notification-result-buttons row no-gutters\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri cancelBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onClose\\\"],null]],[9],[0,\\\"Close\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"disabled\\\",[21,\\\"isResendDisabled\\\"]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onResend\\\"],null]],[9],[0,\\\"Resend\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-pri confirmBtn\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onRefresh\\\"],null]],[9],[0,\\\"Refresh\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/workspace-navbar/notification-results/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/components/workspace-navbar/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"EQm2MuDm\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"header-left\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"workspace-logo\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-th workspace-icon mr-1\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[0,\\\"\\\\n    \\\"],[1,[21,\\\"workspaceName\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[27,\\\"eq\\\",[[23,[\\\"workspace\\\",\\\"dashboardModel\\\",\\\"role\\\"]],\\\"Reconcile\\\"],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isReconcileCsvOnly\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[21,\\\"workspace-navbar-reconcile-csv-only\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      \\\"],[1,[21,\\\"workspace-navbar-reconcile-csv-only\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isScheduleDashboard\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"maxScheduleDate\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"minDate\\\",\\\"maxDate\\\",\\\"value\\\",\\\"disabled\\\",\\\"onChange\\\"],[[23,[\\\"minScheduleDate\\\"]],[23,[\\\"maxScheduleDate\\\"]],[23,[\\\"workspace\\\",\\\"startDate\\\"]],[27,\\\"or\\\",[[23,[\\\"reoptimizeInProgress\\\"]],[23,[\\\"systemConfigInProgress\\\"]]],null],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdateTimeRangeScheduleWorkspace\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"not\\\",[[23,[\\\"maxScheduleDate\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"generic-components/datetimeflatpickr\\\",null,[[\\\"value\\\",\\\"onChange\\\"],[[23,[\\\"workspace\\\",\\\"startDate\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onUpdateTimeRangeScheduleWorkspace\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"re-optimize-btn ml-2\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[23,[\\\"disableReoptimizeBtn\\\"]],[23,[\\\"systemConfigInProgress\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"openReoptimizeModal\\\"],null]],[9],[0,\\\"\\\\n      Reoptimize\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"reoptimize-information\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isExported\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[9],[0,\\\"The schedule for this day has been released. Information is read-only at this time.\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"or\\\",[[23,[\\\"reoptimizeInProgress\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"span\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[9],[7,\\\"i\\\"],[11,\\\"class\\\",\\\"fa fa-clock-o\\\"],[11,\\\"aria-hidden\\\",\\\"true\\\"],[9],[10],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[9],[1,[21,\\\"inProgressTitle\\\"],false],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"unless\\\",[[27,\\\"or\\\",[[23,[\\\"isExported\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[27,\\\"generic-components/progress-bar\\\",null,[[\\\"progress\\\"],[[23,[\\\"progress\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"ml-2\\\"],[9],[1,[21,\\\"progress\\\"],false],[0,\\\"%\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isExportedAndEnabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"advance-notification-group\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"p\\\"],[11,\\\"class\\\",\\\"advance-notification-label\\\"],[9],[0,\\\"Reminder Notifications:\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"currentSchedule\\\",\\\"isNotificationInitiated\\\"]]],null,{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"advance-notification-button\\\"],[12,\\\"disabled\\\",[27,\\\"not\\\",[[23,[\\\"canSendAdvanceNotification\\\"]]],null]],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onSendAdvanceNotification\\\"],null]],[9],[0,\\\"\\\\n            Send\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"          \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"advance-notification-button\\\"],[12,\\\"onclick\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onShowAdvanceNotificationStatus\\\"],null]],[9],[0,\\\"\\\\n            Status\\\\n          \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"      \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10],[0,\\\"\\\\n\\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"notification-sec-window\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"showNotificationResults\\\"]]],null,{\\\"statements\\\":[[4,\\\"secondary-window\\\",null,[[\\\"title\\\",\\\"onXButtonClick\\\",\\\"isLoading\\\"],[\\\"Notification Metrics\\\",[27,\\\"action\\\",[[22,0,[]],\\\"onNotificationResultsClose\\\"],null],[23,[\\\"isLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"      \\\"],[1,[27,\\\"workspace-navbar/notification-results\\\",null,[[\\\"responseSourceIds\\\",\\\"showDialog\\\",\\\"onClose\\\",\\\"onResend\\\"],[[23,[\\\"responseSourceIds\\\"]],[23,[\\\"showNotificationResults\\\"]],[27,\\\"action\\\",[[22,0,[]],\\\"onNotificationResultsClose\\\"],null],[27,\\\"action\\\",[[22,0,[]],\\\"onSendAdvanceNotification\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[10]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/components/workspace-navbar/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard-info/route\", [\"exports\", \"ember-simple-auth/mixins/authenticated-route-mixin\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\"], function (_exports, _authenticatedRouteMixin, _environment, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const LOCAL_STORAGE_KEY = 'dashboard-info';\n\n  function getAccessData(userId) {\n    let accessData;\n    let data = localStorage.getItem(LOCAL_STORAGE_KEY) || '{}';\n\n    try {\n      let json = JSON.parse(data);\n\n      if (json.userId === userId && json.accessData) {\n        accessData = json.accessData;\n      }\n    } catch (e) {}\n\n    return accessData;\n  }\n\n  var _default = Ember.Route.extend(_authenticatedRouteMixin.default, {\n    classNames: ['road-supervisor-modal'],\n    user: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    providerNames: Ember.computed.alias('session.data.authenticated.tokenInfo.providerNames'),\n\n    resetController(controller) {\n      controller.set('vehicleId', undefined);\n      controller.set('driverId', undefined);\n      controller.set('selectedVehicle', undefined);\n\n      this._super(...arguments);\n    },\n\n    setupController(controller) {\n      let category = 'supervisor_vehicle_list';\n      controller.set('vehicleProvidersList', '');\n\n      if (this.user.isRoadSupEnable()) {\n        controller.set('isDisclaimerAgreed', false);\n      }\n\n      this.store.query('cs-config-item', {\n        category\n      }).then(configItems => {\n        return {\n          data: configItems.map(configItem => {\n            const list = configItem.get('value').supervisorVehicleList;\n            const matchedSupervisorVehicleList = list.filter(item => {\n              if (this.providerNames.includes('ALL')) {\n                return true;\n              }\n\n              return this.providerNames.includes(item.provider);\n            });\n            controller.set('vehicleProvidersList', matchedSupervisorVehicleList);\n          })\n        };\n      });\n    },\n\n    apiVehicleSearch: async function (callSign) {\n      const rql = `filter=eq(name,'${callSign}')`;\n      const apiUrl = `${_apiUrls.API.vehicleService.host}/vehicle?${rql}`;\n      const session = this.get('session');\n      const response = await this.get('ajax').request(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json'\n      });\n\n      if (response.data && response.data.length > 0) {\n        const vehicleRepo = response.data.map(vehicle => {\n          return {\n            vehicleId: vehicle.id,\n            vehicle: vehicle.attributes.name,\n            provider: vehicle.relationships.providerName.data.id\n          };\n        });\n        return vehicleRepo[0];\n      }\n\n      return null;\n    },\n    apiDriverSearch: async function (badge) {\n      const rql = `filter=eq(driverId,'${badge}')`;\n      const apiUrl = `${_apiUrls.API.driverService.host}/driver?${rql}`;\n      const session = this.get('session');\n      const response = await this.get('ajax').request(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json'\n      });\n\n      if (response.data && response.data.length > 0) {\n        const driverRepo = response.data.map(driver => {\n          return {\n            driverId: driver.id,\n            driver: driver.attributes.driverId\n          };\n        });\n        return driverRepo[0];\n      }\n\n      return null;\n    },\n    verifyVehicleDriver: async function (selectedProvider, route) {\n      const vehicle = await route.apiVehicleSearch(selectedProvider.vehicleId);\n      const driver = await route.apiDriverSearch(selectedProvider.driverId);\n\n      if (vehicle && driver) {\n        route.set('controller.vehicle', vehicle.vehicle);\n        route.set('controller.providerId', vehicle.provider);\n        route.set('controller.vehicleId', vehicle.vehicleId);\n        route.set('controller.driver', driver.driver);\n        route.set('controller.driverId', driver.driverId);\n      } else {\n        const message = `CAN'T GET VEHICLE ${selectedProvider.vehicleId} OR DRIVER ${selectedProvider.driverId}`;\n        route.get('notifications').warning(message);\n      }\n    },\n\n    beforeModel() {\n      if (this.user.isRoadSupEnable()) {\n        let accessData = getAccessData(this.user.userId);\n\n        if (!accessData) {\n          return;\n        }\n      }\n\n      this.transitionTo('index');\n    },\n\n    actions: {\n      onClickCheckBox(index) {\n        if (index.target.value) {\n          var selectedProvider = this.get('controller.vehicleProvidersList').objectAt(index.target.value);\n\n          if (_environment.default.APP.avlmLite) {\n            this.set('controller.vehicleId', selectedProvider.vehicleId);\n            this.set('controller.providerId', selectedProvider.provider);\n            this.set('controller.vehicle', selectedProvider.vehicleId);\n            this.set('controller.driver', selectedProvider.driverId);\n            this.set('controller.driverId', selectedProvider.driverId);\n          } else {\n            this.verifyVehicleDriver(selectedProvider, this);\n          }\n        } else {\n          this.set('controller.vehicleId', '');\n          this.set('controller.providerId', '');\n          this.set('controller.driverId', '');\n          this.set('controller.vehicle', '');\n          this.set('controller.driver', '');\n        }\n      },\n\n      setAccessData(vehicle, vehicleId, driver, driverId, providerId) {\n        let provider = providerId;\n        let accessData = {\n          vehicle,\n          vehicleId,\n          driver,\n          driverId,\n          provider\n        };\n        let json = {\n          userId: this.user.userId,\n          accessData\n        };\n        localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(json)); // this.transitionTo('index');\n      },\n\n      onAgreeButtonClick() {\n        this.set('controller.isDisclaimerAgreed', true);\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard-info/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"ypNfyxnk\",\n    \"block\": \"{\\\"symbols\\\":[\\\"vehicleProvider\\\",\\\"index\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[23,[\\\"isDisclaimerAgreed\\\"]]],null,{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"road-supervisor-dashboard-info\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"id\\\",\\\"login-template\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h1\\\"],[9],[0,\\\"Vehicle Id/ Provider Id\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"form\\\"],[12,\\\"onsubmit\\\",[27,\\\"route-action\\\",[\\\"setAccessData\\\",[23,[\\\"vehicle\\\"]],[23,[\\\"vehicleId\\\"]],[23,[\\\"driver\\\"]],[23,[\\\"driverId\\\"]],[23,[\\\"providerId\\\"]]],null]],[9],[0,\\\"\\\\n        \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dropdown-provider vehicleId-dropdown\\\"],[9],[0,\\\"\\\\n\\\\n          \\\"],[7,\\\"select\\\"],[11,\\\"class\\\",\\\"select\\\"],[12,\\\"onchange\\\",[27,\\\"route-action\\\",[\\\"onClickCheckBox\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]]],[9],[0,\\\"\\\\n            \\\"],[7,\\\"option\\\"],[11,\\\"value\\\",\\\"\\\"],[9],[0,\\\"Please select vehicle id, provider id\\\"],[10],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[23,[\\\"vehicleProvidersList\\\"]]],null,{\\\"statements\\\":[[0,\\\"              \\\"],[7,\\\"option\\\"],[12,\\\"value\\\",[22,2,[]]],[12,\\\"selected\\\",[27,\\\"eq\\\",[[23,[\\\"vehicle\\\"]],[22,1,[\\\"vehicleId\\\"]]],null]],[9],[1,[22,1,[\\\"vehicleId\\\"]],false],[0,\\\",\\\"],[1,[22,1,[\\\"provider\\\"]],false],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"          \\\"],[10],[0,\\\"\\\\n        \\\"],[10],[0,\\\"\\\\n        \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn\\\"],[12,\\\"disabled\\\",[27,\\\"or\\\",[[27,\\\"not\\\",[[23,[\\\"vehicleId\\\"]]],null]],null]],[11,\\\"type\\\",\\\"submit\\\"],[9],[0,\\\"Save\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"road-supervisor-dashboard-info bg-gray\\\"],[9],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"driving-disclaimer\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"h4\\\"],[9],[0,\\\"WARNING\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Do not attempt to enter data or adjust this device while driving. Failure to pay attention to driving conditions may\\\\n      result in death or injury to people and property.\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"The information and contents is provided on an “as is” and “as available” basis and may not include the most current\\\\n      updates or corrections to the information source database. Actual conditions may differ from the information provided. Exercise your independent judgment and use the map feature, and data contents, at your own risk.\\\"],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"You are responsible at all times for your conduct and its consequences.\\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row-btn\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn-agree\\\"],[9],[0,\\\"\\\\n        Agree\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"onAgreeButtonClick\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/dashboard-info/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    isEditing: Ember.computed.alias('workspace.isEditing'),\n    tileSize: Ember.computed.alias('workspace.tileSize'),\n    tileSpacing: Ember.computed.alias('workspace.tileSpacing'),\n    dashboard: Ember.computed.alias('data.dashboard'),\n    isWidgetMinified: Ember.computed.alias('maximizer.isWidgetMinified')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/modals/edit-form/controller\", [\"exports\", \"resize-observer-polyfill\"], function (_exports, _resizeObserverPolyfill) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const RESIZE_CURSOR_OFFSET = -2;\n  const MAX_WIDTH = 800;\n  const RESIZE_DEBOUNCE_TIME = 250;\n\n  var _default = Ember.Controller.extend({\n    editModal: Ember.inject.service(),\n    editableRecords: Ember.computed.alias('editModal.editableRecords'),\n\n    init() {\n      this._super(...arguments);\n\n      this._onResize = () => {\n        if (this.get('isDragging') || this.get('isResizing')) return;\n        Ember.run.debounce(this, 'resizedWindow', RESIZE_DEBOUNCE_TIME);\n      };\n\n      this._resizeObserver = new _resizeObserverPolyfill.default(this._onResize);\n\n      this._resizeObserver.observe(Ember.$('body')[0]); // TODO: saveRecordFunction shall be moved to a service later on\n      // Once that occurs its possible to save the edit modal state and this can be removed for refreshing for updated edit modal state\n\n\n      if (this.get('editModal.editableRecords.length') === 0) {\n        this.get('editModal').close();\n      }\n    },\n\n    resizedWindow() {\n      const position = Ember.$('.edit-widget-modal').width();\n      const coords = {\n        x: position\n      };\n\n      if (this.get('isDestroyed')) {\n        return;\n      }\n\n      this.send('resizeModal', coords);\n    },\n\n    willDestroyElement() {\n      this._resizeObserver.disconnect();\n\n      this._resizeObserver = null;\n      this._onResize = null;\n    },\n\n    actions: {\n      resizeModal(position) {\n        const windowWidth = Ember.$(window).width(); // Resize cursor offset ensures cursor is centered on handle.\n\n        const modalWidth = windowWidth - position.x + RESIZE_CURSOR_OFFSET;\n        Ember.run.scheduleOnce('afterRender', () => {\n          if (windowWidth - modalWidth >= MAX_WIDTH) {\n            Ember.$('.edit-widget-modal').css('right', `${windowWidth - MAX_WIDTH}px`);\n          }\n\n          Ember.$('.edit-widget-modal').css('right', `${modalWidth}px`);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/modals/edit-form/resize-handle/component\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Component.extend({\n    didInsertElement() {\n      this._super(...arguments);\n\n      this._onMousedown = e => {\n        Ember.run.scheduleOnce('afterRender', this, 'onMousedown', e);\n      };\n\n      this.$().on('mousedown', this._onMousedown);\n    },\n\n    willDestroyElement() {\n      this.$().off('mousedown', this._onMousedown);\n      this._onMousedown = null;\n\n      this._super(...arguments);\n    },\n\n    onMousedown() {\n      const onMousemove = e => {\n        Ember.run.scheduleOnce('afterRender', this, 'resizeModal', e);\n      };\n\n      const onMouseup = () => {\n        Ember.run.schedule('afterRender', () => {\n          Ember.$(document).off('mouseup', onMouseup);\n          Ember.$(document).off('mousemove', onMousemove);\n        });\n      };\n\n      Ember.$(document).on('mousemove', onMousemove); //rm listeners to avoid bloat\n\n      Ember.$(document).on('mouseup', onMouseup);\n    },\n\n    resizeModal(e) {\n      const coords = {\n        x: e.pageX\n      };\n      this.get('onResizeModal')(coords);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/modals/edit-form/resize-handle/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"HOsE7ZcK\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"edit-modal-resize-handle\\\"],[9],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/dashboard/modals/edit-form/resize-handle/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/modals/edit-form/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"L+Uk+kay\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"containerClassNames\\\",\\\"overlayClass\\\",\\\"targetAttachment\\\",\\\"hasOverlay\\\"],[\\\"edit-widget-modal\\\",\\\"edit-widget-overlay\\\",\\\"left\\\",false]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[1,[27,\\\"dashboard/modals/edit-form/resize-handle\\\",null,[[\\\"onResizeModal\\\"],[[27,\\\"action\\\",[[22,0,[]],\\\"resizeModal\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"editModal\\\",\\\"editComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"component\\\",[[23,[\\\"editModal\\\",\\\"editComponent\\\"]]],[[\\\"editableRecords\\\"],[[23,[\\\"editableRecords\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/dashboard/modals/edit-form/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/route\", [\"exports\", \"lodash\", \"moment\", \"ember-simple-auth/mixins/authenticated-route-mixin\", \"adept-iq/classes/road-supervisor-api\", \"adept-iq/classes/road-supervisor-special-route-api\", \"adept-iq/config/environment\", \"adept-iq/classes/active-contexts/dispatch/dispatch\", \"adept-iq/classes/active-contexts/playback/playback\", \"adept-iq/classes/active-contexts/schedule/schedule\", \"adept-iq/classes/active-contexts/booking/booking\", \"adept-iq/classes/active-contexts/permission/permission\", \"adept-iq/classes/active-contexts/reconcile/reconcile\", \"adept-iq/classes/map-contexts/workspaces/dispatch\", \"adept-iq/classes/map-contexts/workspaces/avlm\", \"adept-iq/classes/map-contexts/workspaces/reconcile\", \"adept-iq/classes/map-contexts/workspaces/schedule\", \"adept-iq/classes/map-contexts/workspaces/booking\", \"adept-iq/classes/map-contexts/workspaces/permission\", \"adept-iq/models/dashboard\"], function (_exports, _lodash, _moment, _authenticatedRouteMixin, _roadSupervisorApi, _roadSupervisorSpecialRouteApi, _environment, _dispatch, _playback, _schedule, _booking, _permission, _reconcile, _dispatch2, _avlm, _reconcile2, _schedule2, _booking2, _permission2, _dashboard) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // active context classes\n  // map context classes\n  const LOCAL_STORAGE_KEY = 'dashboard-info';\n\n  function getAccessData(userId) {\n    let accessData;\n    let data = localStorage.getItem(LOCAL_STORAGE_KEY) || '{}';\n\n    try {\n      let json = JSON.parse(data);\n\n      if (json.userId === userId && json.accessData) {\n        accessData = json.accessData;\n      }\n    } catch (e) {}\n\n    return accessData;\n  }\n\n  var _default = Ember.Route.extend(_authenticatedRouteMixin.default, {\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    map: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    store: Ember.inject.service(),\n    maximizer: Ember.inject.service(),\n    user: Ember.inject.service(),\n    gps: Ember.inject.service(),\n    polyline: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    coreEntityPopulator: Ember.inject.service(),\n    activeContextCache: null,\n\n    beforeModel() {\n      if (this.user.isRoadSupEnable()) {\n        let accessData = getAccessData(this.user.userId);\n\n        if (accessData) {\n          let {\n            vehicleId,\n            driverId\n          } = accessData;\n          let driver = this.store.peekRecord('driver', driverId) || {\n            id: \"3000\"\n          };\n          let vehicle = this.store.peekRecord('vehicle', vehicleId) || {\n            id: \"2001\"\n          };\n          let roadSupervisorApi = _environment.default.APP.avlmLite ? _roadSupervisorApi.default.getSingleton() : _roadSupervisorSpecialRouteApi.default.getSingleton();\n\n          if (!this.get('maximizer.isWiddgetMinified')) {\n            return this.gps.getLocation().then(pos => {\n              let location = [pos.coords.latitude, pos.coords.longitude];\n              roadSupervisorApi.initialize({\n                driver,\n                vehicle,\n                location\n              });\n              roadSupervisorApi.startLocationPing(); // do something with access data\n            }).catch(e => {\n              console.log(e);\n            });\n          }\n\n          return;\n        } else {\n          this.transitionTo('dashboard-info');\n        }\n      }\n\n      this.setupConfigParams();\n    },\n\n    model(params) {\n      return this.store.findAll('cs-config-permission').then(configPermissions => {\n        this.set('workspace.configPermissions', configPermissions.get('firstObject.value'));\n        return this.store.findRecord('dashboard', params.id);\n      }).catch(e => {\n        console.log(e);\n        this.transitionTo('login');\n      });\n    },\n\n    // This is needed for setting up the widgets\n    // There is a call to get all cs-config-item but does not work because of timing issue.\n    setupConfigParams() {\n      this.get('store').findRecord('cs-config-item', 'config-Book_Trips/allowFundingAgency');\n    },\n\n    setupTimelinePermission(model) {\n      const isFullAccess = this.store.peekAll('cs-config-permission').get('firstObject.isFullAccessTimeline');\n\n      if (!isFullAccess) {\n        model.set('startDate', (0, _moment.default)().hours(0).minutes(0).seconds(0).milliseconds(0).toDate());\n        model.set('endDate', (0, _moment.default)().hours(23).minutes(59).seconds(59).milliseconds(999).toDate()); // moment().startOf('day') not get the same value everytime\n\n        const referenceDate = (0, _moment.default)().hours(0).minutes(0).seconds(0).milliseconds(0).toDate();\n        model.set('referenceDate', referenceDate);\n      } // currently a hack to allow schedule dashboard to be a day ahead.\n      // however we only need to modify the schedule default workspace to be a day ahead\n      // and then we can remove this *code*\n\n\n      if (model.get('isScheduleDashboard')) {\n        const nextDay = (0, _moment.default)().startOf('day').add(1, 'day');\n        model.set('startDate', nextDay.hours(0).minutes(0).seconds(0).milliseconds(0).toDate());\n        model.set('endDate', nextDay.hours(23).minutes(59).seconds(59).milliseconds(999).toDate());\n        const referenceDate = (0, _moment.default)().hours(0).minutes(0).seconds(0).milliseconds(0).toDate();\n        model.set('referenceDate', referenceDate);\n      }\n    },\n\n    afterModel(model) {\n      if (model) {\n        this.setupTimelinePermission(model);\n        localStorage.setItem('lastDashboardId', model.get('id'));\n        const userDash = localStorage.getItem('userDash');\n        const currentUser = localStorage.getItem('currentUser');\n        const arr = Ember.isPresent(userDash) ? userDash.split(',') : [];\n\n        const user = _lodash.default.find(arr, users => {\n          return users.split('*')[0] === currentUser;\n        });\n\n        arr.splice(arr.indexOf(user), 1);\n        arr.push(`${currentUser}*${model.get('id')}`);\n        localStorage.setItem('userDash', arr);\n      } // update active context state\n\n\n      this.updateActiveContextState(model); // update map context state\n\n      this.updateMapContextState(model); // wait for 1 ms. This is enough to eliminate exceptions\n      // when switching dashboards.\n\n      Ember.run.next(() => {\n        const configPermissions = this.get('workspace.configPermissions');\n\n        if (configPermissions && model) {\n          this.get('workspace').set('dashboardModel', model);\n        } else {\n          this.store.findAll('cs-config-permission').then(currConfigPermissions => {\n            this.set('workspace.configPermissions', currConfigPermissions.get('firstObject.value'));\n            if (model) this.get('workspace').set('dashboardModel', model);\n          });\n        }\n\n        const maximizer = this.get('maximizer');\n\n        if (maximizer.get('checkedItems')) {\n          maximizer.set('checkedItems', null);\n          return;\n        } // clear out any checked items\n\n\n        this.get('activeContext.topActiveContext').reset(); // setup notification banners\n\n        this.get('notifications').setup(); // send wootric survey\n\n        this.requestWootricSurvey(model);\n      });\n    },\n\n    requestWootricSurvey(model) {\n      let eventName = '';\n\n      switch (model.role) {\n        case _dashboard.PLAYBACK_ROLENAME:\n          this.get('workspace').requestWootricSurvey('on_openPlayback');\n          break;\n\n        case _dashboard.DISPATCH_ROLENAME:\n          this.get('workspace').requestWootricSurvey('on_openDispatch');\n          break;\n\n        default:\n          break;\n      }\n    },\n\n    updateActiveContextState(model) {\n      const activeContext = this.get('activeContext');\n      const map = this.get('map');\n\n      if (!activeContext.get('isEmpty')) {\n        activeContext.popContext();\n      }\n\n      let newActiveContext = null;\n      const activeContextCache = this.get('activeContextCache') || {};\n\n      if (activeContextCache[model.role]) {\n        activeContext.pushContext(activeContextCache[model.role]);\n        return;\n      }\n\n      switch (model.role) {\n        case _dashboard.SCHEDULE_ROLENAME:\n          newActiveContext = _schedule.default.create({\n            activeContext: this.get('activeContext'),\n            widget: this.get('widget'),\n            coreEntityPopulator: this.get('coreEntityPopulator'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            workspaceContext: this.get('workspaceContext'),\n            store: this.get('store'),\n            workspace: this.get('workspace'),\n            user: this.get('user'),\n            map: map\n          });\n          break;\n\n        case _dashboard.PLAYBACK_ROLENAME:\n          newActiveContext = _playback.default.create({\n            activeContext: this.get('activeContext'),\n            widget: this.get('widget'),\n            coreEntityPopulator: this.get('coreEntityPopulator'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            workspaceContext: this.get('workspaceContext'),\n            store: this.get('store'),\n            workspace: this.get('workspace'),\n            user: this.get('user')\n          });\n          break;\n\n        case _dashboard.RECONCILE_ROLENAME:\n          newActiveContext = _reconcile.default.create({\n            activeContext: this.get('activeContext'),\n            widget: this.get('widget'),\n            coreEntityPopulator: this.get('coreEntityPopulator'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            workspaceContext: this.get('workspaceContext'),\n            store: this.get('store'),\n            workspace: this.get('workspace'),\n            user: this.get('user')\n          });\n          break;\n\n        case _dashboard.BOOK_ROLENAME:\n          newActiveContext = _booking.default.create({\n            activeContext: this.get('activeContext'),\n            widget: this.get('widget'),\n            coreEntityPopulator: this.get('coreEntityPopulator'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            workspaceContext: this.get('workspaceContext'),\n            store: this.get('store'),\n            workspace: this.get('workspace'),\n            user: this.get('user')\n          });\n          break;\n\n        case _dashboard.PERMISSIONS_ROLENAME:\n          newActiveContext = _permission.default.create({\n            activeContext: this.get('activeContext'),\n            widget: this.get('widget'),\n            coreEntityPopulator: this.get('coreEntityPopulator'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            workspaceContext: this.get('workspaceContext'),\n            store: this.get('store'),\n            workspace: this.get('workspace'),\n            user: this.get('user')\n          });\n          break;\n\n        case _dashboard.DISPATCH_ROLENAME:\n        default:\n          if (_environment.default.APP.avlmLite) {\n            newActiveContext = AvlmActiveContext.create({\n              activeContext: this.get('activeContext'),\n              widget: this.get('widget'),\n              coreEntityPopulator: this.get('coreEntityPopulator'),\n              roadSupervisor: this.get('roadSupervisor'),\n              editModal: this.get('editModal'),\n              workspaceContext: this.get('workspaceContext'),\n              store: this.get('store'),\n              workspace: this.get('workspace'),\n              user: this.get('user')\n            });\n          } else {\n            newActiveContext = _dispatch.default.create({\n              activeContext: this.get('activeContext'),\n              widget: this.get('widget'),\n              coreEntityPopulator: this.get('coreEntityPopulator'),\n              roadSupervisor: this.get('roadSupervisor'),\n              editModal: this.get('editModal'),\n              workspaceContext: this.get('workspaceContext'),\n              store: this.get('store'),\n              workspace: this.get('workspace'),\n              user: this.get('user'),\n              map: map\n            });\n          }\n\n          break;\n      }\n\n      if (newActiveContext) {\n        this.set('activeContextCache', { ...activeContextCache,\n          [model.role]: newActiveContext\n        });\n      }\n\n      activeContext.pushContext(newActiveContext);\n    },\n\n    updateMapContextState(model) {\n      const map = this.get('map');\n\n      if (!map.get('isEmpty')) {\n        map.popContext();\n      }\n\n      let newMapContext = null;\n\n      switch (model.role) {\n        case _dashboard.SCHEDULE_ROLENAME:\n          newMapContext = _schedule2.default.create({\n            activeContext: this.get('activeContext'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            polylineService: this.get('polyline'),\n            store: this.get('store'),\n            workspace: this.get('workspace'),\n            map: map\n          });\n          break;\n\n        case _dashboard.PLAYBACK_ROLENAME:\n          newMapContext = _avlm.default.create({\n            activeContext: this.get('activeContext'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            polylineService: this.get('polyline'),\n            store: this.get('store'),\n            workspace: this.get('workspace')\n          });\n          break;\n        // case RECONCILE_ROLENAME:\n        //   newMapContext  = ReconcileMapContext.create({\n        //     activeContext: this.get('activeContext'),\n        //     roadSupervisor: this.get('roadSupervisor'),\n        //     editModal: this.get('editModal'),\n        //     polylineService: this.get('polyline'),\n        //     store: this.get('store'),\n        //     workspace: this.get('workspace')\n        //   });\n        //   break;\n\n        case _dashboard.BOOK_ROLENAME:\n          newMapContext = _booking2.default.create({\n            activeContext: this.get('activeContext'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            polylineService: this.get('polyline'),\n            store: this.get('store'),\n            workspace: this.get('workspace')\n          });\n          break;\n\n        case _dashboard.PERMISSIONS_ROLENAME:\n          newMapContext = _permission2.default.create({\n            activeContext: this.get('activeContext'),\n            roadSupervisor: this.get('roadSupervisor'),\n            editModal: this.get('editModal'),\n            polylineService: this.get('polyline'),\n            store: this.get('store'),\n            workspace: this.get('workspace')\n          });\n          break;\n\n        case _dashboard.DISPATCH_ROLENAME:\n        default:\n          if (_environment.default.APP.avlmLite) {\n            newMapContext = _avlm.default.create({\n              activeContext: this.get('activeContext'),\n              roadSupervisor: this.get('roadSupervisor'),\n              editModal: this.get('editModal'),\n              polylineService: this.get('polyline'),\n              store: this.get('store'),\n              workspace: this.get('workspace')\n            });\n          } else {\n            newMapContext = _dispatch2.default.create({\n              activeContext: this.get('activeContext'),\n              roadSupervisor: this.get('roadSupervisor'),\n              editModal: this.get('editModal'),\n              polylineService: this.get('polyline'),\n              store: this.get('store'),\n              workspace: this.get('workspace'),\n              map: map\n            });\n          }\n\n          break;\n      }\n\n      map.pushContext(newMapContext);\n    },\n\n    deactivate() {\n      if (this.user.isRoadSupEnable()) {\n        _roadSupervisorApi.default.getSingleton().endLocationPing();\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/dashboard/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"225iVmi5\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"class\\\",\\\"dashboard-wrapper\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[23,[\\\"isWidgetMinified\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[1,[21,\\\"maximize-widget\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[27,\\\"and\\\",[[23,[\\\"workspace\\\",\\\"useWidgetLayoutWorkspace\\\"]],[27,\\\"not\\\",[[23,[\\\"workspace\\\",\\\"isRiderManagementDashboard\\\"]]],null],[27,\\\"not\\\",[[23,[\\\"workspace\\\",\\\"isReportsDashboard\\\"]]],null]],null]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[12,\\\"class\\\",[28,[\\\"tile-dashboard-wrapper \\\",[27,\\\"unless\\\",[[23,[\\\"isWidgetMinified\\\"]],\\\"widget-maximize\\\",\\\"\\\"],null],\\\" \\\"]]],[9],[0,\\\"\\\\n    \\\"],[1,[27,\\\"tile-dashboard\\\",null,[[\\\"dashboard\\\"],[[23,[\\\"workspace\\\",\\\"dashboard\\\"]]]]],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isVehicleDriverDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"tile-dashboard-wrapper\\\"],[9],[0,\\\"\\\\n    \\\"],[2,\\\" vehicle-driver management component if needed can be transformed into a widget by embedding the component into that widget \\\"],[0,\\\"\\\\n    \\\"],[1,[21,\\\"iq-widgets/vehicle-driver-manager-widget\\\"],false],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isRiderManagementDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"rider-management-widget\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isReportsDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"reports-widget\\\",null,[[\\\"dashboard\\\"],[[23,[\\\"workspace\\\",\\\"dashboard\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[23,[\\\"workspace\\\",\\\"isAdhocReportsDashboard\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[21,\\\"adhoc-reports-widget\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"  \\\"],[1,[21,\\\"outlet\\\"],false],[0,\\\"\\\\n\\\\n  \\\"],[1,[21,\\\"wootric-survey\\\"],false],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/dashboard/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/forgot-password/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    errors: Ember.computed.alias('data.errors'),\n    success: Ember.computed.alias('data.success')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/forgot-password/route\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n\n    setupController(controller\n    /*, model*/\n    ) {\n      // can we pass in the user's email ?\n      controller.set('data', {});\n    },\n\n    actions: {\n      cancel() {\n        this.transitionTo('index');\n      },\n\n      reset(email) {\n        const ajax = this.get('ajax');\n        const data = {\n          email: email\n        };\n        const message = 'Reset Password Failed';\n        const successMessage = `Password Reset Email has been sent to ${email}`;\n        return ajax.request(_apiUrls.API.ssoService.host + '/passwordResetToken', {\n          dataType: 'text',\n          contentType: 'application/json',\n          method: 'POST',\n          data: data\n        }).then(() => {\n          /*eslint-disable */\n          this.set('controller.data.errors', undefined);\n          /*eslint-enable */\n\n          return this.set('controller.data.success', successMessage);\n        }).catch(e => {\n          /*eslint-disable */\n          console.log(e);\n          this.set('controller.data.success', undefined);\n          /*eslint-enable */\n\n          return this.set('controller.data.errors', [message]);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/forgot-password/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"OHnc/sh3\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"forgot-password-template\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h3\\\"],[9],[0,\\\"\\\\n    Forgot Password\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[1,[27,\\\"forgot-form\\\",null,[[\\\"errors\\\",\\\"success\\\",\\\"onSubmit\\\"],[[27,\\\"readonly\\\",[[23,[\\\"errors\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"success\\\"]]],null],[27,\\\"route-action\\\",[\\\"reset\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/forgot-password/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/index/index/route\", [\"exports\", \"ember-simple-auth/mixins/authenticated-route-mixin\"], function (_exports, _authenticatedRouteMixin) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend(_authenticatedRouteMixin.default, {\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n\n    model() {\n      return new Ember.RSVP.Promise((resolve\n      /*, reject*/\n      ) => {\n        this.fetchLastDashboard().then(dashboard => {\n          if (dashboard) {\n            resolve(dashboard);\n            return;\n          } // try to get default dashboard instead\n\n\n          this.store.findAll('dashboard').then(dashboards => {\n            let dashboard2 = dashboards.findBy('id', this.fetchDefaultDashboard());\n\n            if (!dashboard2) {\n              // default is missing, use whatever we can find\n              dashboard2 = dashboards.get('firstObject');\n            }\n\n            resolve(dashboard2);\n          });\n        });\n      });\n    },\n\n    fetchLastDashboard() {\n      const lastDashboardId = localStorage.getItem('lastDashboardId');\n\n      if (Ember.isNone(lastDashboardId)) {\n        return Ember.RSVP.resolve(null);\n      } // Road supervisor should not keep non road supervisor dashboard ID\n\n\n      if (this.user.isRoadSupEnable() || this.user.isRoadSupDesktop()) {\n        return new Ember.RSVP.Promise(resolve => {\n          this.store.findRecord('dashboard', lastDashboardId).then(dashboard => {\n            if (dashboard.role === 'Road Supervisor') {\n              resolve(dashboard);\n              return;\n            }\n\n            throw new Error('not roadsupervisor dashboard');\n          }).catch(() => {\n            // don't try this again\n            localStorage.removeItem('lastDashboardId');\n            resolve(null);\n          });\n        });\n      }\n\n      return new Ember.RSVP.Promise(resolve => {\n        this.store.findRecord('dashboard', lastDashboardId).then(resolve).catch(() => {\n          // don't try this again\n          localStorage.removeItem('lastDashboardId');\n          resolve(null);\n        });\n      });\n    },\n\n    fetchDefaultDashboard() {\n      let DEFAULT_DASHBOARD_ID = 'workspaces-default/default';\n\n      if (this.user.isRoadSupEnable()) {\n        DEFAULT_DASHBOARD_ID = 'workspaces-roadsup/road_supervisor_monitor';\n      } else if (this.user.isDispatcher()) {\n        DEFAULT_DASHBOARD_ID = 'workspaces-dispatch/dispatch';\n      } else if (this.user.isRoadSupDesktop()) {\n        DEFAULT_DASHBOARD_ID = 'workspaces-roadsup/road_supervisor_monitor';\n      }\n\n      return DEFAULT_DASHBOARD_ID;\n    },\n\n    afterModel(dashboard) {\n      if (!dashboard) {\n        return this.transitionTo('index.modals.create-dashboard');\n      }\n\n      this.transitionTo('dashboard', dashboard);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/index/modals/create-dashboard/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    classNames: ['create-dashboard-wrapper'],\n    actions: {\n      toggleModal() {\n        this.transitionToRoute('index');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/index/modals/create-dashboard/route\", [\"exports\", \"ember-simple-auth/mixins/authenticated-route-mixin\"], function (_exports, _authenticatedRouteMixin) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend(_authenticatedRouteMixin.default, {\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n\n    model() {\n      return this.store.createRecord('dashboard');\n    },\n\n    actions: {\n      createDashboard(dashboard) {\n        dashboard.save().then(() => {\n          this.get('tooltip').reset();\n          this.transitionTo('dashboard', dashboard).then(() => {\n            const workspace = this.get('workspace');\n            workspace.pushState('editWorkspace');\n          });\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/index/modals/create-dashboard/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"tBTijs5F\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"class\\\",\\\"targetAttachment\\\",\\\"translucentOverlay\\\"],[\\\"toggleModal\\\",\\\"create-dashboard-wrapper\\\",\\\"center\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"modal-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h6\\\"],[9],[0,\\\"Save Dashboard\\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"x-button\\\"],[9],[0,\\\"\\\\n      ✕\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"toggleModal\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/input\\\",null,[[\\\"label\\\",\\\"value\\\",\\\"placeholder\\\",\\\"type\\\"],[\\\"Dashboard Name\\\",[23,[\\\"model\\\",\\\"name\\\"]],\\\"name\\\",\\\"text\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row mt-3\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-default col-4 offset-4 mt-3 mb-3\\\"],[9],[0,\\\"\\\\n        Discard Changes\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"toggleModal\\\"]],[10],[0,\\\"\\\\n\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-primary-simple col-4 mt-3 mb-3\\\"],[9],[0,\\\"\\\\n        Save\\\\n      \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"createDashboard\\\",[23,[\\\"model\\\"]]]],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/index/modals/create-dashboard/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/index/modals/settings/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const TILE_SIZE_OPTIONS = [100, 150, 200];\n  const TILE_SIZE_LABELS = {\n    '100': 'Small',\n    '150': 'Medium',\n    '200': 'Large'\n  };\n  const TILE_SPACING_OPTIONS = [2, 4, 6];\n  const TILE_SPACING_LABELS = {\n    '2': 'Small',\n    '4': 'Medium',\n    '6': 'Large'\n  };\n  const COLOR_MODE_OPTIONS = ['light', 'dark'];\n  const COLOR_MODE_LABELS = {\n    'light': 'Light mode',\n    'dark': 'Dark mode'\n  };\n\n  var _default = Ember.Controller.extend({\n    workspace: Ember.inject.service(),\n    tileSizeOptions: TILE_SIZE_OPTIONS,\n    tileSizeLabels: TILE_SIZE_LABELS,\n    tileSpacingOptions: TILE_SPACING_OPTIONS,\n    tileSpacingLabels: TILE_SPACING_LABELS,\n    colorModeOptions: COLOR_MODE_OPTIONS,\n    colorModeLabels: COLOR_MODE_LABELS,\n    selectedTileSize: Ember.computed.alias('workspace.tileSize'),\n    selectedTileSpacing: Ember.computed.alias('workspace.tileSpacing'),\n    selectedColorMode: Ember.computed('workspace.isLightMode', function () {\n      const isLight = this.get('workspace.isLightMode');\n\n      if (isLight) {\n        return 'light';\n      }\n\n      return 'dark';\n    }),\n    actions: {\n      toggleModal() {\n        this.transitionToRoute('index');\n      },\n\n      didSelectColorMode(colorMode) {\n        if (colorMode === 'dark') {\n          this.set('workspace.isLightMode', false);\n        } else {\n          this.set('workspace.isLightMode', true);\n        }\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/index/modals/settings/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"861f49dx\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"modal-dialog\\\",null,[[\\\"onClose\\\",\\\"targetAttachment\\\",\\\"translucentOverlay\\\"],[\\\"toggleModal\\\",\\\"center\\\",true]],{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[0,\\\"\\\\n\\\"],[0,\\\"\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"modal-header\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"h5\\\"],[9],[0,\\\"User Settings\\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"x-button\\\"],[9],[0,\\\"\\\\n      ✕\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"toggleModal\\\"]],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"container\\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"Change Password\\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col-6\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/input\\\",null,[[\\\"label\\\",\\\"value\\\",\\\"placeholder\\\",\\\"type\\\"],[\\\"Existing Password\\\",[23,[\\\"existingPassword\\\"]],\\\"********\\\",\\\"password\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/input\\\",null,[[\\\"label\\\",\\\"value\\\",\\\"placeholder\\\",\\\"type\\\"],[\\\"New Password\\\",[23,[\\\"newPassword\\\"]],\\\"********\\\",\\\"password\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[27,\\\"form-components/input\\\",null,[[\\\"label\\\",\\\"value\\\",\\\"placeholder\\\",\\\"type\\\"],[\\\"Confirm Password\\\",[23,[\\\"newPasswordConfirmation\\\"]],\\\"********\\\",\\\"password\\\"]]],false],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn-primary-simple col-5 offset-7 mt-1 mb-1\\\"],[9],[0,\\\"Change Password\\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[10],[0,\\\"\\\\n\\\\n    \\\"],[7,\\\"h6\\\"],[11,\\\"class\\\",\\\"mt-2\\\"],[9],[0,\\\"Reset Password\\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"row\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"_blank\\\"],[9],[0,\\\"Reset your password\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"col\\\"],[9],[0,\\\"\\\\n        \\\"],[7,\\\"a\\\"],[11,\\\"href\\\",\\\"TODO\\\"],[9],[0,\\\"Logout of IQUX\\\"],[10],[0,\\\"\\\\n      \\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n  \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/index/modals/settings/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/login/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    errors: Ember.computed.alias('data.errors')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/login/route\", [\"exports\", \"lodash\", \"ember-simple-auth/mixins/unauthenticated-route-mixin\", \"moment\", \"md5\"], function (_exports, _lodash, _unauthenticatedRouteMixin, _moment, _md) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend(_unauthenticatedRouteMixin.default, {\n    session: Ember.inject.service(),\n    flashMessages: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    map: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    setupController(controller\n    /*, model*/\n    ) {\n      controller.set('data', {});\n    },\n\n    doLogUserSignOn() {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const eventLog = {\n        type: 'event',\n        attributes: {\n          source: 'webApp',\n          eventType: 'UE',\n          actionType: 'signOn',\n          userId: this.get('session.data.authenticated.userId'),\n          receivedAt: (0, _moment.default)().toDate(),\n          eventLog: {\n            signOn: [{\n              activity: 'Sign On',\n              loggingType: 'user',\n              details: 'Signed on'\n            }]\n          }\n        }\n      };\n      return activityLogAdapter.createEventActivity(eventLog);\n    },\n\n    actions: {\n      login(userName, password) {\n        const session = this.get('session');\n        const authenticator = 'authenticator:sso';\n        let userLoggedIn = false;\n        this.get('flashMessages').clearMessages();\n        session.authenticate(authenticator, userName, password).then(() => {\n          this.get('map'); // initialize map for boundaryBox\n\n          this.transitionTo().abort();\n          this.get('workspace').initUserRecord().then(res => {\n            if (res && !res.data) {\n              localStorage.setItem('currentUser', userName);\n              localStorage.setItem('currentPassword', (0, _md.default)(password));\n              localStorage.setItem('notAllowedToProceed', true);\n              localStorage.setItem('notAllowedToProceedTarget', 'require-new-password');\n              this.replaceWith('require-new-password');\n              return;\n            }\n\n            this.store.findAll('cs-config-permission').then(configPermissions => {\n              this.set('workspace.configPermissions', configPermissions.get('firstObject.value'));\n              localStorage.setItem('currentUser', userName);\n              const userDash = localStorage.getItem('userDash');\n\n              if (!userDash) {\n                localStorage.setItem('userDash', `${userName}*null`);\n                localStorage.removeItem('lastDashboardId');\n              } else {\n                const arr = userDash.split(',');\n\n                const user = _lodash.default.find(arr, users => {\n                  return users.split('*')[0] === userName;\n                });\n\n                if (!user) {\n                  arr.push(`${userName}*null`);\n                  localStorage.setItem('userDash', arr);\n                  localStorage.removeItem('lastDashboardId');\n                } else {\n                  localStorage.setItem('lastDashboardId', user.split('*')[1]);\n                }\n              }\n\n              userLoggedIn = true;\n              return this.doLogUserSignOn();\n            }).then(() => {\n              this.transitionTo('index');\n            }).catch(e => {\n              if (userLoggedIn) {\n                this.transitionTo('index');\n              }\n\n              let message;\n              let errorMessage = e.message;\n\n              if (errorMessage.includes('Unexpected response from ADEPT4 adapter:')) {\n                errorMessage = 'InternalServerError';\n              }\n\n              switch (errorMessage) {\n                case 'Unauthorized':\n                  message = 'Email or password is not correct.';\n                  break;\n\n                case 'Disabled':\n                  message = 'Your account is disabled. Please contact your system administrator.';\n                  break;\n\n                case 'InternalServerError':\n                  message = 'An error occurred while connecting to ADEPT 4, please try again. If the problem persists, contact an administrator for assistance.';\n                  break;\n\n                default:\n                  message = '';\n              }\n\n              if (Ember.isPresent(message)) {\n                return this.set('controller.data.errors', [message]);\n              }\n\n              throw e;\n            });\n          });\n        }).catch(e => {\n          let message;\n          let errorMessage = e.message;\n\n          if (errorMessage.includes('Unexpected response from ADEPT4 adapter:')) {\n            errorMessage = 'InternalServerError';\n          }\n\n          switch (errorMessage) {\n            case 'Unauthorized':\n              message = 'Email or password is not correct.';\n              break;\n\n            case 'Disabled':\n              message = 'Your account is disabled. Please contact your system administrator.';\n              break;\n\n            case 'InternalServerError':\n              message = 'An error occurred while connecting to ADEPT 4, please try again. If the problem persists, contact an administrator for assistance.';\n              break;\n\n            case 'MissingWorkspacePermission':\n              message = 'Unable to sign on due to missing workspace permission to assigned role. Contact administrator';\n              break;\n\n            default:\n              message = errorMessage;\n          }\n\n          if (Ember.isPresent(message)) {\n            return this.set('controller.data.errors', [message]);\n          }\n\n          this.transitionTo().abort();\n          throw e;\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/login/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"mgoetpDl\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"login-template\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h1\\\"],[9],[0,\\\"\\\\n    Sign On\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[1,[27,\\\"login-form\\\",null,[[\\\"errors\\\",\\\"onSubmit\\\"],[[27,\\\"readonly\\\",[[23,[\\\"errors\\\"]]],null],[27,\\\"route-action\\\",[\\\"login\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/login/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/register/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    queryParams: ['invitationId'],\n\n    /*eslint-disable */\n    invitationId: undefined,\n    data: undefined,\n\n    /*eslint-enable */\n    invitation: Ember.computed.alias('data.invitation'),\n    errors: Ember.computed.alias('data.errors')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/register/route\", [\"exports\", \"fetch\", \"adept-iq/config/api-urls\"], function (_exports, _fetch, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    session: Ember.inject.service(),\n\n    model(_ref) {\n      let {\n        invitationId\n      } = _ref;\n      if (Ember.isBlank(invitationId)) return;\n      return this.store.findRecord('invitation', invitationId).catch(e => {\n        if (e.errors.firstObject.status !== '404') throw e;\n      });\n    },\n\n    setupController(controller, model) {\n      controller.set('data', {\n        invitation: model\n      });\n    },\n\n    makeRequest(url, options) {\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        (0, _fetch.default)(url, options).then(response => {\n          response.json().then(body => {\n            if (!response.ok) {\n              reject(body);\n            } else {\n              resolve(body);\n            }\n          });\n        }).catch(reject);\n      });\n    },\n\n    actions: {\n      register(userName, password) {\n        const {\n          host\n        } = _apiUrls.API.ssoService;\n        const url = host + '/signup';\n        const data = {\n          userName,\n          password,\n          displayName: userName\n        };\n        const options = {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json'\n          },\n          body: JSON.stringify(data)\n        };\n        this.makeRequest(url, options).then(tokenPayload => {\n          const session = this.get('session');\n          const authenticator = 'authenticator:sso';\n          session.authenticate(authenticator, userName, password, tokenPayload).then(() => {\n            this.transitionTo('index');\n          });\n        }).catch(e => {\n          this.set('controller.data.errors', [e.message]);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/register/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"Gliyhbfg\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"register-template\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h1\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"invitation\\\",\\\"isAdmin\\\"]]],null,{\\\"statements\\\":[[0,\\\"      Create Admin Account\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      Register\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"invitation\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[27,\\\"register-form\\\",null,[[\\\"invitation\\\",\\\"errors\\\",\\\"onSubmit\\\"],[[27,\\\"readonly\\\",[[23,[\\\"invitation\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"errors\\\"]]],null],[27,\\\"route-action\\\",[\\\"register\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[7,\\\"div\\\"],[9],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"An invite code is required to use IQUX.\\\"],[10],[0,\\\"\\\\n      \\\"],[7,\\\"p\\\"],[9],[0,\\\"Please check your inbox or contact your system adminstrator for support.\\\"],[10],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/register/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/require-new-password/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    session: Ember.inject.service(),\n    isNewUser: Ember.computed.alias('session.isNewUser')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/require-new-password/route\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    session: Ember.inject.service(),\n    actions: {\n      redirectToLogin() {\n        localStorage.clear();\n        window.location.assign('/login');\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/require-new-password/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"IUVvt02W\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"require-new-password\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h1\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[23,[\\\"isNewUser\\\"]]],null,{\\\"statements\\\":[[0,\\\"      Temporary Password Expired\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"      Your Password Is Expired\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"  \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"div\\\"],[11,\\\"class\\\",\\\"content\\\"],[9],[0,\\\"\\\\n    \\\"],[7,\\\"label\\\"],[9],[0,\\\"\\\\n        Please create a new password.\\\\n    \\\"],[10],[0,\\\"\\\\n    \\\"],[7,\\\"button\\\"],[11,\\\"class\\\",\\\"btn btn\\\"],[9],[0,\\\"\\\\n     Cancel\\\\n    \\\"],[3,\\\"action\\\",[[22,0,[]],\\\"redirectToLogin\\\"]],[10],[0,\\\"\\\\n      \\\"],[4,\\\"link-to\\\",[\\\"change-password\\\"],[[\\\"class\\\"],[\\\"btn btn\\\"]],{\\\"statements\\\":[[0,\\\"OK\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[10],[0,\\\"\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/require-new-password/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/reset-password/controller\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Controller.extend({\n    errors: Ember.computed.alias('data.errors'),\n    success: Ember.computed.alias('data.success')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/reset-password/route\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Route.extend({\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    queryParams: {\n      email: {},\n      token: {}\n    },\n\n    setupController(controller) {\n      // can we pass in the user's email ?\n      controller.set('data', {});\n    },\n\n    actions: {\n      reset(newPassword) {\n        const ajax = this.get('ajax');\n        const data = {\n          email: this.get('controller.email'),\n          passwordResetToken: this.get('controller.token'),\n          newPassword: newPassword\n        };\n        const message = 'Reset Password Failed';\n        const successMessage = 'Reset Password Successful';\n        return ajax.request(_apiUrls.API.ssoService.host + '/reset-password', {\n          dataType: 'text',\n          contentType: 'application/json',\n          method: 'POST',\n          data: data\n        }).then(() => {\n          /*eslint-disable */\n          this.set('controller.data.errors', undefined);\n          /*eslint-enable */\n\n          return this.set('controller.data.success', successMessage);\n        }).catch(e => {\n          /*eslint-disable */\n          console.log(e);\n          this.set('controller.data.success', undefined);\n          /*eslint-enable */\n\n          return this.set('controller.data.errors', [message]);\n        });\n      }\n\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/pods/reset-password/template\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.HTMLBars.template({\n    \"id\": \"xYliN0HW\",\n    \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[7,\\\"div\\\"],[11,\\\"id\\\",\\\"reset-password-template\\\"],[9],[0,\\\"\\\\n\\\\n  \\\"],[7,\\\"h3\\\"],[9],[0,\\\"\\\\n    Reset Password\\\\n  \\\"],[10],[0,\\\"\\\\n\\\\n  \\\"],[1,[27,\\\"reset-form\\\",null,[[\\\"errors\\\",\\\"success\\\",\\\"onSubmit\\\"],[[27,\\\"readonly\\\",[[23,[\\\"errors\\\"]]],null],[27,\\\"readonly\\\",[[23,[\\\"success\\\"]]],null],[27,\\\"route-action\\\",[\\\"reset\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[10],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\",\n    \"meta\": {\n      \"moduleName\": \"adept-iq/pods/reset-password/template.hbs\"\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/resolver\", [\"exports\", \"ember-resolver\"], function (_exports, _emberResolver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _emberResolver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/router\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const Router = Ember.Router.extend({\n    location: _environment.default.locationType,\n    rootURL: _environment.default.rootURL\n  });\n  Router.map(function () {\n    this.route('register');\n    this.route('login');\n    this.route('forgot-password');\n    this.route('reset-password');\n    this.route('dashboard', {\n      path: '/dashboard/:role/:id'\n    }, function () {\n      this.route('modals', function () {\n        this.route('edit-form');\n      });\n    });\n    this.route('maximized');\n    this.route('index', {\n      path: '/'\n    }, function () {\n      this.route('modals', function () {\n        this.route('create-dashboard');\n        this.route('settings');\n      });\n    });\n    this.route('dashboard-info');\n    this.route('terms-of-service');\n    this.route('change-password');\n    this.route('change-password-confirmation');\n    this.route('require-new-password');\n  });\n  var _default = Router;\n  _exports.default = _default;\n});","define(\"adept-iq/routes/application\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Route\n  } = Ember; // Ensure the application route exists for ember-simple-auth's `setup-session-restoration` initializer\n\n  var _default = Route.extend();\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/avlm-core-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const dsVehicles = this.store.peekAll('vehicle').toArray();\n      const dsRoutes = this.store.peekAll('dispatch-route').toArray();\n      const routes = this.store.peekAll('route');\n      routes.forEach((route, index) => {\n        const dsRoute = dsRoutes[index];\n        const dsVehicle = dsVehicles[index];\n        const driver = dsRoute.get('assignedDriver.content');\n\n        if (index % 3 === 0) {\n          (0, _emberDataFactoryGuy.make)('avlm-emergency-message', 'emergency', {\n            vehicle: dsVehicle,\n            route,\n            driver\n          });\n          (0, _emberDataFactoryGuy.make)('avlm-emergency-message', {\n            vehicle: dsVehicle,\n            route,\n            driver\n          });\n        }\n\n        (0, _emberDataFactoryGuy.make)('avlm-canned-message', 'recieved', {\n          vehicle: dsVehicle,\n          route,\n          driver\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/avlm-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  const amountDrivers = 5;\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      // creating avlm-drivers\n      const drivers = (0, _emberDataFactoryGuy.makeList)('avlm-driver', amountDrivers).toArray();\n      const schedule = (0, _emberDataFactoryGuy.make)('avlm-schedule'); // creating avlm-vehicles\n\n      const providers = this.store.peekAll('provider').toArray();\n      drivers.forEach(driver => {\n        const random = Math.floor(Math.random() * (drivers.length - 1));\n        const randomProvider = providers[random];\n        (0, _emberDataFactoryGuy.make)('avlm-vehicle', {\n          driver,\n          provider: randomProvider\n        });\n      });\n      const vehicles = this.store.peekAll('avlm-vehicle').toArray(); // create avlm-routes\n\n      vehicles.forEach((vehicle, index) => {\n        const startAddress = (0, _emberDataFactoryGuy.make)('avlm-address');\n        const driver = drivers[index];\n        const endAddress = (0, _emberDataFactoryGuy.make)('avlm-address');\n        const avlmRoute = (0, _emberDataFactoryGuy.make)('avlm-route', 'pullout', {\n          vehicle,\n          schedule,\n          startAddress,\n          endAddress\n        });\n        const avlmCluster = (0, _emberDataFactoryGuy.make)('avlm-cluster', {\n          route: avlmRoute,\n          schedule\n        });\n        (0, _emberDataFactoryGuy.make)('avlm-route-vehicle-driver', {\n          route: avlmRoute,\n          driver,\n          vehicle\n        });\n        const etaNavRoute = (0, _emberDataFactoryGuy.make)('etanav-route', {\n          avlmRoute\n        });\n        (0, _emberDataFactoryGuy.make)('polyline', {\n          avlmRoute\n        });\n        const trips = (0, _emberDataFactoryGuy.makeList)('avlm-trip', 3, {\n          avlmRoute\n        });\n        const routeBreaks = [(0, _emberDataFactoryGuy.make)('avlm-route-break', {\n          avlmRoute\n        })];\n        (0, _emberDataFactoryGuy.make)('avlm-canned-message', {\n          avlmVehicle: vehicle,\n          avlmRoute: avlmRoute,\n          avlmDriver: vehicle.get('latestDriver.content')\n        });\n\n        if (index % 3 === 0) {\n          (0, _emberDataFactoryGuy.make)('avlm-emergency-message', {\n            avlmVehicle: vehicle,\n            avlmRoute: avlmRoute,\n            avlmDriver: vehicle.get('latestDriver.content')\n          });\n        }\n\n        let routeIndex = 0;\n        trips.forEach(avlmTrip => {\n          const pickAddress = (0, _emberDataFactoryGuy.make)('avlm-address');\n          const dropAddress = (0, _emberDataFactoryGuy.make)('avlm-address');\n          const avlmRider = (0, _emberDataFactoryGuy.make)('avlm-rider');\n          (0, _emberDataFactoryGuy.make)('avlm-trip-rider', {\n            avlmRider,\n            avlmTrip\n          });\n          routeIndex++;\n          let avlmStopPoint = (0, _emberDataFactoryGuy.make)('avlm-stop-point', 'pick', {\n            avlmTrip,\n            avlmCluster,\n            avlmAddress: pickAddress,\n            routeIndex\n          });\n          (0, _emberDataFactoryGuy.make)('etanav-stop-point', {\n            avlmStopPoint,\n            etaNavRoute\n          });\n          (0, _emberDataFactoryGuy.make)('polyline', {\n            avlmStopPoint\n          });\n          (0, _emberDataFactoryGuy.make)('avlm-rider-event', {\n            avlmRider,\n            avlmStopPoint,\n            avlmSchedule: schedule\n          });\n          avlmStopPoint = (0, _emberDataFactoryGuy.make)('avlm-stop-point', 'drop', {\n            avlmTrip,\n            avlmCluster,\n            avlmAddress: dropAddress,\n            routeIndex\n          });\n          (0, _emberDataFactoryGuy.make)('etanav-stop-point', {\n            avlmStopPoint,\n            etaNavRoute\n          });\n          (0, _emberDataFactoryGuy.make)('polyline', {\n            avlmStopPoint\n          });\n          (0, _emberDataFactoryGuy.make)('avlm-rider-event', {\n            avlmRider,\n            avlmStopPoint,\n            avlmSchedule: schedule\n          });\n        });\n        routeBreaks.forEach(routeBreak => {\n          routeIndex++;\n          (0, _emberDataFactoryGuy.make)('avlm-stop-point', 'Break', {\n            routeIndex,\n            routeBreak\n          });\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/booking-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const provider = this.store.peekAll('provider').firstObject;\n      const serviceWindow = this.store.peekAll('service-window').firstObject;\n      let riders = this.store.peekAll('rider');\n      const ridersLength = riders.length / 2;\n      const travelNeedType = this.store.peekAll('travel-need-type').firstObject;\n      const passengerType = this.store.peekAll('passenger-type').firstObject;\n      const fareType = this.store.peekAll('fare-type').firstObject;\n      const group = (0, _emberDataFactoryGuy.make)('group');\n      riders = riders.slice(0, ridersLength);\n      riders.forEach(rider => {\n        // Generic Bookings\n        const booking = (0, _emberDataFactoryGuy.make)('booking', {\n          provider,\n          group\n        });\n        const leg = (0, _emberDataFactoryGuy.make)('leg', {\n          booking,\n          serviceWindow,\n          rider\n        });\n        (0, _emberDataFactoryGuy.make)('leg-travel-need', {\n          leg,\n          travelNeedType,\n          passengerType\n        });\n        const segments = (0, _emberDataFactoryGuy.makeList)('segment', 3, {\n          leg,\n          fareType\n        });\n        segments.forEach(segment => {\n          const pickPlace = (0, _emberDataFactoryGuy.make)('place');\n          const dropPlace = (0, _emberDataFactoryGuy.make)('place');\n          const pickAddress = (0, _emberDataFactoryGuy.make)('address', {\n            places: [pickPlace]\n          });\n          const dropAddress = (0, _emberDataFactoryGuy.make)('address', {\n            places: [dropPlace]\n          });\n          (0, _emberDataFactoryGuy.make)('location', {\n            address: pickAddress,\n            places: [pickPlace]\n          });\n          (0, _emberDataFactoryGuy.make)('location', {\n            address: dropAddress,\n            places: [dropPlace]\n          });\n          const pickSegmentStop = (0, _emberDataFactoryGuy.make)('segment-stop', 'pick', {\n            pickSegment: segment,\n            place: pickPlace\n          });\n          const dropSegmentStop = (0, _emberDataFactoryGuy.make)('segment-stop', 'drop', {\n            dropSegment: segment,\n            place: dropPlace\n          });\n          (0, _emberDataFactoryGuy.make)('segment-stop-phone-number', {\n            segmentStop: pickSegmentStop\n          });\n          (0, _emberDataFactoryGuy.make)('segment-stop-phone-number', {\n            segmentStop: dropSegmentStop\n          });\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/config-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // file: app/scenarios/main.js\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  const CONFIG_LIMIT = 40;\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const vehicleCapacityType = (0, _emberDataFactoryGuy.make)('vehicle-capacity-type');\n      const vehicleCapacityConfig = (0, _emberDataFactoryGuy.makeList)('vehicle-capacity-config', 5, {\n        vehicleCapacityType\n      });\n      (0, _emberDataFactoryGuy.makeList)('cs-config-item', CONFIG_LIMIT);\n      (0, _emberDataFactoryGuy.makeList)('travel-need-type', 5);\n      (0, _emberDataFactoryGuy.makeList)('passenger-type', 3);\n      (0, _emberDataFactoryGuy.makeList)('eligibility-type', 3);\n      (0, _emberDataFactoryGuy.makeList)('provider', 5);\n      (0, _emberDataFactoryGuy.make)('no-show-reason-code'); // currently this will take priority over actual config permission in guy environment\n\n      (0, _emberDataFactoryGuy.make)('cs-config-permission', 'admin');\n      vehicleCapacityConfig.forEach(config => {\n        (0, _emberDataFactoryGuy.make)('vehicle-type', {\n          vehicleCapacityConfigs: config\n        });\n      });\n      (0, _emberDataFactoryGuy.makeList)('fare-type', 3);\n      (0, _emberDataFactoryGuy.make)('cancel-type');\n      (0, _emberDataFactoryGuy.make)('break-type', 'fixed');\n      (0, _emberDataFactoryGuy.make)('break-type', 'floating');\n      (0, _emberDataFactoryGuy.make)('service-window', 'appointment');\n      (0, _emberDataFactoryGuy.make)('service-window', 'fixed');\n      (0, _emberDataFactoryGuy.make)('service-window', 'float');\n      (0, _emberDataFactoryGuy.make)('schedule-configuration');\n      (0, _emberDataFactoryGuy.make)('rider-place-type', 'favorite');\n      (0, _emberDataFactoryGuy.make)('rider-place-type', 'primary');\n      (0, _emberDataFactoryGuy.make)('metric'); // @TODO might need to make hard coded values or dynamically needs routes, trips, and all them ahead of time\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/dispatch-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const provider = this.store.peekAll('provider').firstObject;\n      const schedule = this.store.peekAll('schedule').firstObject;\n      const routes = this.store.peekAll('route');\n      const drivers = this.store.peekAll('driver').toArray();\n      const breakType = this.store.peekAll('breakType').firstObject;\n      routes.forEach((route, index) => {\n        const driver = drivers[index];\n        const vehicle = route.get('vehicle.content');\n        const dispatchSchedule = (0, _emberDataFactoryGuy.make)('dispatch-schedule', {\n          schedule\n        });\n        const dispatchRoute = (0, _emberDataFactoryGuy.make)('dispatch-route', {\n          route,\n          provider,\n          dispatchSchedule\n        });\n        (0, _emberDataFactoryGuy.make)('etanav-route', {\n          dispatchRoute\n        });\n        (0, _emberDataFactoryGuy.make)('route-vehicle-driver', {\n          vehicle,\n          dispatchRoute,\n          driver\n        });\n        (0, _emberDataFactoryGuy.make)('polyline', {\n          route\n        });\n        const trips = route.get('trips');\n        const cluster = (0, _emberDataFactoryGuy.make)('cluster', {\n          dispatchRoute,\n          dispatchSchedule\n        });\n        let clusterOrdinal = 1;\n        let routeOrdinal = 0;\n        const routeBreaks = route.get('routeBreaks.content');\n        const startGarage = vehicle.get('startGarage.content');\n        const endGarage = vehicle.get('endGarage.content');\n        const routeBreakStart = (0, _emberDataFactoryGuy.make)('route-break', 'morning', {\n          route,\n          place: startGarage,\n          breakType\n        });\n        const pullout = (0, _emberDataFactoryGuy.make)('stop-point', 'pulloutGarage', {\n          cluster,\n          routeBreak: routeBreakStart,\n          clusterOrdinal,\n          routeOrdinal\n        });\n        clusterOrdinal++;\n        routeOrdinal++;\n        (0, _emberDataFactoryGuy.make)('etanav-stop-point', {\n          stopPoint: pullout\n        });\n        (0, _emberDataFactoryGuy.make)('polyline', {\n          stopPoint: pullout\n        });\n        const routeBreakEnd = (0, _emberDataFactoryGuy.make)('route-break', 'evening', {\n          route,\n          place: endGarage,\n          breakType\n        });\n        const pullin = (0, _emberDataFactoryGuy.make)('stop-point', 'pullinGarage', {\n          cluster,\n          routeBreak: routeBreakEnd,\n          clusterOrdinal,\n          routeOrdinal\n        });\n        (0, _emberDataFactoryGuy.make)('etanav-stop-point', {\n          stopPoint: pullin\n        });\n        (0, _emberDataFactoryGuy.make)('polyline', {\n          stopPoint: pullin\n        });\n        trips.forEach(trip => {\n          const pickPlace = (0, _emberDataFactoryGuy.make)('place');\n          const dropPlace = (0, _emberDataFactoryGuy.make)('place');\n          const pickAddress = (0, _emberDataFactoryGuy.make)('address', {\n            places: [pickPlace]\n          });\n          const dropAddress = (0, _emberDataFactoryGuy.make)('address', {\n            places: [dropPlace]\n          });\n          (0, _emberDataFactoryGuy.make)('location', {\n            address: pickAddress,\n            places: [pickPlace]\n          });\n          (0, _emberDataFactoryGuy.make)('location', {\n            address: dropAddress,\n            places: [dropPlace]\n          });\n          const pick = trip.get('pick.content');\n          const drop = trip.get('drop.content');\n          let stopPoint = null;\n          stopPoint = (0, _emberDataFactoryGuy.make)('stop-point', 'pick', {\n            place: dropPlace,\n            cluster,\n            trip,\n            tripStop: pick,\n            clusterOrdinal,\n            routeOrdinal\n          });\n          (0, _emberDataFactoryGuy.make)('etanav-stop-point', {\n            stopPoint\n          });\n          clusterOrdinal++;\n          routeOrdinal++;\n          stopPoint = (0, _emberDataFactoryGuy.make)('stop-point', 'drop', {\n            place: dropPlace,\n            cluster,\n            trip,\n            tripStop: drop,\n            clusterOrdinal,\n            routeOrdinal\n          });\n          (0, _emberDataFactoryGuy.make)('etanav-stop-point', {\n            stopPoint\n          });\n          (0, _emberDataFactoryGuy.make)('polyline', {\n            stopPoint\n          });\n        });\n        routeBreaks.forEach(routeBreak => {\n          routeOrdinal++;\n          const br = (0, _emberDataFactoryGuy.make)('stop-point', 'Break', {\n            cluster,\n            routeBreak,\n            routeOrdinal\n          });\n          (0, _emberDataFactoryGuy.make)('etanav-stop-point', 'break', {\n            stopPoint: br\n          });\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/driver-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const bookings = this.store.peekAll('booking');\n      const provider = this.store.peekAll('provider').firstObject;\n      const drivers = (0, _emberDataFactoryGuy.makeList)('driver', bookings.length, {\n        provider\n      });\n      drivers.forEach(driver => {\n        (0, _emberDataFactoryGuy.make)('driver-availability', {\n          driver\n        });\n        (0, _emberDataFactoryGuy.make)('driver-attribute', {\n          driver\n        });\n        (0, _emberDataFactoryGuy.make)('driver-phone-number', {\n          driver\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/main\", [\"exports\", \"ember-data-factory-guy\", \"adept-iq/scenarios/config-service\", \"adept-iq/scenarios/rider-management-service\", \"adept-iq/scenarios/driver-service\", \"adept-iq/scenarios/vehicle-service\", \"adept-iq/scenarios/dispatch-service\", \"adept-iq/scenarios/booking-service\", \"adept-iq/scenarios/scheduling-service\", \"adept-iq/scenarios/zone-service\", \"adept-iq/scenarios/avlm-service\", \"adept-iq/scenarios/avlm-core-service\", \"adept-iq/scenarios/subscription-booking-service\", \"adept-iq/scenarios/sso-service\", \"adept-iq/config/environment\"], function (_exports, _emberDataFactoryGuy, _configService, _riderManagementService, _driverService, _vehicleService, _dispatchService, _bookingService, _schedulingService, _zoneService, _avlmService, _avlmCoreService, _subscriptionBookingService, _ssoService, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      if (!_environment.default.APP.avlmLite) this.include([_ssoService.default, _configService.default, _riderManagementService.default, _bookingService.default, _subscriptionBookingService.default, _driverService.default, _vehicleService.default, _schedulingService.default, _dispatchService.default, _zoneService.default, _avlmCoreService.default]);else this.include([_ssoService.default, _configService.default, _avlmService.default]);\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/rider-management-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const travelNeedType = this.store.peekAll('travel-need-type').firstObject;\n      const passengerType = this.store.peekAll('passenger-type').firstObject;\n      const eligibilityType = this.store.peekAll('eligibility-type').firstObject;\n      const primaryType = this.store.peekRecord('rider-place-type', 'primary');\n      const addresses = (0, _emberDataFactoryGuy.makeList)('address', 10);\n      addresses.forEach(address => {\n        const location = (0, _emberDataFactoryGuy.make)('location', {\n          address\n        });\n        const place = (0, _emberDataFactoryGuy.make)('place', {\n          address,\n          location\n        });\n        const riderTravelNeed = (0, _emberDataFactoryGuy.make)('rider-travel-need', {\n          passengerType,\n          travelNeedType\n        });\n        const riderEligibility = (0, _emberDataFactoryGuy.make)('rider-eligibility', {\n          eligibilityType\n        });\n        const riderEligibility2 = (0, _emberDataFactoryGuy.make)('rider-eligibility', {\n          eligibilityType\n        });\n        const riderPhoneNumber = (0, _emberDataFactoryGuy.make)('rider-phone-number');\n        const rider = (0, _emberDataFactoryGuy.make)('rider', {\n          riderTravelNeeds: [riderTravelNeed],\n          riderEligibilities: [riderEligibility, riderEligibility2],\n          riderPhoneNumbers: [riderPhoneNumber]\n        });\n        (0, _emberDataFactoryGuy.make)('rider-place', {\n          place,\n          rider,\n          riderPlaceType: primaryType\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/scheduling-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const provider = this.store.peekAll('provider').firstObject;\n      const metric = this.store.peekAll('metric').firstObject;\n      const scheduleConfiguration = this.store.peekAll('schedule-configuration').firstObject;\n      const breakType = this.store.peekAll('break-type').findBy('name', 'floating');\n      const schedule = (0, _emberDataFactoryGuy.make)('schedule', {\n        scheduleConfiguration,\n        metric\n      });\n      const vehicles = this.store.peekAll('vehicle');\n      const bookings = this.store.peekAll('booking').toArray();\n      vehicles.forEach((vehicle, index) => {\n        const route = (0, _emberDataFactoryGuy.make)('route', {\n          schedule,\n          provider,\n          vehicle\n        });\n        const place = (0, _emberDataFactoryGuy.make)('place');\n        const address = (0, _emberDataFactoryGuy.make)('address', {\n          places: [place]\n        });\n        (0, _emberDataFactoryGuy.make)('location', {\n          address: address,\n          places: [place]\n        });\n        const booking = bookings[index];\n        const subscription = booking.get('subscription.content');\n        const leg = booking.get('legs').firstObject;\n        const segments = leg.get('segments.content');\n        segments.forEach(segment => {\n          let trip = null;\n\n          if (subscription) {\n            trip = (0, _emberDataFactoryGuy.make)('trip', {\n              schedule,\n              route,\n              booking,\n              segment,\n              subscription\n            });\n          } else trip = (0, _emberDataFactoryGuy.make)('trip', {\n            schedule,\n            route,\n            booking,\n            segment\n          });\n\n          const pickSegmentStop = segment.get('pick.content');\n          const dropSegmentStop = segment.get('drop.content');\n          (0, _emberDataFactoryGuy.make)('trip-stop', {\n            pickTripStop: trip,\n            segmentStop: pickSegmentStop\n          });\n          (0, _emberDataFactoryGuy.make)('trip-stop', {\n            dropTripStop: trip,\n            segmentStop: dropSegmentStop\n          });\n          (0, _emberDataFactoryGuy.make)('trip-route-assignment', {\n            trip: trip,\n            route: route\n          });\n        });\n        (0, _emberDataFactoryGuy.make)('route-break', {\n          route,\n          place,\n          breakType\n        });\n        (0, _emberDataFactoryGuy.make)('shift-break', {\n          vehicle,\n          place,\n          breakType\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/sso-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      (0, _emberDataFactoryGuy.makeList)('sso-permission', 104);\n      (0, _emberDataFactoryGuy.make)('sso-role', 'admin');\n      (0, _emberDataFactoryGuy.make)('sso-role', 'user');\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/subscription-booking-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const provider = this.store.peekAll('provider').firstObject;\n      const serviceWindow = this.store.peekAll('service-window').firstObject;\n      let riders = this.store.peekAll('rider');\n      const ridersLength = riders.length;\n      const travelNeedType = this.store.peekAll('travel-need-type').firstObject;\n      const passengerType = this.store.peekAll('passenger-type').firstObject;\n      const fareType = this.store.peekAll('fare-type').firstObject;\n      const group = (0, _emberDataFactoryGuy.make)('group');\n      riders = riders.slice(ridersLength / 2, ridersLength);\n      riders.forEach(rider => {\n        let pickPlace = (0, _emberDataFactoryGuy.make)('place');\n        let dropPlace = (0, _emberDataFactoryGuy.make)('place');\n        let pickAddress = (0, _emberDataFactoryGuy.make)('address', {\n          places: [pickPlace]\n        });\n        let dropAddress = (0, _emberDataFactoryGuy.make)('address', {\n          places: [dropPlace]\n        });\n        (0, _emberDataFactoryGuy.make)('location', {\n          address: pickAddress,\n          places: [pickPlace]\n        });\n        (0, _emberDataFactoryGuy.make)('location', {\n          address: dropAddress,\n          places: [dropPlace]\n        });\n        const subscription = (0, _emberDataFactoryGuy.make)('subscription', {\n          provider,\n          origin: pickPlace,\n          destination: dropPlace,\n          serviceWindow,\n          rider,\n          fareType\n        });\n        const booking = (0, _emberDataFactoryGuy.make)('booking', {\n          provider,\n          group,\n          subscription\n        });\n        const leg = (0, _emberDataFactoryGuy.make)('leg', {\n          booking,\n          serviceWindow,\n          rider\n        });\n        (0, _emberDataFactoryGuy.make)('subscription-group', {\n          subscription\n        });\n        (0, _emberDataFactoryGuy.make)('subscription-travel-need', {\n          travelNeedType,\n          passengerType,\n          subscription\n        });\n        (0, _emberDataFactoryGuy.make)('subscription-exclusion', {\n          subscription\n        });\n        (0, _emberDataFactoryGuy.make)('subscription-recurrence-pattern', {\n          subscription\n        });\n        (0, _emberDataFactoryGuy.make)('generated-subscription-booking', {\n          subscription\n        });\n        (0, _emberDataFactoryGuy.make)('leg-travel-need', {\n          leg,\n          travelNeedType,\n          passengerType\n        });\n        const segments = (0, _emberDataFactoryGuy.makeList)('segment', 3, {\n          leg,\n          fareType\n        });\n        segments.forEach(segment => {\n          pickPlace = (0, _emberDataFactoryGuy.make)('place');\n          dropPlace = (0, _emberDataFactoryGuy.make)('place');\n          pickAddress = (0, _emberDataFactoryGuy.make)('address', {\n            places: [pickPlace]\n          });\n          dropAddress = (0, _emberDataFactoryGuy.make)('address', {\n            places: [dropPlace]\n          });\n          (0, _emberDataFactoryGuy.make)('location', {\n            address: pickAddress,\n            places: [pickPlace]\n          });\n          (0, _emberDataFactoryGuy.make)('location', {\n            address: dropAddress,\n            places: [dropPlace]\n          });\n          const pickSegmentStop = (0, _emberDataFactoryGuy.make)('segment-stop', 'pick', {\n            pickSegment: segment,\n            place: pickPlace\n          });\n          const dropSegmentStop = (0, _emberDataFactoryGuy.make)('segment-stop', 'drop', {\n            dropSegment: segment,\n            place: dropPlace\n          });\n          (0, _emberDataFactoryGuy.make)('segment-stop-phone-number', {\n            segmentStop: pickSegmentStop\n          });\n          (0, _emberDataFactoryGuy.make)('segment-stop-phone-number', {\n            segmentStop: dropSegmentStop\n          });\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/vehicle-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      const drivers = this.store.peekAll('driver');\n      const vehicleTypes = this.store.peekAll('vehicle-type').toArray();\n      const providers = this.store.peekAll('provider').toArray();\n      drivers.forEach(driver => {\n        const random = Math.floor(Math.random() * (drivers.length - 1));\n        const randomVehicleType = vehicleTypes[random];\n        const randomProvider = providers[random];\n        const startPlace = (0, _emberDataFactoryGuy.make)('place');\n        const startAddress = (0, _emberDataFactoryGuy.make)('address', {\n          places: [startPlace]\n        });\n        const endPlace = (0, _emberDataFactoryGuy.make)('place');\n        const endAddress = (0, _emberDataFactoryGuy.make)('address', {\n          places: [endPlace]\n        });\n        (0, _emberDataFactoryGuy.make)('location', {\n          address: startAddress,\n          places: [startPlace]\n        });\n        (0, _emberDataFactoryGuy.make)('location', {\n          address: endAddress,\n          places: [endPlace]\n        });\n        const vehicle = (0, _emberDataFactoryGuy.make)('vehicle', {\n          driver,\n          vehicleType: randomVehicleType,\n          provider: randomProvider,\n          startGarage: startPlace,\n          endGarage: endPlace\n        });\n        (0, _emberDataFactoryGuy.make)('vehicle-availability', {\n          vehicle\n        });\n      });\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/scenarios/zone-service\", [\"exports\", \"ember-data-factory-guy\"], function (_exports, _emberDataFactoryGuy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Just for fun, set the log level ( to 1 ) and see all FactoryGuy response info in console\n  _emberDataFactoryGuy.Scenario.settings({\n    logLevel: 0 // 1 is the max for now, default is 0\n\n  });\n\n  const amountZones = 5;\n\n  class _default extends _emberDataFactoryGuy.Scenario {\n    run() {\n      (0, _emberDataFactoryGuy.makeList)('zone', amountZones);\n    }\n\n  }\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-ada-adaManagement\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-address\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-avlService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-avlm-avlmService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-bs-bookingService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-cos-continuousOptService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-cs-configService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    modelPrefix: 'cs'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-dispatch\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-driver\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-dwh-dwhService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    normalize: function (modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-playbackService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-reconciliationService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-rms-riderManagement\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-ss-schedulingService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-sso-ssoService\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    modelPrefix: 'sso'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/-vehicle\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _application.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/address\", [\"exports\", \"adept-iq/serializers/-address\"], function (_exports, _address) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _address.default.extend({\n    attrs: {\n      freeformAddress: {\n        serialize: false\n      },\n      zName: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const {\n        zoneName\n      } = json.data.relationships;\n\n      if (zoneName && zoneName.data) {\n        zoneName.data.type = 'zoneName';\n      } else {\n        delete json.data.relationships.zoneName;\n      } // TEMPORARY FIX FOR ROAD SUPERVISOR\n\n\n      delete json.data.attributes.postOfficeBoxNumber;\n      delete json.data.attributes.type;\n      Object.keys(json.data.attributes).forEach(key => {\n        // Currently, there is no generic solution to this, lack isChanged flag (field intentionally changed to blank)\n        if (key !== 'premise' && key !== 'notes' && Ember.isBlank(json.data.attributes[key])) {\n          delete json.data.attributes[key];\n        }\n      });\n      return json;\n    },\n\n    normalizeSingleResponse(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      // remove zone-name object to avoid warning messages\n      if (!Ember.isEmpty(payload.included)) {\n        payload.included = payload.included.filter(hash => hash.type !== 'zoneName');\n      }\n\n      const normalized = this._super(...arguments);\n\n      return normalized;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.zoneName)) {\n        const zoneName = resourceHash.relationships.zoneName;\n        zoneName.data.type = 'zone-type';\n      } else if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.zoneName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.zoneName = {\n          data: {\n            type: 'zone-type',\n            id: resourceHash.attributes.zoneName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.zoneName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeCreateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      const {\n        modelName\n      } = primaryModelClass; // eslint-disable-next-line no-param-reassign\n\n      id = this.extractId(primaryModelClass, payload.data);\n\n      if (store.hasRecordForId(modelName, id)) {\n        const record = store.peekRecord(modelName, id);\n        store.unloadRecord(record);\n        return this._super(store, primaryModelClass, payload, id, requestType);\n      }\n\n      return this._super(store, primaryModelClass, payload, id, requestType);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/agency-marker\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    JSONAPISerializer\n  } = _emberData.default;\n\n  var _default = JSONAPISerializer.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    keyForRelationship(key) {\n      return key;\n    },\n\n    serialize(snapshot) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options.includeId = true;\n\n      const json = this._super(snapshot, options);\n\n      json.data.type = 'travelNeedType';\n      return json;\n    },\n\n    normalizeResponse: function (store, primaryModelClass, payload) {\n      const data = Ember.makeArray(payload.data);\n      const newData = data.map(m => {\n        const newIcon = window.L.icon({\n          icon: m.attributes.options.icon\n        });\n        m.attributes.options.icon = newIcon;\n        return m;\n      });\n      payload.data = newData;\n      return payload;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/application\", [\"exports\", \"ember-data\", \"ember-inflector\"], function (_exports, _emberData, _emberInflector) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    JSONAPISerializer\n  } = _emberData.default;\n\n  var _default = JSONAPISerializer.extend({\n    modelPrefix: '',\n\n    keyForAttribute(key) {\n      return key;\n    },\n\n    keyForRelationship(key) {\n      return key;\n    },\n\n    // deprecated; will change to `payloadTypeFromModelName`\n    payloadKeyFromModelName(modelName) {\n      const modelPrefix = this.get('modelPrefix');\n      let currModelName = modelName;\n\n      if (Ember.isPresent(modelPrefix) && currModelName.startsWith(`${modelPrefix}-`)) {\n        currModelName = currModelName.slice(modelPrefix.length + 1);\n      }\n\n      return Ember.String.camelize(currModelName);\n    },\n\n    // deprecated; will change to `modelNameFromPayloadType`\n    modelNameFromPayloadKey(key) {\n      const modelPrefix = this.get('modelPrefix');\n      let modelName = Ember.String.dasherize((0, _emberInflector.singularize)(key));\n\n      if (Ember.isPresent(modelPrefix) && !modelName.startsWith(`${modelPrefix}-`)) {\n        modelName = `${modelPrefix}-${modelName}`;\n      }\n\n      return modelName;\n    },\n\n    dasherizeRelationShipCollection(relatedEntities) {\n      if (relatedEntities) {\n        // eslint-disable-next-line no-return-assign\n        relatedEntities.data.forEach(entity => entity.type = Ember.String.dasherize(entity.type));\n      }\n    },\n\n    dasherizeRelationType(entity) {\n      // eslint-disable-next-line no-unused-expressions\n      entity ? entity.data.type = Ember.String.dasherize(entity.data.type) : '';\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-alert\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      if (payload.data.attributes) {\n        try {\n          const relationships = payload.data.relationships ? payload.data.relationships : {};\n          payload.data.attributes.body = payload.data.attributes.alertDescription;\n          payload.data.attributes.companyId = payload.data.attributes.provider;\n          payload.data.attributes.timestamp = payload.data.attributes.time;\n\n          if (payload.data.attributes.category === 'emergency' && payload.data.attributes.state === 'active') {\n            payload.data.attributes.isNewEmergencyReceived = true;\n          }\n\n          if (payload.data.attributes.vehicleId) {\n            relationships.avlmVehicle = {\n              data: {\n                type: 'avlm-vehicle',\n                id: `${payload.data.attributes.vehicleId}`\n              }\n            };\n          }\n\n          if (payload.data.attributes.routeId) {\n            relationships.avlmRoute = {\n              data: {\n                type: 'avlm-route',\n                id: `${payload.data.attributes.routeId}`\n              }\n            };\n          }\n\n          if (payload.data.attributes.driverPk) {\n            const driverAttributes = {};\n            driverAttributes.badgeNumber = payload.data.attributes.driverId;\n            driverAttributes.firstName = payload.data.attributes.firstName;\n            driverAttributes.lastName = payload.data.attributes.lastName;\n            relationships.avlmDriver = {\n              data: {\n                type: 'avlm-driver',\n                id: `${payload.data.attributes.driverPk}`\n              }\n            };\n            const driverPayLoad = {\n              id: payload.data.attributes.driverPk,\n              type: 'avlm-driver',\n              attributes: driverAttributes\n            };\n            payload.included = payload.included || [];\n            payload.included.push(driverPayLoad);\n          }\n\n          payload.data.relationships = relationships;\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          console.log(e);\n        }\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-canned-message-template\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.providerName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: resourceHash.attributes.providerName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.providerName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-canned-message\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\", \"adept-iq/models/avlm-emergency-message\", \"adept-iq/config/environment\"], function (_exports, _avlmAvlmService, _avlmEmergencyMessage, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.EMERGENCY_PRIORITY_CODE = void 0;\n  const EMERGENCY_PRIORITY_CODE = 'E';\n  _exports.EMERGENCY_PRIORITY_CODE = EMERGENCY_PRIORITY_CODE;\n\n  var _default = _avlmAvlmService.default.extend({\n    attrs: {\n      responseMessage: {\n        serialize: false\n      },\n      ackTime: {\n        serialize: false\n      },\n      driverEndPointType: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      let driver = null;\n\n      if (json.data.relationships) {\n        if (json.data.relationships.driver) {\n          driver = this.store.peekRecord('driver', json.data.relationships.driver.data.id);\n        }\n      }\n\n      const responseType = json.data.attributes.responseTypeText;\n      json.data.attributes.dispatcher = {\n        endPointType: 'sender'\n      };\n      json.data.attributes.responseType = {\n        statusCode: _avlmEmergencyMessage.CANNED_RESPONSE_TYPE_CODES[responseType],\n        status: responseType\n      };\n\n      if (driver) {\n        json.data.attributes.driver = {\n          endPointType: 'recipient',\n          id: driver.get('driverId')\n        };\n      }\n\n      if (!json.data.attributes.deletedTime) delete json.data.attributes.deletedTime;\n      if (!json.data.attributes.readTime) delete json.data.attributes.readTime;\n      if (!json.data.attributes.deliveredTime) delete json.data.attributes.deliveredTime;\n      if (!json.data.attributes.type) delete json.data.attributes.type;\n      delete json.data.attributes.responseTypeText;\n      delete json.data.relationships;\n      return json;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n      const payloadType = 'avlm-canned-message'; //const messageId = payload.data.attributes.id;\n      // When trying to read from menu action, this show wierd message. Commenting it out\n      // payload.data.attributes.messageNr = payload.data.attributes.message;\n\n      payload.data.attributes.responseTypeText = payload.data.attributes.responseType;\n      payload.data.attributes.responseType = payload.data.attributes.responseTypeLabel;\n      payload.data.attributes.responseMessage = payload.data.attributes.responseReceived;\n      payload.data.attributes.ackTime = payload.data.attributes.responseReceivedTime;\n      payload.data.attributes.createdTime = payload.data.attributes.sentTime;\n      payload.data.attributes.isNewMessageReceived = true;\n\n      if (payload.data.attributes.replyToMessageId) {\n        payload.data.attributes.replyToMsgId = payload.data.attributes.replyToMessageId;\n      } else {\n        payload.data.attributes.replyToMsgId = payload.data.attributes.id;\n      }\n\n      if (payload.data.attributes.message) {\n        const parts = payload.data.attributes.message.split(':');\n\n        if (parts.length > 1) {\n          payload.data.attributes.subject = parts[0];\n          payload.data.attributes.body = parts[1];\n        } else {\n          payload.data.attributes.body = payload.data.attributes.message;\n        }\n      }\n\n      if (payload.data.attributes.vehicleId) {\n        relationships[_environment.default.APP.avlmLite ? 'avlmVehicle' : 'vehicle'] = {\n          data: {\n            type: _environment.default.APP.avlmLite ? 'avlm-vehicle' : 'vehicle',\n            id: `${payload.data.attributes.vehicleId}`\n          }\n        };\n      }\n\n      if (payload.data.attributes.routeId) {\n        relationships[_environment.default.APP.avlmLite ? 'avlmRoute' : 'route'] = {\n          data: {\n            type: _environment.default.APP.avlmLite ? 'avlm-route' : 'route',\n            id: `${payload.data.attributes.routeId}`\n          }\n        };\n      }\n\n      if (payload.data.attributes.driverPk) {\n        relationships[_environment.default.APP.avlmLite ? 'avlmDriver' : 'driver'] = {\n          data: {\n            type: _environment.default.APP.avlmLite ? 'avlm-driver' : 'driver',\n            id: `${payload.data.attributes.driverPk}`\n          }\n        };\n      }\n\n      if (payload.data.attributes.alertId) {\n        relationships.alert = {\n          data: {\n            type: 'avlm-alert',\n            id: `${payload.data.attributes.alertId}`\n          }\n        };\n      }\n\n      if (!_environment.default.APP.avlmLite && payload.data.attributes.routeVehicleDriverId) {\n        relationships.avlmRouteVehicleDriver = {\n          data: {\n            type: 'avlm-route-vehicle-driver',\n            // No check for AVLM Model? Same Check Ashraf TODO\n            id: `${payload.data.attributes.routeVehicleDriverId}`\n          }\n        };\n      }\n\n      if (payload.data.attributes.templateId) {\n        relationships.template = {\n          data: {\n            type: 'avlm-canned-message-template',\n            id: `${payload.data.attributes.templateId}`\n          }\n        };\n      }\n\n      if (payload.data.attributes.replyToMessageId) {\n        const originalMessage = {\n          id: payload.data.attributes.replyToMessageId,\n          type: `${payloadType}`,\n          attributes: {\n            body: payload.data.attributes.body\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(originalMessage);\n      } // Duplicate canned-message to emergency-message\n\n\n      if (payload.data.attributes.priority === EMERGENCY_PRIORITY_CODE) {\n        const eRelationships = { ...relationships\n        };\n\n        if (payload.data.attributes.replyToMessageId) {\n          eRelationships.replyToMsg = {\n            data: {\n              type: 'avlm-emergency-message',\n              id: `${payload.data.attributes.replyToMessageId}`\n            }\n          };\n        }\n\n        const emergencyMessagePayload = {\n          id: payload.data.id,\n          type: 'avlm-emergency-message',\n          attributes: payload.data.attributes,\n          relationships: eRelationships\n        };\n        payload.included = payload.included || [];\n        payload.included.push(emergencyMessagePayload);\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-driver-app\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-driver-state-event\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-emergency-message\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\", \"lodash\"], function (_exports, _avlmAvlmService, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const CANNED_RESPONSE_TYPE_CODES = {\n    'None': 'X',\n    'Acknowledge': 'A',\n    'Yes/No': 'Y'\n  };\n\n  var _default = _avlmAvlmService.default.extend({\n    attrs: {\n      responseMessage: {\n        serialize: false\n      },\n      ackTime: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const responseType = json.data.attributes.responseType;\n\n      const clone = _lodash.default.cloneDeep(json);\n\n      clone.data.attributes.dispatcher = {\n        endPointType: 'sender'\n      };\n      clone.data.attributes.responseType = {\n        statusCode: CANNED_RESPONSE_TYPE_CODES[responseType]\n      };\n      return clone;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-rider\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.passengerTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.passengerType = {\n          data: {\n            type: 'passenger-type',\n            id: resourceHash.attributes.passengerTypeName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.passengerTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-route-vehicle-driver\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-route\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n      payload.data.attributes.otpValue = payload.data.attributes.otp;\n      payload.data.attributes.otp = payload.data.attributes.otpRouteStatus;\n      payload.data.attributes.actualStartTimestamp = payload.data.attributes.actualStartDate + 'T' + payload.data.attributes.actualStartTime;\n      payload.data.attributes.actualEndTimestamp = payload.data.attributes.actualEndDate + 'T' + payload.data.attributes.actualEndTime;\n\n      if (payload.data.attributes.vehicleId) {\n        relationships.avlmVehicle = {\n          data: {\n            type: 'avlm-vehicle',\n            id: `${payload.data.attributes.vehicleId}`\n          }\n        };\n      }\n\n      if (payload.data.attributes.polyline) {\n        const routeId = payload.data.attributes.id;\n        const routePolyline = payload.data.attributes.polyline;\n        const navigationPolyline = {\n          type: 'polyline',\n          id: `${routeId}`,\n          attributes: {\n            coords: routePolyline\n          }\n        };\n        relationships.navigationPolyline = {\n          data: {\n            type: 'polyline',\n            id: `${payload.data.id}`\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(navigationPolyline);\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-schedule\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-stop-point\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n\n      if (relationships.cluster) {\n        this.dasherizeRelationType(relationships.cluster);\n        relationships.avlmCluster = relationships.cluster;\n        delete relationships.cluster;\n      }\n\n      if (relationships.trip) {\n        this.dasherizeRelationType(relationships.trip);\n        relationships.avlmTrip = relationships.trip;\n        delete relationships.trip;\n      }\n\n      if (relationships.address) {\n        this.dasherizeRelationType(relationships.address);\n        relationships.avlmAddress = relationships.address;\n        delete relationships.address;\n      }\n\n      if (relationships.schedule) {\n        this.dasherizeRelationType(relationships.schedule);\n        relationships.avlmSchedule = relationships.schedule;\n        delete relationships.address;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      if (payload.data.attributes) {\n        try {\n          const relationships = payload.data.relationships ? payload.data.relationships : {}; //Adjust id\n\n          if (payload.data.id.startsWith('SP')) {\n            payload.data.id = payload.data.id.replace('SP', 'P');\n          }\n\n          if (payload.data.id.startsWith('SD')) {\n            payload.data.id = payload.data.id.replace('SD', 'D');\n          }\n\n          payload.data.attributes.arriveLat = payload.data.attributes.actualArriveLat ? payload.data.attributes.actualArriveLat : null;\n          payload.data.attributes.arriveLng = payload.data.attributes.actualArriveLng ? payload.data.attributes.actualArriveLng : null;\n          payload.data.attributes.actualArriveTime = payload.data.attributes.actualArriveTimestamp ? payload.data.attributes.actualArriveTimestamp : null;\n          payload.data.attributes.otpValue = payload.data.attributes.otp ? payload.data.attributes.otp : null;\n          payload.data.attributes.otp = payload.data.attributes.otpStatus ? payload.data.attributes.otpStatus : null;\n          payload.data.attributes.odometer = payload.data.attributes.odometerOnArrival ? payload.data.attributes.odometerOnArrival : null;\n          payload.data.attributes.actualDepartTime = payload.data.attributes.actualDepartTimestamp ? payload.data.attributes.actualDepartTimestamp : null;\n          payload.data.attributes.departLat = payload.data.attributes.actualDepartLat ? payload.data.attributes.actualDepartLat : null;\n          payload.data.attributes.departLng = payload.data.attributes.actualDepartLng ? payload.data.attributes.actualDepartLng : null;\n\n          if (payload.data.attributes.lat) {\n            payload.data.attributes._lat = payload.data.attributes.lat;\n            delete payload.data.attributes.lat;\n          }\n\n          if (payload.data.attributes.lng) {\n            payload.data.attributes._lng = payload.data.attributes.lng;\n            delete payload.data.attributes.lng;\n          } // Computed Fields now directly taken from Assembly data\n\n\n          payload.data.attributes.currentStatus = payload.data.attributes.status; // Stop type\n\n          const refType = payload.data.attributes.refType;\n\n          if (payload.data.attributes.refType && (payload.data.attributes.refType === 'pullIn' || payload.data.attributes.refType === 'pullOut')) {\n            switch (refType) {\n              case 'pullIn':\n                payload.data.attributes._stopType = 'pullinGarage';\n                payload.data.attributes.parentType = 'pullinGarage';\n                break;\n\n              case 'pullOut':\n                payload.data.attributes._stopType = 'pulloutGarage';\n                payload.data.attributes.parentType = 'pulloutGarage';\n                payload.data.attributes.routeOrdinal = '0';\n                break;\n\n              default:\n                payload.data.attributes._stopType = payload.data.attributes.type;\n            }\n          } else if (!payload.data.attributes.type && payload.data.id) {\n            if (payload.data.id.includes('GP')) {\n              payload.data.attributes._stopType = 'pulloutGarage';\n            } else if (payload.data.id.includes('GD')) {\n              payload.data.attributes._stopType = 'pullinGarage';\n            }\n          } else {\n            payload.data.attributes._stopType = payload.data.attributes.type;\n          } // breaks\n\n\n          if (payload.data.attributes.type === 'break') {\n            payload.data.attributes.odometer = payload.data.attributes.odometerOnDeparture ? payload.data.attributes.odometerOnDeparture : payload.data.attributes.odometerOnArrival;\n            relationships.routeBreak = {\n              data: {\n                id: payload.data.attributes.breakId,\n                type: 'avlm-route-break'\n              }\n            };\n          }\n\n          delete payload.data.attributes.type;\n          const routeId = payload.data.attributes.routeId;\n          const stopPointId = payload.data.id; // etanavstoppoint\n\n          if (payload.data.attributes.routeId) {\n            relationships.stopRoute = {\n              data: {\n                type: 'avlm-route',\n                id: routeId\n              }\n            };\n          }\n\n          if (stopPointId) {\n            relationships.etaNavStopPoint = {\n              data: {\n                type: 'etanav-stop-point',\n                id: stopPointId\n              }\n            };\n          } // polylines\n\n\n          if (payload.data.attributes.polyline) {\n            const stopPolyline = payload.data.attributes.polyline;\n            const plannedPolyline = {\n              type: 'polyline',\n              id: `${routeId}-${stopPointId}`,\n              attributes: {\n                coords: stopPolyline\n              }\n            };\n            payload.included = payload.included || [];\n            payload.included.push(plannedPolyline);\n            relationships.polyline = {\n              data: {\n                id: `${routeId}-${stopPointId}`,\n                type: 'polyline'\n              }\n            };\n          }\n\n          payload.data.relationships = relationships;\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          console.log(e);\n        }\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-trip-rider-attribute\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-trip-rider\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-trip\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const convertStatusReason = {\n    'No Show No Answer': 'noShowNoAnswer',\n    'No Show Same Day Cancel No Fault': 'noShowSameDayCancelNoFault',\n    'No Show Same Day Cancel': 'noShowSameDayCancel',\n    'No Show Cancel At Door': 'noShowCancelAtDoor',\n    'No Show Not Ready': 'noShowNotReady',\n    'No Show No Fault': 'noShowNoFault',\n    NSNA: 'noShowNoAnswer',\n    NSSDCNF: 'noShowSameDayCancelNoFault',\n    NSSDC: 'noShowSameDayCancel',\n    NSCD: 'noShowCancelAtDoor',\n    NSNR: 'noShowNotReady',\n    NSNF: 'noShowNoFault'\n  };\n\n  var _default = _avlmAvlmService.default.extend({\n    normalize(modelClass, resourceHash) {\n      if (resourceHash.attributes) {\n        // the status reason arrive from either avlm-route-exec-event as a code or trip topic as the actual id of the no-show-reason\n        // evaulate based on either and use the correct id to associate the no-show-reason-code to trip\n        if (!Ember.isNone(resourceHash.attributes.statusReason)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          let {\n            statusReason\n          } = resourceHash.attributes;\n          statusReason = convertStatusReason[statusReason] || statusReason;\n          relationships.reason = {\n            data: {\n              type: 'no-show-reason-code',\n              id: statusReason\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.statusReason;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      if (payload.data.attributes) {\n        try {\n          const relationships = payload.data.relationships ? payload.data.relationships : {};\n          payload.data.attributes.otpValue = payload.data.attributes.otp;\n          payload.data.attributes.otp = payload.data.attributes.otpStatus;\n          payload.data.relationships = relationships;\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          console.log(e);\n        }\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-vehicle-event\", [\"exports\", \"adept-iq/serializers/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    normalize(modelClass, resourceHash) {\n      resourceHash.id = `${resourceHash.attributes.vehicleId}-${resourceHash.attributes.timestamp}-${resourceHash.id}`;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      const resultedPayload = [];\n\n      if (payload.data) {\n        payload.data.forEach(item => {\n          const data = item.attributes;\n          let eventType = null;\n          let stopType = null;\n          let isValidLatlng = true;\n\n          if (data.lat && data.lng) {\n            isValidLatlng = !!(data.lat % 1 !== 0 || data.lng % 1 !== 0);\n          }\n\n          if (data.type !== 'otpStatus' && isValidLatlng && data.type !== 'altPath') {\n            if (data.type === 'noShow') eventType = 'Stop No Showed';\n            if (data.type === 'pullOut') eventType = 'Start Route';\n            if (data.type === 'pullIn') eventType = 'End Route';\n            if (data.type === 'onBreak') eventType = 'Start Break';\n            if (data.type === 'offBreak') eventType = 'End Break';\n            if (data.type === 'signOn') eventType = 'Sign On';\n            if (data.type === 'signOff') eventType = 'Sign Off';\n            if (data.type === 'noShowRequest') eventType = 'No Show Request';\n            if (data.type === 'accept') eventType = 'Unperform';\n            if (data.type === 'arrive') eventType = 'Arrive';\n            if (data.type === 'depart') eventType = 'Depart';\n            if (data.type === 'commFailure') eventType = 'Communication Failure';\n            if (data.type === 'leaveGarageSignOff') eventType = 'Moved Without Sign On';\n            if (data.type === 'powerOn') eventType = 'Power On';\n            if (data.type === 'commRestored') eventType = 'Communication Restored';\n            if (data.type === 'applicationRestart') eventType = 'App Restarted';\n            if (data.type === 'signOnFailure') eventType = 'Sign On Failed';\n            if (data.type === 'noShowCancelled') eventType = 'No Show Request Canceled';\n            if (data.type === 'postCheckDone') eventType = 'Post Check';\n            if (data.type === 'preCheckDone') eventType = 'Pre Check';\n            if (data.type === 'dispatchToDriverMessage') eventType = 'Message From Dispatch';\n            if (data.type === 'driverToDispatchMessage') eventType = 'Message From Driver';\n            if (data.type === 'emergencyOn') eventType = 'Emergency Initiated';\n            if (data.type === 'emergencyOff') eventType = 'Emergency Canceled by Driver';\n            if (data.type === 'emergencyAck') eventType = 'Emergency Acknowledged';\n            if (data.type === 'emergencyClear') eventType = 'Emergency Resolved';\n            if (data.type === 'emergencyCancel') eventType = 'Emergency Canceled By Dispatch';\n            if (data.type === 'removed') eventType = 'Stop Removed';\n            if (data.type === 'added') eventType = 'Stop Added';\n\n            if (data.stop && data.stop.type && (data.stop.type === 'pick' || data.stop.type === 'P')) {\n              stopType = 'pick';\n              data.type = stopType;\n            } else if (data.stop && data.stop.type && (data.stop.type === 'drop' || data.stop.type === 'D')) {\n              stopType = 'drop';\n              data.type = stopType;\n            }\n\n            item.attributes = { ...data,\n              lat: Number(data.lat),\n              lng: Number(data.lng),\n              routeName: data.routename\n            };\n            if (stopType !== null) item.attributes.stopType = stopType.charAt(0).toUpperCase() + stopType.slice(1);\n            if (eventType !== null) item.attributes.eventType = eventType;\n\n            if (data.stop) {\n              if (data.stop.address) item.attributes.stopAddress = data.stop.address;\n              if (data.stop.stopid) item.attributes.stopId = data.stop.stopid;\n            }\n\n            if (data.trip) {\n              if (data.trip.tripid) item.attributes.tripId = data.trip.tripid;\n              if (data.trip.passengerid) item.attributes.passengerId = data.trip.passengerid;\n              if (data.trip.passengerlastname) item.attributes.passengerLName = data.trip.passengerlastname;\n              if (data.trip.passengerfirstname) item.attributes.passengerFName = data.trip.passengerfirstname;\n            }\n\n            resultedPayload.push(item);\n          }\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'vehicleEvent') {\n        return 'avlm-vehicle-event';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-vehicle-info\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-vehicle-radius\", [\"exports\", \"adept-iq/serializers/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    normalize(modelClass, resourceHash) {\n      resourceHash.id = resourceHash.attributes.vehicleid ? `${resourceHash.attributes.vehicleId}` : resourceHash.id;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'radius-vehicle') {\n        return 'avlm-vehicle-radius';\n      }\n\n      return this._super(key);\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      const resultedPayload = [];\n\n      const _data = [].concat(payload.data);\n\n      payload.data = _data; // workaround for this API not returns payload type\n\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          const data = item.attributes;\n\n          if (!Ember.isEmpty(data)) {\n            const keys = Object.keys(data);\n            let vehicle = {\n              driverid: '',\n              vehicleid: '',\n              otp: '',\n              drivername: '',\n              type: ''\n            };\n            if (data.vehicle) vehicle = data.vehicle;\n\n            if (keys.includes('lat') && keys.includes('lng') && data.lng !== null && data.lat !== null) {\n              item.attributes = { ...data,\n                receivedAt: data.receivedat,\n                vehicleId: vehicle.vehicleid,\n                driverId: vehicle.driverid,\n                otp: vehicle.otp,\n                driverName: vehicle.drivername,\n                vehicleType: vehicle.type,\n                provider: data.vehicle.provider\n              };\n              item.type = 'radius-vehicle';\n              item.id = data.vehicle.id;\n              resultedPayload.push(item);\n            }\n          }\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-vehicle\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    attrs: {\n      isGpsFailure: {\n        serialize: false\n      },\n      isCommFailure: {\n        serialize: false\n      },\n      isLeaveGarageSignOff: {\n        serialize: false\n      },\n      isOnBreak: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      if (payload.data.attributes) {\n        if (!Ember.isNone(payload.data.attributes.providerName)) {\n          const relationships = payload.data.relationships ? payload.data.relationships : {};\n          relationships.provider = {\n            data: {\n              type: 'provider',\n              id: payload.data.attributes.providerName\n            }\n          };\n          payload.data.relationships = relationships;\n        }\n      }\n\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n\n      if (Ember.isPresent(payload.data.attributes.lastGpsPingLat) && Ember.isPresent(payload.data.attributes.lastGpsPingLng)) {\n        payload.data.attributes.avlLocation = {\n          lat: parseFloat(payload.data.attributes.lastGpsPingLat),\n          lng: parseFloat(payload.data.attributes.lastGpsPingLng),\n          timestamp: payload.data.attributes.lastGpsPingTime\n        };\n      }\n\n      if (Ember.isPresent(payload.data.attributes.status)) {\n        payload.data.attributes.vehicleStatus = payload.data.attributes.status;\n        delete payload.data.attributes.status;\n      }\n\n      const isRoadSupervisor = payload.data.attributes.routeName && payload.data.attributes.routeName.includes('SUP');\n      payload.data.attributes.otp = payload.data.attributes.otpStatus;\n      payload.data.attributes.driverBadgeNumber = isRoadSupervisor ? payload.data.attributes.driverPk : payload.data.attributes.driverId;\n      payload.data.attributes.driverFullName = payload.data.attributes.driverName; //TODO can make it better\n\n      if (payload.data.attributes.vehicleStateEvent) {\n        switch (payload.data.attributes.vehicleStateEvent) {\n          case 'commFailure':\n            payload.data.attributes.isCommFailure = true;\n            break;\n\n          case 'commRestored':\n            payload.data.attributes.isCommFailure = false;\n            break;\n\n          case 'gpsFailure':\n            payload.data.attributes.isGpsFailure = true;\n            break;\n\n          case 'leaveGarageSignOff':\n            payload.data.attributes.isLeaveGarageSignOff = true;\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (payload.data.attributes.driverStateEvent) {\n        switch (payload.data.attributes.driverStateEvent) {\n          case 'signOn':\n            payload.data.attributes.isLeaveGarageSignOff = false;\n            break;\n\n          case 'signOff':\n            // Do nothing for signOff because it might not even in drving state\n            break;\n\n          case 'emergencyOn':\n            break;\n\n          case 'emergencyOff':\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (payload.data.attributes.vehicleRouteExecEvent) {\n        switch (payload.data.attributes.vehicleRouteExecEvent) {\n          case 'onBreak':\n            payload.data.attributes.isOnBreak = true;\n            break;\n\n          case 'offBreak':\n            payload.data.attributes.isOnBreak = false;\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      const driverPk = payload.data.attributes.driverPk;\n      const provider = payload.data.attributes.provider;\n      const routePk = payload.data.attributes.routePk;\n\n      if (routePk) {\n        relationships.avlmRoute = {\n          data: {\n            type: 'avlm-route',\n            id: `${routePk}`\n          }\n        };\n      }\n\n      if (driverPk) {\n        relationships.avlmDriver = {\n          data: {\n            type: 'avlm-driver',\n            id: `${driverPk}`\n          }\n        };\n      }\n\n      if (provider) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: provider\n          }\n        };\n        delete payload.data.attributes.provider;\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/avlm-zone\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/booking-activity-log-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'booking-activity-log-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/booking\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-unused-vars */\n  var _default = _bsBookingService.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n    attrs: {\n      loggingMeta: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        const providerRelationship = json.data.relationships.provider;\n        const subscription = json.data.relationships.subscription;\n\n        if (!Ember.isNone(providerRelationship) && !Ember.isNone(providerRelationship.data)) {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n\n        if (Ember.isPresent(subscription)) {\n          delete json.data.relationships.subscription;\n        }\n      }\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.providerName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: resourceHash.attributes.providerName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.providerName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeArrayResponse(store, primaryModelClass, payload) {\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.filterBy('type', 'segmentStop'))) {\n        const segmentStops = payload.included.filterBy('type', 'segmentStop');\n\n        for (let count = 0; count < segmentStops.length; count++) {\n          const {\n            place\n          } = segmentStops[count].relationships;\n\n          if (place) {\n            store.push(place);\n          }\n        }\n\n        const newIncluded = payload.included.filter(include => {\n          return include.type !== 'fareCategoryName';\n        });\n        payload.included = newIncluded;\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/break-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'break-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/breakdown-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'breakdown-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cancel-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'cancel-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cancellation\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.cancelTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.cancelType = {\n          data: {\n            type: 'cancel-type',\n            id: resourceHash.attributes.cancelTypeName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.cancelTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/classification-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'classification-name',\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash); // trim 'cs' prefix from model type\n      // not sure why its the only model to be attached with a cs prefix?\n      // maybe its due to the spaces in the id will need to fix that problem in config service\n\n\n      const regEx = /^(?:cs-)?(.*)$/;\n      const match = regEx.exec(normalized.data.type)[1];\n      normalized.data.type = match;\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cluster\", [\"exports\", \"adept-iq/serializers/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalizeSingleResponse(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      payload.included = payload.included || [];\n      const providerIndex = payload.included.findIndex(entity => entity.type === 'providerName');\n\n      if (providerIndex > -1) {\n        payload.included.splice(providerIndex, 1);\n      }\n\n      const normalized = this._super(...arguments);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cs-config-category\", [\"exports\", \"adept-iq/serializers/-cs-configService\"], function (_exports, _csConfigService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigService.default.extend({\n    normalizeResponse(store, primaryModelClass, payload) {\n      Ember.makeArray(payload.data).setEach('type', 'cs-config-category');\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cs-config-file\", [\"exports\", \"adept-iq/serializers/-cs-configService\"], function (_exports, _csConfigService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigService.default.extend({\n    normalizeResponse(store, primaryModelClass, payload) {\n      Ember.makeArray(payload.data).setEach('type', 'cs-config-file');\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cs-config-item\", [\"exports\", \"adept-iq/serializers/-cs-configService\", \"adept-iq/config/cs-config-model-category\"], function (_exports, _csConfigService, _csConfigModelCategory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // eslint-disable-next-line no-undef\n  const _ = require(\"lodash\");\n\n  const JSON_REGEX = /^\\s*[{[]/;\n  const OPTIONAL_ATTRS = ['description', 'unit', 'type'];\n  const CATEGORY_DELIMITER = '-';\n  const BOOLEAN_TYPE = 'Boolean';\n  const YES_STRING = 'Yes';\n  const NO_STRING = 'No';\n  const TRUE_STRING = 'true';\n  const FALSE_STRING = 'false';\n  const logger = {\n    warn: console.warn // eslint-disable-line no-console\n\n  }; // merges arr2 onto arr1 in place\n\n  const mergeRecordsInPlace = (arr1, arr2) => {\n    const lookup = {};\n    arr1.forEach(a => {\n      lookup[`${a.type}-${a.id}`] = true;\n    });\n    arr2.forEach(b => {\n      const id = `${b.type}-${b.id}`;\n      if (lookup[id]) return;\n      lookup[id] = true;\n      arr1.push(b);\n    });\n    return arr1;\n  };\n\n  var _default = _csConfigService.default.extend({\n    fixedRouteEngine: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    attrs: {\n      // do not list `type` or `value` here; these are need in `serialize()`\n      category: {\n        serialize: false\n      },\n      configCategory: {\n        serialize: false\n      },\n      fieldConstraint: {\n        serialize: false\n      }\n    },\n\n    normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n      // this occurs when the client specifically asks for cs-config-items\n      //   i.e. `store.findAll('cs-config-item')`\n      // in this case, we need to substitute the correct serializer for any\n      // config-items that correspond to config-models (e.g. vehicly-type) in IQUX\n      if (primaryModelClass.modelName === 'cs-config-item') {\n        const normalized = {\n          data: [],\n          included: []\n        }; // split payloads into sets by config-model name\n\n        const separatedData = Ember.makeArray(payload.data).reduce((obj, datum) => {\n          const [categoryId] = datum.id.split('/');\n          const modelName = _csConfigModelCategory.modelNameForCategory[categoryId] || 'cs-config-item';\n\n          if (modelName) {\n            obj[modelName] = obj[modelName] || [];\n            obj[modelName].push(datum);\n          }\n\n          return obj;\n        }, {});\n        Object.entries(separatedData).forEach(_ref => {\n          let [modelName, dataPayloads] = _ref;\n\n          if (modelName !== 'cs-config-item') {\n            // these config items back IQUX models (e.g. vehicle-type)\n            const serializer = store.serializerFor(modelName);\n            const modelClass = store.modelFor(modelName);\n            const normed = serializer.normalizeArrayResponse(store, modelClass, {\n              data: dataPayloads\n            }, id, requestType);\n            normed.data = normed.data || [];\n            normed.included = normed.included || []; // because we used a specific serializer, the models will be in \"data\"\n            // and the config-items will be in \"included\"; we need to swap these\n            // because the client requested records of type `cs-config-item`\n\n            mergeRecordsInPlace(normalized.data, normed.included.filterBy('type', 'cs-config-item'));\n            mergeRecordsInPlace(normalized.included, normed.data);\n            mergeRecordsInPlace(normalized.included, normed.included.rejectBy('type', 'cs-config-item'));\n            return;\n          } // these are just generic config-items, so process them normally\n\n\n          const normed = this._super(store, primaryModelClass, {\n            data: dataPayloads\n          }, id, requestType);\n\n          const augmented = this._addCategoriesToArrayPayload(normed);\n\n          mergeRecordsInPlace(normalized.data, augmented.data);\n          mergeRecordsInPlace(normalized.included, augmented.included);\n        });\n        return normalized;\n      } // if execution reaches here, it is usually because a config-model (e.g.\n      // vehicle-type) serializer called `this._super(...)`\n\n\n      const normalized = this._super(store, primaryModelClass, payload, id, requestType);\n\n      const augmented = this._addCategoriesToArrayPayload(normalized);\n\n      return augmented;\n    },\n\n    normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) {\n      const currentId = payload.data.id;\n      const [categoryId, modelId] = currentId.split('/');\n      const modelName = _csConfigModelCategory.modelNameForCategory[categoryId];\n\n      if (primaryModelClass.modelName === 'cs-config-item' && !(modelName === 'cs-config-item' && requestType === 'createRecord')) {\n        // try to substitute model-specific serializer\n        if (modelName) {\n          const serializer = store.serializerFor(modelName);\n          const modelClass = store.modelFor(modelName); // by invoking the specific serializer, the specific model will be \"data\"\n\n          const normalized = serializer.normalizeSingleResponse(store, modelClass, payload, modelId, requestType); // swap so that the generic config item is the \"data\" and the specific\n          // model is in \"included\"\n\n          const configItem = normalized.included.find(hash => {\n            return hash.id === currentId && hash.type === 'cs-config-item';\n          });\n          normalized.included.removeObject(configItem);\n          normalized.included.push(normalized.data);\n          normalized.data = configItem;\n          return normalized;\n        }\n      } // process as a normal config-item\n\n\n      const normalized = this._super(store, primaryModelClass, payload, modelId, requestType);\n\n      const augmented = this._addCategoriesToSinglePayload(normalized);\n\n      return augmented;\n    },\n\n    normalize() {\n      const normalized = this._super(...arguments); // extract category and name from id\n\n\n      const {\n        id\n      } = normalized.data;\n      const segments = id.split('/');\n      const name = segments[segments.length - 1];\n      const category = segments.slice(0, segments.length - 1).join('/');\n      normalized.data.attributes.name = name;\n      normalized.data.attributes.category = category;\n      const {\n        type,\n        value,\n        defaultValue\n      } = normalized.data.attributes;\n\n      if (Ember.typeOf(value) === 'string' && JSON_REGEX.test(value)) {\n        try {\n          normalized.data.attributes.value = JSON.parse(value);\n        } catch (err) {\n          logger.warn('failed to parse JSON-like value', value);\n          normalized.data.attributes.value = {}; // empty hash gracefully protect ui component\n        }\n      } // booleans are encoded as \"Yes\" or \"No\" if defaultValue is \"Yes\" or \"No\"\n      // booleans are encoded as \"true\" or \"false\" if defaultValue is \"true\" or \"false\"\n\n\n      if (type === BOOLEAN_TYPE) {\n        if (defaultValue === YES_STRING || defaultValue === NO_STRING) {\n          normalized.data.attributes.value = value === YES_STRING;\n        } else {\n          normalized.data.attributes.value = value === TRUE_STRING;\n        }\n      }\n\n      return normalized;\n    },\n\n    serialize() {\n      const categoryId = arguments[0].record.get('category');\n\n      const serialized = this._super(...arguments);\n\n      OPTIONAL_ATTRS.forEach(attr => {\n        if (Ember.isEmpty(serialized.data.attributes[attr])) {\n          delete serialized.data.attributes[attr];\n        }\n      });\n      const {\n        name,\n        displayName,\n        type,\n        value,\n        defaultValue\n      } = serialized.data.attributes;\n\n      if (!name) {\n        const camelizedName = Ember.String.camelize(displayName);\n        serialized.data.attributes.name = camelizedName.replace(/[_\\W]+/g, '_');\n      } // booleans are encoded as \"Yes\" or \"No\" if defaultValue is \"Yes\" or \"No\"\n      // booleans are encoded as \"true\" or \"false\" if defaultValue is \"true\" or \"false\"\n\n\n      if (type === BOOLEAN_TYPE) {\n        if (defaultValue === YES_STRING || defaultValue === NO_STRING) {\n          serialized.data.attributes.value = value ? YES_STRING : NO_STRING;\n        } else {\n          serialized.data.attributes.value = value ? TRUE_STRING : FALSE_STRING;\n        }\n      } else if (Ember.typeOf(value) !== 'string') {\n        // values must always be strings\n        serialized.data.attributes.value = JSON.stringify(value);\n      }\n\n      if (categoryId === 'config-System_Configuration-speed_region_groups') {\n        const updateValue = JSON.parse(serialized.data.attributes.value);\n        updateValue.regions.forEach(region => {\n          delete region.id;\n          delete region.originalName;\n        });\n        serialized.data.attributes.value = JSON.stringify(updateValue);\n      } // API doesn't accept relationships hash at all\n\n\n      delete serialized.data.relationships;\n      return serialized;\n    },\n\n    _addCategoriesToArrayPayload(payload) {\n      payload.data = payload.data || [];\n      payload.included = payload.included || [];\n      payload.data.forEach(datum => {\n        const categoryPayloads = this._buildCategoryPayloads(datum);\n\n        mergeRecordsInPlace(payload.included, categoryPayloads);\n        datum.relationships = datum.relationships || {};\n        datum.relationships.configCategory = {\n          data: {\n            id: categoryPayloads[categoryPayloads.length - 1].id,\n            type: 'cs-config-category'\n          }\n        };\n      });\n      return payload;\n    },\n\n    _addCategoriesToSinglePayload(payload) {\n      payload.included = payload.included || [];\n\n      const categoryPayloads = this._buildCategoryPayloads(payload.data);\n\n      mergeRecordsInPlace(payload.included, categoryPayloads);\n      payload.data = payload.data || {};\n      payload.data.relationships = payload.data.relationships || {};\n      payload.data.relationships.configCategory = {\n        data: {\n          id: categoryPayloads[categoryPayloads.length - 1].id,\n          type: 'cs-config-category'\n        }\n      };\n      return payload;\n    },\n\n    _buildCategoryPayloads(payload) {\n      payload.attributes = payload.attributes || {};\n      payload.attributes.category = payload.attributes.category || '';\n      const segments = payload.attributes.category.split(CATEGORY_DELIMITER); // the last payload will be the most specific\n\n      return segments.map((segment, i) => {\n        const newPayload = {\n          id: segments.slice(0, i + 1).join(CATEGORY_DELIMITER),\n          type: 'cs-config-category',\n          attributes: {\n            name: segment,\n            depth: i\n          },\n          relationships: {}\n        };\n\n        if (i > 0) {\n          newPayload.relationships.parent = {\n            data: {\n              id: segments.slice(0, i).join(CATEGORY_DELIMITER),\n              type: 'cs-config-category'\n            }\n          };\n        }\n\n        return newPayload;\n      });\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      if (this.get('widget.isConfigLoaded')) {\n        const fixedRouteParams = this.get('fixedRouteEngine.fixedRouteEngineParams');\n        if (_.isEmpty(fixedRouteParams)) return this._super(store, clazz, payload);\n        payload.data.forEach(datum => {\n          const [categoryId] = datum.id.split('/');\n          const fixedRouteEngineId = 'config-Fixed_Route_Engine_Parameters';\n\n          if (categoryId === fixedRouteEngineId && !Ember.isEmpty(fixedRouteParams)) {\n            const FRESParams = fixedRouteParams[datum.attributes.displayName];\n            datum.attributes.value = FRESParams.value;\n            datum.attributes.defaultValue = FRESParams.defaultValue;\n          }\n        });\n      }\n\n      return this._super(store, clazz, payload);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cs-config-model\", [\"exports\", \"adept-iq/serializers/cs-config-item\", \"lodash\"], function (_exports, _csConfigItem, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigItem.default.extend({\n    // TODO: can we infer this?\n    modelName: null,\n\n    normalizeSingleResponse(store, primaryModelClass, payload, id\n    /*, requestType */\n    ) {\n      const normalized = this._super(...arguments);\n\n      const modelName = this.get('modelName');\n      if (!modelName) return normalized;\n      normalized.included = normalized.included || [];\n      const attributes = Ember.get(normalized, 'data.attributes.value') ? _lodash.default.cloneDeep(normalized.data.attributes.value) : {}; // copy in `name` property from config item if not present in `value`\n\n      attributes.name = attributes.name || normalized.data.attributes.name;\n      const data = {\n        id,\n        type: modelName,\n        attributes: this.normalizeAttributes(attributes, normalized.data)\n      };\n\n      if (primaryModelClass.modelName === modelName) {\n        normalized.included.push(normalized.data);\n        normalized.data = data;\n      } else {\n        normalized.included.push(data);\n      }\n\n      return normalized;\n    },\n\n    normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n      const normalized = this._super(store, primaryModelClass, payload, id, requestType);\n\n      const modelName = this.get('modelName');\n      if (!modelName || !normalized.data) return normalized;\n      normalized.included = normalized.included || [];\n      normalized.data = normalized.data || [];\n      normalized.included.push(...normalized.data);\n      normalized.data = normalized.data.map(datum => {\n        const modelId = datum.id.split('/').get('lastObject'); // because this is a config-model, it should have an _object_ value\n\n        const attributes = Ember.get(datum, 'attributes.value') ? _lodash.default.cloneDeep(datum.attributes.value) : {}; // copy in `name` property from config item if not present in `value`\n\n        attributes.name = attributes.name || datum.attributes.name;\n\n        if (datum.attributes.category !== 'config-System_Configuration-travel_need_types' && datum.attributes.category !== 'config-System_Configuration-funding_agencies' && datum.attributes.category !== 'config-System_Configuration-fare_types' && datum.attributes.category !== 'config-Scheduling-service_windows' && datum.attributes.category !== 'config-System_Configuration-cancel_types' && datum.attributes.category !== 'config-System_Configuration-fare_categories' && datum.attributes.category !== 'config-System_Configuration-service_needs_types') {\n          attributes.displayName = datum.attributes.displayName;\n        }\n\n        if (datum.attributes.category === 'config-System_Configuration-travel_need_types' || datum.attributes.category === 'config-System_Configuration-zones') {\n          attributes.value = datum.attributes.value;\n        }\n\n        if (datum.attributes.category === 'config-System_Configuration-Activity_Log_Types-route' || datum.attributes.category === 'config-System_Configuration-Activity_Log_Types-trip') attributes.displayName = datum.attributes.displayName;\n        return {\n          id: modelId,\n          type: modelName,\n          attributes: this.normalizeAttributes(attributes, datum)\n        };\n      });\n      return normalized;\n    },\n\n    // overload this in subclass to re-organize attributes\n    normalizeAttributes(attributes\n    /*, data */\n    ) {\n      return attributes;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/cs-config-permission\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'cs-config-permission',\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n\n    normalizeArrayResponse(store, primaryModelClass, payload\n    /*, id, requestType */\n    ) {\n      const configPermissions = []; // unlike other config-models, cs-config-permissions keep their properties\n      // wrapped up in a `value` JSON property; we don't call `this._super(...)`\n\n      payload.data = payload.data || [];\n      payload.data.map(configItemPayload => {\n        configItemPayload.attributes = configItemPayload.attributes || {};\n        const attributes = {\n          name: configItemPayload.attributes.displayName\n        };\n\n        if (configItemPayload.attributes) {\n          try {\n            attributes.value = JSON.parse(configItemPayload.attributes.value);\n          } catch (e) {\n            attributes.value = null;\n          }\n\n          attributes.value.map.addressSearchAllowed = true;\n          attributes.value.map.navigateToAllowed = true;\n          configPermissions.push({\n            id: configItemPayload.id,\n            type: 'cs-config-permission',\n            attributes\n          });\n        }\n      });\n      return {\n        data: configPermissions\n      };\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/dashboard\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    normalize(modelClass, resourceHash) {\n      if (!resourceHash.attributes.category && resourceHash.id) {\n        resourceHash.attributes.category = this._extractCategory(resourceHash.id);\n      }\n\n      return this._super(modelClass, resourceHash);\n    },\n\n    _extractCategory(id) {\n      return id.split('/')[0];\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/dispatch-route\", [\"exports\", \"adept-iq/serializers/-dispatch\", \"@mapbox/polyline\"], function (_exports, _dispatch, _polyline) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    attrs: {\n      replacementEndTime: {\n        serialize: false\n      },\n      replacementMoveAllTrips: {\n        serialize: false\n      },\n      replacementRouteId: {\n        serialize: false\n      },\n      replacementStartTime: {\n        serialize: false\n      },\n      routeStatus: {\n        serialize: false\n      },\n      avlmVersion: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const relationshipsToBeDeleted = ['provider', 'route', 'dispatchRouteLock', 'dispatchSchedule', 'scheduledPolyline'];\n\n      if (json.data && json.data.relationships) {\n        relationshipsToBeDeleted.forEach(relationship => {\n          const relationshipData = json.data.relationships[relationship];\n\n          if (Ember.isPresent(relationshipData)) {\n            delete json.data.relationships[relationship];\n          }\n        });\n      }\n\n      return json;\n    },\n\n    normalize(typeClass, resourceHash) {\n      // de-code polylines; for `navigationPolyline`, this is done by an\n      // ember-data transform, but the nested structure here means we have to\n      // do it manually\n      if (resourceHash.attributes) {\n        // Handles error if attributes is undefined\n        const {\n          stopPolylines,\n          mode\n        } = resourceHash.attributes;\n\n        if (mode) {\n          resourceHash.attributes.schedulingMode = mode;\n        }\n\n        if (stopPolylines) {\n          stopPolylines.forEach(obj => {\n            if (!obj.polyline) return;\n            obj.polyline = _polyline.default.decode(obj.polyline);\n          });\n        }\n\n        if (!Ember.isNone(resourceHash.attributes.providerName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.provider = {\n            data: {\n              type: 'provider',\n              id: resourceHash.attributes.providerName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.providerName;\n        }\n      }\n\n      const normalized = this._super(...arguments);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {}; // Roadsup probably won't open routesWidget so it is not transformed.\n\n      const routeId = payload.data.attributes._transformed ? payload.data.attributes.routeId : payload.data.attributes.id;\n\n      if (Ember.isPresent(routeId)) {\n        // Route need to use push directly, so null value can update ember store.\n        const route = {\n          data: {\n            type: 'route',\n            id: routeId,\n            attributes: {\n              otpValue: payload.data.attributes.otp || null,\n              otp: payload.data.attributes.otpStatus || null,\n              actualStartTimestamp: payload.data.attributes.actualStartDateTime || null,\n              // Set null so it will clean up the value\n              actualEndTimestamp: payload.data.attributes.actualEndDateTime || null\n            }\n          }\n        };\n        store.push(route);\n      }\n\n      if (Ember.isPresent(payload.data.attributes.polyline)) {\n        const navigationPolyline = {\n          type: 'polyline',\n          id: routeId,\n          attributes: {\n            coords: payload.data.attributes.polyline\n          },\n          relationships: {\n            route: {\n              data: {\n                type: 'route',\n                id: routeId\n              }\n            }\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(navigationPolyline);\n      }\n\n      if (Ember.isPresent(payload.data.attributes.lock) && payload.data.attributes.dispatchRoutePk) {\n        const dispatchRouteLock = {\n          type: 'lock',\n          id: payload.data.attributes.dispatchRoutePk,\n          attributes: {\n            entityType: 'dispatchRoute',\n            entityId: payload.data.attributes.dispatchRoutePk,\n            timeToLive: payload.data.attributes.lock.ttl,\n            expirationTime: payload.data.attributes.lock.expiredAt,\n            status: 'locked',\n            persist: payload.data.attributes.lock.persist\n          },\n          relationships: {\n            dispatchRoute: {\n              data: {\n                type: 'dispatchRoute',\n                id: payload.data.attributes.dispatchRoutePk\n              }\n            },\n            owner: {\n              data: {\n                type: 'sso-user',\n                id: payload.data.attributes.lock.user\n              }\n            }\n          }\n        };\n        relationships.dispatchRouteLock = {\n          data: {\n            type: 'lock',\n            id: payload.data.attributes.dispatchRoutePk\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(dispatchRouteLock);\n      } else if (Ember.isPresent(payload.data.attributes.isLocked) && !payload.data.attributes.isLocked && payload.data.attributes.dispatchRoutePk) {\n        const dispatchRouteLock = {\n          type: 'lock',\n          id: payload.data.attributes.dispatchRoutePk,\n          attributes: {\n            entityType: 'dispatchRoute',\n            entityId: payload.data.attributes.dispatchRoutePk,\n            status: 'unlocked'\n          },\n          relationships: {\n            dispatchRoute: {\n              data: {\n                type: 'dispatchRoute',\n                id: payload.data.attributes.dispatchRoutePk\n              }\n            }\n          }\n        };\n        relationships.dispatchRouteLock = {\n          data: {\n            type: 'lock',\n            id: payload.data.attributes.dispatchRoutePk\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(dispatchRouteLock);\n      }\n\n      payload.data.relationships = relationships; // TODO: we need to store navigation polyline from widgetRecord\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/dispatch-schedule\", [\"exports\", \"adept-iq/serializers/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-19-a-review\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      json.data.type = 'driver19AReview';\n\n      if (json.data && json.data.relationships) {\n        const providerRelationship = json.data.relationships.provider;\n        const examTypeNameRelationship = json.data.relationships.examTypeName;\n\n        if (!Ember.isNone(providerRelationship)) {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n\n        if (!Ember.isNone(examTypeNameRelationship)) {\n          examTypeNameRelationship.data.type = 'examTypeName';\n        }\n      }\n\n      return json;\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'driver19AReview') {\n        return 'driver-19-a-review';\n      }\n\n      return this._super(key);\n    },\n\n    normalize(modelClass, resourceHash) {\n      const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n      relationships.provider = {\n        data: {\n          type: 'provider',\n          id: relationships.providerName.data.id\n        }\n      };\n      delete relationships.providerName;\n      resourceHash.relationships = relationships;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-accident\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-attribute\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-availability\", [\"exports\", \"adept-iq/serializers/-driver\", \"moment\"], function (_exports, _driver, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const refTime = (0, _moment.default)(0).startOf('day');\n  const DAYS_OF_WEEK = [{\n    day: 'monday',\n    display: 'Mon',\n    disabled: false\n  }, {\n    day: 'tuesday',\n    display: 'Tues',\n    disabled: false\n  }, {\n    day: 'wednesday',\n    display: 'Wed',\n    disabled: false\n  }, {\n    day: 'thursday',\n    display: 'Thurs',\n    disabled: false\n  }, {\n    day: 'friday',\n    display: 'Fri',\n    disabled: false\n  }, {\n    day: 'saturday',\n    display: 'Sat',\n    disabled: false\n  }, {\n    day: 'sunday',\n    display: 'Sun',\n    disabled: false\n  }, {\n    day: 'holiday',\n    display: 'Holiday',\n    disabled: false\n  }];\n\n  var _default = _driver.default.extend({\n    attrs: {\n      calcEndDate: {\n        serialize: false\n      },\n      DOWSelected: {\n        serialize: false\n      },\n      routeLength: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const {\n        shiftStart,\n        shiftEnd\n      } = json.data.attributes;\n      const momentShiftStart = (0, _moment.default)(shiftStart).startOf('minute');\n      const momentShiftEnd = (0, _moment.default)(shiftEnd).startOf('minute');\n      const diffStart = Math.abs(momentShiftStart.diff(momentShiftStart.clone().startOf('day')));\n\n      const durationStart = _moment.default.duration(diffStart);\n\n      const formattedShiftStart = refTime.clone().add(durationStart);\n      const diffEnd = Math.abs(momentShiftEnd.diff(momentShiftStart.clone().startOf('day')));\n\n      const durationEnd = _moment.default.duration(diffEnd);\n\n      const formattedShiftEnd = refTime.clone().add(durationEnd);\n      json.data.attributes.shiftStart = formattedShiftStart;\n      json.data.attributes.shiftEnd = formattedShiftEnd;\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(modelClass, resourceHash) {\n      // handle topic payload\n      const {\n        days\n      } = resourceHash.attributes;\n      const DOWSelected = [];\n\n      if (days) {\n        delete resourceHash.attributes.days;\n        days.forEach((value, i) => {\n          const weekday = _moment.default.weekdays(i).toLowerCase();\n\n          resourceHash.attributes[weekday] = value;\n        });\n      }\n\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n      const {\n        shiftStart,\n        shiftEnd\n      } = resourceHash.attributes;\n\n      if (shiftStart && shiftEnd) {\n        const startMoment = (0, _moment.default)(shiftStart);\n        const endMoment = (0, _moment.default)(shiftEnd);\n        const diff = Math.abs(startMoment.diff(endMoment));\n\n        const duration = _moment.default.duration(diff);\n\n        const hours = Math.floor(duration.asHours());\n        const formattedHours = hours < 10 ? `0${hours}` : hours;\n\n        const routeLength = formattedHours + _moment.default.utc(diff).format(':mm');\n\n        resourceHash.attributes.routeLength = routeLength;\n      }\n\n      if (shiftStart && resourceHash.attributes.routeLength) {\n        const clone = (0, _moment.default)(shiftStart);\n        const routeLength = resourceHash.attributes.routeLength.split(':');\n        clone.add(routeLength[0], 'hours');\n        clone.add(routeLength[1], 'minutes');\n        resourceHash.attributes.calcEndDate = clone.toISOString();\n      }\n\n      DAYS_OF_WEEK.forEach(option => {\n        if (resourceHash.attributes[option.day]) {\n          DOWSelected.pushObject(option);\n        }\n      });\n      resourceHash.attributes.DOWSelected = DOWSelected;\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-emergency-contact\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _driver.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-health\", [\"exports\", \"adept-iq/serializers/-driver\", \"lodash\"], function (_exports, _driver, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        const providerRelationship = json.data.relationships.provider;\n\n        if (Ember.isPresent(providerRelationship) && Ember.isPresent(providerRelationship.data)) {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (Ember.isPresent(resourceHash.attributes.providerName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: resourceHash.attributes.providerName\n          }\n        };\n        resourceHash.relationships = relationships;\n      }\n\n      if (resourceHash.relationships.providerName) {\n        resourceHash.relationships.providerName.data.type = 'provider';\n        resourceHash.relationships.provider = (0, _lodash.cloneDeep)(resourceHash.relationships.providerName);\n        delete resourceHash.relationships.providerName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-license\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        const classificationName = json.data.relationships.classificationName;\n\n        if (Ember.isPresent(classificationName)) {\n          classificationName.data.type = 'classificationName';\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (Ember.isPresent(resourceHash.attributes) && Ember.isPresent(resourceHash.attributes.classificationName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.classificationName = {\n          data: {\n            type: 'classificationName',\n            id: resourceHash.attributes.classificationName\n          }\n        };\n        resourceHash.relationships = relationships;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-log\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        const providerRelationship = json.data.relationships.provider;\n\n        if (providerRelationship && Ember.isNone(providerRelationship.data)) {\n          delete json.data.relationships.provider;\n        } else {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n\n      if (relationships.providerName) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: relationships.providerName.data.id\n          }\n        };\n        delete relationships.providerName;\n        resourceHash.relationships = relationships;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-phone-number\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    attrs: {\n      unformattedPhoneNumber: {\n        serialize: false\n      }\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.relationships = resourceHash.relationships || {};\n      resourceHash.attributes = resourceHash.attributes || {};\n      const {\n        phoneNumber,\n        areaCode\n      } = resourceHash.attributes;\n\n      if (phoneNumber) {\n        resourceHash.attributes.unformattedPhoneNumber = areaCode + phoneNumber;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-physical-type-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'driver-physical-type-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-position-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'driver-position-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-provider-note\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-provider-notes\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver-provider\", [\"exports\", \"adept-iq/serializers/-driver\", \"lodash\"], function (_exports, _driver, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        const providerRelationship = json.data.relationships.provider;\n\n        if (Ember.isPresent(providerRelationship)) {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (Ember.isPresent(resourceHash.attributes.providerName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: resourceHash.attributes.providerName\n          }\n        };\n        resourceHash.relationships = relationships;\n      }\n\n      if (resourceHash.relationships.providerName) {\n        resourceHash.relationships.providerName.data.type = 'provider';\n        resourceHash.relationships.provider = (0, _lodash.cloneDeep)(resourceHash.relationships.providerName);\n        delete resourceHash.relationships.providerName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/driver\", [\"exports\", \"adept-iq/serializers/-driver\"], function (_exports, _driver) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _driver.default.extend({\n    attrs: {\n      rvdStartTime: {\n        serialize: false\n      },\n      rvdEndTime: {\n        serialize: false\n      },\n      inProgress: {\n        serialize: false\n      },\n      routeStatus: {\n        serialize: false\n      },\n      license: {\n        serialize: false\n      },\n      isCompleted: {\n        serialize: false\n      },\n      rvdHistory: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        const providerRelationship = json.data.relationships.provider;\n        const vehicleRelationship = json.data.relationships.vehicle;\n\n        if (Ember.isPresent(providerRelationship)) {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n\n        if (Ember.isPresent(vehicleRelationship)) {\n          delete json.data.relationships.vehicle;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (Ember.isPresent(resourceHash.attributes)) {\n        const providerName = resourceHash.attributes.providerName;\n        const license = resourceHash.relationships.license;\n        const routeActualEndTime = resourceHash.attributes.routeActualEndTime;\n        const routePk = resourceHash.attributes.routePk;\n\n        if (Ember.isPresent(providerName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.provider = {\n            data: {\n              type: 'provider',\n              id: providerName\n            }\n          };\n          resourceHash.relationships = relationships;\n        } // hack for front-end, need backend to convert this relationship to be an object, not an array as that represents a hasMany\n\n\n        if (Ember.isPresent(license)) {\n          if (Ember.isArray(license.data)) {\n            resourceHash.relationships.license = resourceHash.relationships.license.data[0];\n          }\n        }\n\n        if (Ember.isPresent(routeActualEndTime) && Ember.isPresent(routePk)) {\n          if (Ember.isPresent(routeActualEndTime[routePk])) {\n            resourceHash.attributes.isCompleted = true;\n          } else {\n            resourceHash.attributes.isCompleted = false;\n          }\n        }\n      }\n\n      if (Ember.isPresent(resourceHash.relationships)) {\n        const providerName = resourceHash.relationships.providerName;\n\n        if (Ember.isPresent(providerName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          providerName.data.type = 'provider';\n          relationships.provider = providerName;\n          delete relationships.providerName;\n          resourceHash.relationships = relationships;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n\n      if (Ember.isPresent(payload.data.attributes.provider)) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: payload.data.attributes.provider\n          }\n        };\n        delete payload.data.attributes.provider;\n      } // If no rvdHistory we need to reset the value in ember data.\n\n\n      if (!Ember.isPresent(payload.data.attributes.rvdHistory)) {\n        payload.data.attributes.rvdHistory = null;\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/dwh-route\", [\"exports\", \"adept-iq/serializers/-dwh-dwhService\"], function (_exports, _dwhDwhService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dwhDwhService.default.extend({\n    modelName: 'dwh-route'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/dwh-stop-point\", [\"exports\", \"adept-iq/serializers/-dwh-dwhService\"], function (_exports, _dwhDwhService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dwhDwhService.default.extend({\n    modelName: 'dwh-stop-point',\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (resourceHash.attributes) {\n        if (Ember.isPresent(resourceHash.attributes.routeid)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.dwhRoute = {\n            data: {\n              type: 'dwh-route',\n              id: resourceHash.attributes.routeid\n            }\n          };\n          resourceHash.relationships = relationships;\n        }\n\n        if (Ember.isPresent(resourceHash.attributes.tripId)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.dwhTrip = {\n            data: {\n              type: 'dwh-trip',\n              id: resourceHash.attributes.tripId\n            }\n          };\n          resourceHash.relationships = relationships;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/dwh-trip\", [\"exports\", \"adept-iq/serializers/-dwh-dwhService\"], function (_exports, _dwhDwhService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dwhDwhService.default.extend({\n    modelName: 'dwh-trip',\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (resourceHash.attributes) {\n        if (Ember.isPresent(resourceHash.attributes.routeId)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.dwhRoute = {\n            data: {\n              type: 'dwh-route',\n              id: resourceHash.attributes.routeId\n            }\n          };\n          resourceHash.relationships = relationships;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/eligibility-category\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'eligibility-category'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/eligibility-condition\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'eligibility-condition'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/eligibility-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'eligibility-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/employment-status-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'employment-status-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/emplyoment-status-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'employment-status-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/etanav-route-break\", [\"exports\", \"adept-iq/serializers/-dispatch\", \"adept-iq/config/environment\"], function (_exports, _dispatch, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(typeClass, hash) {\n      const {\n        routeBreak\n      } = hash.relationships || {}; // Avoid 2.4.1 errors\n\n      if (routeBreak && _environment.default.APP.avlmLite) {\n        delete hash.relationships.routeBreak;\n        hash.relationships.avlmRouteBreak = routeBreak;\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/etanav-route\", [\"exports\", \"adept-iq/serializers/-dispatch\", \"adept-iq/config/environment\"], function (_exports, _dispatch, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      if (requestType === 'findRecord') {\n        const data = payload.data;\n        let garageStops = null;\n        payload.data.type = 'etanav-route'; // Now findRecord from iqux-service\n\n        const stopPoints = payload.included;\n\n        if (payload.data && !Ember.isBlank(stopPoints)) {\n          garageStops = stopPoints.filter(stop => stop.type === 'etanavStopPoint' && (stop.id.includes('GP') || stop.id.includes('GD')));\n          garageStops.forEach(stopPoint => {\n            let stopType = 'pullinGarage';\n            let parentType = 'pullinGarage';\n            let routeOrdinal;\n\n            if (stopPoint.id.includes('GP')) {\n              stopType = 'pulloutGarage';\n              parentType = 'pulloutGarage';\n              routeOrdinal = '0';\n            }\n\n            payload.included.push({\n              id: stopPoint.id,\n              type: _environment.default.APP.avlmLite ? 'avlm-stop-point' : 'stop-point',\n              attributes: {\n                stopType: stopType,\n                parentType: parentType,\n                routeOrdinal: routeOrdinal,\n                status: stopPoint.attributes.status,\n                dwell: stopPoint.attributes.dwell,\n                lat: stopPoint.attributes.lat,\n                lng: stopPoint.attributes.lng,\n                eta: stopPoint.attributes.eta\n              },\n              relationships: {\n                stopRoute: {\n                  data: {\n                    type: _environment.default.APP.avlmLite ? 'avlm-route' : 'route',\n                    id: data.id\n                  }\n                }\n              }\n            });\n          });\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(typeClass, hash) {\n      if (_environment.default.APP.avlmLite) {\n        const {\n          route,\n          routeBreaks,\n          vehicle,\n          stopPoints\n        } = hash.relationships || {};\n\n        if (route) {\n          this.dasherizeRelationType(route);\n          hash.relationships.avlmRoute = route;\n          delete hash.relationships.route;\n        }\n\n        if (routeBreaks) {\n          this.dasherizeRelationShipCollection(routeBreaks);\n          hash.relationships.etaRouteBreaks = routeBreaks;\n          delete hash.relationships.routeBreaks;\n        }\n\n        if (vehicle) {\n          this.dasherizeRelationType(vehicle);\n          hash.relationships.avlmVehicle = vehicle;\n          delete hash.relationships.vehicle;\n        }\n\n        if (stopPoints) {\n          this.dasherizeRelationShipCollection(stopPoints);\n          hash.relationships.etaStops = stopPoints;\n          delete hash.relationships.stopPoints;\n        } // we are keeping the dispatchRoute as id so\n        // only update 1 eta-route record per dispatchRoute\n\n\n        if (route) {\n          hash.id = route.data.id;\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/etanav-stop-point\", [\"exports\", \"adept-iq/serializers/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/event\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (Ember.isPresent(resourceHash.attributes.userId)) {\n        const relationships = resourceHash.relationships;\n        relationships.user = {\n          data: {\n            type: 'sso-user',\n            id: resourceHash.attributes.userId\n          }\n        };\n        resourceHash.relationships = relationships;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/exam-type-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'exam-type-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/fare-category\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'fare-category'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/fare-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'fare-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/funding-agency\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'funding-agency'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/generated-subscription-booking\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/group\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/inspection-category\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'inspection-category'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/inspector-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'inspector-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/internal-ui-config\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'internal-ui-config'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/lease-company\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'lease-company'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/leg-service-need\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const serviceNeedTypeNameRelationship = json.data.relationships.serviceNeedType;\n\n      if (!Ember.isNone(serviceNeedTypeNameRelationship)) {\n        if (!Ember.isNone(serviceNeedTypeNameRelationship.data)) {\n          serviceNeedTypeNameRelationship.data.type = 'serviceNeedTypeName';\n          json.data.relationships.serviceNeedTypeName = json.data.relationships.serviceNeedType;\n        }\n\n        delete json.data.relationships.serviceNeedType;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes)) {\n        if (resourceHash.attributes.serviceNeedTypeName) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.serviceNeedType = {\n            data: {\n              type: 'service-need-type',\n              id: resourceHash.attributes.serviceNeedTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.serviceNeedTypeName;\n        }\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.serviceNeedTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.serviceNeedType = {\n          data: {\n            type: 'service-need-type',\n            id: resourceHash.relationships.serviceNeedTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.serviceNeedTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/leg-travel-need\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const travelNeedTypeNameRelationship = json.data.relationships.travelNeedType;\n\n      if (!Ember.isNone(travelNeedTypeNameRelationship) && !Ember.isNone(travelNeedTypeNameRelationship.data)) {\n        travelNeedTypeNameRelationship.data.type = 'travelNeedTypeName';\n        json.data.relationships.travelNeedTypeName = json.data.relationships.travelNeedType;\n        delete json.data.relationships.travelNeedType;\n      }\n\n      const passengerTypeNameRelationship = json.data.relationships.passengerType;\n\n      if (!Ember.isNone(passengerTypeNameRelationship) && !Ember.isNone(passengerTypeNameRelationship.data)) {\n        passengerTypeNameRelationship.data.type = 'passengerTypeName';\n        json.data.relationships.passengerTypeName = json.data.relationships.passengerType;\n        delete json.data.relationships.passengerType;\n      }\n\n      if (Ember.isPresent(json.data.id)) {\n        delete json.data.relationships.leg;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes)) {\n        if (resourceHash.attributes.travelNeedTypeName) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.travelNeedType = {\n            data: {\n              type: 'travel-need-type',\n              id: resourceHash.attributes.travelNeedTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.travelNeedTypeName;\n        }\n      }\n\n      if (resourceHash.attributes.passengerTypeName) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.passengerType = {\n          data: {\n            type: 'passenger-type',\n            id: resourceHash.attributes.passengerTypeName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.passengerTypeName;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.travelNeedTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.travelNeedType = {\n          data: {\n            type: 'travel-need-type',\n            id: resourceHash.relationships.travelNeedTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.travelNeedTypeName;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.passengerTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.passengerType = {\n          data: {\n            type: 'passenger-type',\n            id: resourceHash.relationships.passengerTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.passengerTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/leg\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const serviceWindowRelationship = json.data.relationships.serviceWindow;\n      const fundingAgencyRelationship = json.data.relationships.fundingAgency;\n      const tripPurposeRelationship = json.data.relationships.tripPurpose;\n      const booking = json.data.relationships.booking;\n\n      if (!Ember.isNone(serviceWindowRelationship) && !Ember.isNone(serviceWindowRelationship.data)) {\n        serviceWindowRelationship.data.type = 'serviceWindowName';\n        json.data.relationships.serviceWindowName = json.data.relationships.serviceWindow;\n        delete json.data.relationships.serviceWindow;\n      }\n\n      if (!Ember.isNone(fundingAgencyRelationship)) {\n        if (!Ember.isNone(fundingAgencyRelationship.data)) {\n          fundingAgencyRelationship.data.type = 'fundingAgencyName';\n          json.data.relationships.fundingAgencyName = json.data.relationships.fundingAgency;\n        }\n\n        delete json.data.relationships.fundingAgency;\n      }\n\n      if (!Ember.isNone(tripPurposeRelationship)) {\n        if (!Ember.isNone(tripPurposeRelationship.data)) {\n          tripPurposeRelationship.data.type = 'tripPurposeName';\n          json.data.relationships.tripPurposeName = json.data.relationships.tripPurpose;\n        }\n\n        delete json.data.relationships.tripPurpose;\n      }\n\n      if (!Ember.isNone(json.data.id) && !Ember.isNone(booking)) {\n        delete json.data.relationships.booking;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships)) {\n        if (!Ember.isNone(resourceHash.relationships.serviceWindowName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.serviceWindow = {\n            data: {\n              type: 'service-window',\n              id: resourceHash.relationships.serviceWindowName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.serviceWindowName;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.travelNeeds)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.legTravelNeeds = resourceHash.relationships.travelNeeds;\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.travelNeeds;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.serviceNeeds)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.legServiceNeeds = resourceHash.relationships.serviceNeeds;\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.serviceNeeds;\n        }\n      }\n\n      if (!Ember.isNone(resourceHash.attributes.serviceWindowName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.serviceWindow = {\n          data: {\n            type: 'service-window',\n            id: resourceHash.attributes.serviceWindowName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.serviceWindowName;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.fundingAgencyName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.fundingAgency = {\n          data: {\n            type: 'funding-agency',\n            id: resourceHash.relationships.fundingAgencyName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.fundingAgencyName;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.tripPurposeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.tripPurpose = {\n          data: {\n            type: 'trip-purpose',\n            id: resourceHash.relationships.tripPurposeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.tripPurposeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/location\", [\"exports\", \"adept-iq/serializers/-address\"], function (_exports, _address) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _address.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      if (json.data && json.data.relationships && json.data.relationships.address) {\n        delete json.data.relationships.address;\n      }\n\n      json.data.attributes.geoNode = 0;\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalizeCreateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      const {\n        modelName\n      } = primaryModelClass; // eslint-disable-next-line no-param-reassign\n\n      id = this.extractId(primaryModelClass, payload.data);\n\n      if (store.hasRecordForId(modelName, id)) {\n        const record = store.peekRecord(modelName, id);\n        store.unloadRecord(record);\n        return this._super(store, primaryModelClass, payload, id, requestType);\n      }\n\n      return this._super(store, primaryModelClass, payload, id, requestType);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/lock\", [\"exports\", \"adept-iq/serializers/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    attrs: {\n      dispatchRoute: {\n        serialize: false\n      },\n      status: {\n        serialize: false\n      },\n      owner: {\n        serialize: false\n      },\n      expirationTime: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/maintenance-location-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'maintenance-location-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/maintenance-status-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'maintenance-status-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/maintenance-type-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'maintenance-type-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/manufacturer-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'manufacturer-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/metric\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/no-show-reason-category\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'no-show-reason-category'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/no-show-reason-code\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'no-show-reason-code',\n\n    normalizeArrayResponse() {\n      const normalized = this._super(...arguments);\n\n      if (!Ember.isEmpty(normalized.data)) {\n        normalized.data.forEach(datum => {\n          datum.attributes = datum.attributes || {}; // adding specific attribute driverAppDefault for selecting\n          // an only default value.\n          // This will eventually used by avlm service.\n\n          if (datum.attributes && datum.attributes.driverAppDefault) {\n            datum.attributes.driverAppDefault = false;\n          }\n        });\n      }\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/passenger-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'passenger-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/perm-sso-role\", [\"exports\", \"adept-iq/serializers/application\"], function (_exports, _application) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    attrs: {\n      permissions: {\n        serialize: false\n      }\n    },\n\n    serialize(snapshot) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options.includeId = true;\n\n      const json = this._super(snapshot, options);\n\n      return json;\n    },\n\n    normalizeResponse: function (store, primaryModelClass, payload) {\n      const currentPayload = {\n        data: []\n      };\n      const data = payload.length ? payload : [payload];\n\n      for (let i = 0; i < data.length; i++) {\n        currentPayload.data.push({\n          id: data[i].roleName,\n          type: 'perm-sso-role',\n          attributes: data[i]\n        });\n      }\n\n      return currentPayload;\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'perm-sso-role') {\n        return 'perm-sso-role';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/perm-sso-user\", [\"exports\", \"adept-iq/serializers/application\", \"lodash\"], function (_exports, _application, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _application.default.extend({\n    normalize(modelClass, resourceHash) {\n      const {\n        roleNames\n      } = resourceHash.attributes;\n\n      if (roleNames) {\n        resourceHash.attributes.roleNames = roleNames.map(item => {\n          if (typeof item === 'object') return item;\n          return {\n            roleName: item.toString(),\n            displayName: Ember.String.capitalize(item.toString())\n          };\n        });\n      }\n\n      const relationships = resourceHash.relationships || {};\n\n      if (resourceHash.attributes.roles) {\n        const ssoRoles = resourceHash.attributes.roles.map(role => {\n          return {\n            type: 'perm-sso-role',\n            id: role.roleName\n          };\n        });\n        relationships.ssoRoles = {\n          data: ssoRoles\n        };\n      }\n\n      resourceHash.relationships = relationships;\n      return this._super(...arguments);\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      const userPayload = []; // eslint-disable-next-line no-param-reassign\n\n      payload = {\n        data: payload\n      };\n      payload.data.forEach(user => {\n        if (user.status !== 'delete' && user.status !== 'deleted') {\n          userPayload.push({\n            id: user.userId,\n            type: 'sso-user',\n            attributes: {\n              userId: user.userId,\n              email: user.email,\n              firstName: user.firstName,\n              lastName: user.lastName,\n              status: user.status,\n              loginDetails: _lodash.default.map(user.basicLogin, log => {\n                return {\n                  id: log.id,\n                  userName: log.username,\n                  userId: log.userId,\n                  password: log.passwordHash,\n                  passwordUpdatedAt: log.passwordUpdatedAt\n                };\n              }),\n              roles: _lodash.default.map(user.UserRoleRoles, role => {\n                return {\n                  roleName: role.roleName,\n                  displayName: role.displayName\n                };\n              }),\n              providers: _lodash.default.map(user.providers, p => {\n                return {\n                  id: p.provider,\n                  providerName: p.provider\n                };\n              })\n            }\n          });\n        }\n      });\n      payload.data = userPayload;\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'sso-user') {\n        return 'perm-sso-user';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/place-category-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'place-category-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/place\", [\"exports\", \"adept-iq/serializers/-address\", \"lodash\"], function (_exports, _address, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _address.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      if (!Ember.isNone(json.data.relationships)) {\n        const placeCategoryTypeRelationship = json.data.relationships.placeCategoryType;\n        const originSubscription = json.data.relationships.originSubscription;\n        const destinationSubscription = json.data.relationships.destinationSubscription;\n        const breakdownVehicle = json.data.relationships.breakdownVehicle;\n\n        if (placeCategoryTypeRelationship) {\n          json.data.relationships.placeCategoryTypeName = {\n            data: {\n              type: 'placeCategoryTypeName',\n              id: placeCategoryTypeRelationship.data.id\n            }\n          };\n          delete json.data.relationships.placeCategoryType;\n        }\n\n        if (!Ember.isNone(originSubscription)) {\n          delete json.data.relationships.originSubscription;\n        }\n\n        if (!Ember.isNone(destinationSubscription)) {\n          delete json.data.relationships.destinationSubscription;\n        }\n\n        if (!Ember.isNone(breakdownVehicle) && Ember.isNone(breakdownVehicle.data)) {\n          delete json.data.relationships.breakdownVehicle;\n        }\n      }\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      _lodash.default.remove(payload.included, m => m.type === 'placeCategoryTypeName' || m.type === 'zoneName');\n\n      return this._super(...arguments);\n    },\n\n    normalizeCreateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      const {\n        modelName\n      } = primaryModelClass; // eslint-disable-next-line no-param-reassign\n\n      id = this.extractId(primaryModelClass, payload.data);\n\n      if (store.hasRecordForId(modelName, id)) {\n        const record = store.peekRecord(modelName, id);\n        store.unloadRecord(record);\n        return this._super(store, primaryModelClass, payload, id, requestType);\n      }\n\n      return this._super(store, primaryModelClass, payload, id, requestType);\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.placeCategoryTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.placeCategoryType = {\n          data: {\n            type: 'place-category-type',\n            id: resourceHash.attributes.placeCategoryTypeName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.placeCategoryTypeName;\n      }\n\n      if (resourceHash.relationships) {\n        if (!Ember.isNone(resourceHash.relationships.placeCategoryTypeName)) {\n          resourceHash.relationships.placeCategoryType = resourceHash.relationships.placeCategoryTypeName;\n          resourceHash.relationships.placeCategoryType.data.type = 'place-category-type';\n          delete resourceHash.relationships.placeCategoryTypeName;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/playback-driver\", [\"exports\", \"adept-iq/serializers/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    normalize(modelClass, resourceHash) {\n      resourceHash.id = resourceHash.attributes.driverid ? resourceHash.attributes.driverid : resourceHash.id;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      if (!Ember.isEmpty(payload.data)) {\n        const resultedPayload = [];\n\n        const _data = [].concat(payload.data);\n\n        payload.data = _data;\n        payload.data.forEach(item => {\n          const data = item.attributes;\n\n          if (!Ember.isEmpty(data)) {\n            item.attributes = { ...data,\n              driverId: data.driverid\n            };\n            resultedPayload.push(item);\n          }\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'driver') {\n        return 'playback-driver';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/playback-route\", [\"exports\", \"adept-iq/serializers/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    normalize(modelClass, resourceHash) {\n      resourceHash.id = resourceHash.attributes.routeid ? resourceHash.attributes.routeid : resourceHash.id;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      if (!Ember.isEmpty(payload.data)) {\n        const resultedPayload = [];\n\n        const _data = [].concat(payload.data);\n\n        payload.data = _data;\n        payload.data.forEach(item => {\n          const data = item.attributes;\n\n          if (!Ember.isEmpty(data)) {\n            item.attributes = { ...data,\n              routeId: data.routeid,\n              routeName: data.routename\n            };\n            resultedPayload.push(item);\n          }\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'route') {\n        return 'playback-route';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/playback-vehicle\", [\"exports\", \"adept-iq/serializers/-playbackService\"], function (_exports, _playbackService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _playbackService.default.extend({\n    normalize(modelClass, resourceHash) {\n      resourceHash.id = resourceHash.attributes.vehicleid ? resourceHash.attributes.vehicleid : resourceHash.id;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      if (!Ember.isEmpty(payload.data)) {\n        const resultedPayload = [];\n\n        const _data = [].concat(payload.data);\n\n        payload.data = _data;\n        payload.data.forEach(item => {\n          const data = item.attributes;\n\n          if (!Ember.isEmpty(data)) {\n            item.attributes = { ...data,\n              vehicleId: data.vehicleid\n            };\n            resultedPayload.push(item);\n          }\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'vehicle') {\n        return 'playback-vehicle';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/polyline\", [\"exports\", \"adept-iq/serializers/-dispatch\", \"adept-iq/config/environment\"], function (_exports, _dispatch, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(typeClass, hash) {\n      if (_environment.default.APP.avlmLite && hash.relationships) {\n        const {\n          avlmRoute,\n          avlmStopPoint\n        } = hash.relationships; // we are keeping the route and stopPoint as id so\n        // only update 1 eta-route record per combination.\n        // if stopPoint does not exist then use route\n        // if route does not exist too then keep original\n\n        if (avlmRoute && avlmStopPoint) {\n          hash.id = `${avlmRoute.data.id}-${avlmStopPoint.data.id}`;\n        } else if (avlmRoute) {\n          hash.id = avlmRoute.data.id;\n        } else {\n          // eslint-disable-next-line no-console\n          console.warn('Missing required avlm route relationship.');\n        }\n\n        return this._super(...arguments);\n      }\n\n      if (hash.relationships) {\n        const {\n          route,\n          stopPoint\n        } = hash.relationships; // we are keeping the route and stopPoint as id so\n        // only update 1 eta-route record per combination.\n        // if stopPoint does not exist then use route\n        // if route does not exist too then keep original\n\n        if (route && stopPoint) {\n          hash.id = `${route.data.id}-${stopPoint.data.id}`; // route has only one relationship to navigation polyline.\n\n          delete hash.relationships.route;\n        } else if (route) {\n          hash.id = route.data.id;\n        } else {\n          // eslint-disable-next-line no-console\n          console.warn('Missing required dispatch route relationship.');\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/problem-identified-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'problem-identified-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/provider-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'provider-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/provider\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'provider'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rear-axel-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'rear-axel-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-address\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'address' || key === 'reconcile-address') {\n        return 'reconcile-address';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-driver\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      // resourceHash.id = resourceHash.attributes.startTime;\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'driver') {\n        return 'reconcile-driver';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-passenger\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          item.id = item.attributes.passengerId;\n        });\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'passenger') {\n        return 'reconcile-passenger';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-price\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    modelNameFromPayloadKey(key) {\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-route-id\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      const resultedPayload = [];\n\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          item.id = item.attributes.routeId;\n          resultedPayload.push(item);\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'route') {\n        return 'reconcile-route-id';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-route\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    pushPayloads(store, item) {\n      if (!Ember.isEmpty(item.attributes.vehicle.id)) {\n        store.pushPayload({\n          data: {\n            id: item.attributes.vehicle.vehicleId,\n            type: 'reconcile-vehicle',\n            attributes: { ...item.attributes.vehicle\n            }\n          }\n        });\n      }\n\n      if (!Ember.isEmpty(item.attributes.driver.id)) {\n        store.pushPayload({\n          data: {\n            id: item.attributes.driver.driverId,\n            type: 'reconcile-driver',\n            attributes: { ...item.attributes.driver\n            }\n          }\n        });\n      }\n\n      if (!Ember.isEmpty(item.attributes.start.id)) {\n        store.pushPayload({\n          data: {\n            id: item.attributes.start.id,\n            type: 'reconcile-stop',\n            attributes: { ...item.attributes.start,\n              stopId: item.attributes.start.id\n            }\n          }\n        });\n\n        if (!Ember.isEmpty(item.attributes.start.address.id)) {\n          store.pushPayload({\n            data: {\n              id: item.attributes.start.id,\n              type: 'reconcile-address',\n              attributes: { ...item.attributes.start.address,\n                addressId: item.attributes.start.id,\n                stopId: item.attributes.start.id\n              }\n            }\n          });\n        }\n      }\n\n      if (!Ember.isEmpty(item.attributes.end.id)) {\n        store.pushPayload({\n          data: {\n            id: item.attributes.end.id,\n            type: 'reconcile-stop',\n            attributes: { ...item.attributes.end,\n              stopId: item.attributes.end.id\n            }\n          }\n        });\n\n        if (!Ember.isEmpty(item.attributes.end.address.id)) {\n          store.pushPayload({\n            data: {\n              id: item.attributes.end.id,\n              type: 'reconcile-address',\n              attributes: { ...item.attributes.end.address,\n                addressId: item.attributes.end.id,\n                stopId: item.attributes.end.id\n              }\n            }\n          });\n        }\n      }\n\n      if (!Ember.isEmpty(item.attributes.breaks)) {\n        item.attributes.breaks.map(breakStop => {\n          if (!Ember.isEmpty(breakStop.id)) {\n            store.pushPayload({\n              data: {\n                id: breakStop.id,\n                type: 'reconcile-stop',\n                attributes: { ...breakStop,\n                  stopId: breakStop.id,\n                  routeId: item.attributes.routeId\n                }\n              }\n            });\n\n            if (!Ember.isEmpty(breakStop.address.id)) {\n              store.pushPayload({\n                data: {\n                  id: breakStop.address.id,\n                  type: 'reconcile-address',\n                  attributes: { ...breakStop.address,\n                    addressId: breakStop.address.id,\n                    stopId: breakStop.id\n                  }\n                }\n              });\n            }\n          }\n        });\n      }\n\n      if (!Ember.isEmpty(item.attributes.trips)) {\n        item.attributes.trips.map(trip => {\n          if (!Ember.isEmpty(trip.id)) {\n            store.pushPayload({\n              data: {\n                id: trip.id,\n                type: 'reconcile-trip',\n                attributes: { ...trip,\n                  tripId: trip.id,\n                  routeId: item.attributes.routeId,\n                  passengerId: !Ember.isEmpty(trip.passenger) && trip.passenger.passengerId ? trip.passenger.passengerId : 0\n                }\n              }\n            });\n\n            if (!Ember.isEmpty(trip.passenger) && trip.passenger.id) {\n              store.pushPayload({\n                data: {\n                  id: trip.passenger.passengerId,\n                  type: 'reconcile-passenger',\n                  attributes: { ...trip.passenger\n                  }\n                }\n              });\n            }\n\n            if (!Ember.isEmpty(trip.price)) {\n              store.pushPayload({\n                data: {\n                  id: trip.id,\n                  type: 'reconcile-price',\n                  attributes: { ...trip.price,\n                    priceId: trip.id,\n                    tripId: trip.id\n                  }\n                }\n              });\n            }\n\n            if (!Ember.isEmpty(trip.stops)) {\n              trip.stops.map(stop => {\n                if (!Ember.isEmpty(stop.id)) {\n                  store.pushPayload({\n                    data: {\n                      id: stop.id,\n                      type: 'reconcile-stop',\n                      attributes: { ...stop,\n                        stopId: stop.id,\n                        tripId: trip.id,\n                        routeId: item.attributes.routeId\n                      }\n                    }\n                  });\n\n                  if (!Ember.isEmpty(stop.address)) {\n                    store.pushPayload({\n                      data: {\n                        id: stop.address.id,\n                        type: 'reconcile-address',\n                        attributes: { ...stop.address,\n                          addressId: stop.address.id,\n                          stopId: stop.id\n                        }\n                      }\n                    });\n                  }\n                }\n\n                if (!Ember.isEmpty(stop.usedAttributes)) {\n                  stop.usedAttributes.map(usedAttribute => {\n                    if (!Ember.isEmpty(usedAttribute.id)) {\n                      store.pushPayload({\n                        data: {\n                          id: usedAttribute.id,\n                          type: 'reconcile-used-attribute',\n                          attributes: { ...usedAttribute,\n                            attributeId: usedAttribute.id\n                          }\n                        }\n                      });\n                    }\n                  });\n                }\n              });\n            }\n          }\n        });\n      }\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      const resultedPayload = [];\n\n      const _data = [].concat(payload.data);\n\n      payload.data = _data;\n\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          this.pushPayloads(store, item);\n          item.id = item.attributes.routeId;\n          resultedPayload.push(item);\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'route') {\n        return 'reconcile-route';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-stop\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    pushPayloads(store, item) {\n      if (!Ember.isEmpty(item.attributes.address.id)) {\n        store.pushPayload({\n          data: {\n            id: item.id,\n            type: 'reconcile-address',\n            attributes: { ...item.attributes.address,\n              addressId: item.id,\n              stopId: item.id\n            }\n          }\n        });\n      }\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      const resultedPayload = [];\n\n      const _data = [].concat(payload.data);\n\n      payload.data = _data;\n\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          this.pushPayloads(store, item);\n          item.attributes.stopId = item.id;\n          resultedPayload.push(item);\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'stop') {\n        return 'reconcile-stop';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-trip\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      const resultedPayload = [];\n\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          const data = item.attributes;\n          let routeId = null;\n          if (Object.keys(data).includes('routeId') && data.routeId !== null) routeId = data.routeId;else if (data.route) routeId = data.route.routeId;\n          item.attributes = { ...data,\n            passengerId: data.passenger ? data.passenger.id : data.passengerId,\n            routeId: routeId\n          };\n          resultedPayload.push(item);\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'trip') {\n        return 'reconcile-trip';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-used-attributes\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    modelNameFromPayloadKey(key) {\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-vehicle\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      // resourceHash.id = resourceHash.attributes.startTime;\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'vehicle') {\n        return 'reconcile-vehicle';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/reconcile-verify-route\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      const _data = [].concat(payload.data);\n\n      payload.data = _data;\n      const resultedPayload = [];\n\n      if (!Ember.isEmpty(payload.data)) {\n        payload.data.forEach(item => {\n          resultedPayload.push(item);\n        });\n        payload.data = resultedPayload;\n      }\n\n      return this._super(store, clazz, payload);\n    },\n\n    modelNameFromPayloadKey(key) {\n      if (key === 'verify') {\n        return 'reconcile-verify-route';\n      }\n\n      return this._super(key);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-certification\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {},\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (Ember.isEmpty(json.data.attributes.appealPhone)) {\n        delete json.data.attributes.appealPhone;\n      }\n\n      if (Ember.isEmpty(json.data.attributes.doctorPhone)) {\n        delete json.data.attributes.doctorPhone;\n      }\n\n      if (Ember.isEmpty(json.data.attributes.assessmentPhone)) {\n        delete json.data.attributes.assessmentPhone;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-contact-info\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      isSoftDeleted: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (!Ember.isNone(json.data.attributes.reason)) {\n        const contactReasonTypeName = json.data.attributes.reason;\n\n        if (!Ember.isNone(contactReasonTypeName)) {\n          const contactReasonTypeRelationship = {\n            data: {\n              type: 'contactReasonTypeName',\n              id: contactReasonTypeName\n            }\n          };\n          json.data.relationships.contactReasonTypeName = contactReasonTypeRelationship;\n        }\n      }\n\n      delete json.data.attributes.reason;\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships.contactReasonTypeName)) {\n        resourceHash.attributes.reason = resourceHash.relationships.contactReasonTypeName.data.id;\n        delete resourceHash.relationships.contactReasonTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-eligibility\", [\"exports\", \"adept-iq/serializers/rider\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rider, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      isSoftDeleted: {\n        serialize: false\n      },\n      origEligCateName: {\n        serialize: false\n      },\n      origEligCondName: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.attributes) {\n        // startDate and endDate should be set to start and end of day.\n        const startDate = new Date(json.data.attributes.from);\n        const endDate = new Date(json.data.attributes.to);\n        startDate.setHours(0, 0, 0, 0);\n        endDate.setHours(23, 59, 59, 999);\n        json.data.attributes.from = startDate.toISOString();\n        json.data.attributes.to = endDate.toISOString();\n        json.data.type = 'riderEligibility';\n\n        if (!Ember.isNone(json.data.relationships)) {\n          const eligibilityCategoryRelationship = json.data.relationships.eligibilityCategory;\n          const eligibilityConditionRelationship = json.data.relationships.eligibilityCondition;\n\n          if (!Ember.isNone(eligibilityCategoryRelationship)) {\n            eligibilityCategoryRelationship.data.type = 'eligibilityCategoryName';\n            json.data.relationships.eligibilityCategoryName = json.data.relationships.eligibilityCategory;\n            delete json.data.relationships.eligibilityCategory;\n          }\n\n          if (!Ember.isNone(eligibilityConditionRelationship)) {\n            if (!Ember.isNone(eligibilityConditionRelationship.data)) {\n              eligibilityConditionRelationship.data.type = 'eligibilityConditionName';\n              json.data.relationships.eligibilityConditionName = json.data.relationships.eligibilityCondition;\n            } else {\n              json.data.relationships.eligibilityConditionName = {\n                data: null\n              };\n            }\n\n            delete json.data.relationships.eligibilityCondition;\n          }\n\n          const riderRelationship = json.data.relationships.rider;\n\n          if (!Ember.isNone(riderRelationship)) {\n            riderRelationship.data.type = 'rider';\n          }\n        }\n      }\n\n      return json;\n    },\n\n    payloadKeyFromModelName(modelName) {\n      return modelName;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.eligibilityCategoryName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.eligibilityCategory = {\n          data: {\n            type: 'eligibility-category',\n            id: resourceHash.relationships.eligibilityCategoryName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.eligibilityCategoryName;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.eligibilityConditionName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.eligibilityCondition = {\n          data: {\n            type: 'eligibility-condition',\n            id: resourceHash.relationships.eligibilityConditionName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.eligibilityConditionName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeResponse: function (store, primaryModelClass, payload) {\n      const riderSerializer = new _rider.default();\n\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.length)) {\n        for (let i = 0; i < payload.included.length; i++) {\n          const include = payload.included[i];\n\n          if (include.type === 'rider') {\n            riderSerializer.normalizeResponse(store, primaryModelClass, {\n              data: include\n            });\n          }\n\n          if (include.type === 'eligibilityCategory' || include.type === 'eligibilityCategoryName') {\n            include.type = 'eligibility-category';\n          }\n\n          if (include.type === 'eligibilityCondition' || include.type === 'eligibilityConditionName') {\n            include.type = 'eligibility-condition';\n          }\n        }\n      }\n\n      return payload;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-external-eligibility\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    JSONSerializer\n  } = _emberData.default;\n\n  var _default = JSONSerializer.extend({});\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-external\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    JSONSerializer\n  } = _emberData.default;\n\n  var _default = JSONSerializer.extend({\n    booking: Ember.inject.service(),\n\n    normalizeQueryResponse(store, primaryModelClass, payload, id, requestType) {\n      this.set('booking.hasMoreExternalRiders', payload.moreResults);\n      return this._super(store, primaryModelClass, payload.riders, id, requestType);\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.dateOfBirth)) {\n        resourceHash.dateOfBirth = (0, _moment.default)(resourceHash.dateOfBirth).format();\n      } // coming from rider-external, it uses passCode and passcode from regular GET\n\n\n      if (!Ember.isNone(resourceHash.passCode)) {\n        resourceHash.passcode = resourceHash.passCode;\n        delete resourceHash.passCode;\n      } // force passCode to be consistent is null or ''\n\n\n      if (Ember.isNone(resourceHash.passcode)) {\n        resourceHash.passcode = '';\n      } //NYAAR-19120:Set seviceNeeds as empty array if serviceNeeds is null\n\n\n      if (Ember.isNone(resourceHash.serviceNeeds)) {\n        resourceHash.serviceNeeds = [];\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-funding\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      fundingAgency: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const attributes = json.data.attributes;\n      const relationships = json.data.relationships;\n      const fundingAgencyName = Ember.isPresent(attributes) ? attributes.fundingAgencyName : null;\n\n      if (Ember.isPresent(fundingAgencyName)) {\n        if (Ember.isPresent(relationships)) {\n          relationships.fundingAgencyName = {\n            data: {\n              id: fundingAgencyName,\n              type: 'fundingAgencyName'\n            }\n          };\n        }\n\n        delete attributes.fundingAgencyName;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.fundingAgencyName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.fundingAgency = {\n          data: {\n            type: 'funding-agency',\n            id: relationships.fundingAgencyName.data.id\n          }\n        };\n        resourceHash.attributes.fundingAgencyName = relationships.fundingAgencyName.data.id;\n        resourceHash.relationships = relationships;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-phone-number\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      isSoftDeleted: {\n        serialize: false\n      }\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-place-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'rider-place-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-place\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      name: {\n        serialize: false\n      },\n      isSoftDeleted: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (!Ember.isNone(json.data.relationships)) {\n        const riderPlaceTypeRelationship = json.data.relationships.riderPlaceType;\n\n        if (!Ember.isNone(riderPlaceTypeRelationship)) {\n          riderPlaceTypeRelationship.data.type = 'riderPlaceTypeName';\n          json.data.relationships.riderPlaceTypeName = json.data.relationships.riderPlaceType;\n          delete json.data.relationships.riderPlaceType;\n        }\n      }\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (resourceHash.relationships) {\n        if (!Ember.isNone(resourceHash.relationships.riderPlaceTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.riderPlaceType = {\n            data: {\n              type: 'rider-place-type',\n              id: resourceHash.relationships.riderPlaceTypeName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.riderPlaceTypeName;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-service-need\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      isSoftDeleted: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (!Ember.isNone(json.data.relationships)) {\n        const serviceNeedTypeNameRelationship = json.data.relationships.serviceNeedType;\n\n        if (!Ember.isNone(serviceNeedTypeNameRelationship) && !Ember.isNone(serviceNeedTypeNameRelationship.data)) {\n          serviceNeedTypeNameRelationship.data.type = 'serviceNeedTypeName';\n          json.data.relationships.serviceNeedTypeName = json.data.relationships.serviceNeedType;\n          delete json.data.relationships.serviceNeedType;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.serviceNeedTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.serviceNeedType = {\n          data: {\n            type: 'service-need-type',\n            id: resourceHash.relationships.serviceNeedTypeName.data.id\n          }\n        };\n        delete resourceHash.relationships.serviceNeedTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-suspension\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\"], function (_exports, _rmsRiderManagement) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider-travel-need\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\", \"adept-iq/serializers/rider\"], function (_exports, _rmsRiderManagement, _rider) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      json.data.type = 'riderTravelNeed';\n\n      if (!Ember.isNone(json.data.relationships)) {\n        const riderRelationship = json.data.relationships.rider;\n\n        if (!Ember.isNone(riderRelationship)) {\n          riderRelationship.data.type = 'rider';\n        }\n\n        const travelNeedTypeRelationship = json.data.relationships.travelNeedType;\n\n        if (!Ember.isNone(travelNeedTypeRelationship)) {\n          travelNeedTypeRelationship.data.type = 'travelNeedTypeName';\n          json.data.relationships.travelNeedTypeName = json.data.relationships.travelNeedType;\n          delete json.data.relationships.travelNeedType;\n        }\n\n        const passengerTypeRelationship = json.data.relationships.passengerType;\n\n        if (!Ember.isNone(passengerTypeRelationship)) {\n          passengerTypeRelationship.data.type = 'passengerTypeName';\n          json.data.relationships.passengerTypeName = json.data.relationships.passengerType;\n          delete json.data.relationships.passengerType;\n        }\n      }\n\n      return json;\n    },\n\n    payloadKeyFromModelName(modelName) {\n      return modelName;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (resourceHash && resourceHash.relationships && !Ember.isNone(resourceHash.relationships.travelNeedTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.travelNeedType = {\n          data: {\n            type: 'travel-need-type',\n            id: resourceHash.relationships.travelNeedTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.travelNeedTypeName;\n      }\n\n      if (resourceHash && resourceHash.relationships && !Ember.isNone(resourceHash.relationships.passengerTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.passengerType = {\n          data: {\n            type: 'passenger-type',\n            id: resourceHash.relationships.passengerTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.passengerTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeResponse: function (store, primaryModelClass, payload) {\n      const riderSerializer = new _rider.default();\n      const data = Ember.makeArray(payload.data);\n\n      for (let i = 0; i < data.length; i++) {\n        data[i].type = 'rider-travel-need';\n\n        if (!Ember.isNone(data[i].relationships.rider) && !Ember.isNone(data[i].relationships.rider.data)) {\n          data[i].relationships.rider.data.type = 'rider';\n        }\n\n        if (!Ember.isNone(data[i].relationships.travelNeedTypeName.data)) {\n          data[i].relationships.travelNeedType = data[i].relationships.travelNeedTypeName;\n          data[i].relationships.travelNeedType.data.type = 'travel-need-type';\n          delete data[i].relationships.travelNeedTypeName;\n        }\n\n        if (!Ember.isNone(data[i].relationships.passengerTypeName.data)) {\n          data[i].relationships.passengerType = data[i].relationships.passengerTypeName;\n          data[i].relationships.passengerType.data.type = 'passenger-type';\n          delete data[i].relationships.passengerTypeName;\n        }\n      }\n\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.length)) {\n        for (let i = 0; i < payload.included.length; i++) {\n          const include = payload.included[i];\n\n          if (include.type === 'rider') {\n            riderSerializer.normalizeResponse(store, primaryModelClass, {\n              data: include\n            });\n          }\n\n          if (include.type === 'travelNeedTypeName') {\n            include.type = 'travel-need-type';\n          }\n\n          if (include.type === 'passengerTypeName') {\n            include.type = 'passenger-type';\n          }\n        }\n      }\n\n      return payload;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/rider\", [\"exports\", \"adept-iq/serializers/-rms-riderManagement\", \"moment\"], function (_exports, _rmsRiderManagement, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _rmsRiderManagement.default.extend({\n    attrs: {\n      externalId: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (!Ember.isNone(json.data.attributes.dateOfBirth)) {\n        json.data.attributes.dateOfBirth = (0, _moment.default)(json.data.attributes.dateOfBirth).format('YYYY-MM-DD');\n      }\n\n      if (Ember.isEmpty(json.data.attributes.phoneNotification)) {\n        delete json.data.attributes.phoneNotification;\n      }\n\n      if (Ember.isEmpty(json.data.attributes.emailNotification)) {\n        delete json.data.attributes.emailNotification;\n      }\n\n      if (Ember.isEmpty(json.data.attributes.smsNotification)) {\n        delete json.data.attributes.smsNotification;\n      }\n\n      if (Ember.isNone(json.data.attributes.smsNotificationConsent)) {\n        delete json.data.attributes.smsNotificationConsent;\n      }\n\n      if (!Ember.isNone(json.data.relationships)) {\n        const fareCategoryRelationship = json.data.relationships.fareCategory;\n\n        if (!Ember.isNone(fareCategoryRelationship)) {\n          fareCategoryRelationship.data.type = 'fareCategoryName';\n          json.data.relationships.fareCategoryName = json.data.relationships.fareCategory;\n          delete json.data.relationships.fareCategory;\n        }\n      }\n\n      return json;\n    },\n\n    decodeAsciiToStr(asciiCodes) {\n      // Convert to string in chunks to avoid stack overflows\n      const CHUNK_SIZE = 8192;\n      let str = '';\n\n      for (let i = 0; i < asciiCodes.length; i += CHUNK_SIZE) {\n        const chunk = asciiCodes.slice(i, i + CHUNK_SIZE);\n        str += String.fromCharCode(...chunk);\n      }\n\n      return str;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.thumbnail)) {\n        // convert to the format we saved it because endpoint changes it to a different format from database\n        const thumbnail = resourceHash.attributes.thumbnail;\n        const data = thumbnail ? this.decodeAsciiToStr(thumbnail.data) : null;\n        resourceHash.attributes.thumbnail = data;\n      }\n\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.dateOfBirth)) {\n        resourceHash.attributes.dateOfBirth = (0, _moment.default)(resourceHash.attributes.dateOfBirth).format();\n      }\n\n      if (!Ember.isNone(resourceHash.attributes) && Ember.isNone(resourceHash.attributes.smsNotificationConsent)) {\n        resourceHash.attributes.smsNotificationConsent = null;\n      }\n\n      if (resourceHash.relationships && resourceHash.relationships.phoneNumbers) {\n        resourceHash.relationships.riderPhoneNumbers = resourceHash.relationships.phoneNumbers;\n        delete resourceHash.relationships.phoneNumbers;\n      }\n\n      if (resourceHash.relationships && resourceHash.relationships.eligibilities) {\n        resourceHash.relationships.riderEligibilities = resourceHash.relationships.eligibilities;\n        delete resourceHash.relationships.eligibilities;\n      }\n\n      if (resourceHash.relationships && resourceHash.relationships.suspensions) {\n        resourceHash.relationships.riderSuspensions = resourceHash.relationships.suspensions;\n        delete resourceHash.relationships.suspensions;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.fareCategoryName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.fareCategory = {\n          data: {\n            type: 'fare-category',\n            id: resourceHash.relationships.fareCategoryName.data.id\n          }\n        };\n        delete resourceHash.relationships.fareCategoryName;\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalizeResponse(store, primaryModelClass, payload) {\n      // convert these types name because of changes to api services\n      // names.\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.length)) {\n        payload.included = payload.included.filter(hash => hash.type !== 'fundingAgencyName');\n\n        for (let i = 0; i < payload.included.length; i++) {\n          const include = payload.included[i];\n\n          if (include.type === 'travelNeedTypeName') {\n            include.type = 'travelNeedType';\n          }\n\n          if (include.type === 'passengerTypeName') {\n            include.type = 'passengerType';\n          }\n\n          if (include.type === 'eligibilityCategoryName') {\n            include.type = 'eligibilityCategory';\n          }\n\n          if (include.type === 'riderPlaceTypeName') {\n            include.type = 'riderPlaceType';\n          }\n\n          if (include.type === 'riderContactInfo') {\n            if (include.attributes.contactType) {\n              include.attributes.contactType = include.attributes.contactType.name;\n            }\n          }\n\n          if (include.type === 'fareCategory' || include.type === 'fareCategoryName' || include.type === 'cs-fare-category') {\n            include.type = 'fare-category';\n          }\n\n          if (include.type === 'serviceNeedTypeName') {\n            include.type = 'serviceNeedType';\n          }\n        }\n      }\n\n      this._super(...arguments); // future refactore required to bring config naming consistent to the convention.\n      // re-transformation needed, after line above fareCategory becomes cs-fare-category, so the following is needed\n      // to transform the type back to fare-category\n\n\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.length)) {\n        for (let i = 0; i < payload.included.length; i++) {\n          const include = payload.included[i];\n\n          if (include.type === 'fareCategory' || include.type === 'fareCategoryName' || include.type === 'cs-fare-category') {\n            include.type = 'fare-category';\n          }\n\n          if (include.type === 'cs-service-need-type') {\n            include.type = 'service-need-type';\n          }\n        }\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/road-call-code-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'road-call-code-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/role-permission\", [\"exports\", \"adept-iq/serializers/-reconciliationService\"], function (_exports, _reconciliationService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _reconciliationService.default.extend({\n    normalize(modelClass, resourceHash) {\n      if (resourceHash.attributes) {\n        if (!Ember.isNone(resourceHash.attributes.roleId)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.permSsoRole = {\n            data: {\n              type: 'perm-sso-role',\n              id: resourceHash.attributes.roleId\n            }\n          };\n          resourceHash.relationships = relationships;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    pushPayloads(store, item) {\n      if (!Ember.isEmpty(item)) {\n        store.pushPayload({\n          data: {\n            id: item.id,\n            type: 'role-permission',\n            attributes: {\n              permissionId: item.permissionId,\n              roleId: item.roleId,\n              category: item.Permission.category\n            }\n          }\n        });\n      }\n    },\n\n    normalizeQueryResponse(store, clazz, payload) {\n      // workaround for this API not returns payload type\n      const currentPayload = {\n        data: []\n      };\n      const data = payload.length ? payload : [payload];\n\n      for (let i = 0; i < data.length; i++) {\n        currentPayload.data.push({\n          id: data[i].id,\n          type: 'role-permission',\n          roleId: data[i].roleId,\n          permissionId: data[i].permissionId\n        });\n        this.pushPayloads(store, data[i]);\n      }\n\n      return this._super(store, clazz, currentPayload);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route-activity-log-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'route-activity-log-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route-break\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    attrs: {\n      type: {\n        serialize: false\n      },\n      scheduleOrdinal: {\n        serialize: false\n      },\n      actualArriveTime: {\n        serialize: false\n      },\n      actualDepartTime: {\n        serialize: false\n      },\n      arriveLat: {\n        serialize: false\n      },\n      arriveLng: {\n        serialize: false\n      },\n      perform: {\n        serialize: false\n      },\n      arrivePerformedBy: {\n        serialize: false\n      },\n      arriveStatus: {\n        serialize: false\n      },\n      departLat: {\n        serialize: false\n      },\n      departLng: {\n        serialize: false\n      },\n      departPerformedBy: {\n        serialize: false\n      },\n      isRemoved: {\n        serialize: false\n      },\n      odometer: {\n        serialize: false\n      },\n      otp: {\n        serialize: false\n      },\n      otpValue: {\n        serialize: false\n      },\n      plannedSlackTime: {\n        serialize: false\n      },\n      scheduleStopStatus: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (Ember.isPresent(json.data.attributes.plannedDurationSeconds)) {\n        json.data.attributes.plannedDuration = json.data.attributes.plannedDurationSeconds;\n        delete json.data.attributes.plannedDurationSeconds;\n      }\n\n      const {\n        breakType,\n        stopPoint\n      } = json.data.relationships;\n      breakType.data.type = 'breakTypeName';\n      json.data.relationships.breakTypeName = breakType;\n      delete json.data.relationships.breakType;\n\n      if (Ember.isPresent(stopPoint)) {\n        delete json.data.relationships.stopPoint;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (Ember.isPresent(resourceHash.attributes)) {\n        if (Ember.isPresent(resourceHash.attributes.breakTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.breakType = {\n            data: {\n              type: 'break-type',\n              id: resourceHash.attributes.breakTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.breakTypeName;\n        }\n\n        if (Ember.isPresent(resourceHash.attributes.plannedDuration)) {\n          resourceHash.attributes.plannedDuration = Math.floor(resourceHash.attributes.plannedDuration / 60);\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {}; // TODO: store stop-point correctly.\n\n      if (Ember.isPresent(payload.data.attributes.provider)) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: payload.data.attributes.provider\n          }\n        };\n        delete payload.data.attributes.provider;\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route-exec-event\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _avlmAvlmService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route-template-availability\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\", \"moment\"], function (_exports, _ssSchedulingService, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const refTime = (0, _moment.default)(0).startOf('day');\n\n  var _default = _ssSchedulingService.default.extend({\n    attrs: {\n      calcEndDate: {\n        serialize: false\n      },\n      DOWSelected: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data.attributes.tripLimit) {\n        delete json.data.attributes.tripLimit;\n      }\n\n      if (json.data.attributes.routeLength) {\n        delete json.data.attributes.routeLength;\n      }\n\n      if (json.data && json.data.relationships && json.data.relationships.driver) {\n        if (json.data.relationships.driver.data === null) {\n          json.data.relationships.driver = {\n            data: {\n              type: 'driver',\n              id: 'deleted'\n            }\n          };\n        }\n      }\n\n      const {\n        shiftStart,\n        shiftEnd\n      } = json.data.attributes;\n      const momentShiftStart = (0, _moment.default)(shiftStart).startOf('minute');\n      const momentShiftEnd = (0, _moment.default)(shiftEnd).startOf('minute');\n      const diffStart = Math.abs(momentShiftStart.diff(momentShiftStart.clone().startOf('day')));\n\n      const durationStart = _moment.default.duration(diffStart);\n\n      const formattedShiftStart = refTime.clone().add(durationStart);\n      const diffEnd = Math.abs(momentShiftEnd.diff(momentShiftStart.clone().startOf('day')));\n\n      const durationEnd = _moment.default.duration(diffEnd);\n\n      const formattedShiftEnd = refTime.clone().add(durationEnd);\n      json.data.attributes.shiftStart = formattedShiftStart;\n      json.data.attributes.shiftEnd = formattedShiftEnd;\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n      const {\n        shiftStart,\n        shiftEnd,\n        startTime\n      } = resourceHash.attributes;\n\n      if (shiftStart && shiftEnd) {\n        const startMoment = (0, _moment.default)(`${shiftStart}`);\n        const endMoment = (0, _moment.default)(`${shiftEnd}`);\n        const diff = Math.abs(startMoment.diff(endMoment));\n\n        const duration = _moment.default.duration(diff);\n\n        const hours = Math.floor(duration.asHours());\n        const formattedHours = hours < 10 ? `0${hours}` : hours;\n\n        const routeLength = formattedHours + _moment.default.utc(diff).format(':mm');\n\n        resourceHash.attributes.routeLength = routeLength;\n      }\n\n      if (startTime && resourceHash.attributes.routeLength) {\n        const clone = (0, _moment.default)(shiftStart);\n        const routeLength = resourceHash.attributes.routeLength.split(':');\n        clone.add(routeLength[0], 'hours');\n        clone.add(routeLength[1], 'minutes');\n        resourceHash.attributes.calcEndDate = clone.toISOString();\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route-template\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route-vehicle-driver\", [\"exports\", \"adept-iq/serializers/-dispatch\", \"lodash\"], function (_exports, _dispatch, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalize(modelClass, resourceHash) {\n      const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n\n      if (!Ember.isNone(relationships) && Ember.isNone(relationships.vehicle)) {\n        relationships.vehicle = {\n          data: null\n        };\n      }\n\n      if (!Ember.isNone(relationships) && Ember.isNone(relationships.driver)) {\n        relationships.driver = {\n          data: null\n        };\n      }\n\n      resourceHash.relationships = relationships;\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    serialize(snapshot\n    /*, options*/\n    ) {\n      const json = this._super(...arguments);\n\n      const dispatchRouteRelationship = _lodash.default.get(json, 'data.relationships.dispatchRoute.data', {});\n\n      if (!_lodash.default.isEmpty(dispatchRouteRelationship)) {\n        const dispatchRouteIncluded = _lodash.default.cloneDeep(dispatchRouteRelationship);\n\n        json.included = [];\n        dispatchRouteIncluded.attributes = {\n          version: snapshot.record.dispatchRoute.get('latestRouteVehicleDriver.dispatchRouteVersion')\n        };\n        json.included.push(dispatchRouteIncluded);\n      }\n\n      return json;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/route\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\", \"moment\"], function (_exports, _ssSchedulingService, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    attrs: {\n      otp: {\n        serialize: false\n      },\n      otpValue: {\n        serialize: false\n      },\n      odometer: {\n        serialize: false\n      },\n      actualStartTimestamp: {\n        serialize: false\n      },\n      actualEndTimestamp: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments); // because we modify status coming in from route-exec-event\n      // scheduling service only accepts normal or breakdown\n      // we don't want to PATCH/PUT the status. This is controlled by\n      // the service\n      // we don't want to PATCH the isAdjusted.\n\n\n      if (json.data.id && json.data.attributes) {\n        delete json.data.attributes.status;\n        delete json.data.attributes.isAdjusted;\n        delete json.data.attributes.hasRouteTemplateAdjusted;\n        delete json.data.attributes.hasRouteTemplateConsolidated;\n        delete json.data.attributes.isDriverBreakRemoved;\n      } // affinites must be converted into numbers to be valid\n      // safest conversion is using JSON.parsed for \"[1,2,3]\" -> [1,2,3]\n\n\n      if (json.data.attributes.affinities) {\n        json.data.attributes.affinities = JSON.parse(json.data.attributes.affinities);\n      }\n\n      if (json.data && json.data.relationships) {\n        delete json.data.relationships.dispatchRoute;\n        delete json.data.relationships.provider;\n        delete json.data.relationships.etaRoute;\n        delete json.data.relationships.navigationPolyline;\n        delete json.data.relationships.scheduledPolyline;\n\n        if (json.data.relationships.driver && json.data.relationships.driver.data === null) {\n          json.data.relationships.driver = {\n            type: 'driver',\n            id: 'deleted'\n          };\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.providerName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: resourceHash.relationships.providerName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n      }\n\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.providerName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: resourceHash.attributes.providerName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.providerName;\n      }\n\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.routeTemplateId)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.routeTemplate = {\n          data: {\n            type: 'route-template',\n            id: resourceHash.attributes.routeTemplateId\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.routeTemplateId;\n      }\n\n      if (!Ember.isNone(resourceHash.attributes)) {\n        const {\n          plannedStartTime,\n          plannedEndTime,\n          plannedStartDateTime,\n          plannedEndDateTime\n        } = resourceHash.attributes;\n\n        if (plannedStartTime && plannedStartDateTime && !_moment.default.utc(plannedStartTime).isValid()) {\n          resourceHash.attributes.plannedStartTime = plannedStartDateTime;\n        }\n\n        if (plannedEndTime && plannedEndDateTime && !_moment.default.utc(plannedEndTime).isValid()) {\n          resourceHash.attributes.plannedEndTime = plannedEndDateTime;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n      payload.data.relationships = relationships; // TODO: we need to store navigation polyline from widgetRecord\n\n      if (Ember.isPresent(payload.data.attributes.lock)) {\n        const scheduleRouteLock = {\n          type: 'lock',\n          id: payload.data.id,\n          attributes: {\n            entityType: 'route',\n            entityId: payload.data.id,\n            timeToLive: payload.data.attributes.lock.ttl,\n            expirationTime: payload.data.attributes.lock.expiredAt,\n            status: 'locked',\n            persist: payload.data.attributes.lock.persist\n          },\n          relationships: {\n            route: {\n              data: {\n                type: 'route',\n                id: payload.data.id\n              }\n            },\n            owner: {\n              data: {\n                type: 'sso-user',\n                id: payload.data.attributes.lock.user\n              }\n            }\n          }\n        };\n        relationships.scheduleRouteLock = {\n          data: {\n            type: 'lock',\n            id: payload.data.id\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(scheduleRouteLock);\n      } else if (Ember.isPresent(payload.data.attributes.isLocked) && !payload.data.attributes.isLocked) {\n        const scheduleRouteLock = {\n          type: 'lock',\n          id: payload.data.id,\n          attributes: {\n            entityType: 'route',\n            entityId: payload.data.id,\n            status: 'unlocked'\n          },\n          relationships: {\n            route: {\n              data: {\n                type: 'route',\n                id: payload.data.id\n              }\n            }\n          }\n        };\n        relationships.scheduleRouteLock = {\n          data: {\n            type: 'lock',\n            id: payload.data.id\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(scheduleRouteLock);\n      }\n\n      return payload;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'findRecord') {\n        const relationships = payload.data.relationships ? payload.data.relationships : {};\n\n        if (!Ember.isNone(relationships) && Ember.isNone(relationships.trips)) {\n          relationships.trips = {\n            data: []\n          };\n          payload.data.relationships = relationships;\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/schedule-configuration\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'schedule-configuration'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/schedule\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\", \"lodash\"], function (_exports, _ssSchedulingService, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    attrs: {\n      engineDatasetId: {\n        serialize: false\n      },\n      type: {\n        serialize: false\n      },\n      status: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      json.data.relationships = json.data.relationships || {};\n\n      if (json.data && json.data.relationships.scheduleConfiguration) {\n        json.data.relationships.scheduleConfigurationName = (0, _lodash.cloneDeep)(json.data.relationships.scheduleConfiguration);\n        json.data.relationships.scheduleConfigurationName.data.type = 'scheduleConfigurationName';\n        delete json.data.relationships.scheduleConfiguration;\n      }\n\n      if (json.data && json.data.relationships) {\n        delete json.data.relationships.metric;\n        delete json.data.relationships.dispatchSchedule;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.scheduleConfigurationName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.scheduleConfigurationName = {\n          data: {\n            type: 'scheduleConfigurationName',\n            id: resourceHash.attributes.scheduleConfigurationName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.scheduleConfigurationName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/segment-stop-phone-number\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    attrs: {\n      useForSmsNotifications: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/segment-stop\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    attrs: {\n      onboardCount: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const relationships = json.data.relationships;\n\n      if (Ember.isPresent(relationships)) {\n        const tripStopRelationship = relationships.tripStop;\n        const pickSegmentRelationship = relationships.pickSegment;\n        const dropSegmentRelationship = relationships.dropSegment;\n\n        if (Ember.isPresent(tripStopRelationship)) {\n          delete json.data.relationships.tripStop;\n        }\n\n        if (Ember.isPresent(pickSegmentRelationship)) {\n          delete json.data.relationships.pickSegment;\n        }\n\n        if (Ember.isPresent(dropSegmentRelationship)) {\n          delete json.data.relationships.dropSegment;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships) && !Ember.isNone(resourceHash.relationships.segmentStopPhoneNumbers)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.phoneNumbers = resourceHash.relationships.segmentStopPhoneNumbers;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/segment\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const fareTypeRelationship = json.data.relationships.fareType || {};\n\n      if (!Ember.isNone(fareTypeRelationship) && !Ember.isNone(fareTypeRelationship.data)) {\n        fareTypeRelationship.data.type = 'fareTypeName';\n        json.data.relationships.fareTypeName = json.data.relationships.fareType;\n      }\n\n      if (!Ember.isNone(fareTypeRelationship)) {\n        delete json.data.relationships.fareType;\n      }\n\n      const fareCategoryRelationship = json.data.relationships.fareCategory || {};\n\n      if (!Ember.isNone(fareCategoryRelationship)) {\n        if (!Ember.isNone(fareCategoryRelationship.data)) {\n          fareCategoryRelationship.data.type = 'fareCategoryName';\n          json.data.relationships.fareCategoryName = json.data.relationships.fareCategory;\n        }\n\n        delete json.data.relationships.fareCategory;\n      }\n\n      if (!Ember.isNone(json.data.attributes)) {\n        const noSharing = json.data.attributes.noSharing;\n        const segmentType = json.data.attributes.segmentType;\n        const fare = json.data.attributes.fare;\n        json.data.attributes.noSharing = noSharing ? noSharing : 0;\n        json.data.attributes.segmentType = segmentType ? segmentType : 0;\n        json.data.attributes.fare = fare ? Math.round(fare * 1000) / 1000 : 0;\n        delete json.data.attributes.tripMinDate;\n        delete json.data.attributes.tripMaxDate;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships)) {\n        if (!Ember.isNone(resourceHash.relationships.fareTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.fareType = {\n            data: {\n              type: 'fare-type',\n              id: resourceHash.relationships.fareTypeName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.fareTypeName;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.fareCategoryName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.fareCategory = {\n            data: {\n              type: 'fare-category',\n              id: resourceHash.relationships.fareCategoryName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.fareCategoryName;\n        }\n      }\n\n      if (!Ember.isNone(resourceHash.attributes) && !Ember.isNone(resourceHash.attributes.fareTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.fareType = {\n          data: {\n            type: 'fare-type',\n            id: resourceHash.attributes.fareTypeName\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.attributes.fareTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload) {\n      // convert these types name because of changes to api services\n      // names.\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.length)) {\n        for (let i = 0; i < payload.included.length; i++) {\n          const include = payload.included[i];\n\n          if (include.type === 'fareCategory' || include.type === 'fareCategoryName' || include.type === 'cs-fare-category') {\n            include.type = 'fare-category';\n          }\n        }\n      }\n\n      this._super(...arguments);\n\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.length)) {\n        for (let i = 0; i < payload.included.length; i++) {\n          const include = payload.included[i];\n\n          if (include.type === 'fareCategory' || include.type === 'fareCategoryName' || include.type === 'cs-fare-category') {\n            include.type = 'fare-category';\n          }\n        }\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/service-need-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'service-need-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/service-window\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'service-window'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/shift-break\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\", \"adept-iq/utils/convertDateTime\"], function (_exports, _ssSchedulingService, _convertDateTime) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const breakTypeRelationship = json.data.relationships.breakType || {};\n\n      if (!Ember.isNone(breakTypeRelationship) && !Ember.isNone(breakTypeRelationship.data)) {\n        breakTypeRelationship.data.type = 'breakTypeName';\n        json.data.relationships.breakTypeName = json.data.relationships.breakType;\n        delete json.data.relationships.breakType;\n      }\n\n      if (json.data.attributes.requestTime) {\n        json.data.attributes.requestTime = (0, _convertDateTime.convertTo33Hour)(json.data.attributes.requestTime);\n        json.data.attributes.promisedStart = json.data.attributes.requestTime;\n        delete json.data.attributes.requestTimestamp;\n      }\n\n      if (json.data.attributes.minutesPlannedDuration) {\n        json.data.attributes.plannedDuration = json.data.attributes.minutesPlannedDuration * 60;\n        delete json.data.attributes.minutesPlannedDuration;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n      const {\n        plannedDuration,\n        requestTime\n      } = resourceHash.attributes;\n      const {\n        breakTypeName\n      } = resourceHash.relationships;\n\n      if (requestTime) {\n        const requestTimestamp = (0, _convertDateTime.convert33HourToDateTime)(requestTime);\n        resourceHash.attributes.requestTime = requestTimestamp;\n      }\n\n      if (plannedDuration) {\n        const minutesPlannedDuration = Math.floor(plannedDuration / 60); // convert to minutes\n\n        resourceHash.attributes.minutesPlannedDuration = minutesPlannedDuration;\n      }\n\n      if (breakTypeName) {\n        delete resourceHash.relationships.breakTypeName;\n        resourceHash.relationships.breakType = {\n          data: {\n            type: 'break-type',\n            id: breakTypeName.data.id\n          }\n        };\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/speed-region-group\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'speed-region-group'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/ss-service-window\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/sso-permission\", [\"exports\", \"adept-iq/serializers/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function createPermissionPayload(permission) {\n    return {\n      data: {\n        attributes: {\n          category: permission.category,\n          description: permission.description\n        },\n        type: 'sso-permission',\n        id: ''\n      }\n    };\n  }\n\n  var _default = _ssoSsoService.default.extend({\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      // sso endpoint is not JSON-API compliant\n      if (Ember.isArray(payload)) {\n        // eslint-disable-next-line no-param-reassign\n        const payloads = payload.map(pay => {\n          return {\n            attributes: {\n              category: pay.category,\n              description: pay.description\n            },\n            type: 'sso-permission',\n            id: pay.id\n          };\n        }); // eslint-disable-next-line no-param-reassign\n\n        payload = {\n          data: payloads\n        };\n      } else if (!payload.hasOwnProperty('jsonapi')) {\n        // single record returns as a POJO for editing a user's status or role\n        const permissionPayload = createPermissionPayload(payload);\n        permissionPayload.data.id = payload.id; // eslint-disable-next-line no-param-reassign\n\n        payload = permissionPayload;\n      }\n\n      return this._super(store, primaryModelClass, payload, id, requestType);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/sso-role\", [\"exports\", \"adept-iq/serializers/-sso-ssoService\"], function (_exports, _ssoSsoService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssoSsoService.default.extend({\n    attrs: {\n      permissions: {\n        serialize: false\n      }\n    },\n\n    serialize(snapshot) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options.includeId = true;\n\n      const json = this._super(snapshot, options);\n\n      return json;\n    },\n\n    normalizeResponse: function (store, primaryModelClass, payload) {\n      const currentPayload = {\n        data: []\n      };\n      const data = payload.length ? payload : [payload];\n\n      for (let i = 0; i < data.length; i++) {\n        currentPayload.data.push({\n          id: data[i].roleName,\n          type: 'sso-role',\n          attributes: data[i]\n        });\n      }\n\n      return currentPayload;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/sso-user\", [\"exports\", \"adept-iq/serializers/-sso-ssoService\", \"lodash\"], function (_exports, _ssoSsoService, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssoSsoService.default.extend({\n    serialize(snapshot) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      options.includeId = true;\n\n      const json = this._super(snapshot, options);\n\n      if (json.data && json.data.attributes) {\n        const roles = _lodash.default.map(json.data.attributes.roleNames, role => {\n          return role.roleName;\n        });\n\n        return {\n          displayName: json.data.attributes.displayName,\n          email: json.data.attributes.email,\n          status: json.data.attributes.status,\n          roles: roles\n        };\n      }\n\n      return {\n        displayName: '',\n        email: '',\n        status: '',\n        roles: ''\n      };\n    },\n\n    /*eslint-disable */\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      // sso endpoint is not JSON-API compliant\n      if (Ember.isArray(payload)) {\n        payload = {\n          data: payload\n        };\n      } else if (!payload.hasOwnProperty('jsonapi')) {\n        const passwordUpdatedAt = payload.basicLogin && payload.basicLogin[0] && payload.basicLogin[0].passwordUpdatedAt; // single record returns as a POJO for editing a user's status or role\n\n        const userPayload = {\n          data: {\n            attributes: {\n              email: payload.email,\n              firstName: payload.firstName,\n              lastName: payload.lastName,\n              status: payload.status,\n              roleNames: [],\n              passwordUpdatedAt: passwordUpdatedAt\n            },\n            type: 'sso-user',\n            id: ''\n          }\n        };\n\n        const roles = _lodash.default.map(payload.UserRoleRoles, role => {\n          return {\n            roleName: role.roleName,\n            displayName: role.displayName\n          };\n        });\n\n        userPayload.data.attributes.roleNames = roles;\n        userPayload.data.id = payload.userId;\n        payload = userPayload;\n      }\n\n      return this._super(store, primaryModelClass, payload, id, requestType);\n    },\n\n    /*eslint-enable */\n    normalize(modelClass, resourceHash) {\n      // reconciles difference between streaming API and app model\n      const {\n        roleNames\n      } = resourceHash.attributes;\n\n      if (roleNames) {\n        resourceHash.attributes.roleNames = roleNames.map(item => {\n          if (typeof item === 'object') return item;\n          return {\n            roleName: item.toString(),\n            displayName: Ember.String.capitalize(item.toString())\n          };\n        });\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/stop-point\", [\"exports\", \"adept-iq/serializers/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalize(modelClass, resourceHash) {\n      const relationships = resourceHash.relationships || {}; // If stopPoint having place relationship then this is a waypoint\n\n      if (relationships.place) {\n        relationships.waypointPlace = relationships.place;\n        delete relationships.place;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      if (normalized.data.attributes.parentType === 'break') {\n        normalized.data.attributes.stopType = 'break';\n      }\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n\n      if (Ember.isPresent(payload.data.attributes.polyline)) {\n        const polyline = {\n          type: 'polyline',\n          id: `${payload.data.attributes.routeId}-${payload.data.attributes.id}`,\n          attributes: {\n            coords: payload.data.attributes.polyline\n          },\n          relationships: {\n            route: {\n              data: {\n                type: 'route',\n                id: payload.data.attributes.routeId\n              }\n            },\n            stopPoint: {\n              data: {\n                type: 'stopPoint',\n                id: payload.data.attributes.id\n              }\n            }\n          }\n        };\n        payload.included = payload.included || [];\n        payload.included.push(polyline);\n      }\n\n      if (Ember.isPresent(payload.data.attributes.provider)) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: payload.data.attributes.provider\n          }\n        };\n        delete payload.data.attributes.provider;\n      }\n\n      if (Ember.isPresent(payload.data.attributes.stopType) && Ember.isPresent(payload.data.attributes.routeId)) {\n        const stopType = payload.data.attributes.stopType;\n\n        if (stopType === 'pullinGarage' || stopType === 'pulloutGarage') {\n          relationships.stopRoute = {\n            data: {\n              type: 'route',\n              id: payload.data.attributes.routeId\n            }\n          };\n        }\n      }\n\n      payload.data.attributes.actualArriveLat = payload.data.attributes.actualArriveLat || null;\n      payload.data.attributes.actualArriveLng = payload.data.attributes.actualArriveLng || null;\n      payload.data.attributes.actualDepartLat = payload.data.attributes.actualDepartLat || null;\n      payload.data.attributes.actualDepartLng = payload.data.attributes.actualDepartLng || null;\n      payload.data.attributes.routeOrdinal = payload.data.attributes.ordinal;\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-activity-log-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'subscription-activity-log-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-exclusion\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    attrs: {\n      suspend: {\n        serialize: false\n      }\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-group\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-phone-number\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    attrs: {\n      useForSmsNotifications: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-recurrence-pattern\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    attrs: {\n      everyweekday: {\n        serialize: false\n      },\n      pattern: {\n        serialize: false\n      },\n      recurring: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-service-need\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const serviceNeedTypeNameRelationship = json.data.relationships.serviceNeedType;\n\n      if (!Ember.isNone(serviceNeedTypeNameRelationship) && !Ember.isNone(serviceNeedTypeNameRelationship.data)) {\n        serviceNeedTypeNameRelationship.data.type = 'serviceNeedTypeName';\n        json.data.relationships.serviceNeedTypeName = json.data.relationships.serviceNeedType;\n        delete json.data.relationships.serviceNeedType;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.relationships.serviceNeedTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.serviceNeedType = {\n          data: {\n            type: 'service-need-type',\n            id: resourceHash.relationships.serviceNeedTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.serviceNeedTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription-travel-need\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments); // json.data.type = 'riderTravelNeed';\n\n\n      if (json.data && json.data.attributes) {\n        delete json.data.attributes.travelNeedTypeName;\n        delete json.data.attributes.passengerTypeName;\n      }\n\n      if (json.data && json.data.relationships) {\n        const travelNeedTypeRelationship = json.data.relationships.travelNeedType;\n\n        if (!Ember.isNone(travelNeedTypeRelationship)) {\n          travelNeedTypeRelationship.data.type = 'travelNeedTypeName';\n          json.data.relationships.travelNeedTypeName = json.data.relationships.travelNeedType;\n          delete json.data.relationships.travelNeedType;\n        }\n\n        const passengerTypeRelationship = json.data.relationships.passengerType;\n\n        if (!Ember.isNone(passengerTypeRelationship)) {\n          passengerTypeRelationship.data.type = 'passengerTypeName';\n          json.data.relationships.passengerTypeName = json.data.relationships.passengerType;\n          delete json.data.relationships.passengerType;\n        }\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes)) {\n        if (!Ember.isNone(resourceHash.attributes.travelNeedTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.travelNeedType = {\n            data: {\n              type: 'travel-need-type',\n              id: resourceHash.attributes.travelNeedTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.travelNeedTypeName;\n        }\n\n        if (!Ember.isNone(resourceHash.attributes.passengerTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.passengerType = {\n            data: {\n              type: 'passenger-type',\n              id: resourceHash.attributes.passengerTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.passengerTypeName;\n        }\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.travelNeedTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.travelNeedType = {\n          data: {\n            type: 'travel-need-type',\n            id: resourceHash.relationships.travelNeedTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.travelNeedTypeName;\n      }\n\n      if (!Ember.isNone(resourceHash.relationships.passengerTypeName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.passengerType = {\n          data: {\n            type: 'passenger-type',\n            id: resourceHash.relationships.passengerTypeName.data.id\n          }\n        };\n        resourceHash.relationships = relationships;\n        delete resourceHash.relationships.passengerTypeName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/subscription\", [\"exports\", \"adept-iq/serializers/-bs-bookingService\"], function (_exports, _bsBookingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _bsBookingService.default.extend({\n    attrs: {\n      remainingOccurrences: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.attributes) delete json.data.attributes.serviceWindowName;\n\n      if (json.data && json.data.relationships) {\n        const fareTypeRelationship = json.data.relationships.fareType;\n        const serviceWindow = json.data.relationships.serviceWindow;\n        const origin = json.data.relationships.origin;\n        const destination = json.data.relationships.destination;\n        const phoneNumbers = json.data.relationships.phoneNumbers;\n        const fundingAgency = json.data.relationships.fundingAgency;\n        const fareCategoryRelationship = json.data.relationships.fareCategory || {};\n        const tripPurposeRelationship = json.data.relationships.tripPurpose || {};\n        const routeTemplateRelationship = json.data.relationships.routeTemplate;\n\n        if (!Ember.isNone(routeTemplateRelationship) && Ember.isNone(routeTemplateRelationship.data)) {\n          json.data.relationships.routeTemplate.data = {\n            type: 'routeTemplate',\n            id: 'deleted'\n          };\n        }\n\n        if (!Ember.isNone(fareCategoryRelationship) && !Ember.isNone(fareCategoryRelationship.data)) {\n          fareCategoryRelationship.data.type = 'fareCategoryName';\n          json.data.relationships.fareCategoryName = json.data.relationships.fareCategory;\n          delete json.data.relationships.fareCategory;\n        }\n\n        if (!Ember.isNone(fareTypeRelationship)) {\n          fareTypeRelationship.data.type = 'fareTypeName';\n          json.data.relationships.fareTypeName = json.data.relationships.fareType;\n          delete json.data.relationships.fareType;\n        }\n\n        if (serviceWindow) {\n          delete json.data.relationships.serviceWindow;\n        }\n\n        if (fundingAgency) {\n          delete json.data.relationships.fundingAgency;\n        }\n\n        if (!Ember.isNone(tripPurposeRelationship) && !Ember.isNone(tripPurposeRelationship.data)) {\n          tripPurposeRelationship.data.type = 'tripPurposeName';\n          json.data.relationships.tripPurposeName = json.data.relationships.tripPurpose;\n          delete json.data.relationships.tripPurpose;\n        }\n\n        if (origin) {\n          json.data.relationships.originPlace = json.data.relationships.origin;\n          delete json.data.relationships.origin;\n        }\n\n        if (destination) {\n          json.data.relationships.destinationPlace = json.data.relationships.destination;\n          delete json.data.relationships.destination;\n        }\n\n        if (phoneNumbers) {\n          const originPhoneNumber = phoneNumbers.data.firstObject;\n          const destinationPhoneNumber = phoneNumbers.data.lastObject;\n\n          if (originPhoneNumber) {\n            json.data.relationships.originPhoneNumber = {\n              data: {\n                type: originPhoneNumber.type,\n                id: originPhoneNumber.id\n              }\n            };\n          }\n\n          if (destinationPhoneNumber) {\n            json.data.relationships.destinationPhoneNumber = {\n              data: {\n                type: destinationPhoneNumber.type,\n                id: destinationPhoneNumber.id\n              }\n            };\n          }\n        }\n\n        delete json.data.relationships.phoneNumbers;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (!Ember.isNone(resourceHash.attributes)) {\n        if (!Ember.isNone(resourceHash.attributes.fareTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.fareType = {\n            data: {\n              type: 'fare-type',\n              id: resourceHash.attributes.fareTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.fareTypeName;\n        }\n\n        if (!Ember.isNone(resourceHash.attributes.serviceWindowName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.serviceWindow = {\n            data: {\n              type: 'service-window',\n              id: resourceHash.attributes.serviceWindowName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.serviceWindowName;\n        }\n\n        if (!Ember.isNone(resourceHash.attributes.providerName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.provider = {\n            data: {\n              type: 'provider',\n              id: resourceHash.attributes.providerName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.providerName;\n        }\n      }\n\n      if (!Ember.isNone(resourceHash.relationships)) {\n        if (!Ember.isNone(resourceHash.relationships.originPlace)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.origin = resourceHash.relationships.originPlace;\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.originPlace;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.destinationPlace)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.destination = resourceHash.relationships.destinationPlace;\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.destinationPlace;\n        } //regarding this ticket NYAAR-14603\n\n\n        if (!Ember.isNone(resourceHash.relationships.serviceWindowName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.serviceWindow = {\n            data: {\n              type: 'service-window',\n              id: resourceHash.relationships.serviceWindowName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.serviceWindowName;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.fundingAgencyName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.fundingAgency = {\n            data: {\n              type: 'fundingAgency',\n              id: resourceHash.relationships.fundingAgencyName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.fundingAgencyName;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.tripPurposeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.tripPurpose = {\n            data: {\n              type: 'trip-purpose',\n              id: resourceHash.relationships.tripPurposeName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.tripPurposeName;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.fareCategoryName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.fareCategory = {\n            data: {\n              type: 'fare-category',\n              id: resourceHash.relationships.fareCategoryName.data.id\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.fareCategoryName;\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.recurrencePatterns)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          const dataArray = relationships.recurrencePatterns.data;\n          dataArray.map(data => {\n            data.type = 'subscription-recurrence-pattern';\n          });\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.exclusions) && !Ember.isNone(resourceHash.relationships.exclusions) && !Ember.isNone(resourceHash.relationships.exclusions.data)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          const dataArray = relationships.exclusions.data;\n          dataArray.map(data => {\n            data.type = 'subscription-exclusion';\n          });\n        }\n\n        if (!Ember.isNone(resourceHash.relationships.originPhoneNumber) || !Ember.isNone(resourceHash.relationships.destinationPhoneNumber)) {\n          const phoneNumberData = {\n            data: []\n          };\n          const originPhoneNumberData = resourceHash.relationships.originPhoneNumber ? resourceHash.relationships.originPhoneNumber.data : {};\n          const destinationPhoneNumberData = resourceHash.relationships.destinationPhoneNumber ? resourceHash.relationships.destinationPhoneNumber.data : {};\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n\n          if (Object.keys(originPhoneNumberData).length !== 0) {\n            phoneNumberData.data.push(originPhoneNumberData);\n          }\n\n          if (Object.keys(destinationPhoneNumberData).length !== 0) {\n            phoneNumberData.data.push(destinationPhoneNumberData);\n          }\n\n          relationships.phoneNumbers = phoneNumberData;\n          resourceHash.relationships = relationships;\n          delete resourceHash.relationships.originPhoneNumber;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeArrayResponse(store, primaryModelClass, payload) {\n      if (!Ember.isNone(payload.included) && !Ember.isNone(payload.included.filterBy('type', 'segmentStop'))) {\n        const newIncluded = payload.included.filter(include => {\n          return include.type !== 'fareCategoryName';\n        });\n        payload.included = newIncluded;\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/termination-reason-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'termination-reason-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/travel-need-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function updateRelationship(relationships, relationshipName, id, type, store) {\n    if (id) {\n      relationships[relationshipName] = {\n        data: {\n          id,\n          type\n        }\n      };\n      store.push({\n        data: {\n          id,\n          type\n        }\n      });\n    }\n  }\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'travel-need-type',\n\n    normalizeArrayResponse(store\n    /*, primaryModelClass, payload, id, requestType */\n    ) {\n      const normalized = this._super(...arguments);\n\n      if (Ember.isPresent(normalized.data)) {\n        normalized.data.forEach(datum => {\n          datum.attributes = datum.attributes || {};\n          datum.relationships = datum.relationships || {};\n          const {\n            vehicleCapacityType\n          } = datum.attributes;\n\n          if (Ember.isPresent(vehicleCapacityType)) {\n            // Avoid ember store send out query requests.\n            updateRelationship(datum.relationships, 'vehicleCapacityType', vehicleCapacityType, 'vehicle-capacity-type', store);\n          }\n        });\n      }\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/trim-slack-contract-management\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      const id = json.data.attributes.providerName;\n      const type = 'providerName';\n      const providerRelationship = {\n        providerName: {\n          data: {\n            id,\n            type\n          }\n        }\n      };\n      json.data.relationships = providerRelationship;\n      delete json.data.attributes.providerName;\n      return json;\n    },\n\n    normalizeResponse: function (store, primaryModelClass, payload) {\n      if (!Ember.isEmpty(payload.data)) {\n        if (Ember.isArray(payload.data)) {\n          payload.data.forEach(record => {\n            const providerName = record.relationships.providerName.data.id;\n            record.attributes.providerName = providerName;\n          });\n        } else {\n          const providerName = payload.data.relationships.providerName.data.id;\n          payload.data.attributes.providerName = providerName;\n        }\n      }\n\n      return payload;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/trip-activity-log-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'trip-activity-log-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/trip-purpose\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'trip-purpose'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/trip-route-assignment\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _ssSchedulingService.default;\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/trip-stop\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\"], function (_exports, _ssSchedulingService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _ssSchedulingService.default.extend({\n    attrs: {\n      plannedSlackTime: {\n        serialize: false\n      },\n      scheduleStopStatus: {\n        serialize: false\n      },\n      sdbPlannedEta: {\n        serialize: false\n      }\n    },\n\n    normalize(modelClass, resourceHash) {\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {}; // TODO: store stop-point correctly.\n\n      if (Ember.isPresent(payload.data.attributes.provider)) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: payload.data.attributes.provider\n          }\n        };\n        delete payload.data.attributes.provider;\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/trip\", [\"exports\", \"adept-iq/serializers/-ss-schedulingService\", \"adept-iq/models/trip\"], function (_exports, _ssSchedulingService, _trip) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const convertStatusReason = {\n    'No Show No Answer': 'noShowNoAnswer',\n    'No Show Same Day Cancel No Fault': 'noShowSameDayCancelNoFault',\n    'No Show Same Day Cancel': 'noShowSameDayCancel',\n    'No Show Cancel At Door': 'noShowCancelAtDoor',\n    'No Show Not Ready': 'noShowNotReady',\n    'No Show No Fault': 'noShowNoFault',\n    NSNA: 'noShowNoAnswer',\n    NSSDCNF: 'noShowSameDayCancelNoFault',\n    NSSDC: 'noShowSameDayCancel',\n    NSCD: 'noShowCancelAtDoor',\n    NSNR: 'noShowNotReady',\n    NSNF: 'noShowNoFault'\n  };\n\n  var _default = _ssSchedulingService.default.extend({\n    attrs: {\n      paymentType: {\n        serialize: false\n      },\n      fare: {\n        serialize: false\n      },\n      maxRideTime: {\n        serialize: false\n      },\n      failedStatus: {\n        serialize: false\n      },\n      tripStatus: {\n        serialize: false\n      },\n      sdbRouteName: {\n        serialize: false\n      }\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      json.data.attributes = json.data.attributes || {};\n\n      if (Ember.isPresent(json.data.relationships)) {\n        const scheduleRelationship = json.data.relationships.schedule;\n        const subscriptionRelationship = json.data.relationships.subscription;\n        const segmentRelationship = json.data.relationships.segment;\n        const bookingRelationship = json.data.relationships.booking;\n        const providerRelationship = json.data.relationships.provider;\n        const reason = json.data.relationships.reason;\n        const currentProviderName = json.data.attributes.currentProviderName;\n\n        if (Ember.isPresent(scheduleRelationship)) {\n          delete json.data.relationships.schedule;\n        }\n\n        if (Ember.isPresent(subscriptionRelationship)) {\n          delete json.data.relationships.subscription;\n        }\n\n        if (Ember.isPresent(segmentRelationship)) {\n          delete json.data.relationships.segment;\n        }\n\n        if (Ember.isPresent(bookingRelationship)) {\n          delete json.data.relationships.booking;\n        }\n\n        if (Ember.isPresent(providerRelationship)) {\n          delete json.data.relationships.provider;\n        }\n\n        if (Ember.isPresent(reason)) {\n          delete json.data.relationships.reason;\n        }\n\n        if (Ember.isPresent(currentProviderName)) {\n          const currentProviderNameJson = {\n            'data': {\n              'type': 'providerName',\n              'id': currentProviderName\n            }\n          };\n          json.data.relationships.currentProviderName = currentProviderNameJson;\n        }\n      }\n\n      if (Ember.isPresent(json.data.attributes)) {\n        delete json.data.attributes.otp;\n        delete json.data.attributes.otpValue;\n        delete json.data.attributes.statusReason;\n        delete json.data.attributes.currentProviderName;\n        delete json.data.attributes.noShowRequestReasonCode;\n      } // while trip-transfer we don't need to send a status attribute for PATCH\n\n\n      if (Ember.isPresent(json.data.attributes) && Ember.isEmpty(json.data.attributes.status)) {\n        delete json.data.attributes.status;\n      }\n\n      if (Ember.isPresent(json.data.attributes) && json.data.attributes.status === _trip.TRIP_WAITLIST_STATUS && Ember.isPresent(json.data.relationships)) {\n        delete json.data.relationships.route;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n\n      if (resourceHash.attributes) {\n        // the status reason arrive from either avlm-route-exec-event as a code or trip topic as the actual id of the no-show-reason\n        // evaulate based on either and use the correct id to associate the no-show-reason-code to trip\n        if (Ember.isPresent(resourceHash.attributes.statusReason)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          let {\n            statusReason\n          } = resourceHash.attributes;\n          statusReason = convertStatusReason[statusReason] || statusReason;\n          relationships.reason = {\n            data: {\n              type: 'no-show-reason-code',\n              id: statusReason\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.statusReason;\n        } //NYAAR-19295: reason attribute comes form DB is set to failedStatus attribute in trip-model\n\n\n        if (Ember.isPresent(resourceHash.attributes.reason)) {\n          const attributes = resourceHash.attributes ? resourceHash.attributes : {};\n          const {\n            reason\n          } = resourceHash.attributes;\n          attributes.failedStatus = reason;\n          resourceHash.attributes = attributes;\n          delete resourceHash.attributes.reason;\n        }\n\n        if (!Ember.isNone(resourceHash.attributes.currentProviderName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {}; // UNASSIGNED is not a real provider. backend just use it for\n          // waitlisted and cancelled trips\n\n          if (resourceHash.attributes.currentProviderName === 'UNASSIGNED') {\n            delete resourceHash.attributes.currentProviderName;\n          } else {\n            relationships.provider = {\n              data: {\n                type: 'provider',\n                id: resourceHash.attributes.currentProviderName\n              }\n            };\n          }\n\n          resourceHash.relationships = relationships;\n        }\n      } //NYAAR-19295: if currentProviderName value present in relationship is set to attribute of trip-model\n\n\n      if (resourceHash.relationships && resourceHash.relationships.currentProviderName) {\n        const attributes = resourceHash.attributes ? resourceHash.attributes : {};\n        const currentProviderName = resourceHash.relationships.currentProviderName ? resourceHash.relationships.currentProviderName : {};\n        attributes.currentProviderName = currentProviderName.data.id;\n        resourceHash.attributes = attributes;\n        delete resourceHash.relationships.currentProviderName;\n      }\n\n      if (Ember.isPresent(resourceHash.attributes) && resourceHash.attributes.status === _trip.TRIP_WAITLIST_STATUS && Ember.isPresent(resourceHash.relationships.route)) {\n        delete resourceHash.relationships.route;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      payload.data.relationships = payload.data.relationships || {};\n\n      if (Ember.isPresent(payload.data.attributes.otpCode) || Ember.isPresent(payload.data.attributes.otpStatus)) {\n        payload.data.attributes.otp = payload.data.attributes.otpCode || payload.data.attributes.otpStatus;\n      } // sometimes route are in different timeline so we need to get lock from trip.\n\n\n      if (Ember.isPresent(payload.data.attributes.lock)) {\n        if (payload.data.attributes.lock && payload.data.attributes.lock.lockedBy.startsWith('dispatchRoute:')) {\n          const dispatchRoutePk = payload.data.attributes.lock.lockedBy.split(':')[1];\n          const dispatchRouteLock = {\n            type: 'lock',\n            id: dispatchRoutePk,\n            attributes: {\n              entityType: 'dispatchRoute',\n              entityId: dispatchRoutePk,\n              timeToLive: payload.data.attributes.lock.ttl,\n              expirationTime: payload.data.attributes.lock.expiredAt,\n              status: 'locked',\n              persist: payload.data.attributes.lock.persist\n            },\n            relationships: {\n              dispatchRoute: {\n                data: {\n                  type: 'dispatchRoute',\n                  id: dispatchRoutePk\n                }\n              },\n              owner: {\n                data: {\n                  type: 'sso-user',\n                  id: payload.data.attributes.lock.user\n                }\n              }\n            }\n          };\n          payload.included = payload.included || [];\n          payload.included.push(dispatchRouteLock);\n        }\n      } else if (Ember.isPresent(payload.data.attributes.isLocked) && !payload.data.attributes.isLocked) {\n        if (payload.data.attributes.lock && payload.data.attributes.lock.lockedBy.startsWith('dispatchRoute:')) {\n          const dispatchRoutePk = payload.data.attributes.lock.lockedBy.split(':')[1];\n          const dispatchRouteLock = {\n            type: 'lock',\n            id: dispatchRoutePk,\n            attributes: {\n              entityType: 'dispatchRoute',\n              entityId: dispatchRoutePk,\n              status: 'unlocked'\n            },\n            relationships: {\n              dispatchRoute: {\n                data: {\n                  type: 'dispatchRoute',\n                  id: dispatchRoutePk\n                }\n              }\n            }\n          };\n          payload.included = payload.included || [];\n          payload.included.push(dispatchRouteLock);\n        }\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/user-activity-log-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'user-activity-log-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-activity-log-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-activity-log-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-availability\", [\"exports\", \"adept-iq/serializers/-vehicle\", \"moment\"], function (_exports, _vehicle, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const refTime = (0, _moment.default)(0).startOf('day');\n  const DAYS_OF_WEEK = [{\n    day: 'monday',\n    display: 'Mon',\n    disabled: false\n  }, {\n    day: 'tuesday',\n    display: 'Tues',\n    disabled: false\n  }, {\n    day: 'wednesday',\n    display: 'Wed',\n    disabled: false\n  }, {\n    day: 'thursday',\n    display: 'Thurs',\n    disabled: false\n  }, {\n    day: 'friday',\n    display: 'Fri',\n    disabled: false\n  }, {\n    day: 'saturday',\n    display: 'Sat',\n    disabled: false\n  }, {\n    day: 'sunday',\n    display: 'Sun',\n    disabled: false\n  }, {\n    day: 'holiday',\n    display: 'Holiday',\n    disabled: false\n  }];\n\n  var _default = _vehicle.default.extend({\n    attrs: {\n      calcEndDate: {\n        serialize: false\n      },\n      DOWSelected: {\n        serialize: false\n      },\n      routeLength: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      const {\n        shiftStart,\n        shiftEnd\n      } = json.data.attributes;\n      const momentShiftStart = (0, _moment.default)(shiftStart).startOf('minute');\n      const momentShiftEnd = (0, _moment.default)(shiftEnd).startOf('minute');\n      const diffStart = Math.abs(momentShiftStart.diff(momentShiftStart.clone().startOf('day')));\n\n      const durationStart = _moment.default.duration(diffStart);\n\n      const formattedShiftStart = refTime.clone().add(durationStart);\n      const diffEnd = Math.abs(momentShiftEnd.diff(momentShiftStart.clone().startOf('day')));\n\n      const durationEnd = _moment.default.duration(diffEnd);\n\n      const formattedShiftEnd = refTime.clone().add(durationEnd);\n      json.data.attributes.shiftStart = formattedShiftStart;\n      json.data.attributes.shiftEnd = formattedShiftEnd;\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      // this is because of inconsistencies in api\n      // returns an array instead of an object after a POST\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(modelClass, resourceHash) {\n      // handle topic payload\n      const {\n        days\n      } = resourceHash.attributes;\n      const DOWSelected = [];\n\n      if (days) {\n        delete resourceHash.attributes.days;\n        days.forEach((value, i) => {\n          const weekday = _moment.default.weekdays(i).toLowerCase();\n\n          resourceHash.attributes[weekday] = value;\n        });\n      }\n\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n      const {\n        shiftStart,\n        shiftEnd,\n        startTime\n      } = resourceHash.attributes;\n\n      if (shiftStart && shiftEnd) {\n        const startMoment = (0, _moment.default)(shiftStart);\n        const endMoment = (0, _moment.default)(shiftEnd);\n        const diff = Math.abs(startMoment.diff(endMoment));\n\n        const duration = _moment.default.duration(diff);\n\n        const hours = Math.floor(duration.asHours());\n        const formattedHours = hours < 10 ? `0${hours}` : hours;\n\n        const routeLength = formattedHours + _moment.default.utc(diff).format(':mm');\n\n        resourceHash.attributes.routeLength = routeLength;\n      }\n\n      if (startTime && resourceHash.attributes.routeLength) {\n        const clone = (0, _moment.default)(shiftStart);\n        const routeLength = resourceHash.attributes.routeLength.split(':');\n        clone.add(routeLength[0], 'hours');\n        clone.add(routeLength[1], 'minutes');\n        resourceHash.attributes.calcEndDate = clone.toISOString();\n      }\n\n      DAYS_OF_WEEK.forEach(option => {\n        if (resourceHash.attributes[option.day]) {\n          DOWSelected.pushObject(option);\n        }\n      });\n      resourceHash.attributes.DOWSelected = DOWSelected;\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-body-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-body-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-body-width\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-body-width'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-breakdown\", [\"exports\", \"adept-iq/serializers/-vehicle\"], function (_exports, _vehicle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicle.default.extend({\n    keyForAttribute: function (attr) {\n      return attr;\n    },\n\n    serialize(snapshot, options) {\n      const json = this._super(snapshot, options);\n\n      if (json.data && json.data.relationships) {\n        const breakdownTypeRelationship = json.data.relationships.type;\n\n        if (!Ember.isNone(breakdownTypeRelationship)) {\n          breakdownTypeRelationship.data.type = 'breakdownTypeName';\n          json.data.relationships.breakdownTypeName = json.data.relationships.type;\n          delete json.data.relationships.type;\n        }\n      }\n\n      return json;\n    },\n\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    },\n\n    normalize(modelClass, resourceHash) {\n      if (resourceHash.attributes) {\n        if (!Ember.isNone(resourceHash.attributes.breakdownTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.type = {\n            data: {\n              type: 'breakdown-type',\n              id: resourceHash.attributes.breakdownTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.breakdownTypeName;\n        }\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-capacity-config\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-capacity-config',\n\n    normalizeArrayResponse() {\n      const normalized = this._super(...arguments);\n\n      if (Ember.isPresent(normalized.data)) {\n        normalized.data.forEach(datum => {\n          datum.attributes = datum.attributes || {};\n          datum.relationships = datum.relationships || {};\n          const vehicleTypeId = datum.attributes.vehicleType;\n          const vehicleCapacityTypeId = datum.attributes.vehicleCapacityType;\n          delete datum.attributes.vehicleType;\n          delete datum.attributes.vehicleCapacityType;\n          datum.relationships.vehicleType = {\n            data: {\n              id: vehicleTypeId,\n              type: 'vehicle-type'\n            }\n          };\n          datum.relationships.vehicleCapacityType = {\n            data: {\n              id: vehicleCapacityTypeId,\n              type: 'vehicle-capacity-type'\n            }\n          };\n        });\n      }\n\n      return normalized;\n    },\n\n    normalizeSingleResponse() {\n      const normalized = this._super(...arguments);\n\n      if (Ember.isPresent(normalized.data)) {\n        normalized.data.attributes = normalized.data.attributes || {};\n        normalized.data.relationships = normalized.data.relationships || {};\n        const vehicleTypeId = normalized.data.attributes.vehicleType;\n        const vehicleCapacityTypeId = normalized.data.attributes.vehicleCapacityType;\n        delete normalized.data.attributes.vehicleType;\n        delete normalized.data.attributes.vehicleCapacityType;\n        normalized.data.relationships.vehicleType = {\n          data: {\n            id: vehicleTypeId,\n            type: 'vehicle-type'\n          }\n        };\n        normalized.data.relationships.vehicleCapacityType = {\n          data: {\n            id: vehicleCapacityTypeId,\n            type: 'vehicle-capacity-type'\n          }\n        };\n      }\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-capacity-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-capacity-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-chassis\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-chassis'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-dot-inspection\", [\"exports\", \"adept-iq/serializers/-vehicle\", \"lodash\"], function (_exports, _vehicle, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicle.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      json.data.type = 'vehicleDotInspection'; // incorrect camel case should be 'vehicleDotInspection'\n\n      json.data.relationships = json.data.relationships || {};\n      const {\n        inspectionCategory,\n        provider\n      } = json.data.relationships;\n\n      if (provider) {\n        if (provider.data) {\n          json.data.relationships.providerName = provider;\n          json.data.relationships.providerName.data.type = 'providerName';\n        }\n\n        delete json.data.relationships.provider;\n      }\n\n      if (inspectionCategory) {\n        if (inspectionCategory.data) {\n          json.data.relationships.inspectionCategoryName = inspectionCategory;\n          json.data.relationships.inspectionCategoryName.data.type = 'inspectionCategoryName';\n        }\n\n        delete json.data.relationships.inspectionCategory;\n      }\n\n      return json;\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.relationships = resourceHash.relationships || {};\n      resourceHash.attributes = resourceHash.attributes || {};\n\n      if (resourceHash.attributes.inspectionCategoryName) {\n        resourceHash.relationships.inspectionCategory = {\n          data: {\n            id: resourceHash.attributes.inspectionCategoryName,\n            type: 'inspection-category'\n          }\n        };\n        delete resourceHash.attributes.inspectionCategoryName;\n      }\n\n      if (resourceHash.attributes.providerName) {\n        resourceHash.relationships.provider = {\n          data: {\n            id: resourceHash.attributes.providerName,\n            type: 'provider'\n          }\n        };\n        delete resourceHash.attributes.providerName;\n      }\n\n      if (resourceHash.relationships.providerName) {\n        resourceHash.relationships.providerName.data.type = 'provider';\n        resourceHash.relationships.provider = (0, _lodash.cloneDeep)(resourceHash.relationships.providerName);\n        delete resourceHash.relationships.providerName;\n      }\n\n      if (resourceHash.relationships.inspectionCategoryName) {\n        resourceHash.relationships.inspectionCategoryName.data.type = 'inspection-category';\n        resourceHash.relationships.inspectionCategory = (0, _lodash.cloneDeep)(resourceHash.relationships.inspectionCategoryName);\n        delete resourceHash.relationships.inspectionCategoryName;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-equipment\", [\"exports\", \"adept-iq/serializers/-vehicle\"], function (_exports, _vehicle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicle.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-event\", [\"exports\", \"adept-iq/serializers/-avlm-avlmService\"], function (_exports, _avlmAvlmService) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _avlmAvlmService.default.extend({\n    normalizeResponse(store, primaryModelClass, payload) {\n      payload.data = payload.data.filter(record => {\n        if (record.type === 'vehicleEvent' || record.type === 'routeExecEvent' || record.type === 'driverStateEvent' || record.type === 'userEvent') {\n          return record;\n        }\n      }) || {};\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-fuel-cap\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-fuel-cap'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-fuel-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-fuel-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-maintenance\", [\"exports\", \"adept-iq/serializers/-vehicle\"], function (_exports, _vehicle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicle.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-model-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-model-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-road-call\", [\"exports\", \"adept-iq/serializers/-vehicle\"], function (_exports, _vehicle) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicle.default.extend({\n    serialize() {\n      const json = this._super(...arguments);\n\n      return json;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-route\", [\"exports\", \"adept-iq/serializers/-dispatch\"], function (_exports, _dispatch) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _dispatch.default.extend({\n    normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      if (requestType === 'createRecord' && Ember.typeOf(payload.data) === 'array') {\n        if (payload.data.length === 1) {\n          payload.data = payload.data[0];\n        }\n      }\n\n      return this._super(...arguments);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-status-name\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-status-name'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-tire-size\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-tire-size'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-transmission\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-transmission'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function updateRelationship(relationships, relationshipName, id, type, store) {\n    if (id) {\n      relationships[relationshipName] = {\n        data: {\n          id,\n          type\n        }\n      };\n      store.push({\n        data: {\n          id,\n          type\n        }\n      });\n    }\n  }\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-type',\n\n    normalizeArrayResponse(store\n    /*, id, requestType*/\n    ) {\n      const normalized = this._super(...arguments);\n\n      if (Ember.isPresent(normalized.data)) {\n        normalized.data.forEach(datum => {\n          datum.relationships = datum.relationships || {};\n          const {\n            rearAxelId,\n            vehicleWheelBaseTypeId,\n            vehicleTireSizeId,\n            vehicleModelId,\n            vehicleChassisId,\n            vehicleBodyWidthId,\n            vehicleFuelCapId,\n            vehicleFuelTypeId,\n            vehicleBodyTypeId,\n            vehicleTransmissionId\n          } = datum.attributes; // Avoid ember store send out query requests.\n\n          updateRelationship(datum.relationships, 'rearAxel', rearAxelId, 'rear-axel-name', store);\n          updateRelationship(datum.relationships, 'vehicleBodyType', vehicleBodyTypeId, 'vehicle-body-type', store);\n          updateRelationship(datum.relationships, 'vehicleBodyWidth', vehicleBodyWidthId, 'vehicle-body-width', store);\n          updateRelationship(datum.relationships, 'vehicleChassis', vehicleChassisId, 'vehicle-chassis', store);\n          updateRelationship(datum.relationships, 'vehicleFuelCap', vehicleFuelCapId, 'vehicle-fuel-cap', store);\n          updateRelationship(datum.relationships, 'vehicleFuelType', vehicleFuelTypeId, 'vehicle-fuel-type', store);\n          updateRelationship(datum.relationships, 'vehicleModel', vehicleModelId, 'vehicle-model-name', store);\n          updateRelationship(datum.relationships, 'vehicleWheelBaseType', vehicleWheelBaseTypeId, 'vehicle-wheelbase-type', store);\n          updateRelationship(datum.relationships, 'vehicleTireSize', vehicleTireSizeId, 'vehicle-tire-size', store);\n          updateRelationship(datum.relationships, 'vehicleTransmission', vehicleTransmissionId, 'vehicle-transmission', store);\n        });\n      }\n\n      return normalized;\n    },\n\n    normalizeAttributes(attributes) {\n      // copy `displayName` -> `name`\n      if (!Ember.isNone(attributes)) attributes.name = attributes.displayName;\n      return attributes;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-wc-lift-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-wc-lift-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle-wheelbase-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'vehicle-wheelbase-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/vehicle\", [\"exports\", \"adept-iq/serializers/-vehicle\", \"lodash\"], function (_exports, _vehicle, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _vehicle.default.extend({\n    attrs: {\n      etaRoute: {\n        serialize: false\n      },\n      displayStatus: {\n        serialize: false\n      },\n      vehicleRouteExecEvent: {\n        serialize: false\n      },\n      startingGarage: {\n        serialize: false\n      },\n      endingGarage: {\n        serialize: false\n      },\n      driverAppVersion: {\n        serialize: false\n      },\n      otp: {\n        serialize: false\n      },\n      otpWithSign: {\n        serialize: false\n      },\n      revenue: {\n        serialize: false\n      },\n      rvdStartTime: {\n        serialize: false\n      },\n      rvdEndTime: {\n        serialize: false\n      },\n      rvdHistory: {\n        serialize: false\n      },\n      inProgress: {\n        serialize: false\n      },\n      routeStatus: {\n        serialize: false\n      },\n      isCompleted: {\n        serialize: false\n      },\n      currentRouteName: {\n        serialize: false\n      },\n      currentRoutePk: {\n        serialize: false\n      },\n      driverId: {\n        serialize: false\n      },\n      hasPowerOn: {\n        serialize: false\n      },\n      isGpsFailure: {\n        serialize: false\n      },\n      isCommFailure: {\n        serialize: false\n      },\n      isLeaveGarageSignOff: {\n        serialize: false\n      },\n      isOnBreak: {\n        serialize: false\n      },\n      currentDriver: {\n        serialize: false\n      },\n      replyToMessageId: {\n        serialize: false\n      },\n      preReplyId: {\n        serialize: false\n      },\n      emergency: {\n        serialize: false\n      }\n    },\n\n    serialize() {\n      const json = this._super(...arguments);\n\n      if (json.data && json.data.relationships) {\n        json.data.relationships = json.data.relationships || {};\n        delete json.data.relationships.breakdownType;\n        delete json.data.relationships.iqVehicle;\n        delete json.data.attributes.avlLocation;\n        delete json.data.attributes.mobileId;\n        delete json.data.attributes.version;\n        const providerRelationship = json.data.relationships.provider;\n        const {\n          vehicleType,\n          startGarage,\n          endGarage,\n          leaseCompany\n        } = json.data.relationships;\n        const {\n          nonRevenueVehicle\n        } = json.data.attributes;\n\n        if (!Ember.isNone(providerRelationship)) {\n          providerRelationship.data.type = 'providerName';\n          json.data.relationships.providerName = json.data.relationships.provider;\n          delete json.data.relationships.provider;\n        }\n\n        if (!Ember.isNone(vehicleType)) {\n          vehicleType.data.type = 'vehicleTypeName';\n          json.data.relationships.vehicleTypeName = json.data.relationships.vehicleType;\n          delete json.data.relationships.vehicleType;\n        }\n\n        if (!Ember.isNone(startGarage)) {\n          json.data.relationships.startGaragePlace = json.data.relationships.startGarage;\n          delete json.data.relationships.startGarage;\n        }\n\n        if (!Ember.isNone(endGarage)) {\n          json.data.relationships.endGaragePlace = json.data.relationships.endGarage;\n          delete json.data.relationships.endGarage;\n        }\n\n        if (!Ember.isNone(leaseCompany)) {\n          leaseCompany.data.type = 'leaseCompanyName';\n          json.data.relationships.leaseCompanyName = json.data.relationships.leaseCompany;\n          delete json.data.relationships.leaseCompany;\n        }\n\n        if (!Ember.isNone(nonRevenueVehicle)) {\n          json.data.attributes.nonRevenueVehicle = !nonRevenueVehicle;\n        }\n      }\n\n      return json;\n    },\n\n    // currently vehicles included payload returns vehicleTypeName & providerName\n    // this means the console will spew a bunch of warning messages for missing these models\n    // we currently don't have a way to remove these problems especially we can't traverse the array as that in itself is a code smell\n    // @FIXME: find a way to address this data situation\n    // I left this code as a reminder for this small low priority problem\n    // normalizeResponse: function(store, primaryModelClass, payload) {\n    //   delete payload.included;\n    //   return payload;\n    // },\n    normalizeResponse(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      delete payload.included;\n      return this._super(...arguments);\n    },\n\n    normalize(modelClass, resourceHash) {\n      resourceHash.attributes = resourceHash.attributes || {};\n      resourceHash.relationships = resourceHash.relationships || {};\n      const {\n        startGaragePlace,\n        endGaragePlace,\n        leaseCompanyName,\n        providerName,\n        vehicleTypeName\n      } = resourceHash.relationships;\n      const {\n        inspections\n      } = resourceHash.relationships;\n      const {\n        nonRevenueVehicle\n      } = resourceHash.attributes;\n\n      if (inspections) {\n        inspections.data.forEach(dot => {\n          dot.type = 'vehicleDotInspection';\n        });\n      }\n\n      if (resourceHash.attributes) {\n        if (!Ember.isNone(resourceHash.attributes.vehicleTypeName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.vehicleType = {\n            data: {\n              type: 'vehicle-type',\n              id: resourceHash.attributes.vehicleTypeName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.vehicleTypeName;\n        }\n\n        if (!Ember.isNone(resourceHash.attributes.providerName)) {\n          const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n          relationships.provider = {\n            data: {\n              type: 'provider',\n              id: resourceHash.attributes.providerName\n            }\n          };\n          resourceHash.relationships = relationships;\n          delete resourceHash.attributes.providerName;\n        }\n\n        const routeActualEndTime = resourceHash.attributes.routeActualEndTime;\n        const routePk = resourceHash.attributes.routePk;\n\n        if (Ember.isPresent(routeActualEndTime) && Ember.isPresent(routePk)) {\n          if (Ember.isPresent(routeActualEndTime[routePk])) {\n            resourceHash.attributes.isCompleted = true;\n          } else {\n            resourceHash.attributes.isCompleted = false;\n          }\n        }\n      }\n\n      if (providerName) {\n        resourceHash.relationships.providerName.data.type = 'provider';\n        resourceHash.relationships.provider = (0, _lodash.cloneDeep)(resourceHash.relationships.providerName);\n        delete resourceHash.relationships.providerName;\n      }\n\n      if (vehicleTypeName) {\n        resourceHash.relationships.vehicleTypeName.data.type = 'vehicle-type';\n        resourceHash.relationships.vehicleType = (0, _lodash.cloneDeep)(resourceHash.relationships.vehicleTypeName);\n        delete resourceHash.relationships.vehicleTypeName;\n      }\n\n      if (!Ember.isNone(startGaragePlace)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.startGarage = startGaragePlace;\n        delete resourceHash.relationships.startGaragePlace;\n      }\n\n      if (!Ember.isNone(endGaragePlace)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.endGarage = (0, _lodash.cloneDeep)(endGaragePlace);\n        delete resourceHash.relationships.endGaragePlace;\n      }\n\n      if (!Ember.isNone(leaseCompanyName)) {\n        const relationships = resourceHash.relationships ? resourceHash.relationships : {};\n        relationships.leaseCompany = {\n          data: {\n            type: 'lease-company',\n            id: leaseCompanyName.data.id\n          }\n        };\n        delete resourceHash.relationships.leaseCompanyName;\n      }\n\n      if (Ember.isPresent(nonRevenueVehicle)) {\n        resourceHash.attributes.nonRevenueVehicle = !nonRevenueVehicle;\n      }\n\n      const normalized = this._super(modelClass, resourceHash);\n\n      return normalized;\n    },\n\n    normalizeWidgetRecord(store, primaryModelClass, payload\n    /*, id, requestType*/\n    ) {\n      const relationships = payload.data.relationships ? payload.data.relationships : {};\n\n      if (Ember.isPresent(payload.data.attributes.availabilities)) {\n        const availabilities = Array.isArray(payload.data.attributes.availabilities) ? payload.data.attributes.availabilities : [payload.data.attributes.availabilities];\n        availabilities.forEach(availability => {\n          const vehicleAvailability = {\n            type: 'vehicle-availability',\n            id: availability.id,\n            attributes: availability,\n            relationships: {\n              vehicle: {\n                data: {\n                  type: 'vehicle',\n                  id: payload.data.id\n                }\n              }\n            }\n          };\n          payload.included = payload.included || [];\n          payload.included.push(vehicleAvailability);\n        });\n      }\n\n      if (Ember.isPresent(payload.data.attributes.type)) {\n        relationships.vehicleType = {\n          data: {\n            type: 'vehicle-type',\n            id: payload.data.attributes.type,\n            name: payload.data.attributes.type,\n            displayName: payload.data.attributes.type\n          }\n        };\n        delete payload.data.attributes.type;\n      }\n\n      if (Ember.isPresent(payload.data.attributes.lastGpsPingLat) && Ember.isPresent(payload.data.attributes.lastGpsPingLng)) {\n        payload.data.attributes.avlLocation = {\n          lat: parseFloat(payload.data.attributes.lastGpsPingLat),\n          lng: parseFloat(payload.data.attributes.lastGpsPingLng),\n          timestamp: payload.data.attributes.lastGpsPingTime\n        };\n      }\n\n      if (Ember.isPresent(payload.data.attributes.status)) {\n        payload.data.attributes.displayStatus = payload.data.attributes.status;\n        delete payload.data.attributes.status;\n      }\n\n      if (Ember.isPresent(payload.data.attributes.vehicleStatus)) {\n        payload.data.attributes.status = payload.data.attributes.vehicleStatus;\n        delete payload.data.attributes.vehicleStatus;\n      } // If no rvdHistory we need to reset the value in ember data.\n\n\n      if (!Ember.isPresent(payload.data.attributes.rvdHistory)) {\n        payload.data.attributes.rvdHistory = null;\n      }\n\n      if (!Ember.isPresent(payload.data.attributes.emergency)) {\n        payload.data.attributes.emergency = null;\n      }\n\n      if (!Ember.isPresent(payload.data.attributes.preReplyId)) {\n        payload.data.attributes.preReplyId = null;\n      }\n\n      if (!Ember.isPresent(payload.data.attributes.replyToMessageId)) {\n        payload.data.attributes.replyToMessageId = null;\n      }\n\n      const isRoadSupervisor = payload.data.attributes.routeName && payload.data.attributes.routeName.includes('SUP');\n      payload.data.attributes.otp = payload.data.attributes.otpCode || payload.data.attributes.otpStatus;\n      payload.data.attributes.driverBadgeNumber = isRoadSupervisor ? payload.data.attributes.driverPk : payload.data.attributes.driverId;\n      payload.data.attributes.driverFullName = payload.data.attributes.driverName; //TODO can make it better\n\n      if (payload.data.attributes.vehicleStateEvent) {\n        switch (payload.data.attributes.vehicleStateEvent) {\n          case 'commFailure':\n            payload.data.attributes.isCommFailure = true;\n            break;\n\n          case 'commRestored':\n            payload.data.attributes.isCommFailure = false;\n            break;\n\n          case 'gpsFailure':\n            payload.data.attributes.isGpsFailure = true;\n            break;\n\n          case 'leaveGarageSignOff':\n            payload.data.attributes.isLeaveGarageSignOff = true;\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (payload.data.attributes.driverStateEvent) {\n        switch (payload.data.attributes.driverStateEvent) {\n          case 'signOn':\n            payload.data.attributes.isLeaveGarageSignOff = false;\n            break;\n\n          case 'signOff':\n            // Do nothing for signOff because it might not even in drving state\n            break;\n\n          case 'emergencyOn':\n            break;\n\n          case 'emergencyOff':\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (payload.data.attributes.vehicleRouteExecEvent) {\n        switch (payload.data.attributes.vehicleRouteExecEvent) {\n          case 'onBreak':\n            payload.data.attributes.isOnBreak = true;\n            break;\n\n          case 'offBreak':\n            payload.data.attributes.isOnBreak = false;\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      const driverPk = payload.data.attributes.driverPk;\n      const provider = payload.data.attributes.provider;\n      const routeName = payload.data.attributes.routeName;\n      const routePk = payload.data.attributes.routePk;\n\n      if (routePk && routeName) {\n        payload.data.attributes.currentRouteName = routeName;\n        payload.data.attributes.currentRoutePk = routePk;\n      }\n\n      if (driverPk) {\n        relationships.currentDriver = {\n          data: {\n            type: 'driver',\n            id: `${driverPk}`\n          }\n        };\n      }\n\n      if (provider) {\n        relationships.provider = {\n          data: {\n            type: 'provider',\n            id: provider\n          }\n        };\n        delete payload.data.attributes.provider;\n      }\n\n      payload.data.relationships = relationships;\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/zip-code\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'zip-code',\n\n    normalizeAttributes(attributes) {\n      if (Ember.isPresent(attributes)) {\n        const name = attributes.name.replace('zip_code_', '');\n        attributes.name = name;\n      }\n\n      return attributes;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/zone-type\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'zone-type'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/serializers/zone\", [\"exports\", \"adept-iq/serializers/cs-config-model\"], function (_exports, _csConfigModel) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _csConfigModel.default.extend({\n    modelName: 'zone'\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/-in-viewport\", [\"exports\", \"ember-in-viewport/services/-in-viewport\"], function (_exports, _inViewport) {\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 _inViewport.default;\n    }\n  });\n});","define(\"adept-iq/services/active-context\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend(Ember.Evented, {\n    editModal: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    user: Ember.inject.service(),\n    // stack\n    activeContexts: null,\n    // \"top\" active-context in stack; this is what the widgets, workspace context, and map context bind to\n    topActiveContext: Ember.computed.readOnly('activeContexts.lastObject'),\n    isEmpty: Ember.computed.equal('activeContexts.length', 0),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('activeContexts', []);\n    },\n\n    pushContext(activeContext) {\n      const structuredWorkspace = activeContext.get('nodes').reduce((obj, node) => {\n        obj[node.modelName] = [];\n        return obj;\n      }, {});\n      this.set('workspaceContext._structuredWorkspace', structuredWorkspace);\n      this.get('activeContexts').pushObject(activeContext);\n    },\n\n    popContext() {\n      const topActiveContext = this.get('topActiveContext');\n      topActiveContext.trigger('unbind');\n      return this.get('activeContexts').popObject();\n    },\n\n    /**\n     * Safely removes context in stack in place.\n     * @param {RecordSet} identifier dashboard role, unless avlm determined by environment\n     */\n    removeContext(identifier) {\n      const activeContexts = this.get('activeContexts');\n      const activeContext = typeof identifier === 'string' ? activeContexts.findBy('id', identifier) : identifier;\n      return this.get('activeContexts').removeObject(activeContext);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/ada-service\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    // this is used for rendering map\n    activeCalendarId: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    fetchAgencyServiceByAgencyId() {\n      return new Promise(async (resolve, reject) => {\n        this.get('ajax').request(_apiUrls.API.adaService.host + '/agency-service/', {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        }).then(res => {\n          resolve(res);\n        }).catch(err => {\n          reject(err);\n        });\n      });\n    },\n\n    fetchRouteCalendarByServiceId(selectedAgencyServiceId) {\n      return new Promise(async (resolve, reject) => {\n        this.get('ajax').request(_apiUrls.API.adaService.host + '/route-calendar/' + selectedAgencyServiceId, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        }).then(res => {\n          resolve(res);\n        }).catch(err => {\n          reject(err);\n        });\n      });\n    },\n\n    fetchRouteShapeByCalendarId(selectedRouteCalendarId) {\n      return new Promise(async (resolve, reject) => {\n        this.get('ajax').request(_apiUrls.API.adaService.host + '/route-shape/' + selectedRouteCalendarId, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        }).then(res => {\n          resolve(res);\n        }).catch(err => {\n          reject(err);\n        });\n      });\n    },\n\n    setActiveCalender(calendarId) {\n      this.set('activeCalendarId', calendarId);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/address\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    geocode: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    reverseGeocode(latlng) {\n      const store = this.get('store');\n      return this.get('geocode').reverseGeocode(latlng).then(result => {\n        return store.createRecord('address', {\n          freeformAddress: result.address.freeformAddress || 'Unknown',\n          streetNumber: result.address.streetNumber || '1',\n          streetAddress: result.address.streetName || 'Unknown',\n          region: result.address.countrySubdivisionName || 'Unknown',\n          locality: result.address.countrySecondarySubdivision || 'Unknown',\n          subLocality: result.address.countryTertiarySubdivision || 'Unknown',\n          postalCode: result.address.postalCode || 'Unknown',\n          country: result.address.country || 'US',\n          alias: result.address.alias || '',\n          lat: result.position.lat,\n          lng: result.position.lon\n        });\n      });\n    },\n\n    // address models returned by this function are not saved by default\n    fuzzySearch(query) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const store = this.get('store');\n      return this.get('geocode').fuzzySearch(query, options).then(results => {\n        if (!results) return results;\n        return results.map(result => {\n          // translate from tomtom fields\n          return store.createRecord('address', {\n            freeformAddress: result.address.freeformAddress,\n            streetNumber: result.address.streetNumber,\n            streetAddress: result.address.streetName,\n            region: result.address.countrySubdivisionName,\n            locality: result.address.city || result.address.countrySecondarySubdivision || result.address.municipality,\n            subLocality: result.address.countryTertiarySubdivision,\n            postalCode: result.address.postalCode,\n            country: result.address.country,\n            alias: result.address.alias || '',\n            lat: result.position.lat,\n            lng: result.position.lon\n          });\n        });\n      });\n    },\n\n    async copyAddress(address) {\n      const store = this.get('store');\n      return store.createRecord('address', {\n        freeformAddress: address.get('tomtomFormattedAddress.address.freeformAddress'),\n        streetNumber: address.get('streetNumber'),\n        streetAddress: address.get('streetAddress'),\n        region: address.get('region'),\n        locality: address.get('locality'),\n        subLocality: address.get('subLocality'),\n        postalCode: address.get('postalCode'),\n        country: address.get('country'),\n        alias: address.get('alias'),\n        lat: address.get('position.lat'),\n        lng: address.get('position.lon')\n      });\n    },\n\n    async createWayPoint(address) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const placeSerializer = store.serializerFor('place');\n      const placeModelClass = store.modelFor('place');\n      const result = await this.get('geocode').calculateZone(address.lat, address.lng); // TODO: geonode is only working in NY\n\n      const location = store.createRecord('location', {\n        lat: address.lat,\n        lng: address.lng,\n        geoNode: result ? result.geonode : 5444 // TODO: add default geoNode\n\n      }); // TODO: how does zone types fit in the address\n\n      address.set('zoneName', this.store.peekAll('zone-type').get('firstObject'));\n      const place = store.createRecord('place', {\n        address: address,\n        location: location\n      });\n\n      if (address) {\n        place.set('location.lat', address.lat);\n        place.set('location.lng', address.lng);\n      }\n\n      const locationResponse = await locationAdapter.postLocation(location);\n      const addressResponse = await addressAdapter.postAddress(address);\n      await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n      const placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'ad_hoc');\n      const placeNorm = placeSerializer.normalizeResponse(store, placeModelClass, placeResponse, placeResponse.data.id, 'createRecord');\n      const placeRecord = store.push(placeNorm);\n      return placeRecord;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/ajax\", [\"exports\", \"ember-ajax/services/ajax\", \"adept-iq/config/api-urls\"], function (_exports, _ajax, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  const delay = ms => new Promise(resolve => setTimeout(resolve, ms));\n\n  var _default = _ajax.default.extend({\n    activityId: null,\n    // We need to set a host so that the underlying methods will consume the headers map\n    //  for everything that goes to any IQ endpoint.  Since it's just comparing hosts (not full URL),\n    //  we can use any host from the API map.  Since config service should be present all the time,\n    //  use it.\n    host: _apiUrls.API.configService.host,\n\n    setActivityId(aid) {\n      this.set('activityId', aid);\n    },\n\n    headers: Ember.computed('activityId', function () {\n      const aid = this.get('activityId');\n      const result = aid ? {\n        'AIQ-Client-Activity-ID': aid\n      } : {};\n      return result;\n    }),\n\n    /**\n     * by default retry the api 2 more times\n     * @param url\n     * @param retries\n     * @param delayTime\n     * @returns {*}\n     */\n    retryGet(url, alternateURL) {\n      let retries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;\n      let delayTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      let getURL = url;\n\n      if (retries === 1) {\n        getURL = alternateURL;\n      }\n\n      return this.request(getURL, {\n        method: 'GET'\n      }).catch(error => {\n        if (retries === 0) {\n          throw new Error(error);\n        }\n\n        return delay(delayTime).then(() => {\n          return this.retryGet(url, alternateURL, retries - 1, delayTime);\n        });\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/api-context\", [\"exports\", \"lodash\", \"moment\"], function (_exports, _lodash, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const MAX_QUERY_PARAMETER_LIMIT = 800; // segment-stop-phone-number is fetched with an IN(...) filter plus include=segmentStop, which\n  // makes a single large batch expensive enough on the booking service to hit a 504 gateway timeout.\n  // Use a smaller batch size than the 414-avoidance limit above so this splits into several fast queries.\n\n  const MAX_SEGMENT_STOP_PHONE_QUERY_LIMIT = 150;\n\n  var _default = Ember.Service.extend(Ember.Evented, {\n    booking: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    externalRiderSystemToken: null,\n\n    async loadSubscriptionsForSelectedExternalRiders() {\n      return new Promise(async (resolve, reject) => {\n        try {\n          const selectedRiders = this.get('booking.selectedRiders');\n          const selectedIds = selectedRiders.map(r => r.get('riderId'));\n          const ridersIdsClause = selectedIds.map(r => `'${r}'`).join(',');\n          this.get('workspace').set('isGlobalSpinnerVisible', true);\n          const ridersQuery = `in(riderId,(${ridersIdsClause}))&include=phoneNumbers`;\n          const riders = await this.get('store').query('rider', {\n            filter: ridersQuery\n          });\n\n          if (Ember.isBlank(riders)) {\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n            resolve([]);\n          }\n\n          const riderIDs = riders.map(function (a) {\n            return a.get('id');\n          });\n          const riderIdsInClause = riderIDs.map(r => `'${r}'`).join(',');\n          const subscriptionsByRiderIdQuery = `in(riderId,(${riderIdsInClause}))&include=travelNeeds,exclusions,recurrencePatterns,originPhoneNumber,destinationPhoneNumber`;\n          const subscriptions = await this.get('store').query('subscription', {\n            filter: subscriptionsByRiderIdQuery\n          });\n          const subscriptionIds = subscriptions.map(s => s.get('id'));\n          const allPlaceIds = subscriptions.map(s => [s.get('origin.id'), s.get('destination.id')]);\n\n          const placeIds = _lodash.default.flatMap(allPlaceIds);\n\n          const unipIds = _lodash.default.uniq(placeIds);\n\n          const placeIdsInClause = unipIds.map(p => `'${p}'`).join(',');\n          const subscriptionIdsInClause = subscriptionIds.map(p => `'${p}'`).join(',');\n          const placesQuery = `in(id,(${placeIdsInClause}))&include=address,location`;\n          const subscriptionQuery = `in(subscriptionId,(${subscriptionIdsInClause}))&include=subscription`;\n          await this.get('store').query('place', {\n            filter: placesQuery\n          });\n          await this.get('store').query('subscription-service-need', {\n            filter: subscriptionQuery\n          });\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          resolve(subscriptions);\n        } catch (e) {\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          reject(e);\n        }\n      });\n    },\n\n    async loadBookingsForSelectedExternalRiders() {\n      const selectedRiders = this.get('booking.selectedRiders');\n      const selectedIds = selectedRiders.map(r => r.get('id'));\n      const selectedRiderIds = selectedRiders.map(r => r.get('riderId'));\n      let bookingIDs = [];\n      let riderIDs = [];\n      let riderQuery;\n      const ridersIdsClause = selectedRiderIds.map(r => `'${r}'`).join(',');\n      return new Promise(async (resolve, reject) => {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n        try {\n          //NYAAR-18860 (fixing - travel needs is undefined(external API call issue))\n          await this.get('booking').fetchExternalRidersAndSetToSelectedRiders(selectedIds);\n          riderQuery = `in(riderId,(${ridersIdsClause}))`;\n          const riders = await this.get('store').query('rider', {\n            filter: riderQuery\n          });\n\n          if (Ember.isBlank(riders)) {\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n            resolve([[], []]); // first is bookings and second is trips\n\n            return;\n          }\n\n          riderIDs = riders.map(function (a) {\n            return a.get('id');\n          });\n          const riderIdsInClause = riderIDs.map(r => `'${r}'`).join(',');\n          const bookingByRiderID = `in(legs.rider,(${riderIdsInClause}))&include=group,legs,legs.segments,legs.legTravelNeeds,legs.segments.pick,legs.segments.drop,subscription,cancellation&fields[booking]=id,status`;\n          const bookings = await this.get('store').query('booking', {\n            filter: bookingByRiderID\n          });\n          let legsId = bookings.map(function (bkng) {\n            return bkng.get('legs').map(leg => leg.get('id'));\n          });\n          legsId = _lodash.default.flatten(legsId);\n          const legIds = legsId.filter(l => Ember.isPresent(l)).map(l => `'${l}'`);\n          await this.getLegServiceNeed(legIds);\n          let segmentStopsId = bookings.map(function (bkng) {\n            return bkng.get('legs').map(function (leg) {\n              const segmentStops = leg.get('segment.stops');\n\n              if (Ember.isPresent(segmentStops)) {\n                return segmentStops.map(stop => stop.get('id'));\n              }\n\n              return null;\n            });\n          });\n          segmentStopsId = _lodash.default.flattenDeep(segmentStopsId);\n          const segmentStopsIds = segmentStopsId.filter(segmentStopId => Ember.isPresent(segmentStopId)).map(s => `'${s}'`);\n          await this.getSegmentStopPhoneNumber(segmentStopsIds);\n          bookingIDs = bookings.map(function (bkng) {\n            return bkng.get('id');\n          });\n          let placeIds = '';\n          bookings.forEach(booking => {\n            const legsInBooking = booking.get('legs');\n            legsInBooking.forEach(leg => {\n              const segmentsInLeg = leg.get('segments');\n              segmentsInLeg.forEach(segment => {\n                if (Ember.isPresent(segment.get('pick.place.id'))) {\n                  placeIds = placeIds + segment.get('pick.place.id') + ',';\n                }\n\n                if (Ember.isPresent(segment.get('drop.place.id'))) {\n                  placeIds = placeIds + segment.get('drop.place.id') + ',';\n                }\n              });\n            });\n          });\n          const query = 'in(\\'id\\',(' + placeIds.slice(0, placeIds.length - 1) + '))&include=address,location';\n          await this.store.query('place', {\n            filter: query\n          });\n\n          for (const booking of bookings.toArray()) {\n            if (booking.get('isGroupBooking')) {\n              const bookin = await this.get('store').findRecord('booking', booking.get('id'));\n              const legs = bookin.get('legs');\n              const allRiderIds = legs.map(leg => {\n                return leg.get('rider.id');\n              });\n\n              const riderIds = _lodash.default.uniq(allRiderIds).filter(rId => rId); // unpersisted record will have null\n\n\n              const allRiders = await this.get('booking').fetchAndReturnRiders(riderIds);\n              const riderExternalIds = allRiders.map(r => r.get('id'));\n              await this.get('booking').fetchExternalRidersAndSetToSelectedRiders(riderExternalIds);\n            }\n          }\n\n          const bookingIdsInClause = bookingIDs.map(bId => `'${bId}'`).join(',');\n\n          if (!Ember.isEmpty(bookingIdsInClause)) {\n            const bookingAndTrips = await this.loadDataOnBasiesOfTripID(null, bookingIdsInClause, bookings);\n            const filteredBookingAndTrips = this.filteredBookingAndTrips(bookingAndTrips);\n            resolve(filteredBookingAndTrips);\n          } else {\n            resolve([[], []]); // first is bookings and second is trips\n          }\n\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n        } catch (error) {\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          reject(error);\n        }\n      });\n    },\n\n    async getSegmentStopPhoneNumber(segmentStopIds) {\n      // Batch below MAX_SEGMENT_STOP_PHONE_QUERY_LIMIT so a rider with many legs splits into several\n      // small, fast queries instead of one large one that times out on the booking service.\n      // include=segmentStop is intentionally omitted: the segment stops are already loaded in the\n      // store from the booking query, so the belongsTo resolves without sideloading them again.\n      if (segmentStopIds.length > MAX_SEGMENT_STOP_PHONE_QUERY_LIMIT) {\n        //splitting the given array using given size\n        const splittedSegmentStopIds = _lodash.default.chunk(segmentStopIds, MAX_SEGMENT_STOP_PHONE_QUERY_LIMIT);\n\n        await splittedSegmentStopIds.reduce((acu, segmentStopIdValues) => {\n          return acu.then(async () => {\n            const segmentStopIdsInClause = segmentStopIdValues.join(',');\n            const segmentStopPhoneNumberById = `in(segmentStopId,(${segmentStopIdsInClause}))`;\n            await this.queryModelData('segment-stop-phone-number', segmentStopPhoneNumberById);\n          });\n        }, Promise.resolve());\n        return;\n      }\n\n      const segmentStopIdsInClause = segmentStopIds.join(',');\n      const segmentStopPhoneNumberById = `in(segmentStopId,(${segmentStopIdsInClause}))`;\n      await this.queryModelData('segment-stop-phone-number', segmentStopPhoneNumberById);\n    },\n\n    async getLegServiceNeed(legIds) {\n      //when the query parameters are more than 800(i.e exactly 847) we will get 414 status error,so split them into parts\n      if (legIds.length > MAX_QUERY_PARAMETER_LIMIT) {\n        //splitting the given array using given size\n        const splittedLegIds = _lodash.default.chunk(legIds, MAX_QUERY_PARAMETER_LIMIT);\n\n        await splittedLegIds.reduce((acu, legIdValues) => {\n          return acu.then(async () => {\n            const legIdsInClause = legIdValues.join(',');\n            const legServiceNeedByLegId = `in(legId,(${legIdsInClause}))&include=leg`;\n            await this.queryModelData('leg-service-need', legServiceNeedByLegId);\n          });\n        }, Promise.resolve());\n        return;\n      }\n\n      const legIdsInClause = legIds.join(',');\n      const legServiceNeedByLegId = `in(legId,(${legIdsInClause}))&include=leg`;\n      await this.queryModelData('leg-service-need', legServiceNeedByLegId);\n    },\n\n    //fetching model using query\n    async queryModelData(modelName, query) {\n      await this.get('store').query(modelName, {\n        filter: query\n      });\n    },\n\n    // planned end of a trip: the drop's planned ETA, falling back to the pick's planned\n    // ETA, the promise time and finally the leg's request time for unscheduled trips.\n    // Deliberately not trip.tripEndTime / routeTripEndTime -- those resolve to the\n    // promise time or the whole route's end (e.g. midnight of the next day).\n    getTripPlannedEndTime(trip) {\n      return Ember.get(trip, 'drop.plannedEta') || Ember.get(trip, 'pick.plannedEta') || Ember.get(trip, 'promiseTime') || Ember.get(trip, 'segment.leg.requestTime');\n    },\n\n    filteredBookingAndTrips(bookingAndTrips) {\n      const now = (0, _moment.default)();\n      const [bookings, trips] = bookingAndTrips; // a trip is current until its planned drop has passed, then it is past\n\n      const isPastTrip = trip => {\n        const endTime = this.getTripPlannedEndTime(trip);\n        return Ember.isPresent(endTime) && (0, _moment.default)(endTime).isBefore(now);\n      };\n\n      const tripsByBookingId = _lodash.default.groupBy(trips.toArray ? trips.toArray() : trips, trip => `${Ember.get(trip, 'booking.id')}`);\n\n      const filteredCurrentBookings = [];\n      const filteredPastBookings = [];\n      bookings.forEach(booking => {\n        // a booking shows under Current Bookings while any of its trips is still to be\n        // completed, and under Past Bookings once any of its trips is done; a booking with\n        // a completed trip and an upcoming return trip therefore appears under both filters\n        const bookingTrips = tripsByBookingId[`${Ember.get(booking, 'id')}`] || [];\n        const tripEndTimes = bookingTrips.map(trip => this.getTripPlannedEndTime(trip)); // no trips loaded for the booking, or a trip with no time at all (e.g. a waitlisted\n        // trip whose leg hasn't resolved) -- fall back to the legs' request times so the\n        // booking isn't dropped from both filters\n\n        const legRequestTimes = Ember.isEmpty(bookingTrips) || tripEndTimes.some(Ember.isBlank) ? (Ember.get(booking, 'legs') || []).map(leg => Ember.get(leg, 'requestTime')) : [];\n        const knownEndTimes = tripEndTimes.concat(legRequestTimes).filter(Ember.isPresent);\n\n        if (knownEndTimes.some(time => !(0, _moment.default)(time).isBefore(now))) {\n          filteredCurrentBookings.push(booking);\n        }\n\n        if (knownEndTimes.some(time => (0, _moment.default)(time).isBefore(now))) {\n          filteredPastBookings.push(booking);\n        }\n      });\n      const currentBookingIds = filteredCurrentBookings.map(booking => `${Ember.get(booking, 'id')}`);\n      const pastBookingIds = filteredPastBookings.map(booking => `${Ember.get(booking, 'id')}`);\n      const filteredCurrentTrips = [];\n      const filteredPastTrips = [];\n      trips.forEach(trip => {\n        const bookingId = Ember.get(trip, 'booking.id');\n        const isPastDatedTrip = isPastTrip(trip);\n\n        if (Ember.isPresent(bookingId) && (currentBookingIds.includes(`${bookingId}`) || pastBookingIds.includes(`${bookingId}`))) {\n          // trips follow their booking whole: whichever filter lists the booking\n          // shows all of its legs, past-dated and future alike\n          if (currentBookingIds.includes(`${bookingId}`)) {\n            filteredCurrentTrips.push(trip);\n          }\n\n          if (pastBookingIds.includes(`${bookingId}`)) {\n            filteredPastTrips.push(trip);\n          }\n\n          return;\n        } // trips whose booking isn't in the result set fall back to their own planned end time\n\n\n        if (isPastDatedTrip) {\n          filteredPastTrips.push(trip);\n        } else {\n          filteredCurrentTrips.push(trip);\n        }\n      });\n      const result = [filteredCurrentBookings, filteredCurrentTrips];\n      result.pastBookings = filteredPastBookings;\n      result.pastTrips = filteredPastTrips;\n      return result; // const filteredCurrentBookings = bookings.filter(booking => {\n      //   const tripStartTime = moment(booking.tripStartTime).format('YYYY-MM-DD');\n      //   return moment(tripStartTime).isAfter(currentDate) || moment(tripStartTime).isSame(currentDate);\n      // });\n      // const filteredCurrentTrips = trips.filter(trip => {\n      //   const tripStartTime = moment(trip.tripStartTime).format('YYYY-MM-DD');\n      //   return moment(tripStartTime).isAfter(currentDate) || moment(tripStartTime).isSame(currentDate);\n      // });\n      // return [filteredCurrentBookings, filteredCurrentTrips];\n    },\n\n    filteredPastSubscriptionRecords(subscriptions) {\n      const currentDate = (0, _moment.default)().format('YYYY-MM-DD');\n      return subscriptions.filter(booking => {\n        const endDate = (0, _moment.default)(booking.endDate).format('YYYY-MM-DD');\n        return (0, _moment.default)(endDate).isAfter(currentDate) || (0, _moment.default)(endDate).isSame(currentDate);\n      });\n    },\n\n    loadDataOnBasiesOfTripID(bookingTripIds, bookingSearchIds, alreadyFetchedbookings) {\n      let segmentIds = []; // let bookingIDs = [];\n\n      let riderIDs = [];\n      let tripIds = [];\n      return new Promise(async (resolve, reject) => {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n        try {\n          let tripsByBookingID = [];\n\n          if (!Ember.isEmpty(bookingSearchIds)) {\n            tripsByBookingID = `and(eq(schedule.type,'primary'),in(booking,(${bookingSearchIds})))&include=schedule,route,pick,drop`;\n          } else {\n            tripsByBookingID = `and(eq(schedule.type,'primary'),in(booking,eq(id,'${bookingTripIds}')(&include=schedule,route,pick,drop`;\n          }\n\n          const trips = await this.get('store').query('trip', {\n            filter: tripsByBookingID\n          });\n\n          if (Ember.isBlank(trips)) {\n            resolve([alreadyFetchedbookings, []]);\n            this.get('workspace').set('isGlobalSpinnerVisible', false);\n          }\n\n          tripIds = trips.map(function (trp) {\n            return trp.get('id');\n          });\n          const tripIdStrArray = tripIds.map(t => `'${t}'`).join(',');\n          segmentIds = trips.map(function (a) {\n            return a.get('segment.id');\n          }); // bookingIDs = trips.map(function(a) {\n          //   return a.get('booking.id');\n          // });\n\n          const stopByTripId = `in(trip,(${tripIdStrArray}))&include=cluster.dispatchRoute`;\n          await this.get('store').query('stop-point', {\n            filter: stopByTripId\n          }); // const bookingByBookingID = `and(in(id,(${bookingIDs.toString()})),eq(cancellationId,null))&include=legs,legs.legTravelNeeds,legs.segments,legs.segments.pick,legs.segments.drop,`;\n\n          /*const bookings = await this.get('store').query('booking', {\n            filter: bookingByBookingID\n          });*/\n\n          riderIDs = trips.map(function (a) {\n            return a.get('rider.id');\n          }); // some riderIds return undefined following is to remove them\n\n          riderIDs = riderIDs.filter(r => !!r); // some riderIds return duplicate ids so uniq them;\n\n          riderIDs = _lodash.default.uniq(riderIDs);\n          const segmentBysegmentID = `in(id,(${segmentIds.toString()}))&include=pick,drop`;\n          const segments = await this.get('store').query('segment', {\n            filter: segmentBysegmentID\n          });\n          const pickPlaceIDs = segments.map(function (a) {\n            return a.get('stops.0.place.id');\n          });\n          const dropPlaceIDs = segments.map(function (a) {\n            return a.get('stops.1.place.id');\n          });\n          let placeIDs = pickPlaceIDs.concat(dropPlaceIDs); // some segment-stops are returnin null, following is to remove them\n\n          placeIDs = placeIDs.filter(placeId => !!placeId);\n          const placeByPlaceID = `in(id,(${placeIDs.toString()}))&include=address,location`;\n          await this.get('store').query('place', {\n            filter: placeByPlaceID\n          });\n          const riderByRiderID = `in(id,(${riderIDs.toString()}))`;\n          await this.get('store').query('rider', {\n            filter: riderByRiderID\n          });\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          resolve([alreadyFetchedbookings, trips]);\n        } catch (error) {\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          reject(error);\n        }\n      });\n    },\n\n    getExportedSchedule(bookingDateTime) {\n      const schedules = this.get('store').peekAll('schedule');\n      const schedule = schedules.find(s => {\n        return s.get('start') <= bookingDateTime && bookingDateTime <= s.get('end');\n      });\n      if (!schedule) return;\n      return schedule;\n    },\n\n    getExportBookingPayload(bookingId, bookingDateTime) {\n      const schedule = this.getExportedSchedule(bookingDateTime);\n\n      if (schedule) {\n        return {\n          'data': {\n            'attributes': {\n              'schedulingMode': 'automatic'\n            },\n            'relationships': {\n              'schedule': {\n                'data': {\n                  'id': schedule.get('id'),\n                  'type': 'schedule'\n                }\n              }\n            },\n            'id': bookingId,\n            'type': 'booking'\n          }\n        };\n      }\n\n      return;\n    },\n\n    getSchedule() {\n      const schedules = this.get('store').peekAll('schedule');\n      const schedule = schedules.find(s => {\n        return s.get('start') <= new Date() && new Date() <= s.get('end');\n      });\n      if (!schedule) return;\n      return schedule;\n    },\n\n    getSameDayBookingPayload(bookingId) {\n      const schedule = this.getSchedule();\n\n      if (schedule) {\n        return {\n          'data': {\n            'attributes': {\n              'schedulingMode': 'automatic'\n            },\n            'relationships': {\n              'schedule': {\n                'data': {\n                  'id': schedule.get('id'),\n                  'type': 'schedule'\n                }\n              }\n            },\n            'id': bookingId,\n            'type': 'booking'\n          }\n        };\n      }\n\n      return;\n    },\n\n    async getTripsForRider(riderId, validStatuses, schedule) {\n      const store = this.get('store');\n      const validStatusArray = validStatuses.map(validStatus => `%27${validStatus}%27`);\n      const validStatusInArray = validStatusArray.join(',');\n      const tripFilter = `and(eq(passengerPk,${riderId}),in(tripStatus,(${validStatusInArray})))`;\n      const widgetService = this.get('widgetService');\n      const modelName = 'tripWidget';\n      const offset = 0;\n      const limit = 10;\n      const dateQueryFields = {\n        startDateUTC: schedule.get('start').toISOString(),\n        endDateUTC: null\n      };\n      const selectedProviders = widgetService.getAllProviders();\n      const tripWidgets = await widgetService.requestWidgetApi(null, modelName, tripFilter, offset, limit, null, dateQueryFields, selectedProviders); // Batched: one in(id,(…)) query instead of N per-trip findRecords. These are a\n      // rider's history trips (not the workspace's loaded trips), so the findRecords were\n      // N network calls; store.query collapses them into one round-trip.\n\n      const tripIds = [...new Set(tripWidgets.map(trip => trip.id).filter(Ember.isPresent).map(id => String(id)))];\n      const riderTrips = tripIds.length ? await store.query('trip', {\n        filter: `in(id,(${tripIds.map(id => `'${id}'`).join(',')}))`\n      }) : [];\n      return riderTrips;\n    },\n\n    async updateTripsFromIQUXService(trips) {\n      const store = this.get('store');\n      let include = `subscription,\n      booking,\n      booking.cancellation,\n      segment,\n      pick,\n      drop,\n      pick.segmentStop,\n      pick.segmentStop.place,\n      pick.segmentStop.place.address,\n      pick.segmentStop.place.location,\n      drop.segmentStop,\n      drop.segmentStop.place,\n      drop.segmentStop.place.address,\n      drop.segmentStop.place.location,\n      segment.leg,\n      segment.leg.travelNeeds,\n      segment.leg.serviceNeeds,\n      stopPoints,\n      stopPoints.cluster,\n      stopPoints.cluster.dispatchRoute,\n      stopPoints.cluster.dispatchRoute.route,\n      stopPoints.cluster.dispatchSchedule,\n      schedule,\n      routeAssignments,\n      routeAssignments.route,\n      routeAssignments.trip`;\n      include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      return trips.map(async trip => {\n        const tripIsDeleted = trip.get('isDeleted');\n\n        if (!tripIsDeleted) {\n          const currTrip = await store.findRecord('trip', trip.get('id'), {\n            include\n          }).catch(e => {\n            console.log(`missing trip from iqux service ${e.message}`); // eslint-disable-line no-console\n\n            return null;\n          });\n\n          if (!Ember.isBlank(currTrip) && trip.get('booking.isSameDayBooking')) {\n            const schedule = currTrip.get('schedule');\n            const widgetService = this.get('widgetService');\n            const modelName = 'tripWidget';\n            const offset = 0;\n            const limit = 10;\n            const dateQueryFields = {\n              schedulePk: schedule.get('id'),\n              startDateUTC: schedule.get('start').toISOString(),\n              endDateUTC: schedule.get('end').toISOString()\n            };\n            const selectedProviders = widgetService.getAllProviders();\n            const filter = `eq(id,${trip.get('id')})`;\n            const tripWidgets = await widgetService.requestWidgetApi(null, modelName, filter, offset, limit, null, dateQueryFields, selectedProviders);\n            const tripWidget = tripWidgets[0];\n\n            if (!Ember.isBlank(tripWidget)) {\n              trip.set('sdbRouteName', tripWidget.routeName);\n              trip.set('status', tripWidget.tripStatus);\n              trip.set('drop.sdbPlannedEta', tripWidget.dropEta);\n            }\n\n            const stopPointModelName = 'stopWidget';\n            const pickStopPointId = trip.get('pickStopPoint.id');\n\n            if (!Ember.isBlank(pickStopPointId)) {\n              const stopPointFilter = `eq(stopPointPk,'${pickStopPointId}')`;\n              const stopWidgets = await widgetService.requestWidgetApi(null, stopPointModelName, stopPointFilter, offset, limit, null, dateQueryFields, selectedProviders);\n              const stopWidget = stopWidgets[0];\n\n              if (!Ember.isBlank(stopWidget)) {\n                trip.set('pickStopPoint.status', stopWidget.status);\n              }\n            }\n          }\n        }\n\n        return new Promise(function (resolve) {\n          resolve();\n        });\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/audio-alert\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    //audio attributes\n    audioElement: null,\n    enabled: true,\n    lastPlayed: 0,\n\n    async loadConfig() {\n      const configItemId = 'config-Notification_Banners-Emergency/emergency_audio';\n      const configItem = await this.get('store').findRecord('cs-config-item', configItemId);\n      const {\n        fileId,\n        enabled\n      } = configItem.value;\n      if (!fileId) return;\n      const fileRecord = await this.get('store').findRecord('cs-config-file', fileId);\n      const encoded = fileRecord.get('encoded');\n\n      if (encoded) {\n        this.set('audioElement', new Audio(encoded.replace('data:audio/wave', 'data:audio/wav')));\n        this.set('enabled', enabled !== false);\n      }\n    },\n\n    async reloadConfig() {\n      await this.loadConfig();\n    },\n\n    playAlert() {\n      const enabled = this.get('enabled');\n      const audioElement = this.get('audioElement');\n      if (!enabled || !audioElement) return;\n      this.set('audioElement.currentTime', 0);\n      this.get('audioElement').play();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/booking\", [\"exports\", \"adept-iq/classes/json-api-serializer/JSONAPISerializer\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/utils/zone-validation\", \"adept-iq/config/api-urls\", \"moment\", \"lodash\", \"adept-iq/classes/rules/itinerary-type\", \"adept-iq/classes/rules/trip-type\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/mixins/async-booking-operation\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/config-object-template\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-status\", \"adept-iq/config/itinerary-action\", \"ember-concurrency\", \"adept-iq/models/rider-phone-number\"], function (_exports, _JSONAPISerializer, _unwrapProxy, _zoneValidation, _apiUrls, _moment, _lodash, _itineraryType, _tripType, _asyncScheduleOperation, _asyncBookingOperation, _mappedPermIds, _configObjectTemplate, _environment, _mappedStatus, _itineraryAction, _emberConcurrency, _riderPhoneNumber) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  const WEATHER_API = `https://api.weather.gov/gridpoints/${_environment.default.weatherAPI.office}/${_environment.default.weatherAPI.gridx},${_environment.default.weatherAPI.gridy}/forecast`;\n  const WEATHER_WITHOUT_HOURLY_API = `https://api.weather.gov/gridpoints/${_environment.default.weatherAPI.office}/${_environment.default.weatherAPI.gridx},${_environment.default.weatherAPI.gridy}/forecast/hourly`;\n\n  const generateUUID = () => '_' + Math.random().toString(36).substr(2, 9);\n\n  const TRAVEL_NEEDS_VERIFY = ['pca', 'serviceAnimal'];\n  const PCA = 'PCA';\n  const COMPANION = 'COMPANION';\n  const BUS_TYPE = 'bus';\n  const MAX_PHONE_NUMBER_LENGTH = 10;\n  const DANCHORSUB_SERVICE_TYPE = 'DAnchorSub';\n  const ITP_TRAVEL_MODE = 'itp';\n  const PARATRANSIT_TRAVEL_MODE = 'paratransit';\n  const CERTIFICATION_LOCATION = 'certification_location';\n  const MAX_WALKING_DISTANCE_VALUE = 500;\n  const COMPANION_TRAVEL_NEED_TYPE = 'companion';\n  const PCA_TRAVEL_NEED_TYPE = 'pca';\n  const SERVICE_TYPE_GENERAL = '1';\n  const CALLBACK_BOOKINGMODE_TYPE = 'Callback';\n\n  const FARE_CALCULATION_TYPE = _configObjectTemplate.default['config-System_Configuration-travel_need_types'].fields.find(field => field.fieldName === 'fareCalculationType');\n\n  var _default = Ember.Service.extend(_asyncScheduleOperation.default, _asyncBookingOperation.default, {\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    fareCalc: Ember.inject.service(),\n    map: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    serializer: null,\n    activeBooking: null,\n    activeDragPlace: null,\n    activeLegsInBooking: null,\n    segmentStopIdCount: 0,\n    legTravelNeedIdCount: 0,\n    legServiceNeedIdCount: 0,\n    legIdCount: 0,\n    selectedRiders: null,\n    // used for add/edit bookings\n    currentBookings: null,\n    // show the selected bookings in the bookings widget\n    currentTrips: null,\n    futureBookings: null,\n    // show the future bookings (include SDB) in the bookings widget\n    futureTrips: null,\n    pastBookings: null,\n    // show the past bookings in the bookings widget\n    pastTrips: null,\n    filteredCurrentTrips: null,\n    // show the bookings in the bookings widget\n    currentSubscriptions: null,\n    // show the subscriptions in the bookings widget\n    hasMoreExternalRiders: false,\n    //  plug moreResuts field that comes from nyct when we search\n    selectedCompanionCount: 0,\n    isOpenErrorModal: false,\n    errorMessage: null,\n    canSave: true,\n    setMarkerPinOff: false,\n    riderIdToConditionMap: null,\n    temporaryBookingResult: null,\n    tempBookingInfo: null,\n    tripIds: null,\n    enableNewPromiseTimeApi: true,\n    travelNeedItems: null,\n    anchorTypeOptions: null,\n    previousSubscriptionStartDate: null,\n    previousSubscriptionEndDate: null,\n    previousSubscriptionSuspendStartDate: null,\n    previousSubscriptionSuspendEndDate: null,\n    addressSelectType: null,\n    isReturnTrip: null,\n    isNotPromiseTime: null,\n    itpSegmentPromiseTimeResults: null,\n    passengerRowSelected: false,\n    isPassengerRowChecked: false,\n    copiedBookingRecord: null,\n    isAllLegs: true,\n    checkedRiders: null,\n    userBookingPermissionDetails: null,\n    tripDetails: null,\n    allLegs: null,\n    segmentStopPhoneNumberIds: null,\n    firstLegRequestTime: null,\n    overrideEligibility: false,\n    maxBookingDate: null,\n    travelNeedsOverride: false,\n    overrideTravelNeedsDetails: null,\n    isRiderPhoneNumberEdited: false,\n    bookingMap: null,\n    isEditingUnscheduledBooking: false,\n    isScheduleOverLap: false,\n    availableSchedules: null,\n    selectedSchedule: null,\n    legSchedule: null,\n    bookingEventMsg: null,\n    userEventMsg: null,\n    skipSetView: false,\n    bookingDisplayMode: null,\n    isViewOnlyMode: false,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('bookingDisplayMode', {\n        label: 'Current Bookings',\n        value: 'current'\n      });\n      this.set('currentBookings', []);\n      this.set('currentSubscriptions', []);\n      this.set('currentTrips', []);\n      this.set('futureBookings', []);\n      this.set('futureTrips', []);\n      this.set('pastBookings', []);\n      this.set('pastTrips', []);\n      this.set('filteredCurrentTrips', []);\n      this.set('selectedRiders', []);\n      this.set('selectedTravelModeMap', {}); // {<legId> : <travelMode>}\n\n      this.set('itpInfo', {\n        itpRequestResults: [],\n        itpResultType: {}\n      });\n      this.set('itpSegmentPromiseTimeResults', []);\n      this.set('tempBookingInfo', {});\n      this.set('anchorTypeOptions', [{\n        id: 'pick',\n        name: 'Pick'\n      }, {\n        id: 'drop',\n        name: 'Appt'\n      }]);\n      this.set('tripIds', []);\n      this.set('checkedRiders', []);\n      this.set('tripDetails', []);\n      this.set('overrideTravelNeedsDetails', []);\n      this.set('bookingEventMsg', '');\n      this.set('userEventMsg', '');\n      this.serializer = new _JSONAPISerializer.default(); // Register 'booking' type\n\n      this.serializer.register('booking', {\n        id: 'id',\n        relationships: {\n          legs: {\n            type: 'leg'\n          },\n          providerName: {\n            type: 'providerName'\n          }\n        }\n      });\n      this.serializer.register('leg', {\n        id: 'id',\n        relationships: {\n          segments: {\n            type: 'segment'\n          },\n          legTravelNeeds: {\n            type: 'legTravelNeed'\n          },\n          legServiceNeeds: {\n            type: 'legServiceNeed'\n          },\n          serviceWindowName: {\n            type: 'serviceWindowName'\n          },\n          fundingAgencyName: {\n            type: 'fundingAgencyName'\n          },\n          riderPhoneNumber: {\n            type: 'riderPhoneNumber'\n          },\n          tripPurposeName: {\n            type: 'tripPurposeName'\n          }\n        }\n      });\n      this.serializer.register('segment', {\n        id: 'id',\n        relationships: {\n          pick: {\n            type: 'segmentStop'\n          },\n          drop: {\n            type: 'segmentStop'\n          },\n          leg: {\n            type: 'leg'\n          },\n          fareTypeName: {\n            type: 'fareTypeName'\n          },\n          fareCategoryName: {\n            type: 'fareCategoryName'\n          }\n        }\n      });\n      this.serializer.register('legTravelNeed', {\n        id: 'id',\n        relationships: {\n          travelNeedTypeName: {\n            type: 'travelNeedTypeName'\n          },\n          leg: {\n            type: 'leg'\n          },\n          passengerTypeName: {\n            type: 'passengerTypeName'\n          }\n        }\n      });\n      this.serializer.register('legServiceNeed', {\n        id: 'id',\n        relationships: {\n          serviceNeedTypeName: {\n            type: 'serviceNeedTypeName'\n          },\n          leg: {\n            type: 'leg'\n          }\n        }\n      });\n      this.serializer.register('providerName', {\n        id: 'id'\n      });\n      this.serializer.register('travelNeedTypeName', {\n        id: 'id'\n      });\n      this.serializer.register('serviceNeedTypeName', {\n        id: 'id'\n      });\n      this.serializer.register('passengerTypeName', {\n        id: 'id'\n      });\n      this.serializer.register('serviceWindowName', {\n        id: 'id'\n      });\n      this.serializer.register('fundingAgencyName', {\n        id: 'id'\n      });\n      this.serializer.register('tripPurposeName', {\n        id: 'id'\n      });\n      this.serializer.register('fareTypeName', {\n        id: 'id'\n      });\n      this.serializer.register('fareCategoryName', {\n        id: 'id'\n      });\n      this.serializer.register('segmentStop', {\n        id: 'id'\n      });\n      this.serializer.register('place', {\n        id: 'id'\n      });\n      this.serializer.register('address', {\n        id: 'id'\n      });\n      this.serializer.register('location', {\n        id: 'id'\n      });\n      this.serializer.register('rider', {\n        id: 'id'\n      });\n      this.serializer.register('riderPhoneNumber', {\n        id: 'id'\n      });\n      this.setProperties({\n        pickDropCoordinatesOfLegs: [],\n        travelNeedItems: [],\n        segmentStopPhoneNumberIds: []\n      });\n      this.configureBookingPermission();\n    },\n\n    resetActivityLogMsg() {\n      this.set('bookingEventMsg', '');\n      this.set('userEventMsg', '');\n    },\n\n    appendActivityLogMsg(message) {\n      this.set('bookingEventMsg', this.get('bookingEventMsg') + ' ' + message);\n      this.set('userEventMsg', this.get('userEventMsg') + ' ' + message);\n    },\n\n    isTripOverlapAllowed: Ember.computed('permissionLayer.userPermissionHash', function () {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.overrideTripOverlap);\n    }),\n    noOfSelectedRiders: Ember.computed('selectedRiders', 'selectedRiders.[]', function () {\n      return this.get('selectedRiders.length');\n    }),\n    selectedRidersWithConditionalEligibility: Ember.computed('selectedRiders', 'selectedRiders.[]', function () {\n      const store = this.get('store');\n      return this.get('selectedRiders').filter(selectedRider => {\n        const rider = store.peekRecord('rider', selectedRider.id);\n        return rider.get('hasConditionalEligibilities');\n      });\n    }),\n\n    createOverlapActivityLogs(trips) {\n      const store = this.get('store');\n      const activityLogAdapter = store.adapterFor('activity-log');\n      const tripOverlap = this.get('tripOverlap');\n      const noOfTrips = trips.length;\n      if (Ember.isEmpty(tripOverlap)) return;\n      tripOverlap.overlaps.forEach((overlap, index) => {\n        if (!overlap.isOverlapping) return;\n        const adjustedIndex = index % noOfTrips;\n        const requestTime = tripOverlap.requestTimes[adjustedIndex];\n        const newTrip = trips.find(trip => {\n          const requestTimeString = requestTime ? requestTime.toString() : '';\n          return trip.get('segment.leg.requestTime').toString() === requestTimeString;\n        });\n        const tripId = overlap.trip ? overlap.trip.tripId : '';\n        const details = Ember.isPresent(tripId) ? `Overlapped with trip ${tripId} and overlap was overridden. Rider ${newTrip.get('rider.riderId')}.` : `Overlapped with another trip in the same booking and overlap was overridden. Rider ${newTrip.get('rider.riderId')}.`;\n\n        if (Ember.isPresent(newTrip)) {\n          const tripInfo = Ember.Object.create({\n            context: {\n              trip: newTrip\n            }\n          });\n          const tripActivityLog = {\n            details,\n            activity: 'Override Trip Overlap',\n            actualTime: (0, _moment.default)().toDate(),\n            type: 'genericLogging',\n            userId: this.session.data.authenticated.userId\n          };\n          const userInfo = {\n            content: tripActivityLog\n          };\n          const addUserActionType = true;\n          activityLogAdapter.createUserTripActivity(userInfo, tripInfo, addUserActionType);\n        }\n      });\n      this.set('tripOverlap');\n    },\n\n    async overlapCheck(rider, requestTimes, tripIds) {\n      const session = this.get('session');\n      const json = {\n        rider: rider,\n        requestTimes\n      };\n      const tripOverlap = await this.get('ajax').post(_apiUrls.API.schedulingService.host + '/trip-overlap-check', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n      const overlaps = tripOverlap.overlaps || [];\n      const noOfTrips = requestTimes.length;\n      overlaps.forEach((overlap, index) => {\n        const adjustedIndex = index % noOfTrips;\n        const trip = overlap.trip;\n        const leg = overlap.leg;\n\n        if (overlap.isOverlapping && (Ember.isPresent(leg) || Ember.isPresent(trip) && trip.id !== tripIds[adjustedIndex])) {\n          overlap.originalRequestTime = requestTimes[adjustedIndex];\n        } else {\n          overlap.isOverlapping = false;\n        }\n      });\n      tripOverlap.requestTimes = requestTimes;\n      this.set('tripOverlap', tripOverlap);\n      return tripOverlap;\n    },\n\n    async showOverlapWarningMessage(tripOverlap) {\n      const tooltip = this.get('tooltip');\n      const items = [];\n      const overrideLabel = this.get('isTripOverlapAllowed') ? 'Override' : '';\n      let overlapWithLegs = false;\n      let proceedOverlap = false;\n      tripOverlap.overlaps.forEach(overlap => {\n        const requestTime = (0, _moment.default)(overlap.originalRequestTime);\n\n        if (overlap.isOverlapping) {\n          if (Ember.isPresent(overlap.trip)) {\n            items.push(`Trip with request time ${requestTime.format(_environment.default.dateTimeFormat.timeMoment)} overlaps with an existing trip.`);\n          } else {\n            overlapWithLegs = true;\n            items.push(`Trip with request time ${requestTime.format(_environment.default.dateTimeFormat.timeMoment)} overlaps with another trip within this booking.`);\n          }\n        }\n      });\n\n      if (items.length === 0) {\n        proceedOverlap = true;\n      }\n\n      if (proceedOverlap) {\n        return true;\n      }\n\n      const subTips = {\n        header: overlapWithLegs ? 'If you proceed, there is a risk that trips will be scheduled out of order.' : '',\n        items\n      };\n      return new Promise(resolve => {\n        tooltip.pushConfirmation({\n          subTips: subTips,\n          title: 'IQ Booking',\n          class: 'booking-overlap-message',\n          hasOverlay: true,\n          primaryActionText: overrideLabel,\n          primaryAction: () => {\n            this.get('tooltip').reset();\n            resolve(true);\n          },\n          secondaryActionText: 'Cancel',\n          secondaryAction: () => {\n            this.set('tripOverlap');\n            this.get('tooltip').reset();\n            resolve(false);\n          },\n          closeAction: () => {\n            resolve(false);\n          }\n        });\n      });\n    },\n\n    subscriptionTripMessage() {\n      const message = this.get('tripIds.length') > 0 ? 'Are you sure you want to cancel the subscription trip(s)?' : 'Are you sure you want to delete this subscription?';\n      return message;\n    },\n\n    cancelSubscriptionMessage() {\n      const message = this.get('tripIds.length') > 0 ? 'Are you sure you want to cancel the subscription trip(s)?' : 'There are no trips selected, so no trips will be canceled for the subscription.  Are you sure you want to proceed?';\n      return message;\n    },\n\n    /**\n     *\n     * @param riderConditionResultMap\n     * @param filterFailedConditions : Boolean\n     */\n    getRiderIdToConditionsMap(riderConditionResultMap, filterFailedConditions) {\n      const legs = this.get('activeBooking.legs').toArray();\n      const selectedRidersWithConditionalEligibility = this.get('selectedRidersWithConditionalEligibility');\n      const conditionsInConfig = this.store.peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-System_Configuration-eligibility_conditions';\n      });\n      const allRiderIdToConditionMap = selectedRidersWithConditionalEligibility.reduce((result, r) => {\n        const riderId = r.get('id');\n        const rider = this.store.peekRecord('rider', riderId);\n        const riderEligibilityCategories = rider.get('riderEligibilities') || [];\n        const conditions = riderEligibilityCategories.toArray().filter(c => {\n          return conditionsInConfig.find(cConfig => {\n            return cConfig.get('data').name === c.get('eligibilityCondition.id');\n          });\n        });\n        const conditionMap = [];\n        legs.map(leg => {\n          const requestTime = leg.get('requestTime');\n          const conditionResultMap = riderConditionResultMap[riderId] || {};\n          conditions.map(c => {\n            const conditionName = c.get('eligibilityCondition.name');\n            const conditionResult = conditionResultMap[conditionName];\n            const conditionFrom = c.get('from');\n            const conditionTo = c.get('to');\n\n            if (requestTime > conditionFrom && requestTime < conditionTo) {\n              conditionMap.push({\n                conditionName: c.get('eligibilityCondition.displayName'),\n                from: c.get('formattedFrom'),\n                to: c.get('formattedTo'),\n                requestTime: (0, _moment.default)(requestTime).format('MM/DD/YYYY hh:mm A'),\n                result: (0, _lodash.isUndefined)(conditionResult) ? '-' : conditionResult\n              });\n            }\n          });\n        });\n        result[riderId] = conditionMap;\n        return result;\n      }, {});\n\n      if (!filterFailedConditions) {\n        return allRiderIdToConditionMap;\n      } //filter failed conditions riders and its result\n\n\n      const riderIdToConditionMap = (0, _lodash.reduce)(allRiderIdToConditionMap, (result, riderConditionList, riderId) => {\n        const failedConditionList = riderConditionList.filter(conditionResult => !conditionResult.result || conditionResult.result === 'Not Evaluated');\n\n        if (failedConditionList.length > 0) {\n          result[riderId] = failedConditionList;\n        }\n\n        return result;\n      }, {});\n      return riderIdToConditionMap;\n    },\n\n    async prepareBookingRawData(bookingRecord, bookingMode) {\n      const {\n        legsForAllRiders,\n        groupInfo\n      } = await this.prepareLegs(bookingRecord.get('legs'));\n      const bookingId = bookingRecord.get('id');\n      const providerName = this.prepareProvider(bookingRecord.get('provider'));\n      const loggingMeta = bookingRecord.get('loggingMeta');\n      const bookingPayload = {\n        loggingMeta,\n        status: bookingRecord.get('status'),\n        bookingMode,\n        providerName,\n        legs: legsForAllRiders,\n        groupMeta: groupInfo\n      };\n\n      if (Ember.isNone(providerName)) {\n        delete bookingPayload.providerName;\n      }\n\n      if (this.get('tempBookingInfo.tempBookingId')) {\n        bookingPayload.temporaryBookingId = this.get('tempBookingInfo.tempBookingId');\n      }\n\n      if (bookingId) {\n        bookingPayload.id = bookingId;\n      }\n\n      return bookingPayload;\n    },\n\n    prepareRider(riderRecord) {\n      const formattedDob = (0, _moment.default)(riderRecord.get('dateOfBirth')).format('YYYY-MM-DD');\n      const middleName = riderRecord.get('middleName');\n      return {\n        riderId: riderRecord.get('riderId'),\n        firstName: riderRecord.get('firstName'),\n        middleName: _lodash.default.isEmpty(middleName) ? null : middleName,\n        lastName: riderRecord.get('lastName'),\n        dateOfBirth: formattedDob,\n        notes: riderRecord.get('notes'),\n        serviceNeeds: riderRecord.get('serviceNeeds')\n      };\n    },\n\n    async prepareRiderPhoneNumber(riderRecord) {\n      const mainPhoneNumber = riderRecord.get('notificationPhoneNumbers').find(pNo => {\n        const type = Ember.isPresent(pNo.type) ? pNo.type.toLowerCase() : '';\n        return type === _riderPhoneNumber.MAIN_PHONE_TYPE;\n      });\n\n      if (!mainPhoneNumber) {\n        return null;\n      }\n\n      if (!mainPhoneNumber.description) {\n        mainPhoneNumber.description = '# AT TOP OF CLIENT SCREEN';\n      }\n\n      const riderPhoneNumber = this.getRiderMainPhoneNumber(riderRecord.id);\n      const riderPhoneId = riderPhoneNumber ? riderPhoneNumber.id : null; // if riderRecord doesn't contain the field, if it is empty by default value, we don't want to send these into the patch payload\n\n      const json = {\n        id: riderPhoneId,\n        areaCode: mainPhoneNumber.areaCode,\n        phoneNumber: mainPhoneNumber.phoneNumber,\n        extension: _lodash.default.isNil(mainPhoneNumber.extension) || _lodash.default.isEmpty(mainPhoneNumber.extension) ? null : mainPhoneNumber.extension,\n        description: mainPhoneNumber.description,\n        mobileCarrier: _lodash.default.isNil(mainPhoneNumber.mobileCarrier) || _lodash.default.isEmpty(mainPhoneNumber.mobileCarrier) ? null : mainPhoneNumber.mobileCarrier,\n        useForSMSNotifications: _lodash.default.isNil(mainPhoneNumber.useForSmsNotifications) ? null : mainPhoneNumber.useForSmsNotifications,\n        useForVoiceNotifications: _lodash.default.isNil(mainPhoneNumber.useForVoiceNotifications) ? null : mainPhoneNumber.useForVoiceNotifications\n      };\n\n      const returnValue = _lodash.default.omitBy(json, _lodash.default.isNull);\n\n      return returnValue;\n    },\n\n    prepareServiceWindowName(serviceWindow) {\n      return {\n        id: serviceWindow.get('name')\n      };\n    },\n\n    prepareFundingAgencyName(fundingAgency) {\n      return {\n        id: fundingAgency.get('name')\n      };\n    },\n\n    prepareTripPurposeName(tripPurpose) {\n      return {\n        id: tripPurpose.get('name')\n      };\n    },\n\n    prepareFareCategoryName(fareCategory) {\n      return {\n        id: fareCategory.get('id')\n      };\n    },\n\n    prepareFareTypeName() {\n      const fareTypes = this.store.peekAll('fare-type');\n      const fareType = fareTypes.filter(currFareType => {\n        return currFareType.get('id').includes('cash');\n      }).get('firstObject');\n      const id = fareType ? fareType.get('id') : fareTypes.get('firstObject');\n      return {\n        id: id\n      };\n    },\n\n    prepareProvider(providerRecord) {\n      if (Ember.isNone(providerRecord.get('id'))) {\n        return null;\n      }\n\n      return {\n        id: providerRecord.get('id')\n      };\n    },\n\n    prepareLegTravelNeeds(legTravelNeedRecords, legId) {\n      const travelNeedsRecords = this.filterPcaAndServiceAnimal(legTravelNeedRecords);\n      return travelNeedsRecords.map(legtneedRecord => {\n        const legTravelNeedIdCount = this.get('legTravelNeedIdCount') + 1;\n        this.set('legTravelNeedIdCount', legTravelNeedIdCount);\n        return {\n          id: `-${legTravelNeedIdCount}`,\n          count: legtneedRecord.get('count'),\n          leg: {\n            id: `-${legId}`\n          },\n          travelNeedTypeName: {\n            id: legtneedRecord.get('travelNeedType.id')\n          },\n          passengerTypeName: {\n            id: legtneedRecord.get('passengerType.id')\n          }\n        };\n      });\n    },\n\n    async prepareLegServiceNeeds(legServiceNeedRecords, legId) {\n      return legServiceNeedRecords.map(lsnRecord => {\n        const legServiceNeedIdCount = this.get('legServiceNeedIdCount') + 1;\n        this.set('legServiceNeedIdCount', legServiceNeedIdCount);\n        return {\n          id: `-${legServiceNeedIdCount}`,\n          count: 1,\n          leg: {\n            id: `-${legId}`\n          },\n          serviceNeedTypeName: {\n            id: lsnRecord\n          }\n        };\n      });\n    },\n\n    filterPcaAndServiceAnimal(legTravelNeedRecords) {\n      if (!this.isCheckPca()) {\n        return legTravelNeedRecords.filter(ltr => {\n          return ltr.get('travelNeedType.name').toLowerCase() !== TRAVEL_NEEDS_VERIFY[0];\n        });\n      }\n\n      if (!this.isCheckServiceAnimal()) {\n        return legTravelNeedRecords.filter(ltr => {\n          return ltr.get('travelNeedType.name').toLowerCase() !== TRAVEL_NEEDS_VERIFY[1];\n        });\n      }\n\n      return legTravelNeedRecords;\n    },\n\n    createCloneLegTravelNeedRecord(cloneLegTravelNeed) {\n      const store = this.get('store');\n      const travelNeedType = (0, _unwrapProxy.unwrapProxy)(cloneLegTravelNeed.get('travelNeedType'));\n      const passengerType = (0, _unwrapProxy.unwrapProxy)(cloneLegTravelNeed.get('passengerType'));\n      const leg = (0, _unwrapProxy.unwrapProxy)(cloneLegTravelNeed.get('leg'));\n      const legTravelNeedAttr = cloneLegTravelNeed.toJSON();\n      const legTravelNeed = store.createRecord('leg-travel-need', legTravelNeedAttr);\n      legTravelNeed.set('travelNeedType', travelNeedType);\n      legTravelNeed.set('passengerType', passengerType);\n      legTravelNeed.set('leg', leg);\n      legTravelNeed.set('isCloned', true);\n      return legTravelNeed;\n    },\n\n    async prepareLegs(legRecords) {\n      const selectedRiders = this.get('selectedRiders');\n      const riderLegsTravelNeeds = this.get('activeBooking.riderLegsTravelNeeds'); // the per-rider structure\n\n      const legsForAllRiders = Ember.A();\n      const groupInfo = Array(legRecords.length).fill().map(() => []);\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n\n      for (let riderIndex = 0; riderIndex < selectedRiders.length; riderIndex++) {\n        const selectedRider = selectedRiders[riderIndex];\n        const rider = this.prepareRider(selectedRider);\n        const riderPhoneNumber = await this.prepareRiderPhoneNumber(selectedRider);\n        const riderTravelNeedBlock = riderLegsTravelNeeds[riderIndex];\n        const isAllLegs = riderTravelNeedBlock.isAllLegs;\n        const riderLegs = [];\n\n        for (let legIndex = 0; legIndex < legRecords.length; legIndex++) {\n          let travelNeedsForLeg = riderTravelNeedBlock.travelNeedLegs[legIndex]?.nonClonedTravelNeeds || [];\n\n          if (isAllLegs && legIndex !== 0) {\n            // clone from first leg's travel needs\n            const baseNeeds = riderTravelNeedBlock.travelNeedLegs[0]?.nonClonedTravelNeeds || [];\n            travelNeedsForLeg = baseNeeds.map(tr => this.createCloneLegTravelNeedRecord(tr));\n          } // group big seat types and merge their counts\n\n\n          const bigSeatTravelneeds = travelNeedsForLeg.filter(tr => bigSeatTRs.includes(tr.get('travelNeedTypeNameUppercase')) && !tr.get('isCloned') && tr.get('isNew'));\n          const uniqBigTns = {};\n          bigSeatTravelneeds.forEach(t => {\n            const type = t.get('travelNeedTypeNameUppercase');\n\n            if (!uniqBigTns[type]) {\n              uniqBigTns[type] = this.createCloneLegTravelNeedRecord(t);\n            } else {\n              uniqBigTns[type].set('count', parseInt(t.count, 10) + parseInt(uniqBigTns[type].count, 10));\n            }\n          });\n          const otherTravelNeeds = travelNeedsForLeg.filter(t => !bigSeatTRs.includes(t.get('travelNeedTypeNameUppercase')));\n          const allTravelNeeds = [...otherTravelNeeds, ...Object.values(uniqBigTns)];\n          const riderLeg = await this.prepareLeg(legRecords.objectAt(legIndex), allTravelNeeds, rider, riderPhoneNumber, riderTravelNeedBlock.travelNeedLegs[legIndex]);\n          groupInfo[legIndex].push(riderLeg.id);\n          riderLegs.push(riderLeg);\n        }\n\n        legsForAllRiders.pushObjects(riderLegs);\n      }\n\n      return {\n        legsForAllRiders,\n        groupInfo\n      };\n    },\n\n    async prepareLeg(leg, legTravelNeedRecords, rider, riderPhoneNumber, overrides) {\n      const legIdCount = this.incrementProperty('legIdCount');\n      const segments = await this.prepareSegments(leg.get('segments'), legIdCount, leg, rider, overrides);\n      const segmentList = await Promise.all(segments);\n      const serviceWindowName = this.prepareServiceWindowName(leg.get('serviceWindow'));\n      const legTravelNeeds = this.prepareLegTravelNeeds(this.filterConsumableTravelNeeds(legTravelNeedRecords), legIdCount, leg);\n      const legServiceNeeds = await this.prepareLegServiceNeeds(rider.serviceNeeds, legIdCount);\n      const fundingAgencyName = this.prepareFundingAgencyName(leg.get('fundingAgency'));\n      const tripPurposeName = this.prepareTripPurposeName(leg.get('tripPurpose'));\n      return {\n        id: `-${legIdCount}`,\n        requestTime: leg.get('requestTime'),\n        anchor: leg.get('anchor'),\n        purpose: leg.get('purpose'),\n        scheduleName: leg.get('scheduleName'),\n        segments: segmentList,\n        serviceWindowName,\n        fundingAgencyName,\n        rider,\n        riderPhoneNumber,\n        legTravelNeeds,\n        legServiceNeeds,\n        tripPurposeName\n      };\n    },\n\n    prepareSegments: async function (segmentRecords, legId, leg, rider, overrides) {\n      const fareForLeg = overrides?.segment.fare;\n      const fareCategoryForLeg = overrides?.segment.fareCategory;\n      const legSegments = segmentRecords;\n\n      if (this.canCreateItpSegment(legId)) {\n        const itpRequestResults = this.get('itpInfo.itpRequestResults');\n        const itpRequest = (0, _lodash.find)(itpRequestResults, itpResult => itpResult.legIndex === legId - 1);\n        const itinerarySegments = await this.createSegmentsForItp(leg, legId, itpRequest);\n        return itinerarySegments.map(async (segment, index) => {\n          const pickSegmentStop = await this.prepareSegmentStop(segment.get('pick'), 'pick', false, overrides.loadTime * 60);\n          const dropSegmentStop = await this.prepareSegmentStop(segment.get('drop'), 'drop', false, overrides.unloadTime * 60);\n          segment.set('legOrdinal', index + 1);\n          return this.prepareSegmentJson(segment, index, pickSegmentStop, dropSegmentStop, leg, legId, _tripType.ITP_TRIP, rider.riderId, fareForLeg, fareCategoryForLeg);\n        });\n      }\n\n      const firstSegment = legSegments.get('firstObject');\n      const lastSegment = legSegments.get('lastObject');\n      const pick = await this.prepareSegmentStop(firstSegment.get('pick'), 'pick', false, overrides.loadTime * 60); // there is only one segment in every leg\n\n      const drop = await this.prepareSegmentStop(lastSegment.get('drop'), 'drop', false, overrides.unloadTime * 60);\n      const segmentData = this.prepareSegmentJson(firstSegment, 0, pick, drop, leg, legId, _tripType.DEMAND_TRIP, rider.riderId, fareForLeg, fareCategoryForLeg);\n      return [segmentData];\n    },\n\n    prepareSegmentJson(segment, segmentIndex, pick, drop, leg, legId, segmentType, riderId, fareForLeg, fareCategoryForLeg) {\n      let segmentId = `-${legId}${segmentIndex + 1}`;\n      const legIndex = legId - 1;\n      const legID = segmentType === _tripType.ITP_TRIP ? leg.get('id') : `-${legId}`; //NYAAR-19302-if the travel mode is set as itp we have change that to paratransit travel mode\n\n      const travelMode = segment.get('travelMode') && segment.get('travelMode') !== ITP_TRAVEL_MODE ? segment.get('travelMode') : PARATRANSIT_TRAVEL_MODE;\n\n      if (this.get('tempBookingInfo.tempBookingId')) {\n        const tempLeg = this.get('tempBookingInfo.tempBookingRecord.legs').find(l => (0, _moment.default)(l.get('requestTime')).isSame((0, _moment.default)(leg.get('requestTime')), 'minute') && l.get('segment.rider.riderId') === riderId);\n\n        if (tempLeg) {\n          segmentId = tempLeg.get('segment.id');\n        }\n      }\n\n      return {\n        id: segmentId,\n        promiseTime: this.getPromiseTime(legIndex, leg.toJSON()),\n        anchor: leg.get('anchor'),\n        fare: fareForLeg ?? leg.get('segment.fare'),\n        fareCategoryName: this.prepareFareCategoryName(fareCategoryForLeg ?? leg.get('segment.fareCategory')),\n        travelMode: travelMode,\n        noSharing: leg.get('segment.noSharing'),\n        legOrdinal: segment.get('legOrdinal'),\n        segmentType: segmentType,\n        pick,\n        drop,\n        leg: {\n          id: legID ? legID : `-${legId}`\n        },\n        fareTypeName: this.prepareFareTypeName()\n      };\n    },\n\n    /**\n     * return true  if  travel model is selected as 'itp' and not a no_solution type\n     * @returns {boolean|*}\n     */\n    canCreateItpSegment(legId) {\n      const legIndex = legId - 1;\n      const itpRequestResults = this.get('itpInfo.itpRequestResults');\n      const itpRequest = (0, _lodash.find)(itpRequestResults, itpResult => itpResult.legIndex === legIndex);\n      if (!itpRequest) return false;\n      const itpResultType = itpRequest.result.type;\n      const selectedTravelMode = this.getSelectedTravelMode(legIndex);\n      const isSelectedTravelModeITP = selectedTravelMode === 'itp';\n      const isNotNoSolutionType = itpResultType !== _itineraryType.NO_SOLUTION;\n      return isSelectedTravelModeITP && isNotNoSolutionType;\n    },\n\n    prepareAddress(addressRecord, zoneName) {\n      const address = (0, _unwrapProxy.unwrapProxy)(addressRecord);\n      if (Ember.isNone(address)) return {};\n      const addressJson = address.toJSON();\n      return { ...addressJson,\n        streetNumber: addressJson.streetNumber,\n        zoneName: zoneName ? zoneName.toString() : '1'\n      };\n    },\n\n    async prepareSegmentStop(segmentStop, type, ignoreSegmentStopCount) {\n      let stopDwell = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n      const placeRecord = segmentStop.get('place');\n      const addressRecord = placeRecord.get('address');\n      const zoneName = addressRecord.get('zoneName.name');\n      const locationRecord = placeRecord.get('location');\n      const place = await this.preparePlace(addressRecord);\n      const segmentStopId = this.segmentStopIdCount + 1;\n\n      if (!ignoreSegmentStopCount) {\n        this.set('segmentStopIdCount', segmentStopId);\n      }\n\n      return {\n        id: `-${segmentStopId}`,\n        type,\n        dwell: stopDwell || segmentStop.get('dwell'),\n        place,\n        notes: segmentStop.get('notes'),\n        plannedEta: segmentStop.get('plannedEta'),\n        address: this.prepareAddress(addressRecord, zoneName),\n        location: this.prepareLocation(locationRecord)\n      };\n    },\n\n    prepareLocation(locationRecord) {\n      const location = (0, _unwrapProxy.unwrapProxy)(locationRecord);\n      if (Ember.isNone(location)) return {};\n      const lat = location.get('lat');\n      const lng = location.get('lng');\n      return {\n        lat: lat ? lat.toString() : null,\n        lng: lng ? lng.toString() : null,\n        geoNode: 0\n      };\n    },\n\n    async preparePlace(address) {\n      const placeQuery = `in(addressId,(${address.get('id')}))&include=address,location`;\n      const places = await this.store.query('place', {\n        filter: placeQuery\n      });\n      const placeCategoryTypeName = places.get('firstObject.placeCategoryType.name') ? places.get('firstObject.placeCategoryType.name') : 'passenger';\n      return {\n        placeCategoryTypeName: placeCategoryTypeName,\n        geocodingMethod: 'something'\n      };\n    },\n\n    async convertBookingRecordToPayloadFormat(bookingRecord) {\n      let bookingMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Immediate';\n      const bookingRawData = await this.prepareBookingRawData(bookingRecord, bookingMode);\n      this.setLoadAndUnloadTimeInSegmentStop(bookingRawData);\n      const jsonapi = this.serializer.serialize('booking', bookingRawData);\n      const payload = this.prepareFinalPayloadForBooking(jsonapi);\n      return payload;\n    },\n\n    resetAllEntityCounts() {\n      this.setProperties({\n        legIdCount: 0,\n        legTravelNeedIdCount: 0,\n        legServiceNeedIdCount: 0,\n        segmentStopIdCount: 0\n      });\n    },\n\n    async saveEditSegmentStop(segmentStop, place, stopType, legNumber, activeBooking, defaultLegSegment) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n      const addressType = stopType === 'pick' ? `${stopType}up` : `${stopType}off`;\n      const prevAddress = defaultLegSegment.get(`${stopType}PlaceAddress`);\n      const defaultNotes = defaultLegSegment ? defaultLegSegment.get(`${stopType}Notes`) : '';\n      let haveUpdates = false;\n\n      if (Ember.isNone(address.get('id'))) {\n        const beNomadAddress = address.get('beNomadAddress');\n        const lat = location.get('lat');\n        const lng = location.get('lng');\n        const geoNode = await this.getAddressGeoNode(lat, lng, beNomadAddress, addressType);\n\n        if (geoNode) {\n          const zone = store.peekRecord('zone-type', geoNode.zone.zoneName);\n          address.set('zName', zone.get('displayName'));\n          address.set('zoneName', zone);\n        } else {\n          address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n        }\n\n        if (Ember.isNone(place.get('id')) && (prevAddress.streetNumber !== address.get('streetNumber') || prevAddress.streetAddress !== address.get('streetAddress') || prevAddress.locality !== address.get('locality'))) {\n          place.set('geocodingMethod', '');\n          const message = `Leg ${legNumber} ${addressType} address changed from '${prevAddress.streetNumber}, ${prevAddress.streetAddress}, ${prevAddress.locality}' to '${address.get('streetNumber')}, ${address.get('streetAddress')}, ${address.get('locality')}'.`;\n          const addressResponse = await addressAdapter.postAddress(address);\n          const locationResponse = await locationAdapter.postLocation(location);\n          await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n          const placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n          const newPlace = await this.store.findRecord('place', placeResponse.data.id);\n          segmentStop.set('place', newPlace);\n          haveUpdates = true;\n          this.appendActivityLogMsg(message);\n        } else if (prevAddress.streetNumber !== address.get('streetNumber') || prevAddress.streetAddress !== address.get('streetAddress') || prevAddress.locality !== address.get('locality')) {\n          const addressResponse = await addressAdapter.postAddress(address);\n          const locationResponse = await locationAdapter.postLocation(location);\n          await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n          const message = `Leg ${legNumber} ${addressType} address changed from '${prevAddress.streetNumber}, ${prevAddress.streetAddress}, ${prevAddress.locality}' to '${address.get('streetNumber')}, ${address.get('streetAddress')}, ${address.get('locality')}'.`;\n          await placeAdapter.patchPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n          haveUpdates = true;\n          this.appendActivityLogMsg(message);\n        }\n      }\n\n      if (segmentStop.get('notes') !== defaultNotes) {\n        const message = `Leg ${legNumber} ${addressType} note changed from '${defaultNotes}' to '${segmentStop.get('notes')}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (haveUpdates) segmentStop.save();\n    },\n\n    async saveEditSegmentStopPhoneNumber(activeBooking, segmentStop, defaultLegSegment, stopType, legNumber) {\n      const addressType = stopType === 'pick' ? `${stopType}up` : `${stopType}off`;\n      const phoneNumbers = (0, _unwrapProxy.unwrapProxy)(segmentStop.get('phoneNumbers'));\n      const defaultPhoneNumber = defaultLegSegment ? defaultLegSegment.get(`${stopType}PhoneNumberAttr`) : '';\n      const prevAreaCode = defaultPhoneNumber.areaCode ? defaultPhoneNumber.areaCode : null;\n      const prevPhoneNumber = defaultPhoneNumber.phoneNumber ? defaultPhoneNumber.phoneNumber : null;\n      const prevCompletePhone = prevAreaCode ? `${prevAreaCode}-${prevPhoneNumber}` : '';\n      phoneNumbers.forEach(async phoneNumber => {\n        const message = `Leg ${legNumber} ${addressType} phone number changed from '${prevCompletePhone} to '${phoneNumber.get('areaCode')}-${phoneNumber.get('phoneNumber')}'.`;\n        const phoneId = phoneNumber.id;\n\n        if (Ember.isNone(phoneId)) {\n          await phoneNumber.save();\n          this.appendActivityLogMsg(message);\n        } else if (defaultPhoneNumber.areaCode !== phoneNumber.get('areaCode') || defaultPhoneNumber.phoneNumber !== phoneNumber.get('phoneNumber')) {\n          await phoneNumber.save();\n          this.appendActivityLogMsg(message);\n        }\n      });\n    },\n\n    createTravelNeedsActivityLogs(activeBooking, defaultTravelNeeds, currentLegTravelNeeds, defaultCompanionCount, legNumber) {\n      const defaultPCATravelNeed = defaultTravelNeeds.find(dTN => dTN.travelNeedTypeNameUppercase === PCA);\n      const currentPCATravelNeed = currentLegTravelNeeds.find(cTN => cTN.travelNeedTypeNameUppercase === PCA);\n      const currentCompanionTravelNeedModel = currentLegTravelNeeds.find(cTN => cTN.travelNeedTypeNameUppercase === COMPANION);\n      const currentCompanionTravelNeedCount = Ember.isPresent(currentCompanionTravelNeedModel) ? currentCompanionTravelNeedModel.get('count') : null;\n      const defaultTNNames = defaultTravelNeeds.map(dTN => dTN.travelNeedTypeNameUppercase).filter(name => name !== COMPANION && name !== PCA);\n      const currentTNNames = currentLegTravelNeeds.map(cTN => cTN.travelNeedTypeNameUppercase).filter(name => name !== COMPANION && name !== PCA);\n      const travelNeedsDiff = (0, _lodash.difference)(defaultTNNames, currentTNNames);\n      const defaultPCACount = Ember.isPresent(defaultPCATravelNeed) ? defaultPCATravelNeed.get('count') : 0;\n      const currentPCACount = Ember.isPresent(currentPCATravelNeed) ? currentPCATravelNeed.get('count') : 0;\n      const currentCompanionCount = Ember.isPresent(currentCompanionTravelNeedCount) ? currentCompanionTravelNeedCount : 0;\n      let haveUpdates = false;\n\n      if (travelNeedsDiff.length > 0 || currentLegTravelNeeds.length - defaultTravelNeeds.length !== 0) {\n        const message = `Leg ${legNumber} travel needs changed from '${defaultTNNames.join(',')}' to '${currentTNNames.join(',')}'.`;\n        this.appendActivityLogMsg(message);\n        haveUpdates = true;\n      }\n\n      if (defaultCompanionCount !== currentCompanionCount) {\n        const message = `Leg ${legNumber} companion value changed from'${defaultCompanionCount}' to '${currentCompanionCount}'.`;\n        this.appendActivityLogMsg(message);\n        haveUpdates = true;\n      }\n\n      if (defaultPCACount !== currentPCACount) {\n        const message = `Leg ${legNumber} PCA value changed from'${defaultPCACount}' to '${currentPCACount}'.`;\n        this.appendActivityLogMsg(message);\n        haveUpdates = true;\n      }\n\n      return haveUpdates;\n    },\n\n    async saveEditLeg(activeBooking, leg, defaultBookingData, legIndex) {\n      const legNumber = legIndex + 1;\n      const defaultLegSegment = defaultBookingData.get('legSegments').objectAt(legIndex);\n      const defaultTravelNeeds = defaultBookingData.get('travelNeedMapper')[legIndex] || [];\n      const companionCount = defaultBookingData.get('companionCountMapper')[legIndex] || 0;\n      const legTravelNeeds = leg.get('legTravelNeeds').toArray();\n      const removeLegTravelNeeds = [];\n      const currentAnchor = leg.get('anchor') === 'drop' ? 'appt' : leg.get('anchor');\n      const defaultRequestTimeMoment = (0, _moment.default)(defaultLegSegment ? defaultLegSegment.requestTime : '');\n      const currentRequestTimeMonent = (0, _moment.default)(leg.get('requestTime'));\n      const defaultReqDate = defaultRequestTimeMoment.format('MM/DD/YYYY');\n      const defaultReqTime = defaultRequestTimeMoment.format('h:mm A');\n      const currentReqDate = currentRequestTimeMonent.format('MM/DD/YYYY');\n      const currentReqTime = currentRequestTimeMonent.format('h:mm A');\n      const defaultServiceType = defaultLegSegment.get('serviceWindow.name');\n      const currentServiceType = leg.get('serviceWindow.name');\n      const defaultLoadTime = defaultLegSegment.get('loadTime');\n      const currentLoadTime = leg.get('loadTime');\n      const defaultUnloadTime = defaultLegSegment.get('unloadTime');\n      const currentUnloadTime = leg.get('unloadTime');\n      let defaultAnchor = defaultLegSegment ? defaultLegSegment.anchor : '';\n      let haveUpdates = false;\n      haveUpdates = haveUpdates || this.createTravelNeedsActivityLogs(activeBooking, defaultTravelNeeds, legTravelNeeds, companionCount, legNumber);\n      defaultAnchor = defaultAnchor === 'drop' ? 'appt' : defaultAnchor;\n      defaultTravelNeeds.forEach(removeTravelNeed => {\n        if (!legTravelNeeds.find(currTravelNeed => currTravelNeed.id === removeTravelNeed.id)) {\n          removeLegTravelNeeds.push(removeTravelNeed);\n        }\n      });\n      legTravelNeeds.forEach(legTravelNeed => {\n        const defaultTravelNeed = defaultTravelNeeds.find(travelNeed => travelNeed.travelNeedTypeName === legTravelNeed.travelNeedTypeName);\n\n        if (Ember.isNone(legTravelNeed.count) && this.isCompanionTravelNeed(legTravelNeed)) {\n          legTravelNeed.set('count', 0);\n        }\n\n        if (Ember.isNone(defaultTravelNeed) || this.isCompanionTravelNeed(legTravelNeed) && companionCount !== legTravelNeed.count) {\n          legTravelNeed.save();\n        }\n      });\n      removeLegTravelNeeds.forEach(removeLegTravelNeed => {\n        removeLegTravelNeed.deleteRecord();\n        removeLegTravelNeed.save();\n      });\n\n      if (currentServiceType !== defaultServiceType) {\n        const message = `Leg ${legNumber} service type changed from '${defaultServiceType}' to '${currentServiceType}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (currentReqDate !== defaultReqDate) {\n        const message = `Leg ${legNumber} date changed from '${defaultReqDate}' to '${currentReqDate}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (currentReqTime !== defaultReqTime) {\n        const message = `Leg ${legNumber} time changed from '${defaultReqTime}' to '${currentReqTime}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (currentAnchor !== defaultAnchor) {\n        const message = `Leg ${legNumber} request type changed from '${defaultAnchor}' to '${currentAnchor}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (currentLoadTime !== defaultLoadTime) {\n        const message = `Leg ${legNumber} load time changed from '${defaultLoadTime}' minutes to '${currentLoadTime}' minutes.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (currentUnloadTime !== defaultUnloadTime) {\n        const message = `Leg ${legNumber} unload time changed from '${defaultUnloadTime}' minutes to '${currentUnloadTime}' minutes.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (haveUpdates) await leg.save();\n    },\n\n    async createAddress(segmentStop, stopType) {\n      const store = this.get('store');\n      const locationAdapter = store.adapterFor('location');\n      const addressAdapter = store.adapterFor('address');\n      const placeAdapter = store.adapterFor('place');\n      const place = (0, _unwrapProxy.unwrapProxy)(segmentStop.get('place'));\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n      const addressType = stopType === 'pick' ? `${stopType}up` : `${stopType}off`;\n      const beNomadAddress = address.get('beNomadAddress');\n      const lat = location.get('lat');\n      const lng = location.get('lng');\n      const geoNode = await this.getAddressGeoNode(lat, lng, beNomadAddress, addressType);\n\n      if (geoNode) {\n        const zone = store.peekRecord('zone-type', geoNode.zone.zoneName);\n        address.set('zName', zone.get('displayName'));\n        address.set('zoneName', zone);\n      } else {\n        address.set('zoneName', store.peekAll('zone-type').get('firstObject'));\n      }\n\n      const addressResponse = await addressAdapter.postAddress(address);\n      const locationResponse = await locationAdapter.postLocation(location);\n      await addressAdapter.postAddressLocation(locationResponse, addressResponse);\n      let placeResponse = null;\n\n      if (Ember.isNone(place.get('id'))) {\n        place.set('geocodingMethod', '');\n        placeResponse = await placeAdapter.postPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n      } else {\n        placeResponse = await placeAdapter.patchPlace(place, addressResponse.data.id, locationResponse.data.id, 'passenger');\n      }\n\n      return placeResponse;\n    },\n\n    async createNewSegmentStop(segmentStop, stopType) {\n      const placeResponse = await this.createAddress(segmentStop, stopType);\n      const place = await this.store.findRecord('place', placeResponse.data.id);\n      segmentStop.set('place', place);\n      return await segmentStop.save();\n    },\n\n    async createNewSegment(newSegment) {\n      const pickSegmentStop = (0, _unwrapProxy.unwrapProxy)(newSegment.get('pick'));\n      const dropSegmentStop = (0, _unwrapProxy.unwrapProxy)(newSegment.get('drop'));\n      const pickStop = await this.createNewSegmentStop(pickSegmentStop, 'pick');\n      const dropStop = await this.createNewSegmentStop(dropSegmentStop, 'drop');\n      newSegment.set('pick', pickStop);\n      newSegment.set('drop', dropStop);\n      return await newSegment.save();\n    },\n\n    async createNewleg(activeBooking, newLeg, legNumber) {\n      const rider = activeBooking.get('firstLeg.rider.content');\n      const message = `Leg ${legNumber} added to booking.`;\n      newLeg.set('rider', rider);\n      newLeg.set('booking', activeBooking); // get the travel needs for the leg\n\n      const legTravelNeeds = newLeg.get('legTravelNeeds').toArray();\n      const leg = await newLeg.save();\n\n      for (const legTravelNeedIndex in legTravelNeeds) {\n        if (legTravelNeeds.hasOwnProperty(legTravelNeedIndex)) {\n          const lTravelNeed = legTravelNeeds[legTravelNeedIndex];\n          lTravelNeed.set('leg', leg);\n\n          if (Ember.isNone(lTravelNeed.count) && this.isCompanionTravelNeed(lTravelNeed)) {\n            lTravelNeed.set('count', 0);\n          }\n\n          if (this.isCompanionTravelNeed(lTravelNeed) && lTravelNeed.count !== 0) {\n            await lTravelNeed.save();\n          } else if (!this.isCompanionTravelNeed(lTravelNeed)) {\n            await lTravelNeed.save();\n          }\n        }\n      }\n\n      const newSegments = leg.get('segments');\n      const newSegmentsPromises = newSegments.map(async newSegment => {\n        newSegment.set('leg', leg);\n        await this.createNewSegment(newSegment);\n      });\n      await Promise.all(newSegmentsPromises);\n      this.appendActivityLogMsg(message);\n      return leg;\n    },\n\n    async editRiders(riders, activeBooking, defaultBookingData) {\n      const store = this.get('store');\n      const riderNotes = defaultBookingData.get('riderNotes');\n      const riderPhoneNumbers = defaultBookingData.get('riderPhoneNumbers');\n      const riderModels = store.peekAll('rider');\n\n      for (const riderIndex in riders) {\n        if (riders.hasOwnProperty(riderIndex)) {\n          const rider = riders[riderIndex];\n          const riderModel = riderModels.find(riderM => {\n            return riderM.get('riderId') === rider.get('id');\n          });\n          const riderNote = riderNotes[riderIndex];\n          const currentNote = rider.get('notes');\n          const riderPhoneNumber = riderPhoneNumbers[riderIndex];\n          const currentPhoneNumber = `${rider.get('mainAreaCode')}-${rider.get('mainPhoneNumber')}`;\n\n          if (currentNote !== riderNote && Ember.isPresent(riderModel)) {\n            const message = `Passenger notes changed from '${riderNote}' to '${currentNote}'.`;\n            riderModel.set('notes', currentNote);\n            await riderModel.save();\n            this.appendActivityLogMsg(message);\n          }\n\n          if (currentPhoneNumber !== riderPhoneNumber && Ember.isPresent(riderModel)) {\n            const riderPhoneNumberModel = riderModel.get('riderPhoneNumber');\n            const message = `Passenger phone number changed from '${riderPhoneNumber}' to '${currentPhoneNumber}'.`;\n            riderPhoneNumberModel.set('areaCode', rider.get('mainAreaCode'));\n            riderPhoneNumberModel.set('phoneNumber', rider.get('mainPhoneNumber'));\n            await riderPhoneNumberModel.save();\n            this.appendActivityLogMsg(message);\n          }\n        }\n      }\n    },\n\n    async saveEditSegment(activeBooking, segment, defaultLegSegment, legNumber) {\n      const defaultFare = defaultLegSegment ? defaultLegSegment.fare : null;\n      const currentFare = segment.get('fare');\n      const defaultNoSharing = defaultLegSegment ? defaultLegSegment.noSharingText : '';\n      const currentNoSharing = segment.get('noSharingText');\n      let haveUpdates = false;\n\n      if (defaultFare !== currentFare) {\n        const message = `Leg ${legNumber} fare changed from '${defaultFare}' to '${currentFare}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (defaultNoSharing !== currentNoSharing) {\n        const message = `Leg ${legNumber} rideshare value changed from '${defaultNoSharing}' to '${currentNoSharing}'.`;\n        haveUpdates = true;\n        this.appendActivityLogMsg(message);\n      }\n\n      if (haveUpdates) await segment.save();\n    },\n\n    async saveEditBooking(activeBooking, defaultBookingData) {\n      const defaultLegs = defaultBookingData.get('legs');\n      const legs = (0, _unwrapProxy.unwrapProxy)(activeBooking.get('legs')).toArray();\n      const removeLegs = [];\n      this.set('bookingEventMsg', 'Booking modified.\\n');\n      this.set('userEventMsg', `Changed booking ${activeBooking.get('id')} :`);\n      await this.editRiders(defaultBookingData.get('rider').toArray(), activeBooking, defaultBookingData);\n      defaultLegs.forEach(removeLeg => {\n        if (!legs.find(currLeg => currLeg.id === removeLeg.id)) {\n          removeLegs.push(removeLeg);\n        }\n      });\n\n      for (const legIndex in legs) {\n        if (legs.hasOwnProperty(legIndex)) {\n          const leg = legs[legIndex];\n          const defaultLegSegment = defaultBookingData.get('legSegments').objectAt(legIndex);\n          const segments = leg.get('segments').toArray();\n          const legNumber = parseInt(legIndex, 10) + 1;\n          let isNewLeg = false;\n\n          if (Ember.isNone(leg.id)) {\n            isNewLeg = true;\n            await this.createNewleg(activeBooking, leg, legNumber);\n          }\n\n          for (const segmentIndex in segments) {\n            if (segments.hasOwnProperty(segmentIndex)) {\n              const segment = segments[segmentIndex];\n              const pick = (0, _unwrapProxy.unwrapProxy)(segment.get('pick'));\n              const drop = (0, _unwrapProxy.unwrapProxy)(segment.get('drop'));\n              const segmentToUse = Ember.isNone(defaultLegSegment) ? segment : defaultLegSegment;\n              await this.saveEditSegmentStop(pick, pick.get('place'), 'pick', legNumber, activeBooking, segmentToUse);\n              await this.saveEditSegmentStop(drop, drop.get('place'), 'drop', legNumber, activeBooking, segmentToUse);\n              await this.saveEditSegmentStopPhoneNumber(activeBooking, pick, defaultLegSegment, 'pick', legNumber);\n              await this.saveEditSegmentStopPhoneNumber(activeBooking, drop, defaultLegSegment, 'drop', legNumber);\n              await pick.save();\n              await drop.save();\n              this.saveEditSegment(activeBooking, segment, defaultLegSegment, legNumber);\n            }\n          }\n\n          if (!isNewLeg) {\n            this.saveEditLeg(activeBooking, leg, defaultBookingData, legIndex);\n          }\n        }\n      }\n\n      removeLegs.forEach(removeLeg => {\n        const legNumber = removeLeg.get('legOrdinal');\n        const message = `Leg ${legNumber} removed from booking.`;\n        removeLeg.deleteRecord();\n        removeLeg.save();\n        this.appendActivityLogMsg(message);\n      });\n      this.createBookingActivity(activeBooking.get('id'), ['booking', 'user']);\n    },\n\n    createBookingActivity(bookingId, loggingTypes) {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      const actions = [];\n\n      for (const type of loggingTypes) {\n        switch (type) {\n          case 'booking':\n            actions.push({\n              activity: 'Changed',\n              loggingType: 'booking',\n              details: this.get('bookingEventMsg')\n            });\n            break;\n\n          case 'user':\n            actions.push({\n              activity: 'Booking Modified',\n              loggingType: 'user',\n              details: this.get('userEventMsg')\n            });\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      activityLogAdapter.createGenericBookingActivity(bookingId, actions);\n    },\n\n    saveBooking(isEditMode, defaultBookingData) {\n      return new Promise(async (resolve, reject) => {\n        const payload = await this.convertBookingRecordToPayloadFormat(this.get('activeBooking'));\n\n        if (isEditMode) {\n          try {\n            await this.saveEditBooking(defaultBookingData.get('booking'), defaultBookingData);\n          } catch (err) {\n            this.resetAllEntityCounts();\n            reject(err);\n          } finally {\n            this.resetAllEntityCounts();\n            resolve();\n          }\n        } else {\n          this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking-with-subentity', {\n            method: 'POST',\n            contentType: 'application/json',\n            headers: {\n              Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n            },\n            data: JSON.stringify(payload)\n          }).then(res => {\n            this.resetAllEntityCounts();\n            resolve(res);\n          }).catch(err => {\n            if (err.status === 400) {\n              err.message = 'There was a problem with one of the fields. Please check over the form and try again.';\n            }\n\n            this.resetAllEntityCounts();\n            reject(err);\n          });\n        }\n      });\n    },\n\n    saveBookingStatus(bookingId) {\n      let createRefusedBooking = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return new Promise(async (resolve, reject) => {\n        const payload = await this.convertBookingRecordToPayloadFormat(this.get('activeBooking'));\n        const url = `${_apiUrls.API.bookingService.host}/booking-with-subentity/${bookingId}${createRefusedBooking ? '?createRefusedBooking=true' : ''}`;\n        this.get('ajax').post(url, {\n          method: 'PATCH',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          },\n          data: JSON.stringify(payload)\n        }).then(res => {\n          this.resetAllEntityCounts();\n          resolve(res);\n        }).catch(err => {\n          if (err.status === 400) {\n            err.message = 'There was a problem with one of the fields. Please check over the form and try again.';\n          }\n\n          this.resetAllEntityCounts();\n          reject(err);\n        });\n      });\n    },\n\n    /**\n     * update temp booking with  status 'scheduled' and  update  legs and segments..\n     * then call schedule service to create trips\n     * @returns {Promise<void>}\n     */\n    acceptBookingAsync: (0, _emberConcurrency.task)(function* (booking, operationType, options) {\n      try {\n        const {\n          isJobSuccess,\n          results,\n          state\n        } = yield this.createBookingAsyncOperation.perform(booking, operationType, options);\n\n        if (!isJobSuccess) {\n          this.resetAllEntityCounts(); // Regarding NYAAR-17874 - If SES or SS fails with any other error, the booking status should be set to Failed.\n\n          yield this.asyncOperationStateSuccess(booking, state, results);\n        }\n\n        this.resetAllEntityCounts();\n        return JSON.parse(results);\n      } catch (e) {\n        if (e.status === 400) {\n          e.message = 'There was a problem with one of the fields. Please check over the form and try again.';\n        }\n\n        this.resetAllEntityCounts();\n        return Promise.reject(e);\n      }\n    }).drop(),\n\n    async updateBookingStatus(bookingId, status) {\n      const bookingRecord = this.store.peekRecord('booking', bookingId);\n      bookingRecord.set('status', status);\n      await bookingRecord.save();\n    },\n\n    async asyncOperationStateSuccess(booking, state, results) {\n      const tripInsertionMessage = 'Insertion failed';\n      const failureState = 'failure';\n      const bookingId = booking.data.id ? booking.data.id : booking.data.attributes.id || booking.data.attributes.temporaryBookingId;\n\n      if (state === failureState) {\n        if ((0, _lodash.isString)(results) && results.includes(tripInsertionMessage)) {\n          await this.updateBookingStatus(bookingId, _mappedStatus.convertBookingStatus.unscheduled);\n        } else {\n          await this.updateBookingStatus(bookingId, _mappedStatus.convertBookingStatus.failed);\n        }\n      }\n    },\n\n    async acceptBooking() {\n      const payload = await this.convertBookingRecordToPayloadFormat(this.get('activeBooking'));\n      const options = {\n        operationData: payload,\n        outputResult: true\n      };\n      let results;\n\n      try {\n        results = await this.acceptBookingAsync.perform(payload, 'primaryBooking', options);\n      } catch (err) {\n        throw err;\n      }\n\n      return results;\n    },\n\n    // todo : remove this logic in the future when the payload is json api complacent\n    prepareFinalPayloadForBooking(jsonApi) {\n      const included = jsonApi.included.map(entity => {\n        if (entity.type === 'segmentStop') {\n          const address = entity.attributes.address;\n          const place = entity.attributes.place;\n          const location = entity.attributes.location;\n          delete entity.attributes.address;\n          delete entity.attributes.place;\n          delete entity.attributes.location;\n          return { ...entity,\n            relationships: {\n              address: {\n                data: {\n                  type: 'address',\n                  ...address\n                }\n              },\n              place: {\n                data: {\n                  type: 'place',\n                  ...place\n                }\n              },\n              location: {\n                data: {\n                  type: 'location',\n                  ...location\n                }\n              }\n            }\n          };\n        }\n\n        if (entity.type === 'leg') {\n          const rider = entity.attributes.rider;\n          delete entity.attributes.rider;\n          return { ...entity,\n            relationships: { ...entity.relationships,\n              rider: {\n                data: {\n                  type: 'rider',\n                  ...rider\n                }\n              }\n            }\n          };\n        }\n\n        return entity;\n      });\n      return {\n        data: jsonApi.data,\n        included\n      };\n    },\n\n    setActiveLegsInBooking(activeLegsInBooking) {\n      this.set('activeLegsInBooking', activeLegsInBooking.toArray());\n    },\n\n    rebuildRiderLegsTravelNeeds() {\n      const store = this.get('store');\n      const legArray = this.get('activeBooking.legs');\n      const riderTravelNeeds = this.reGroupLegtravelneedsForGroupBooking();\n      const oldRiderLegsTravelNeeds = this.get('activeBooking.riderLegsTravelNeeds') || [];\n      return riderTravelNeeds.map(_ref => {\n        let {\n          rider,\n          travelNeeds\n        } = _ref;\n        const riderId = rider.get('id'); // Generate base travel needs (used for new legs)\n\n        const originalTravelNeeds = this.createLegTravelNeeds([{\n          rider,\n          travelNeeds\n        }]); // Find old structure to preserve\n\n        const oldEntry = oldRiderLegsTravelNeeds.find(rt => rt.rider.get('id') === riderId);\n        const riderOverrideTravelNeeds = oldEntry.riderTravelNeeds;\n        const wasAllLegSelected = oldEntry.isAllLegs;\n        const prevSegmentFare = oldEntry.travelNeedLegs.firstObject.segment;\n        const {\n          maxLoadTime,\n          maxUnloadTime\n        } = riderOverrideTravelNeeds.reduce((acc, curr) => {\n          let curLoadTime = curr.loadTime;\n          let curUnloadTime = curr.unloadTime;\n\n          if (!curLoadTime) {\n            curLoadTime = originalTravelNeeds.find(v => v.get('travelNeedType.name') === curr.name).get('travelNeedType.loadTime');\n          }\n\n          if (!curUnloadTime) {\n            curUnloadTime = originalTravelNeeds.find(v => v.get('travelNeedType.name') === curr.name).get('travelNeedType.unloadTime');\n          }\n\n          return {\n            maxLoadTime: Math.max(acc.maxLoadTime, curLoadTime || 0),\n            maxUnloadTime: Math.max(acc.maxUnloadTime, curUnloadTime || 0)\n          };\n        }, {\n          maxLoadTime: -Infinity,\n          maxUnloadTime: -Infinity\n        });\n        const oldLegsMap = oldEntry ? Object.fromEntries(oldEntry.travelNeedLegs.map(tl => [tl.legIndex, {\n          nonClonedTravelNeeds: tl.nonClonedTravelNeeds,\n          loadTime: tl.loadTime,\n          unloadTime: tl.unloadTime,\n          segment: tl.segment\n        }])) : {};\n        const travelNeedLegs = legArray.map((leg, index) => {\n          // Try to reuse existing travelNeeds\n          const existingEntry = oldLegsMap[index];\n          let existing = existingEntry?.nonClonedTravelNeeds; // If no existing, create fresh clones\n\n          if (!existing) {\n            existing = originalTravelNeeds.filter(tn => tn.get('rider.id') === riderId).map(tn => store.createRecord('leg-travel-need', {\n              count: tn.get('count'),\n              travelNeedType: tn.get('travelNeedType'),\n              passengerType: tn.get('passengerType'),\n              rider,\n              legIndex: index\n            }));\n          }\n\n          return {\n            legIndex: index,\n            purpose: leg.get('purpose'),\n            loadTime: existingEntry?.loadTime ?? maxLoadTime,\n            unloadTime: existingEntry?.unloadTime ?? maxUnloadTime,\n            segment: existingEntry?.segment ?? {\n              fare: prevSegmentFare.fare,\n              fareCategory: prevSegmentFare.fareCategory\n            },\n            nonClonedTravelNeeds: existing\n          };\n        });\n        return {\n          rider,\n          riderTravelNeeds: riderOverrideTravelNeeds,\n          isAllLegs: wasAllLegSelected,\n          travelNeedLegs\n        };\n      });\n    },\n\n    async fetchAddressForLatLng(latlng) {\n      const boundingBox = this.get('map.boundingBox'); // if the point is outside the valid zone polygon\n      // return error and exit\n\n      if (!(0, _zoneValidation.insideZone)([latlng.lat, latlng.lng], boundingBox)) {\n        //this.get('notifications').warning('Unable to save. Location must be within the agency service boundary.');\n        return;\n      }\n\n      const geocode = this.get('geocode');\n      return geocode.reverseGeocode(latlng);\n    },\n\n    updateAddress(record, ttAddress, zone) {\n      record.set('alias', cleanFieldString(ttAddress.address.alias));\n      record.set('streetNumber', cleanFieldString(ttAddress.address.streetNumber));\n      record.set('premise', cleanFieldString(ttAddress.premise));\n      record.set('streetAddress', cleanFieldString(ttAddress.address.streetName));\n      record.set('locality', cleanFieldString(ttAddress.address.city));\n      record.set('subLocality', cleanFieldString(ttAddress.address.city));\n      record.set('region', cleanFieldString(ttAddress.address.state));\n      record.set('subRegion', cleanFieldString(ttAddress.address.municipality));\n      record.set('postalCode', cleanFieldString(ttAddress.address.postalCode));\n      record.set('country', cleanFieldString(ttAddress.address.country || ttAddress.address.countryCodeISO3));\n      record.set('freeformAddress', cleanFieldString(ttAddress.address.freeformAddress));\n      record.set('zName', zone.zoneDisplayName);\n      record.set('zoneName.name', zone.zoneName);\n    },\n\n    setActiveDragPlace(place) {\n      this.set('activeDragPlace', place);\n    },\n\n    addSelectedRider(rider) {\n      this.get('selectedRiders').pushObject(rider);\n    },\n\n    removeSelectedRider(rider) {\n      this.get('selectedRiders').removeObject(rider);\n    },\n\n    clearSelectedRiders() {\n      this.set('selectedRiders', []);\n    },\n\n    // A booking row's checkbox is not row state: CheckboxRow reads and writes\n    // activeContext.checkedItems. So whenever the bookings list is swapped out or emptied,\n    // the checked bookings have to be dropped there too, or their trips stay in the View\n    // All Trips table with no row left to uncheck (and reappear checked on the next\n    // search). Only booking records are touched -- checked riders are left alone.\n    unCheckAllBookings() {\n      const topActiveContext = this.get('activeContext.topActiveContext');\n      const checkedBookings = (this.get('activeContext.topActiveContext.checkedItems') || []).filter(item => item.modelName === 'booking').map(item => item.record).filter(record => Ember.isPresent(record));\n\n      if (topActiveContext && checkedBookings.length) {\n        topActiveContext.setRecordsChecked(checkedBookings, false);\n      }\n\n      this.set('filteredCurrentTrips', []);\n    },\n\n    async fetchRiderForTravelNeeds(externalRider) {\n      const riderId = externalRider.get('id');\n\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        const externalRiderRecord = await this.store.queryRecord('rider-external', riderId);\n        return externalRiderRecord;\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    async fetchAllSelectedRidersForTravelNeeds() {\n      return new Promise((resolve, reject) => {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        const externalRiderPromises = this.get('selectedRiders').map(rider => {\n          return this.fetchRiderForTravelNeeds(rider);\n        });\n        Promise.all(externalRiderPromises).then(response => {\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          resolve(response);\n        }).catch(e => {\n          this.get('notifications').warning('error while fetching external rider for travel needs.');\n          reject(e);\n        });\n      });\n    },\n\n    async fetchEligibilityForRider(rider) {\n      return new Promise((res, rej) => {\n        const riderId = rider.get('id');\n        const session = this.get('session');\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        this.get('ajax').request(_apiUrls.API.riderManagementService.host + `/nyct-rider-eligibility/${riderId}`, {\n          method: 'GET',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          contentType: 'application/json'\n        }).then(riderEligibilityResponse => {\n          const riderExternalEligibilityRecord = this.store.createRecord('rider-external-eligibility', { ...riderEligibilityResponse\n          });\n          rider.set('eligibility', riderExternalEligibilityRecord);\n          rider.set('fareCategory', riderExternalEligibilityRecord.get('fareType'));\n          riderExternalEligibilityRecord.set('riderExternal', rider);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          res(riderExternalEligibilityRecord);\n        }).catch(error => {\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          rej(error);\n        });\n      });\n    },\n\n    // this can be done using store find but the url requires reshaping\n    // we are trying to get Eligibilities for each selected Rider and set it to store\n    async fetchAndStoreEligibilityForAllSelectedRiders() {\n      return new Promise((resolve, reject) => {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        const eligibilityPromises = this.get('selectedRiders').map(rider => {\n          return this.fetchEligibilityForRider(rider);\n        });\n        Promise.all(eligibilityPromises).then(response => {\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          resolve(response);\n        }).catch(e => {\n          this.get('notifications').warning('error while fetching eligibility for rider.');\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          reject(e);\n        });\n      });\n    },\n\n    showAddressWarning(addressType) {\n      let legType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n      this.showErrorMessage(`Unknown Address. Please enter a valid ${addressType} ${legType} address.`);\n    },\n\n    async getAddressGeoNode(lat, lng, beNomadAddress, selectType) {\n      try {\n        const geoNode = await this.get('geocode').calculateZone(lat, lng);\n\n        if (Ember.isNone(geoNode)) {\n          this.showErrorMessage(`Unknown Address. Please enter a valid ${selectType} address.`);\n        }\n\n        return geoNode;\n      } catch (e) {\n        this.showErrorMessage(`Error while getting genode for ${beNomadAddress}.`);\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    async getBookingDetails(bookingId) {\n      this.store.findRecord('booking', bookingId);\n    },\n\n    createSubscriptionRecord() {\n      const currentDate = new Date();\n      const exclusion = this.get('store').createRecord('subscription-exclusion');\n      const recurrencePattern = this.get('store').createRecord('subscription-recurrence-pattern', {\n        type: 'daily',\n        recurring: true\n      });\n      const subscription = this.get('store').createRecord('subscription', {\n        requestTime: currentDate,\n        exclusions: [exclusion],\n        recurrencePatterns: [recurrencePattern]\n      });\n      return subscription;\n    },\n\n    addPcaTravelNeed(pcaTravelNeed, legTravelNeeds, rider) {\n      const travelNeedType = this.get('store').peekAll('travel-need-type').find(tntype => {\n        return tntype.get('name').toLowerCase() === pcaTravelNeed.type.toLowerCase();\n      });\n\n      if (!Ember.isNone(travelNeedType)) {\n        const legTravelNeed = this.get('store').createRecord('leg-travel-need', {\n          count: pcaTravelNeed.cnt,\n          travelNeedType: travelNeedType,\n          passengerType: this.get('store').peekAll('passenger-type').find(ptype => {\n            return ptype.name.toLowerCase() === pcaTravelNeed.type.toLowerCase();\n          }),\n          rider\n        });\n        legTravelNeeds.push(legTravelNeed);\n      }\n    },\n\n    createLegTravelNeeds(riderTravelNeedsList) {\n      const store = this.get('store');\n      const legTravelNeeds = [];\n      const pcaRequiredRiders = this.get('selectedRiders'); //.filter(r => r.get('pcaRequired'));\n\n      riderTravelNeedsList.forEach(_ref2 => {\n        let {\n          rider,\n          travelNeeds\n        } = _ref2;\n        const pcaTravelNeed = travelNeeds.find(tn => tn.type.toUpperCase() === PCA);\n        const filteredNeeds = travelNeeds.filter(tn => tn.type.toUpperCase() !== PCA);\n        filteredNeeds.forEach(travelNeed => {\n          const travelNeedType = store.peekAll('travel-need-type').find(tnt => tnt.get('id') === travelNeed.type);\n\n          if (!Ember.isNone(travelNeedType)) {\n            const isConsumable = travelNeedType.get('isConsumable');\n            const passengerType = store.peekAll('passenger-type').find(pt => {\n              let name = 'client';\n              const typeUpper = travelNeed.type.toUpperCase();\n              if (typeUpper === PCA) name = 'pca';\n              if (typeUpper === COMPANION) name = 'companion';\n              return pt.get('name') === name;\n            }); // Apply to each leg later using legIndex, but create base object here\n\n            const legTravelNeed = store.createRecord('leg-travel-need', {\n              count: isConsumable ? travelNeed.cnt : 0,\n              travelNeedType,\n              passengerType,\n              rider // legIndex will be set when assigning this per-leg in setDefaultBookingData\n\n            });\n            legTravelNeeds.push(legTravelNeed);\n          }\n        });\n\n        if (pcaTravelNeed && pcaRequiredRiders.some(externalRider => externalRider.id === rider.id)) {\n          this.addPcaTravelNeed(pcaTravelNeed, legTravelNeeds, rider); // you may need to update this method too\n        }\n      });\n      return legTravelNeeds;\n    },\n\n    createLegServiceNeeds(riderServiceNeeds) {\n      const store = this.get('store');\n      const legServiceNeeds = [];\n      riderServiceNeeds.forEach(riderServiceNeed => {\n        const serviceNeedType = store.peekAll('service-need-type').find(tntype => {\n          return tntype.get('id') === riderServiceNeed;\n        });\n\n        if (!Ember.isNone(serviceNeedType)) {\n          const legServiceNeed = store.createRecord('leg-service-need', {\n            serviceNeedType: serviceNeedType\n          });\n          legServiceNeeds.push(legServiceNeed);\n        }\n      });\n      return legServiceNeeds;\n    },\n\n    createFirstLegSegmentRecord(legTravelNeeds, legServiceNeeds, fareAmount) {\n      const store = this.get('store');\n      const userBookingPermissionDetails = this.get('userBookingPermissionDetails');\n      const isFutureDayBookingPermGranted = userBookingPermissionDetails.isFutureDayBookingPermGranted;\n      const serviceWindow = store.peekAll('service-window').find(serviceWindowObject => {\n        return serviceWindowObject.get('data.serviceType') === SERVICE_TYPE_GENERAL;\n      });\n      const fareType = store.peekAll('fare-type').firstObject;\n      const date = new Date(new Date()); // if user has future booking permission add one day in leg.requestTime\n\n      if (isFutureDayBookingPermGranted) {\n        date.setDate(date.getDate() + 1);\n      }\n\n      const pickAddress = store.createRecord('address');\n      const pickLocation = store.createRecord('location');\n      const pickPlace = store.createRecord('place', {\n        address: pickAddress,\n        location: pickLocation\n      });\n      const dropAddress = store.createRecord('address');\n      const dropLocation = store.createRecord('location');\n      const dropPlace = store.createRecord('place', {\n        address: dropAddress,\n        location: dropLocation\n      });\n      const leg = store.createRecord('leg', {\n        requestTime: date,\n        anchor: 'pick',\n        purpose: 'trip',\n        notes: '',\n        serviceWindow,\n        legTravelNeeds,\n        legServiceNeeds\n      });\n      const segment = store.createRecord('segment', {\n        promiseTime: date,\n        anchor: 'pick',\n        fare: fareAmount,\n        travelMode: PARATRANSIT_TRAVEL_MODE,\n        segmentType: _tripType.DEMAND_TRIP,\n        noSharing: 0,\n        legOrdinal: 1,\n        pick: store.createRecord('segment-stop', {\n          type: 'pick',\n          notes: '',\n          plannedTime: date,\n          onboardCount: 1,\n          place: pickPlace\n        }),\n        drop: store.createRecord('segment-stop', {\n          type: 'drop',\n          notes: '',\n          plannedTime: date,\n          onboardCount: 1,\n          place: dropPlace\n        }),\n        fareType: fareType,\n        leg: leg\n      });\n      leg.set('segments', [segment]);\n      legTravelNeeds.forEach(legTravelneed => {\n        legTravelneed.set('leg', leg);\n      });\n      legServiceNeeds.forEach(legServiceNeed => {\n        legServiceNeed.set('leg', leg);\n      });\n      return leg;\n    },\n\n    async createLegSegmentRecordForSingleBooking() {\n      let isReturn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      const externalRider = this.get('selectedRiders.firstObject');\n      const rider = await this.get('store').peekRecord('rider', externalRider.id);\n      await this.fetchRiderForTravelNeeds(externalRider);\n      await this.fetchEligibilityForRider(externalRider);\n      const riderTravelNeeds = externalRider.get('travelNeeds');\n      const riderServiceNeeds = externalRider.get('serviceNeeds') || [];\n      const store = this.get('store');\n      const legTravelNeeds = this.createLegTravelNeeds([{\n        rider,\n        travelNeeds: riderTravelNeeds\n      }]);\n      const legServiceNeeds = this.createLegServiceNeeds(riderServiceNeeds);\n      const fareAmount = await this.getTotalFareAmount([externalRider], legTravelNeeds);\n      const firstLeg = this.createFirstLegSegmentRecord(legTravelNeeds, legServiceNeeds, fareAmount);\n      const purpose = isReturn ? 'return' : 'trip';\n      firstLeg.set('purpose', purpose);\n      const primaryAddressToCreateLeg = rider.riderPlaces.filter(place => place.riderPlaceTypeName === 'primary')[0];\n      const placeId = Ember.isPresent(primaryAddressToCreateLeg) ? primaryAddressToCreateLeg.get('place.id') : null;\n      const query = 'in(\\'id\\',(' + placeId + '))&include=address,location';\n\n      if (Ember.isPresent(placeId)) {\n        await this.store.query('place', {\n          filter: query\n        });\n      }\n\n      const pickAddress = Ember.isPresent(primaryAddressToCreateLeg) ? primaryAddressToCreateLeg.get('place.address') : store.createRecord('address', {\n        lat: 0,\n        lng: 0,\n        locality: '',\n        notes: '',\n        postalCode: '',\n        premise: '',\n        region: '',\n        streetAddress: '',\n        streetNumber: '',\n        country: ''\n      });\n      const pickLocation = Ember.isPresent(primaryAddressToCreateLeg) ? primaryAddressToCreateLeg.get('place.location') : store.createRecord('location', {\n        lat: 0,\n        lng: 0\n      });\n      const isViewOnlyMode = this.get('isViewOnlyMode');\n\n      if (!pickAddress.get('zoneName.name') && !isViewOnlyMode) {\n        this.showErrorMessage('Invalid pick Zone for passengers primary address.');\n      }\n\n      if (pickAddress.get('zoneName.name')) {\n        // Reg - NYAAR-19619\n        firstLeg.set('segments.firstObject.pick.place.address', pickAddress);\n        firstLeg.set('segments.firstObject.pick.place.location', pickLocation);\n        firstLeg.set('segments.firstObject.pick.notes', pickAddress.get('notes'));\n      } else {\n        if (!isViewOnlyMode) {\n          this.showErrorMessage('Primary address of passenger does not exist.');\n        }\n\n        const pickAddressRecord = store.createRecord('address');\n        const pickLocationRecord = store.createRecord('location');\n        firstLeg.set('segments.firstObject.pick.place.address', pickAddressRecord);\n        firstLeg.set('segments.firstObject.pick.place.location', pickLocationRecord);\n      }\n\n      return [firstLeg];\n    },\n\n    calculateAmbulatoryCount(legTravelNeeds) {\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeats = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      const totalRidersCount = this.get('selectedRiders').length + this.get('selectedCompanionCount');\n      let totalCount = totalRidersCount;\n      const pcaRiders = [];\n      const wheelchairTravelNeed = legTravelNeeds.find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'WHEELCHAIR';\n      });\n      const bigSeatTravelneeds = legTravelNeeds.filter(travelNeed => {\n        return bigSeats.includes(travelNeed.get('travelNeedTypeNameUppercase'));\n      });\n      const wcCount = wheelchairTravelNeed ? parseInt(wheelchairTravelNeed.count, 10) : 0;\n      const bigSeatsCount = bigSeatTravelneeds.length;\n      const totalWCCount = wcCount + bigSeatsCount;\n\n      if (totalWCCount >= totalRidersCount) {\n        totalCount = 0;\n      } else {\n        totalCount = totalCount - totalWCCount;\n      }\n\n      const pcaTravelNeed = legTravelNeeds.find(travelNeed => {\n        return travelNeed.get('travelNeedTypeNameUppercase') === 'PCA';\n      });\n      this.get('selectedRiders').forEach(rider => {\n        const riderTravelNeeds = rider.get('travelNeeds');\n        riderTravelNeeds.forEach(riderTravelNeed => {\n          if (riderTravelNeed.type === 'pca') {\n            pcaRiders.push(rider);\n          }\n        });\n      });\n\n      if (pcaTravelNeed) {\n        totalCount = totalCount + pcaRiders.length;\n      }\n\n      return totalCount;\n    },\n\n    reGroupLegtravelneedsForGroupBooking() {\n      const selectedRiders = this.get('selectedRiders');\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      return selectedRiders.map(rider => {\n        const consumableTravelNeeds = [];\n        const nonConsumableTravelNeeds = [];\n        const riderTravelNeeds = rider.get('travelNeeds') || [];\n        const bigSeatTravelneeds = riderTravelNeeds.filter(travelNeed => bigSeatTRs.includes(travelNeed.type));\n        const otherTravelNeeds = riderTravelNeeds.filter(travelNeed => !bigSeatTRs.includes(travelNeed.type));\n        otherTravelNeeds.forEach(travelNeed => {\n          if (travelNeed.cnt === 0) {\n            nonConsumableTravelNeeds.push(travelNeed);\n          } else {\n            consumableTravelNeeds.push(travelNeed);\n          }\n        });\n        const uniqConsumable = (0, _lodash.uniqBy)(consumableTravelNeeds, 'type');\n        const uniqNonConsumable = (0, _lodash.uniqBy)(nonConsumableTravelNeeds, 'type');\n        return {\n          rider,\n          travelNeeds: [...uniqConsumable, ...bigSeatTravelneeds, ...uniqNonConsumable]\n        };\n      });\n    },\n\n    reGroupLegServiceNeedsForBooking() {\n      const selectedRiders = this.get('selectedRiders');\n      const serviceNeedsOfAllSelectedRiders = selectedRiders.map(r => r.get('serviceNeeds')).reduce((t1, t2) => {\n        return t1.concat(t2);\n      }, []);\n      const uniqServiceNeeds = (0, _lodash.uniq)(serviceNeedsOfAllSelectedRiders);\n      return [...uniqServiceNeeds];\n    },\n\n    async getTotalFareAmount(riders, legTravelNeeds) {\n      let override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      let totalFareAmount = 0;\n      const result = await Promise.all(riders.map(async rider => {\n        return this.get('fareCalc').calcFareByRiderIdAndTravelNeeds(rider, legTravelNeeds, override);\n      }));\n      result.map(amount => {\n        totalFareAmount += amount;\n      });\n      return Math.round(totalFareAmount * 1e2) / 1e2; // can't use toFixed(2) which returns a string.\n    },\n\n    async createLegSegmentRecordForGroupBooking() {\n      let isReturn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      const selectedRiders = this.get('selectedRiders');\n      const allTravelNeeds = this.reGroupLegtravelneedsForGroupBooking();\n      const allServiceNeeds = this.reGroupLegServiceNeedsForBooking();\n      const legTravelNeeds = this.createLegTravelNeeds(allTravelNeeds);\n      const legServiceNeeds = this.createLegServiceNeeds(allServiceNeeds);\n      const totalFareAmount = await this.getTotalFareAmount(selectedRiders, legTravelNeeds);\n      const firstLeg = this.createFirstLegSegmentRecord(legTravelNeeds, legServiceNeeds, totalFareAmount);\n      const purpose = isReturn ? 'return' : 'trip';\n      firstLeg.set('purpose', purpose);\n      return [firstLeg];\n    },\n\n    async createBookingRecord(isGroupBooking, isSubscriptionClick, originalBookingId) {\n      const provider = this.store.peekAll('provider').firstObject; // @TODO booking requires a provider\n\n      const subscription = this.createSubscriptionRecord();\n      const legs = isGroupBooking ? await this.createLegSegmentRecordForGroupBooking() : await this.createLegSegmentRecordForSingleBooking();\n\n      if (isSubscriptionClick) {\n        const firstLeg = legs.firstObject;\n        const subscriptionServiceNeeds = this.createSubscriptionServiceNeedRecord(subscription);\n        subscription.set('subscriptionServiceNeeds', subscriptionServiceNeeds);\n        firstLeg.legServiceNeeds.forEach(legServiceNeed => {\n          if (Ember.isPresent(legServiceNeed)) {\n            legServiceNeed.unloadRecord();\n          }\n        });\n      }\n\n      const booking = this.store.createRecord('booking', {\n        loggingMeta: {\n          originalBooking: originalBookingId\n        },\n        subscription,\n        legs,\n        provider\n      });\n      legs.forEach(leg => {\n        leg.set('booking', booking);\n      });\n      return booking;\n    },\n\n    setCompanionCount(selectedCompanionCount) {\n      this.set('selectedCompanionCount', selectedCompanionCount || 0);\n    },\n\n    showErrorMessage(message) {\n      this.set('errorMessage', message);\n      this.set('isOpenErrorModal', true);\n    },\n\n    setActiveAddress(activeAddress) {\n      this.set('activeAddress', activeAddress);\n    },\n\n    fetchWeatherForecastData() {\n      return this.get('ajax').retryGet(WEATHER_API, WEATHER_WITHOUT_HOURLY_API);\n    },\n\n    async preparePayloadForDemandTrip(leg, rider, riderModel) {\n      const walkingDistance = this.store.peekRecord('cs-config-item', 'config-Fixed_Route_Engine_Parameters/DefaultMaximumWalkingDistance');\n      const maximumWalkingDistanceValue = walkingDistance ? walkingDistance.get('value') : MAX_WALKING_DISTANCE_VALUE;\n      const firstSegment = leg.get('segments').firstObject;\n      const lastSegment = leg.get('segments').lastObject;\n      const pick = await this.prepareSegmentStop(firstSegment.get('pick'), 'pick', true);\n      const drop = await this.prepareSegmentStop(lastSegment.get('drop'), 'drop', true);\n      const tripAnchor = leg.get('anchor') === 'pick' ? 0 : 1; //TODO about .local() once got NYAAR-11301 fix\n\n      const requestedTime = (0, _moment.default)(leg.get('requestTime')).local().format('YYYY-MM-DDTHH:mm');\n      const data = {\n        'request': {\n          'requestId': generateUUID(),\n          'pickCoordinates': {\n            'lat': Number(pick.location.lat),\n            'lng': Number(pick.location.lng)\n          },\n          'dropCoordinates': {\n            'lat': Number(drop.location.lat),\n            'lng': Number(drop.location.lng)\n          },\n          'tripAnchor': tripAnchor,\n          'requestedTime': requestedTime,\n          'searchWindow': {\n            'start': 0,\n            'end': 0\n          },\n          'clientInformation': {\n            'clientId': Number(rider.get('id')),\n            'loadTime': leg.get('loadTime'),\n            'unloadTime': leg.get('unloadTime'),\n            'walkingSpeed': riderModel.get('walkingSpeed'),\n            'maximumWalkingDistance': Number(maximumWalkingDistanceValue)\n          }\n        }\n      };\n      return data;\n    },\n\n    async postScheduleDemandTripForLeg(leg, legIndex) {\n      const selectedRider = this.get('selectedRiders').firstObject;\n      const riderModel = this.store.peekRecord('rider', selectedRider.id);\n      const payload = await this.preparePayloadForDemandTrip(leg, selectedRider, riderModel);\n      return this.get('ajax').request(_apiUrls.API.fixedRouteEngineService.host + '/scheduler/demand-trip', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n        },\n        data: JSON.stringify(payload)\n      }).then(results => {\n        return {\n          legIndex,\n          result: results[0]\n        };\n      });\n    },\n\n    async createSegmentsForItp(leg, legId, itpRequestResult) {\n      const {\n        segments: itpItinerarySegments\n      } = itpRequestResult.result;\n      const segmentPromises = itpItinerarySegments.map((itpItinerarySegment, index) => {\n        //except first segment pick notes and last segment drop notes remaining other segments notes are saved with itp segment stop addresses\n        const pickNotes = index === 0 ? leg.get('segments.firstObject.pick.notes') : itpItinerarySegment.start.address || itpItinerarySegment.start.description;\n        const dropNotes = index === itpItinerarySegments.length - 1 ? leg.get('segments.lastObject.drop.notes') : itpItinerarySegment.end.address || itpItinerarySegment.end.description;\n        return this.createLegSegmentForItp(itpItinerarySegment, legId, leg, pickNotes, dropNotes);\n      });\n      const segmentList = await Promise.all(segmentPromises);\n      return segmentList;\n    },\n\n    async createLegSegmentForItp(itpSegment, legOrdinal, leg, pickNotes, dropNotes) {\n      const store = this.get('store');\n      const fareType = store.peekAll('fare-type').firstObject; // create pick place  =>  itinerary pick address\n\n      const pickPlace = await this.createPlaceByLatLng(itpSegment.start.coordinates, 'pickup'); // create drop place\n\n      const dropPlace = await this.createPlaceByLatLng(itpSegment.end.coordinates, 'dropoff');\n      const {\n        action\n      } = _itineraryAction.ITINERARY_ACTION_MAP[itpSegment.action];\n      const busDescription = itpSegment.description;\n      let travelMode = action;\n\n      if (action === BUS_TYPE) {\n        travelMode = `${action} ${busDescription}`;\n      }\n\n      const segment = store.createRecord('segment', {\n        promiseTime: (0, _moment.default)(itpSegment.start.time).toDate(),\n        anchor: 'pick',\n        fare: leg.get('segment.fare'),\n        travelMode: travelMode,\n        segmentType: _tripType.ITP_TRIP,\n        noSharing: 0,\n        legOrdinal: legOrdinal,\n        pick: store.createRecord('segment-stop', {\n          type: 'pick',\n          notes: pickNotes,\n          plannedEta: (0, _moment.default)(itpSegment.start.time).toDate(),\n          onboardCount: 1,\n          place: pickPlace,\n          dwell: leg.get('segment.pick.dwell')\n        }),\n        drop: store.createRecord('segment-stop', {\n          type: 'drop',\n          notes: dropNotes,\n          plannedEta: (0, _moment.default)(itpSegment.end.time).toDate(),\n          onboardCount: 1,\n          place: dropPlace,\n          dwell: leg.get('segment.drop.dwell')\n        }),\n        fareType: fareType\n      });\n      return segment;\n    },\n\n    async setPlaceAddressByLatLng(place, latlng, selectType) {\n      const bookingAddress = await this.fetchAddressForLatLng(latlng);\n      const beNomadAddress = bookingAddress.address.beNomadAddress;\n      const geoNode = await this.getAddressGeoNode(latlng.lat, latlng.lng, beNomadAddress, selectType);\n\n      if (!geoNode) {\n        return;\n      }\n\n      const location = place.get('location');\n      location.set('lat', parseFloat(latlng.lat.toFixed(5)));\n      location.set('lng', parseFloat(latlng.lng.toFixed(5)));\n      const placeAddress = place.get('address');\n      this.updateAddress(placeAddress, bookingAddress, geoNode.zone);\n    },\n\n    async setPlaceAddressByLatLngforITPInDB(location, address, latlng, selectType) {\n      const bookingAddress = await this.fetchAddressForLatLng(latlng);\n      const beNomadAddress = bookingAddress.address.beNomadAddress;\n      const geoNode = await this.getAddressGeoNode(latlng.lat, latlng.lng, beNomadAddress, selectType);\n\n      if (!geoNode) {\n        return;\n      }\n\n      location.set('lat', parseFloat(latlng.lat.toFixed(5)));\n      location.set('lng', parseFloat(latlng.lng.toFixed(5))); //Getting the zone type using the id present in the geoNode and setting it to address\n\n      const zoneType = this.get('store').peekRecord('zone-type', geoNode.zone.zoneName);\n      address.set('zoneName', zoneType);\n      this.updateAddress(address, bookingAddress, geoNode.zone);\n    },\n\n    async fetchOrCreatePlaceByLatLngForITPInDB(latlng, selectType) {\n      const store = this.get('store');\n      const locationsQuery = `and(eq(lat,'${latlng.lat}'),eq(lng,'${latlng.lng}'))`;\n      const locations = await store.query('location', {\n        filter: locationsQuery\n      });\n\n      if (!Ember.isEmpty(locations)) {\n        const placeQuery = `in(locationId,('${locations.firstObject.id}'))`;\n        const places = await store.query('place', {\n          filter: placeQuery\n        }); //fix: NYAAR-17285, As place is empty we are creating place record to get the place ID.\n\n        if (Ember.isEmpty(places)) {\n          const address = store.createRecord('address');\n          await this.setPlaceAddressByLatLngforITPInDB(locations.firstObject, address, latlng, selectType);\n          const dbAddress = await address.save();\n          return this.createPlaceRecord(locations.firstObject, dbAddress);\n        }\n\n        return places.firstObject;\n      }\n\n      const address = store.createRecord('address');\n      const location = store.createRecord('location');\n      await this.setPlaceAddressByLatLngforITPInDB(location, address, latlng, selectType);\n      const dbLocation = await location.save();\n      const dbAddress = await address.save();\n      return this.createPlaceRecord(dbLocation, dbAddress);\n    },\n\n    createPlaceRecord(location, address) {\n      const store = this.get('store');\n      const placeCategoryType = store.peekRecord('place-category-type', 'passenger');\n      const place = store.createRecord('place', {\n        address: address,\n        location: location,\n        placeCategoryType: placeCategoryType,\n        geocodingMethod: 'something'\n      });\n      return place.save();\n    },\n\n    addBookingTripForITPSegment: (0, _emberConcurrency.task)(function* (schedule, operation, options) {\n      let asyncResult;\n\n      try {\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createScheduleAsyncOperation.perform(schedule, operation, options);\n\n        if (!isJobSuccess) {\n          return;\n        }\n\n        asyncResult = JSON.parse(results);\n      } catch (e) {\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          this.get('notifications').warning('Adding trip for ITP Segment Failed');\n          throw e;\n        }\n      }\n\n      return Promise.resolve(asyncResult);\n    }).drop(),\n\n    async getPromiseTimeForITPSegments(segments, booking) {\n      const bookingId = booking.get('id');\n      const tripsByBookingID = `and(eq(schedule.type,'booking'),in(booking,('${bookingId}')))&include=schedule,route,pick,drop`;\n      const trips = await this.get('store').query('trip', {\n        filter: tripsByBookingID\n      });\n      let schedule;\n\n      if (!Ember.isEmpty(trips)) {\n        schedule = trips.firstObject.get('schedule');\n      }\n\n      if (Ember.isEmpty(schedule)) {\n        return;\n      }\n\n      const operationData = this.prepareAddBookingTripPayload(segments, booking, schedule);\n      const options = {\n        operationData,\n        outputResult: true\n      };\n      const results = await this.addBookingTripForITPSegment.perform(schedule, 'addBookingTrip', options);\n      return results;\n    },\n\n    prepareAddBookingTripPayload(segments, booking, schedule) {\n      const {\n        tripDataList,\n        segmentStopIdMapList\n      } = this.getTripDataPayloadInfo(booking, segments, schedule);\n      const included = this.getIncludedPayload(booking, segments, segmentStopIdMapList);\n      return {\n        data: tripDataList,\n        included\n      };\n    },\n\n    /**\n     * return tripdata payload for addBookingTrip schedule operation\n     * @param booking\n     * @param segments\n     * @param schedule\n     * @returns {{tripDataList: Array, segmentStopIdMapList: Array}}\n     */\n    getTripDataPayloadInfo(booking, segments, schedule) {\n      const segmentStopIdMapList = [];\n      const tripDataList = [];\n      let segmentStopId = 0;\n\n      for (const segment of segments) {\n        const pickSegmentStop = segment.get('pick');\n        const dropSegmentStop = segment.get('drop');\n        const pickTripStopId = `-${++segmentStopId}`;\n        const dropTripStopId = `-${++segmentStopId}`;\n        const pickSegmentStopIdMap = {\n          segmentId: segment.get('id'),\n          tripStopId: pickTripStopId,\n          segmentStopId: pickSegmentStop.get('id')\n        };\n        segmentStopIdMapList.push(pickSegmentStopIdMap);\n        const dropSegmentStopIdMap = {\n          segmentId: segment.get('id'),\n          tripStopId: dropTripStopId,\n          segmentStopId: dropSegmentStop.get('id')\n        };\n        segmentStopIdMapList.push(dropSegmentStopIdMap);\n        const tripData = {\n          type: 'trip',\n          attributes: {\n            status: 'waitlisted'\n          },\n          relationships: {\n            pick: {\n              data: {\n                type: 'tripStop',\n                id: pickTripStopId\n              }\n            },\n            drop: {\n              data: {\n                type: 'tripStop',\n                id: dropTripStopId\n              }\n            },\n            schedule: {\n              data: {\n                type: 'schedule',\n                id: schedule.get('id')\n              }\n            },\n            segment: {\n              data: {\n                type: 'segment',\n                id: segment.get('id')\n              }\n            },\n            booking: {\n              data: {\n                type: 'booking',\n                id: booking.get('id')\n              }\n            }\n          }\n        };\n\n        if (booking.get('subscription.id')) {\n          tripData.relationships.subscription = {\n            data: {\n              type: 'subscription',\n              id: booking.get('subscription.id')\n            }\n          };\n        }\n\n        tripDataList.push(tripData);\n      }\n\n      return {\n        tripDataList,\n        segmentStopIdMapList\n      };\n    },\n\n    /**\n     * return included payload for addBookingTrip schedule operation\n     * @param booking\n     * @param segments\n     * @param segmentStopIdMapList\n     * @returns {{type: string, id: *}[]}\n     */\n    getIncludedPayload(booking, segments, segmentStopIdMapList) {\n      const included = [{\n        type: 'booking',\n        id: booking.get('id')\n      }];\n\n      if (booking.get('subscription.id')) {\n        included.push({\n          type: 'subscription',\n          id: booking.get('subscription.id')\n        });\n      }\n\n      for (const segment of segments) {\n        const segmentStopIdList = segmentStopIdMapList.filter(segmentStopIdInfo => {\n          return segmentStopIdInfo.segmentId === segment.get('id');\n        });\n        const segmentInfo = {\n          type: 'segment',\n          id: segment.get('id')\n        };\n        included.push(segmentInfo);\n        segmentStopIdList.forEach(segmentStopIdInfo => {\n          const segmentStop = {\n            type: 'segmentStop',\n            id: segmentStopIdInfo.segmentStopId\n          };\n          included.push(segmentStop);\n          const tripStop = {\n            type: 'tripStop',\n            id: segmentStopIdInfo.tripStopId,\n            attributes: {\n              plannedRouteOrdinal: 1\n            },\n            relationships: {\n              segmentStop: {\n                data: {\n                  type: 'segmentStop',\n                  id: segmentStopIdInfo.segmentStopId\n                }\n              }\n            }\n          };\n          included.push(tripStop);\n        });\n      }\n\n      return included;\n    },\n\n    /**\n     *\n     * @param latlng {lat : <value> , lng : <value>}\n     * @returns {Promise<void>}\n     */\n    async createPlaceByLatLng(latlng, selectType) {\n      const store = this.get('store');\n      const zoneType = store.createRecord('zone-type');\n      const address = store.createRecord('address', {\n        zoneName: zoneType\n      });\n      const location = store.createRecord('location');\n      const place = store.createRecord('place', {\n        address: address,\n        location: location\n      });\n      await this.setPlaceAddressByLatLng(place, latlng, selectType);\n      return place;\n    },\n\n    setItpInfo(itpRequestResults, itpResultType, hasOverrideITP) {\n      if (!itpRequestResults || !itpResultType) {\n        return this.set('itpInfo', {\n          itpRequestResults: [],\n          itpResultType: {},\n          hasOverrideITP: null\n        });\n      }\n\n      this.set('itpInfo', {\n        itpRequestResults,\n        itpResultType,\n        hasOverrideITP\n      });\n    },\n\n    setSelectedTravelMode(legIndex, travelMode) {\n      if (legIndex < 0 || !travelMode) {\n        return this.set('selectedTravelModeMap', {});\n      }\n\n      this.set(`selectedTravelModeMap.${legIndex}`, travelMode);\n    },\n\n    setSelectedTravelModeInBooking(legIndex, travelMode) {\n      if (legIndex < 0 || !travelMode) {\n        return;\n      }\n\n      const legs = this.get('activeBooking').legs;\n      const concernLeg = legs.objectAt(legIndex);\n      concernLeg.set('segments.firstObject.travelMode', travelMode);\n    },\n\n    getSelectedTravelMode(legIndex) {\n      const legTravelModeMap = this.get('selectedTravelModeMap');\n      return legTravelModeMap[legIndex];\n    },\n\n    /**\n     * save temporary booking with status 'requested' and adding booking to trips.\n     * this api will give  promise time  for each legs\n     * @returns {Promise<*>}\n     */\n    async saveBookingWithPromiseTime(bookingMode) {\n      const payload = await this.convertBookingRecordToPayloadFormat(this.get('activeBooking'), bookingMode);\n      return await this.get('ajax').post(_apiUrls.API.bookingService.host + '/booking-trip', {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n        },\n        data: JSON.stringify(payload)\n      }).then(result => {\n        this.resetAllEntityCounts();\n        return result;\n      }).catch(err => {\n        if (err.status === 400) {\n          err.message = 'There was a problem with one of the fields. Please check over the form and try again.';\n        }\n\n        this.resetAllEntityCounts();\n        return Promise.reject(err);\n      });\n    },\n\n    // call promise time  async operation  and  store the promise time result\n    async processPromiseTimeAsyncOperation(temporaryBookingResult, temporarybookingRecord) {\n      const promiseTimeFailureReasonList = {};\n      const {\n        promiseTimeAsyncOperationInfoArray\n      } = temporaryBookingResult;\n      let bookingId = null; // checking the result because temporaryBookingResult gets different format depending on same day or not\n\n      if (temporaryBookingResult.constructor === Array) {\n        bookingId = temporaryBookingResult.firstObject.relationships ? temporaryBookingResult.firstObject.relationships.booking.data.id : temporaryBookingResult.firstObject.booking;\n      } else {\n        bookingId = temporaryBookingResult.booking || temporaryBookingResult.bookingId;\n      }\n\n      this.set('tempBookingInfo.tempBookingId', bookingId);\n      this.set('tempBookingInfo.tempBookingRecord', temporarybookingRecord.firstObject); // if there is no schedule, promiseTimeAsyncOperationInfo will be empty\n      // continue booking even promise time retrieval fails\n\n      if (!promiseTimeAsyncOperationInfoArray) {\n        promiseTimeFailureReasonList.ALL = {\n          reason: 'Please contact administrator. \"There is no schedule for the request date\"'\n        };\n        this.set('tempBookingInfo.promiseTimeFailureReasonResult', promiseTimeFailureReasonList);\n        return;\n      }\n\n      await this.get('store').queryRecord('booking', bookingId);\n      let promiseTimeResultIncludedData = [];\n      let index = 1;\n      const promiseTimeResultDataList = {};\n\n      for (const promiseTimeAsyncOperationInfo of promiseTimeAsyncOperationInfoArray) {\n        const {\n          isJobSuccess,\n          results\n        } = await this.callScheduleAsyncOperation(promiseTimeAsyncOperationInfo);\n\n        if (isJobSuccess) {\n          const promiseTimeResult = JSON.parse(results);\n          const promiseTimeResultData = promiseTimeResult.data || [];\n          const included = promiseTimeResult.included || []; // eslint-disable-next-line no-loop-func\n\n          promiseTimeResultData.forEach(promiseTimeResponse => {\n            promiseTimeResultDataList[`'${index}'`] = promiseTimeResponse;\n\n            if (Ember.isPresent(promiseTimeResponse.attributes.reason)) {\n              promiseTimeFailureReasonList[`'${index}'`] = {\n                reason: promiseTimeResponse.attributes.reason\n              };\n            }\n\n            index = index + 1;\n          });\n          promiseTimeResultIncludedData = [...promiseTimeResultIncludedData, ...included];\n        } else {\n          console.warn('failed to fetch promise time ' + results);\n          const startIndex = results.indexOf('{') - 1;\n          const endIndex = results.indexOf('}') + 1;\n          const resultJSONStr = startIndex >= 0 && endIndex >= 0 ? results.substring(startIndex, endIndex) : '{}';\n          const resultObject = JSON.parse(resultJSONStr);\n          const tempMessage = Ember.isPresent(resultObject.statusCode) ? `\"${resultObject.statusCode} - ${resultObject.reason}\"` : results;\n          const errorMessage = `Please contact administrator for failure reason. ${tempMessage}`;\n          promiseTimeFailureReasonList.ALL = {\n            reason: errorMessage\n          };\n        }\n      }\n\n      this.set('tempBookingInfo.promiseTimeResult', promiseTimeResultDataList);\n      this.set('tempBookingInfo.promiseTimeFailureReasonResult', promiseTimeFailureReasonList);\n      this.set('tempBookingInfo.promiseTimeResultIncludedData', promiseTimeResultIncludedData);\n    },\n\n    async callScheduleAsyncOperation(asyncOperationInfo) {\n      return await this.get('asyncOperationState').perform(asyncOperationInfo, true);\n    },\n\n    setTemporaryBookingInfo(tempBookingId, promiseTimeResult) {\n      this.set('tempBookingInfo.tempBookingId', tempBookingId);\n      this.set('tempBookingInfo.promiseTimeResult', promiseTimeResult);\n    },\n\n    /**\n     *  we can get promise time if these  4  condition  is passed\n     * @param legIndex\n     * @returns {*|boolean}\n     */\n    canGetPromiseTime(legIndex) {\n      return this.get('enableNewPromiseTimeApi') && this.get('tempBookingInfo.tempBookingId') && this.hasPromiseTime(legIndex);\n    },\n\n    /**\n     * get promise time  if paratransit or itp(feeder mode)  is selected..\n     * otherwise return leg requested time\n     * @param legIndex\n     * @param leg  ==> leg object is plain javascript object\n     * @returns {*}\n     */\n    getPromiseTime(legIndex, leg) {\n      // if promise time  cannot be selected , get default   leg request time\n      if (!this.canGetPromiseTime(legIndex)) {\n        return leg.requestTime;\n      }\n\n      const promiseTimeData = this.get('tempBookingInfo.promiseTimeResult') || {};\n      const promiseTimeResult = promiseTimeData[`'${legIndex + 1}'`];\n\n      if (Ember.isPresent(promiseTimeResult.attributes)) {\n        return promiseTimeResult.attributes.promiseTime;\n      }\n\n      return null;\n    },\n\n    /**\n     * @param legIndex\n     * @returns {boolean}\n     */\n    hasPromiseTimeforItpsegment(legIndex) {\n      const promiseTimeResultList = this.get('itpSegmentPromiseTimeResults.data') || [];\n      const promiseTimeResult = promiseTimeResultList[legIndex];\n      return !!promiseTimeResult;\n    },\n\n    /**\n     *  we can get promise time if these conditions passed\n     * @param legIndex\n     * @returns {*|boolean}\n     */\n    canGetPromiseTimeforItpsegment(legIndex) {\n      return this.get('enableNewPromiseTimeApi') && this.hasPromiseTimeforItpsegment(legIndex);\n    },\n\n    /**\n     * get promise time  for paratransit segments when itp(feeder mode)  is selected..\n     * otherwise return leg requested time\n     * @param legIndex\n     * @param leg  ==> leg object is plain javascript object\n     * @returns {*}\n     */\n    getPromiseTimeforItpsegment(legIndex) {\n      const promiseTimeData = this.get('itpSegmentPromiseTimeResults.data') || [];\n      const promiseTimeResult = promiseTimeData[legIndex];\n      return (0, _moment.default)(promiseTimeResult.attributes.promiseTime).format('hh:mm A');\n    },\n\n    /**\n     *\n     * @param legIndex\n     * @param leg ==> leg object is plain javascript object\n     * @returns {*}\n     */\n    getArrivalTime(legIndex) {\n      // if promise time  cannot be selected , get default   leg request time\n      if (!this.canGetPromiseTime(legIndex)) {\n        return '';\n      }\n\n      const promiseTimeData = this.get('tempBookingInfo.promiseTimeResult') || {};\n      const promiseTimeResult = promiseTimeData[`'${legIndex + 1}'`];\n      const dropTripStopId = promiseTimeResult.relationships.drop.data.id;\n      const promiseTimeIncludedList = this.get('tempBookingInfo.promiseTimeResultIncludedData') || [];\n      const dropTripStop = promiseTimeIncludedList.find(data => data.id === dropTripStopId);\n      return dropTripStop && dropTripStop.attributes.plannedEta || '';\n    },\n\n    /**\n     * @param legIndex\n     * @returns {boolean}\n     */\n    hasPromiseTime(legIndex) {\n      const promiseTimeResultList = this.get('tempBookingInfo.promiseTimeResult') || {};\n      const promiseTimeResult = promiseTimeResultList[`'${legIndex + 1}'`];\n      return !!promiseTimeResult;\n    },\n\n    /**\n     * @param legIndex\n     * @returns {result}\n     */\n    promiseTimeFailureReason(legIndex) {\n      const promiseTimeResultList = this.get('tempBookingInfo.promiseTimeFailureReasonResult') || {};\n      const promiseTimeResult = legIndex === 'ALL' ? promiseTimeResultList[legIndex] : promiseTimeResultList[`'${legIndex + 1}'`];\n      return Ember.isPresent(promiseTimeResult) ? promiseTimeResult.reason : null;\n    },\n\n    // check temp booking is created\n    hasTempBooking() {\n      const tempBookingId = this.get('tempBookingInfo.tempBookingId');\n      return !!tempBookingId;\n    },\n\n    async deleteTemporaryBooking(action, isEditMode) {\n      try {\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n        if (this.get('enableNewPromiseTimeApi')) {\n          const bookingID = this.get('tempBookingInfo.tempBookingId');\n          const tripCancelJobs = await this.deleteBooking(bookingID, action, isEditMode);\n          this.set('tempBookingInfo', {});\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n          return tripCancelJobs ? tripCancelJobs.tripCancelJobs : [];\n        }\n      } catch (error) {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n        this.get('notifications').warning(`ERROR: ${error.message} WHILE DELETING TEMPORARY DATA`);\n      }\n    },\n\n    async deleteBooking(bookingID, action, isEditMode, riderId) {\n      const session = this.get('session');\n      const doCancelBooking = !isEditMode;\n      const loggingMeta = {\n        refusedByRider: riderId\n      };\n      let json, resource;\n\n      switch (action) {\n        case 'editUnscheduled':\n          json = JSON.stringify({\n            doCancelBooking,\n            loggingMeta,\n            doCancelTrip: false\n          });\n          resource = 'booking-with-subentity';\n          break;\n\n        case 'refuse':\n        case 'taxi':\n        case 'edit':\n          json = JSON.stringify({\n            loggingMeta,\n            doCancelTrip: true\n          });\n          resource = 'booking-with-subentity';\n          break;\n\n        default:\n          json = JSON.stringify({\n            loggingMeta,\n            doCancel: true\n          });\n          resource = 'booking';\n      }\n\n      return await this.get('ajax').post(_apiUrls.API.bookingService.host + `/${resource}/` + bookingID, {\n        method: 'DELETE',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      });\n    },\n\n    async fetchSubscriptionTrips(subscriptionId) {\n      const session = this.get('session');\n      return await this.get('ajax').request(_apiUrls.API.bookingService.host + '/subscription/' + subscriptionId + '/trips', {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      });\n    },\n\n    setCheckedSubscriptionTrips(trips) {\n      const tripIds = trips.map(trip => trip.id);\n      this.set('tripIds', tripIds);\n    },\n\n    isCheckPca() {\n      const travelNeeds = this.get('travelNeedItems');\n      return travelNeeds.toArray().some(tr => TRAVEL_NEEDS_VERIFY[0].includes(tr.get('name')));\n    },\n\n    isCheckServiceAnimal() {\n      const travelNeeds = this.get('travelNeedItems');\n      return travelNeeds.toArray().some(tr => TRAVEL_NEEDS_VERIFY[1].includes(tr.get('name')));\n    },\n\n    /**\n     * check whether taxi mode selected\n     * @returns {*|boolean}\n     */\n    isTaxiModeSelected() {\n      const selectedTravelModeMap = this.get('selectedTravelModeMap');\n      const selectedTravelModes = Object.values(selectedTravelModeMap) || [];\n      const isTaxiSelected = selectedTravelModes.length === 0 ? false : selectedTravelModes.every(travelMode => {\n        return travelMode.toLowerCase() === 'taxi';\n      });\n      return isTaxiSelected;\n    },\n\n    /**\n     * check either  paratransit or  itp with feeder mode selected\n     * @returns {*|boolean}\n     */\n    hasParaTransitOrItpFeederModeSelected(legIndex) {\n      const {\n        itpResultType\n      } = this.get('itpInfo');\n      const selectedTravelModeMap = this.get('selectedTravelModeMap');\n      const selectedTravelModes = Object.values(selectedTravelModeMap) || [];\n      const isParatransitSelected = selectedTravelModes.length === 0 ? false : selectedTravelModes[legIndex].toLowerCase() === 'paratransit';\n      const isItpFeederResultType = itpResultType[legIndex] === _itineraryType.FEEDER;\n      return isParatransitSelected || isItpFeederResultType;\n    },\n\n    // NYAAR-13442 Booking: Consumable travel needs with count=0 should not be saved in leg travel needs tables\n    filterConsumableTravelNeeds(legTravelNeedRecords) {\n      const travelNeedItems = this.get('travelNeedItems');\n      const consumableTravelNeeds = travelNeedItems.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) > 0);\n      const TR_N_TO_NOT_SAVE_IF_COUNT_ZERO = consumableTravelNeeds.map(tr => tr.get('name').toUpperCase());\n      return legTravelNeedRecords.filter(lt => !(TR_N_TO_NOT_SAVE_IF_COUNT_ZERO.indexOf(lt.get('travelNeedTypeNameUppercase')) > -1 && parseInt(lt.get('count'), 10) === 0));\n    },\n\n    // NYAAR-13459 Booking - Upon editing a booking, service mode is getting changed\n    getActiveBookingTravelModeMap() {\n      const legTravelModeMap = {};\n      this.get('activeBooking.legs').forEach((leg, index) => {\n        legTravelModeMap[index] = leg.get('segments.firstObject.travelMode');\n      });\n      return legTravelModeMap;\n    },\n\n    isNumber(val) {\n      const regEx = /^[0-9]*$/;\n      const valString = typeof val === 'string' ? val : val.toString();\n\n      if (valString && valString.match(regEx)) {\n        return true;\n      }\n\n      return false;\n    },\n\n    getSysConfigCompanionFare() {\n      const configItemsFareCategories = this.getSystemConfigFareCategories();\n      const guestFareCategory = configItemsFareCategories.find(fareCategory => fareCategory.get('displayName') === 'Guest');\n      const guestFare = Ember.isPresent(guestFareCategory) ? guestFareCategory.value.Amount || guestFareCategory.value.amount : 0;\n      return Number(guestFare);\n    },\n\n    getSysConfigRegularFare() {\n      const configItemsFareCategories = this.getSystemConfigFareCategories();\n      const regularFareCategory = configItemsFareCategories.find(fareCategory => fareCategory.get('displayName') === 'REG');\n      const regularFare = Ember.isPresent(regularFareCategory) ? regularFareCategory.value.Amount || regularFareCategory.value.amount : 0;\n      return Number(regularFare);\n    },\n\n    getSystemConfigFareCategories() {\n      return this.store.peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-System_Configuration-fare_categories';\n      });\n    },\n\n    getAllowFundingAgency() {\n      const allowFundingAgency = this.store.peekRecord('cs-config-item', 'config-Book_Trips/allowFundingAgency');\n      return Ember.isPresent(allowFundingAgency) ? allowFundingAgency.get('value') : true;\n    },\n\n    getFutureBookingTimeline() {\n      const futureBookingTimelineConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/Future_Booking_Timeline');\n      const futureBookingTimelineString = Ember.isPresent(futureBookingTimelineConfig) ? futureBookingTimelineConfig.get('value') : '0';\n      const futureBookingTimeline = parseInt(futureBookingTimelineString, 10);\n      return !(0, _lodash.isNaN)(futureBookingTimeline) ? futureBookingTimeline : 0;\n    },\n\n    getEligibilityExpirationCheckDays() {\n      const eligibilityExpirationCheckDaysConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/eligibilityExpirationCheckDays');\n      const eligibilityExpirationCheckDaysString = Ember.isPresent(eligibilityExpirationCheckDaysConfig) ? eligibilityExpirationCheckDaysConfig.get('value') : '60';\n      const eligibilityExpirationCheckDays = parseInt(eligibilityExpirationCheckDaysString, 10);\n      return !(0, _lodash.isNaN)(eligibilityExpirationCheckDays) ? eligibilityExpirationCheckDays : 60;\n    },\n\n    getBookingMode() {\n      const bookingModeConfig = this.store.peekRecord('cs-config-item', 'config-Book_Trips/bookingMode');\n      return Ember.isPresent(bookingModeConfig) ? bookingModeConfig.get('value') : 'Immediate';\n    },\n\n    isCallBackBookingModeType() {\n      return this.getBookingMode() === CALLBACK_BOOKINGMODE_TYPE;\n    },\n\n    setEmptyAddressLocation(place) {\n      const address = this.store.createRecord('address');\n      const location = this.store.createRecord('location');\n      place.set('address', address);\n      place.set('location', location);\n    },\n\n    validateDateNotToBePastDate(date, currentDate, prevDate, subscriptionType, dateType) {\n      if ((0, _moment.default)(date).isBefore(currentDate) && !(0, _moment.default)(prevDate).isSame((0, _moment.default)(date))) {\n        this.showErrorMessage(`Please select valid ${subscriptionType} ${dateType} date.`);\n        return false;\n      }\n\n      return true;\n    },\n\n    async deleteTrips(bookingId) {\n      const tripsByBookingID = `in(booking,('${bookingId}'))&include=schedule,route,pick,drop`;\n      const trips = await this.get('store').query('trip', {\n        filter: tripsByBookingID\n      });\n\n      if (!Ember.isEmpty(trips)) {\n        for (const trip of trips.toArray()) {\n          await trip.destroyRecord();\n        }\n      }\n    },\n\n    async deleteSelectedTrips(tripIds) {\n      const filter = `in(id,(${tripIds.join(',')}))`;\n      const tripsToDelete = await this.get('store').query('trip', {\n        filter\n      });\n\n      if (!Ember.isEmpty(tripsToDelete)) {\n        for (const trip of tripsToDelete.toArray()) {\n          await trip.destroyRecord();\n        }\n      }\n    },\n\n    async deleteSelectedLegs(legIds) {\n      const filter = `in(id,(${legIds.join(',')}))`;\n      const legsToDelete = await this.get('store').query('leg', {\n        filter\n      });\n\n      if (!Ember.isEmpty(legsToDelete)) {\n        for (const leg of legsToDelete.toArray()) {\n          await leg.destroyRecord();\n        }\n      }\n    },\n\n    async deleteSelectedSegmentStops(stopIds) {\n      const filter = `in(id,(${stopIds.join(',')}))`;\n      const stopsToDelete = await this.get('store').query('segment-stop', {\n        filter\n      });\n\n      if (!Ember.isEmpty(stopsToDelete)) {\n        for (const stop of stopsToDelete.toArray()) {\n          await stop.destroyRecord();\n        }\n      }\n    },\n\n    // flags each searched rider-external whose IQ rider has a suspension covering today,\n    // so the search results show them as Inactive and the create buttons stay disabled\n    async setSuspensionStatusForRiders(riderExternals) {\n      const riderIds = riderExternals.map(r => r.get('riderId')).filter(id => Ember.isPresent(id));\n      if (Ember.isEmpty(riderIds)) return;\n\n      try {\n        const riderIdsInClause = riderIds.map(r => `'${r}'`).join(',');\n        const riders = await this.store.query('rider', {\n          filter: `in(riderId,(${riderIdsInClause}))`\n        });\n        const today = (0, _moment.default)();\n        riderExternals.forEach(riderExternal => {\n          const rider = riders.findBy('riderId', riderExternal.get('riderId'));\n          const suspensions = rider ? rider.get('riderSuspensions').toArray() : [];\n          const hasActiveSuspension = suspensions.some(suspension => {\n            return today.isBetween(suspension.get('startDate'), suspension.get('endDate'), 'day', '[]');\n          });\n          riderExternal.set('hasActiveSuspension', hasActiveSuspension);\n        });\n      } catch (e) {\n        // suspension lookup must not break the passenger search itself\n        console.warn('Unable to load rider suspensions for searched passengers.', e); //eslint-disable-line no-console\n      }\n    },\n\n    fetchAndReturnRiders(riderIds) {\n      return new Promise((res, rej) => {\n        const riderPromises = riderIds.map(rId => {\n          return this.store.findRecord('rider', rId);\n        });\n        Promise.all(riderPromises).then(riderRecords => {\n          res(riderRecords);\n        }).catch(e => {\n          rej(e);\n        });\n      });\n    },\n\n    fetchExternalRidersAndSetToSelectedRiders(externalRiderIds, setRiders) {\n      return new Promise((res, rej) => {\n        const riderExternalPromises = externalRiderIds.map(rId => {\n          return this.store.findRecord('rider-external', rId);\n        });\n        Promise.all(riderExternalPromises).then(riderExternalRecords => {\n          if (setRiders) {\n            riderExternalRecords.forEach(rExt => {\n              this.addSelectedRider(rExt);\n            });\n          }\n\n          res(riderExternalRecords);\n        }).catch(e => {\n          rej(e);\n        });\n      });\n    },\n\n    async saveLegServiceNeed(booking) {\n      const selectedRiders = this.get('selectedRiders');\n      const activeBookingLegs = this.get('activeBooking.legs');\n      const bookingLegs = booking.firstObject.get('legs').toArray().sortBy('id');\n      const totalActiveLegsLength = activeBookingLegs.length;\n      let legServiceNeeds = []; //for group booking we create added legs each for selected riders,so we have to create same no of leg-service-needs as legs have\n\n      activeBookingLegs.forEach((leg, legIndex) => {\n        let legDataIndex = legIndex;\n        selectedRiders.forEach(() => {\n          const legData = bookingLegs[legDataIndex];\n          const prevLegServiceNeeds = leg.legServiceNeeds.toArray();\n          const currentLegServiceNeeds = prevLegServiceNeeds.map(serviceNeed => {\n            const legServiceNeed = this.get('store').createRecord('leg-service-need', {\n              serviceNeedType: serviceNeed.serviceNeedType,\n              leg: legData\n            });\n            return legServiceNeed;\n          });\n          legServiceNeeds.push(...currentLegServiceNeeds);\n          legDataIndex = legDataIndex + totalActiveLegsLength;\n        });\n      });\n      legServiceNeeds = (0, _lodash.flatten)(legServiceNeeds).toArray(); //NYAAR-18800 - If the serviceNeedType is null we don't want to save the serviceNeeds\n\n      const filteredLegServiceNeeds = legServiceNeeds.filter(legServiceNeed => legServiceNeed.isNew && !Ember.isEmpty(legServiceNeed.serviceNeedType));\n      await filteredLegServiceNeeds.reduce(async (acu, legServiceNeed) => {\n        return acu.then(() => {\n          return legServiceNeed.save();\n        });\n      }, Promise.resolve());\n    },\n\n    /**\n    * this function is used in new booking form\n    * @param {*} booking(array of objects)\n    */\n    async saveSegmentStopPhoneNumber(booking) {\n      const bookingLegs = booking.firstObject.get('legs').toArray();\n      const legs = this.get('activeBooking.legs').toArray();\n      bookingLegs.forEach(async (leg, index) => {\n        const activeLeg = legs[index];\n\n        if (activeLeg) {\n          const activeSegments = activeLeg.get('segments');\n          const legSegments = leg.get('segments').toArray();\n          await activeSegments.reduce((acu, segment, segmentIndex) => {\n            return acu.then(async () => {\n              const legSegment = legSegments[segmentIndex];\n              const pickSegmentStop = legSegment.get('stops.firstObject');\n              const dropSegmentStop = legSegment.get('stops.lastObject');\n              const pickPhoneNumber = segment.get('pick.phoneNumbers.firstObject');\n              const dropPhoneNumber = segment.get('drop.phoneNumbers.firstObject'); //remove if the pick phone number have empty record\n\n              this.removeUnSavedPhoneNumbers(pickPhoneNumber, segment, 'pick'); //remove if the drop phone number have empty record\n\n              this.removeUnSavedPhoneNumbers(dropPhoneNumber, segment, 'drop'); //save pick Phone number\n\n              await this.saveNumberAndSetSegmentStop(pickPhoneNumber, segment, pickSegmentStop, 'pick'); //save drop Phone number\n\n              await this.saveNumberAndSetSegmentStop(dropPhoneNumber, segment, dropSegmentStop, 'drop'); //delete Record if it does'nt have a pick phone number\n\n              await this.deleteSegmentStopPhoneNumber(pickPhoneNumber); //delete Record if it does'nt have drop a phone number\n\n              await this.deleteSegmentStopPhoneNumber(dropPhoneNumber);\n            });\n          }, Promise.resolve());\n        }\n      });\n    },\n\n    /**\n    * this function is used for adjust legOrdinals in ITP leg\n    */\n    adjustItpBookingLegOrdinals() {\n      const legs = this.get('activeBooking.legs').toArray();\n      legs.forEach(leg => {\n        const legSegments = leg.get('segments').toArray();\n        legSegments.forEach((segment, index) => {\n          const curLegOrdinal = segment.get('legOrdinal');\n          segment.set('legOrdinal', curLegOrdinal + index);\n        });\n      });\n    },\n\n    //check the phone number length is required length\n    checkPhoneNumberLength(phoneNumber) {\n      return phoneNumber && phoneNumber.get('fullPhoneNumber').length === MAX_PHONE_NUMBER_LENGTH;\n    },\n\n    //remove the unsaved records\n    removeUnSavedPhoneNumbers(phoneNumber, activeLegSegment, numberType) {\n      if (phoneNumber && !this.checkPhoneNumberLength(phoneNumber) && !phoneNumber.get('id')) {\n        activeLegSegment.get(`${numberType}.phoneNumbers`).removeObject(phoneNumber);\n      }\n    },\n\n    async saveNumberAndSetSegmentStop(phoneNumber, activeLegSegment, segmentStop, numberType) {\n      if (this.checkPhoneNumberLength(phoneNumber)) {\n        phoneNumber.set('segmentStop', segmentStop);\n        await phoneNumber.save(); // Phone No field in Trips details is not getting retained after we click on Tick icon. the segmentStopPhoneNumberIds used for edit and update booking.\n\n        this.get('segmentStopPhoneNumberIds').pushObject(phoneNumber);\n        const activeLegPhoneNumber = activeLegSegment.get(`${numberType}.phoneNumbers`);\n        activeLegPhoneNumber.pushObject(phoneNumber);\n        activeLegSegment.set(`${numberType}.phoneNumbers'`, activeLegPhoneNumber);\n      }\n    },\n\n    //segment stop phone number delete\n    async deleteSegmentStopPhoneNumber(phoneNumber) {\n      if (phoneNumber && !this.checkPhoneNumberLength(phoneNumber) && phoneNumber.get('id')) {\n        await phoneNumber.destroyRecord();\n      }\n    },\n\n    createSubscriptionServiceNeedRecord(subscription) {\n      const externalRider = this.get('selectedRiders.firstObject');\n      const riderServiceNeeds = externalRider.get('serviceNeeds');\n      const store = this.get('store');\n      const subscriptionServiceNeeds = [];\n      riderServiceNeeds.forEach(riderServiceNeed => {\n        const serviceNeedType = store.peekAll('service-need-type').find(tntype => {\n          return tntype.get('id') === riderServiceNeed;\n        });\n\n        if (!Ember.isNone(serviceNeedType)) {\n          const subscriptionServiceNeed = store.createRecord('subscription-service-need', {\n            serviceNeedType: serviceNeedType,\n            subscription\n          });\n          subscriptionServiceNeeds.push(subscriptionServiceNeed);\n        }\n      });\n      return subscriptionServiceNeeds;\n    },\n\n    // if all legs is checked in travel need section, set load and unload to all segments from first leg segment\n    setLoadAndUnloadTimeInSegmentStop(bookingRawData) {\n      if (this.isAllLegs && bookingRawData.legs.length > 1) {\n        const loadTime = bookingRawData.legs.firstObject.segments.firstObject.pick.dwell;\n        const unloadTime = bookingRawData.legs.firstObject.segments.firstObject.drop.dwell;\n        bookingRawData.legs.forEach(leg => {\n          const pickSegment = leg.segments.firstObject.pick;\n          const dropSegment = leg.segments.firstObject.drop;\n          pickSegment.dwell = loadTime;\n          dropSegment.dwell = unloadTime;\n        });\n      }\n    },\n\n    createCopyBookingTravelNeeds(legTravelNeeds, newLeg) {\n      const newLegTravelNeeds = legTravelNeeds.map(legTravelNeed => {\n        const travelNeedType = (0, _unwrapProxy.unwrapProxy)(legTravelNeed.get('travelNeedType'));\n        const passengerType = (0, _unwrapProxy.unwrapProxy)(legTravelNeed.get('passengerType'));\n        const legTravelNeedAttr = legTravelNeed.toJSON();\n        const travelNeedRecord = this.get('store').createRecord('leg-travel-need', legTravelNeedAttr);\n        travelNeedRecord.set('travelNeedType', travelNeedType);\n        travelNeedRecord.set('passengerType', passengerType);\n        travelNeedRecord.set('leg', newLeg);\n        return travelNeedRecord;\n      });\n      return newLegTravelNeeds;\n    },\n\n    setLoadAndUnloadTimeForLeg(leg) {\n      const selectedRiders = this.get('selectedRiders');\n      const loadTime = leg.get('loadTime');\n      const unloadTime = leg.get('unloadTime');\n      selectedRiders.forEach(rider => {\n        rider.set('loadTime', loadTime);\n        rider.set('unloadTime', unloadTime);\n      });\n    },\n\n    // set pick and drop segment stop phone number if the copied segment stop have phone number\n    setPickAndDropPhoneNumber(leg, newLeg) {\n      const pickSegmentStopPhoneNumberId = leg.get('segments.firstObject.pick.phoneNumbers.firstObject.id');\n      const dropSegmentStopPhoneNumberId = leg.get('segments.firstObject.drop.phoneNumbers.firstObject.id');\n\n      if (pickSegmentStopPhoneNumberId) {\n        const pickPhoneNumber = this.get('store').peekRecord('segment-stop-phone-number', pickSegmentStopPhoneNumberId);\n        const pickPhoneNumberAttr = pickPhoneNumber.toJSON();\n        const pickNumber = this.get('store').createRecord('segment-stop-phone-number', pickPhoneNumberAttr);\n        newLeg.get('segments.firstObject.pick.phoneNumbers').pushObject(pickNumber);\n      }\n\n      if (dropSegmentStopPhoneNumberId) {\n        const dropPhoneNumber = this.get('store').peekRecord('segment-stop-phone-number', dropSegmentStopPhoneNumberId);\n        const dropPhoneNumberAttr = dropPhoneNumber.toJSON();\n        const dropNumber = this.get('store').createRecord('segment-stop-phone-number', dropPhoneNumberAttr);\n        newLeg.get('segments.firstObject.drop.phoneNumbers').pushObject(dropNumber);\n      }\n    },\n\n    /**\n     *NYAAR-18906 In Copy Booking, on changing the pick and drop address and on not saving booking the addresses from the existing bookings remove from widget\n     * @param {*Object} leg\n     * @param {*Object} newLeg\n     */\n    setPickAndDropAddressAndLocation(leg, newLeg) {\n      const store = this.get('store');\n      const legPickAddress = leg.get('segments.firstObject.pick.place.address');\n      const legDropAddress = leg.get('segments.firstObject.drop.place.address');\n      const legPickLocation = leg.get('segments.firstObject.pick.place.location');\n      const legDropLocation = leg.get('segments.firstObject.drop.place.location');\n      const pickAddressAttr = (0, _unwrapProxy.unwrapProxy)(legPickAddress).toJSON();\n      const dropAddressAttr = (0, _unwrapProxy.unwrapProxy)(legDropAddress).toJSON();\n      const pickLocationAttr = (0, _unwrapProxy.unwrapProxy)(legPickLocation).toJSON();\n      const dropLocationAttr = (0, _unwrapProxy.unwrapProxy)(legDropLocation).toJSON();\n      const pickAddress = store.createRecord('address', pickAddressAttr);\n      const dropAddress = store.createRecord('address', dropAddressAttr);\n      const pickLocation = store.createRecord('location', pickLocationAttr);\n      const dropLocation = store.createRecord('location', dropLocationAttr);\n      const pickPlace = store.createRecord('place', {\n        address: pickAddress,\n        location: pickLocation\n      });\n      const dropPlace = store.createRecord('place', {\n        address: dropAddress,\n        location: dropLocation\n      });\n      const pickZoneName = leg.get('segments.firstObject.pick.place.address.zoneName');\n      const dropZoneName = leg.get('segments.lastObject.drop.place.address.zoneName');\n      const pickZoneType = store.createRecord('zone-type');\n      const dropZoneType = store.createRecord('zone-type');\n      pickZoneType.set('name', pickZoneType.get('name'));\n      dropZoneType.set('name', dropZoneType.get('name'));\n      pickAddress.set('zoneName', pickZoneName);\n      dropAddress.set('zoneName', dropZoneName);\n      newLeg.set('segments.firstObject.pick.place', pickPlace);\n      newLeg.set('segments.firstObject.drop.place', dropPlace);\n      newLeg.set('segments.firstObject.pick.place.address', pickAddress);\n      newLeg.set('segments.firstObject.drop.place.address', dropAddress);\n    },\n\n    cloneAddress(address) {\n      const clonedAddress = this.store.createRecord('address', address.toJSON());\n      clonedAddress.set('zoneName', address.get('zoneName'));\n      return clonedAddress;\n    },\n\n    cloneLocation(location) {\n      const clonedLocation = this.store.createRecord('location', location.toJSON());\n      return clonedLocation;\n    },\n\n    clonePlace(place) {\n      const clonedPlace = this.store.createRecord('place', place.toJSON());\n      const clonedAddress = this.cloneAddress((0, _unwrapProxy.unwrapProxy)(place.get('address')));\n      const clonedLocation = this.cloneLocation((0, _unwrapProxy.unwrapProxy)(place.get('location')));\n      clonedPlace.set('address', clonedAddress);\n      clonedPlace.set('location', clonedLocation);\n      clonedPlace.set('placeCategoryType', place.get('placeCategoryType'));\n      return clonedPlace;\n    },\n\n    cloneSegmentStopPhoneNumbers(segmentStopPhoneNumbers, newSegmentStop) {\n      // segmentStop: belongsTo('segment-stop'),\n      const phoneNumbers = segmentStopPhoneNumbers.map(phoneNumber => {\n        const clonedSegStopPhoneNumber = this.store.createRecord('segment-stop-phone-number', phoneNumber.toJSON());\n        clonedSegStopPhoneNumber.set('segmentStop', newSegmentStop);\n        return clonedSegStopPhoneNumber;\n      });\n      return phoneNumbers;\n    },\n\n    cloneSegmentStop(segmentStop) {\n      const clonedSegmentStop = this.store.createRecord('segment-stop', segmentStop.toJSON());\n      const clonedPlace = this.clonePlace((0, _unwrapProxy.unwrapProxy)(segmentStop.get('place')));\n      const clonedSegStopPhoneNumbers = this.cloneSegmentStopPhoneNumbers((0, _unwrapProxy.unwrapProxy)(segmentStop.get('phoneNumbers')));\n      clonedSegmentStop.set('place', clonedPlace);\n      clonedSegmentStop.set('phoneNumbers', clonedSegStopPhoneNumbers);\n      return clonedSegmentStop;\n    },\n\n    cloneSegment(segment, newLegRecord) {\n      const clonedSegment = this.store.createRecord('segment', segment.toJSON());\n      const clonedPick = this.cloneSegmentStop((0, _unwrapProxy.unwrapProxy)(segment.get('pick')));\n      const clonedDrop = this.cloneSegmentStop((0, _unwrapProxy.unwrapProxy)(segment.get('drop')));\n      clonedSegment.set('pick', clonedPick);\n      clonedSegment.set('drop', clonedDrop);\n      clonedSegment.set('fareType', (0, _unwrapProxy.unwrapProxy)(segment.get('fareType')));\n      clonedSegment.set('fareCategory', (0, _unwrapProxy.unwrapProxy)(segment.get('fareCategory')));\n      clonedSegment.set('leg', newLegRecord);\n      return clonedSegment;\n    },\n\n    cloneLegTravelNeed(legTravelNeedRecord, newLegRecord) {\n      const clonedLegTravelNeed = this.store.createRecord('leg-travel-need', legTravelNeedRecord.toJSON());\n      clonedLegTravelNeed.set('leg', newLegRecord);\n      clonedLegTravelNeed.set('travelNeedType', legTravelNeedRecord.get('travelNeedType'));\n      clonedLegTravelNeed.set('passengerType', legTravelNeedRecord.get('passengerType'));\n      return clonedLegTravelNeed;\n    },\n\n    cloneLegServiceNeed(legServiceNeedRecord, newLegRecord) {\n      const clonedLegServiceNeed = this.store.createRecord('leg-service-need', legServiceNeedRecord.toJSON());\n      clonedLegServiceNeed.set('leg', newLegRecord);\n      clonedLegServiceNeed.set('serviceNeedType', legServiceNeedRecord.get('serviceNeedType'));\n      return clonedLegServiceNeed;\n    },\n\n    cloneLeg(leg, newbookingRecord) {\n      let viewOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      const clonedLeg = this.store.createRecord('leg', leg.toJSON());\n      const clonedSegments = leg.get('segments').toArray().map(segment => this.cloneSegment(segment, clonedLeg));\n      const clonedLegTravelNeeds = leg.get('legTravelNeeds').toArray().map(legTravelNeed => this.cloneLegTravelNeed(legTravelNeed, clonedLeg));\n      const clonedLegServiceNeeds = leg.get('legServiceNeeds').toArray().map(legServiceNeed => this.cloneLegServiceNeed(legServiceNeed, clonedLeg));\n      clonedLeg.set('booking', newbookingRecord);\n      clonedLeg.set('serviceWindow', leg.get('serviceWindow'));\n      clonedLeg.set('fundingAgency', leg.get('fundingAgency'));\n      clonedLeg.set('segments', clonedSegments);\n      clonedLeg.set('legTravelNeeds', clonedLegTravelNeeds);\n      clonedLeg.set('legServiceNeeds', clonedLegServiceNeeds);\n      clonedLeg.set('tripPurpose', leg.get('tripPurpose'));\n\n      if (viewOnly) {\n        clonedLeg.set('anchor', leg.get('anchor'));\n        clonedLeg.set('requestTime', leg.get('requestTime'));\n      } else {\n        // set anchor and request time null for cloned leg\n        clonedLeg.set('anchor', null);\n        clonedLeg.set('requestTime', null);\n      }\n\n      return clonedLeg;\n    },\n\n    cloneLegs(legs, newbookingRecored) {\n      return legs.map(leg => this.cloneLeg(leg, newbookingRecored));\n    },\n\n    cloneViewOnlyLegs(legs, newbookingRecored) {\n      return legs.map(leg => this.cloneLeg(leg, newbookingRecored, true));\n    },\n\n    setCopiedBookingLegs(leg, newLeg) {\n      const pickText = 'segments.firstObject.pick';\n      const dropText = 'segments.lastObject.drop';\n      const pickNotes = leg.get(`${pickText}.notes`);\n      const dropNotes = leg.get(`${dropText}.notes`);\n      const serviceWindow = leg.get('serviceWindow');\n      const legTravelNeeds = leg.get('legTravelNeeds');\n      const noSharing = leg.get('segment.noSharing');\n      const fundingAgency = leg.get('fundingAgency');\n      const tripPurpose = leg.get('tripPurpose');\n      newLeg.set(`${pickText}.notes`, pickNotes);\n      newLeg.set(`${dropText}.notes`, dropNotes);\n      newLeg.set('serviceWindow', serviceWindow);\n      newLeg.set('segment.noSharing', noSharing);\n      newLeg.set('anchor', null);\n      newLeg.set('requestTime', null);\n      newLeg.set('fundingAgency', fundingAgency);\n      newLeg.set('tripPurpose', tripPurpose);\n      this.setPickAndDropAddressAndLocation(leg, newLeg);\n      this.setLoadAndUnloadTimeForLeg(leg);\n      this.setPickAndDropPhoneNumber(leg, newLeg);\n      const newLegTravelNeeds = this.createCopyBookingTravelNeeds(legTravelNeeds, newLeg);\n      newLeg.set('legTravelNeeds', newLegTravelNeeds);\n      return newLeg;\n    },\n\n    /**\n     * Reg - NYAAR-18838 Set User Booking Permission Details\n     */\n    configureBookingPermission() {\n      const isSameDayBookingPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createSameDayBookings, null);\n      const isFutureDayBookingPermGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.createFutureBookings, null);\n      this.set('userBookingPermissionDetails', {\n        isSameDayBookingPermGranted,\n        isFutureDayBookingPermGranted\n      });\n    },\n\n    getUserBookingPermissionDetail() {\n      return this.get('userBookingPermissionDetails');\n    },\n\n    /**\n     * Reg - NYAAR-18800 - When click closing icon ( X ) in the booking detail accept screen service need\n     * will save with the corresponding leg. So, set the new created service need in the active booking leg\n     */\n    createAndSetServiceNeedInLeg() {\n      const selectedRiders = this.get('selectedRiders');\n      const externalRider = selectedRiders.get('firstObject');\n      const store = this.get('store'); //NYAAR-19057-fix: Setting empty array if serviceNeeds is null\n\n      const riderServiceNeeds = externalRider.get('serviceNeeds') || [];\n      const serviceNeedTypes = store.peekAll('service-need-type');\n      const filteredActiveBookingLegs = this.get('activeBooking.legs').filter(leg => !leg.get('id'));\n      filteredActiveBookingLegs.forEach(leg => {\n        const legServiceNeeds = riderServiceNeeds.map(riderServiceNeed => {\n          const serviceNeedType = serviceNeedTypes.find(tntype => {\n            return tntype.get('id') === riderServiceNeed;\n          });\n\n          if (!Ember.isNone(serviceNeedType)) {\n            return store.createRecord('leg-service-need', {\n              serviceNeedType: serviceNeedType,\n              leg: leg\n            });\n          }\n        });\n        leg.set('legServiceNeeds', legServiceNeeds);\n        return leg;\n      });\n    },\n\n    //NYAAR-19136-some times single leg is creating with multiple trips\n    uniqTrips(trips) {\n      const tripsGroupedByBooking = (0, _lodash.groupBy)(trips, trip => {\n        return trip.get('booking.id');\n      });\n      Object.keys(tripsGroupedByBooking).forEach(key => {\n        const tripDetails = tripsGroupedByBooking[key];\n        const sortedTrips = tripDetails.sortBy('tripId');\n        const uniqTrips = sortedTrips.reverse().uniqBy('segment.id');\n        tripsGroupedByBooking[key] = uniqTrips;\n      });\n      const uniqTripDetails = (0, _lodash.flattenDeep)(Object.entries(tripsGroupedByBooking));\n      const filteredUniqTripDetails = uniqTripDetails.filter(trip => {\n        //while groupby the trips some keys(booking id's) are string\n        return typeof trip !== 'string' && trip.get('id');\n      });\n      return filteredUniqTripDetails;\n    },\n\n    /**\n     * NYAAR-19195 : If user has permission, they will see 'DAnchorSub' in the service type drop-down for trips\n     * @returns {*Array} serviceTypeOptions\n     */\n    getServiceTypeOptions() {\n      const permissiontoDAnchorSub = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.setServiceTypetoDAnchorSub, null);\n      const serviceTypeOptions = this.store.peekAll('service-window');\n      return !permissiontoDAnchorSub ? serviceTypeOptions.filter(ele => ele.get('displayName') !== DANCHORSUB_SERVICE_TYPE) : serviceTypeOptions;\n    },\n\n    getFareCategoryOptions() {\n      const serviceTypeOptions = this.store.peekAll('fare-category');\n      return serviceTypeOptions;\n    },\n\n    getTripPurposeOptions() {\n      return this.store.peekAll('trip-purpose');\n    },\n\n    /**\n     * NYAAR-19220 : Querys route and trip model with routeId\n     * @param {*String} routeId\n     */\n    async routeTripQuery(routeId) {\n      await this.get('store').findRecord('route', routeId, {\n        include: 'trips'\n      });\n    },\n\n    //saving the modified phone number\n    async saveEditedRiderPhoneNumber(phoneNumber, rider) {\n      phoneNumber.type = phoneNumber.type.toLowerCase();\n      const riderPhoneNumber = this.get('store').createRecord('rider-phone-number', phoneNumber);\n      const riderRecords = await this.queryRiderRecord(rider); // Reg- NYAAR-19657 - if rider is not present in rider Database,\n      // create the rider first and save the riderPhoneNumber Model\n\n      if (!riderRecords.length) {\n        const riderModel = this.get('store').createRecord('rider', {\n          riderId: rider.riderId,\n          firstName: rider.firstName,\n          lastName: rider.lastName,\n          middleName: rider.middleName,\n          loadTime: rider.loadTime,\n          unloadTime: rider.unloadTime,\n          notes: rider.notes,\n          dateOfBirth: rider.dateOfBirth\n        });\n        await this.saveModelData(riderModel);\n        riderPhoneNumber.set('rider', riderModel);\n        await this.saveModelData(riderPhoneNumber);\n        return;\n      }\n\n      riderPhoneNumber.set('rider', riderRecords.get('firstObject'));\n      await this.saveModelData(riderPhoneNumber);\n    },\n\n    /**\n     *\n     * @returns {Promise<void>}\n     * @param model - Ember Model\n     */\n    async saveModelData(model) {\n      await model.save();\n    },\n\n    async queryRiderRecord(rider) {\n      const riderId = rider.get('riderId');\n      const query = `and(eq(riderId,'${riderId}'),eq(firstName,'${rider.firstName}'),eq(lastName,'${rider.lastName}'))`;\n      const riderRecords = await this.store.query('rider', {\n        filter: query\n      });\n      return riderRecords.toArray();\n    },\n\n    //REG - NYAAR-19408 - Getting first riderPhoneNumber for the selected rider and\n    //send it to the /booking-with-promise-time payload\n    getRiderPhoneNumber(mainPhoneNumber) {\n      const riderPhoneNumber = this.store.peekAll('rider-phone-number').filterBy('areaCode', mainPhoneNumber.areaCode).filterBy('phoneNumber', mainPhoneNumber.phoneNumber).sortBy('id').reverse().firstObject;\n      return riderPhoneNumber;\n    },\n\n    getRiderMainPhoneNumber(id) {\n      const riderPhoneNumber = this.store.peekAll('rider-phone-number').filter(riderPhone => riderPhone.get('rider.id') === id && riderPhone.get('type').toLowerCase() === 'main').firstObject;\n      return riderPhoneNumber;\n    },\n\n    /**\n     * Reg NYAAR-19625 - isAllLegs should be selected based on legTravelNeeds when we choose edit Booking\n     * @param bookingLegs - Array\n     */\n    setIsAllLegField(bookingLegs) {\n      if (bookingLegs.length > 1) {\n        const firstLeg = (0, _lodash.head)(bookingLegs);\n        const firstLegTravelNeeds = firstLeg.get('legTravelNeeds');\n        const slicedLegs = bookingLegs.slice(1);\n        const legTravelNeedMapper = {};\n        firstLegTravelNeeds.forEach(firstLegTravelNeed => {\n          legTravelNeedMapper[firstLegTravelNeed.get('travelNeedType.upperCaseName')] = firstLegTravelNeed;\n        });\n        const isEveyLegHasSameTravelNeed = slicedLegs.every(leg => {\n          const legTravelNeeds = leg.get('legTravelNeeds');\n          return legTravelNeeds.every(legTravelNeed => {\n            const isTravelNeedAvailable = legTravelNeedMapper[legTravelNeed.get('travelNeedType.upperCaseName')];\n            return isTravelNeedAvailable && Number(isTravelNeedAvailable.get('count')) === Number(legTravelNeed.get('count'));\n          });\n        });\n        this.set('isAllLegs', isEveyLegHasSameTravelNeed);\n      }\n    },\n\n    //getting booking related trips using booking id\n    async getRelatedTrips(bookingId) {\n      const trips = await this.get('store').query('trip', {\n        filter: `eq(bookingId,'${bookingId}')`\n      });\n      return trips.toArray();\n    },\n\n    //if we select multiple riders, then we do edit or copy booking for single booking, selected riders set to single rider\n    async setSelectedRiders(isEditMode) {\n      const isCopyBooking = !Ember.isEmpty(this.get('copiedBookingRecord'));\n      const isEditOrCopyBooking = isEditMode || isCopyBooking; //for edit and copy booking we change the selected riders for booking\n\n      if (isEditOrCopyBooking) {\n        const checkedRiders = this.get('checkedRiders');\n        this.clearSelectedRiders();\n        const riderExternalIds = checkedRiders.map(r => r.get('id'));\n        this.get('workspace').set('isGlobalSpinnerVisible', true);\n        await this.fetchExternalRidersAndSetToSelectedRiders(riderExternalIds, true);\n        await this.fetchAllSelectedRidersForTravelNeeds();\n        await this.fetchAndStoreEligibilityForAllSelectedRiders();\n      }\n\n      this.get('workspace').set('isGlobalSpinnerVisible', false);\n    },\n\n    //this function is used in new booking form for updating the certification location places\n    async updateCertificationLocationPlace(booking) {\n      const bookingLegs = booking.firstObject.get('legs').toArray();\n      const legs = this.get('activeBooking.legs').toArray();\n      bookingLegs.forEach(async (leg, index) => {\n        const activeLeg = legs[index];\n\n        if (activeLeg) {\n          const activeSegments = activeLeg.get('segments');\n          const legSegments = leg.get('segments').toArray();\n          await activeSegments.reduce((acu, segment, segmentIndex) => {\n            this.updatePlace(acu, segment, segmentIndex, legSegments);\n          }, Promise.resolve());\n        }\n      });\n    },\n\n    //for checking is the place is certification location place\n    async isCertificationLocationAddress(addressId) {\n      let isCertificationLocationAddress = false;\n      const placeQuery = `in(addressId,(${addressId}))&include=address,location`;\n      const places = await this.store.query('place', {\n        filter: placeQuery\n      });\n\n      if (places.get('firstObject.placeCategoryType.name') && places.get('firstObject.placeCategoryType.name') === CERTIFICATION_LOCATION) {\n        isCertificationLocationAddress = true;\n      }\n\n      return isCertificationLocationAddress;\n    },\n\n    async querySegmentStop(segmentStopId) {\n      const segmentStopQuery = `in(id,(${segmentStopId}))`;\n      const segmentStop = await this.store.query('segment-stop', {\n        filter: segmentStopQuery\n      });\n      return segmentStop.firstObject;\n    },\n\n    //save the place details\n    async savePlaceDetails(addressId, place, certificationLocationRecord, stopId) {\n      if (addressId) {\n        const isAddressCertificationLocation = await this.isCertificationLocationAddress(addressId);\n\n        if (isAddressCertificationLocation) {\n          let placeData = place;\n\n          if (!placeData) {\n            const segmentStop = await this.querySegmentStop(stopId);\n            placeData = (0, _unwrapProxy.unwrapProxy)(segmentStop.get('place'));\n          }\n\n          placeData.set('placeCategoryType', certificationLocationRecord);\n          await placeData.save();\n        }\n      }\n    },\n\n    updatePlace(acu, segment, segmentIndex, legSegments) {\n      const certificationLocationRecord = this.get('store').peekRecord('place-category-type', CERTIFICATION_LOCATION);\n      const result = acu.then(async () => {\n        const legSegment = legSegments[segmentIndex];\n        const pickAddressId = segment.get('stops.firstObject.place.address.id');\n        const dropAddressId = segment.get('stops.lastObject.place.address.id');\n        const pickPlace = legSegment.set('stops.firstObject.place');\n        const dropPlace = legSegment.set('stops.lastObject.place');\n        const pickStopId = legSegment.get('stops.firstObject.id');\n        const dropStopId = legSegment.get('stops.lastObject.id');\n        await this.savePlaceDetails(pickAddressId, pickPlace, certificationLocationRecord, pickStopId);\n        await this.savePlaceDetails(dropAddressId, dropPlace, certificationLocationRecord, dropStopId);\n      });\n      return result;\n    },\n\n    async getFutureBookingsByLeg(legFilter) {\n      const futureLegs = await this.store.query('leg', {\n        filter: legFilter\n      });\n      return futureLegs.map(leg => {\n        const booking = (0, _unwrapProxy.unwrapProxy)(leg.get('booking'));\n        return booking.id;\n      });\n    },\n\n    async getSubscriptions(filter) {\n      return await this.store.query('subscription', {\n        filter\n      });\n    },\n\n    getFareCalculationType(travelNeed) {\n      const travelNeedTypeValue = travelNeed.get('travelNeedType.value');\n      let fareCalculationType = Ember.isPresent(travelNeedTypeValue) ? travelNeedTypeValue[FARE_CALCULATION_TYPE.displayName] : null;\n\n      if (Ember.isEmpty(fareCalculationType)) {\n        fareCalculationType = Ember.isPresent(travelNeedTypeValue) ? travelNeedTypeValue[FARE_CALCULATION_TYPE.fieldName] : null;\n      }\n\n      return fareCalculationType;\n    },\n\n    isPcaTravelNeed(travelNeed) {\n      const travelNeedTypeValue = travelNeed.get('travelNeedType.value');\n      let fareCalculationType = Ember.isPresent(travelNeedTypeValue) ? travelNeedTypeValue[FARE_CALCULATION_TYPE.displayName] : null;\n\n      if (Ember.isEmpty(fareCalculationType)) {\n        fareCalculationType = Ember.isPresent(travelNeedTypeValue) ? travelNeedTypeValue[FARE_CALCULATION_TYPE.fieldName] : null;\n      }\n\n      return fareCalculationType === PCA_TRAVEL_NEED_TYPE;\n    },\n\n    isCompanionTravelNeed(travelNeed) {\n      const travelNeedTypeValue = travelNeed.get('travelNeedType.value');\n      let fareCalculationType = Ember.isPresent(travelNeedTypeValue) ? travelNeedTypeValue[FARE_CALCULATION_TYPE.displayName] : null;\n\n      if (Ember.isEmpty(fareCalculationType)) {\n        fareCalculationType = Ember.isPresent(travelNeedTypeValue) ? travelNeedTypeValue[FARE_CALCULATION_TYPE.fieldName] : null;\n      }\n\n      return fareCalculationType === COMPANION_TRAVEL_NEED_TYPE;\n    },\n\n    getTravelNeedsCompanion(travelNeeds) {\n      const companions = travelNeeds.filter(travelNeed => {\n        return this.isCompanionTravelNeed(travelNeed);\n      });\n      return companions;\n    },\n\n    getTravelNeedsCompanionCount(travelNeeds) {\n      const companions = this.getTravelNeedsCompanion(travelNeeds);\n      return companions.length > 0 ? companions.reduce((n, _ref3) => {\n        let {\n          count\n        } = _ref3;\n        return n + parseInt(count, 10);\n      }, 0) : 0;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/cookies\", [\"exports\", \"ember-cookies/services/cookies\"], function (_exports, _cookies) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _cookies.default;\n  _exports.default = _default;\n});","define(\"adept-iq/services/core-entity-populator\", [\"exports\", \"adept-iq/config/environment\", \"lodash\"], function (_exports, _environment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    user: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    widgetService: Ember.inject.service('widget'),\n    polylineService: Ember.inject.service('polyline'),\n\n    async populateEntityGraph(widgetModelName, record, options) {\n      switch (widgetModelName) {\n        case 'routeWidget':\n          return this.populateRoute(record, options);\n\n        case 'tripWidget':\n          return this.populateTrip(record, options);\n\n        case 'vehicleWidget':\n          return this.populateVehicle(record, options);\n\n        case 'stopWidget':\n          return this.populateStop(record, options);\n\n        case 'alertWidget':\n          return this.populateAlert(record, options);\n\n        case 'riderWidget':\n          return this.populateRider(record, options);\n\n        case 'driverWidget':\n          return this.populateDriver(record, options);\n\n        case 'messageWidget':\n          return this.populateMessage(record, options);\n\n        case 'reportlistWidget':\n          return this.populateMessage(record, options);\n\n        default:\n          return;\n      }\n    },\n\n    async populateDispatchRouteEndHash(scheduleId) {\n      try {\n        const routeWidgetRecords = await this.extractRouteRecordsFromWidgets(scheduleId);\n        const routeEndHash = routeWidgetRecords.filter(route => !!route.dispatchRoutePk && route.actualEndDateTime).reduce((hash, route) => {\n          return { ...hash,\n            [route.id]: route.actualEndDateTime\n          };\n        }, {});\n        return routeEndHash;\n      } catch (e) {\n        console.error('Error from populateDispatchRoutesList: ' + e);\n        return {};\n      }\n    },\n\n    async populateRoute(routeRecord, options) {\n      if (_environment.default.APP.avlmLite) {\n        await this.populateRouteById(routeRecord.id);\n      } else {\n        const popOptions = options || {};\n\n        if (routeRecord.name && routeRecord.name.startsWith('SUP')) {\n          popOptions.isRoadsupRoute = true;\n        }\n\n        await this.populateRtsRoute(routeRecord.routeId, popOptions);\n        await this.get('widgetService').processWidgetRecordsForStore('routeWidget', [routeRecord]); //get computed routeStatus\n      }\n    },\n\n    async popluateStopAddressById(stopId) {\n      const model = 'avlm-stop-point';\n      let include = 'address';\n      include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n\n      try {\n        await this.get('store').findRecord(model, stopId, {\n          include\n        });\n      } catch (e) {\n        console.error('Error from popluateStopAddressById: ' + e);\n      }\n    },\n\n    async populateDispatchRoute(routeId, options) {\n      //   let include = `vehicle,routeBreaks,trips.subscription,\n      // trips.subscription.originPlace,trips.booking,trips.booking.cancellation,trips.segment,\n      // trips.pick,trips.drop,trips.pick.segmentStop.place.address,trips.pick.segmentStop.place.location,\n      // trips.drop.segmentStop.place.address,trips.drop.segmentStop.place.location,trips.segment.leg,\n      // trips.booking,trips.segment.leg.rider,trips.segment.leg.rider.eligibilities,\n      // trips.segment.leg.rider.travelNeeds,trips.segment.leg.rider.phoneNumbers,trips.segment.pick,\n      // trips.segment.drop,trips.segment.leg.rider.places,trips.segment.leg.travelNeeds,\n      // trips.stopPoints,trips.booking.legs,trips.stopPoints.cluster.dispatchRoute,\n      // trips.stopPoints.cluster.dispatchSchedule`;\n      let include = 'route,dispatchSchedule'; //'dispatchRoute,dispatchRoute.dispatchSchedule,dispatchRoute.routeVehicleDrivers,dispatchRoute.routeVehicleDrivers.dispatchRoute.vehicle,routeVehicleDrivers.driver'; // TODO: make populate with trips working\n\n      const model = 'dispatch-route';\n      include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n\n      try {\n        const dsRoute = await this.get('store').findRecord(model, routeId, {\n          include\n        });\n        const stopWidgetRecords = await this.extractStopRecordsFromWidgets(dsRoute);\n\n        if (stopWidgetRecords && stopWidgetRecords.length) {\n          await this.get('widgetService').processWidgetRecordsForStore('stopWidget', stopWidgetRecords);\n        }\n      } catch (e) {\n        console.error('Error from populateDispatchRoute: ' + e);\n      }\n    },\n\n    getRtsRouteInclude1(options) {\n      if (options && options.isRoadsupRoute) {\n        return `dispatchRoute,\n      dispatchRoute.dispatchSchedule,\n      dispatchRoute.routeVehicleDrivers,\n      dispatchRoute.routeVehicleDrivers.driver,\n      dispatchRoute.routeVehicleDrivers.vehicle,\n      dispatchRoute.routeVehicleDrivers.vehicle.startGaragePlace,\n      dispatchRoute.routeVehicleDrivers.vehicle.endGaragePlace,\n      dispatchRoute.routeVehicleDrivers.vehicle.startGaragePlace.address,\n      dispatchRoute.routeVehicleDrivers.vehicle.startGaragePlace.location,\n      dispatchRoute.routeVehicleDrivers.vehicle.endGaragePlace.address,\n      dispatchRoute.routeVehicleDrivers.vehicle.endGaragePlace.location,\n      dispatchRoute.routeVehicleDrivers.vehicle.breakdowns,\n      dispatchRoute.routeVehicleDrivers.vehicle.breakdowns.place,\n      dispatchRoute.routeVehicleDrivers.vehicle.breakdowns.place.address,\n      dispatchRoute.routeVehicleDrivers.vehicle.breakdowns.place.location,\n      dispatchRoute.dispatchClusters,\n      dispatchRoute.dispatchClusters.clusterStopPoints,\n      dispatchRoute.dispatchClusters.clusterStopPoints.routeBreak,\n      dispatchRoute.dispatchClusters.clusterStopPoints.noShow,\n      dispatchRoute.dispatchClusters.clusterStopPoints.place,\n      dispatchRoute.dispatchClusters.clusterStopPoints.place.address,\n      dispatchRoute.dispatchClusters.clusterStopPoints.place.location,\n      vehicle,\n      vehicle.startGaragePlace,\n      vehicle.startGaragePlace.address,\n      vehicle.startGaragePlace.location,\n      vehicle.endGaragePlace,\n      vehicle.endGaragePlace.address,\n      vehicle.endGaragePlace.location`;\n      }\n\n      return `dispatchRoute,\n    dispatchRoute.dispatchSchedule,\n    dispatchRoute.routeVehicleDrivers,\n    dispatchRoute.routeVehicleDrivers.driver,\n    dispatchRoute.routeVehicleDrivers.vehicle,\n    dispatchRoute.routeVehicleDrivers.vehicle.startGaragePlace,\n    dispatchRoute.routeVehicleDrivers.vehicle.endGaragePlace,\n    dispatchRoute.routeVehicleDrivers.vehicle.startGaragePlace.address,\n    dispatchRoute.routeVehicleDrivers.vehicle.startGaragePlace.location,\n    dispatchRoute.routeVehicleDrivers.vehicle.endGaragePlace.address,\n    dispatchRoute.routeVehicleDrivers.vehicle.endGaragePlace.location,\n    dispatchRoute.routeVehicleDrivers.vehicle.breakdowns,\n    dispatchRoute.routeVehicleDrivers.vehicle.breakdowns.place,\n    dispatchRoute.routeVehicleDrivers.vehicle.breakdowns.place.address,\n    dispatchRoute.routeVehicleDrivers.vehicle.breakdowns.place.location,\n    dispatchRoute.dispatchClusters,\n    dispatchRoute.dispatchClusters.clusterStopPoints,\n    dispatchRoute.dispatchClusters.clusterStopPoints.routeBreak,\n    dispatchRoute.dispatchClusters.clusterStopPoints.noShow,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg.rider,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg.rider.eligibilities,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg.rider.phoneNumbers,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg.rider.places,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg.travelNeeds,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.segment.leg.serviceNeeds,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.pick,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.pick.segmentStop,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.pick.segmentStop.place,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.pick.segmentStop.place.address,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.pick.segmentStop.place.location,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.drop,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.drop.segmentStop,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.drop.segmentStop.place,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.drop.segmentStop.place.address,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.drop.segmentStop.place.location,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.subscription,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.subscription.originPlace,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.booking,\n    dispatchRoute.dispatchClusters.clusterStopPoints.trip.booking.cancellation,\n    driver,\n    vehicle,\n    vehicle.startGaragePlace,\n    vehicle.startGaragePlace.address,\n    vehicle.startGaragePlace.location,\n    vehicle.endGaragePlace,\n    vehicle.endGaragePlace.address,\n    vehicle.endGaragePlace.location`;\n    },\n\n    getRtsRouteInclude1b(options) {\n      return `trips,\n    trips.pick,\n    trips.drop,\n    trips.segment,\n    trips.segment.leg,\n    trips.segment.leg.rider,\n    trips.segment.pick,\n    trips.segment.pick.place,\n    trips.segment.pick.place.address,\n    trips.segment.pick.place.location,\n    trips.segment.drop,\n    trips.segment.drop.place,\n    trips.segment.drop.place.address,\n    trips.segment.drop.place.location,\n    routeBreaks,\n    routeBreaks.place,\n    routeBreaks.place.address,\n    routeBreaks.place.location`;\n    },\n\n    async populateRtsRoute(routeId, options) {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      let include1 = this.getRtsRouteInclude1(options);\n      let include1b = this.getRtsRouteInclude1b(options);\n      const model = 'route';\n      include1 = include1.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      include1b = include1b.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const etaInclude = 'stopPoints,stopPoints.stopPoint,routeBreaks';\n\n      try {\n        const extractFromWidgetPromises = []; // etanav-route is a separate resource (different model), so it does not\n        // collide with the route findRecord coalescing and can be fetched\n        // concurrently with the route graph instead of after it. It is awaited\n        // below, before we extract widget records that rely on its stop data.\n        // Workaround: as iqux-service behavior changed, no matter we have etanavRoute or not we keep processing.\n\n        const etanavPromise = isScheduleDashboard ? null : this.get('store').findRecord('etanav-route', routeId, {\n          include: etaInclude\n        }).catch(() => {\n          return;\n        }); // The route graph used to need two SERIAL findRecord calls: combining\n        // include1 + include1b dropped sibling place.address/place.location records,\n        // and Ember Data coalesces concurrent same-id findRecord (so parallelizing\n        // would silently drop the second include set). The iqux-service serializer\n        // now unions relationships across include paths (no more drops -- verified\n        // live: merged returns the full union of both calls, 0 dropped resources),\n        // so the two calls collapse into ONE request: 2 serial round-trips -> 1.\n\n        const route = await this.get('store').findRecord(model, routeId, {\n          include: `${include1},${include1b}`\n        });\n\n        if (etanavPromise) {\n          await etanavPromise;\n        } // we need to keep the status coming from stopWidget. We could not get this\n        // from the core data. Belongs to REE\n\n\n        extractFromWidgetPromises.push(this.extractStopRecordsFromWidgets(route));\n        extractFromWidgetPromises.push(this.extractTripRecordsFromRoute(route));\n        let [stopWidgetRecords, tripWidgetRecords] = await Promise.all(extractFromWidgetPromises);\n\n        if (stopWidgetRecords && stopWidgetRecords.length) {\n          stopWidgetRecords = stopWidgetRecords.map(stopWidget => {\n            if (isScheduleDashboard) {\n              return {\n                id: stopWidget.stopPointPk || stopWidget.id,\n                //Garage Points do not have stopPointPk\n                routeId: stopWidget.routeId,\n                status: stopWidget.status,\n                perform: stopWidget.perform || null,\n                arrivePerformedBy: stopWidget.arrivePerformedBy,\n                departPerformedBy: stopWidget.departPerformedBy,\n                actualArriveTime: stopWidget.actualArriveTimestamp || null,\n                actualDepartTime: stopWidget.actualDepartTimestamp || null,\n                type: stopWidget.type,\n                tripStopId: stopWidget.tripStopId,\n                actualArriveLat: stopWidget.actualArriveLat || null,\n                actualArriveLng: stopWidget.actualArriveLng || null,\n                actualDepartLat: stopWidget.actualDepartLat || null,\n                actualDepartLng: stopWidget.actualDepartLng || null,\n                polyline: stopWidget.polyline,\n                stopType: stopWidget.type,\n                scheduleOrdinal: stopWidget.scheduleOrdinal,\n                plannedSlackTime: stopWidget.plannedSlackTime,\n                eta: stopWidget.eta,\n                segmentStopPhoneNumbers: stopWidget.segmentStopPhoneNumbers,\n                scheduleStopStatus: stopWidget.scheduleStopStatus\n              };\n            }\n\n            return {\n              id: stopWidget.stopPointPk || stopWidget.id,\n              //Garage Points do not have stopPointPk\n              routeId: stopWidget.routeId,\n              status: stopWidget.status,\n              perform: stopWidget.perform || null,\n              arrivePerformedBy: stopWidget.arrivePerformedBy,\n              departPerformedBy: stopWidget.departPerformedBy,\n              actualArriveTime: stopWidget.actualArriveTimestamp || null,\n              actualDepartTime: stopWidget.actualDepartTimestamp || null,\n              type: stopWidget.type,\n              tripStopId: stopWidget.tripStopId,\n              actualArriveLat: stopWidget.actualArriveLat || null,\n              actualArriveLng: stopWidget.actualArriveLng || null,\n              actualDepartLat: stopWidget.actualDepartLat || null,\n              actualDepartLng: stopWidget.actualDepartLng || null,\n              polyline: stopWidget.polyline,\n              slackInMinutes: stopWidget.slack || 0,\n              odometerOnArrival: stopWidget.odometerOnArrival,\n              stopType: stopWidget.type,\n              widgetEta: stopWidget.eta,\n              segmentStopPhoneNumbers: stopWidget.segmentStopPhoneNumbers\n            };\n          });\n          await this.get('widgetService').processWidgetRecordsForStore('stopWidget', stopWidgetRecords);\n        }\n\n        if (tripWidgetRecords && tripWidgetRecords.length) {\n          tripWidgetRecords = tripWidgetRecords.map(tripWidget => {\n            return {\n              id: tripWidget.id,\n              routeId: tripWidget.routeId,\n              status: tripWidget.status,\n              otpCode: tripWidget.otpStatus,\n              paymentType: tripWidget.paymentType,\n              fare: tripWidget.fare\n            };\n          });\n          await this.get('widgetService').processWidgetRecordsForStore('tripWidget', tripWidgetRecords); //get the performed polyline here so it shows up on the map at first selection\n\n          if (route.get('dispatchRoute.isCompleted')) {\n            await this.get('polylineService.fetchPerformedPolyline').perform(routeId, route.get('dispatchRoute.id'));\n          }\n        }\n      } catch (e) {\n        console.error('Error from populateRtsRoute: ' + e);\n      }\n    },\n\n    async populateRouteById(routeId, options) {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      let include = `\n      trips,\n      trips.stopPoints,\n      trips.stopPoints.address,\n      trips.stopPoints.cluster,\n      startAddress,\n      endAddress,\n      routeBreaks,\n      routeBreaks.address,\n      routeVehicleDrivers,\n      routeVehicleDrivers.driver,\n      routeVehicleDrivers.vehicle`;\n      const model = 'avlm-route';\n      include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n\n      try {\n        // The etanav-route and avlm-route fetches are independent — issue them in\n        // parallel instead of serially so we pay one round-trip instead of two\n        // (each is a separate service + ElastiCache hop in prod). Both are still\n        // awaited before we proceed; etanav failure stays tolerated.\n        const etanavFetch = isScheduleDashboard ? Promise.resolve() : this.get('store').findRecord('etanav-route', routeId).catch(() => {});\n        const routeFetch = this.get('store').findRecord(model, routeId, {\n          include\n        });\n        const route = await routeFetch;\n        await etanavFetch;\n        const stopWidgetRecords = await this.extractStopRecordsFromWidgets(route);\n\n        if (stopWidgetRecords && stopWidgetRecords.length) {\n          await this.get('widgetService').processWidgetRecordsForStore('stopWidget', stopWidgetRecords);\n        }\n      } catch (e) {\n        console.error('Error from populateRouteById: ' + e);\n      }\n    },\n\n    /**\n     * Not used\n     * @param route\n     * @returns {*|[]}\n     * @private\n     */\n    _extractStopPointsFromStore(route) {\n      let stopPointIds = [];\n\n      if (_environment.default.APP.avlmLite) {\n        stopPointIds = route.get('trips').map(function (item) {\n          const avlmStopPoints = item.get('avlmStopPoints');\n\n          if (avlmStopPoints) {\n            return avlmStopPoints.mapBy('id');\n          }\n\n          return [];\n        });\n        const routeStopPointIds = route.get('stopPoints').mapBy('id');\n        stopPointIds = stopPointIds.concat(routeStopPointIds);\n      } else {\n        stopPointIds = route.get('trips').map(function (item) {\n          const avlmStopPoints = item.get('stopPoints');\n\n          if (avlmStopPoints) {\n            return avlmStopPoints.mapBy('id');\n          }\n\n          return [];\n        });\n        const routeStopPointIds = route.get('stopPoints').mapBy('id');\n        stopPointIds = stopPointIds.concat(routeStopPointIds);\n      }\n\n      stopPointIds = (0, _lodash.flatten)(stopPointIds);\n      return stopPointIds;\n    },\n\n    async extractRouteRecordsFromWidgets(scheduleId) {\n      const eqFieldQueries = [];\n      const inFilterIds = [];\n      eqFieldQueries.push(this.get('widgetService').getEqualQuery('schedulePk', scheduleId));\n      const generatedRQL = this.get('widgetService').combineInAndEqualFilters('id', inFilterIds, eqFieldQueries); // We need to fetch all route records, so set limit to 1000\n\n      const widgetRecords = await this.get('widgetService').widgetsByFilterQuery('routeWidget', generatedRQL, 1000);\n      return widgetRecords;\n    },\n\n    async extractStopRecordsFromWidgets(route) {\n      const eqFieldQueries = [];\n      const inFilterIds = [];\n      eqFieldQueries.push(this.get('widgetService').getEqualQuery('routeId', route.get('id')));\n      const generatedRQL = this.get('widgetService').combineInAndEqualFilters('id', inFilterIds, eqFieldQueries);\n      const widgetRecords = await this.get('widgetService').widgetsByFilterQuery('stopWidget', generatedRQL);\n      return widgetRecords;\n    },\n\n    async extractTripRecordsFromRoute(route) {\n      const eqFieldQueries = [];\n      const inFilterIds = [];\n      eqFieldQueries.push(this.get('widgetService').getEqualQuery('routeId', route.get('id')));\n      const generatedRQL = this.get('widgetService').combineInAndEqualFilters('id', inFilterIds, eqFieldQueries);\n      const widgetRecords = await this.get('widgetService').widgetsByFilterQuery('tripWidget', generatedRQL);\n      return widgetRecords;\n    },\n\n    async extractTripRecordsFromWidgets(tripId) {\n      const eqFieldQueries = [];\n      const inFilterIds = [];\n      eqFieldQueries.push(this.get('widgetService').getEqualQuery('id', tripId));\n      const generatedRQL = this.get('widgetService').combineInAndEqualFilters('id', inFilterIds, eqFieldQueries);\n      const widgetRecords = await this.get('widgetService').widgetsByFilterQuery('tripWidget', generatedRQL);\n      return widgetRecords;\n    },\n\n    async populateTrip(tripRecord, options) {\n      if (_environment.default.APP.avlmLite && tripRecord.routeId) {\n        await this.populateRouteById(tripRecord.routeId);\n        return;\n      }\n\n      if (tripRecord.routeId) {\n        await this.populateRtsRoute(tripRecord.routeId);\n      } else {\n        await this.populateTripById(tripRecord.id);\n      }\n\n      await this.get('store').findRecord('trip', tripRecord.id);\n    },\n\n    /**\n     *\n     * @param recordId\n     * @param options\n     * @returns {Promise<void>}\n     */\n    async populateTripById(tripId, options) {\n      let model = 'trip';\n\n      if (_environment.default.APP.avlmLite) {\n        model = 'avlm-trip';\n      } // let include = `subscription,booking,booking.cancellation,segment,\n      // pick,drop,pick.segmentStop,pick.segmentStop.place.address,pick.segmentStop.place.location,drop.segmentStop,drop.segmentStop.place.address,\n      // drop.segmentStop.place.location,booking,segment.leg,booking,segment.leg.rider,segment.leg.rider.eligibilities,\n      // segment.leg.rider.travelNeeds,segment.leg.rider.phoneNumbers,segment.pick,segment.drop,segment.leg.rider.places,booking,\n      // segment.leg.travelNeeds,stopPoints,stopPoints.cluster,stopPoints.cluster.dispatchRoute,stopPoints.cluster.dispatchRoute.route,\n      // schedule,stopPoints.cluster.dispatchSchedule`;\n      // remove segment.pick and segment.drop cause those will override pick and drop.\n\n\n      let include = `\n      subscription,\n      booking,\n      booking.cancellation,\n      segment,\n      pick,\n      drop,\n      pick.segmentStop,\n      pick.segmentStop.place,\n      pick.segmentStop.place.address,\n      pick.segmentStop.place.location,\n      drop.segmentStop,\n      drop.segmentStop.place,\n      drop.segmentStop.place.address,\n      drop.segmentStop.place.location,\n      segment.leg,\n      segment.leg.rider,\n      segment.leg.rider.eligibilities,\n      segment.leg.rider.travelNeeds,\n      segment.leg.rider.phoneNumbers,\n      segment.leg.rider.places,\n      segment.leg.travelNeeds,\n      segment.leg.serviceNeeds,\n      stopPoints,\n      stopPoints.cluster,\n      stopPoints.cluster.dispatchRoute,\n      stopPoints.cluster.dispatchRoute.route,\n      stopPoints.cluster.dispatchSchedule,\n      schedule,\n      routeAssignments,\n      routeAssignments.route,\n      routeAssignments.trip`;\n\n      if (_environment.default.APP.avlmLite) {\n        include = '';\n      }\n\n      include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n\n      try {\n        await this.get('store').findRecord(model, tripId, {\n          include,\n          reload: true\n        });\n        let tripWidgetRecords = await this.extractTripRecordsFromWidgets(tripId);\n\n        if (tripWidgetRecords && tripWidgetRecords.length) {\n          tripWidgetRecords = tripWidgetRecords.map(tripWidget => {\n            return {\n              id: tripWidget.id,\n              noShowRequestReasonCode: tripWidget.noShowRequestReasonCode\n            };\n          });\n          await this.get('widgetService').processWidgetRecordsForStore('tripWidget', tripWidgetRecords);\n        }\n      } catch (e) {\n        console.error('Error from populateTrip: ' + e);\n        throw e;\n      }\n    },\n\n    async populateVehicle(vehicleRecord, options) {\n      if (vehicleRecord.routePk) {\n        if (_environment.default.APP.avlmLite) {\n          await this.populateRouteById(vehicleRecord.routePk);\n        } else {\n          await this.populateRtsRoute(vehicleRecord.routePk);\n        }\n      }\n\n      try {\n        let model = 'vehicle';\n\n        if (_environment.default.APP.avlmLite) {\n          model = 'avlm-vehicle';\n        }\n\n        await this.get('store').findRecord(model, vehicleRecord.id);\n      } catch (e) {\n        console.error('Error from populateVehicle: ' + e);\n      }\n    },\n\n    async populateStop(stopRecord, options) {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n\n      try {\n        if (stopRecord.routeId) {\n          if (this.get('user').isRoadSupEnable() && _environment.default.APP.avlmLite) {\n            // workaround to avoid getting new data from server for road supervisor.\n            await this.get('widgetService').processWidgetRecordsForStore('stopWidget', [stopRecord]); // not await for address back\n\n            this.popluateStopAddressById(stopRecord.id);\n          } else if (_environment.default.APP.avlmLite) {\n            await this.populateRouteById(stopRecord.routeId);\n          } else {\n            await this.populateRtsRoute(stopRecord.routeId);\n          }\n        } else {\n          await this.populateTripById(stopRecord.tripPk);\n        }\n\n        if (_environment.default.APP.avlmLite) {\n          await this.get('store').findRecord('avlm-stop-point', stopRecord.id);\n        } else if (isScheduleDashboard && stopRecord.tripPk) {\n          let include = `\n          booking,\n          segment,\n          segment.leg,\n          segment.leg.rider,\n          pick,\n          pick.segmentStop,\n          pick.segmentStop.place,\n          pick.segmentStop.place.address,\n          drop,\n          drop.segmentStop,\n          drop.segmentStop.place,\n          drop.segmentStop.place.address`;\n          include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n          await this.get('store').findRecord('trip', stopRecord.tripPk, {\n            include\n          });\n        } else if (isScheduleDashboard) {\n          if (stopRecord.routeBreakId) {\n            const include = 'route';\n            await this.get('store').findRecord('route-break', stopRecord.routeBreakId, {\n              include\n            });\n          }\n        } else if (stopRecord.type === 'pick' || stopRecord.type === 'drop') {\n          let include = `\n          tripStop,\n          tripStop.segmentStop,\n          tripStop.segmentStop.place,\n          tripStop.segmentStop.place.address,\n          tripStop.segmentStop.place.location`;\n          include = include.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n          await this.get('store').findRecord('stop-point', stopRecord.id, {\n            include\n          });\n        } else if (stopRecord.type === 'deployStop') {\n          const include = 'place,place.address,place.location';\n          await this.get('store').findRecord('stop-point', stopRecord.id, {\n            include\n          });\n        }\n      } catch (ex) {\n        console.error(ex);\n      }\n    },\n\n    async populateRider(record, options) {\n      try {\n        const rider = await this.get('store').findRecord('rider', record.id);\n      } catch (ex) {\n        console.error(ex);\n      }\n    },\n\n    async populateDriver(record, options) {\n      try {\n        let model = 'driver';\n\n        if (_environment.default.APP.avlmLite) {\n          model = 'avlm-driver';\n        }\n\n        const driver = await this.get('store').findRecord(model, record.id);\n      } catch (ex) {\n        console.error(ex);\n      }\n    },\n\n    async populateAlert(record, options) {\n      try {\n        const alert = await this.get('store').peekRecord('avlm-alert', record.id);\n      } catch (ex) {\n        console.error(ex);\n      }\n    },\n\n    /**\n     * All messages are loaded into the store as and when it comes\n     * @param record\n     * @param options\n     * @returns {Promise<DS.Model>}\n     */\n    async populateMessage(record, options) {\n      let modelType = 'avlm-canned-message';\n\n      if (record.priority === 'E') {\n        modelType = 'avlm-emergency-message';\n      }\n\n      const storeRecord = this.get('store').peekRecord(modelType, record.id);\n      return storeRecord;\n    },\n\n    async tripsByRoute(routeId) {\n      let modelName = 'route';\n      const includeModelName = 'trips';\n      const refModelName = 'trips';\n\n      if (_environment.default.APP.avlmLite) {\n        modelName = 'avlm-route';\n      }\n\n      const route = await this.get('store').findRecord(modelName, routeId, {\n        include: includeModelName\n      });\n      const trips = route.get(refModelName);\n\n      if (trips) {\n        const tripIds = trips.mapBy('id');\n        return tripIds;\n      }\n\n      return [];\n    },\n\n    // tripId and tripModelId both are different.\n    // id and tripModelId both are same\n    async stopsByTrip(tripModelId) {\n      let modelName = 'trip';\n      const includeModelName = 'stopPoints';\n      let refModelName = 'stopPoints';\n\n      if (_environment.default.APP.avlmLite) {\n        modelName = 'avlm-trip';\n        refModelName = 'avlmStopPoints';\n      }\n\n      const trip = await this.get('store').findRecord(modelName, tripModelId, {\n        include: includeModelName\n      });\n      const stopPoints = await trip.get(refModelName);\n\n      if (stopPoints) {\n        const stopIds = stopPoints.mapBy('id');\n        return stopIds;\n      }\n\n      return [];\n    },\n\n    async stopsByRoute(routeId) {\n      const tripIds = await this.tripsByRoute(routeId);\n      let allStopIds = [];\n\n      for (const tripId of tripIds) {\n        const stopIds = await this.stopsByTrip(tripId);\n\n        if (stopIds.length) {\n          allStopIds = allStopIds.concat(stopIds);\n        }\n      }\n\n      return allStopIds;\n    },\n\n    async vehicleByRoute(routeId) {\n      let modelName = 'route';\n      let refModelName = 'vehicle';\n\n      if (_environment.default.APP.avlmLite) {\n        modelName = 'avlm-route';\n        refModelName = 'avlmVehicle';\n      }\n\n      const route = await this.get('store').findRecord(modelName, routeId);\n      const vehicle = route.get(refModelName);\n\n      if (vehicle) {\n        const vehicleId = vehicle.id;\n        return [vehicleId];\n      }\n\n      return [];\n    },\n\n    async tripsByRider(riderId) {\n      /*const route = await this.get('store').findRecord('route', riderId, {include: 'trips'});\n      const trips = await route.trips;\n      const tripIds = trips.mapBy('id');*/\n      return [];\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/drag-coordinator\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    sourceRows: null,\n    widgetType: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('sourceRows', {});\n    },\n\n    // called when a widget registers dragStart\n    setSourceRow(dragId, row, widgetType) {\n      Ember.set(this.get('sourceRows'), dragId, row);\n      this.set('widgetType', widgetType);\n    },\n\n    // called when a widget registers drop\n    getSourceRow(dragId) {\n      if (Ember.isBlank(dragId)) return;\n      const sourceRow = this.get(`sourceRows.${dragId}`);\n      this.set('sourceRows', {});\n      return sourceRow;\n    },\n\n    // called when a widget registers dragEnd\n    clearSourceRows() {\n      this.set('sourceRows', {});\n      this.set('widgetType', null);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/dwh-service\", [\"exports\", \"ember-concurrency\", \"ember-changeset\", \"adept-iq/config/api-urls\", \"moment\", \"adept-iq/utils/rql-generators\", \"lodash\"], function (_exports, _emberConcurrency, _emberChangeset, _apiUrls, _moment, _rqlGenerators, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    apiContext: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    showSearchPopUp: false,\n    reconcileDate: null,\n    routes: null,\n    selectedProvider: null,\n    selectedRoute: null,\n    selectedRouteInfo: null,\n    routeFound: null,\n    reconcileDateMinusOne: Ember.computed('reconcileDate', function () {\n      if (!this.get('reconcileDate')) {\n        return null;\n      }\n\n      return (0, _moment.default)(this.get('reconcileDate')).add(-1, 'days').format('YYYY-MM-DD');\n    }),\n    reconcileDatePlusOne: Ember.computed('reconcileDate', function () {\n      if (!this.get('reconcileDate')) {\n        return null;\n      }\n\n      return (0, _moment.default)(this.get('reconcileDate')).add(1, 'days').format('YYYY-MM-DD');\n    }),\n    routeOptions: Ember.computed('routes', 'selectedProvider', function () {\n      const selectedProviderId = this.get('selectedProvider.id');\n      const routes = this.get('routes') || [];\n      const routeOptions = routes.filter(route => !selectedProviderId || route.provider === selectedProviderId).map(route => {\n        return {\n          'id': route.id,\n          'routeId': _lodash.default.get(route, 'attributes.routeName')\n        };\n      });\n      return routeOptions;\n    }),\n    vehicleOptions: Ember.computed('routes', function () {\n      const routes = this.get('routes') || [];\n      const vehicleSet = routes.reduce((vSet, route) => {\n        if (_lodash.default.get(route, 'attributes.vehicleName')) {\n          vSet.add(_lodash.default.get(route, 'attributes.vehicleName'));\n        }\n\n        return vSet;\n      }, new Set());\n      const vehicleOptions = Array.from(vehicleSet).map(vehicle => {\n        return {\n          id: vehicle,\n          callsign: vehicle\n        };\n      });\n      return vehicleOptions;\n    }),\n    driverOptions: Ember.computed('routes', function () {\n      const routes = this.get('routes') || [];\n      const driverSet = routes.reduce((dSet, route) => {\n        if (_lodash.default.get(route, 'attributes.driverId')) {\n          dSet.add(_lodash.default.get(route, 'attributes.driverId'));\n        }\n\n        return dSet;\n      }, new Set());\n      const driverOptions = Array.from(driverSet).map(driver => {\n        return {\n          id: driver,\n          badgenumber: driver\n        };\n      });\n      return driverOptions;\n    }),\n    routeToSelect: Ember.computed('routeOptions', 'routeFound', function () {\n      const routeFound = this.get('routeFound');\n      if (!routeFound) return;\n      const routeOption = this.get('routeOptions').find(route => `${route.id}` === `${routeFound}`);\n      return routeOption;\n    }),\n    isRouteCompleted: Ember.computed('selectedRouteInfo', function () {\n      if (this.get('selectedRouteInfo')) {\n        // TODO: see if we need to add route complete conditoin check here.\n        return true;\n      }\n\n      return false;\n    }),\n    reconTripsWithBreaks: Ember.computed('selectedRouteInfo', function () {\n      const trips = (this.get('selectedRouteInfo.trips') || []).map(trip => {\n        return {\n          iqId: trip.tripId,\n          type: 'Trip',\n          ...trip\n        };\n      });\n      const breaks = (this.get('selectedRouteInfo.breaks') || []).map(b => {\n        return {\n          iqId: b.iqid,\n          type: 'Break',\n          ...b\n        };\n      });\n      return trips.concat(breaks);\n    }),\n    fetchTripsWithBreaks: (0, _emberConcurrency.task)(function* (id) {\n      // const dwhRouteAdapter = this.get('store').adapterFor('dwh-route');\n      const routeInfo = yield this.get('store').findRecord('dwh-route', id);\n      const validator = this.validate;\n      this.set('selectedRouteInfo', new _emberChangeset.default(routeInfo, validator));\n    }).restartable(),\n    // eslint-disable-next-line no-unused-vars\n    validate: _ref => {\n      let {\n        key,\n        newValue,\n        oldValue,\n        changes,\n        content\n      } = _ref;\n      // TODO: add validations here\n      return true;\n    },\n\n    closePopups() {\n      if (this.get('workspace.stackDepth')) {\n        this.get('workspace').popState();\n      }\n    },\n\n    async findTripsByDateAndTripId(date, tripId) {\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.dwhService.host}/trip`;\n      const fields = 'id,attributes.rider.pk,attributes.schedulename,attributes.subscriptionId,attributes.groupId,attributes.rider.id,attributes.rider.attributes.lastName,attributes.rider.attributes.firstName,attributes.tripStatus,attributes.routeId,attributes.routeName';\n      const json = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          include_data_source_str: JSON.stringify(['Y']),\n          usage_str: JSON.stringify(['165']),\n          rql_filter: (0, _rqlGenerators.stringLikeRQL)('tripId', [tripId]),\n          fields\n        }\n      };\n      const res = await this.get('ajax').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: json\n      });\n\n      const data = _lodash.default.get(res, 'data', []);\n\n      return data;\n    },\n\n    async fetchDwhStops(date) {\n      const session = this.get('session');\n\n      const timezone = _moment.default.tz.guess();\n\n      const apiUrl = `${_apiUrls.API.dwhService.host}/stop-point?timezone=${timezone}`;\n      const fields = 'id,attributes.iqid,attributes.routename,attributes.stoptype,attributes.requesttime,attributes.promisetime,attributes.passengerfirstname,attributes.passengerlastname,attributes.streetnumber,attributes.streetaddress,attributes.sublocality,attributes.locality,attributes.subregion,attributes.region,attributes.postalcode,attributes.actualodometer,attributes.actualarrivetime,attributes.actualdeparttime,attributes.tripId,attributes.tripStatus,attributes.tripStatusReason,attributes.tripPurpose,attributes.fareCategory,attributes.tripWCCount,attributes.tripPCACount,attributes.tripCompCount,attributes.vehicleId,attributes.driverId';\n      const json = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields\n        }\n      };\n      const res = await this.get('ajax').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: json\n      });\n      const data = res.data.map(content => {\n        return {\n          id: content.id,\n          ...content.attributes\n        };\n      });\n\n      if (data.length === 0) {\n        throw new Error('UNABLE TO DOWNLOAD. NO DATA EXISTS FOR THE SELECTED DATE.');\n      }\n\n      return data;\n    },\n\n    async getDwhRoutesByDate(date) {\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.dwhService.host}/route`;\n      const fields = `\n      id,\n      provider,\n      attributes.schedulename,\n      attributes.routeName,\n      attributes.tenantId,\n      attributes.vehicleName,\n      attributes.driverId,\n      attributes.driverFullName,\n      attributes.driverPhoneNumber,\n      attributes.plannedStartTime,\n      attributes.plannedEndTime,\n      attributes.actualstarttime,\n      attributes.actualendtime`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const json = {\n        data: {\n          schedulename_str: JSON.stringify([date]),\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields\n        }\n      };\n      const res = await this.get('ajax').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: json\n      });\n      const data = res.data;\n      return data;\n    },\n\n    async getDwhRouteById(id) {\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.dwhService.host}/route`;\n      const fields = `\n      id,\n      provider,\n      startGarage,\n      endGarage,\n      breaks,\n      trips,\n      attributes.schedulename,\n      attributes.routeName,\n      attributes.tenantId,\n      attributes.vehicleName,\n      attributes.driverId,\n      attributes.driverFullName,\n      attributes.driverPhoneNumber,\n      attributes.plannedStartTime,\n      attributes.plannedEndTime,\n      attributes.actualstarttime,\n      attributes.actualendtime`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, '');\n      const json = {\n        data: {\n          data_source_str: JSON.stringify(['DB']),\n          usage_str: JSON.stringify(['165']),\n          fields,\n          rql_filter: (0, _rqlGenerators.eqRQL)('routeAdeptId', [id])\n        }\n      };\n      const res = await this.get('ajax').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json',\n        data: json\n      });\n      const data = res.data && res.data.length > 0 ? res.data.firstObject : null;\n      return data;\n    },\n\n    async patchDwhStops(date, uploadBinary) {\n      const session = this.get('session');\n\n      const timezone = _moment.default.tz.guess();\n\n      const apiUrl = `${_apiUrls.API.dwhService.host}/stop-point/upload?date=${date}&timezone=${timezone}`;\n      const res = await this.get('ajax').request(apiUrl, {\n        method: 'POST',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`,\n          'Content-Type': 'text/csv'\n        },\n        processData: false,\n        data: uploadBinary\n      });\n      return res;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/edit-modal\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/utils/save-records\", \"ember-inflector\", \"adept-iq/utils/guid\"], function (_exports, _emberConcurrency, _lodash, _saveRecords, _emberInflector, _guid) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    first,\n    isUndefined\n  } = _lodash.default;\n  const UNDO_DEBOUNCE_MS = 500;\n  const FIXED_BREAK_TYPE = 'fixed';\n\n  var _default = Ember.Service.extend({\n    router: Ember.inject.service('router'),\n    tooltip: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    editableRecords: null,\n    editComponent: null,\n    saveRecordFunction: null,\n    resetRecordFunction: null,\n    applyConfirmFuntion: null,\n    isLinkMode: false,\n    isSearching: false,\n    isShrinking: false,\n    filter: '',\n    undoHistory: null,\n    isLastUndoStateCommitted: true,\n    errors: null,\n    isFloatingType: false,\n    isAddressDisable: Ember.computed('editableRecords.@each.breakType', function () {\n      const record = this.get('editableRecords')[0];\n      return record.get('breakType.name') !== FIXED_BREAK_TYPE;\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('editableRecords', []);\n      this.set('undoHistory', []);\n      this.set('errors', []);\n      const dashboardId = localStorage.getItem('lastDashboardId');\n\n      if (dashboardId === 'workspaces-default/dispatch') {\n        this.set('isShrinking', true);\n      }\n    },\n\n    isOpen: Ember.computed.equal('router.currentRouteName', 'dashboard.modals.edit-form'),\n    isDirty: Ember.computed('editableRecords.{@each.hasDirtyAttributes,@each.isForceDirty}', function () {\n      const records = this.get('editableRecords');\n      return records.any(record => {\n        return record.get('hasDirtyAttributes') || record.get('isForceDirty');\n      });\n    }),\n    canUndo: Ember.computed('undoHistory.lastObject.[]', function () {\n      return Ember.isPresent(this.get('undoHistory.lastObject'));\n    }),\n    commitLastUndoState: (0, _emberConcurrency.task)(function* () {\n      yield (0, _emberConcurrency.timeout)(UNDO_DEBOUNCE_MS);\n      this.set('isLastUndoStateCommitted', true);\n    }).restartable(),\n\n    getLastUndoState() {\n      let lastUndoState = this.get('undoHistory.lastObject');\n      const isLastUndoStateCommitted = this.get('isLastUndoStateCommitted');\n\n      if (isLastUndoStateCommitted) {\n        lastUndoState = this.get('undoHistory').pushObject([]);\n        this.set('isLastUndoStateCommitted', false);\n      }\n\n      return lastUndoState;\n    },\n\n    setLastUndoState(record, valuePath) {\n      const lastUndoState = this.getLastUndoState();\n      let propertyPath = valuePath.split('.');\n      propertyPath = propertyPath[propertyPath.length - 1];\n      let recordChanges = lastUndoState.find(changes => changes.record === record);\n\n      if (Ember.isBlank(recordChanges)) {\n        recordChanges = lastUndoState.pushObject({\n          record: record,\n          properties: {}\n        });\n      }\n\n      if (Ember.isBlank(Ember.get(recordChanges, `properties.${valuePath}`))) {\n        Ember.set(recordChanges, `properties.${propertyPath}`, Ember.get(record, valuePath));\n      }\n\n      this.get('commitLastUndoState').perform();\n    },\n\n    open(editComponent, models, saveRecordFunction, resetRecordFunction, applyConfirmFunction, options) {\n      this.set('editComponent', editComponent);\n      this.set('editableRecords', models);\n      this.set('saveRecordFunction', saveRecordFunction);\n      this.set('resetRecordFunction', resetRecordFunction);\n      this.set('applyConfirmFunction', applyConfirmFunction);\n      this.set('options', options);\n\n      if (editComponent === 'iq-widgets/noshow-event-stop-form-widget') {\n        this.set('isShrinking', true);\n      }\n\n      if (options && options.dispatchRouteToLock) {\n        this.set('dispatchRouteToLock', options.dispatchRouteToLock);\n      } // Calculate an \"activity id\" for tracing calls related to this edit\n\n\n      const activityIdGuid = (0, _guid.guid)();\n      const activityIdValue = `AIQ-CLI-${activityIdGuid}:edit-modal:${editComponent}`;\n      this.get('ajaxService').setActivityId(activityIdValue);\n      const router = this.get('router');\n      router.transitionTo('dashboard.modals.edit-form');\n    },\n\n    async close() {\n      const records = this.get('editableRecords');\n      const resetRecordFunction = this.get('resetRecordFunction');\n\n      if (!isUndefined(resetRecordFunction) && resetRecordFunction !== null) {\n        resetRecordFunction(records);\n      }\n\n      this.reset();\n      this.get('ajaxService').setActivityId();\n      const router = this.get('router');\n      return router.transitionTo('dashboard');\n    },\n\n    setRecordValue(record, valuePath, value, options) {\n      const relationships = record.constructor.relationshipNames || {\n        hasMany: [],\n        belongsTo: []\n      };\n      const isHasMany = relationships.hasMany.includes(valuePath);\n      const isBelongsTo = relationships.belongsTo.includes(first(valuePath.split('.')));\n\n      if (isHasMany) {\n        this.setLastUndoState(options.record, options.valuePath);\n        options.record.set(options.valuePath, value); // Link Mode does not support hasMany records.\n\n        return;\n      }\n\n      if (!Ember.isNone(options) && options.useOptionRecord) {\n        this.setLastUndoState(options.record, options.valuePath);\n        options.record.set(options.valuePath, value);\n      } else {\n        this.setLastUndoState(record, valuePath);\n        record.set(valuePath, value);\n      }\n\n      if (this.get('isLinkMode')) {\n        const records = this.get('editableRecords');\n        /*eslint-disable */\n\n        records.forEach(record => {\n          if (isBelongsTo) {\n            record = Ember.get(record, first(valuePath.split('.'))).content;\n          }\n          /*eslint-enable */\n          // valuePath may be set to belongsTo model valuePath if isBelongsTo.\n\n\n          this.setLastUndoState(record, valuePath);\n          record.set(valuePath, value);\n        });\n      }\n    },\n\n    // BelongsTo Relationships\n    addRecordValue(record, valuePath, modelNameDefault) {\n      const inflector = new _emberInflector.default(_emberInflector.default.defaultRules);\n      const modelName = !isUndefined(modelNameDefault) ? modelNameDefault : inflector.singularize(valuePath);\n      const newRecord = this.get('store').createRecord(modelName);\n      record.set('isForceDirty', true);\n      record.set(valuePath, newRecord);\n      return newRecord;\n    },\n\n    removeRecordValue(record, valuePath) {\n      record.set('isForceDirty', true);\n      record.set(valuePath, null);\n    },\n\n    // HasMany Relationships\n    pushRecordValue(record, valuePath, modelNameDefault) {\n      const inflector = new _emberInflector.default(_emberInflector.default.defaultRules);\n      const modelName = !isUndefined(modelNameDefault) ? modelNameDefault : inflector.singularize(valuePath);\n      const newRecord = this.get('store').createRecord(modelName);\n      record.set('isForceDirty', true);\n      Ember.get(record, valuePath).pushObject(newRecord);\n      return newRecord;\n    },\n\n    pullRecordValue(record, valuePath, removeRecord) {\n      record.set('isForceDirty', true);\n      Ember.get(record, valuePath).removeObject(removeRecord);\n    },\n\n    undo() {\n      const lastUndoState = this.get('undoHistory').popObject();\n      lastUndoState.forEach(_ref => {\n        let {\n          record,\n          properties\n        } = _ref;\n        record.setProperties(properties);\n      });\n      this.set('isLastUndoStateCommitted', true);\n    },\n\n    undoAll() {\n      const undoHistory = this.get('undoHistory');\n      if (Ember.isPresent(undoHistory)) while (undoHistory.length > 0) this.undo();\n    },\n\n    toggleLinkMode() {\n      this.toggleProperty('isLinkMode');\n    },\n\n    toggleSearchMode() {\n      this.toggleProperty('isSearching');\n\n      if (this.get('isSearching') === false) {\n        this.set('filter', '');\n      }\n    },\n\n    applyWithCallback() {\n      let title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      let specialCallbackWhenSuccess = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      const tip = 'Would you like to commit your changes?';\n      const primaryActionText = 'Commit';\n      const secondaryActionText = 'Cancel';\n      this.apply(title, tip, primaryActionText, secondaryActionText, callback, specialCallbackWhenSuccess);\n    },\n\n    apply() {\n      let title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      let tip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Would you like to commit your changes?';\n      let primaryActionText = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Commit';\n      let secondaryActionText = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'Cancel';\n      let callback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n      let specialCallbackWhenSuccess = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n      const records = this.get('editableRecords');\n      const commitAction = this.commit.bind(this);\n      const resetAction = this.reset.bind(this);\n      const tooltip = this.get('tooltip');\n      const applyConfirmFunction = this.get('applyConfirmFunction');\n\n      if (!isUndefined(applyConfirmFunction) && applyConfirmFunction !== null) {\n        return applyConfirmFunction(records, callback, specialCallbackWhenSuccess);\n      } // TODO: Integrate against impact API.\n\n\n      this.setProperties({\n        isLastUndoStateCommitted: true\n      });\n      tooltip.pushConfirmation({\n        tip: tip,\n        title: title,\n        warning: false,\n        hasOverlay: true,\n        primaryActionText: primaryActionText,\n        primaryAction: async () => {\n          try {\n            await commitAction();\n          } catch (err) {\n            return {};\n          } finally {\n            if (specialCallbackWhenSuccess) {\n              await specialCallbackWhenSuccess();\n            } else if (callback) {\n              await callback();\n            }\n\n            tooltip.reset();\n          }\n        },\n        secondaryActionText: secondaryActionText,\n        secondaryAction: async () => {\n          tooltip.reset();\n          resetAction();\n          if (callback) await callback();\n        },\n        closeAction: async () => {\n          if (callback) await callback();\n        }\n      });\n    },\n\n    commit() {\n      const records = this.get('editableRecords');\n      const saveRecordFunction = this.get('saveRecordFunction');\n      const tooltip = this.get('tooltip');\n      this.set('errors', []);\n\n      if (!isUndefined(saveRecordFunction) && saveRecordFunction !== null) {\n        return saveRecordFunction(records).then(() => {\n          this.close();\n        }).catch(e => {\n          // we should handle these errors in the console for developers i.e adapter failures, network failure details\n          // let form / widgets components handle error messages for end users to help ease user feedback\n          // most of these errors are not perceivable by the user anyways and are for developers\n          console.warn(e.message, e); // eslint-disable-line no-console\n\n          tooltip.reset();\n          const options = this.get('options');\n\n          if (options && options.closeOnError) {\n            this.close();\n          }\n        });\n      }\n\n      return (0, _saveRecords.default)(records).then(() => {\n        this.close();\n      }).catch(e => {\n        // we should handle these errors in the console for developers i.e adapter failures, network failure details\n        // let form / widgets components handle error messages for end users to help ease user feedback\n        // most of these errors are not perceivable by the user anyways and are for developers\n        console.warn(e.message, e); // eslint-disable-line no-console\n\n        tooltip.reset();\n      });\n    },\n\n    cancel() {\n      this.set('hasApplied', false);\n    },\n\n    reset() {\n      this.get('tooltip').reset();\n      this.setProperties({\n        isLinkMode: false,\n        isSearching: false,\n        isShrinking: false,\n        filter: '',\n        errors: []\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/fare-calc\", [\"exports\", \"adept-iq/config/api-urls\", \"lodash\"], function (_exports, _apiUrls, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const COMPANION = 'COMPANION';\n\n  var _default = Ember.Service.extend({\n    ajaxService: Ember.inject.service('ajax'),\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async calcFareByRiderIdAndFareCategory(riderId, fareCategory) {\n      let companionCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n      const json = {\n        clientId: riderId\n      };\n\n      if (fareCategory) {\n        json.fareCategory = fareCategory;\n      }\n\n      let fare = 0;\n\n      try {\n        const response = await this.get('ajaxService').post(_apiUrls.API.fareCalcService.host + '/calculate-fare/', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          },\n          data: json\n        });\n\n        const fareObj = _lodash.default.find(response, obj => obj.companionCount === companionCount, {\n          fare: 0\n        });\n\n        if (!fareObj) throw Error(`Unable to fetch fare for companion count ${companionCount}`);\n        fare = fareObj.fare;\n      } catch (e) {\n        this.get('notifications').warning(`CALCULATE FARE FAILED. ${e.message}`);\n      }\n\n      return fare;\n    },\n\n    // TODO: send fareCategory to API\n    async calcFareByRiderIdAndTravelNeeds(rider) {\n      let travelNeeds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      let override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      let fareCategory = arguments.length > 3 ? arguments[3] : undefined;\n      const fareCategoryName = override ? fareCategory : rider.get('fareCategory');\n      const companionTravelNeeds = travelNeeds.filter(travelNeed => {\n        return travelNeed.travelNeedTypeNameUppercase === COMPANION;\n      }).map(travelNeed => {\n        const travelNeedCount = parseFloat(travelNeed.count);\n        const count = (0, _lodash.isNaN)(travelNeedCount) ? 0 : travelNeedCount;\n        return {\n          name: travelNeed.travelNeedTypeNameUppercase,\n          count: count,\n          fareCalculationType: fareCategoryName\n        };\n      });\n      let companionCnt = companionTravelNeeds.length <= 0 ? 0 : companionTravelNeeds.reduce((n, _ref) => {\n        let {\n          count\n        } = _ref;\n        return n + count;\n      }, 0);\n\n      if ((0, _lodash.isNaN)(companionCnt) || companionCnt < 0) {\n        companionCnt = 0;\n      }\n\n      const fare = await this.calcFareByRiderIdAndFareCategory(rider.get('riderId'), fareCategory, companionCnt);\n      return fare;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/fixed-route-engine\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const FRES_ENDPOINT = '/configuration/settings';\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    fixedRouteEngineParams: null,\n\n    async save(configItem) {\n      const session = this.get('session');\n      const payload = {\n        'value': configItem.get('value')\n      }; //TODO - Temporary fix need to rollback once got NYAAR-11301 fix\n\n      const buildURL = _apiUrls.API.fixedRouteEngineService.host + FRES_ENDPOINT + '/' + configItem.get('name'); //this.get('ajax').set('headers',null);\n\n      return await this.get('ajax').put(buildURL, {\n        method: 'PUT',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: JSON.stringify(payload)\n      }).then(async () => {\n        await this.fetchFixedRouteEngine();\n        return true;\n      }).catch(error => {\n        let message = '';\n\n        if (!Ember.isNone(error) && !Ember.isNone(error.payload) && !Ember.isNone(error.payload.message)) {\n          message = error.payload.message;\n        }\n\n        this.get('notifications').warning(`Failed to save Fixed Route Engine Parameter. ${message}`);\n        return false;\n      });\n    },\n\n    async fetchFixedRouteEngine() {\n      const session = this.get('session');\n      return await this.get('ajax').request(_apiUrls.API.fixedRouteEngineService.host + FRES_ENDPOINT, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(fres => {\n        this.set('fixedRouteEngineParams', fres);\n      }).catch(err => {\n        // eslint-disable-next-line no-console\n        console.error(err.message);\n        this.set('fixedRouteEngineParams', {});\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/flash-messages\", [\"exports\", \"ember-cli-flash/services/flash-messages\"], function (_exports, _flashMessages) {\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 _flashMessages.default;\n    }\n  });\n});","define(\"adept-iq/services/geocode\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/utils/zone-validation\", \"adept-iq/config/api-urls\", \"adept-iq/utils/unwrapProxy\", \"adept-iq/pods/components/iq-widgets/map-widget/config/polyline\", \"adept-iq/pods/components/iq-widgets/map-widget/config/marker\", \"lodash\", \"adept-iq/utils/map-provider\", \"adept-iq/utils/dds-map\"], function (_exports, _environment, _zoneValidation, _apiUrls, _unwrapProxy, _polyline, _marker, _lodash, _mapProvider, ddsMap) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n  const {\n    benomad,\n    google,\n    tomtom\n  } = _apiUrls.API;\n  const SPEED_REGION_MARKER_TYPE = 'speed-region';\n  const GOOGLE_GEOCODE_API_TYPE = 'google';\n  const TOMTOM_GEOCODE_API_TYPE = 'tomtom';\n  const DDS_MAP_GEOCODE_API_TYPE = 'dds_map';\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    store: Ember.inject.service(),\n    map: Ember.inject.service(),\n    activeGeocode: false,\n    activeMarker: null,\n    activePickMarker: null,\n    activeDropMarker: null,\n    activeSpeedRegion: null,\n    oldPickMarker: null,\n    oldDropMarker: null,\n    oldSpeedRegionMarker: null,\n    oldTripPolyline: null,\n    activeTripPolyline: null,\n    activeTripArrow: null,\n    oldMarker: null,\n    markerType: '',\n    latlng: null,\n    address: null,\n    zoom: 12,\n    currentRecord: null,\n    geo: null,\n    isInvalidAddress: false,\n    isGeoNodeResultsFetched: false,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    addressSearchResults(result) {\n      const record = this.get('currentRecord.locations.firstObject');\n      const markerType = this.get('markerType');\n      const bndRes = result.BND;\n\n      if (bndRes.Elements.count > 0) {\n        const bndAddressRes = bndRes.Elements.Element.firstObject;\n        const latLng = {\n          lon: bndAddressRes.Coordinate.x,\n          lat: bndAddressRes.Coordinate.y\n        };\n        const markerOptions = _marker.default[markerType];\n        this.set('latlng', {\n          lat: latLng.lat,\n          lng: latLng.lon\n        });\n        const tomtomMarker = new bemap.Marker(this.get('latlng'), markerOptions);\n\n        if (markerType === 'pick') {\n          if (this.get('activePickMarker')) {\n            this.set('oldPickMarker', this.get('activePickMarker'));\n          }\n\n          this.set('activePickMarker', tomtomMarker);\n        } else if (markerType === 'drop') {\n          if (this.get('activeDropMarker')) {\n            this.set('oldDropMarker', this.get('activeDropMarker'));\n          }\n\n          this.set('activeDropMarker', tomtomMarker);\n        } else if (markerType === SPEED_REGION_MARKER_TYPE) {\n          if (this.get('activeSpeedRegionMarker')) {\n            this.set('oldSpeedRegionMarker', this.get('activeSpeedRegionMarker'));\n          }\n\n          this.set('activeSpeedRegionMarker', tomtomMarker);\n        } else {\n          this.set('oldMarker', this.get('activeMarker'));\n          this.set('activeMarker', tomtomMarker);\n        }\n      } else if (!Ember.isNone(record) && record.lat !== 0 && record.lng !== 0) {\n        this.set('latlng', {\n          lat: record.lat,\n          lng: record.lng\n        });\n        const tomtomMarker = new bemap.Marker(this.get('latlng'));\n\n        if (markerType === 'pick') {\n          if (this.get('activePickMarker')) {\n            this.set('oldPickMarker', this.get('activePickMarker'));\n          }\n\n          this.set('activePickMarker', tomtomMarker);\n        } else if (markerType === 'drop') {\n          if (this.get('activeDropMarker')) {\n            this.set('oldDropMarker', this.get('activeDropMarker'));\n          }\n\n          this.set('activeDropMarker', tomtomMarker);\n        } else if (markerType === SPEED_REGION_MARKER_TYPE) {\n          if (this.get('activeSpeedRegionMarker')) {\n            this.set('oldSpeedRegionMarker', this.get('activeSpeedRegionMarker'));\n          }\n\n          this.set('activeSpeedRegionMarker', tomtomMarker);\n        } else {\n          this.set('oldMarker', this.get('activeMarker'));\n          this.set('activeMarker', tomtomMarker);\n        }\n      }\n\n      if (this.get('activePickMarker') && this.get('activeDropMarker')) {\n        const tripPoints = [[this.get('activeDropMarker._latlng.lat'), this.get('activeDropMarker._latlng.lng')], [this.get('activePickMarker._latlng.lat'), this.get('activePickMarker._latlng.lng')]];\n        const polyLineOptions = _polyline.default.dotted;\n        /*eslint-enable */\n\n        const tripPolyline = window.L.polyline(tripPoints, {\n          style: polyLineOptions\n        });\n\n        if (this.get('activeTripPolyline')) {\n          this.set('oldTripPolyline', this.get('activeTripPolyline'));\n        }\n\n        if (this.get('activeTripArrow')) {\n          this.set('oldTripArrow', this.get('activeTripArrow'));\n        }\n\n        this.set('activeTripPolyline', tripPolyline);\n      }\n    },\n\n    findLocationForRecord(record) {\n      const unwrappedRecord = (0, _unwrapProxy.unwrapProxy)(record);\n\n      if (Ember.isPresent(unwrappedRecord)) {\n        this.set('currentRecord', record);\n        const country = record.get('country');\n        const region = record.get('region');\n        const postalCode = record.get('postalCode');\n        const streetAddress = record.get('streetAddress');\n\n        if (!Ember.isNone(country) || !Ember.isNone(region) || !Ember.isNone(postalCode) || !Ember.isNone(postalCode)) {\n          if (this.getMapProvider() === DDS_MAP_GEOCODE_API_TYPE) {\n            const query = [streetAddress, region, postalCode, country].filter(part => Ember.isPresent(part)).join(', ');\n            if (!query) return;\n            return ddsMap.geocodeSearch(query, Object.assign({\n              backfill: false\n            }, this.getDdsMapSearchBias())).then(results => this.addressSearchResults(this.toBeNomadSearchResult(results))).catch(err => {\n              console.warn('dds_map geocoding failed', err); // eslint-disable-line no-console\n            });\n          }\n\n          const url = `${benomad.host}/bgis/bnd?version=${_environment.default.benomad.version}&geoserver=${_environment.default.benomad.geoserver}&action=geocoding&format=${_environment.default.benomad.format}&searchType=${_environment.default.benomad.searchType}&country=${country}&city=${region}&postalCode=${postalCode}&street=${streetAddress}&language=${_environment.default.benomad.languages[1]}&maxResult=10`;\n          return this.get('ajax').request(url, {\n            method: 'GET'\n          }).then(this.addressSearchResults.bind(this));\n        }\n      }\n    },\n\n    /**\n     * Active map provider for search / geocoding / reverse geocoding\n     * ('google' | 'benomad' | 'tomtom' | 'dds_map'), see app/config/api-urls.js.\n     */\n    getMapProvider() {\n      return (0, _mapProvider.getMapProvider)();\n    },\n\n    // dds_map: bias search results towards the agency's map center; `radius`\n    // (autocomplete only) covers the site's bounding box\n    getDdsMapSearchBias() {\n      const center = this.get('map.center');\n      if (Ember.isNone(center)) return {};\n      return {\n        lat: center.lat,\n        lng: center.lon,\n        radius: ddsMap.radiusFromBoundingBox(center, this.get('map.boundingBox'))\n      };\n    },\n\n    // dds_map: adapt search results to the minimal BeNomad \"BND\" shape that\n    // `addressSearchResults` reads (only the first coordinate is used)\n    toBeNomadSearchResult() {\n      let results = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      const elements = results.map(result => {\n        return {\n          Coordinate: {\n            x: result.position.lon,\n            y: result.position.lat\n          }\n        };\n      });\n      return {\n        BND: {\n          Elements: {\n            count: elements.length,\n            Element: elements\n          }\n        }\n      };\n    },\n\n    activateGeocode(activeGeocode, record, markerType) {\n      this.findLocationForRecord(record);\n      this.set('activeGeo', activeGeocode);\n      this.set('markerType', markerType);\n    },\n\n    deactivateGeocode() {\n      Ember.$('html,body,.tomtom-map').removeClass('custom-cursor');\n\n      if (this.get('activeMarker')) {\n        this.get('activeMarker').remove();\n        this.set('activeMarker', null);\n      }\n\n      if (this.get('oldMarker')) {\n        this.get('oldMarker').remove();\n        this.set('oldMarker', null);\n      }\n\n      if (this.get('oldPickMarker')) {\n        this.get('oldPickMarker').remove();\n        this.set('oldPickMarker', null);\n      }\n\n      if (this.get('oldDropMarker')) {\n        this.get('oldDropMarker').remove();\n        this.set('oldDropMarker', null);\n      }\n\n      if (this.get('activePickMarker')) {\n        this.get('activePickMarker').remove();\n        this.set('activePickMarker', null);\n      }\n\n      if (this.get('activeDropMarker')) {\n        this.get('activeDropMarker').remove();\n        this.set('activeDropMarker', null);\n      }\n\n      if (this.get('oldTripPolyline')) {\n        this.get('oldTripPolyline').remove();\n        this.set('oldTripPolyline', null);\n      }\n\n      if (this.get('activeTripPolyline')) {\n        this.get('activeTripPolyline').remove();\n        this.set('activeTripPolyline', null);\n      }\n\n      if (this.get('activeTripArrow')) {\n        this.get('activeTripArrow').remove();\n        this.set('activeTripArrow', null);\n      }\n\n      if (this.get('activeSpeedRegionMarker')) {\n        this.get('activeSpeedRegionMarker').remove();\n        this.set('activeSpeedRegionMarker', null);\n      }\n\n      if (this.get('oldSpeedRegionMarker')) {\n        this.get('oldSpeedRegionMarker').remove();\n        this.set('oldSpeedRegionMarker', null);\n      }\n\n      this.set('activeGeocode', false);\n      this.set('address', null);\n      this.set('markerType', '');\n    },\n\n    formatFreeformAddress(streetNumber, streetName, district, city, postalCode, country) {\n      const address = [];\n      if (Ember.isPresent(streetNumber)) address.push(streetNumber);\n      if (Ember.isPresent(streetName)) address.push(streetName);\n      const result = [address.join(' ')];\n      if (Ember.isPresent(district)) result.push(district);\n      if (Ember.isPresent(city)) result.push(city);\n      if (Ember.isPresent(postalCode)) result.push(postalCode);\n      if (Ember.isPresent(country)) result.push(country);\n      return result.join(', ');\n    },\n\n    // dds_map: result already comes in the shared address/position shape\n    reverseGeocodeDdsMapResult(result) {\n      if (Ember.isNone(result)) return;\n      this.set('address', result);\n      return result;\n    },\n\n    reverseGeocodeTomTomResult(response) {\n      const results = response.addresses;\n\n      if (results.length > 0) {\n        const result = results.firstObject;\n        const addressComponent = result.address;\n        const geometry = result.position.split(',');\n        const res = {\n          address: {\n            freeformAddress: this.getTomTomComponentType(addressComponent, 'freeformAddress'),\n            beNomadAddress: this.getTomTomComponentType(addressComponent, 'freeformAddress'),\n            state: this.getTomTomComponentType(addressComponent, 'countrySubdivisionName'),\n            city: this.getTomTomComponentType(addressComponent, 'municipality'),\n            street: this.getTomTomComponentType(addressComponent, 'streetName'),\n            streetName: this.getTomTomComponentType(addressComponent, 'streetName'),\n            streetNameAndNumber: `${this.getTomTomComponentType(addressComponent, 'streetNumber')} ${this.getTomTomComponentType(addressComponent, 'streetName')}`,\n            streetNumber: this.getTomTomComponentType(addressComponent, 'streetNumber'),\n            localName: this.getTomTomComponentType(addressComponent, 'localName'),\n            municipality: this.getTomTomComponentType(addressComponent, 'municipality'),\n            country: this.getTomTomComponentType(addressComponent, 'country'),\n            locality: this.getTomTomComponentType(addressComponent, 'localName'),\n            postalCode: this.getTomTomComponentType(addressComponent, 'postalCode')\n          },\n          position: {\n            lon: parseFloat(geometry[1], 10),\n            lat: parseFloat(geometry[0], 10)\n          }\n        };\n        this.set('address', res);\n        return res;\n      }\n    },\n\n    reverseGeocodeGoogleResult(response) {\n      const results = response.results;\n\n      if (results.length > 0) {\n        const result = results.firstObject;\n        const addressComponent = result.address_components;\n        const freeformAddress = result.formatted_address;\n        const geometry = result.geometry;\n        const res = {\n          address: {\n            freeformAddress: freeformAddress,\n            beNomadAddress: freeformAddress,\n            state: this.getGoogleComponentType(addressComponent, 'administrative_area_level_1'),\n            city: this.getGoogleComponentType(addressComponent, 'locality'),\n            street: this.getGoogleComponentType(addressComponent, 'route'),\n            streetName: this.getGoogleComponentType(addressComponent, 'route'),\n            streetNameAndNumber: this.getGoogleComponentType(addressComponent, 'street_number') + this.getGoogleComponentType(addressComponent, 'route'),\n            streetNumber: this.getGoogleComponentType(addressComponent, 'street_number'),\n            localName: this.getGoogleComponentType(addressComponent, 'administrative_area_level_2'),\n            municipality: this.getGoogleComponentType(addressComponent, 'administrative_area_level_2'),\n            country: this.getGoogleComponentType(addressComponent, 'country'),\n            locality: this.getGoogleComponentType(addressComponent, 'locality'),\n            postalCode: this.getGoogleComponentType(addressComponent, 'postal_code')\n          },\n          position: {\n            lon: geometry.location.lng,\n            lat: geometry.location.lat\n          }\n        };\n        this.set('address', res);\n        return res;\n      }\n    },\n\n    reverseGeocodeBeNomadResult(result) {\n      const latlng = this.get('latlng');\n      const bndRes = result.BND;\n      const boundingBoxExtent = bndRes.Extent;\n      const bndAddressRes = bndRes.Elements.Element.firstObject; // benomad postalCode consist of cityCode and postal code V6L1C6/V6L. Sometimes postal code placed after city code\n\n      const [pos1, pos2] = bndAddressRes.PostalAddress.PostalCode.trim().split('/');\n      let postalCode;\n\n      if (pos1.length > 3) {\n        postalCode = pos1;\n      } else if (Ember.isPresent(pos2)) {\n        postalCode = pos2;\n      } else {\n        postalCode = pos1;\n      }\n\n      const [strPos1, strPos2] = bndAddressRes.PostalAddress.Street.trim().split(', ');\n      const street = strPos2 ? strPos2 : strPos1;\n      const streetNameAndNumber = `${bndAddressRes.PostalAddress.StreetNumber} ${street}`;\n      const city = bndAddressRes.PostalAddress.City || bndAddressRes.PostalAddress.State;\n      const district = bndAddressRes.PostalAddress.District;\n      const country = bndAddressRes.PostalAddress.Country;\n      const freeformAddress = this.formatFreeformAddress(bndAddressRes.PostalAddress.StreetNumber, street, district, city, postalCode, country);\n      const beNomadAddress = this.formatFreeformAddress(bndAddressRes.PostalAddress.StreetNumber, street, '', city, postalCode, country);\n      const res = {\n        address: {\n          boundingBox: {\n            northEast: `${boundingBoxExtent.maxX},${boundingBoxExtent.maxY}`,\n            southWest: `${boundingBoxExtent.minX},${boundingBoxExtent.minY}`\n          },\n          buildingNumber: bndAddressRes.PostalAddress.StreetNumber,\n          country: bndAddressRes.PostalAddress.Country,\n          countryCodeISO3: bndAddressRes.PostalAddress.CountryCode,\n          countrySecondarySubdivision: bndAddressRes.PostalAddress.County,\n          countrySubdivisionName: bndAddressRes.PostalAddress.County,\n          freeformAddress: freeformAddress,\n          beNomadAddress: beNomadAddress,\n          localName: bndAddressRes.PostalAddress.County,\n          municipality: bndAddressRes.PostalAddress.County,\n          locality: district,\n          postalCode: postalCode,\n          state: bndAddressRes.PostalAddress.State,\n          city: city,\n          street: street,\n          streetName: street,\n          streetNameAndNumber: streetNameAndNumber,\n          streetNumber: bndAddressRes.PostalAddress.StreetNumber\n        }\n      };\n      res.position = {\n        lat: parseFloat(latlng.lat.toFixed(5)),\n        lon: parseFloat(latlng.lng.toFixed(5))\n      };\n      this.set('address', res);\n      return res;\n    },\n\n    async saveNewGeocode(latlng, address) {\n      const markerType = this.get('markerType');\n      const boundingBox = this.get('map.boundingBox');\n      this.set('latlng', latlng); // if the point is outside the valid zone polygon\n      // return error and exit\n\n      if (!(0, _zoneValidation.insideZone)([latlng.lat, latlng.lng], boundingBox) && !this.get('isInvalidAddress')) {\n        this.get('notifications').warning('Unable to save. Location must be within the agency service boundary.');\n        return;\n      }\n\n      const pintPointIcon = {\n        icon: new bemap.Icon({\n          src: '/map-icons/icon-pinpoint.svg',\n          anchorX: 0.50,\n          anchorY: 1,\n          height: 30,\n          width: 30,\n          anchorXUnits: 'fraction',\n          anchorYUnits: 'fraction',\n          scale: 1\n        }),\n        keyboard: false,\n        interactive: false\n      };\n      const coord = new bemap.Coordinate(latlng.lng, latlng.lat);\n      const tomtomMarker = new bemap.Marker(coord, pintPointIcon);\n\n      if (Ember.isNone(address)) {\n        await this.reverseGeocode(latlng);\n      } else {\n        this.set('address', address);\n      }\n\n      if (markerType === 'pick') {\n        this.set('oldPickMarker', this.get('activePickMarker'));\n        this.set('activePickMarker', tomtomMarker);\n      } else if (markerType === 'drop') {\n        this.set('oldDropMarker', this.get('activeDropMarker'));\n        this.set('activeDropMarker', tomtomMarker);\n      } else if (markerType === SPEED_REGION_MARKER_TYPE) {\n        this.set('oldSpeedRegionMarker', this.get('activeSpeedRegionMarker'));\n        this.set('activeSpeedRegionMarker', tomtomMarker);\n      } else {\n        this.set('oldMarker', this.get('activeMarker'));\n        this.set('activeMarker', tomtomMarker);\n      }\n\n      if (this.get('activePickMarker') && this.get('activeDropMarker')) {\n        const tripPoints = [[this.get('activePickMarker._latlng.lat'), this.get('activePickMarker._latlng.lng')], [this.get('activeDropMarker._latlng.lat'), this.get('activeDropMarker._latlng.lng')]];\n        const polyLineOptions = _polyline.default.dotted;\n        const tripPolyline = window.L.polyline(tripPoints, {\n          style: polyLineOptions\n        });\n\n        if (this.get('activeTripPolyline')) {\n          this.set('oldTripPolyline', this.get('activeTripPolyline'));\n        }\n\n        if (this.get('activeTripArrow')) {\n          this.set('oldTripArrow', this.get('activeTripArrow'));\n        }\n\n        this.set('activeTripPolyline', tripPolyline);\n      }\n    },\n\n    // geonode is part of DDS' service used by the scheduling engine\n    calculateZone(lat, lng) {\n      this.set('isGeoNodeResultsFetched', false);\n      const session = this.get('session');\n      const json = {\n        data: [[lat, lng]]\n      };\n      return this.get('ajax').post(`${_apiUrls.API.iqMap.host}/calculate-zone`, {\n        method: 'POST',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: json\n      }).then(results => {\n        this.set('isGeoNodeResultsFetched', true);\n        return {\n          zone: {\n            'zoneName': results.data[0]\n          }\n        };\n      }).catch(() => {\n        return;\n      });\n    },\n\n    // geonode is part of DDS' service used by the scheduling engine\n    getGeonode(queryString) {\n      this.set('isGeoNodeResultsFetched', false);\n      const session = this.get('session');\n      return this.get('ajax').request(`${_apiUrls.API.geocodeService.host}/geocode`, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: {\n          query: queryString,\n          resultCount: 1\n        }\n      }).then(results => {\n        this.set('isGeoNodeResultsFetched', true);\n        const result = results.data.find(object => {\n          return !Ember.isNone(object.geonode);\n        });\n        return result;\n      }).catch(() => {\n        return;\n      });\n    },\n\n    fuzzySearch(query) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      const site = this.get('map.site');\n      const countrySet = Ember.isPresent(site) ? site.split('/')[0] : null;\n      const boundingBox = this.get('map.boundingBox');\n      const topLeftPoint = boundingBox ? boundingBox[0] : null;\n      const bottomRightPoint = boundingBox ? boundingBox[2] : null;\n      const topLeft = `${topLeftPoint[1]},${topLeftPoint[0]}`;\n      const btmRight = `${bottomRightPoint[1]},${bottomRightPoint[0]}`;\n      const limit = options.limit || 1;\n      const queryParams = this.parseGeoCodeQueryString(query);\n      let url = `${benomad.host}/bgis/bnd?version=${_environment.default.benomad.version}&geoserver=${_environment.default.benomad.geoserver}&action=geocoding&format=${_environment.default.benomad.format}&maxResult=${limit}`;\n      const mapProvider = this.getMapProvider();\n\n      if (mapProvider === DDS_MAP_GEOCODE_API_TYPE) {\n        const bias = this.getDdsMapSearchBias(); // typeahead fields (e.g. booking pickup / drop-off) -> autocomplete, not search.\n        // Suggestion count comes from API.ddsMap.autocompleteLimit, except for\n        // callers that only want the single best match (road supervisor).\n\n        return ddsMap.autocompleteAddresses(this.parseGeoCodeTomTomQueryString(query), {\n          lat: bias.lat,\n          lng: bias.lng,\n          radius: bias.radius,\n          limit: limit === 1 ? 1 : null\n        });\n      }\n\n      if (mapProvider === GOOGLE_GEOCODE_API_TYPE) {\n        url = `${google.host}/maps/api/geocode/json`;\n        const googleQueryParams = {\n          address: this.parseGeoCodeGoogleQueryString(query),\n          key: _environment.default.google.key\n        };\n        return this.get('ajax').request(url, {\n          method: 'GET',\n          data: googleQueryParams\n        }).then(this.geoCodingGoogleResult.bind(this, query));\n      } else if (mapProvider === TOMTOM_GEOCODE_API_TYPE) {\n        const address = this.parseGeoCodeTomTomQueryString(query);\n        url = `${tomtom.host}search/${_environment.default.tomtom.version}/search/${address}.${_environment.default.tomtom.ext}`;\n        const tomtomQueryParams = {\n          topLeft,\n          btmRight,\n          countrySet,\n          key: _environment.default.tomtom.key\n        };\n        return this.get('ajax').request(url, {\n          method: 'GET',\n          data: tomtomQueryParams\n        }).then(this.geoCodingTomTomResult.bind(this, query));\n      }\n\n      return this.get('ajax').request(url, {\n        method: 'GET',\n        data: queryParams\n      }).then(this.geoCodingBeNomadResult.bind(this, query));\n    },\n\n    async reverseGeocode(latlng) {\n      const lat = parseFloat(latlng.lat.toFixed(5));\n      const lng = parseFloat(latlng.lng.toFixed(5));\n      this.set('latlng', latlng);\n      let url = `${benomad.host}/bgis/bnd?version=${_environment.default.benomad.version}&geoserver=${_environment.default.benomad.geoserver}&action=revgeocoding&format=${_environment.default.benomad.format}&options=SKIP_EMPTY_STREETNAME&xy=${lng},${lat}&radius=${_environment.default.benomad.radius}&maxResult=10`;\n      const mapProvider = this.getMapProvider();\n\n      if (mapProvider === DDS_MAP_GEOCODE_API_TYPE) {\n        return ddsMap.reverseGeocode(lat, lng).then(this.reverseGeocodeDdsMapResult.bind(this)).catch(err => {\n          this.get('notifications').warning('UNABLE TO LOCATE VEHICLE\\'S CURRENT LOCATION. PLEASE ENTER THE BREAKDOWN ADDRESS.');\n          this.notifyPropertyChange('address');\n          throw err;\n        });\n      }\n\n      if (mapProvider === GOOGLE_GEOCODE_API_TYPE) {\n        url = `${google.host}/maps/api/geocode/json`;\n        const googleQueryParams = {\n          latlng: `${lat},${lng}`,\n          key: _environment.default.google.key\n        };\n        return this.get('ajax').request(url, {\n          method: 'GET',\n          data: googleQueryParams\n        }).then(this.reverseGeocodeGoogleResult.bind(this));\n      } else if (mapProvider === TOMTOM_GEOCODE_API_TYPE) {\n        url = `${tomtom.host}search/${_environment.default.tomtom.version}/reverseGeocode/${lat},${lng}.${_environment.default.tomtom.ext}`;\n        const tomtomQueryParams = {\n          key: _environment.default.tomtom.key\n        };\n        return this.get('ajax').request(url, {\n          method: 'GET',\n          data: tomtomQueryParams\n        }).then(this.reverseGeocodeTomTomResult.bind(this)).catch(err => {\n          this.get('notifications').warning('UNABLE TO LOCATE VEHICLE\\'S CURRENT LOCATION. PLEASE ENTER THE BREAKDOWN ADDRESS.');\n          this.notifyPropertyChange('address');\n          throw err;\n        });\n      }\n\n      return this.get('ajax').request(url, {\n        method: 'GET'\n      }).then(this.reverseGeocodeBeNomadResult.bind(this));\n    },\n\n    buildTravelTimeUrl() {\n      let destinations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      let benomadUrl = `${benomad.host}/bgis/bnd?version=${_environment.default.benomad.version}&geoserver=${_environment.default.benomad.geoserver}&action=routing&format=${_environment.default.benomad.format}`;\n      destinations.forEach(dest => {\n        benomadUrl = benomadUrl + `&xy=${dest.lng},${dest.lat}`;\n      });\n      return benomadUrl;\n    },\n\n    /**\n     * retrive travel time from source addres to destination address\n     * @param destinations\n     * @returns {*}\n     */\n    retriveTravelTime(destinations) {\n      const URL = this.buildTravelTimeUrl(destinations);\n      return this.get('ajax').request(URL, {\n        method: 'GET'\n      }).then(data => {\n        return {\n          usedDestinations: data.BND.UsedDestinations,\n          duration: data.BND.Routes.Route[0].Duration\n        };\n      });\n    },\n\n    geoCodingApi(term) {\n      const site = this.get('map.site');\n      const countrySet = Ember.isPresent(site) ? site.split('/')[0] : null;\n      const bbox = this.get('map.bbox');\n      const addressArray = term.split(',');\n      const street = addressArray[0].trim();\n      const boundingBox = this.get('map.boundingBox');\n      const topLeftPoint = boundingBox ? boundingBox[0] : null;\n      const bottomRightPoint = boundingBox ? boundingBox[2] : null;\n      const topLeft = `${topLeftPoint[1]},${topLeftPoint[0]}`;\n      const btmRight = `${bottomRightPoint[1]},${bottomRightPoint[0]}`;\n      let city = '';\n\n      if (addressArray.length > 1) {\n        city = addressArray[1].trim();\n      }\n\n      let url = `${benomad.host}/bgis/bnd?version=${_environment.default.benomad.version}&geoserver=${_environment.default.benomad.geoserver}&action=geocoding&format=${_environment.default.benomad.format}&searchType=${_environment.default.benomad.searchTypePattern}&street=${street}&city=${city}&bbox=${bbox}&maxResult=10`;\n      const mapProvider = this.getMapProvider();\n\n      if (mapProvider === DDS_MAP_GEOCODE_API_TYPE) {\n        // typeahead address fields -> autocomplete, not search\n        return ddsMap.autocompleteAddresses(this.parseGeoCodeTomTomQueryString(term), this.getDdsMapSearchBias());\n      }\n\n      if (mapProvider === GOOGLE_GEOCODE_API_TYPE) {\n        url = `${google.host}/maps/api/geocode/json`;\n        const googleQueryParams = {\n          address: this.parseGeoCodeGoogleQueryString(term),\n          key: _environment.default.google.key\n        };\n        return this.get('ajax').request(url, {\n          method: 'GET',\n          data: googleQueryParams\n        }).then(this.geoCodingGoogleResult.bind(this, term));\n      } else if (mapProvider === TOMTOM_GEOCODE_API_TYPE) {\n        const address = this.parseGeoCodeTomTomQueryString(term);\n        url = `${tomtom.host}search/${_environment.default.tomtom.version}/search/${address}.${_environment.default.tomtom.ext}`;\n        const tomtomQueryParams = {\n          topLeft,\n          btmRight,\n          countrySet,\n          key: _environment.default.tomtom.key\n        };\n        return this.get('ajax').request(url, {\n          method: 'GET',\n          data: tomtomQueryParams\n        }).then(this.geoCodingTomTomResult.bind(this, term));\n      }\n\n      return this.get('ajax').request(url, {\n        method: 'GET'\n      }).then(this.geoCodingBeNomadResult.bind(this, term));\n    },\n\n    getGoogleComponentType(addressComponent, type) {\n      const foundResult = addressComponent.find(comp => {\n        return comp.types.includes(type);\n      });\n      if (Ember.isNone(foundResult)) return '';\n      return foundResult.short_name || '';\n    },\n\n    getTomTomComponentType(addressComponent, type) {\n      const foundResult = _lodash.default.get(addressComponent, type, '');\n\n      return foundResult;\n    },\n\n    geoCodingTomTomResult(searchTerm, response) {\n      const results = response.results;\n\n      if (results.length > 0) {\n        return results.map(result => {\n          const addressComponent = result.address;\n          const poiComponent = result.poi;\n          const geometry = result.position;\n          return {\n            address: {\n              freeformAddress: this.getTomTomComponentType(addressComponent, 'freeformAddress'),\n              beNomadAddress: this.getTomTomComponentType(addressComponent, 'freeformAddress'),\n              state: this.getTomTomComponentType(addressComponent, 'countrySubdivisionName'),\n              city: this.getTomTomComponentType(addressComponent, 'municipality'),\n              street: this.getTomTomComponentType(addressComponent, 'streetName'),\n              streetName: this.getTomTomComponentType(addressComponent, 'streetName'),\n              streetNameAndNumber: this.getTomTomComponentType(addressComponent, 'streetNumber') + this.getTomTomComponentType(addressComponent, 'streetName'),\n              streetNumber: this.getTomTomComponentType(addressComponent, 'streetNumber'),\n              localName: this.getTomTomComponentType(addressComponent, 'localName'),\n              municipality: this.getTomTomComponentType(addressComponent, 'municipality'),\n              country: this.getTomTomComponentType(addressComponent, 'country'),\n              locality: this.getTomTomComponentType(addressComponent, 'localName'),\n              postalCode: this.getTomTomComponentType(addressComponent, 'postalCode'),\n              alias: this.getTomTomComponentType(poiComponent, 'name')\n            },\n            position: {\n              lon: geometry.lon,\n              lat: geometry.lat\n            }\n          };\n        });\n      }\n    },\n\n    geoCodingGoogleResult(searchTerm, response) {\n      const results = response.results;\n\n      if (results.length > 0) {\n        return results.map(result => {\n          const addressComponent = result.address_components;\n          const freeformAddress = result.formatted_address;\n          const geometry = result.geometry;\n          return {\n            address: {\n              freeformAddress: freeformAddress,\n              beNomadAddress: freeformAddress,\n              state: this.getGoogleComponentType(addressComponent, 'administrative_area_level_1'),\n              city: this.getGoogleComponentType(addressComponent, 'locality'),\n              street: this.getGoogleComponentType(addressComponent, 'route'),\n              streetName: this.getGoogleComponentType(addressComponent, 'route'),\n              streetNameAndNumber: `${this.getGoogleComponentType(addressComponent, 'street_number')} ${this.getGoogleComponentType(addressComponent, 'route')}`,\n              streetNumber: this.getGoogleComponentType(addressComponent, 'street_number'),\n              localName: this.getGoogleComponentType(addressComponent, 'administrative_area_level_2'),\n              municipality: this.getGoogleComponentType(addressComponent, 'administrative_area_level_2'),\n              country: this.getGoogleComponentType(addressComponent, 'country'),\n              locality: this.getGoogleComponentType(addressComponent, 'locality'),\n              postalCode: this.getGoogleComponentType(addressComponent, 'postal_code')\n            },\n            position: {\n              lon: geometry.location.lng,\n              lat: geometry.location.lat\n            }\n          };\n        });\n      }\n    },\n\n    geoCodingBeNomadResult(searchTerm, result) {\n      const site = this.get('map.site');\n      const firstPart = Ember.isPresent(site) ? site.split('/')[0] : null;\n      const countryCode = Ember.isPresent(firstPart) ? firstPart : 'USA';\n      const bndRes = result.BND;\n\n      if (bndRes.Elements.Element) {\n        const results = bndRes.Elements.Element.filter(e => {\n          if (e.PostalAddress.StreetNumber && e.PostalAddress.PostalCode && e.PostalAddress.CountryCode === countryCode) return true;\n          return false;\n        });\n        return results.map(ele => {\n          ele.PostalAddress.StreetNumber = this.getConvertedStreetNumber(ele.PostalAddress.StreetNumber, searchTerm); // benomad postalCode consist of cityCode and postal code V6L1C6/V6L. Sometimes postal code placed after city code\n\n          const [pos1, pos2] = ele.PostalAddress.PostalCode.trim().split('/');\n          const [strPos1, strPos2] = ele.PostalAddress.Street.trim().split(', ');\n          const street = strPos2 ? strPos2 : strPos1;\n          const streetNameAndNumber = `${ele.PostalAddress.StreetNumber} ${street}`;\n          const city = ele.PostalAddress.City || ele.PostalAddress.State;\n          const district = ele.PostalAddress.District;\n          const country = ele.PostalAddress.Country;\n          let postalCode;\n\n          if (pos1.length > 3) {\n            postalCode = pos1;\n          } else if (Ember.isPresent(pos2)) {\n            postalCode = pos2;\n          } else {\n            postalCode = pos1;\n          }\n\n          const freeformAddress = this.formatFreeformAddress(ele.PostalAddress.StreetNumber, street, district, city, postalCode, country);\n          const beNomadAddress = this.formatFreeformAddress(ele.PostalAddress.StreetNumber, street, '', city, postalCode, country);\n          return {\n            address: {\n              freeformAddress: freeformAddress,\n              beNomadAddress: beNomadAddress,\n              state: ele.PostalAddress.State,\n              city: ele.PostalAddress.City,\n              street: street,\n              streetName: street,\n              streetNameAndNumber: streetNameAndNumber,\n              streetNumber: ele.PostalAddress.StreetNumber,\n              localName: ele.PostalAddress.County,\n              municipality: ele.PostalAddress.County,\n              country: ele.PostalAddress.CountryCode,\n              locality: district,\n              postalCode: postalCode\n            },\n            position: {\n              lon: ele.Coordinate.x,\n              lat: ele.Coordinate.y\n            }\n          };\n        });\n      }\n    },\n\n    parseGeoCodeTomTomQueryString(queryString) {\n      const [streetNumberAndName, city, postal, country] = !Ember.isNone(queryString) ? queryString.split(',') : ['', ''];\n      let searchString = `${streetNumberAndName.trim()}`;\n\n      if (!Ember.isNone(city)) {\n        searchString = `${searchString},${city.trim()}`;\n      }\n\n      if (!Ember.isNone(postal)) {\n        searchString = `${searchString},${postal.trim()}`;\n      }\n\n      if (!Ember.isNone(country)) {\n        searchString = `${searchString},${country.trim()}`;\n      }\n\n      return searchString;\n    },\n\n    parseGeoCodeGoogleQueryString(queryString) {\n      const [streetNumberAndName, city, postal, country] = !Ember.isNone(queryString) ? queryString.split(',') : ['', ''];\n      let searchString = `${streetNumberAndName.trim()}`;\n\n      if (!Ember.isNone(city)) {\n        searchString = `${searchString},${city.trim()}`;\n      }\n\n      if (!Ember.isNone(postal)) {\n        searchString = `${searchString},${postal.trim()}`;\n      }\n\n      if (!Ember.isNone(country)) {\n        searchString = `${searchString},${country.trim()}`;\n      }\n\n      return searchString;\n    },\n\n    // address format should be street \"street number and name, city, postal code, country\"\n    // comma after street name and postal code\n    parseGeoCodeQueryString(queryString) {\n      const site = this.get('map.site');\n      const bbox = this.get('map.bbox');\n      const firstPart = Ember.isPresent(site) ? site.split('/')[0] : null;\n      const countryCode = Ember.isPresent(firstPart) ? firstPart : 'USA';\n\n      if (!Number.isNaN(Number(queryString))) {\n        return {\n          countryCode: countryCode,\n          street: queryString,\n          bbox: `${bbox}`,\n          searchType: `${_environment.default.benomad.searchTypePattern}`\n        };\n      }\n\n      const [streetNumberAndName, city, postal, country] = !Ember.isNone(queryString) ? queryString.split(',') : ['', ''];\n      const searchParams = {\n        bbox: `${bbox}`,\n        searchType: `${_environment.default.benomad.searchType}`,\n        street: streetNumberAndName ? `${streetNumberAndName.trim()}` : ''\n      };\n\n      if (!Ember.isNone(city)) {\n        searchParams.city = city.trim();\n      }\n\n      if (!Ember.isNone(postal)) {\n        searchParams.postalCode = postal.trim();\n      }\n\n      if (!Ember.isNone(country)) {\n        searchParams.country = country.trim();\n      } else if (!Ember.isNone(countryCode)) {\n        searchParams.countryCode = countryCode.trim();\n      }\n\n      return searchParams;\n    },\n\n    /**\n     * Reg- ( NYAAR-18554 ) get street Number with hypens like ( 39-27, 31-08 )\n     * @param {string} streetNumber\n     * @param {string} searchTerm\n     * @returns {string}\n     */\n    getConvertedStreetNumber(streetNumber, searchTerm) {\n      const streetNumberWithHypenated = searchTerm.split(',').firstObject.split(' ').firstObject;\n      const searchTermStreetNumber = streetNumberWithHypenated.split('-').join('');\n\n      if (searchTermStreetNumber === streetNumber) {\n        return streetNumberWithHypenated;\n      }\n\n      return streetNumber;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/gps-manual\", [\"exports\", \"adept-iq/utils/geolib\"], function (_exports, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const INITIAL_LOCATION = [43.670300, -79.435249]; // Isle of Code\n\n  const FPS = 1;\n  const LAT_NOISE = 0.0002;\n  const LNG_NOISE = 0.0002;\n  const T_NOISE = 100;\n\n  var _default = Ember.Service.extend({\n    speed: 0,\n    location: null,\n    bearing: 0,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('location', INITIAL_LOCATION); // don't wrap in run loop\n\n      this._onKeydown = e => this.onKeydown(e); // but wrap this one\n\n\n      this._onTimeout = () => Ember.run(() => this.onTimeout());\n\n      this.start();\n    },\n\n    destroy() {\n      if (this._timer) {\n        this.stop();\n      }\n\n      this._onKeydown = null;\n      this._onTimeout = null;\n\n      this._super(...arguments);\n    },\n\n    start() {\n      if (this._timeout) return;\n      Ember.$(document).on('keydown', this._onKeydown);\n      this.onTimeout();\n    },\n\n    stop() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n      Ember.$(document).off('keydown', this._onKeydown);\n    },\n\n    onTimeout() {\n      this.update();\n      const r = Math.random() * 2 - 1;\n      const t = 1000.0 / FPS + r * T_NOISE;\n      this._timeout = setTimeout(this._onTimeout, t);\n    },\n\n    update() {\n      const oldLocation = this.get('location');\n      const bearing = this.get('bearing');\n      const speed = this.get('speed');\n      const distance = speed / FPS;\n      const location = (0, _geolib.fromGeolib)(geolib.computeDestinationPoint((0, _geolib.toGeolib)(oldLocation), distance, bearing)); // add noise proportional to speed\n\n      if (speed > 0) {\n        location[0] += (2 * Math.random() - 1) * LAT_NOISE * (speed / 100.0);\n        location[1] += (2 * Math.random() - 1) * LNG_NOISE * (speed / 100.0);\n      }\n\n      this.set('location', location);\n      const eventHandler = this.get('eventHandler');\n      if (eventHandler) eventHandler({\n        coords: {\n          latitude: location[0],\n          longitude: location[1]\n        }\n      });\n    },\n\n    onKeydown(e) {\n      switch (e.which) {\n        case 37:\n          {\n            // left\n            e.preventDefault();\n            this.set('bearing', this.get('bearing') - 10);\n            break;\n          }\n\n        case 38:\n          {\n            // up\n            e.preventDefault();\n            this.set('speed', this.get('speed') + 5);\n            break;\n          }\n\n        case 39:\n          {\n            // right\n            e.preventDefault();\n            this.set('bearing', this.get('bearing') + 10);\n            break;\n          }\n\n        case 40:\n          {\n            // down\n            e.preventDefault();\n            this.set('speed', this.get('speed') - 5);\n            break;\n          }\n\n        case 32:\n          {\n            // sp\n            e.preventDefault();\n            this.set('speed', 0);\n            break;\n          }\n\n        default:\n          break;\n      }\n    },\n\n    getLocation() {\n      return Ember.RSVP.resolve(this.get('location'));\n    },\n\n    onLocationChange(eventHandler) {\n      this.set('eventHandler', eventHandler);\n    },\n\n    offLocationChange() {\n      this.set('eventHandler', null);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/gps-simulation\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/utils/geolib\"], function (_exports, _environment, _geolib) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SECOND = 1000.0;\n  const DEFAULT_LOCATION = [_environment.default.tomtom.search.center.lat, _environment.default.tomtom.search.center.lon];\n\n  var _default = Ember.Service.extend({\n    fps: 30,\n    // frames/s\n    speed: 50.0 * 1000 / 3600,\n    // m/s\n    angularSpeed: 360,\n    // deg/s\n    loop: false,\n    t: 0,\n    // seconds\n    d: 0,\n    // m\n    bearing: null,\n    segmentIndex: null,\n    segmentLength: null,\n    segmentOffset: null,\n    location: DEFAULT_LOCATION,\n    simulatedGpsPolyline: null,\n    polylineLength: null,\n    isRunning: false,\n    _interval: null,\n    _keydownHandler: null,\n\n    init() {\n      this._super(...arguments);\n\n      this._keydownHandler = e => {\n        switch (e.which) {\n          case 38:\n            {\n              // up\n              this.set('speed', this.get('speed') + 10);\n              e.preventDefault();\n              break;\n            }\n\n          case 40:\n            {\n              // down\n              this.set('speed', this.get('speed') - 10);\n              e.preventDefault();\n              break;\n            }\n\n          case 32:\n            {\n              // sp\n              this.set('speed', 0);\n              e.preventDefault();\n              break;\n            }\n\n          default:\n            return;\n          // exit this handler for other keys\n        }\n      };\n    },\n\n    start() {\n      if (this.get('isRunning')) return;\n      this.set('isRunning', true);\n      const fps = this.get('fps');\n      const polyline = this.get('simulatedGpsPolyline');\n      const segments = (0, _geolib.computePolylineSegments)(polyline);\n      const polylineLength = (0, _geolib.computePolylineLength)(polyline);\n      this.setProperties({\n        t: 0,\n        d: 0,\n        bearing: segments[0].bearing,\n        location: segments[0].points[0],\n        segments: segments,\n        segmentIndex: 0,\n        segmentLength: segments[0].length,\n        segmentOffset: 0,\n        polylineLength\n      });\n      const interval = setInterval(() => {\n        Ember.run.schedule('afterRender', () => {\n          this.tick();\n        });\n      }, SECOND / fps);\n      this.set('_interval', interval);\n      document.addEventListener('keydown', this._keydownHandler);\n    },\n\n    tick() {\n      const fps = this.get('fps');\n      const speed = this.get('speed');\n      const angularSpeed = this.get('angularSpeed');\n      const segments = this.get('segments');\n      const totalLength = this.get('polylineLength');\n      let t = this.get('t');\n      let d = this.get('d');\n      let bearing = this.get('bearing');\n      t += SECOND / fps;\n      d = Math.min(d + speed / fps, totalLength);\n      const {\n        segment,\n        segmentOffset,\n        point\n      } = (0, _geolib.projectDistanceOnPolyline)(d, segments); // add noise\n      // point[0] += (Math.random() - 0.5) * 0.0001;\n      // point[1] += (Math.random() - 0.5) * 0.0001;\n\n      const distanceUp = (segment.bearing - bearing + 360) % 360;\n      const distanceDown = (bearing - segment.bearing + 360) % 360;\n\n      if (distanceUp < distanceDown) {\n        bearing += Math.min(angularSpeed / fps, distanceUp);\n      } else if (distanceUp > distanceDown) {\n        bearing -= Math.min(angularSpeed / fps, distanceDown);\n      }\n\n      this.setProperties({\n        t,\n        d,\n        bearing,\n        location: point,\n        segmentIndex: segments.indexOf(segment),\n        segmentLength: segment.length,\n        segmentOffset\n      });\n      const eventHandler = this.get('eventHandler');\n      if (eventHandler) eventHandler(point);\n\n      if (this.get('loop') && d >= totalLength) {\n        // reset simulation\n        t = 0;\n      }\n    },\n\n    stop() {\n      if (!this.get('isRunning')) return;\n      const interval = this.get('_interval');\n      clearInterval(interval);\n      document.removeEventListener('keydown', this._keydownHandler);\n      this.set('isRunning', false);\n    },\n\n    getLocation() {\n      return this.get('location');\n    },\n\n    onLocationChange(eventHandler) {\n      this.set('eventHandler', eventHandler);\n    },\n\n    offLocationChange() {\n      this.set('eventHandler', null);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/gps\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_OPTIONS = {\n    enableHighAccuracy: true,\n    maximumAge: 0,\n    timeout: 5000\n  }; // rather than including `Ember.Evented` mixin, we implement its interface\n  // ourselves, wrapping `navigator.geolocation.watchPosition` for each sub;\n  // this way we don't need a global \"on/off\" setting\n\n  var _default = Ember.Service.extend({\n    watches: null,\n\n    getLocation() {\n      let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const mergedOptions = Object.assign({}, DEFAULT_OPTIONS, options);\n      return new Ember.RSVP.Promise((resolve, reject) => {\n        window.navigator.geolocation.getCurrentPosition(pos => {\n          resolve(pos);\n        }, reject, mergedOptions);\n      });\n    },\n\n    onLocationChange(eventHandler) {\n      return this._createWatch(eventHandler);\n    },\n\n    offLocationChange(eventHandler) {\n      return this._clearWatch(eventHandler);\n    },\n\n    _createWatch(eventHandler) {\n      if (!this.watches) {\n        this.watches = [];\n      }\n\n      const watch = this.watches.findBy('eventHandler', eventHandler);\n      if (watch) return watch.id;\n      const id = window.navigator.geolocation.watchPosition(pos => {\n        eventHandler(pos);\n      }, () => {// NOOP\n      }, DEFAULT_OPTIONS);\n      this.watches.pushObject({\n        id,\n        eventHandler\n      });\n      return id;\n    },\n\n    _clearWatch(eventHandler) {\n      if (!this.watches) {\n        this.watches = [];\n      }\n\n      const watch = this.watches.findBy('eventHandler', eventHandler);\n\n      if (watch) {\n        window.navigator.geolocation.clearWatch(watch.id);\n        this.watches.removeObject(watch);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/hifi-cache\", [\"exports\", \"ember-hifi/services/hifi-cache\"], function (_exports, _hifiCache) {\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 _hifiCache.default;\n    }\n  });\n});","define(\"adept-iq/services/hifi\", [\"exports\", \"ember-hifi/services/hifi\"], function (_exports, _hifi) {\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 _hifi.default;\n    }\n  });\n});","define(\"adept-iq/services/interaction\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    // read-only; do not set directly\n    isScrolling: false,\n    isResizingColumn: false,\n    isMouseDown: false,\n    isMouseUp: false,\n    // mouse _can_ be \"up\" and \"down\" at the same time\n    isWheelActive: false,\n    isContextMenuOpen: false,\n    isZoomingMap: false,\n    // time to pause after scrolling is detected\n    scrollTime: 250,\n    // time to wait after map zoom is initiated\n    mapZoomTime: 750,\n    // max time to wait after detecting mousedown\n    mousedownMaxTime: 10000,\n    // time to wait after detecting mouseup (cancels mousedown wait)\n    mouseupCooldownTime: 250,\n    // time to wait after detecting mousewheel\n    wheelCooldownTime: 500,\n    // time to wait after detecting context menu open; it is impossible to know\n    // when the menu has been closed, so we just wait a fixed time\n    contextMenuTime: 3000,\n    _window: null,\n    // timers\n    _clickCooldownTimeout: null,\n    _clickMaxTimeout: null,\n    _wheelTimeout: null,\n    _contextmenuTimeout: null,\n    _scrollTimeout: null,\n    _mapZoomTimeout: null,\n    // callback wrappers\n    _onMousedown: null,\n    _onMouseup: null,\n    _onWheel: null,\n    _onContextmenu: null,\n    isBusy: Ember.computed.or('isScrolling', 'isResizingColumn', 'isMouseDown', 'isContextMenuOpen', 'isWheelActive', 'isZoomingMap'),\n    isIdle: Ember.computed.not('isBusy'),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('window', window);\n    },\n\n    destroy() {\n      clearTimeout(this._clickCooldownTimeout);\n      clearTimeout(this._clickMaxTimeout);\n      clearTimeout(this._wheelTimeout);\n      clearTimeout(this._contextmenuTimeout);\n      clearTimeout(this._scrollTimeout);\n      clearTimeout(this._mapZoomTimeout);\n      this.set('window', null);\n\n      this._super(...arguments);\n    },\n\n    window: Ember.computed({\n      get() {\n        return this._window;\n      },\n\n      set(key, value) {\n        if (this._window) {\n          this._window.removeEventListener('mousedown', this._onMousedown);\n\n          this._window.removeEventListener('mouseup', this._onMouseup);\n\n          this._window.removeEventListener('wheel', this._onWheel);\n\n          this._window.removeEventListener('contextmenu', this._onContextmenu);\n\n          this._onMousedown = null;\n          this._onMouseup = null;\n          this._onWheel = null;\n          this._onContextmenu = null;\n        }\n\n        this._window = value;\n\n        if (this._window) {\n          this._onMousedown = () => Ember.run.once(this, 'onMousedown');\n\n          this._window.addEventListener('mousedown', this._onMousedown);\n\n          this._onMouseup = () => Ember.run.once(this, 'onMouseup');\n\n          this._window.addEventListener('mouseup', this._onMouseup);\n\n          this._onWheel = () => Ember.run.once(this, 'onWheel');\n\n          this._window.addEventListener('wheel', this._onWheel, {\n            passive: true\n          });\n\n          this._onContextmenu = () => Ember.run.once(this, 'onContextmenu');\n\n          this._window.addEventListener('contextmenu', this._onContextmenu);\n        }\n\n        return value;\n      }\n\n    }),\n\n    // call when a widget has been scrolled\n    didScrollWidget() {\n      const isScrolling = this.get('isScrolling');\n\n      if (!isScrolling) {\n        this.set('isScrolling', true);\n      }\n\n      clearTimeout(this._scrollTimeout);\n      this._scrollTimeout = setTimeout(() => {\n        this.set('isScrolling', false);\n      }, this.get('scrollTime'));\n    },\n\n    // call when user starts dragging a column\n    didStartResizingColumn() {\n      const isResizingColumn = this.get('isResizingColumn');\n\n      if (!isResizingColumn) {\n        this.set('isResizingColumn', true);\n      }\n    },\n\n    // call when user stops dragging a column\n    didStopResizingColumn() {\n      const isResizingColumn = this.get('isResizingColumn');\n      if (!isResizingColumn) return;\n      this.set('isResizingColumn', false);\n    },\n\n    // call when user initiates a map zoom\n    didZoomMap() {\n      const isZoomingMap = this.get('isZoomingMap');\n\n      if (!isZoomingMap) {\n        this.set('isZoomingMap', true);\n      }\n\n      clearTimeout(this._mapZoomTimeout);\n      this._mapZoomTimeout = setTimeout(() => {\n        this.set('isZoomingMap', false);\n      }, this.get('mapZoomTime'));\n    },\n\n    onMousedown() {\n      clearTimeout(this._clickCooldownTimeout);\n      clearTimeout(this._clickMaxTimeout);\n      this._clickMaxTimeout = setTimeout(() => {\n        clearTimeout(this._clickCooldownTimeout);\n        this.set('isMouseDown', false);\n      }, this.get('mousedownMaxTime'));\n      this.set('isMouseDown', true);\n      this.set('isMouseUp', false);\n    },\n\n    onMouseup() {\n      clearTimeout(this._clickCooldownTimeout);\n      clearTimeout(this._clickMaxTimeout);\n      this._clickCooldownTimeout = setTimeout(() => {\n        this.set('isMouseDown', false);\n        this.set('isMouseUp', false);\n      }, this.get('mouseupCooldownTime'));\n      this.set('isMouseUp', true);\n    },\n\n    onWheel() {\n      clearTimeout(this._wheelTimeout);\n      this.set('isWheelActive', true);\n      this._wheelTimeout = setTimeout(() => {\n        this.set('isWheelActive', false);\n      }, this.get('wheelCooldownTime'));\n    },\n\n    onContextmenu() {\n      const isContextMenuOpen = this.get('isContextMenuOpen');\n\n      if (!isContextMenuOpen) {\n        this.set('isContextMenuOpen', true);\n      } // also triggers mousedown _without_ a mouseup\n\n\n      clearTimeout(this._clickMaxTimeout);\n      clearTimeout(this._clickCooldownTimeout);\n      this.set('isMouseDown', false); // we don't really know when this closes, so just a wait a bit\n\n      clearTimeout(this._contextmenuTimeout);\n      this._contextmenuTimeout = setTimeout(() => {\n        this.set('isContextMenuOpen', false);\n      }, this.get('contextMenuTime'));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/locks\", [\"exports\", \"lodash\", \"moment\", \"adept-iq/config/api-urls\"], function (_exports, _lodash, _moment, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n\n    lockData() {\n      const lockData = {\n        'action': 'UPDATE',\n        'model': 'lock',\n        'message': {\n          'data': {\n            'type': 'lock',\n            'id': '1',\n            'attributes': {\n              'status': 'locked',\n              'user': '',\n              'expirationTime': '2019-11-18T21:21:04.944Z'\n            },\n            'relationships': {\n              'dispatchRoute': {\n                'data': {\n                  'type': 'dispatchRoute',\n                  'id': '1'\n                }\n              }\n            }\n          }\n        }\n      };\n      return lockData;\n    },\n\n    // HACK: Doing an api get for all the locks because\n    // kafka topics does not do this. It will only do\n    // updates. This would go away once Kafka topics can send\n    // all locks at initial connection.\n    // TODO: Remove this later when lock topic sends the full version\n    // of information.\n    getAllLocks() {\n      const session = this.get('session');\n      const currentLocks = this.get('store').peekAll('lock').content;\n      const currentLocksIds = currentLocks.map(lock => lock.id);\n      return this.get('ajax').request(_apiUrls.API.dispatchService.host + '/lock', {\n        method: 'GET',\n        contentType: 'text',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(response => {\n        const {\n          data\n        } = response;\n        const newLocks = data.filter(lock => lock.attributes.entityType === 'dispatchRoute');\n        const locks = [];\n        const currentTime = (0, _moment.default)();\n        const newLockIds = newLocks.map(lock => lock.attributes.entityId);\n\n        const removeLockIds = _lodash.default.difference(currentLocksIds, newLockIds); // add or update locks\n\n\n        newLocks.forEach(lock => {\n          const lockData = this.lockData();\n          lockData.message.data.attributes.status = lock.attributes.status;\n\n          if (!lock.attributes.status) {\n            lockData.message.data.attributes.status = 'locked';\n          }\n\n          lockData.message.data.attributes.user = lock.attributes.owner;\n          lockData.message.data.attributes.expirationTime = currentTime.add(lock.attributes.timeToLive, 'seconds').format();\n          lockData.message.data.relationships.dispatchRoute.data.id = lock.attributes.entityId;\n          locks.push(lockData);\n        }); // remove old locks, change status to unlocked\n\n        currentLocks.forEach(lock => {\n          const id = lock._record.get('id');\n\n          const lockData = this.lockData();\n\n          if (removeLockIds.includes(id)) {\n            lockData.message.data.attributes.status = 'unlocked';\n            delete lockData.message.data.attributes.user;\n            delete lockData.message.data.attributes.expirationTime;\n            delete lockData.message.data.relationships;\n            locks.push(lockData);\n          }\n        });\n        return locks;\n      }).catch(() => {\n        this.get('notifications').warning('Get locks failed');\n        return [];\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/map\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\", \"adept-iq/utils/map-provider\", \"adept-iq/utils/dds-map\"], function (_exports, _environment, _apiUrls, _mapProvider, _ddsMap) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    bemap\n  } = window;\n  const {\n    benomad,\n    iqMap\n  } = _apiUrls.API;\n  const DDS_MAP_BASEMAP_CLASS = 'dds-map-basemap'; // Same zoom range as the BeNomad WMS background layer (bemap-js-api). Leaflet\n  // derives the map's zoom range from its layers; the dds_map basemap is added\n  // asynchronously, so the map must be given an explicit range up front or\n  // `map.getMaxZoom()` is Infinity and leaflet.markercluster throws\n  // \"Map has no maxZoom specified\" when a cluster group is added.\n\n  const DDS_MAP_MIN_ZOOM = 2;\n  const DDS_MAP_MAX_ZOOM = 20;\n\n  function isWebGLSupported() {\n    try {\n      const canvas = document.createElement('canvas');\n      return Boolean(canvas.getContext('webgl2') || canvas.getContext('webgl'));\n    } catch (e) {\n      return false;\n    }\n  }\n  /**\n   * `L.MaplibreGL` assumes GL map creation always succeeds: `onRemove` and every\n   * map-event handler dereference `_glMap` unguarded, so a WebGL init failure\n   * would break the whole Leaflet map on the next interaction or removal.\n   * This subclass degrades to \"no basemap\" instead. Created lazily because the\n   * plugin global only exists once vendor scripts have loaded.\n   */\n\n\n  let SafeMaplibreGL = null;\n\n  function getSafeMaplibreGL() {\n    const L = window.L;\n    if (SafeMaplibreGL || !L || !L.MaplibreGL) return SafeMaplibreGL;\n    SafeMaplibreGL = L.MaplibreGL.extend({\n      onAdd(map) {\n        try {\n          L.MaplibreGL.prototype.onAdd.call(this, map);\n        } catch (error) {\n          console.warn('dds_map basemap failed to initialize', error); // eslint-disable-line no-console\n\n          if (this._container && this._container.parentNode) {\n            this._container.parentNode.removeChild(this._container);\n          }\n        }\n      },\n\n      onRemove(map) {\n        if (!this._glMap) {\n          if (this._container && this._container.parentNode) {\n            this._container.parentNode.removeChild(this._container);\n          }\n\n          return;\n        }\n\n        L.MaplibreGL.prototype.onRemove.call(this, map);\n      },\n\n      getEvents() {\n        var _this = this;\n\n        const events = L.MaplibreGL.prototype.getEvents.call(this);\n        Object.keys(events).forEach(name => {\n          const handler = events[name];\n\n          events[name] = function () {\n            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n              args[_key] = arguments[_key];\n            }\n\n            if (_this._glMap) handler.apply(_this, args);\n          };\n        });\n        return events;\n      }\n\n    });\n    return SafeMaplibreGL;\n  }\n\n  var _default = Ember.Service.extend(Ember.Evented, {\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    editModal: Ember.inject.service(),\n    polyline: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    roadSupervisor: Ember.inject.service(),\n    // stack\n    mapContexts: null,\n    // map context required for generating maps, geocode, etc...\n    bemapMainCtx: null,\n    site: null,\n    bbox: null,\n    center: null,\n    boundingBox: null,\n    // \"top\" map-context in stack; this is what the map widget shows right now\n    topMapContext: Ember.computed.readOnly('mapContexts.lastObject'),\n    isEmpty: Ember.computed.equal('mapContexts.length', 0),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('mapContexts', []);\n      const domain = new URL(benomad.host).hostname;\n      const bemapMainCtx = new bemap.Context({\n        'secure': true,\n        'host': domain,\n        'geoserver': _environment.default.benomad.geoserver\n      });\n      this.set('bemapMainCtx', bemapMainCtx);\n      const siteNameConfig = !_environment.default.APP.test ? await this.store.findRecord('cs-config-item', 'config-System_Configuration-site_map_params/siteName') : null;\n      const site = Ember.isPresent(siteNameConfig) ? siteNameConfig.get('value') : _environment.default.benomad.site;\n      this.set('center', _environment.default.tomtom.center);\n\n      if (Ember.isPresent(site) && !_environment.default.APP.test) {\n        this.set('site', site);\n        await this.getBoundingBox();\n      }\n    },\n\n    getMinCoord(boundingBox) {\n      let minCoord = boundingBox[0];\n      boundingBox.forEach(point => {\n        if (point[0] <= minCoord[0] && point[1] <= minCoord[1]) {\n          minCoord = point;\n        }\n      });\n      return minCoord;\n    },\n\n    getMaxCoord(boundingBox) {\n      let maxCoord = boundingBox[0];\n      boundingBox.forEach(point => {\n        if (point[0] >= maxCoord[0] && point[1] >= maxCoord[1]) {\n          maxCoord = point;\n        }\n      });\n      return maxCoord;\n    },\n\n    getBoundingBox() {\n      const session = this.get('session');\n      const site = encodeURIComponent(`${this.get('site')}`);\n      return this.get('ajax').request(`${iqMap.host}/site?filter=eq(name,'${site}')`, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(result => {\n        const dataAttributes = result.data[0].attributes;\n        const boundingBox = dataAttributes.boundingBox.coordinates[0];\n        const minCoord = this.getMinCoord(boundingBox);\n        const maxCoord = this.getMaxCoord(boundingBox);\n        const center = dataAttributes.center.coordinates[0][0];\n        this.set('center', {\n          lat: center[1],\n          lon: center[0]\n        });\n        this.set('bbox', `${minCoord[0].toFixed(2)},${minCoord[1].toFixed(2)},${maxCoord[0].toFixed(2)},${maxCoord[1].toFixed(2)}`);\n        this.set('boundingBox', boundingBox);\n        return;\n      }).catch(e => {\n        console.log(e); //eslint-disable-line no-console\n\n        throw e;\n      });\n    },\n\n    /**\n     * Create a Leaflet map (wrapped in `bemap.LeafletMap`) with the basemap of the\n     * configured map provider plus BeMap's default overlay layers (markers,\n     * polylines, ...). Use this instead of calling\n     * `new bemap.LeafletMap(...).defaultLayers()` directly so the tile provider\n     * is decided in one place.\n     *\n     *   - google / benomad / tomtom : BeNomad WMS background (unchanged behaviour)\n     *   - dds_map                   : DDS Seamless Maps vector tiles (MapLibre GL) only\n     *\n     * @param {string} mapElementId  DOM id of the map container\n     * @param {object} [options]     bemap.LeafletMap options (e.g. {zoom})\n     * @returns {bemap.LeafletMap}\n     */\n    createLeafletMap(mapElementId, options) {\n      const bemapMainCtx = this.get('bemapMainCtx');\n\n      if (!(0, _mapProvider.isDdsMapProvider)()) {\n        return new bemap.LeafletMap(bemapMainCtx, mapElementId, options).defaultLayers();\n      } // dds_map: skip the BeNomad WMS background layer, keep the overlay layers\n\n\n      const map = new bemap.LeafletMap(bemapMainCtx, mapElementId, options);\n      map.native.setMinZoom(DDS_MAP_MIN_ZOOM);\n      map.native.setMaxZoom(DDS_MAP_MAX_ZOOM);\n      map.defaultOverlayLayers();\n      this.addDdsMapBasemap(map);\n      return map;\n    },\n\n    /**\n     * Fetch a DDS Seamless Maps style (one map session) and add it to the map as\n     * a MapLibre GL layer in Leaflet's tile pane.\n     *\n     * dds_map uses DDS Seamless Maps only. MapLibre needs WebGL: when the\n     * browser has none (thin clients / VDI), or the style cannot be fetched,\n     * no basemap is shown (overlays still render) and the reason is logged.\n     *\n     * @param {bemap.LeafletMap} map\n     * @returns {Promise<L.Layer|null>} the GL layer, or null when unavailable\n     */\n    async addDdsMapBasemap(map) {\n      const MaplibreLayer = getSafeMaplibreGL();\n\n      if (!MaplibreLayer) {\n        return this.ddsMapBasemapUnavailable('maplibre-gl / leaflet-maplibre-gl not loaded');\n      }\n\n      if (!isWebGLSupported()) {\n        return this.ddsMapBasemapUnavailable('WebGL is not available in this browser');\n      }\n\n      let basemap;\n\n      try {\n        basemap = await (0, _ddsMap.fetchStyle)();\n      } catch (error) {\n        return this.ddsMapBasemapUnavailable(`style could not be loaded (${error.message})`);\n      }\n\n      const leafletMap = map.native; // the map may have been torn down while the style was loading\n\n      if (!leafletMap || !leafletMap._mapPane) return null;\n      const layer = new MaplibreLayer({\n        style: basemap.style,\n        attribution: basemap.attribution,\n        className: DDS_MAP_BASEMAP_CLASS,\n        minZoom: DDS_MAP_MIN_ZOOM,\n        maxZoom: DDS_MAP_MAX_ZOOM\n      });\n      layer.addTo(leafletMap); // GL init failed inside onAdd (SafeMaplibreGL swallowed it)\n\n      if (!layer.getMaplibreMap()) {\n        leafletMap.removeLayer(layer);\n        return this.ddsMapBasemapUnavailable('MapLibre GL could not initialize');\n      }\n\n      return layer;\n    },\n\n    // dds_map has no fallback basemap (DDS Seamless Maps only)\n    ddsMapBasemapUnavailable(reason) {\n      console.warn(`dds_map basemap unavailable (${reason}); no basemap shown`); // eslint-disable-line no-console\n\n      return null;\n    },\n\n    pushContext(mapContext) {\n      this.get('mapContexts').pushObject(mapContext);\n    },\n\n    popContext() {\n      return this.get('mapContexts').popObject();\n    },\n\n    removeContext(identifier) {\n      const mapContexts = this.get('mapContexts');\n      const mapContext = typeof identifier === 'string' ? mapContexts.findBy('id', identifier) : identifier;\n      return this.get('mapContexts').removeObject(mapContext);\n    },\n\n    // TODO: get rid of these and call them on the map-context directly\n    setLayerVisibility(layerId, isVisible) {\n      this.get('topMapContext').setLayerVisibility(layerId, isVisible);\n    },\n\n    setLayerOpacity(layerId, opacity) {\n      this.get('topMapContext').setLayerOpacity(layerId, opacity);\n    },\n\n    setLayerTypeVisibility(layerId, typeId, isVisible) {\n      this.get('topMapContext').setLayerTypeVisibility(layerId, typeId, isVisible);\n    },\n\n    setLayerLabelVisibility(layerId, labelId, isVisible) {\n      this.get('topMapContext').setLayerLabelVisibility(layerId, labelId, isVisible);\n    },\n\n    setLayerLabelFilterType(layerId, labelId, filterTypeId) {\n      this.get('topMapContext').setLayerLabelFilterType(layerId, labelId, filterTypeId);\n    },\n\n    setLayerLabelFilterValues(layerId, labelId, filterValues) {\n      this.get('topMapContext').setLayerLabelFilterValues(layerId, labelId, filterValues);\n    },\n\n    setLayerLabelsOrder(layerId, labelIds) {\n      this.get('topMapContext').setLayerLabelsOrder(layerId, labelIds);\n    },\n\n    setDisplayMapIconLabelAllTime(layerId, isDisplayMapIconLabel) {\n      this.get('topMapContext').setDisplayMapIconLabelAllTime(layerId, isDisplayMapIconLabel);\n    },\n\n    setDisplayMapLabelUpdated(layerId, mapLabelUpdated) {\n      this.get('topMapContext').setDisplayMapLabelUpdated(layerId, mapLabelUpdated);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/maximizer\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    router: Ember.inject.service('router'),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    dashboard: Ember.computed.alias('workspace.dashboard'),\n    maximizedWidget: null,\n    checkedItems: null,\n    activeQuickFilter: null,\n    isWidgetMinified: true,\n    isMapWidgetMaximized: Ember.computed.equal('maximizedWidget.typeId', 'map'),\n\n    maximize(widget, activeQuickFilter) {\n      this.set('isWidgetMinified', false);\n      this.set('maximizedWidget', widget);\n      this.set('checkedItems', this.get('activeContext.checkedItems'));\n      this.set('activeQuickFilter', activeQuickFilter);\n      const workspace = this.get('workspace');\n      const topState = workspace.get('topState');\n\n      if (topState === 'filterColumnWidget') {\n        setTimeout(() => {\n          workspace.popState('filterColumnWidget');\n        }, 100);\n      }\n    },\n\n    maximizeMap(widget) {\n      this.set('isWidgetMinified', false);\n      this.set('maximizedWidget', widget);\n      this.set('checkedItems', this.get('activeContext.checkedItems'));\n      const workspace = this.get('workspace');\n      const topState = workspace.get('topState');\n\n      if (topState === 'filterColumnWidget') {\n        setTimeout(() => {\n          workspace.popState('filterColumnWidget');\n        }, 100);\n      }\n    },\n\n    minimize(activeQuickFilter) {\n      this.set('activeQuickFilter', activeQuickFilter);\n      this.set('isWidgetMinified', true);\n      this.set('maximizedWidget', null);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/media\", [\"exports\", \"ember-responsive/services/media\"], function (_exports, _media) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _media.default;\n  _exports.default = _default;\n});","define(\"adept-iq/services/modal-dialog\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function computedFromConfig(prop) {\n    return Ember.computed(function () {\n      return _environment.default['ember-modal-dialog'] && _environment.default['ember-modal-dialog'][prop];\n    });\n  }\n\n  var _default = Ember.Service.extend({\n    hasEmberTether: computedFromConfig('hasEmberTether'),\n    hasLiquidWormhole: computedFromConfig('hasLiquidWormhole'),\n    hasLiquidTether: computedFromConfig('hasLiquidTether'),\n    destinationElementId: null // injected by initializer\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/modal\", [\"exports\", \"ember-modal-service/services/modal\"], function (_exports, _modal) {\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 _modal.default;\n    }\n  });\n});","define(\"adept-iq/services/moment\", [\"exports\", \"ember-moment/services/moment\", \"adept-iq/config/environment\"], function (_exports, _moment, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    get\n  } = Ember;\n\n  var _default = _moment.default.extend({\n    defaultFormat: get(_environment.default, 'moment.outputFormat')\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/notification-initiation\", [\"exports\", \"adept-iq/config/api-urls\", \"lodash\"], function (_exports, _apiUrls, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async getResponsesByTag(notificationType, tag) {\n      try {\n        const response = await this.get('ajax').request(_apiUrls.API.initiationService.host + `/notification-response?notificationType=${notificationType}&tag=${tag}`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        });\n        return _lodash.default.get(response, 'data.attributes.sourceIds', {});\n      } catch {\n        return [];\n      }\n    },\n\n    async getAllNotificationSchedules(scheduleId) {\n      try {\n        const response = await this.get('ajax').request(_apiUrls.API.initiationService.host + `/notification-schedule?scheduleId=${scheduleId}`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        });\n        return _lodash.default.get(response, 'data', {});\n      } catch {\n        return [];\n      }\n    },\n\n    async getSingleNotificationScheduleDetails(nsId) {\n      try {\n        const response = await this.get('ajax').request(_apiUrls.API.initiationService.host + `/notification-schedule/${nsId}?include=initiatedNotifications,initiatedNotifications.notificationResponses`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        });\n        return _lodash.default.get(response, 'data', {});\n      } catch {\n        return [];\n      }\n    },\n\n    async createNotificationSchedule(type, requestTime, notificationType, riderIds, scheduleId, message, riderMeta) {\n      const json = {\n        data: {\n          type: 'notificationSchedule',\n          attributes: {\n            requestTime,\n            type,\n            payload: {\n              notificationType,\n              riderIds,\n              scheduleId,\n              message,\n              riderMeta\n            }\n          }\n        }\n      };\n\n      try {\n        const response = await this.get('ajax').request(_apiUrls.API.initiationService.host + '/notification-schedule', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          },\n          data: json\n        });\n        return _lodash.default.get(response, 'data', {});\n      } catch (e) {\n        throw e;\n      }\n    },\n\n    async retryNotificationSchedule(nsid) {\n      try {\n        const response = await this.get('ajax').request(_apiUrls.API.initiationService.host + `/notification-schedule/${nsid}/retry`, {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        });\n        return _lodash.default.get(response, 'data', {});\n      } catch (e) {\n        throw e;\n      }\n    },\n\n    async cancelNotificationSchedule(nsid) {\n      const json = {\n        data: {\n          type: 'notificationSchedule',\n          id: `${nsid}`,\n          attributes: {\n            status: 'canceled'\n          }\n        }\n      };\n\n      try {\n        const response = await this.get('ajax').request(_apiUrls.API.initiationService.host + `/notification-schedule/${nsid}`, {\n          method: 'PATCH',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          },\n          data: json\n        });\n        return _lodash.default.get(response, 'data', {});\n      } catch (e) {\n        throw e;\n      }\n    },\n\n    async deleteNotificationSchedule(nsid) {\n      try {\n        await this.get('ajax').request(_apiUrls.API.initiationService.host + `/notification-schedule/${nsid}`, {\n          method: 'DELETE',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        });\n        return;\n      } catch (e) {\n        return e;\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/notifications\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/config/environment\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _emberConcurrency, _moment, _environment, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const configOptions = {\n    informational: {},\n    warning: {},\n    success: {},\n    error: {},\n    // deprecated\n    emergency: {},\n    emergencyRedisplay: 60000\n  };\n\n  var _default = Ember.Service.extend({\n    flashMessages: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    session: Ember.inject.service(),\n    // temporarily disable use of ember-hifi to address NYAAR-14183\n    //hifi: service(),\n    user: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    audioAlert: Ember.inject.service(),\n    loggedRoadSuperVisorVehicle: null,\n    topFlashMessage: Ember.computed('flashMessages.queue.[]', function () {\n      return this.get('flashMessages').peekFirst();\n    }),\n\n    monitorEmergency(alert) {\n      const message = this.generateEmergencyMessage(alert, true);\n      this.emergency(message, {}, alert);\n      this.get('audioAlert').playAlert();\n      alert.set('emergencyActive', true);\n    },\n\n    generateEmergencyMessage(alert, flag) {\n      let message = ''; // The values are now directly taken from alert-widget - Ashraf\n\n      const self = this;\n      const workspace = self.get('workspace');\n      const isDispatchWorkspace = workspace.get('isDispatchDashboard');\n      const vehicleName = alert.get('vehicleName');\n      const driverName = alert.get('driverName');\n      const routeName = alert.get('routeName');\n      const isRoadSupEnable = this.user.isRoadSupEnable();\n\n      if (flag && isDispatchWorkspace) {\n        if (routeName && vehicleName && driverName) {\n          message = `Emergency message received from Driver ${driverName} on route ${routeName} in Vehicle ${vehicleName}`;\n        } else if (vehicleName && driverName) {\n          message = `Emergency message received from Driver ${driverName} in Vehicle ${vehicleName}`;\n        } else if (vehicleName) {\n          message = `Emergency message received from Vehicle ${vehicleName}`;\n        } else if (driverName) {\n          message = `Emergency message received from Driver ${driverName}`;\n        } else if (routeName) {\n          message = `Emergency message received on Route ${routeName} in Vehicle ${vehicleName}`;\n        } else {\n          message = 'Emergency message received';\n        }\n      } else if (isRoadSupEnable) {\n        message = 'NEW MESSAGE FROM DISPATCH';\n      }\n\n      return message;\n    },\n\n    monitorForEmergencyTask: (0, _emberConcurrency.task)(function* () {\n      const isReconcileDashboard = this.get('workspace.isReconcileDashboard');\n      if (isReconcileDashboard) return;\n      const structuredWorkspace = this.get('workspaceContext._structuredWorkspace');\n\n      if (!structuredWorkspace || !structuredWorkspace['avlm-alert']) {\n        yield (0, _emberConcurrency.timeout)(configOptions.emergencyRedisplay);\n        return this.monitorForEmergencyTask.perform();\n      }\n\n      const alerts = structuredWorkspace['avlm-alert'];\n      alerts.forEach(alert => {\n        if (!alert.emergencyActive && alert.category === 'emergency' && alert.state === 'active' && (0, _moment.default)().unix() - alert.timestamp.getTime() / 1000 < 60 && alert.isNewEmergencyReceived && !alert.emergency.get('isCanceled') && !alert.emergency.get('isAcknowledged') && !alert.emergency.get('isResolved') && !alert.emergency.get('isAcknowledgedPending')) {\n          const message = this.generateEmergencyMessage(alert, true);\n          this.emergency(message, {}, alert);\n          alert.set('emergencyActive', true);\n          const emergencyRecords = this.get('store').peekAll('avlm-alert');\n          emergencyRecords.forEach(rec => {\n            rec.set('isNewEmergencyReceived', false);\n          });\n        } else if (!alert.emergencyActive && alert.category === 'emergency' && alert.state === 'active' && (0, _moment.default)().unix() - alert.timestamp.getTime() / 1000 > 60 && !alert.emergency.get('isAcknowledged') && alert.emergency.get('isEmergency')) {\n          this.monitorEmergency(alert);\n        }\n      });\n      yield (0, _emberConcurrency.timeout)(configOptions.emergencyRedisplay);\n      return this.monitorForEmergencyTask.perform();\n    }),\n    monitorForMessageTask: (0, _emberConcurrency.task)(function* () {\n      const structuredWorkspace = this.get('workspaceContext._structuredWorkspace');\n\n      if (!structuredWorkspace || !structuredWorkspace['avlm-canned-message']) {\n        yield (0, _emberConcurrency.timeout)(15000);\n        return this.monitorForMessageTask.perform();\n      }\n\n      const bannerMessage = structuredWorkspace['avlm-canned-message'];\n\n      if (localStorage.getItem('dashboard-info')) {\n        const dashboardInfo = localStorage.getItem('dashboard-info');\n        const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n        if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n          const accessDataObj = parsedDashboardInfo.accessData;\n          this.loggedRoadSuperVisorVehicle = accessDataObj.vehicleId;\n        }\n      }\n\n      bannerMessage.forEach(bannerMessages => {\n        const vehicle = _environment.default.APP.avlmLite ? (0, _unwrapProxy.unwrapProxy)(bannerMessages.avlmVehicle) : (0, _unwrapProxy.unwrapProxy)(bannerMessages.vehicle);\n\n        if (vehicle && vehicle.id === this.loggedRoadSuperVisorVehicle && (0, _moment.default)().format('x') / 1000 - bannerMessages.deliveredTime.getTime() / 1000 < 60 && bannerMessages.isNewMessageReceived && bannerMessages.isRecieved) {\n          const message = this.generateEmergencyMessage(bannerMessages, false);\n          this.info(message, {}, bannerMessages);\n          bannerMessages.set('messageActive', true);\n          const records = this.get('store').peekAll('avlm-canned-message');\n          records.forEach(rec => {\n            rec.set('isNewMessageReceived', false);\n          });\n        }\n      });\n      yield (0, _emberConcurrency.timeout)(15000);\n      return this.monitorForMessageTask.perform();\n    }),\n\n    setup() {\n      const isRoadSupEnable = this.user.isRoadSupEnable(); // Currently this is called by the dashboard route to fetch configuration\n      // and start monitoring for emergencies\n      // Setup config for notification timeouts. Config exists for background and font\n      // color as well, but these are being deprecated\n\n      this.store.query('cs-config-item', {\n        category: 'config-Notification_Banners'\n      }).then(configs => {\n        // Setup config for notification timeouts by type\n        configs.filterBy('name', 'timeout_seconds').forEach(config => {\n          const categoryName = config.get('configCategory.name').toLowerCase();\n          let value = config.get('value');\n\n          if (config.get('type') === 'Int') {\n            value = parseInt(value, 10) * 1000; // convert to milliseconds\n\n            configOptions[categoryName].timeout = value;\n          }\n        }); // Setup config for emergency redisplay timeout\n\n        const emergencyRedisplayConfig = configs.find(item => {\n          return item.get('configCategory.name') === 'Emergency' && item.get('name') === 're_display_seconds';\n        });\n\n        if (emergencyRedisplayConfig && emergencyRedisplayConfig.get('type') === 'Int') {\n          let value = emergencyRedisplayConfig.get('value');\n          value = parseInt(value, 10) * 1000; // convert to milliseconds\n\n          configOptions.emergencyRedisplay = value;\n        }\n      }); // Start a task that runs at a set interval to check for emergency alerts\n\n      if (!isRoadSupEnable) {\n        this.monitorForEmergencyTask.perform();\n      }\n\n      this.monitorForMessageTask.perform();\n    },\n\n    // Emergency messages are generated by the system where user action is required\n    emergency(message) {\n      let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      let alert = arguments.length > 2 ? arguments[2] : undefined;\n      // Combine options passed in with those set by the config service\n      const options = Ember.assign(configOptions.emergency, opts, {\n        onDestroy() {\n          if (alert) alert.set('emergencyActive', false);\n        }\n\n      }); // The emergency banner should only pop up in the Dispatch workspace.\n\n      if (this.get('workspace.isDispatchDashboard')) {\n        this.get('flashMessages').emergency(message, options);\n      }\n    },\n\n    // Warning messages are used for providing feedback to a user when an explicit\n    // action they take fails, ie. assigning a driver results in a 400 error\n    warning(message) {\n      let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      // Combine options passed in with those set by the config service\n      const options = Ember.assign(configOptions.warning, opts);\n      this.get('flashMessages').warning(message, options);\n    },\n\n    info(message) {\n      let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      let alert = arguments.length > 2 ? arguments[2] : undefined;\n      //const isRoadSupEnable = this.user.isRoadSupEnable();\n      // Combine options passed in with those set by the config service\n      const options = Ember.assign(configOptions.informational, opts, {\n        onDestroy() {\n          if (alert) alert.set('messageActive', false);\n        }\n\n      });\n      this.get('flashMessages').info(message, options); // if (isRoadSupEnable) {\n      //   const oggSource = '/notification_sound.mp3';\n      //   this.get('hifi').play(oggSource).then(({sound}) => {\n      //     sound.play(oggSource, {volume: 10});\n      //   }).catch(error => {\n      //     // eslint-disable-next-line no-console\n      //     console.log('error', error);\n      //   });\n      // }\n    },\n\n    // Success messages are used for providing feedback to a user when they take\n    // an explicit action and it is successful\n    success(message) {\n      let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      // Combine options passed in with those set by the config service\n      const options = Ember.assign(configOptions.success, opts);\n      this.get('flashMessages').success(message, options);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/permission-layer\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    permissions: null,\n    categories: null,\n    userPermissionHash: null,\n\n    async getPermissions() {\n      const store = this.get('store');\n      let permissions = store.peekAll('sso-permission');\n\n      if (permissions.length === 0) {\n        try {\n          permissions = await store.findAll('sso-permission');\n        } catch (e) {\n          console.error(e); //eslint-disable-line\n        }\n      }\n\n      this.set('permissions', permissions);\n      const userPerms = this.get('session.data.authenticated.permissions');\n      this.configureUserHash(userPerms);\n    },\n\n    permInUserHash(permId, permIds) {\n      let permGranted = false;\n      const userPermHash = this.get('userPermissionHash');\n\n      if (userPermHash) {\n        if (Ember.isBlank(permId) && permIds) {\n          permGranted = permIds.some(id => userPermHash[id]);\n        } else if (Ember.isArray(permId)) {\n          permGranted = permId.reduce((granted, eachPermId) => {\n            return granted || userPermHash[eachPermId];\n          }, false);\n        } else permGranted = userPermHash[permId];\n      }\n\n      return permGranted;\n    },\n\n    configureUserHash(permissions) {\n      // need to think of a better way to index the perm hash\n      const permIds = Array.from(Array(250).keys());\n      const hash = permissions.reduce((acu, perm) => {\n        if (permIds) {\n          if (permIds.includes(perm)) acu[perm] = true;\n        } else {\n          acu[perm] = false;\n        }\n\n        return acu;\n      }, {});\n      this.set('userPermissionHash', hash);\n    },\n\n    permissionsTotal(category) {\n      const permissions = this.get('permissions');\n      return permissions.filter(p => p.get('category') === category).length;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/poll\", [\"exports\", \"ember-poll/services/poll\"], function (_exports, _poll) {\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 _poll.default;\n    }\n  });\n});","define(\"adept-iq/services/polyline\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/api-urls\", \"@mapbox/polyline\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _emberConcurrency, _apiUrls, _polyline, _asyncScheduleOperation, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const MAX_CONCURRENCY = 2;\n\n  var _default = Ember.Service.extend(_asyncScheduleOperation.default, {\n    ajax: Ember.inject.service(),\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n\n    async getPerformedPolyline(routeId) {\n      const session = this.get('session');\n      return await this.get('ajax').request(_apiUrls.API.avlmService.host + '/performed-polyline?routeId=' + routeId, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(response => {\n        return response.data;\n      });\n    },\n\n    fetchPerformedPolyline: (0, _emberConcurrency.task)(function* (routeId, dispatchRouteId) {\n      const store = this.get('store');\n      let stopPoints = [];\n      yield this.getPerformedPolyline(routeId).then(response => {\n        stopPoints = response;\n      });\n      if (Ember.isEmpty(stopPoints)) return [];\n      const coords = stopPoints.reduce((arr, stopPoint) => {\n        const points = stopPoint.polylineArray;\n        if (Ember.isEmpty(points)) return arr;\n        const perturbedPoints = [points.lat, points.lng]; // should flatten to single line\n\n        arr.push(perturbedPoints);\n        return arr;\n      }, []);\n      const payload = {\n        data: {\n          id: `polyline-${routeId}`,\n          type: 'polyline',\n          attributes: {\n            coords\n          }\n        },\n        included: [{\n          id: dispatchRouteId,\n          type: 'dispatch-route',\n          relationships: {\n            performedPolyline: {\n              data: {\n                id: `polyline-${routeId}`,\n                type: 'polyline'\n              }\n            }\n          }\n        }]\n      };\n      store.push(payload);\n    }).enqueue().maxConcurrency(MAX_CONCURRENCY),\n\n    getScheduledPolyline(id) {\n      const session = this.get('session');\n      return this.get('ajax').request(_apiUrls.API.schedulingService.host + `/route/${id}?refreshPolyline= true`, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).then(response => {\n        return JSON.parse(response.results);\n      });\n    },\n\n    deserialize(serialized) {\n      if (Ember.isEmpty(serialized)) return [];\n      return _polyline.default.decode(serialized);\n    },\n\n    fetchScheduledPolyline: (0, _emberConcurrency.task)(function* (route) {\n      const store = this.get('store');\n      const routeId = route.get('id');\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      let points;\n\n      if (isScheduleDashboard) {\n        const scheduleRoute = (0, _unwrapProxy.unwrapProxy)(route);\n        points = yield this.fetchRoutePolyLineTask.perform(scheduleRoute);\n      } else {\n        const dispatchRoute = (0, _unwrapProxy.unwrapProxy)(route.get('route'));\n        points = yield this.fetchRoutePolyLineTask.perform(dispatchRoute);\n      }\n\n      let coords = this.deserialize(points); // regarding this bug (NYAAR-14584)\n      // removing zero lat and long pairs from cords [0,0]\n\n      coords = coords.reduce((acc, cord) => {\n        const xCord = cord[0];\n        const yCord = cord[1];\n\n        if (xCord !== 0 && yCord !== 0) {\n          acc.push(cord);\n        }\n\n        return acc;\n      }, []);\n      const payload = {\n        data: {\n          id: `schedule-${routeId}`,\n          type: 'schedule-polyline',\n          attributes: {\n            coords\n          }\n        },\n        included: [{\n          id: routeId,\n          type: route._internalModel.modelName,\n          relationships: {\n            scheduledPolyline: {\n              data: {\n                id: `schedule-${routeId}`,\n                type: 'schedule-polyline'\n              }\n            }\n          }\n        }]\n      };\n      store.push(payload);\n    }).enqueue().maxConcurrency(MAX_CONCURRENCY),\n    fetchRoutePolyLineTask: (0, _emberConcurrency.task)(function* (route) {\n      if (Ember.isEmpty(route)) return [];\n      const schedule = route.get('schedule') || route.get('dispatchSchedule.schedule');\n      const routeId = route.get('id');\n      let plannedPolyline;\n\n      try {\n        const operationData = {\n          routeId\n        };\n        const options = {\n          operationData,\n          outputResult: true\n        };\n        const {\n          isJobSuccess,\n          results\n        } = yield this.createScheduleAsyncOperation.perform(schedule, 'routePolyline', options);\n\n        if (isJobSuccess) {\n          const parsedResults = JSON.parse(results);\n          plannedPolyline = parsedResults.plannedPolyline;\n        } else {\n          const parsedResults = results.substring(results.indexOf('{'), results.lastIndexOf('}') + 1);\n          const resultObject = JSON.parse(parsedResults);\n          this.get('notifications').warning(`UNABLE TO DISPLAY ROUTE ON MAP. CONTACT ADMINISTRATOR. ERROR CODE ${resultObject.statusCode}.`);\n        }\n      } catch (e) {\n        this.get('notifications').warning('UNABLE TO DISPLAY ROUTE ON MAP. CONTACT ADMINISTRATOR.');\n\n        if (!(0, _emberConcurrency.didCancel)(e)) {\n          throw e;\n        }\n      }\n\n      return Promise.resolve(plannedPolyline);\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/power-calendar\", [\"exports\", \"ember-power-calendar/services/power-calendar\"], function (_exports, _powerCalendar) {\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 _powerCalendar.default;\n    }\n  });\n});","define(\"adept-iq/services/reconcile-lambda\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/config/api-urls\"], function (_exports, _emberConcurrency, _moment, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DELAY = 2000;\n  const NUM_TRIES = 8;\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    session: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    reconcile: Ember.inject.service(),\n    apiHost: _apiUrls.API.ReconciliationNewService.host,\n    getRouteVehicleDriversByTripDate: (0, _emberConcurrency.task)(function* () {\n      const reconcileRVDResponse = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let apiUrl = `${this.get('apiHost')}/route-vehicle-driver?`;\n        apiUrl = this.buildUrlWithStartAndEndDate(apiUrl);\n        return yield this.lambdaAsyncOperation.perform(apiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route-vehicle-driver');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return reconcileRVDResponse;\n    }),\n    getReconcileRouteById: (0, _emberConcurrency.task)(function* (routeId) {\n      let routePayload = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let apiUrl = `${this.get('apiHost')}/route?routeId=${routeId}&`;\n        apiUrl = this.buildUrlWithStartAndEndDate(apiUrl);\n        routePayload = yield this.lambdaAsyncOperation.perform(apiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return routePayload;\n    }),\n    getReconcileTripsByRouteId: (0, _emberConcurrency.task)(function* (routeId) {\n      let reconcileTripsResponse = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let apiUrl = `${this.get('apiHost')}/trip?routeId=${routeId}&`;\n        apiUrl = this.buildUrlWithStartAndEndDate(apiUrl);\n        reconcileTripsResponse = yield this.lambdaAsyncOperation.perform(apiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'trips info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return reconcileTripsResponse;\n    }),\n    getReconcileRoutesAndTripsInfoByVehicleId: (0, _emberConcurrency.task)(function* (type, vehicleId) {\n      let reconcileVehicleResponse = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let vehicleApiUrl = `${this.get('apiHost')}/search?type=${type}&vehicleId=${vehicleId}&`;\n        vehicleApiUrl = this.buildUrlWithStartAndEndDate(vehicleApiUrl);\n        reconcileVehicleResponse = yield this.lambdaAsyncOperation.perform(vehicleApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return reconcileVehicleResponse;\n    }),\n    getReconcileRoutesAndTripsInfoByDriverId: (0, _emberConcurrency.task)(function* (type, driverId) {\n      let routeAndTripPayload = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let driverApiUrl = `${this.get('apiHost')}/search?type=${type}&driverId=${driverId}&`;\n        driverApiUrl = this.buildUrlWithStartAndEndDate(driverApiUrl);\n        routeAndTripPayload = yield this.lambdaAsyncOperation.perform(driverApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return routeAndTripPayload;\n    }),\n    getReconcileRoutesAndTripsInfoByTripId: (0, _emberConcurrency.task)(function* (type, tripId) {\n      let routeAndTripPayload = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let tripApiUrl = `${this.get('apiHost')}/search?type=${type}&tripId=${tripId}&`;\n        tripApiUrl = this.buildUrlWithStartAndEndDate(tripApiUrl);\n        routeAndTripPayload = yield this.lambdaAsyncOperation.perform(tripApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return routeAndTripPayload;\n    }),\n    getReconcileRoutesAndTripsInfoByClientId: (0, _emberConcurrency.task)(function* (type, queryParams) {\n      let routeAndTripPayload = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let clientApiUrl = `${this.get('apiHost')}/search?type=${type}&searchFor=client&`;\n        Object.entries(queryParams).forEach(_ref => {\n          let [cfk, cfv] = _ref;\n          clientApiUrl = clientApiUrl + `${cfk}=${cfv}&`;\n        });\n        clientApiUrl = this.buildUrlWithStartAndEndDate(clientApiUrl);\n        routeAndTripPayload = yield this.lambdaAsyncOperation.perform(clientApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return routeAndTripPayload;\n    }),\n    getReconcileTripsInfoByClientId: (0, _emberConcurrency.task)(function* (type, clientId) {\n      let routeAndTripPayload = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let tripByClientIdApiUrl = `${this.get('apiHost')}/search?type=${type}&searchFor=trip&clientId=${clientId}&`;\n        tripByClientIdApiUrl = this.buildUrlWithStartAndEndDate(tripByClientIdApiUrl);\n        routeAndTripPayload = yield this.lambdaAsyncOperation.perform(tripByClientIdApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return routeAndTripPayload;\n    }),\n    getReconcileRoutesAndTripsInfoByAddress: (0, _emberConcurrency.task)(function* (type, address) {\n      let routeAndTripPayload = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        let addressApiUrl = `${this.get('apiHost')}/search?type=${type}&address=${address}&`;\n        addressApiUrl = this.buildUrlWithStartAndEndDate(addressApiUrl);\n        routeAndTripPayload = yield this.lambdaAsyncOperation.perform(addressApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'route info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return routeAndTripPayload;\n    }),\n    getDataFromConfig: (0, _emberConcurrency.task)(function* (category) {\n      let configResponse = null;\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const configApiUrl = `${this.get('apiHost')}/config?category=${category}&`;\n        configResponse = yield this.lambdaAsyncOperation.perform(configApiUrl);\n      } catch (e) {\n        this.showErrorWarning(e, 'config info');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n\n      return configResponse;\n    }),\n    validateRouteBeforeDeleting: (0, _emberConcurrency.task)(function* (routeId, type) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n\n      try {\n        const validateRouteApiUrl = `${this.get('apiHost')}/route/${routeId}?type=${type}`;\n        const response = yield this.ValidateRouteAsyncOperation.perform(validateRouteApiUrl);\n        return response;\n      } catch (e) {\n        this.showErrorWarning(e, 'route validated');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    }),\n    ValidateRouteAsyncOperation: (0, _emberConcurrency.task)(function* (reconcileLamdaAPI) {\n      const session = this.get('session');\n      const payload = this.buildPayloadWithStartAndEndDate();\n\n      try {\n        const response = yield this.get('ajax').patch(reconcileLamdaAPI, {\n          method: 'PATCH',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          },\n          data: payload\n        });\n        if (!response) return false;\n        return yield this.get('validateRouteLambdaAsyncOperationState').perform(response, payload, reconcileLamdaAPI);\n      } catch (e) {\n        throw e;\n      }\n    }).enqueue(),\n    validateRouteLambdaAsyncOperationState: (0, _emberConcurrency.task)(function* (response, payload, reconcileLamdaAPI) {\n      const session = this.get('session');\n      let times = 0;\n\n      while (response && response.data && response.data.length && response.data[0].QueryExecutionId && times++ <= NUM_TRIES) {\n        yield (0, _emberConcurrency.timeout)(DELAY);\n\n        if (!payload.queryExecutionId) {\n          payload.queryExecutionId = response.data[0].QueryExecutionId;\n        }\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          response = yield this.get('ajax').request(reconcileLamdaAPI, {\n            method: 'PATCH',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: payload\n          });\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      return response.data;\n    }).drop(),\n    lambdaAsyncOperation: (0, _emberConcurrency.task)(function* (reconcileLamdaAPI) {\n      const session = this.get('session');\n\n      try {\n        const response = yield this.get('ajax').request(reconcileLamdaAPI, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n        if (!response) return false;\n        return yield this.get('lambdaAsyncOperationState').perform(response, reconcileLamdaAPI);\n      } catch (e) {\n        throw e;\n      }\n    }).enqueue(),\n    lambdaAsyncOperationState: (0, _emberConcurrency.task)(function* (response, reconcileLamdaAPI) {\n      const session = this.get('session');\n      let times = 0;\n\n      while (response && response.data && response.data.length && response.data[0].QueryExecutionId && times++ <= NUM_TRIES) {\n        yield (0, _emberConcurrency.timeout)(DELAY);\n        const reconcileLamdaQueryExecutionIdAPI = reconcileLamdaAPI.includes('queryExecutionId') ? reconcileLamdaAPI : reconcileLamdaAPI + `&queryExecutionId=${response.data[0].QueryExecutionId}`;\n\n        try {\n          // eslint-disable-next-line no-param-reassign\n          response = yield this.get('ajax').request(reconcileLamdaQueryExecutionIdAPI, {\n            method: 'GET',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            }\n          });\n        } catch (e) {\n          throw e;\n        }\n      }\n\n      return response.data;\n    }).drop(),\n\n    /* As discussed with backend team , we send an API call to get route and trip Info when we send a request for getting route-vehicle-driver to load the data in Mongo Db. So when we need to get the route info and trip info then the data can be retrieved from the Monge Db instead of S3 which improves the performance.\n     * @params Start time, End time, Timezone\n     * return { void }\n     */\n    loadReconcileRoutesInMongoDb: (0, _emberConcurrency.task)(function* () {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        let apiUrl = `${this.get('apiHost')}/route?`;\n        apiUrl = this.buildUrlWithStartAndEndDate(apiUrl);\n        const routeResponse = yield this.get('ajax').request(apiUrl, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n        return routeResponse;\n      } catch (e) {\n        this.showErrorWarning(e, 'routes');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    }),\n    loadReconcileTripsInMongoDb: (0, _emberConcurrency.task)(function* () {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        let apiUrl = `${this.get('apiHost')}/trip?`;\n        apiUrl = this.buildUrlWithStartAndEndDate(apiUrl);\n        return yield this.get('ajax').request(apiUrl, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n      } catch (e) {\n        this.showErrorWarning(e, 'trips');\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    }),\n\n    // create buildUrlWithStartAndEndDate method to avoid duplication of startDate, endDate, timezone\n    buildUrlWithStartAndEndDate(url) {\n      const selectedDate = this.get('reconcile.reconcileDate');\n      const startDate = (0, _moment.default)(selectedDate).add(0, 'days').startOf('day').toISOString();\n      const endDate = (0, _moment.default)(selectedDate).add(0, 'days').endOf('day').toISOString();\n\n      const timezone = _moment.default.tz.guess();\n\n      return url + `startdate=${startDate}&timezone=${timezone}&enddate=${endDate}`;\n    },\n\n    buildPayloadWithStartAndEndDate() {\n      const selectedDate = this.get('reconcile.reconcileDate');\n      const startDate = (0, _moment.default)(selectedDate).add(0, 'days').startOf('day').toISOString();\n      const endDate = (0, _moment.default)(selectedDate).add(1, 'days').endOf('day').toISOString();\n\n      const timezone = _moment.default.tz.guess();\n\n      return {\n        'startdate': startDate,\n        'timezone': timezone,\n        'enddate': endDate\n      };\n    },\n\n    showErrorWarning(e, reconDet) {\n      let message;\n\n      switch (e.status) {\n        case 400:\n          message = 'There was a problem with one of the fields. Please check over and try again.';\n          break;\n\n        default:\n          message = `There was a problem in getting reconcile ${reconDet}, please try again.`;\n          break;\n      }\n\n      this.get('notifications').warning(message);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/reconcile\", [\"exports\", \"lodash\", \"adept-iq/config/api-urls\"], function (_exports, _lodash, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    reconcileLambda: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    host: _apiUrls.API.ReconciliationNewService.host,\n    reconcileTripDetails: null,\n    reconcileSelectedRouteId: null,\n    reconcileSelectedRoute: null,\n    reconcileRouteMap: null,\n    reconcileStopPointMap: null,\n    reconcileVehicle: null,\n    reconcileDriver: null,\n    reconcileDate: null,\n    lastRowClickedInTripTable: null,\n    reconcileMode: null,\n    selectedSearchRoute: null,\n    reconcileProviderName: null,\n    reconcileSelectedTripId: null,\n    selectedSearchedTrip: null,\n    reconcileRouteInfo: null,\n    selectedTripRow: null,\n    showSearchPopUp: false,\n    reconcileTaxiData: null,\n    isRouteUpdated: false,\n    isLoading: false,\n    reconcileRVDResponse: null,\n    routeResponseFromTripDate: null,\n    verifyRouteErrors: false,\n    closePopupHandler: null,\n    verifyRouteIsChecked: false,\n    serviceModeTaxiType: 'Taxi',\n    routeOptionEnabled: Ember.computed.empty('reconcile.selectedProvider'),\n    isDeletedRoute: Ember.computed.alias('reconcileRouteDetails.isDeleted'),\n    isCompletedRoute: Ember.computed.alias('reconcileRouteDetails.isCompleted'),\n    reconcilePassenger: Ember.computed.alias('reconcileTrip.passenger'),\n    reconcileDrivers: Ember.computed('reconcileRVDResponse', 'reconcileRouteInfo', function () {\n      const rvdResponse = this.get('reconcileRVDResponse') || [];\n      const reconcileRouteInfo = this.get('reconcileRouteInfo') || [];\n      const driverOptions = rvdResponse.filter(rvd => {\n        return rvd.driver && rvd.driver.id !== reconcileRouteInfo.driver.id;\n      }).map(driver => {\n        return driver.driver;\n      });\n      return driverOptions;\n    }),\n    reconcileVehicles: Ember.computed('reconcileRVDResponse', 'reconcileRouteInfo', function () {\n      const rvdResponse = this.get('reconcileRVDResponse') || [];\n      const reconcileRouteInfo = this.get('reconcileRouteInfo') || [];\n      const vehicleOptions = rvdResponse.filter(rvd => {\n        return rvd.vehicle && rvd.vehicle.id !== reconcileRouteInfo.vehicle.id;\n      }).map(vehicle => {\n        return vehicle.vehicle;\n      });\n      return vehicleOptions;\n    }),\n    reconcileDriverOptions: Ember.computed('reconcileProviderName', function () {\n      const rvdResponse = this.get('reconcileRVDResponse') || [];\n      const providerName = this.get('reconcileProviderName');\n      const driverOptions = rvdResponse.filter(rvd => {\n        return rvd.vehicle && rvd.vehicle && rvd.vehicle.providername === providerName;\n      }).map(vehicle => {\n        return vehicle.driver;\n      });\n      return driverOptions;\n    }),\n    reconcileVehicleOptions: Ember.computed('reconcileProviderName', function () {\n      const rvdResponse = this.get('reconcileRVDResponse') || [];\n      const providerName = this.get('reconcileProviderName');\n      const vehicleOptions = rvdResponse.filter(rvd => {\n        return rvd.vehicle && rvd.vehicle.providername === providerName;\n      }).map(vehicle => {\n        return vehicle.vehicle;\n      });\n      return vehicleOptions;\n    }),\n    reconcileLateTrips: Ember.computed('reconcileTripDetails', function () {\n      const stopList = Ember.get(this, 'reconcileTripDetails');\n      const pendingStatusTypes = ['scheduled', 's'];\n      const stopTypes = ['pickup', 'pick', 'p'];\n\n      if (!Ember.isEmpty(stopList)) {\n        const filteredData = stopList.filter(stop => !Ember.isEmpty(stop.tripId) && !Ember.isEmpty(stop.type) && stopTypes.includes(stop.type.toLowerCase()) && !Ember.isEmpty(stop.status) && pendingStatusTypes.includes(stop.status.toLowerCase()));\n        filteredData.map(data => {\n          data.otpCaption = parseInt(data.otpStatus, 10) === -1 ? 'Late' : 'Early';\n        });\n        return filteredData;\n      }\n\n      return [];\n    }),\n\n    async fetchReconcileTrips(routeId) {\n      const reconcileTripRes = await this.reconcileLambda.getReconcileTripsByRouteId.perform(routeId);\n\n      if (Ember.isPresent(reconcileTripRes)) {\n        this.set('reconcileTripDetails', reconcileTripRes);\n        const reconcileStopPointMap = (0, _lodash.groupBy)(reconcileTripRes.map(tripDetails => {\n          return {\n            tripId: tripDetails.tripId,\n            stopPointId: tripDetails.stopPointId,\n            lat: tripDetails.address ? tripDetails.address.latitude : '',\n            lng: tripDetails.address ? tripDetails.address.longitude : '',\n            type: tripDetails.type,\n            address: tripDetails.address,\n            trip: tripDetails\n          };\n        }), 'tripId');\n        this.set('reconcileStopPointMap', reconcileStopPointMap);\n      }\n    },\n\n    async fetchReconcileRouteInfo(routeId) {\n      const reconcileRouteRes = await this.reconcileLambda.getReconcileRouteById.perform(routeId);\n\n      if (Ember.isPresent(reconcileRouteRes)) {\n        this.set('reconcileRouteInfo', reconcileRouteRes[0]);\n        await this.fetchReconcileTrips(routeId);\n      }\n    },\n\n    getDriverOptions(rvdResponse, selectedOption) {\n      return rvdResponse.filter(rvDriver => rvDriver.driver && rvDriver.driver.badgenumber !== selectedOption.badgenumber).map(driver => driver.driver);\n    },\n\n    getVehicleOptions(rvdResponse, selectedOption) {\n      return rvdResponse.filter(rvVehicle => rvVehicle.vehicle && rvVehicle.vehicle.callsign !== selectedOption.callsign).map(vehicle => vehicle.vehicle);\n    },\n\n    resetProperties() {\n      Ember.set(this, 'updateRouteInformation', false);\n    },\n\n    closePopups() {\n      if (this.get('workspace.stackDepth')) {\n        this.get('workspace').popState();\n      }\n    },\n\n    //Building the Put Method API Call for Route Info\n    updateReconcileRouteInfo(routePayload) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        if (routePayload) {\n          return this.get('ajax').put(this.get('host') + '/route', {\n            method: 'PUT',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: routePayload\n          });\n        }\n      } catch (error) {\n        return error;\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    updateReconcileTripsInfo(tripPayload) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        if (tripPayload) {\n          return this.get('ajax').patch(this.get('host') + '/trip', {\n            method: 'PATCH',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: tripPayload\n          });\n        }\n      } catch (error) {\n        return error;\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    verifyRoute(routeId) {\n      const url = this.get('host') + '/verify-route?';\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      return new Promise(async (resolve, reject) => {\n        this.get('ajax').request(this.reconcileLambda.buildUrlWithStartAndEndDate(url) + `&routeId=${routeId}`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        }).then(res => {\n          resolve(res);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n        }).catch(err => {\n          reject(err);\n          this.get('workspace').set('isGlobalSpinnerVisible', false);\n        });\n      });\n    },\n\n    deleteReconcileRouteInfo(routePayload, type) {\n      const session = this.get('session');\n      return this.get('ajax').patch(this.get('host') + `/route?type=${type}`, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: routePayload\n      });\n    },\n\n    saveNewTrip(newTripPayload) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        if (newTripPayload) {\n          return this.get('ajax').post(this.get('host') + '/trip', {\n            method: 'POST',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: newTripPayload\n          });\n        }\n      } catch (error) {\n        return error;\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    saveNewReconcileRoute(newRoutePayload) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        if (newRoutePayload) {\n          return this.get('ajax').post(this.get('host') + '/route', {\n            method: 'POST',\n            contentType: 'application/json',\n            headers: {\n              Authorization: `Bearer ${session.data.authenticated.token}`\n            },\n            data: newRoutePayload\n          });\n        }\n      } catch (error) {\n        return error;\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    },\n\n    addRouteBreak(payload, type) {\n      const session = this.get('session');\n      return this.get('ajax').post(this.get('host') + `/${type}`, {\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${session.data.authenticated.token}`\n        },\n        data: payload\n      });\n    },\n\n    updateTripTransferToAnotherRoute(tripPayload) {\n      this.get('workspace').set('isGlobalSpinnerVisible', true);\n      const session = this.get('session');\n\n      try {\n        if (tripPayload) {\n          return this.get('ajax').put(this.get('host') + '/trip', {\n            method: 'PUT',\n            contentType: 'application/json',\n            headers: {\n              'Authorization': `Bearer ${session.data.authenticated.token}`\n            },\n            data: tripPayload\n          });\n        }\n      } catch (error) {\n        return error;\n      } finally {\n        this.get('workspace').set('isGlobalSpinnerVisible', false);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/report\", [\"exports\", \"adept-iq/config/api-urls\", \"lodash\", \"moment\", \"fetch\", \"adept-iq/config/mapped-permIds\"], function (_exports, _apiUrls, _lodash, _moment, _fetch, _mappedPermIds) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const REPORT_SERVICE_API = `${_apiUrls.API.reportService.host}`; //\"https://manage2.ddswireless.com/report-service\";\n\n  const REPORT_SERVER_BASE_URL = `${_apiUrls.API.reportService.baseURL}`; //'https://jasper.ddswireless.net/jasperserver-pro/flow.html';\n\n  const DATE_FORMAT = 'YYYY-MM-DD'; // 2021-05-01\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    session: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    async getQueryString() {\n      const appName = 'ADEPTIQ';\n      const companyName = `${_apiUrls.API.reportService.companyName}`;\n      const query = `appName=${appName}&companyName=${companyName}`;\n      return query;\n    },\n\n    async reportList() {\n      const store = this.get('store');\n      const activeData = store.peekAll('report-list');\n      const allReportList = await this.getAllReportList();\n\n      if (activeData.content.length === 0) {\n        if (!Ember.isEmpty(allReportList)) {\n          allReportList.forEach(item => {\n            let permGranted = false;\n            if (item.id === 'CLOSEOUT_REPORT') permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.accessCloseoutReport, null);else if (item.id === 'DEDUCT_REPORT') permGranted = this.get('permissionLayer').permInUserHash(_mappedPermIds.default.accessDeductReport, null);else {\n              store.pushPayload('report-list', {\n                data: {\n                  id: item.id,\n                  type: 'report-list',\n                  attributes: {\n                    name: item.name,\n                    description: item.summary,\n                    category: item.group.name\n                  }\n                }\n              });\n            }\n\n            if (permGranted) {\n              store.pushPayload('report-list', {\n                data: {\n                  id: item.id,\n                  type: 'report-list',\n                  attributes: {\n                    name: item.name,\n                    description: item.summary,\n                    category: item.group.name\n                  }\n                }\n              });\n            }\n          });\n        }\n      }\n\n      return allReportList;\n    },\n\n    async getAllReportList() {\n      const notifications = this.get('notifications');\n\n      if (REPORT_SERVICE_API === 'undefined') {\n        notifications.warning('Error related to undefined REPORT SERVICE API URL');\n        return [];\n      }\n\n      const query = await this.getQueryString();\n      const REPORT_LIST_API = `${REPORT_SERVICE_API}/report-list?${query}`;\n      return await (0, _fetch.default)(REPORT_LIST_API, {\n        headers: {\n          'Content-Type': 'application/json'\n        }\n      }).then(async response => {\n        if (response.status === 204 || response.status === 404) {\n          notifications.warning('Error related to the report service host url address');\n          return [];\n        }\n\n        const jsonResponse = await response.json();\n\n        if (!response.ok) {\n          notifications.warning('Error related to the report service host url address');\n          return [];\n        }\n\n        return jsonResponse;\n      }).then(async reports => {\n        return reports.map(report => {\n          return { ...report.attributes,\n            id: report.id\n          };\n        });\n      });\n    },\n\n    //Temp Fix : Code added to fetch timezone for adhoc reports\n    async getTimezoneInfo() {\n      try {\n        const reportList = await this.reportList();\n        let timezone;\n\n        if (reportList.length > 0 && reportList[0].uiParameters) {\n          timezone = reportList[0].uiParameters.userTimezone;\n        }\n\n        if (!timezone) {\n          throw new Error('Timezone is not provided in the report data');\n        }\n\n        return timezone;\n      } catch (error) {\n        throw new Error(`Error fetching report list: ${error.message}`);\n      }\n    },\n\n    async getAdhocViewUrl() {\n      const notifications = this.get('notifications');\n\n      if (REPORT_SERVER_BASE_URL === 'undefined') {\n        notifications.warning('Error: REPORT_SERVER_BASE_URL is undefined');\n        return null;\n      }\n\n      try {\n        const timezone = await this.getTimezoneInfo();\n        const ppToken = await this.getPPToken();\n        const parameters = {\n          _flowId: 'searchFlow',\n          standAlone: true.toString(),\n          theme: 'DDS',\n          userTimezone: timezone,\n          pp: ppToken\n        };\n        const urlSearchParams = (0, _lodash.map)(parameters, (value, key) => {\n          return `${key}=${value}`;\n        });\n        const queryString = (0, _lodash.join)(urlSearchParams, '&');\n        const adhocViewUrl = `${REPORT_SERVER_BASE_URL}?${queryString}`;\n        return adhocViewUrl;\n      } catch (error) {\n        notifications.error(`Failed to generate Ad-Hoc View : ${error.message}`);\n        return null;\n      }\n    },\n\n    async getUrl(model, runshedule) {\n      const {\n        parameters,\n        uiParameters\n      } = model;\n      const notifications = this.get('notifications');\n      const queryStr = await this.buildQueryStr(parameters, uiParameters);\n\n      if (REPORT_SERVER_BASE_URL === 'undefined') {\n        notifications.warning('Error related to undefined REPORT SERVER BASE URL');\n        return [];\n      }\n\n      let reportUrl = `${REPORT_SERVER_BASE_URL}?${queryStr}`;\n      reportUrl = reportUrl.replaceAll('flowId', '_flowId');\n      reportUrl = reportUrl.replaceAll('decorate=null', 'decorate=no');\n\n      if (runshedule) {\n        reportUrl = reportUrl.replaceAll('flow.html', 'scheduler/main.html');\n        reportUrl = reportUrl.replaceAll('reportUnit', 'reportUnitURI');\n      }\n\n      return reportUrl;\n    },\n\n    async buildQueryStr(parameters, uiParameters) {\n      const ppToken = await this.getPPToken();\n      const ppTokenParam = `pp=${ppToken}`; // take all uiparams except from and to\n\n      const uiparams = (0, _lodash.omit)(uiParameters, ['from', 'to']);\n      const allParameters = { ...parameters,\n        ...uiparams\n      };\n      const queryParamList = Object.keys(allParameters).map(param => {\n        const paramValue = allParameters[param];\n        return `${param}=${paramValue}`;\n      });\n      const forDateAndBookingTimelineParam = this.getFromAndToDateQueryParams();\n      const allParams = [ppTokenParam, ...queryParamList, forDateAndBookingTimelineParam];\n      return allParams.join('&');\n    },\n\n    getFromAndToDateQueryParams() {\n      const {\n        fromDate,\n        futureBookingTimeline\n      } = this.getFromAndFutureBookingTimeline();\n      const fromDateFormat = (0, _moment.default)(fromDate).format(DATE_FORMAT);\n      const forDateAndBookingTimelineParam = `for_date=${fromDateFormat}&future_booking_time_line=${futureBookingTimeline}`;\n      return forDateAndBookingTimelineParam;\n    },\n\n    getFromAndFutureBookingTimeline() {\n      const fromDate = new Date((0, _moment.default)().startOf('day'));\n      fromDate.setDate(fromDate.getDate() + 1);\n      const storeFutureBookingTimeline = this.store.peekRecord('cs-config-item', 'config-Book_Trips/Future_Booking_Timeline');\n      const futureBookingTimeline = parseInt(storeFutureBookingTimeline.value, 10);\n      return {\n        fromDate,\n        futureBookingTimeline\n      };\n    },\n\n    async openRiderTripHistoryReportPopup(riderId) {\n      const configTripHistoryReportDayCount = this.store.peekRecord('cs-config-item', 'config-Book_Trips/Trip_History_Report_Day_Count');\n      const tripHistoryReportDayCount = (0, _lodash.get)(configTripHistoryReportDayCount, 'value', '60');\n      const endDate = (0, _moment.default)().add(-1, 'day').startOf('day');\n      const startDate = (0, _moment.default)(endDate).add(tripHistoryReportDayCount * -1, 'day').startOf('day');\n      const ppToken = await this.getPPToken();\n      const timezone = await this.getTimezoneInfo();\n      const parameters = {\n        _flowId: 'viewReportFlow',\n        standAlone: true.toString(),\n        reportUnit: '/Reports/Rider_Trip_History',\n\n        /* eslint-disable-next-line camelcase */\n        start_date: startDate.format('YYYY-MM-DD'),\n\n        /* eslint-disable-next-line camelcase */\n        end_date: endDate.format('YYYY-MM-DD'),\n\n        /* eslint-disable-next-line camelcase */\n        rider_trips_Group_by: '1',\n\n        /* eslint-disable-next-line camelcase */\n        rider_trips_Sort_by: '1',\n\n        /* eslint-disable-next-line camelcase */\n        rider_trips_active_subreport: '2',\n\n        /* eslint-disable-next-line camelcase */\n        rider_id: riderId,\n        output: 'pdf',\n        userTimezone: timezone,\n        pp: ppToken\n      };\n      const urlSearchParams = (0, _lodash.map)(parameters, (value, key) => {\n        return `${key}=${value}`;\n      });\n      const queryString = (0, _lodash.join)(urlSearchParams, '&');\n      const url = `${REPORT_SERVER_BASE_URL}?${queryString}`;\n      const left = screen.availWidth * 0.2 + (screen.width - screen.availWidth);\n      const top = screen.availHeight * 0.2 + (screen.height - screen.availHeight);\n      const width = screen.availWidth * 0.6;\n      const height = screen.availHeight * 0.6;\n      const popupWindow = window.open(url, `ADEPTIQRiderTripHistoryReportRiderID${riderId}`, `popup=true,left=${left},top=${top},width=${width},height=${height}`);\n\n      if (popupWindow) {\n        popupWindow.onload = function () {\n          popupWindow.document.title = `Rider Trip History Report - Rider ID ${riderId} - Previous ${tripHistoryReportDayCount} Day(s)`;\n        };\n      } else {\n        const notifications = this.get('notifications');\n        notifications.warning('Rider Trip History Report Popup blocked by browser.  Enable popups for this site to see the report.');\n      }\n    },\n\n    /**\n     * @returns {Promise<string>}\n     */\n    async getPPToken() {\n      const tmapiToken = this.session.data.authenticated.token;\n      const JASPER_USER_API = `${_apiUrls.API.ssoService.host}/jasper-user-authentication`;\n      const ppTokenStr = `dt=${tmapiToken}|dAuthUrl=${JASPER_USER_API}`;\n      return this.getEncodedStr(ppTokenStr);\n    },\n\n    /**\n     *   In java code, it is just one line:\n     * URLEncoder.encode(new String(Base64.encodeBase64((string created in step 2))));\n     * @param tokenStr\n     * @returns {string}\n     */\n    getEncodedStr(tokenStr) {\n      const ppTokenEncodeStr = encodeURIComponent(btoa(tokenStr));\n      return ppTokenEncodeStr;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/resize-detector\", [\"exports\", \"ember-element-resize-detector/services/resize-detector\"], function (_exports, _resizeDetector) {\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 _resizeDetector.default;\n    }\n  });\n});","define(\"adept-iq/services/rider\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  function cleanFieldString(text) {\n    return typeof text === 'undefined' ? '' : text;\n  }\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    activeDragRiderPlace: null,\n    activePlace: null,\n    lastAccessedRiderId: null,\n    lastAccessedCertificationId: null,\n    lastAccessedRiderSuspensionId: null,\n    lastAccessedRiderTravelNeedId: null,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    fetchRiderInfoById(riderId) {\n      return new Promise(async (resolve, reject) => {\n        this.get('ajax').request(_apiUrls.API.riderManagementService.host + '/rider-with-subentities/' + riderId, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        }).then(res => {\n          resolve(res);\n        }).catch(err => {\n          reject(err);\n        });\n      });\n    },\n\n    fetchRiderNotificationInfoByIds(riderIds) {\n      return new Promise(async (resolve, reject) => {\n        this.get('ajax').request(_apiUrls.API.riderManagementService.host + `/rider?filter=in(id,(${riderIds.join(',')}))&fields[rider]=id,riderId,firstName,lastName,emailNotificationEnabled,phoneNotificationEnabled,smsNotificationEnabled,phoneNotification,emailNotification,smsNotification&include=phoneNumbers`, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          }\n        }).then(res => {\n          resolve(res);\n        }).catch(err => {\n          reject(err);\n        });\n      });\n    },\n\n    setActiveDragRiderPlace(place) {\n      this.set('activeDragRiderPlace', place);\n    },\n\n    setActivePlace(place) {\n      this.set('activePlace', place);\n    },\n\n    setlastAccessedRiderId(riderId) {\n      this.set('lastAccessedRiderId', riderId);\n    },\n\n    getLastAccessedRiderId() {\n      return this.get('lastAccessedRiderId');\n    },\n\n    getLastAccessedCertificationId() {\n      return this.get('lastAccessedCertificationId');\n    },\n\n    setLastAccessedCertificationId(certificationId) {\n      this.set('lastAccessedCertificationId', certificationId);\n    },\n\n    setLastAccessedRiderSuspensionId(riderSuspensionId) {\n      this.set('lastAccessedRiderSuspensionId', riderSuspensionId);\n    },\n\n    getLastAccessedRiderSuspensionId() {\n      return this.get('lastAccessedRiderSuspensionId');\n    },\n\n    setLastAccessedRiderFundingId(riderFundingId) {\n      this.set('lastAccessedRiderFundingId', riderFundingId);\n    },\n\n    getLastAccessedRiderFundingId() {\n      return this.get('lastAccessedRiderFundingId');\n    },\n\n    setLastAccessedRiderTravelNeedId(riderTravelNeedId) {\n      this.set('lastAccessedRiderTravelNeedId', riderTravelNeedId);\n    },\n\n    getLastAccessedRiderTravelNeedId() {\n      return this.get('lastAccessedRiderTravelNeedId');\n    },\n\n    updateAddress(record, benomadAddress) {\n      record.set('streetNumber', cleanFieldString(benomadAddress.address.streetNumber));\n      record.set('premise', cleanFieldString(benomadAddress.premise));\n      record.set('streetAddress', cleanFieldString(benomadAddress.address.streetName));\n      record.set('locality', cleanFieldString(benomadAddress.address.city));\n      record.set('region', cleanFieldString(benomadAddress.address.state));\n      record.set('subRegion', cleanFieldString(benomadAddress.address.countrySecondarySubdivision));\n      record.set('postalCode', cleanFieldString(benomadAddress.address.postalCode));\n      record.set('country', cleanFieldString(benomadAddress.address.countryCode));\n      record.set('freeformAddress', cleanFieldString(benomadAddress.address.freeformAddress));\n    },\n\n    async getConfigRelationshipTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-rider_relationship_types'\n      });\n    },\n\n    async getConfigRiderPhoneTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-rider_phone_types'\n      });\n    },\n\n    async getConfigAddressTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-rider_address_types'\n      });\n    },\n\n    async getConfigTravelNeedTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-travel_need_types'\n      });\n    },\n\n    async getConfigProviderTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-providers'\n      });\n    },\n\n    async getConfigContactReasonTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-contact_reason_types'\n      });\n    },\n\n    async getConfigEligibilityCategories() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-eligibility_categories'\n      });\n    },\n\n    async getConfigEligibilityConditionsTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-eligibility_conditions'\n      });\n    },\n\n    async getConfigRiderAgeLimit() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-rider_age_limit'\n      });\n    },\n\n    async getConfigSuspensionReasons() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-suspension_reasons'\n      });\n    },\n\n    async getConfigCertificationDeniedReasons() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-certification_denied_reasons'\n      });\n    },\n\n    async getConfigFundingAgencies() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-funding_agencies'\n      });\n    },\n\n    async getConfigRiderActivityLogTypes() {\n      return this.store.query('cs-config-item', {\n        category: 'config-System_Configuration-Activity_Log_Types-rider'\n      });\n    },\n\n    createEditRiderActivityLog(activityLogs) {\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      activityLogs.forEach(async activityLog => {\n        await activityLogAdapter.createUserRiderActivity(activityLog, activityLog.content.actionType, activityLog.content.eventType);\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/road-supervisor\", [\"exports\", \"ember-concurrency\", \"moment\", \"adept-iq/classes/road-supervisor-instance\", \"adept-iq/classes/road-supervisor-api\", \"adept-iq/classes/road-supervisor-special-route-api\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _moment, _roadSupervisorInstance, _roadSupervisorApi, _roadSupervisorSpecialRouteApi, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _exports.RoadSupervisorError = void 0;\n\n  class RoadSupervisorError extends Error {\n    constructor(message) {\n      super(message);\n      this.name = this.constructor.name;\n    }\n\n  }\n\n  _exports.RoadSupervisorError = RoadSupervisorError;\n  let id = 1;\n  const nullInstance = {\n    onGPSLocation() {}\n\n  };\n  const nullAddress = {\n    displayNavigateToAddress() {}\n\n  };\n\n  var _default = Ember.Service.extend({\n    addressService: Ember.inject.service('address'),\n    user: Ember.inject.service(),\n    gps: Ember.inject.service('gps'),\n    speech: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    instance: nullInstance,\n    address: nullAddress,\n    isNavigating: false,\n    rsVehicle: null,\n\n    init() {\n      this._super(...arguments);\n\n      const user = this.get('user');\n\n      if (user.isRoadSupEnable()) {\n        const onGPSLocation = Ember.run.bind(this, 'onGPSLocation');\n        this.gps.onLocationChange(onGPSLocation);\n        this.api = _environment.default.APP.avlmLite ? _roadSupervisorApi.default.getSingleton() : _roadSupervisorSpecialRouteApi.default.getSingleton();\n        this.set('rsVehicle', this.store.createRecord('road-supervisor-vehicle'));\n\n        if (!_environment.default.APP.avlmLite) {\n          // API is not a container, can't use store service.\n          this.api.setStore(this.get('store'));\n          this.api.setAddressService(this.get('addressService'));\n          this.fetchSchedulesTask.perform().then(() => {\n            this.api.setSchedule(this.get('schedules').firstObject);\n            this.api.initRoute();\n          });\n        }\n      }\n    },\n\n    getLocation() {\n      const cord = this.api.get('cord');\n      return {\n        lat: cord[0],\n        lon: cord[1]\n      };\n    },\n\n    onGPSLocation(val) {\n      const timestamp = val.timestamp;\n      const lat = val.coords.latitude;\n      const lng = val.coords.longitude;\n      const heading = val.coords.heading;\n      const speed = val.coords.speed;\n      const rsVehicle = this.get('rsVehicle');\n      rsVehicle.setProperties({\n        lat,\n        lng,\n        heading,\n        timestamp\n      }); // Always update location, we need latest timestamp\n\n      this.api.setLocationHistory(lat, lng, speed, heading, timestamp);\n      this.instance.onGPSLocation(val);\n      this.api.setLocation(val);\n    },\n\n    // don't interrupt, but only keep the latest queued instruction\n    _speechTask: (0, _emberConcurrency.task)(function* (text) {\n      return yield this.get('speech').speak(text);\n    }).keepLatest(),\n\n    onSpeechEvent(text) {\n      if (this.get('isNavigating')) {\n        this._speechTask.perform(text);\n      }\n    },\n\n    onLogoutPerformPullIn() {\n      return this.api.clearWayPoint(false);\n    },\n\n    onAtDestinationEvent() {\n      return this.api.clearWayPoint(true);\n    },\n\n    getRSConfigurations() {\n      const configItens = this.store.peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === 'config-RoadSupervisor_Configuration';\n      });\n      var configurations = {};\n      configItens.forEach(item => {\n        configurations[item.get('name')] = item.get('value');\n      });\n      return configurations;\n    },\n\n    // TBD if we are using this to determine provider\n    jwtProviderNames: Ember.computed('session.data.authenticated.token', function () {\n      const token = this.get('session.data.authenticated.token');\n      const tokenInfo = JSON.parse(atob(token.split('.')[1]));\n      return tokenInfo.providerNames;\n    }),\n\n    handleError(err) {\n      if (err instanceof RoadSupervisorError) {\n        alert(err.message); // eslint-disable-line no-alert\n      } else {\n        throw err;\n      }\n    },\n\n    async navigateToAddress(address) {\n      this.set('isNavigating', true); // fuzzy-matched addresses are not persisted until needed\n\n      if (_environment.default.APP.avlmLite && address.get('isNew')) {\n        // address POST is not working\n        // return address.save();\n        address.set('id', '' + id++);\n      } else {\n        const waypoint = await this.get('addressService').createWayPoint(address);\n        return this._buildInstanceWithWaypoint(waypoint);\n      }\n\n      return this._buildInstanceWithWaypoint(address);\n    },\n\n    displayNavigateToAddress(address) {\n      return this._buildInstanceWithWaypointAddress(address);\n    },\n\n    navigateToStop(iqStop) {\n      this.set('isNavigating', true);\n      const lat = iqStop.get('lat');\n      const lng = iqStop.get('lng');\n      const fullAddress = _environment.default.APP.avlmLite ? iqStop.get('place.fullAddress') : iqStop.get('place.address.fullAddress');\n      return Ember.RSVP.resolve().then(() => {\n        if (_environment.default.APP.avlmLite) {\n          return this._queryAddress(`${lat},${lng}`, {\n            lat,\n            lng\n          });\n        }\n\n        return this.get('addressService').copyAddress(iqStop.get('place.address'));\n      }).then(address => this.navigateToAddress(address)).then(() => this.displayNavigateToAddress(fullAddress)).catch(this.handleError);\n    },\n\n    navigateToAddressFromMap(address) {\n      this.set('isNavigating', true);\n      return Ember.RSVP.resolve().then(() => this.navigateToAddress(address)).then(() => this.displayNavigateToAddress(address.fullAddress)).catch(this.handleError);\n    },\n\n    navigateToVehicle(vehicle) {\n      throw new RoadSupervisorError('navigating to a vehicle is disabled until further notice');\n      return this._buildInstanceWithWaypoint(vehicle); // eslint-disable-line no-unreachable\n    },\n\n    enter() {\n      return Promise.resolve();\n    },\n\n    exit() {\n      this.api.clearWayPoint();\n      const instance = this.get('instance');\n      this.set('instance', nullInstance);\n\n      if (instance !== nullInstance) {\n        instance.destroy();\n      }\n\n      return this.get('workspace').popState('roadSupervisor');\n    },\n\n    // FIXME: this seems to be unused?\n    // getAccessData() {\n    //   return getAccessData(this.user.userId);\n    // },\n    async _queryAddress(addressString) {\n      try {\n        const addresses = await this.get('addressService').fuzzySearch(addressString, {\n          limit: 1\n        });\n        const address = addresses.get('firstObject');\n\n        if (!address) {\n          this.set('isNavigating', false);\n          throw new RoadSupervisorError('no matching address found');\n        }\n\n        return address;\n      } catch (err) {\n        throw new RoadSupervisorError(err);\n      }\n    },\n\n    fetchSchedulesTask: (0, _emberConcurrency.task)(function* () {\n      const filterQuery = 'eq(type,\\'primary\\')';\n      let schedules = yield this.store.query('schedule', {\n        filter: filterQuery\n      });\n      yield this.store.findAll('dispatchSchedule');\n      if (!schedules) return null;\n      const now = new Date().getTime();\n      schedules = schedules.filter(schedule => {\n        const start = (0, _moment.default)(schedule.get('start'));\n        const end = (0, _moment.default)(schedule.get('end'));\n        return start.isBefore(now) && end.isAfter(now);\n      }).sortBy('name');\n      this.set('schedules', schedules);\n    }),\n\n    _buildInstanceWithWaypointAddress(address) {\n      this.set('address', address);\n    },\n\n    _buildInstanceWithWaypoint(waypoint) {\n      let instance = this.get('instance');\n\n      if (instance === nullInstance) {\n        instance = _roadSupervisorInstance.default.create({\n          api: this.api,\n          delegate: this\n        });\n        this.set('instance', instance);\n      }\n\n      if (!this.workspace.isRoadSupervisorModeEnabled) {\n        this.workspace.pushState('roadSupervisor');\n      }\n\n      Ember.RSVP.resolve().then(() => this.api.setWayPoint(waypoint));\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/routeexecevent\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AMBULATORY_TRAVELNEED_TYPE = 'ambulatory';\n  const WHEELCHAIR_TRAVELNEED_TYPE = 'wheelchair';\n  const SERVICEANIMAL_TRAVELNEED_TYPE = 'serviceAnimal';\n  const PCA_TRAVELNEED_TYPE = 'pca';\n  const COMPANION_TRAVELNEED_TYPE = 'companion'; // @TODO service seems unnecessary and should be converted into a util file as its only preparing JSON Objects\n\n  var _default = Ember.Service.extend({\n    routeStartData() {\n      const routeStartData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'routeId': '',\n            'content': {\n              'type': 'pullOut',\n              'actualTime': ''\n            },\n            'source': {\n              'type': 'webApp'\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            }\n          }\n        }\n      };\n      return routeStartData;\n    },\n\n    undoRouteStartData() {\n      const undoRouteStartData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'routeId': '',\n            'content': {\n              'type': 'accept',\n              'actualTime': '',\n              'stopId': ''\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': ''\n            },\n            'source': {\n              'type': 'webApp'\n            }\n          }\n        }\n      };\n      return undoRouteStartData;\n    },\n\n    routeEndData() {\n      const routeEndData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'routeId': '',\n            'content': {\n              'type': 'pullIn',\n              'actualTime': ''\n            },\n            'source': {\n              'type': 'webApp'\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            }\n          }\n        }\n      };\n      return routeEndData;\n    },\n\n    undoRouteEndData() {\n      const undoRouteEndData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'routeId': '',\n            'content': {\n              'type': 'accept',\n              'actualTime': '',\n              'stopId': ''\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': ''\n            },\n            'source': {\n              'type': 'webApp'\n            }\n          }\n        }\n      };\n      return undoRouteEndData;\n    },\n\n    routeCompleteData() {\n      const routeCompleteData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'routeId': '',\n            'content': {\n              'type': 'complete',\n              'actualTime': ''\n            },\n            'source': {\n              'type': 'webApp'\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            }\n          }\n        }\n      };\n      return routeCompleteData;\n    },\n\n    undoNoShowData() {\n      const undoNoShowData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'source': {\n              'type': 'webApp'\n            },\n            'routeId': '',\n            'driver': {\n              'name': '',\n              'badgeNr': '',\n              'id': ''\n            },\n            'content': {\n              'actualTime': '',\n              'stopId': '',\n              'type': 'undoNoShow',\n              'passengerEvents': [{\n                'passengerId': '',\n                'tripId': '',\n                'type': 'pickup'\n              }],\n              'message': ''\n            },\n            'vehicle': {\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              },\n              'id': '',\n              'provider': {\n                'name': ''\n              }\n            }\n          }\n        }\n      };\n      return undoNoShowData;\n    },\n\n    stopArriveData() {\n      const stopArriveData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '1',\n            'routeId': '',\n            'routeVersion': '1',\n            'content': {\n              'type': 'arrive',\n              'stopIndex': 0,\n              'stopId': '',\n              'actualTime': '',\n              'passengerEvents': [{\n                'passengerId': '',\n                'passengerType': 'client',\n                'type': 'pickup',\n                'tripId': '',\n                'externalTripId': ''\n              }]\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            },\n            'source': {\n              'type': 'webApp'\n            }\n          }\n        }\n      };\n      return stopArriveData;\n    },\n\n    stopDepartData() {\n      const stopDepartData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '',\n            'routeId': '',\n            'content': {\n              'type': 'depart',\n              'stopIndex': 0,\n              'stopId': '',\n              'actualTime': '',\n              'source': {\n                'type': 'webApp'\n              },\n              'passengerEvents': [{\n                'passengerId': '',\n                'passengerType': 'client',\n                'type': 'pickup',\n                'tripId': '',\n                'externalTripId': ''\n              }]\n            },\n            'source': {\n              'type': 'webApp'\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            }\n          }\n        }\n      };\n      return stopDepartData;\n    },\n\n    stopAcceptData() {\n      return {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '1',\n            'routeId': '',\n            'routeVersion': '1',\n            'content': {\n              'type': 'accept',\n              'stopIndex': 0,\n              'stopId': '',\n              'actualTime': '',\n              'passengerEvents': [{\n                'passengerId': '',\n                'passengerType': '',\n                'type': 'noShow',\n                'details': {\n                  'message': ''\n                }\n              }]\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            },\n            'source': {\n              'type': 'webApp'\n            }\n          }\n        }\n      };\n    },\n\n    onBreakData() {\n      const onBreakData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '1',\n            'routeId': '2',\n            'source': {\n              'type': 'webApp'\n            },\n            'content': {\n              'type': 'onBreak',\n              'actualTime': '2018-07-13T16:52:08.777Z',\n              'breakId': '13'\n            },\n            'driver': {\n              'id': '19031',\n              'badgeNr': '19031'\n            },\n            'vehicle': {\n              'id': '214',\n              'callsign': '214',\n              'location': {\n                'coord': {\n                  'lat': 46.05991,\n                  'lng': -118.36189\n                },\n                'time': '2018-07-13T15:52:08.777Z'\n              },\n              'mov': {\n                'speed': 25,\n                'heading': 15\n              }\n            }\n          }\n        }\n      };\n      return onBreakData;\n    },\n\n    offBreakData() {\n      const offBreakData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '1',\n            'routeId': '2',\n            'source': {\n              'type': 'webApp'\n            },\n            'content': {\n              'type': 'offBreak',\n              'actualTime': '2018-07-13T16:52:08.777Z',\n              'breakId': '13'\n            },\n            'driver': {\n              'id': '19031',\n              'badgeNr': '19031',\n              'name': 'DRVR'\n            },\n            'vehicle': {\n              'id': '214',\n              'callsign': '214',\n              'location': {\n                'coord': {\n                  'lat': 46.05991,\n                  'lng': -118.36189\n                },\n                'time': '2018-07-13T15:52:08.777Z'\n              },\n              'mov': {\n                'speed': 25,\n                'heading': 15\n              }\n            }\n          }\n        }\n      };\n      return offBreakData;\n    },\n\n    breakAcceptData() {\n      const breakAcceptData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '1',\n            'routeId': '2',\n            'source': {\n              'type': 'webApp'\n            },\n            'content': {\n              'type': 'accept',\n              'actualTime': '2018-07-13T16:52:08.777Z',\n              'breakId': '13'\n            },\n            'driver': {\n              'id': '19031',\n              'badgeNr': '19031'\n            },\n            'vehicle': {\n              'id': '214',\n              'callsign': '214',\n              'location': {\n                'coord': {\n                  'lat': 46.05991,\n                  'lng': -118.36189\n                },\n                'time': '2018-07-13T15:52:08.777Z'\n              },\n              'mov': {\n                'speed': 25,\n                'heading': 15\n              }\n            }\n          }\n        }\n      };\n      return breakAcceptData;\n    },\n\n    noShowData() {\n      const noShowData = {\n        'data': {\n          'type': 'routeExecEvent',\n          'attributes': {\n            'trackingId': '',\n            'routeId': '',\n            'content': {\n              'type': 'arrive',\n              'stopIndex': 1,\n              'stopId': '',\n              'actualTime': '',\n              'source': {\n                'type': 'webApp'\n              },\n              'passengerEvents': [{\n                'passengerId': '',\n                'passengerType': '',\n                'type': 'noShow',\n                'details': {\n                  'code': '',\n                  'message': ''\n                },\n                'tripId': '',\n                'externalTripId': ''\n              }],\n              'message': ''\n            },\n            'source': {\n              'type': 'webApp'\n            },\n            'driver': {\n              'id': '',\n              'badgeNr': '',\n              'name': ''\n            },\n            'vehicle': {\n              'id': '',\n              'callsign': '',\n              'location': {\n                'coord': {\n                  'lat': 0.0,\n                  'lng': 0.0\n                },\n                'time': ''\n              }\n            }\n          }\n        }\n      };\n      return noShowData;\n    },\n\n    tripPaymentData() {\n      const tripPaymentData = {\n        'data': {\n          'type': 'tripPayment',\n          'attributes': {\n            'status': 'completed',\n            'trackingId': '',\n            'externalBookingId': '155',\n            'tripId': '1',\n            'passengerId': '1',\n            'fare': 2,\n            'components': [{\n              'name': 'cash',\n              'amount': 2\n            }],\n            'total': 1,\n            'currencyCode': 'CAD'\n          }\n        }\n      };\n      return tripPaymentData;\n    },\n\n    cancelData() {\n      const cancelData = {\n        'data': {\n          'type': 'cancellation',\n          'attributes': {\n            'notes': 'client is on vacation',\n            'lateCancel': false\n          },\n          'relationships': {\n            'cancelTypeName': {\n              'data': {\n                'id': 'CX_L',\n                'type': 'cancelTypeName'\n              }\n            }\n          }\n        }\n      };\n      return cancelData;\n    },\n\n    prepareRouteStartData(routeStartData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      routeStartData.data.attributes.routeId = record.get('id');\n      routeStartData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      routeStartData.data.attributes.content.actualTime = record.get('timestamp');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      routeStartData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      routeStartData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      routeStartData.data.attributes.driver.name = assignedDriver.get('fullName');\n      routeStartData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      routeStartData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      routeStartData.data.attributes.vehicle.location.time = record.get('timestamp');\n\n      if (Ember.isNone(record.get('dispatchRoute.startGarage.location.lat')) || Ember.isNone(record.get('dispatchRoute.startGarage.location.lng'))) {\n        delete routeStartData.data.attributes.vehicle.location;\n      } else {\n        routeStartData.data.attributes.vehicle.location.coord.lat = record.get('dispatchRoute.startGarage.location.lat');\n        routeStartData.data.attributes.vehicle.location.coord.lng = record.get('dispatchRoute.startGarage.location.lng');\n      }\n\n      return routeStartData;\n    },\n\n    prepareUndoRouteStartData(undoRouteStartData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      undoRouteStartData.data.attributes.routeId = record.get('id');\n      undoRouteStartData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      undoRouteStartData.data.attributes.content.actualTime = record.get('timestamp');\n      undoRouteStartData.data.attributes.content.stopId = record.get('dispatchRoute.pulloutGarageStop.id');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      undoRouteStartData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      undoRouteStartData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      undoRouteStartData.data.attributes.driver.name = assignedDriver.get('fullName');\n      undoRouteStartData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      undoRouteStartData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      return undoRouteStartData;\n    },\n\n    prepareRouteEndData(routeEndData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      routeEndData.data.attributes.routeId = record.get('id');\n      routeEndData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      routeEndData.data.attributes.content.actualTime = record.get('timestamp');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      routeEndData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      routeEndData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      routeEndData.data.attributes.driver.name = assignedDriver.get('fullName');\n      routeEndData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      routeEndData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      routeEndData.data.attributes.vehicle.location.time = record.get('timestamp');\n\n      if (Ember.isNone(record.get('dispatchRoute.endGarage.location.lat')) || Ember.isNone(record.get('dispatchRoute.endGarage.location.lng'))) {\n        delete routeEndData.data.attributes.vehicle.location;\n      } else {\n        routeEndData.data.attributes.vehicle.location.coord.lat = record.get('dispatchRoute.endGarage.location.lat');\n        routeEndData.data.attributes.vehicle.location.coord.lng = record.get('dispatchRoute.endGarage.location.lng');\n      }\n\n      return routeEndData;\n    },\n\n    prepareUndoRouteEndData(undoRouteEndData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      undoRouteEndData.data.attributes.routeId = record.get('id');\n      undoRouteEndData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      undoRouteEndData.data.attributes.content.actualTime = record.get('timestamp');\n      undoRouteEndData.data.attributes.content.stopId = record.get('dispatchRoute.pullinGarageStop.id');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      undoRouteEndData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      undoRouteEndData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      undoRouteEndData.data.attributes.driver.name = assignedDriver.get('fullName');\n      undoRouteEndData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      undoRouteEndData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      return undoRouteEndData;\n    },\n\n    prepareRouteCompleteData(routeCompleteData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      routeCompleteData.data.attributes.routeId = record.get('id');\n      routeCompleteData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      routeCompleteData.data.attributes.content.actualTime = record.get('timestamp');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      routeCompleteData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      routeCompleteData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      routeCompleteData.data.attributes.driver.name = assignedDriver.get('fullName');\n      routeCompleteData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      routeCompleteData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      routeCompleteData.data.attributes.vehicle.location.time = record.get('timestamp');\n\n      if (Ember.isNone(record.get('dispatchRoute.endGarage.location.lat')) || Ember.isNone(record.get('dispatchRoute.endGarage.location.lng'))) {\n        delete routeCompleteData.data.attributes.vehicle.location;\n      } else {\n        routeCompleteData.data.attributes.vehicle.location.coord.lat = record.get('dispatchRoute.endGarage.location.lat');\n        routeCompleteData.data.attributes.vehicle.location.coord.lng = record.get('dispatchRoute.endGarage.location.lng');\n      }\n\n      return routeCompleteData;\n    },\n\n    prepareStopArriveData(stopArriveData, record, activityLog) {\n      let prevDispatchRoute = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n      let avlmVersion = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n      // Sometimes we have two REE events the first one undo events so remove actualArriveTime.\n      const actualArrivalTime = record.get('actualArriveTime') || record.get('arriveTimestamp');\n      const dispatchRoute = record.get('dispatchRoute') || prevDispatchRoute;\n      stopArriveData.data.attributes.trackingId = '1';\n      stopArriveData.data.attributes.routeId = dispatchRoute.get('route.id');\n      stopArriveData.data.attributes.routeVersion = avlmVersion || dispatchRoute.get('avlmVersion');\n      stopArriveData.data.attributes.content.actualTime = actualArrivalTime;\n      stopArriveData.data.attributes.content.eta = actualArrivalTime;\n      stopArriveData.data.attributes.content.stopId = record.get('id');\n      stopArriveData.data.attributes.content.stopIndex = record.get('clusterOrdinal');\n      const assignedDriver = dispatchRoute.get('assignedDriver');\n      const assignedVehicle = dispatchRoute.get('assignedVehicle');\n      stopArriveData.data.attributes.content.passengerEvents[0].passengerId = record.get('trip.rider.id');\n      stopArriveData.data.attributes.content.passengerEvents[0].passengerType = 'client';\n      stopArriveData.data.attributes.content.passengerEvents[0].tripId = record.get('trip.id');\n      stopArriveData.data.attributes.content.passengerEvents[0].externalTripId = record.get('trip.tripId');\n\n      if (activityLog) {\n        stopArriveData.data.attributes.content.loggingActivity = activityLog;\n      }\n\n      if (assignedDriver) {\n        stopArriveData.data.attributes.driver.id = '' + assignedDriver.get('id');\n        stopArriveData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n        stopArriveData.data.attributes.driver.name = assignedDriver.get('fullName');\n      }\n\n      if (record.get('isDrop')) {\n        stopArriveData.data.attributes.content.passengerEvents[0].type = 'dropoff';\n      }\n\n      if (assignedVehicle) {\n        stopArriveData.data.attributes.vehicle.id = assignedVehicle.get('id');\n        stopArriveData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n        stopArriveData.data.attributes.vehicle.location.time = actualArrivalTime;\n      }\n\n      if (Ember.isNone(record.get('place.location.lat')) || Ember.isNone(record.get('place.location.lng'))) {\n        delete stopArriveData.data.attributes.vehicle.location;\n      } else {\n        stopArriveData.data.attributes.vehicle.location.coord.lat = record.get('place.location.lat');\n        stopArriveData.data.attributes.vehicle.location.coord.lng = record.get('place.location.lng');\n      }\n\n      return stopArriveData;\n    },\n\n    divideTravelNeedTypeCounts(needCount, availableCounts) {\n      let workingCount = needCount;\n      let ambCount = 0;\n      let wcCount = 0;\n\n      while (workingCount > 0 && (availableCounts.ambCount > 0 || availableCounts.wcCount > 0)) {\n        if (availableCounts.ambCount > 0) {\n          ambCount++;\n          availableCounts.ambCount--;\n          workingCount--;\n        } else if (availableCounts.wcCount) {\n          wcCount++;\n          availableCounts.wcCount--;\n          workingCount--;\n        }\n      }\n\n      return {\n        ambCount,\n        wcCount\n      };\n    },\n\n    // \"companion\" travel needs have passenger-type \"companion\" and travel-need-type \"ambulatory\" or \"wheelchair\"\n    // \"PCA\" travel needs have passenger-type \"pca\" and travel-need-type \"ambulatory\" or \"wheelchair\"\n    // \"service animal\" travel needs have passenger-type \"client\" and travel-need-type \"serviceAnimal\"\n    // match pca/companion to ambulatory or wheelchair. Does not matter which. The rest goes to clinet.\n    arrangePassengerEvents(record) {\n      const passengerEvents = [];\n      const travelNeeds = record.get('travelNeeds');\n      const passengerId = record.get('trip.rider.id');\n      const tripId = record.get('trip.id');\n      const externalTripId = record.get('trip.tripId');\n      const type = record.get('isDrop') ? 'dropoff' : 'pickup';\n      const ambulatoryTravelNeed = Ember.isPresent(travelNeeds) ? travelNeeds.find(item => item.type === AMBULATORY_TRAVELNEED_TYPE) : null;\n      const wheelchairTravelNeed = Ember.isPresent(travelNeeds) ? travelNeeds.find(item => item.type === WHEELCHAIR_TRAVELNEED_TYPE) : null;\n      const availableCounts = {\n        ambCount: ambulatoryTravelNeed ? ambulatoryTravelNeed.cnt : 0,\n        wcCount: wheelchairTravelNeed ? wheelchairTravelNeed.cnt : 0\n      };\n      const serviceAnimalCount = record.get('serviceAnimalCount') ? record.get('serviceAnimalCount') : 0;\n      const pcaCount = record.get('pcaCount') ? record.get('pcaCount') : 0;\n      const companionCount = record.get('companionCount') ? record.get('companionCount') : 0;\n      const usedAttributes = [];\n\n      if (availableCounts.ambCount >= 0) {\n        usedAttributes.pushObject({\n          type: AMBULATORY_TRAVELNEED_TYPE,\n          cnt: availableCounts.ambCount\n        });\n      }\n\n      if (availableCounts.wcCount >= 0) {\n        usedAttributes.pushObject({\n          type: WHEELCHAIR_TRAVELNEED_TYPE,\n          cnt: availableCounts.wcCount\n        });\n      }\n\n      if (pcaCount >= 0) {\n        usedAttributes.pushObject({\n          type: PCA_TRAVELNEED_TYPE,\n          cnt: pcaCount\n        });\n      }\n\n      if (companionCount >= 0) {\n        usedAttributes.pushObject({\n          type: COMPANION_TRAVELNEED_TYPE,\n          cnt: companionCount\n        });\n      }\n\n      if (serviceAnimalCount > 0) {\n        usedAttributes.pushObject({\n          type: SERVICEANIMAL_TRAVELNEED_TYPE,\n          cnt: 1\n        });\n      }\n\n      passengerEvents.pushObject({\n        passengerId: passengerId,\n        type,\n        tripId: tripId,\n        externalTripId,\n        usedAttributes: usedAttributes\n      });\n      return passengerEvents;\n    },\n\n    prepareStopDepartData(stopDepartData, record) {\n      let prevDispatchRoute = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      let avlmVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n      const dispatchRoute = record.get('dispatchRoute') || prevDispatchRoute;\n      stopDepartData.data.attributes.trackingId = '1';\n      stopDepartData.data.attributes.routeId = dispatchRoute.get('route.id');\n      stopDepartData.data.attributes.routeVersion = avlmVersion || dispatchRoute.get('avlmVersion');\n      stopDepartData.data.attributes.content.actualTime = record.get('actualDepartTime');\n      stopDepartData.data.attributes.content.eta = record.get('actualDepartTime');\n      stopDepartData.data.attributes.content.stopId = record.get('id');\n      stopDepartData.data.attributes.content.stopIndex = record.get('clusterOrdinal');\n      const assignedDriver = dispatchRoute.get('assignedDriver');\n      const assignedVehicle = dispatchRoute.get('assignedVehicle');\n      stopDepartData.data.attributes.content.passengerEvents = this.arrangePassengerEvents(record);\n\n      if (assignedDriver) {\n        stopDepartData.data.attributes.driver.id = '' + assignedDriver.get('id');\n        stopDepartData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n        stopDepartData.data.attributes.driver.name = assignedDriver.get('fullName');\n      }\n\n      if (assignedVehicle) {\n        stopDepartData.data.attributes.vehicle.id = assignedVehicle.get('id');\n        stopDepartData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n        stopDepartData.data.attributes.vehicle.location.time = record.get('actualDepartTime');\n      }\n\n      if (Ember.isNone(record.get('place.location.lat')) || Ember.isNone(record.get('place.location.lng'))) {\n        delete stopDepartData.data.attributes.vehicle.location;\n      } else {\n        stopDepartData.data.attributes.vehicle.location.coord.lat = record.get('place.location.lat');\n        stopDepartData.data.attributes.vehicle.location.coord.lng = record.get('place.location.lng');\n      }\n\n      return stopDepartData;\n    },\n\n    prepareStopAcceptData(acceptData, record, noShowTime, noShowNotes, activityLog) {\n      let avlmVersion = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n      acceptData.data.attributes.trackingId = '1';\n      acceptData.data.attributes.routeId = record.get('dispatchRoute.route.id');\n      acceptData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      acceptData.data.attributes.content.actualTime = new Date();\n      acceptData.data.attributes.content.eta = new Date();\n      acceptData.data.attributes.content.stopId = record.get('id');\n      acceptData.data.attributes.content.stopIndex = record.get('clusterOrdinal');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      acceptData.data.attributes.content.passengerEvents[0].passengerId = record.get('trip.rider.id');\n      acceptData.data.attributes.content.passengerEvents[0].passengerType = 'client';\n      acceptData.data.attributes.content.passengerEvents[0].tripId = record.get('trip.id');\n      acceptData.data.attributes.content.passengerEvents[0].externalTripId = record.get('trip.tripId');\n\n      if (record.get('isPick')) {\n        acceptData.data.attributes.content.passengerEvents[0].type = 'pickup';\n      }\n\n      if (record.get('isDrop')) {\n        acceptData.data.attributes.content.passengerEvents[0].type = 'dropoff';\n      }\n\n      if (noShowNotes) {\n        acceptData.data.attributes.content.passengerEvents[0].details.message = noShowNotes;\n      } else {\n        delete acceptData.data.attributes.content.passengerEvents[0].details;\n      }\n\n      if (activityLog) {\n        acceptData.data.attributes.content.loggingActivity = activityLog;\n      }\n\n      if (assignedDriver) {\n        acceptData.data.attributes.driver.id = '' + assignedDriver.get('id');\n        acceptData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n        acceptData.data.attributes.driver.name = assignedDriver.get('fullName');\n      }\n\n      if (assignedVehicle) {\n        acceptData.data.attributes.vehicle.id = assignedVehicle.get('id');\n        acceptData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n        acceptData.data.attributes.vehicle.location.time = record.get('actualDepartTime') || new Date();\n\n        if (Ember.isNone(assignedVehicle.get('lat')) || Ember.isNone(assignedVehicle.get('lng'))) {\n          delete acceptData.data.attributes.vehicle.location;\n        } else {\n          acceptData.data.attributes.vehicle.location.coord.lat = assignedVehicle.get('lat');\n          acceptData.data.attributes.vehicle.location.coord.lng = assignedVehicle.get('lng');\n        }\n      }\n\n      return acceptData;\n    },\n\n    prepareStopNoShowData(noShowData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      const date = new Date();\n      noShowData.data.attributes.trackingId = '1';\n      noShowData.data.attributes.routeId = record.get('dispatchRoute.route.id');\n      noShowData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      noShowData.data.attributes.content.actualTime = record.get('noShow.timestamp') || date;\n      noShowData.data.attributes.content.stopId = record.get('id');\n      const assignedDriver = record.get('route.dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('route.dispatchRoute.assignedVehicle');\n      noShowData.data.attributes.content.passengerEvents[0].passengerId = record.get('trip.rider.id');\n      noShowData.data.attributes.content.passengerEvents[0].passengerType = 'client';\n\n      if (record.get('isDrop')) {\n        noShowData.data.attributes.content.passengerEvents[0].type = 'dropoff';\n      }\n\n      noShowData.data.attributes.content.passengerEvents[0].tripId = record.get('trip.id');\n      const noShow = record.get('noShow');\n      const noshowDetails = record.get('trip.noshowDetails'); // noShowReasonCode is model no-show-reason-category\n\n      noShowData.data.attributes.content.passengerEvents[0].details.code = noShow.get('noShowReasonCode.name');\n\n      if (record.get('isArrived')) {\n        noShowData.data.attributes.content.type = 'depart';\n      }\n\n      if (!Ember.isEmpty(noshowDetails)) {\n        noShowData.data.attributes.content.message = noshowDetails;\n        noShowData.data.attributes.content.passengerEvents[0].details.message = noshowDetails;\n      } else {\n        delete noShowData.data.attributes.content.message;\n        delete noShowData.data.attributes.content.passengerEvents[0].details.message;\n      }\n\n      noShowData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      noShowData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      noShowData.data.attributes.driver.name = assignedDriver.get('fullName');\n      noShowData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      noShowData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      noShowData.data.attributes.vehicle.location.time = record.timestamp || date;\n\n      if (Ember.isNone(record.get('lat')) || Ember.isNone(record.get('lng'))) {\n        delete noShowData.data.attributes.vehicle.location;\n      } else {\n        noShowData.data.attributes.vehicle.location.coord.lat = record.get('lat');\n        noShowData.data.attributes.vehicle.location.coord.lng = record.get('lng');\n      }\n\n      return noShowData;\n    },\n\n    prepareTripNoShowRequestData(noShowData, record, noShowTypeDecision) {\n      let avlmVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n      const pickStopPoint = record.get('pickStopPoint');\n      const date = new Date();\n      delete noShowData.data.attributes.trackingId;\n      noShowData.data.attributes.routeId = pickStopPoint.get('dispatchRoute.route.id');\n      noShowData.data.attributes.routeVersion = avlmVersion || pickStopPoint.get('dispatchRoute.avlmVersion');\n      noShowData.data.attributes.content.actualTime = record.get('noShow.timestamp') || date;\n      noShowData.data.attributes.content.stopId = pickStopPoint.get('id');\n      noShowData.data.attributes.content.type = noShowTypeDecision;\n      const assignedDriver = pickStopPoint.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = pickStopPoint.get('dispatchRoute.assignedVehicle');\n      noShowData.data.attributes.content.passengerEvents[0].passengerId = record.get('rider.id');\n      noShowData.data.attributes.content.passengerEvents[0].passengerType = 'client';\n      noShowData.data.attributes.content.passengerEvents[0].tripId = record.get('id');\n      noShowData.data.attributes.content.passengerEvents[0].externalTripId = record.get('tripId');\n      delete noShowData.data.attributes.content.source;\n      delete noShowData.data.attributes.content.passengerEvents[0].details.code;\n      delete noShowData.data.attributes.content.stopIndex;\n      noShowData.data.attributes.content.passengerEvents[0].type = 'pickup';\n      const noShowReason = record.get('noshowReason');\n\n      if (!Ember.isEmpty(noShowReason)) {\n        // noShowReason is model no-show-reason-category\n        noShowData.data.attributes.content.passengerEvents[0].details.code = noShowReason.get('name');\n        noShowData.data.attributes.content.passengerEvents[0].details.message = noShowReason.get('displayName');\n      } else {\n        delete noShowData.data.attributes.content.passengerEvents[0].details.code;\n        delete noShowData.data.attributes.content.passengerEvents[0].details.message;\n      }\n\n      if (!Ember.isEmpty(record.get('noshowDetails'))) {\n        noShowData.data.attributes.content.message = record.get('noshowDetails');\n\n        if (Ember.isEmpty(noShowReason)) {\n          noShowData.data.attributes.content.passengerEvents[0].details.message = record.get('noshowDetails');\n        }\n      } else {\n        delete noShowData.data.attributes.content.message;\n      } //driver data\n\n\n      noShowData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      noShowData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      noShowData.data.attributes.driver.name = assignedDriver.get('fullName'); ///vehicle data\n\n      noShowData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      noShowData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      noShowData.data.attributes.vehicle.provider = {\n        name: assignedVehicle.get('provider.name')\n      };\n      noShowData.data.attributes.vehicle.location.time = date;\n\n      if (Ember.isNone(pickStopPoint.get('lat')) || Ember.isNone(pickStopPoint.get('lng'))) {\n        delete noShowData.data.attributes.vehicle.location;\n      } else {\n        noShowData.data.attributes.vehicle.location.coord.lat = pickStopPoint.get('lat');\n        noShowData.data.attributes.vehicle.location.coord.lng = pickStopPoint.get('lng');\n      }\n\n      return noShowData;\n    },\n\n    prepareTripNoShowData(noShowData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      noShowData.data.attributes.trackingId = '1';\n      noShowData.data.attributes.routeId = record.get('pickStopPoint.dispatchRoute.route.id');\n      noShowData.data.attributes.routeVersion = avlmVersion || record.get('pickStopPoint.dispatchRoute.avlmVersion');\n      noShowData.data.attributes.content.actualTime = record.timestamp;\n      noShowData.data.attributes.content.stopId = record.get('pickStopPoint.id');\n      const assignedDriver = record.get('pickStopPoint.dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('pickStopPoint.dispatchRoute.assignedVehicle');\n      noShowData.data.attributes.content.passengerEvents[0].passengerId = record.get('rider.id');\n      noShowData.data.attributes.content.passengerEvents[0].passengerType = 'client';\n\n      if (record.get('type') === 'drop') {\n        noShowData.data.attributes.content.passengerEvents[0].type = 'dropoff';\n      }\n\n      noShowData.data.attributes.content.passengerEvents[0].tripId = record.get('id');\n      noShowData.data.attributes.content.passengerEvents[0].externalTripId = record.get('tripId');\n      const noShowReasonCode = record.get('noShowReason');\n\n      if (!Ember.isEmpty(noShowReasonCode)) {\n        noShowData.data.attributes.content.passengerEvents[0].details.code = noShowReasonCode.get('externalCode');\n      } else {\n        delete noShowData.data.attributes.content.passengerEvents[0].details.code;\n      }\n\n      if (!Ember.isEmpty(record.get('noShowNotes'))) {\n        noShowData.data.attributes.content.message = record.get('noShowNotes');\n      } else {\n        delete noShowData.data.attributes.content.message;\n      } //driver data\n\n\n      noShowData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      noShowData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      noShowData.data.attributes.driver.name = assignedDriver.get('fullName'); ///vehicle data\n\n      noShowData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      noShowData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      noShowData.data.attributes.vehicle.location.time = record.timestamp;\n\n      if (Ember.isNone(record.get('lat')) || Ember.isNone(record.get('lng'))) {\n        delete noShowData.data.attributes.vehicle.location;\n      } else {\n        noShowData.data.attributes.vehicle.location.coord.lat = record.get('lat');\n        noShowData.data.attributes.vehicle.location.coord.lng = record.get('lng');\n      }\n\n      return noShowData;\n    },\n\n    prepareUndoNoShowData(undoNoShowData, record, noShowTime, noShowNotes) {\n      let avlmVersion = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n      undoNoShowData.data.attributes.trackingId = '1';\n      undoNoShowData.data.attributes.routeId = record.get('dispatchRoute.route.id');\n      undoNoShowData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      undoNoShowData.data.attributes.content.actualTime = new Date();\n      undoNoShowData.data.attributes.content.eta = new Date();\n      undoNoShowData.data.attributes.content.stopId = record.get('id');\n      undoNoShowData.data.attributes.content.stopIndex = record.get('clusterOrdinal');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      undoNoShowData.data.attributes.content.passengerEvents[0].passengerId = record.get('trip.rider.id');\n      undoNoShowData.data.attributes.content.passengerEvents[0].passengerType = 'client';\n      undoNoShowData.data.attributes.content.passengerEvents[0].tripId = record.get('trip.id');\n      undoNoShowData.data.attributes.content.passengerEvents[0].externalTripId = record.get('trip.tripId');\n\n      if (record.get('isPick')) {\n        undoNoShowData.data.attributes.content.passengerEvents[0].type = 'pickup';\n      }\n\n      if (record.get('isDrop')) {\n        undoNoShowData.data.attributes.content.passengerEvents[0].type = 'dropoff';\n      }\n\n      if (noShowNotes) {\n        undoNoShowData.data.attributes.content.message = noShowNotes;\n      } else {\n        delete undoNoShowData.data.attributes.content.message;\n      }\n\n      if (assignedDriver) {\n        undoNoShowData.data.attributes.driver.id = '' + assignedDriver.get('id');\n        undoNoShowData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n        undoNoShowData.data.attributes.driver.name = assignedDriver.get('fullName');\n      }\n\n      if (assignedVehicle) {\n        undoNoShowData.data.attributes.vehicle.id = assignedVehicle.get('id');\n        undoNoShowData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n        undoNoShowData.data.attributes.vehicle.location.time = record.get('actualDepartTime') || new Date();\n        undoNoShowData.data.attributes.vehicle.provider = {\n          name: assignedVehicle.get('provider.id')\n        };\n\n        if (Ember.isNone(assignedVehicle.get('lat')) || Ember.isNone(assignedVehicle.get('lng'))) {\n          delete undoNoShowData.data.attributes.vehicle.location;\n        } else {\n          undoNoShowData.data.attributes.vehicle.location.coord.lat = assignedVehicle.get('lat');\n          undoNoShowData.data.attributes.vehicle.location.coord.lng = assignedVehicle.get('lng');\n        }\n      }\n\n      return undoNoShowData;\n    },\n\n    prepareTripPaymentData(tripPaymentData, record) {\n      tripPaymentData.data.attributes.trackingId = '1';\n      tripPaymentData.data.attributes.externalBookingId = record.get('externalId');\n      tripPaymentData.data.attributes.tripId = record.get('id');\n      tripPaymentData.data.attributes.passengerId = record.get('rider.id');\n      tripPaymentData.data.attributes.fare = record.get('fare');\n      tripPaymentData.data.attributes.components[0].name = record.get('fareName');\n      tripPaymentData.data.attributes.components[0].amount = record.get('fare');\n      return tripPaymentData;\n    },\n\n    prepareTripCancelData(cancelData, record) {\n      let lateCancel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      cancelData.data.attributes.notes = record.get('cancelNotes');\n      cancelData.data.attributes.lateCancel = lateCancel;\n      cancelData.data.relationships.cancelTypeName.data.id = record.get('cancelType.id');\n      return cancelData;\n    },\n\n    prepareStartBreakData(onBreakData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      const actualArriveTime = record.get('actualArriveTime') ? record.get('actualArriveTime') : new Date();\n      onBreakData.data.attributes.trackingId = '1';\n      onBreakData.data.attributes.routeId = record.get('dispatchRoute.route.id');\n      onBreakData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      onBreakData.data.attributes.content.actualTime = record.get('actualArriveTime');\n      onBreakData.data.attributes.content.breakId = record.get('routeBreak.id');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      onBreakData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      onBreakData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      onBreakData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      onBreakData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n\n      if (Ember.isNone(record.get('routeBreak.actualArriveTime'))) {\n        onBreakData.data.attributes.vehicle.location.time = actualArriveTime;\n      } else {\n        onBreakData.data.attributes.vehicle.location.time = record.get('routeBreak.actualArriveTime');\n      }\n\n      if (Ember.isNone(record.get('routeBreak.startPlace.location.lat')) || Ember.isNone(record.get('routeBreak.startPlace.location.lng'))) {\n        if (Ember.isNone(record.get('lat')) || Ember.isNone(record.get('lng'))) {\n          delete onBreakData.data.attributes.vehicle.location;\n        } else {\n          onBreakData.data.attributes.vehicle.location.coord.lat = record.get('lat');\n          onBreakData.data.attributes.vehicle.location.coord.lng = record.get('lng');\n        }\n      } else {\n        onBreakData.data.attributes.vehicle.location.coord.lat = record.get('routeBreak.startPlace.location.lat');\n        onBreakData.data.attributes.vehicle.location.coord.lng = record.get('routeBreak.startPlace.location.lng');\n      }\n\n      return onBreakData;\n    },\n\n    prepareEndBreakData(offBreakData, record, avlmVersion) {\n      offBreakData.data.attributes.trackingId = '1';\n      offBreakData.data.attributes.routeId = record.get('dispatchRoute.route.id');\n      offBreakData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      offBreakData.data.attributes.content.actualTime = record.get('actualDepartTime');\n      offBreakData.data.attributes.content.breakId = record.get('routeBreak.id');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      offBreakData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      offBreakData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      offBreakData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      offBreakData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      offBreakData.data.attributes.vehicle.location.time = record.get('routeBreak.actualDepartTime');\n\n      if (Ember.isNone(record.get('routeBreak.endPlace.location.lat')) || Ember.isNone(record.get('routeBreak.endPlace.location.lng'))) {\n        delete offBreakData.data.attributes.vehicle.location;\n      } else {\n        offBreakData.data.attributes.vehicle.location.coord.lat = record.get('routeBreak.endPlace.location.lat');\n        offBreakData.data.attributes.vehicle.location.coord.lng = record.get('routeBreak.endPlace.location.lng');\n      }\n\n      return offBreakData;\n    },\n\n    prepareBreakAcceptData(onBreakData, record) {\n      let avlmVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      const actualArriveTime = record.get('actualArriveTime') ? record.get('actualArriveTime') : new Date();\n      onBreakData.data.attributes.trackingId = '1';\n      onBreakData.data.attributes.routeId = record.get('dispatchRoute.route.id');\n      onBreakData.data.attributes.routeVersion = avlmVersion || record.get('dispatchRoute.avlmVersion');\n      onBreakData.data.attributes.content.actualTime = actualArriveTime;\n      onBreakData.data.attributes.content.breakId = record.get('routeBreak.id');\n      const assignedDriver = record.get('dispatchRoute.assignedDriver');\n      const assignedVehicle = record.get('dispatchRoute.assignedVehicle');\n      onBreakData.data.attributes.driver.id = '' + assignedDriver.get('id');\n      onBreakData.data.attributes.driver.badgeNr = '' + assignedDriver.get('driverId');\n      onBreakData.data.attributes.vehicle.id = assignedVehicle.get('id');\n      onBreakData.data.attributes.vehicle.callsign = assignedVehicle.get('name');\n      onBreakData.data.attributes.vehicle.location.time = actualArriveTime;\n\n      if (Ember.isNone(record.get('place.location.lat')) || Ember.isNone(record.get('place.location.lng'))) {\n        if (Ember.isNone(record.get('lat')) || Ember.isNone(record.get('lng'))) {\n          delete onBreakData.data.attributes.vehicle.location;\n        } else {\n          onBreakData.data.attributes.vehicle.location.coord.lat = record.get('lat');\n          onBreakData.data.attributes.vehicle.location.coord.lng = record.get('lng');\n        }\n      } else {\n        onBreakData.data.attributes.vehicle.location.coord.lat = record.get('place.location.lat');\n        onBreakData.data.attributes.vehicle.location.coord.lng = record.get('place.location.lng');\n      }\n\n      return onBreakData;\n    },\n\n    prepareCancelDataForTrips(cancelData, record) {\n      let lateCancel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      let tripIds = arguments.length > 3 ? arguments[3] : undefined;\n      cancelData.data.attributes.notes = record.get('cancelNotes');\n      cancelData.data.attributes.lateCancel = lateCancel;\n      cancelData.data.attributes.tripIds = tripIds;\n      cancelData.data.relationships.cancelTypeName.data.id = record.get('cancelType.id');\n      return cancelData;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/schedule-generation\", [\"exports\", \"moment\", \"ember-concurrency\", \"adept-iq/config/api-urls\"], function (_exports, _moment, _emberConcurrency, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const scheduleHost = _apiUrls.API.schedulingService.host; // TODO: derive from agency\n\n  const TIME_ZONE = 'America/Los_Angeles';\n  const NUM_TRIES = 5;\n\n  var _default = Ember.Service.extend({\n    activeContext: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    isRunning: false,\n    timeout: 5000,\n\n    init() {\n      this._super(...arguments);\n    },\n\n    task: (0, _emberConcurrency.task)(function* () {\n      return yield this.performTask();\n    }).drop(),\n\n    performTask() {\n      let dispatchSchedules;\n      let dates = this.getScheduleDates();\n      this.set('isRunning', true);\n      return this.fetchDSSchedulesForDates(dates).then(_schedules => {\n        dispatchSchedules = _schedules;\n        return this.notifyDispatchScheduleGenerated(dispatchSchedules);\n      }).then(() => {\n        dates = this.rejectDSSchedulesDates(dates, dispatchSchedules);\n        const schedules = this.fetchOrCreateSSSchedulesForDates(dates);\n        return Ember.RSVP.hash({\n          ssSchedules: schedules\n        });\n      }).then(_ref => {\n        let {\n          ssSchedules\n        } = _ref;\n        return ssSchedules.reduce(async (acu, ssSchedule) => {\n          this.set('isRunning', true);\n          let res = await this.createScheduleAsyncOperation.perform(ssSchedule, 'import');\n          res = res ? await this.createScheduleAsyncOperation.perform(ssSchedule, 'generate') : false;\n          res = res ? await this.createScheduleAsyncOperation.perform(ssSchedule, 'export') : false;\n          if (!res) this.get('notifications').warning(`Failed To Generate Schedule ${ssSchedule.get('name')}`);\n          return acu.then(() => {\n            this.get('notifications').success(`Successfully Generated Schedule ${ssSchedule.get('name')}`);\n          });\n        }, Promise.resolve());\n      }).then(() => {\n        // no promise to return here; refresh extends well beyond task\n        this.get('activeContext').refreshAll();\n        this.set('isRunning', false);\n      }).catch(err => {\n        this.set('isRunning', false);\n        if (!err || !err.message) return;\n        this.get('notifications').warning(err.message);\n      });\n    },\n\n    getScheduleDates() {\n      const endDate = this.get('workspace.endDate');\n      const startDate = this.get('workspace.startDate');\n      const momentStartDate = (0, _moment.default)(startDate).tz(TIME_ZONE).startOf('day');\n      const maxTime = endDate.valueOf(); // regenerate all days including today and within end time and booking window\n\n      const dates = [];\n      let date = momentStartDate;\n\n      while (date.valueOf() <= maxTime) {\n        dates.push(date);\n        date = date.clone().add(1, 'day');\n      }\n\n      return dates;\n    },\n\n    async fetchOrCreateSSSchedulesForDates(dates) {\n      const filterQuery = 'eq(type,\\'primary\\')';\n      const ssSchedulesQuery = this.store.query('schedule', {\n        filter: filterQuery\n      });\n      const scheduleConfiguration = this.get('store').peekAll('schedule-configuration').firstObject;\n      return Ember.RSVP.all(dates.map(date => {\n        return ssSchedulesQuery.then(ssSchedules => {\n          const dateStart = _moment.default.tz(date, TIME_ZONE).startOf('day');\n\n          const dateEnd = _moment.default.tz(date, TIME_ZONE).endOf('day'); // find any schedule, but not generated\n\n\n          let ssSchedule = ssSchedules.find(curSchedule => {\n            const scheduleStart = _moment.default.tz(curSchedule.get('start'), TIME_ZONE);\n\n            return scheduleStart.startOf('day').valueOf() === dateStart.valueOf();\n          }); // if schedule hasn't been created, create one\n\n          if (ssSchedule) {\n            return Ember.RSVP.resolve(ssSchedule);\n          } // ensure name is unique\n\n\n          const baseName = dateStart.format('YYYY-MM-DD');\n          let name = baseName;\n\n          for (let i = 1;; i++) {\n            if (!ssSchedules.findBy('name', name)) break;\n            name = `${baseName} (${i})`;\n          }\n\n          ssSchedule = this.get('store').createRecord('schedule', {\n            start: dateStart.toDate(),\n            end: dateEnd.toDate(),\n            name,\n            scheduleConfiguration\n          });\n          return ssSchedule.save();\n        });\n      }));\n    },\n\n    rejectDSSchedulesDates(dates, dispatchSchedules) {\n      return dates.reduce((arr, date) => {\n        const dateStart = _moment.default.tz(date, TIME_ZONE).startOf('day');\n\n        const schedule = dispatchSchedules.find(currSchedule => {\n          const scheduleStart = _moment.default.tz(currSchedule.get('schedule.start'), TIME_ZONE);\n\n          return scheduleStart.startOf('day').valueOf() === dateStart.valueOf();\n        });\n\n        if (!schedule) {\n          arr.push(date);\n        }\n\n        return arr;\n      }, []);\n    },\n\n    fetchDSSchedulesForDates(dates) {\n      // TODO: add node to filter for future-only and ditch days altogether\n      const filterQuery = 'eq(type,\\'primary\\')';\n      const SchedulingSchedules = this.store.query('schedule', {\n        filter: filterQuery\n      });\n      const schedulesQuery = this.get('store').findAll('dispatch-schedule');\n      return SchedulingSchedules.then(() => {\n        return schedulesQuery.then(schedules => {\n          return dates.reduce((arr, date) => {\n            const dateStart = _moment.default.tz(date, TIME_ZONE).startOf('day');\n\n            const schedule = schedules.find(currSchedule => {\n              const scheduleStart = _moment.default.tz(currSchedule.get('schedule.start'), TIME_ZONE);\n\n              return scheduleStart.startOf('day').valueOf() === dateStart.valueOf();\n            });\n\n            if (schedule) {\n              arr.push(schedule);\n            }\n\n            return arr;\n          }, []);\n        });\n      });\n    },\n\n    notifyDispatchScheduleGenerated(schedules) {\n      if (Ember.isEmpty(schedules)) return Ember.RSVP.resolve();\n      const notifications = this.get('notifications');\n      schedules.forEach(schedule => {\n        notifications.info(`schedule ${schedule.get('schedule.name')} has already been exported`);\n      });\n    },\n\n    createScheduleAsyncOperation: (0, _emberConcurrency.task)(function* (schedule, operation) {\n      const session = this.get('session');\n      const op = {\n        'data': {\n          'type': 'scheduleAsyncOperation',\n          'attributes': {\n            'operationType': operation\n          },\n          'relationships': {\n            'schedule': {\n              'data': {\n                'type': 'schedule',\n                'id': schedule.get('id')\n              }\n            }\n          }\n        }\n      };\n      const job = yield this.get('ajax').post(scheduleHost + '/schedule-async-operation', {\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        data: op\n      });\n      if (!job) return false;\n      return yield this.get('asyncOperationState').perform(job);\n    }).enqueue(),\n    asyncOperationState: (0, _emberConcurrency.task)(function* (job) {\n      const session = this.get('session');\n      let times = 0;\n\n      while (job.data.attributes.state !== 'success' && job.data.attributes.state !== 'failure' && times++ <= NUM_TRIES) {\n        const delay = this.get('timeout');\n        yield (0, _emberConcurrency.timeout)(delay); // eslint-disable-next-line no-param-reassign\n\n        job = yield this.get('ajax').request(scheduleHost + '/schedule-async-operation/' + job.data.id, {\n          method: 'GET',\n          contentType: 'application/json',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        });\n      }\n\n      return job.data.attributes.state === 'success';\n    }).drop()\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/scheduler\", [\"exports\", \"ember-task-scheduler/services/scheduler\"], function (_exports, _scheduler) {\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 _scheduler.default;\n    }\n  });\n});","define(\"adept-iq/services/scheduling\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n\n    init() {\n      this._super(...arguments);\n    },\n\n    updateIllegalTripsToWaitlistTrips(scheduleId) {\n      return this.get('ajax').request(_apiUrls.API.schedulingService.host + `/schedule/${scheduleId}/waitlist-illegal`, {\n        method: 'PATCH',\n        contentType: 'application/json',\n        headers: {\n          Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n        },\n        data: {}\n      }).then(() => {\n        return true;\n      }).catch(() => {\n        return false;\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/scrollbar-thickness\", [\"exports\", \"ember-scrollable/services/scrollbar-thickness\"], function (_exports, _scrollbarThickness) {\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 _scrollbarThickness.default;\n    }\n  });\n});","define(\"adept-iq/services/session\", [\"exports\", \"ember-simple-auth/services/session\"], function (_exports, _session) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _session.default;\n  _exports.default = _default;\n});","define(\"adept-iq/services/socket-io\", [\"exports\", \"ember-websockets/services/socket-io\"], function (_exports, _socketIo) {\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 _socketIo.default;\n    }\n  });\n});","define(\"adept-iq/services/socket\", [\"exports\", \"moment\", \"md5\", \"adept-iq/config/environment\", \"adept-iq/classes/socket-stream\", \"adept-iq/classes/work-queue\"], function (_exports, _moment, _md, _environment, _socketStream, _workQueue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SOCKET_WORKER_PATH = '/workers/socket.js'; // overrides model name for deletion based on topic message model; optional\n\n  const deleteModelNameForTopicModel = {\n    'message': 'avlm-canned-message',\n    noShow: 'no-show'\n  };\n\n  var _default = Ember.Service.extend({\n    locks: Ember.inject.service(),\n    router: Ember.inject.service(),\n    session: Ember.inject.service(),\n    store: Ember.inject.service(),\n    work: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    avlQueue: null,\n    isClientRegistered: false,\n    isGlobalFilterRegistered: false,\n    sockets: null,\n    _digestLookup: null,\n    isConnected: false,\n    filterSocket: null,\n    socketReconnectCount: Ember.computed.alias('filterSocket.reconnectCount'),\n    isSocketConnected: Ember.computed.alias('filterSocket.isConnected'),\n    socketState: Ember.computed.alias('filterSocket.socketState'),\n    resetSocketFlags: Ember.observer('socketState', function () {\n      if (this.get('socketState') !== 'open') {\n        this.set('isClientRegistered', false);\n        this.set('isGlobalFilterRegistered', false);\n      }\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.initializeSockets();\n      this.initializeAVLQueue();\n      this.resetSocketFlags(); // convenience console methods\n\n      window.disconnectSocket = () => this.disconnect();\n\n      window.connectSocket = (startDate, endDate) => {\n        this.connect({\n          startDate,\n          endDate\n        });\n      };\n\n      this._digestLookup = {};\n    },\n\n    destroy() {\n      this.destroySockets();\n      this.destroyAVLQueue();\n      window.disconnectSocket = null;\n      window.connectSocket = null;\n      this._digestLookup = null;\n\n      this._super(...arguments);\n    },\n\n    initializeSockets() {\n      this._onSocketUnauthorized = socket => {\n        Ember.run.schedule('afterRender', this, 'onSocketUnauthorized', socket);\n      };\n\n      this._onSocketData = (socket, data) => {\n        Ember.run.schedule('afterRender', this, 'onSocketData', socket, data);\n      };\n\n      const sockets = _environment.default.APP.SUBSCRIPTION_TOPICS.map(_ref => {\n        let {\n          topic\n        } = _ref;\n        const worker = new Worker(SOCKET_WORKER_PATH); // share environment variables with worker\n\n        worker.postMessage({\n          action: 'setEnv',\n          ENV: _environment.default\n        });\n\n        const socketStream = _socketStream.default.create({\n          topic,\n          worker\n        });\n\n        this.set('filterSocket', socketStream);\n        socketStream.on('unauthorized', this._onSocketUnauthorized);\n        socketStream.on('data', this._onSocketData);\n        return socketStream;\n      });\n\n      this.set('sockets', sockets);\n    },\n\n    destroySockets() {\n      const sockets = this.get('sockets');\n      sockets.forEach(socket => {\n        socket.off('unauthorized', this._onSocketUnauthorized);\n        socket.off('data', this._onSocketData);\n        socket.get('worker').terminate();\n        socket.destroy();\n      });\n      this._onSocketUnauthorized = null;\n      this._onSocketData = null;\n      this.disconnect();\n      sockets.forEach(socket => {\n        socket.destroy();\n      });\n      sockets.clear();\n      this.set('sockets', null);\n    },\n\n    initializeAVLQueue() {\n      const avlQueueOptions = Object.assign({}, _environment.default.work['skt-avl'], {\n        name: 'skt-avl',\n        perform: jobs => {\n          jobs.forEach(_ref2 => {\n            let {\n              payload\n            } = _ref2;\n            this.processAVLPayload(payload);\n          });\n        },\n        // debounce by vehicle ID\n        uniqBy: 'payload.message.data.relationships.vehicle.data.id'\n      });\n\n      const avlQueue = _workQueue.default.create(avlQueueOptions);\n\n      this.get('work').registerQueue(avlQueue);\n      this.set('avlQueue', avlQueue);\n    },\n\n    destroyAVLQueue() {\n      const avlQueue = this.get('avlQueue');\n      this.get('work').unregisterQueue(avlQueue);\n      avlQueue.destroy();\n      this.set('avlQueue', null);\n    },\n\n    connect() {\n      let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      const startDate = options.startDate || this.get('workspace.startDate');\n      const endDate = options.endDate || this.get('workspace.endDate');\n      const alreadyConnected = this.get('isConnected');\n\n      if (Ember.isNone(startDate) || Ember.isNone(endDate)) {\n        throw new Error('startDate and endDate required');\n      }\n\n      const token = this.get('session.data.authenticated.token');\n\n      if (Ember.isNone(token) && !_environment.default.APP.test) {\n        throw new Error('token required');\n      }\n\n      this.set('isConnected', 'true');\n      this.get('sockets').forEach(socket => {\n        // if it is already connected, we just need to send a new filter\n        if (alreadyConnected) {\n          return;\n        }\n\n        socket.connect(startDate, endDate, token);\n      });\n    },\n\n    getSocketClientId() {\n      return this.get('filterSocket').clientId;\n    },\n\n    disconnect() {\n      this.set('isConnected', false);\n      this.get('sockets').forEach(socket => {\n        socket.disconnect();\n      });\n    },\n\n    onSocketUnauthorized() {\n      const session = this.get('session');\n      if (!this.get('isConnected')) return;\n      this.disconnect(); // if any one socket is unauthorized, nuke them all and log out\n\n      this.get('tooltip').pushConfirmation({\n        tip: 'You do not have the appropriate privileges to view this page. Check with your administrator.',\n        title: 'Permissions',\n        hasOverlay: true,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          Ember.run.later(this, function () {\n            session.invalidate();\n          }, 300);\n          this.get('tooltip').reset();\n        },\n        closeAction: () => {\n          Ember.run.later(this, function () {\n            session.invalidate();\n          }, 300);\n          this.get('tooltip').reset();\n        }\n      });\n    },\n\n    onSocketData(socket, data) {\n      const action = data.header && data.header.action;\n      const batchedEvents = data.body; // Batched Events\n\n      if (batchedEvents && action === 'WIDGET_ENTITY_BATCH_UPDATE_EVENT') {\n        for (let i = 0; i < batchedEvents.length; i++) {\n          this.onSocketPayload(socket, batchedEvents[i]);\n        }\n\n        return;\n      }\n\n      if (batchedEvents && action === 'CORE_ENTITY_BATCH_UPDATE_EVENT') {\n        for (let i = 0; i < batchedEvents.length; i++) {\n          this.onSocketPayload(socket, batchedEvents[i]);\n        }\n\n        return;\n      }\n\n      this.onSocketPayload(socket, data);\n    },\n\n    onSocketPayload(socket, payload) {\n      const action = payload.header && payload.header.action;\n\n      if (action === 'HEARTBEAT_RESPONSE') {\n        return;\n      }\n\n      if (action === 'CLIENT_REGISTERED') {\n        this.set('isClientRegistered', true);\n        return;\n      }\n\n      if (action === 'GLOBAL_FILTER_REGISTERED') {\n        this.set('isGlobalFilterRegistered', true);\n        return;\n      }\n\n      const eventType = payload.eventType;\n\n      if (eventType === 'WIDGET_EVENT') {\n        this.get('widget').receiveWidgetUpdate(payload);\n        return;\n      }\n\n      if (eventType === 'CORE_ENTITY_UPDATE_EVENT') {\n        this.get('widget').receiveCoreEntityUpdate(payload);\n        return;\n      }\n\n      const workspaceContext = this.get('workspaceContext'); // update diagnostics\n\n      if (this.get('workspace.isDiagnosticToolShown')) {\n        const packetPayload = this._createDiagnosticPacketPayload(payload);\n\n        if (packetPayload) {\n          workspaceContext.pushPayload(packetPayload);\n        }\n      } // handle some models differently\n\n\n      switch (payload.model) {\n        case 'avl':\n          {\n            // queue AVL updates, use addJob so we can filter by vehicle id.\n            this.get('avlQueue').addJob({\n              payload\n            });\n            this.get('work').start();\n            return;\n          }\n\n        case 'avlmRouteUpdate':\n        case 'avlmTripPayment':\n          // explicitly not handled\n          console.warn(`Unused ${payload.model} model, currently not cached in the ember data store`); // eslint-disable-line no-console\n\n          return;\n\n        case 'avlmDriverStateEvent':\n          if (!_environment.default.APP.avlmLite) return;\n          break;\n\n        default:\n          break;\n      } // handle based on payload action\n\n\n      switch (payload.action) {\n        case 'INIT':\n          break;\n\n        case 'UPDATE':\n          {\n            if (payload.transformedPayloads) {\n              workspaceContext.pushPayloads(payload.transformedPayloads, payload.model);\n            } else if (payload.payloads) {\n              workspaceContext.pushPayloads(payload.payloads, payload.model);\n            } else if (payload.message) {\n              workspaceContext.pushPayload(payload.message);\n            }\n\n            break;\n          }\n\n        case 'DELETE':\n          {\n            const id = payload.message.id;\n            const castModelName = deleteModelNameForTopicModel[payload.model];\n            const modelName = castModelName || Ember.String.dasherize(payload.model);\n            workspaceContext.removeRecord(modelName, id);\n            break;\n          }\n\n        default:\n          workspaceContext.pushPayloads(payload, payload.model);\n      }\n    },\n\n    processAVLPayload(payload) {\n      if (payload.action !== 'UPDATE') {\n        console.warn(`unhandled avlWidget action '${payload.action}'`); // eslint-disable-line no-console\n\n        return;\n      }\n\n      const store = this.get('store');\n      const {\n        message\n      } = payload;\n      const {\n        id\n      } = message.data.relationships.vehicle.data;\n      let {\n        lat,\n        lng,\n        speed,\n        heading,\n        odo,\n        timestamp\n      } = message.data.attributes;\n      lat = Ember.isPresent(lat) ? parseFloat(lat) : null;\n      lng = Ember.isPresent(lng) ? parseFloat(lng) : null;\n      heading = Ember.isPresent(heading) ? parseFloat(heading) : null;\n      speed = Ember.isPresent(speed) ? parseFloat(speed) : null;\n      odo = Ember.isPresent(odo) ? parseFloat(odo) : null;\n      timestamp = Ember.isPresent(timestamp) ? new Date(timestamp) : null;\n      const vehicle = store.peekRecord(_environment.default.APP.avlmLite ? 'avlm-vehicle' : 'vehicle', id);\n      if (Ember.isNone(vehicle)) return;\n\n      if (vehicle.get('avlLocation')) {\n        vehicle.get('avlLocation').setProperties({\n          lat,\n          lng,\n          heading,\n          speed,\n          odo,\n          timestamp\n        });\n      } else {\n        vehicle.set('avlLocation', store.createFragment('avl-location', {\n          lat,\n          lng,\n          heading,\n          speed,\n          odo,\n          timestamp\n        }));\n      }\n    },\n\n    _createDiagnosticPacketPayload(payload) {\n      const digest = (0, _md.default)(JSON.stringify(payload));\n      if (this._digestLookup[digest]) return;\n      this._digestLookup[digest] = true;\n      return {\n        data: {\n          id: digest,\n          type: 'packet',\n          attributes: {\n            actionType: payload.action,\n            topic: payload.model,\n            message: payload.message,\n            timestamp: (0, _moment.default)().format()\n          }\n        }\n      };\n    },\n\n    sendGlobalFilter(startDate, endDate, selectedProviders, startDateUTC, endDateUTC, scheduleId) {\n      const alreadyConnected = this.get('isConnected');\n\n      if (alreadyConnected) {\n        this.get('filterSocket').sendGlobalFilter(startDate, endDate, selectedProviders, startDateUTC, endDateUTC, scheduleId);\n      }\n    },\n\n    sendWidgetFilter(widgetInstanceId, modelName, filter, offset, limit, sort) {\n      const alreadyConnected = this.get('isConnected');\n\n      if (alreadyConnected) {\n        this.get('filterSocket').sendWidgetFilter(widgetInstanceId, modelName, filter, offset, limit, sort);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/speech\", [\"exports\", \"adept-iq/config/phonetic-substitutions\"], function (_exports, _phoneticSubstitutions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_OPTIONS = {\n    pitch: 1,\n    rate: 0.8\n  };\n  const PREFERRED_VOICE_URI = 'Samantha';\n  const INTERVAL_TIME = 250;\n  const SPEECH_SYNTHESIS = window.speechSynthesis;\n\n  function getVoices() {\n    if (!SPEECH_SYNTHESIS) {\n      return Promise.resolve();\n    }\n\n    return new Promise(function (resolve) {\n      (function checkVoices() {\n        const voices = SPEECH_SYNTHESIS.getVoices();\n\n        if (voices.length === 0) {\n          setTimeout(checkVoices, INTERVAL_TIME);\n        } else {\n          resolve(voices);\n        }\n      })();\n    });\n  }\n\n  var _default = Ember.Service.extend({\n    voiceConfig: null,\n    voiceConfigs: null,\n\n    getVoiceConfig() {\n      const {\n        voiceConfig\n      } = this;\n\n      if (voiceConfig) {\n        return Promise.resolve(voiceConfig);\n      }\n\n      return getVoices().then(voices => {\n        const voiceConfigs = voices.filterBy('lang', 'en-US').map(voice => {\n          return {\n            voice,\n            rate: DEFAULT_OPTIONS.rate,\n            pitch: DEFAULT_OPTIONS.pitch\n          };\n        }); // this.set('voiceConfigs', voiceConfigs);\n\n        const preferredVoiceConfig = voiceConfigs.findBy('voice.voiceURI', PREFERRED_VOICE_URI);\n        return this.set('voiceConfig', preferredVoiceConfig || voiceConfigs[0]);\n      });\n    },\n\n    speak(text) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (!SPEECH_SYNTHESIS) return Promise.resolve();\n      return this.getVoiceConfig().then(voiceConfig => {\n        const phoneticText = _phoneticSubstitutions.phoneticSubstitutions.reduce((str, substitution) => {\n          const {\n            regex,\n            replacement\n          } = substitution;\n          return str.replace(regex, replacement);\n        }, text);\n\n        const utterance = new SpeechSynthesisUtterance(phoneticText);\n        Object.assign(utterance, voiceConfig, options);\n        speechSynthesis.speak(utterance);\n      }).then(() => this.resolveSpeech());\n    },\n\n    // rotateVoiceConfig() {\n    //   const voiceConfig = this.get('voiceConfig');\n    //   const voiceConfigs = this.get('voiceConfigs');\n    //   const index = voiceConfigs.indexOf(voiceConfig);\n    //   const nextIndex = (index + 1) % voiceConfigs.length;\n    //   this.set('voiceConfig', voiceConfigs[nextIndex]);\n    // },\n    resolveSpeech() {\n      if (!SPEECH_SYNTHESIS.speaking) {\n        return Promise.resolve();\n      }\n\n      return new Ember.RSVP.Promise(resolve => {\n        const interval = setInterval(() => {\n          if (!SPEECH_SYNTHESIS.speaking) {\n            clearInterval(interval);\n            resolve();\n          }\n        }, INTERVAL_TIME);\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/stops-reorder\", [\"exports\", \"adept-iq/mixins/version-check\"], function (_exports, _versionCheck) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend(_versionCheck.default, {\n    store: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    reorderInProgress: false,\n    isHidden: false,\n    widget: null,\n    currentState: null,\n    sortByStr: null,\n    dispatchRoute: null,\n    confirmReorderInProgress: false,\n\n    init() {\n      this._super(...arguments);\n\n      Ember.set(this, 'currentState', {});\n    },\n\n    // called when a user starts a reorder in stops widget\n    async startReorder(widget, sortByStr, dispatchRoute, route, stopBreakOrdinals) {\n      const lockRouteAction = this.get('lockRouteAction').bind(this);\n      const lockScheduleRouteAction = this.get('lockScheduleRouteAction').bind(this);\n\n      if (dispatchRoute) {\n        this.set('dispatchRoute', dispatchRoute);\n        this.set('dispatchRouteToCheck', dispatchRoute);\n        this.set('dispatchRouteVersion', dispatchRoute.version);\n        this.set('stopBreakOrdinals', stopBreakOrdinals);\n\n        try {\n          await lockRouteAction(true, 300);\n        } catch (error) {\n          const tooltip = this.get('tooltip');\n          return tooltip.pushConfirmation({\n            tip: 'Unable to require lock, please try again.',\n            title: 'Unable to require lock',\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              tooltip.reset();\n              return this.cancelConfirmReorder();\n            }\n          });\n        }\n      }\n\n      if (route) {\n        this.set('route', route);\n        this.set('routeToCheck', route);\n        this.set('routeVersion', route.version);\n        this.set('stopBreakOrdinals', stopBreakOrdinals);\n\n        try {\n          await lockScheduleRouteAction(true);\n        } catch (error) {\n          const tooltip = this.get('tooltip');\n          return tooltip.pushConfirmation({\n            tip: 'Unable to require lock, please try again.',\n            title: 'Unable to require lock',\n            hasOverlay: true,\n            primaryActionText: 'Confirm',\n            primaryAction: () => {\n              tooltip.reset();\n              return this.cancelConfirmReorder();\n            }\n          });\n        }\n      } // used for disabling the hover \"Locked by\" while reordering\n\n\n      widget.reordering = true;\n      Ember.set(this, 'sortByStr', sortByStr);\n      Ember.set(this, 'widget', widget);\n      this.sortByETA();\n      Ember.set(this, 'reorderInProgress', true);\n    },\n\n    toggleHiddenFlag() {\n      this.toggleProperty('isHidden');\n    },\n\n    // called when a user stops a reorder in stops widget\n    stopReorder() {\n      const unlockRouteAction = this.get('unlockRouteAction').bind(this);\n      const unlockScheduleRouteAction = this.get('unlockScheduleRouteAction').bind(this);\n      const dispatchRoute = this.get('dispatchRoute');\n      const route = this.get('route');\n      let currentState = this.get('currentState');\n      Ember.set(this, 'widget.state', {\n        sortId: 'id',\n        sortAsc: true,\n        reordering: false\n      });\n\n      if (Object.keys(currentState).length === 0 && currentState.constructor === Object) {\n        currentState = {\n          sortId: 'id',\n          sortAsc: true\n        };\n      }\n\n      setTimeout(async function () {\n        Ember.set(this, 'widget.state', currentState);\n        Ember.set(this, 'currentState', null);\n        Ember.set(this, 'reorderInProgress', false);\n        Ember.set(this, 'confirmReorderInProgress', false);\n\n        if (dispatchRoute) {\n          await unlockRouteAction(0);\n          this.set('dispatchRoute');\n          this.set('stopBreakOrdinals');\n          this.set('dispatchRouteToCheck');\n        }\n\n        if (route) {\n          await unlockScheduleRouteAction(0);\n          this.set('route');\n          this.set('stopBreakOrdinals');\n          this.set('routeToCheck');\n        }\n      }.bind(this), 1000);\n    },\n\n    // called when a user confirms a reorder in stops widget\n    confirmReorder() {\n      Ember.set(this, 'confirmReorderInProgress', true);\n      this.get('workspace').requestWootricSurvey('on_reorderStops');\n    },\n\n    cancelConfirmReorder() {\n      Ember.set(this, 'confirmReorderInProgress', false);\n    },\n\n    sortByETA() {\n      const sortByStr = this.get('sortByStr');\n      const oldState = this.get('widget.state') || {};\n      Ember.set(this, 'widget.state', {\n        sortId: sortByStr,\n        sortAsc: true,\n        reordering: true\n      });\n      Ember.set(this, 'currentState', oldState);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/subscription-activitylog-generation\", [\"exports\", \"moment\", \"lodash\"], function (_exports, _moment, _lodash) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const RECCURENCE_PATTERNS_DATA = [{\n    sunday: 'sunday'\n  }, {\n    monday: 'monday'\n  }, {\n    tuesday: 'tuesday'\n  }, {\n    wednesday: 'wednesday'\n  }, {\n    thursday: 'thursday'\n  }, {\n    friday: 'friday'\n  }, {\n    saturday: 'saturday'\n  }, {\n    holiday: 'holiday'\n  }, {\n    suspendType: 'type'\n  }];\n  const EXCLUSION_DATA = [{\n    suspend: 'exclusions.firstObject.suspend'\n  }, {\n    suspendStart: 'exclusions.firstObject.startDate'\n  }, {\n    suspendEnd: 'exclusions.firstObject.endDate'\n  }, {\n    type: 'exclusions.firstObject.type'\n  }];\n  const ANCHOR_FARE_DATA = [{\n    anchor: 'anchor'\n  }, {\n    fare: 'fare'\n  }];\n  const PICK_AND_DROP_DATA = [{\n    'PickUp Address': 'activeBooking.firstSegmentInFirstLeg.pick.place.address.fullAddress'\n  }, {\n    'DropOff Address': 'activeBooking.firstSegmentInFirstLeg.drop.place.address.fullAddress'\n  }, {\n    'PickUp Notes': 'activeBooking.firstSegmentInFirstLeg.pick.notes'\n  }, {\n    'DropOff Notes': 'activeBooking.firstSegmentInFirstLeg.drop.notes'\n  }];\n  const OTHER_TR_NEEDS = [{\n    loadTime: 'activeBooking.legs.firstObject.loadTime'\n  }, {\n    unloadTime: 'activeBooking.legs.firstObject.unloadTime'\n  }, {\n    isPca: 'activeBooking.legs.firstObject.isPcaAvailable'\n  }];\n\n  var _default = Ember.Service.extend({\n    booking: Ember.inject.service(),\n    subscription: Ember.inject.service(),\n\n    /**\n     * NYAAR-19927: create activityLog for edit-subscription\n     * @param {*Object} update\n     * @param {*Object} previous\n     * @param {*} exclude\n     * @returns\n     */\n    activityLogDifference(update, previous, exclude) {\n      const activityLogMessages = [];\n      const saveSubscriptionRecord = [];\n\n      const changes = (object, base, ancestors, curr) => {\n        ancestors.push(curr);\n        return _lodash.default.transform(object, (result, value, key) => {\n          if (!Array.isArray(value)) {\n            const currentValue = Array.isArray(value.activityLogKey) ? JSON.stringify(value.activityLogKey) : value.activityLogKey;\n            const previousValue = Array.isArray(base[key].activityLogKey) ? JSON.stringify(base[key].activityLogKey) : base[key].activityLogKey;\n\n            if (!_lodash.default.isEqual(currentValue, previousValue) && _lodash.default.indexOf(exclude, key) === -1) {\n              if (_lodash.default.isObject(currentValue) && _lodash.default.isObject(previousValue)) {\n                changes(currentValue, previousValue, ancestors, key);\n              } else {\n                result[key] = [currentValue, previousValue];\n                const editSubscriptionRecord = value.editSubscription;\n                this.prepareLogMessageAndEditedRecord(key, previousValue, currentValue, activityLogMessages, saveSubscriptionRecord, editSubscriptionRecord);\n              }\n            }\n          } else {\n            _lodash.default.forEach(value, element => {\n              const currentValue = element.activityLogKey;\n              const currentLogKey = element.logKey;\n              const previousValue = base[key].filter(item => item.logKey === currentLogKey)[0].activityLogKey;\n\n              if (!_lodash.default.isEqual(currentValue, previousValue) && _lodash.default.indexOf(exclude, key) === -1) {\n                if (_lodash.default.isObject(currentValue) && _lodash.default.isObject(previousValue) && !(currentValue instanceof Date) && !(previousValue instanceof Date)) {\n                  changes(currentValue, previousValue, ancestors, key);\n                } else {\n                  result[key] = [currentValue, previousValue];\n                  const editSubscriptionRecord = element.editSubscription;\n                  this.prepareLogMessageAndEditedRecord(element.logKey, previousValue, currentValue, activityLogMessages, saveSubscriptionRecord, editSubscriptionRecord);\n                }\n              }\n            });\n          }\n        });\n      };\n\n      changes(update, previous, [], null);\n      return {\n        activityLogMessages,\n        saveSubscriptionRecord\n      };\n    },\n\n    /**\n     * NYAAR-19927: creating activityLog of changed values during editing subscription record\n     * @param {*String} key\n     * @param {*String} previousValue\n     * @param {*String} currentValue\n     * @param {*Array} activityLogMessages\n     * @param {*Array} saveSubscriptionRecord\n     * @param {*Object} editSubscriptionRecord\n     */\n    prepareLogMessageAndEditedRecord(key, previousValue, currentValue, activityLogMessages, saveSubscriptionRecord, editSubscriptionRecord) {\n      if (key !== 'id' && key !== 'travelNeeds') {\n        activityLogMessages.push(` ${_lodash.default.capitalize(key)} changed from ${previousValue === '' ? '<empty>' : previousValue} to ${currentValue === '' ? '<empty>' : currentValue}`);\n      }\n\n      if (key !== 'id' && editSubscriptionRecord) {\n        saveSubscriptionRecord.push(editSubscriptionRecord);\n      }\n\n      if (key === 'travelNeeds') {\n        this.set('subscription.isTravelNeedEdited', true);\n      }\n    },\n\n    /**\n     * NYAAR-19927: creating previous and current value of subscription data for activityLog purpose\n     * @param {*Object} subscription\n     * @param {*Object} subscriptionData\n     * @returns\n     */\n    subscriptionDataForActivityLog(subscription, subscriptionData) {\n      const passengerNotes = {\n        activityLogKey: subscription.get('rider.notes'),\n        editSubscription: this.booking.get('selectedRiders.firstObject')\n      };\n      const passengerPhoneNumber = {\n        activityLogKey: subscription.get('rider.riderPhoneNumber.formattedPhoneNumber'),\n        editSubscription: this.booking.get('selectedRiders.firstObject')\n      };\n      const pickAndDropData = this.createObjectArrayDataForLog(PICK_AND_DROP_DATA, this.booking, subscription);\n      const pickPhoneNumber = {};\n      const dropPhoneNumber = {};\n      subscription.get('phoneNumbers').filter(phoneNumber => phoneNumber.description === 'ORIGIN NUMBER').map(number => {\n        pickPhoneNumber.activityLogKey = number.fullPhoneNumber;\n      });\n      subscription.get('phoneNumbers').filter(phoneNumber => phoneNumber.description === 'DESTINATION NUMBER').map(number => {\n        dropPhoneNumber.activityLogKey = number.fullPhoneNumber;\n      });\n      const AnchorFareData = this.createObjectArrayDataForLog(ANCHOR_FARE_DATA, subscription, subscription);\n      const serviceType = {\n        activityLogKey: subscription.get('serviceWindow.name'),\n        editSubscription: subscription.get('serviceWindow')\n      };\n      const schedulingMode = {\n        activityLogKey: subscription.get('schedulingMode'),\n        editSubscription: subscription\n      };\n      const noSharing = {\n        activityLogKey: subscription.get('noSharing'),\n        editSubscription: subscription\n      };\n      const originPlannedEta = {\n        activityLogKey: (0, _moment.default)(subscription.get('originPlannedEta')).format('HH:mm'),\n        editSubscription: subscription\n      };\n      const destinationPlannedEta = {\n        activityLogKey: (0, _moment.default)(subscription.get('destinationPlannedEta')).format('HH:mm'),\n        editSubscription: subscription\n      };\n      const routeTemplate = {\n        activityLogKey: subscription.get('routeTemplate.name'),\n        editSubscription: subscription\n      };\n      const travelNeeds = {};\n      const filteredTravelNeeds = subscription.get('subscriptionTravelNeeds').map(travelNeed => {\n        const travelNeedObj = {};\n        const travelNeedTypeName = travelNeed.get('travelNeedTypeNameUppercase');\n        const countName = `${travelNeedTypeName}_count`;\n        travelNeedObj.travelNeedTypeName = travelNeed.get('travelNeedTypeNameUppercase');\n        travelNeedObj[countName] = travelNeed.get('count');\n        travelNeedObj.compareKey = 'travelNeedTypeName';\n        return travelNeedObj;\n      });\n      travelNeeds.activityLogKey = filteredTravelNeeds;\n      const otherTravelNeeds = this.createObjectArrayDataForLog(OTHER_TR_NEEDS, this.booking, this.booking.get('selectedRiders.firstObject'));\n      const companionCount = {\n        activityLogKey: this.booking.get('selectedCompanionCount')\n      };\n      const subscriptionServiceNeeds = {\n        activityLogKey: subscription.get('subscriptionServiceNeeds').map(serviceNeed => serviceNeed.get('serviceNeedType.displayName'))\n      };\n      const startDate = {\n        activityLogKey: (0, _moment.default)(subscription.get('startDate')).format('DD/MM/YYYY'),\n        editSubscription: subscription\n      };\n      const endDate = {\n        activityLogKey: (0, _moment.default)(subscription.get('endDate')).format('DD/MM/YYYY'),\n        editSubscription: subscription\n      };\n      const requestTime = {\n        activityLogKey: (0, _moment.default)(subscription.get('requestTime')).format('DD/MM/YYYY LTS'),\n        editSubscription: subscription\n      };\n      const reccurencePatternsData = this.createObjectArrayDataForLog(RECCURENCE_PATTERNS_DATA, subscriptionData, subscription.get('latestRecurrence'));\n      const suspendData = this.createObjectArrayDataForLog(EXCLUSION_DATA, subscription, subscription.get('exclusions.firstObject'));\n      return {\n        'Passenger Notes': passengerNotes,\n        'Passenger PhoneNumber': passengerPhoneNumber,\n        serviceType,\n        companionCount,\n        subscriptionServiceNeeds,\n        startDate,\n        endDate,\n        'PickUp PhoneNumber': pickPhoneNumber,\n        'DropOff PhoneNumber': dropPhoneNumber,\n        requestTime,\n        travelNeeds,\n        reccurencePatternsData,\n        suspendData,\n        AnchorFareData,\n        pickAndDropData,\n        otherTravelNeeds,\n        'Scheduling Mode': schedulingMode,\n        'Manual Pick Time': originPlannedEta,\n        'Manual Drop Time': destinationPlannedEta,\n        'Manual Route': routeTemplate,\n        'Ride Share': noSharing\n      };\n    },\n\n    /**\n     * NYAAR-19927: creating array of object for activityLog purpose\n     * @param {*Array} arrayData\n     * @param {*Array} activityData\n     * @param {*Object} editSubscriptionData\n     * @returns {*Array}\n     */\n    createObjectArrayDataForLog(arrayData, activityData, editSubscriptionData) {\n      return arrayData.map(reccurencePattern => {\n        const keyValuePair = Object.entries(reccurencePattern)[0];\n        return {\n          activityLogKey: activityData.get(keyValuePair[1]),\n          editSubscription: editSubscriptionData,\n          logKey: keyValuePair[0]\n        };\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/subscription\", [\"exports\", \"adept-iq/classes/json-api-serializer/JSONAPISerializer\", \"adept-iq/config/api-urls\", \"moment\", \"lodash\", \"adept-iq/utils/unwrapProxy\"], function (_exports, _JSONAPISerializer, _apiUrls, _moment, _lodash, _unwrapProxy) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const EXCLUDED_TRAVELNEED = ['AMBULATORY'];\n\n  var _default = Ember.Service.extend({\n    session: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    subscriptionLogGeneration: Ember.inject.service('subscription-activitylog-generation'),\n    serializer: null,\n    noSharing: 0,\n    updatedActivityLogData: null,\n    defaultActivityLogData: null,\n    isTravelNeedEdited: false,\n    previousSchedulingMode: null,\n    previousOriginPlannedEta: null,\n    previousDestinationPlannedEta: null,\n    previousRouteTemplate: null,\n    previousSubscriptionDays: null,\n    pickTime: '',\n    dropTime: '',\n    pickTimeMoment: null,\n    dropTimeMoment: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.serializer = new _JSONAPISerializer.default(); //Register 'subscription' type\n\n      this.serializer.register('subscription', {\n        id: 'id',\n        relationships: {\n          originPlace: {\n            type: 'place'\n          },\n          destinationPlace: {\n            type: 'place'\n          },\n          rider: {\n            type: 'rider'\n          },\n          group: {\n            type: 'subscriptionGroup'\n          },\n          exclusions: {\n            type: 'subscriptionExclusion'\n          },\n          recurrencePatterns: {\n            type: 'subscriptionRecurrencePattern'\n          },\n          bookings: {\n            type: 'generatedSubscriptionBooking'\n          },\n          travelNeeds: {\n            type: 'subscriptionTravelNeed'\n          },\n          originPhoneNumber: {\n            type: 'subscriptionPhoneNumber'\n          },\n          destinationPhoneNumber: {\n            type: 'subscriptionPhoneNumber'\n          },\n          tripPurposeName: {\n            type: 'tripPurposeName'\n          },\n          fareCategoryName: {\n            type: 'fareCategoryName'\n          },\n          routeTemplate: {\n            type: 'routeTemplate'\n          }\n        }\n      });\n      this.serializer.register('place', {\n        id: 'id'\n      });\n      this.serializer.register('rider', {\n        id: 'id'\n      });\n      this.serializer.register('subscriptionTravelNeed', {\n        id: 'id'\n      });\n      this.serializer.register('subscriptionGroup', {\n        id: 'id'\n      });\n      this.serializer.register('subscriptionExclusion', {\n        id: 'id'\n      });\n      this.serializer.register('subscriptionRecurrencePattern', {\n        id: 'id'\n      });\n      this.serializer.register('generatedSubscriptionBooking', {\n        id: 'id'\n      });\n      this.serializer.register('address', {\n        id: 'id'\n      });\n      this.serializer.register('location', {\n        id: 'id'\n      });\n      this.serializer.register('subscriptionPhoneNumber', {\n        id: 'id'\n      });\n      this.serializer.register('tripPurposeName', {\n        id: 'id'\n      });\n      this.serializer.register('fareCategoryName', {\n        id: 'id'\n      });\n      this.serializer.register('routeTemplate', {\n        id: 'id'\n      });\n    },\n\n    saveSubscription(subscription, isEditMode, travelNeeds) {\n      return new Promise(async (resolve, reject) => {\n        if (isEditMode) {\n          const subcription = await this.updateSubscription(subscription, travelNeeds).then(data => resolve(data)).catch(err => reject(err));\n          const payload = this.convertSubscriptionUpdateRecordToPayloadFormat(subscription);\n          const id = subscription.get('id');\n          this.get('ajax').post(_apiUrls.API.bookingService.host + `/subscription/${id}`, {\n            method: 'PATCH',\n            contentType: 'application/json',\n            headers: {\n              Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n            },\n            data: JSON.stringify(payload)\n          }).then(res => {\n            resolve(res);\n          }).catch(err => {\n            reject(err);\n          });\n          return subcription;\n        }\n\n        const payload = this.convertSubscriptionCreateRecordToPayloadFormat(subscription, travelNeeds, false);\n        this.get('ajax').post(_apiUrls.API.bookingService.host + '/subscription-with-subentity', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${this.get('session.data.authenticated.token')}`\n          },\n          data: JSON.stringify(payload)\n        }).then(res => {\n          resolve(res);\n        }).catch(err => {\n          reject(err);\n        });\n      });\n    },\n\n    /**\n     * NYAAR-19927: saving changes for edit subscription\n     * @param {*Object} subscription\n     * @param {*Array} travelNeeds\n     */\n    async updateSubscription(subscription, travelNeeds) {\n      const currentUser = this.session.data.authenticated.userId;\n      const subscriptionId = subscription.get('id');\n      const activityLogAdapter = this.get('store').adapterFor('activity-log');\n      await this.prepareSubscriptionUpdateRawData(subscription);\n      const {\n        activityLogMessages,\n        saveSubscriptionRecord\n      } = await this.get('subscriptionLogGeneration').activityLogDifference(this.get('updatedActivityLogData'), this.get('defaultActivityLogData'), ['relationships', 'jsonapi', 'links'], subscription, travelNeeds);\n      await Promise.all(saveSubscriptionRecord.uniqBy('id').map(data => {\n        (0, _unwrapProxy.unwrapProxy)(data).save();\n      })).then(async () => {\n        if (this.get('isTravelNeedEdited')) await this.createAndBuildSubscriptionTravelNeeds(subscription, this.refactorTNs(travelNeeds));\n        const content = {\n          userId: currentUser,\n          actualTime: (0, _moment.default)().toDate(),\n          activity: 'Changed',\n          details: `Subscription modified. ${activityLogMessages.join(';')}`\n        };\n        activityLogAdapter.createUpdateSubscriptionActivity({\n          content\n        }, subscriptionId);\n        this.set('isTravelNeedEdited', false);\n      }).catch(err => {\n        return err;\n      });\n    },\n\n    convertSubscriptionCreateRecordToPayloadFormat(subscriptionRecord, travelNeeds) {\n      const subscriptionRawData = this.prepareSubscriptionCreateRawData(subscriptionRecord, travelNeeds);\n      const jsonapi = this.serializer.serialize('subscription', subscriptionRawData);\n      const payload = this.prepareFinalPayloadForSubscription(jsonapi);\n      return payload;\n    },\n\n    convertSubscriptionUpdateRecordToPayloadFormat(subscriptionRecord) {\n      const payload = this.prepareSubscriptionPatchRawData(subscriptionRecord);\n      return payload;\n    },\n\n    prepareRouteTemplate(routeTemplate) {\n      return {\n        id: routeTemplate.get('id'),\n        type: 'routeTemplate'\n      };\n    },\n\n    prepareSubscriptionCreateRawData(subscriptionRecord, subTravelNeeds) {\n      const leg = this.booking.get('activeBooking.legs.firstObject');\n      const serviceWindowName = leg.get('serviceWindow.name');\n      const fundingAgencyName = leg.get('fundingAgency.name');\n      const tripPurposeName = subscriptionRecord.get('tripPurpose.name');\n      const fareCategoryName = subscriptionRecord.get('fareCategory.name');\n      const segment = leg.get('segments.firstObject');\n      const origin = leg.get('segments.firstObject.pick.place');\n      const destination = leg.get('segments.firstObject.drop.place');\n      const exclusions = this.prepareExclusions(subscriptionRecord.get('exclusions'));\n      const recurrencePatternsArray = [subscriptionRecord.get('recurrencePatterns').sortBy('id').get('lastObject')];\n      const recurrencePatterns = this.prepareReccurencePatterns(recurrencePatternsArray);\n      const provider = this.store.peekAll('provider.firstObject');\n      const rider = this.booking.prepareRider(this.booking.get('selectedRiders.firstObject'));\n      const travelNeeds = this.prepareSubscriptionTravelNeeds(this.refactorTNs(subTravelNeeds));\n      const routeTemplate = this.prepareRouteTemplate(subscriptionRecord.get('routeTemplate'));\n      return {\n        providerName: provider.get('providerName'),\n        //\n        requestTime: leg.get('requestTime'),\n        anchor: leg.get('anchor'),\n        noSharing: this.get('noSharing'),\n        purpose: leg.get('purpose'),\n        serviceWindowName,\n        fundingAgencyName,\n        tripPurposeName,\n        fareCategoryName,\n        fare: segment.get('fare'),\n        fareTypeName: 'cash',\n        legNotes: leg.get('notes'),\n        originNotes: leg.get('segments.firstObject.pick.notes'),\n        destinationNotes: leg.get('segments.lastObject.drop.notes'),\n        startDate: subscriptionRecord.get('startDate'),\n        endDate: subscriptionRecord.get('endDate'),\n        status: subscriptionRecord.get('status'),\n        maximumOccurrences: subscriptionRecord.get('maximumOccurrences'),\n        remainingOccurrences: subscriptionRecord.get('remainingOccurrences'),\n        originPlace: this.preparePlace(origin, '-1'),\n        destinationPlace: this.preparePlace(destination, '-2'),\n        schedulingMode: subscriptionRecord.get('schedulingMode'),\n        originPlannedEta: subscriptionRecord.get('originPlannedEta'),\n        destinationPlannedEta: subscriptionRecord.get('destinationPlannedEta'),\n        rider,\n        exclusions,\n        recurrencePatterns,\n        travelNeeds,\n        routeTemplate\n      };\n    },\n\n    prepareSubscriptionPatchRawData(subscriptionRecord) {\n      const leg = this.booking.get('activeBooking.legs.firstObject');\n      const serviceWindowName = leg.get('serviceWindow.name');\n      const fundingAgencyName = leg.get('fundingAgency.name');\n      const tripPurposeName = subscriptionRecord.get('tripPurpose.name');\n      const fareCategoryName = subscriptionRecord.get('fareCategory.name');\n      const rawData = {\n        data: {\n          id: subscriptionRecord.get('id'),\n          type: 'subscription',\n          relationships: {\n            serviceWindowName: {\n              data: {\n                type: 'serviceWindowName',\n                id: serviceWindowName\n              }\n            }\n          }\n        }\n      };\n\n      if (!(0, _lodash.isNil)(fundingAgencyName)) {\n        rawData.data.relationships.fundingAgencyName = {\n          data: {\n            type: 'fundingAgencyName',\n            id: fundingAgencyName\n          }\n        };\n      }\n\n      if (!(0, _lodash.isNil)(tripPurposeName)) {\n        rawData.data.relationships.tripPurposeName = {\n          data: {\n            type: 'tripPurposeName',\n            id: tripPurposeName\n          }\n        };\n      }\n\n      if (!(0, _lodash.isNil)(fareCategoryName)) {\n        rawData.data.relationships.fareCategoryName = {\n          data: {\n            type: 'fareCategoryName',\n            id: fareCategoryName\n          }\n        };\n      }\n\n      return rawData;\n    },\n\n    /**\n     * method is used to remove the empty data value\n     * @param {Object} payload\n     */\n    removeEmptyRelationshipData(payload) {\n      const relationships = payload.data.relationships;\n      (0, _lodash.forEach)(relationships, (value, key) => {\n        if (!value.data) {\n          delete relationships[key];\n        }\n      });\n    },\n\n    /**\n     * NYAAR-19927: prepare Data for edit subcription\n     * @param {*Object} subscriptionRecord\n     */\n    async prepareSubscriptionUpdateRawData(subscriptionRecord) {\n      const id = subscriptionRecord.get('id');\n      const leg = this.booking.get('activeBooking.legs.firstObject');\n      const fundingAgency = leg.get('fundingAgency');\n      const segment = leg.get('segments.firstObject');\n      const origin = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.pick.place'));\n      const destination = (0, _unwrapProxy.unwrapProxy)(leg.get('segments.firstObject.drop.place'));\n      const originPlace = await this.createAndPreparePlace(origin);\n      const destinationPlace = await this.createAndPreparePlace(destination);\n      await this.saveSubscriptionPhoneNumber(id, subscriptionRecord);\n      subscriptionRecord.set('origin', originPlace);\n      subscriptionRecord.set('destination', destinationPlace);\n      subscriptionRecord.set('originNotes', leg.get('segments.firstObject.pick.notes'));\n      subscriptionRecord.set('destinationNotes', leg.get('segments.lastObject.drop.notes'));\n      subscriptionRecord.set('legNotes', leg.get('notes'));\n      subscriptionRecord.set('fare', segment.get('fare'));\n      subscriptionRecord.set('anchor', leg.get('anchor'));\n      subscriptionRecord.set('noSharing', this.get('noSharing'));\n      subscriptionRecord.set('requestTime', leg.get('requestTime'));\n      subscriptionRecord.set('fundingAgency', fundingAgency);\n    },\n\n    createCloneLegTravelNeedRecord(cloneLegTravelNeed) {\n      const store = this.get('store');\n      const travelNeedType = (0, _unwrapProxy.unwrapProxy)(cloneLegTravelNeed.get('travelNeedType'));\n      const passengerType = (0, _unwrapProxy.unwrapProxy)(cloneLegTravelNeed.get('passengerType'));\n      const subscription = (0, _unwrapProxy.unwrapProxy)(cloneLegTravelNeed.get('subscription'));\n      const legTravelNeedAttr = cloneLegTravelNeed.toJSON();\n      const legTravelNeed = store.createRecord('subscription-travel-need', legTravelNeedAttr);\n      legTravelNeed.set('travelNeedType', travelNeedType);\n      legTravelNeed.set('passengerType', passengerType);\n      legTravelNeed.set('subscription', subscription);\n      legTravelNeed.set('isCloned', true);\n      return legTravelNeed;\n    },\n\n    refactorTNs(legTravelNeedRecords) {\n      const travelNeedTypes = this.store.peekAll('travel-need-type');\n      const bigSeatsTN = travelNeedTypes.toArray().filter(tr => parseInt(tr.get('vehicleCapacityCount'), 10) === 2);\n      const bigSeatTRs = bigSeatsTN.map(tr => tr.get('name').toUpperCase());\n      const legTravelNeeds = this.filterConsumableTravelNeeds(legTravelNeedRecords);\n      const bigSeatTravelneeds = legTravelNeeds.filter(travelNeed => {\n        return bigSeatTRs.includes(travelNeed.get('travelNeedTypeNameUppercase')) && !travelNeed.get('isCloned');\n      });\n      const uniqBigTns = {};\n      bigSeatTravelneeds.forEach(t => {\n        const type = t.get('travelNeedTypeNameUppercase');\n\n        if (!uniqBigTns[type]) {\n          uniqBigTns[type] = this.createCloneLegTravelNeedRecord(t);\n          return;\n        }\n\n        uniqBigTns[type].set('count', parseInt(t.count, 10) + parseInt(uniqBigTns[type].count, 10));\n      });\n      const otherTravelNeeds = legTravelNeeds.filter(travelNeed => {\n        return !bigSeatTRs.includes(travelNeed.get('travelNeedTypeNameUppercase'));\n      });\n      const uniqBigTRNs = Object.values(uniqBigTns);\n      return [...otherTravelNeeds, ...uniqBigTRNs];\n    },\n\n    // todo : remove this logic in the future when the payload is json api complacent\n    prepareFinalPayloadForSubscription(jsonApi) {\n      const included = jsonApi.included.map(entity => {\n        if (entity.type === 'place') {\n          const address = entity.attributes.address;\n          const location = entity.attributes.location;\n          delete entity.attributes.address;\n          delete entity.attributes.location;\n          return { ...entity,\n            relationships: {\n              address: {\n                data: {\n                  type: 'address',\n                  ...address\n                }\n              },\n              location: {\n                data: {\n                  type: 'location',\n                  ...location\n                }\n              }\n            }\n          };\n        }\n\n        return entity;\n      });\n      return {\n        data: jsonApi.data,\n        included\n      };\n    },\n\n    preparePlace(place, idx) {\n      return {\n        id: idx,\n        placeCategoryTypeName: 'passenger',\n        geocodingMethod: 'something',\n        address: this.booking.prepareAddress(place.get('address'), place.get('address.zoneName.name')),\n        location: this.booking.prepareLocation(place.get('location'))\n      };\n    },\n\n    /**\n     * create a place, address , and location if it's new\n     * @param {Model} place\n     * @returns {Array<{placeCategoryTypeName: string, address: {[p: string]: *}, geocodingMethod: string, location: {lng: *, lat: *, geoNode: *}, id: *}>}\n     */\n    async createAndPreparePlace(place) {\n      const location = (0, _unwrapProxy.unwrapProxy)(place.get('location'));\n\n      if (place.get('isNew')) {\n        const locationData = await this.getOrCreateLocation(location);\n        place.set('location', locationData);\n        const placeData = await this.getOrCreatePlace(place);\n        return placeData;\n      }\n\n      return place;\n    },\n\n    async getOrCreateLocation(location) {\n      const locationQuery = `and(eq(lat,'${location.get('lat')}'),eq(lng,'${location.get('lng')}'))`;\n      const locations = await this.store.query('location', {\n        filter: locationQuery\n      });\n      const locationData = locations.toArray();\n\n      if (locationData.length) {\n        return locationData.firstObject;\n      }\n\n      try {\n        await location.save();\n        return location;\n      } catch (e) {\n        console.error(e);\n      }\n    },\n\n    getMatchedPlace(targetAlias, placeList) {\n      const target = (targetAlias || '').toLowerCase();\n\n      for (const place of placeList) {\n        const alias = (place.address.get('aliasAddress') || '').toLowerCase();\n\n        if (alias === target) {\n          return place;\n        }\n      }\n\n      return null;\n    },\n\n    async getOrCreatePlace(place) {\n      const locationId = place.get('location.id');\n      const address = (0, _unwrapProxy.unwrapProxy)(place.get('address'));\n      const placeQuery = `in(locationId,('${locationId}'))&include=address,location`;\n      const places = await this.store.query('place', {\n        filter: placeQuery\n      });\n      const placeData = places.toArray();\n\n      if (placeData.length) {\n        const matched = this.getMatchedPlace(address.aliasAddress, placeData);\n\n        if (matched) {\n          return matched;\n        }\n      }\n\n      try {\n        await address.save();\n        await place.save();\n        return place;\n      } catch (e) {\n        console.error(e);\n      }\n    },\n\n    getPlacePayload(place) {\n      return {\n        id: place.get('id'),\n        placeCategoryTypeName: 'passenger',\n        geocodingMethod: 'something',\n        address: {\n          id: place.get('address.id'),\n          ...this.booking.prepareAddress(place.get('address'), place.get('address.zoneName.name'))\n        },\n        location: {\n          id: place.get('location.id'),\n          ...this.booking.prepareLocation(place.get('location'))\n        }\n      };\n    },\n\n    prepareSubscriptionTravelNeeds(legTravelNeeds) {\n      const subscriptionTravelNeeds = this.get('booking').filterPcaAndServiceAnimal(legTravelNeeds);\n      return subscriptionTravelNeeds.map((travelNeed, idx) => {\n        const positiveIndex = idx + 1;\n        const subTrNeed = {\n          id: `-${positiveIndex}`,\n          count: travelNeed.get('count'),\n          travelNeedTypeName: travelNeed.get('travelNeedType.id'),\n          passengerTypeName: travelNeed.get('passengerType.id')\n        };\n        return subTrNeed;\n      });\n    },\n\n    /**\n     * create the record if its added\n     * delete the record if it deleted from the UI\n     * @param subscriptionRecord\n     * @param legTravelNeeds\n     * @returns {Array<{operateFlag: *|null, passengerTypeName: *, travelNeedTypeName: *, count: *, id: *}>}\n     */\n    async createAndBuildSubscriptionTravelNeeds(subscriptionRecord, legTravelNeeds) {\n      const subscriptionTravelNeeds = this.get('booking').filterPcaAndServiceAnimal(legTravelNeeds);\n      const newlyCreatedTravelNeeds = subscriptionTravelNeeds.filter(travelNeed => travelNeed.isNew);\n      newlyCreatedTravelNeeds.forEach(tn => tn.set('operateFlag', 'added'));\n      const travelNeedPromises = newlyCreatedTravelNeeds.map(tn => tn.save());\n      const {\n        deletedSubscriptionTravelNeeds,\n        oldSubscriptionTravelNeeds\n      } = this.getDeletedTravelNeeds(subscriptionRecord, subscriptionTravelNeeds);\n      const deletedSubscriptionTravelNeedPromises = deletedSubscriptionTravelNeeds.map(tn => tn.save());\n      const oldSubscriptionTravelNeedsPromises = oldSubscriptionTravelNeeds.map(tn => tn.save());\n      await Promise.all(travelNeedPromises);\n      await Promise.all(deletedSubscriptionTravelNeedPromises);\n      await Promise.all(oldSubscriptionTravelNeedsPromises);\n    },\n\n    /**\n     * get deleted subscriptionTravelNeeds to set the deleted flag for the subscription entity payload\n     * @param {Model} subscriptionRecord\n     * @param {Array} subscriptionTravelNeeds\n     * @returns {Array}\n     */\n    getDeletedTravelNeeds(subscriptionRecord, subscriptionTravelNeeds) {\n      const subscriptionId = subscriptionRecord.get('id');\n      const store = this.get('store');\n      const createdSubscriptionTravelNeedIds = subscriptionTravelNeeds.filter(travelNeed => !travelNeed.isNew).map(subscriptionTravelNeed => subscriptionTravelNeed.get('id'));\n      const allSubscriptionTravelNeeds = store.peekAll('subscription-travel-need').filter(stn => stn.get('subscription.id') === subscriptionId);\n      const deletedSubscriptionTravelNeeds = allSubscriptionTravelNeeds.filter(tn => {\n        return !tn.get('isNew') && !createdSubscriptionTravelNeedIds.includes(tn.get('id'));\n      });\n      const oldSubscriptionTravelNeeds = allSubscriptionTravelNeeds.filter(tn => {\n        return !tn.get('isNew') && createdSubscriptionTravelNeedIds.includes(tn.get('id'));\n      });\n      deletedSubscriptionTravelNeeds.forEach(tn => tn.set('operateFlag', 'deleted'));\n      return {\n        deletedSubscriptionTravelNeeds,\n        oldSubscriptionTravelNeeds\n      };\n    },\n\n    prepareExclusions(exclusions) {\n      const sExclusions = exclusions.map((e, idx) => {\n        const positiveIndex = idx + 1;\n\n        if (e.get('suspend')) {\n          return {\n            id: `-${positiveIndex}`,\n            startDate: e.get('startDate'),\n            endDate: e.get('endDate'),\n            type: e.get('type')\n          };\n        }\n\n        return null;\n      });\n      return sExclusions;\n    },\n\n    /**\n     * used to save only if the attributes are changed\n     * otherwise return null\n     * @param {Model} exclusions - subscription-exclusion\n     * @returns {Object}\n     */\n    async createExclusionsForUpdate(exclusions) {\n      const exclusion = exclusions.firstObject;\n      const isAttributeChanged = exclusion.changedAttributes();\n      const isSuspended = exclusion.get('suspend');\n      const isDeleted = exclusion.get('isDeleted'); // if suspended dates are checked and changes happen in the field\n\n      if (isSuspended && !(0, _lodash.isEmpty)(isAttributeChanged)) {\n        const sExclusionsPromises = exclusions.map(e => e.save());\n        await Promise.all(sExclusionsPromises);\n\n        if (sExclusionsPromises.length) {\n          return this.getSubscriptionExclusionPayload(exclusions);\n        }\n      } // if suspended dates are checked and no changes\n\n\n      if (isSuspended && (0, _lodash.isEmpty)(isAttributeChanged)) {\n        return this.getSubscriptionExclusionPayload(exclusions);\n      } // if suspended dates are unchecked delete the record\n\n\n      if (isDeleted) {\n        await exclusion.save();\n      }\n\n      return null;\n    },\n\n    /**\n       * get exclusion Entity Payload\n       * @param exclusions\n       * @returns {Array}\n       */\n    getSubscriptionExclusionPayload(exclusions) {\n      return exclusions.map(exclusion => ({\n        id: exclusion.get('id'),\n        startDate: exclusion.get('startDate'),\n        endDate: exclusion.get('endDate'),\n        type: exclusion.get('type')\n      }));\n    },\n\n    prepareReccurencePatterns(reccurencePatterns) {\n      return reccurencePatterns.map((r, idx) => {\n        const positiveIndex = idx + 1;\n        return {\n          id: `-${positiveIndex}`,\n          ...r.toJSON()\n        };\n      });\n    },\n\n    /**\n     * save the record if the attributes is changed\n     * @param {subscription-exclusion} reccurencePatterns - Model\n     * @returns {Array<Object>}\n     */\n    async createReccurencePatternsForUpdate(reccurencePatterns) {\n      const isAttributeChanged = reccurencePatterns.firstObject.changedAttributes();\n\n      if (!(0, _lodash.isEmpty)(isAttributeChanged)) {\n        const sReccurencePatternPromises = reccurencePatterns.map(r => r.save());\n        await Promise.all(sReccurencePatternPromises);\n        return reccurencePatterns.map(r => ({\n          id: r.get('id'),\n          ...r.toJSON()\n        }));\n      }\n\n      return reccurencePatterns.map(r => ({\n        id: r.get('id'),\n        ...r.toJSON()\n      }));\n    },\n\n    prepareSubscriptionPhoneNoPayload(phoneNumber) {\n      if (phoneNumber) {\n        return {\n          id: phoneNumber.get('id'),\n          ...phoneNumber.toJSON()\n        };\n      }\n\n      return null;\n    },\n\n    // NYAAR-13442 Booking: Consumable travel needs with count=0 should not be saved in leg travel needs tables\n    filterConsumableTravelNeeds(legTravelNeedRecords) {\n      const travelNeedItems = this.get('booking.travelNeedItems'); // NYAAR-19052 -On editing subscription, should display Ambulatory in 1st row of Travel Need Although count is 0.\n\n      const consumableTravelNeeds = travelNeedItems.toArray().filter(tr => {\n        const trName = tr.get('name').toUpperCase();\n        return parseInt(tr.get('vehicleCapacityCount'), 10) > 0 && !EXCLUDED_TRAVELNEED.includes(trName);\n      });\n      const TR_N_TO_NOT_SAVE_IF_COUNT_ZERO = consumableTravelNeeds.map(tr => tr.get('name').toUpperCase());\n      return legTravelNeedRecords.filter(lt => !(TR_N_TO_NOT_SAVE_IF_COUNT_ZERO.indexOf(lt.get('travelNeedTypeNameUppercase')) > -1 && parseInt(lt.get('count'), 10) === 0));\n    },\n\n    async fetchFutureTrips(subscriptionId) {\n      try {\n        let subscriptionTrips = await this.get('booking').fetchSubscriptionTrips(subscriptionId);\n        subscriptionTrips = (0, _lodash.flattenDeep)(subscriptionTrips);\n        let futureTrips = this.filterFutureTrips(subscriptionTrips);\n        const futureTripIds = futureTrips.map(function (trip) {\n          return trip && trip.id;\n        });\n        const futureTripsIdsInClause = futureTripIds.map(t => `'${t}'`).join(',');\n        const stopByTripId = `in(trip,(${futureTripsIdsInClause}))`;\n        const dispatchTrips = await this.get('store').query('stop-point', {\n          filter: stopByTripId\n        });\n\n        if ((0, _lodash.isEmpty)(dispatchTrips)) {\n          futureTrips = this.get('booking.currentTrips').filter(trip => futureTripIds.includes(trip.get('id')));\n          return this.addIsCheckedPropertySubscriptionTrips(futureTrips) || [];\n        }\n\n        futureTrips = (0, _lodash.uniqBy)(dispatchTrips.toArray(), ft => ft.get('trip.tripId'));\n        const dispatchIds = futureTrips.map(trip => trip.get('trip.tripId'));\n        const tripIds = this.differenceDispatchTrips(dispatchIds, futureTripIds);\n        futureTrips = this.get('booking.currentTrips').filter(trip => tripIds.includes(trip.get('id')));\n        return this.addIsCheckedPropertySubscriptionTrips(futureTrips) || [];\n      } catch (e) {\n        console.error(e);\n      }\n    },\n\n    filterFutureTrips(trips) {\n      const futureTrips = trips.filter(trip => {\n        this.tripHaveNoPromiseTimeAndLegRequestTime(trip);\n        const promiseTime = trip.attributes.promiseTime && (0, _moment.default)(trip.attributes.promiseTime);\n        const currentTime = (0, _moment.default)().startOf('day');\n        const currentDate = (0, _moment.default)(currentTime).format('YYYY-MM-DD');\n        const promiseDate = (0, _moment.default)(promiseTime).format('YYYY-MM-DD');\n        const greaterThanPromiseTime = promiseTime ? currentTime.isBefore(promiseTime) && ((0, _moment.default)(promiseDate).isAfter(currentDate) || (0, _moment.default)(promiseDate).isSame(currentDate)) : false;\n        const status = trip.attributes.status && trip.attributes.status.toLowerCase();\n        return greaterThanPromiseTime && status !== 'canceled';\n      });\n      const sortedTrips = futureTrips.sortBy('tripId'); //NYAAR-19331-single leg is created with two trips for database purpose,uniq those trips for cancellation trips\n\n      const uniqTrips = sortedTrips.reverse().uniqBy('relationships.segment.data.id');\n      return uniqTrips || [];\n    },\n\n    filterExportedTrips(tripEntitis) {\n      const exportedTrips = tripEntitis.filter(trip => !trip.get('schedule.isExported'));\n      return exportedTrips || [];\n    },\n\n    tripHaveNoPromiseTimeAndLegRequestTime(trip) {\n      const hasPromiseTime = trip.attributes.hasOwnProperty('promiseTime');\n\n      if (!hasPromiseTime) {\n        const bookingId = trip.relationships.booking.data.id;\n        const bookingInfo = this.get('booking.currentBookings').find(booking => booking.get('id') === bookingId);\n\n        if (bookingInfo) {\n          trip.attributes.promiseTime = bookingInfo.firstLeg.get('requestTime').toISOString();\n        }\n      }\n    },\n\n    addIsCheckedPropertySubscriptionTrips(trips) {\n      const futureTrips = trips;\n      return futureTrips.map(trip => {\n        const id = parseInt(trip.get('id'), 10);\n        return {\n          tripId: trip.get('tripId'),\n          id: id,\n          isChecked: false\n        };\n      });\n    },\n\n    differenceDispatchTrips(dispatchTrips, futureTripIds) {\n      if (futureTripIds.length >= dispatchTrips.length) {\n        return (0, _lodash.difference)(futureTripIds, dispatchTrips);\n      }\n\n      return (0, _lodash.difference)(dispatchTrips, futureTripIds);\n    },\n\n    async cancelFutureTrips(subscriptionId) {\n      try {\n        const session = this.get('session');\n        const tripIds = this.get('booking').tripIds;\n        const subscriptionTripsCancelPayload = {\n          data: {\n            type: 'subscriptionTripCancellation',\n            attributes: {\n              tripIds: tripIds\n            }\n          }\n        };\n        const json = JSON.stringify(subscriptionTripsCancelPayload);\n        return await this.get('ajax').post(_apiUrls.API.bookingService.host + '/subscription/' + subscriptionId + '/trip-cancellation', {\n          method: 'POST',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          },\n          data: json\n        });\n      } catch (e) {\n        const errorMessage = 'FAILED TO CANCEL SUBSCRIPTION TRIPS ' + e.message; // eslint-disable-next-line no-throw-literal\n\n        throw {\n          message: errorMessage\n        };\n      }\n    },\n\n    async deleteSubscription(subscriptionId) {\n      try {\n        const session = this.get('session');\n        return await this.get('ajax').post(_apiUrls.API.bookingService.host + '/subscription/' + subscriptionId, {\n          method: 'DELETE',\n          contentType: 'application/json',\n          headers: {\n            Authorization: `Bearer ${session.data.authenticated.token}`\n          }\n        });\n      } catch (e) {\n        const errorMessage = 'FAILED TO DELETE SUBSCRIPTION ' + e.message; // eslint-disable-next-line no-throw-literal\n\n        throw {\n          message: errorMessage\n        };\n      }\n    },\n\n    async saveSubscriptionServiceNeeds(subscriptionId, subscriptionServiceNeeds) {\n      await this.get('store').queryRecord('subscription', subscriptionId);\n      const subscription = this.get('store').peekRecord('subscription', subscriptionId);\n      subscriptionServiceNeeds.forEach(subscriptionServiceNeed => {\n        subscriptionServiceNeed.set('subscription', subscription);\n      });\n      await subscriptionServiceNeeds.reduce((acu, subscriptionServiceNeed) => {\n        return acu.then(() => {\n          return subscriptionServiceNeed.save();\n        });\n      }, Promise.resolve());\n    },\n\n    /**\n     * this function is used in subscription form\n     * @param {*} subscriptionId(Number)\n     * @param {*} subscriptionData(current subscription model)\n     */\n    async saveSubscriptionPhoneNumber(subscriptionId, subscriptionData) {\n      const maxPhoneNumberLength = 10;\n      const phoneNumbers = subscriptionData.get('phoneNumbers').toArray();\n      const subscriptionRecord = this.get('store').peekRecord('subscription', subscriptionId);\n      const phoneNumberRecords = [];\n      await phoneNumbers.reduce((acu, number) => {\n        return acu.then(async () => {\n          //save the phone number if its have the required number length\n          if (number.get('fullPhoneNumber').length === maxPhoneNumberLength) {\n            const savedPickPhoneNumberRecord = await this.querySubscriptionPhoneNumber(number);\n            let phoneNumberRecord = savedPickPhoneNumberRecord.get('firstObject');\n\n            if (!savedPickPhoneNumberRecord.length) {\n              const phoneumber = await number.save();\n              phoneNumberRecord = phoneumber;\n            }\n\n            phoneNumberRecords.pushObject(phoneNumberRecord);\n          }\n        });\n      }, Promise.resolve());\n\n      if (subscriptionRecord) {\n        subscriptionRecord.set('phoneNumbers', phoneNumberRecords);\n      }\n    },\n\n    async querySubscriptionPhoneNumber(subscriptionPhoneNumber) {\n      const areaCode = subscriptionPhoneNumber.get('areaCode');\n      const phoneNumber = subscriptionPhoneNumber.get('phoneNumber');\n      const description = subscriptionPhoneNumber.get('description');\n      const phoneNumberRecord = await this.get('store').query('subscription-phone-number', {\n        filter: `and(eq(areaCode,'${areaCode}'),eq(phoneNumber,'${phoneNumber}'),eq(description,'${description}'))`\n      });\n      return phoneNumberRecord.toArray();\n    },\n\n    //Trips showed in the subscription cancellation screen must be same as trips showed in the View All Trips table\n    async fetchTripsForCancelSubscription(subscriptionId) {\n      try {\n        let subscriptionTrips = await this.get('booking').fetchSubscriptionTrips(subscriptionId);\n        subscriptionTrips = (0, _lodash.flattenDeep)(subscriptionTrips);\n        let futureTrips = this.filterFutureTrips(subscriptionTrips);\n        const futureTripIds = futureTrips.map(trip => trip && trip.id);\n        futureTrips = this.get('booking.currentTrips').filter(trip => futureTripIds.includes(trip.get('id')));\n        futureTrips = this.filterExportedTrips(futureTrips);\n        const uniqTrips = this.get('booking').uniqTrips(futureTrips);\n        return uniqTrips || [];\n      } catch (e) {\n        console.error(e);\n      }\n    },\n\n    async _getSubscription(subscriptionId) {\n      return await this.store.findRecord('subscription', subscriptionId);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/system-config\", [\"exports\", \"ember-concurrency\", \"lodash\", \"adept-iq/classes/tree-nodes/category\", \"adept-iq/classes/tree-nodes/object\", \"adept-iq/classes/tree-nodes/value\", \"adept-iq/config/config-object-template\", \"adept-iq/models/cs-config-category\", \"adept-iq/config/config-value-validation\", \"adept-iq/utils/config-validator\"], function (_exports, _emberConcurrency, _lodash, _category, _object, _value, _configObjectTemplate, _csConfigCategory, _configValueValidation, _configValidator) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const ROOT_CATEGORY = 'config';\n  const MIN_SEARCH_TEXT_LENGTH = 3;\n  const READ_ONLY_CATEGORIES = [];\n  const logger = {\n    warn: console.warn // eslint-disable-line no-console\n\n  };\n  const TRAVEL_NEED_CATEGORY = 'config-System_Configuration-travel_need_types';\n  const TRAVEL_NEEDS_TYPES = 'Travel Need Types';\n  const TRAVEL_NEEDS_TYPES_VALUES = ['id', 'name'];\n  const SCHEDULING_PARAMS = 'Scheduling Parms';\n  const SYSTEM_CONFIGURATION = 'System Configuration';\n  const SERVICE_NEEDS_TYPES = 'Service Needs Types';\n  const SERVICE_NEEDS_TYPES_VALUES = ['id', 'name'];\n  const ITP_BLOCKOUTDATE = 'ITP Blockoutdate';\n  const FROM_DATE = 'From date(MM/DD/YYYY)';\n  const TO_DATE = 'To date(MM/DD/YYYY)';\n\n  var _default = Ember.Service.extend({\n    store: Ember.inject.service(),\n    fixedRouteEngine: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    booking: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    rootCategory: null,\n    rootNodes: null,\n    searchText: null,\n    showRightPanel: false,\n    currentComponentPath: null,\n    hasChanges: false,\n    isSearchEffective: Ember.computed('searchText', function () {\n      const searchText = this.get('searchText');\n      return Ember.isPresent(searchText) && searchText.length >= MIN_SEARCH_TEXT_LENGTH;\n    }),\n    searchTextChanged: Ember.observer('searchText', function () {\n      Ember.run.debounce(this, 'propagateSearchText', 500);\n    }),\n    isLoading: Ember.computed.readOnly('fetchTask.isRunning'),\n    isSaving: Ember.computed.readOnly('saveTask.isRunning'),\n    isProcessing: Ember.computed.or('isLoading', 'isSaving'),\n    isError: Ember.computed.readOnly('fetchTask.last.isError'),\n    isModified: Ember.computed('rootNodes.@each.isTreeModified', function () {\n      const rootNodes = this.get('rootNodes');\n      if (Ember.isEmpty(rootNodes)) return false;\n      return rootNodes.any(node => node.get('isTreeModified'));\n    }),\n    isOutdated: Ember.computed('rootNodes.@each.isTreeOutdated', function () {\n      const rootNodes = this.get('rootNodes');\n      if (Ember.isEmpty(rootNodes)) return false;\n      return rootNodes.any(node => node.get('isTreeOutdated'));\n    }),\n    isDirty: Ember.computed.or('isModified', 'isOutdated'),\n\n    init() {\n      this._super(...arguments);\n\n      this.refresh();\n      this.findItpBlockoutDates = this.findItpBlockoutDates.bind(this);\n    },\n\n    refresh() {\n      return this.get('fetchTask').perform();\n    },\n\n    save() {\n      if (!this.get('isModified')) {\n        throw new Error('cannot save unmodified config tree');\n      }\n\n      return this.get('saveTask').perform();\n    },\n\n    fetchTask: (0, _emberConcurrency.task)(function* () {\n      const store = this.get('store'); // this loads all associated categories as a side-effect\n\n      yield store.query('cs-config-item', {\n        category: ROOT_CATEGORY\n      });\n      const rootCategory = store.peekRecord('cs-config-category', ROOT_CATEGORY);\n      this.set('rootCategory', rootCategory);\n      const rootNodes = rootCategory.get('children').filter(node => {\n        return node.canDisplay;\n      }).sortBy('name').map(category => {\n        const visibleChildren = category.children.filter(node => {\n          return node.canDisplay;\n        });\n        category.set('children', visibleChildren);\n        return this.buildCategoryTree(category);\n      });\n      this.set('rootNodes', rootNodes);\n      this.filterSystemParamsBeConfigItems(rootNodes);\n      this.removeNameAndIdForServiceNeedsTypes(rootNodes);\n      this.removeNameAndIdForTravelNeedsTypes(rootNodes);\n      this.propagateSearchText();\n    }).restartable(),\n    saveTask: (0, _emberConcurrency.task)(function* () {\n      yield (0, _emberConcurrency.timeout)(500);\n      const modifiedNodes = [];\n      const rootNodes = this.get('rootNodes');\n      const validateJsonString = this.isValidJSONString; // make sure we duplicate array!\n\n      const queue = [...rootNodes]; // BFS search means we can prune at unmodified & object nodes\n\n      while (queue.length > 0) {\n        const node = queue.shift();\n        /* eslint-disable no-continue */\n\n        if (!node.get('isTreeModified') && !node.get('isRemoved')) continue;\n        /* eslint-enable no-continue */\n\n        if (node.get('isObject') || node.get('isValue')) {\n          const valid = (0, _configValidator.validateNode)(node);\n\n          if (valid) {\n            modifiedNodes.push(node);\n          } else {\n            this.get('notifications').warning(`${node.label} ${node.validator.validation.errorMessage}`);\n          }\n        } else {\n          const children = node.get('children');\n          queue.push(...children);\n        }\n      }\n\n      const promises = modifiedNodes.map(node => {\n        let value;\n        const parent = node.get('parent');\n        const configItem = node.get('configItem');\n        const fieldConstraintString = node.get('configItem.fieldConstraint');\n        const parsedFieldConstraint = validateJsonString(fieldConstraintString) ? JSON.parse(fieldConstraintString) : {};\n        const validationRegExString = parsedFieldConstraint.validation;\n        const errorMessage = parsedFieldConstraint.errorMessage ? parsedFieldConstraint.errorMessage : 'An error occured. Save failed.';\n        const regex = new RegExp(validationRegExString); // removing a new record\n\n        if (node.get('isRemoved') && node.get('isNew')) {\n          const index = parent.get('children').findIndex(child => {\n            return !child.configItem.id && child.configItem.name === node.configItem.name;\n          });\n          parent.get('children').removeAt(index, 1);\n          return;\n        } // object removed\n\n\n        if (node.get('isRemoved')) {\n          configItem.deleteRecord();\n          return configItem.save().then(() => {\n            const index = parent.get('children').findIndex(child => {\n              return child.configItem.name === node.configItem.name;\n            });\n            parent.get('children').removeAt(index, 1);\n          });\n        } // a new record. we cannot have space or funny charaters for a name\n\n\n        if (node.get('isNew')) {\n          const camelizedName = Ember.String.camelize(node.get('configItem.displayName'));\n          node.set('configItem.name', camelizedName.replace(/[_\\W]+/g, '_'));\n\n          if (node.get('configItem.name.length') < 1) {\n            this.get('notifications').warning('New config name cannot be blank.');\n            return;\n          }\n        } // object modified\n\n\n        if (node.get('isValue')) {\n          value = node.get('value');\n        }\n\n        if (node.get('isObject')) {\n          value = node.get('children').reduce((obj, child) => {\n            let key = child.get('label');\n            const childValue = child.get('value');\n\n            if (key === 'value' && regex && regex.test(childValue) === false) {\n              this.get('notifications').warning(errorMessage);\n            } else {\n              if (parent.objectTemplate) {\n                const newkey = parent.objectTemplate.fields.find(object => {\n                  return object.displayName === key;\n                });\n\n                if (newkey) {\n                  key = newkey.fieldName;\n                }\n              }\n\n              obj[key] = childValue;\n              return obj;\n            }\n          }, {});\n        } // Assign configItem.name to value.name if:\n        // - configItem has a 'name' attribute\n        // - value is an object without a 'name' property\n        // This special case applies only to travel need types now (AIQ-4335).\n        // Expand to other configItems with object values if needed in the future.\n        // ex. change the following if check to typeOf value === 'object'\n        // New Item not having proper configCategory relationships so using category directly (AIQ-5110)\n\n\n        if (configItem.get('category') === 'config-System_Configuration-travel_need_types' && !value.name) {\n          value.name = configItem.get('name');\n        }\n\n        node.set('value', value);\n        const oldValue = configItem.get('value');\n\n        if (!node.get('isObject') && regex && regex.test(node.get('value')) === false) {\n          this.get('notifications').warning(errorMessage);\n        } else {\n          configItem.set('value', value); //Updating of config-Fixed_Route_Engine_Parameters is rare call\n\n          if (configItem.get('category') === 'config-Fixed_Route_Engine_Parameters') {\n            this.get('fixedRouteEngine').save(configItem).then(dataSaved => {\n              if (dataSaved) {\n                return configItem.save().then(() => {\n                  if (node.get('isValue')) {\n                    node.set('originalValue', value);\n                  }\n\n                  if (node.get('isObject')) {\n                    node.get('children').forEach(child => {\n                      child.set('originalValue', child.get('value'));\n                    });\n                  }\n                });\n              } // FRES api is failed set the old value to FRES ConfigItem\n\n\n              configItem.set('value', oldValue);\n            });\n          } else {\n            return configItem.save().then(() => {\n              if (node.get('isValue')) {\n                node.set('originalValue', value);\n              }\n\n              if (node.get('isObject')) {\n                node.get('children').forEach(child => {\n                  child.set('originalValue', child.get('value'));\n                });\n              }\n            });\n          }\n        }\n      });\n      return yield Ember.RSVP.all(promises);\n    }).drop(),\n\n    getObjectTemplate(category) {\n      if (_configObjectTemplate.default[category.path]) {\n        return _configObjectTemplate.default[category.path];\n      }\n\n      return;\n    },\n\n    buildCategoryTree(category, parent) {\n      //To make ZIP_CODES as read only\n      //todo  have to fetch canEdit flag from config service\n      const canEdit = !READ_ONLY_CATEGORIES.includes(category.get('name'));\n\n      const node = _category.default.create({\n        label: category.get('displayName'),\n        canDisplay: category.get('canDisplay'),\n        canRemove: category.get('canDelete'),\n        canAdd: category.get('canAdd'),\n        canEdit,\n        minimumItem: category.get('minimumItem'),\n        type: 'category',\n        depth: parent ? parent.get('depth') + 1 : 0,\n        parent\n      });\n\n      node.objectTemplate = this.getObjectTemplate(category);\n\n      if (node.objectTemplate && node.objectTemplate.isCustomizedPanel) {\n        node.isCustomizedPanel = node.objectTemplate.isCustomizedPanel;\n        node.customizedPanel = node.objectTemplate.customizedPanel;\n      }\n\n      const children = [];\n      category.get('children').sortBy('name').forEach(childCategory => {\n        const child = this.buildCategoryTree(childCategory, node);\n        children.push(child);\n      });\n      category.get('configItems').forEach(configItem => {\n        const child = this.buildItemTree(configItem, node);\n        children.push(child);\n      });\n      node.set('children', children);\n      return node;\n    },\n\n    buildOjectsTemplate(fields) {\n      const newObject = {};\n      fields.forEach(field => {\n        newObject[field.fieldName] = '';\n      });\n      return newObject;\n    },\n\n    insertNewItemTree(parent) {\n      if (!parent.objectTemplate) {\n        return;\n      }\n\n      const record = this.store.createRecord('cs-config-item', {\n        displayName: '',\n        description: '',\n        unit: 'NA',\n        category: parent.objectTemplate.categoryPath,\n        type: 'object',\n        value: this.buildOjectsTemplate(parent.objectTemplate.fields),\n        defaultValue: ''\n      });\n      const newNode = this.buildItemTree(record, parent);\n      newNode.set('isExpanded', true);\n      parent.set('isExpanded', true);\n      parent.get('children').pushObject(newNode);\n    },\n\n    buildItemTree(configItem, parent) {\n      const name = configItem.get('displayName');\n      const canEdit = parent.canEdit;\n      let value = configItem.get('value');\n      const validator = this.validatorFor(configItem.id);\n      const specifiedType = this.specifiedTypeFor(configItem.get('type'));\n      let inferredType = this.inferredTypeFor(value);\n      let type = this.nodeTypeFor(specifiedType) || this.nodeTypeFor(inferredType) || 'default'; // This is to add radio button for default. This default radio button\n      // should be declared in config/config-object-template.js\n\n      if (type === 'object' && parent.objectTemplate) {\n        const radioButton = parent.objectTemplate.fields.find(object => {\n          return object.radioButton;\n        }); // special case:\n        // if driver app default field does not exist\n        // create it now instead of having to insert in database\n\n        if (radioButton && Ember.isNone(value[radioButton.fieldName])) {\n          value[radioButton.fieldName] = false;\n        }\n\n        Object.keys(value).forEach(function (key) {\n          const newkey = parent.objectTemplate.fields.find(object => {\n            return object.fieldName === key;\n          });\n\n          if (newkey && value[newkey.displayName] !== value[key]) {\n            value[newkey.displayName] = value[key];\n            delete value[key];\n          }\n        }); // insert missing keys from object-template\n\n        parent.objectTemplate.fields.map(field => {\n          const key = value[field.displayName];\n\n          if (!key) {\n            value[field.displayName] = '';\n          }\n        });\n      }\n\n      if (inferredType === 'object' && type === 'string') {\n        // Special handle for store JSON object in string value\n        inferredType = type;\n        value = JSON.stringify(value);\n      } else if (inferredType === 'object' && type !== 'object') {\n        logger.warn(`config-item ${name} has object value but specified type ${type}`);\n        type = 'object';\n      }\n\n      const depth = parent ? parent.get('depth') + 1 : 0;\n      const node = this.treeNodeClassFor(type).create({\n        configItem,\n        type,\n        specifiedType,\n        inferredType,\n        validator,\n        label: name,\n        value: _lodash.default.isArray(value) ? _lodash.default.cloneDeep(JSON.stringify(value)) : _lodash.default.cloneDeep(value),\n        originalValue: _lodash.default.cloneDeep(value),\n        depth,\n        parent,\n        canEdit\n      });\n\n      if (type === 'object') {\n        // handle JSON\n        const children = Object.entries(value).map(_ref => {\n          let [key, val] = _ref;\n          const inferredChildType = this.inferredTypeFor(val);\n          const childType = this.nodeTypeFor(inferredChildType) || 'default';\n          let radioButton;\n\n          if (childType === 'boolean' && parent.objectTemplate) {\n            const newkey = parent.objectTemplate.fields.find(object => {\n              return object.displayName === key;\n            });\n\n            if (newkey) {\n              radioButton = newkey.radioButton;\n            }\n          }\n\n          return this.treeNodeClassFor(childType).create({\n            label: key,\n            type: childType,\n            value: _lodash.default.isArray(val) ? _lodash.default.cloneDeep(JSON.stringify(val)) : _lodash.default.cloneDeep(val),\n            originalValue: _lodash.default.cloneDeep(val),\n            depth: depth + 1,\n            parent: node,\n            radioButton: radioButton,\n            canEdit\n          });\n        }).sortBy('label');\n        node.set('children', children);\n      }\n\n      return node;\n    },\n\n    validatorFor(id) {\n      if (_configValueValidation.default[id]) {\n        return _configValueValidation.default[id];\n      }\n\n      return;\n    },\n\n    specifiedTypeFor(typeString) {\n      return Ember.isPresent(typeString) ? typeString.toLowerCase() : null;\n    },\n\n    inferredTypeFor(value) {\n      return Ember.isPresent(value) ? Ember.typeOf(value) : null;\n    },\n\n    nodeTypeFor(type) {\n      switch (type) {\n        case 'int':\n        case 'float':\n        case 'number':\n          return 'number';\n\n        case 'char':\n        case 'string':\n          return 'string';\n\n        case 'json':\n        case 'object':\n          return 'object';\n\n        case 'boolean':\n        case 'true/false':\n          return 'boolean';\n\n        case 'color':\n          return 'color';\n\n        default:\n          return null;\n      }\n    },\n\n    treeNodeClassFor(type) {\n      switch (type) {\n        case 'category':\n          return _category.default;\n\n        case 'object':\n          return _object.default;\n\n        default:\n          return _value.default;\n      }\n    },\n\n    propagateSearchText() {\n      const rootNodes = this.get('rootNodes');\n      const searchText = this.get('searchText');\n      const isSearchEffective = this.get('isSearchEffective');\n      if (Ember.isEmpty(rootNodes)) return; // sets search text on each node\n\n      rootNodes.forEach(rootNode => {\n        rootNode.bfs(node => {\n          node.set('searchText', searchText);\n        });\n      });\n      if (!isSearchEffective) return; // update expansion settings\n\n      rootNodes.forEach(rootNode => {\n        rootNode.dfs(node => {\n          // do nothing if not part of search tree\n          if (!node.get('isSearchMatch') && !node.get('isUpstreamSearchMatch') && !node.get('isDownstreamSearchMatch')) return; // expand when node is a match or has a descendent that matches\n\n          node.set('isExpanded', node.get('isSearchMatch') || node.get('isUpstreamSearchMatch'));\n        });\n      });\n    },\n\n    //fix:NYAAR-14872 System Configuration - Broker Eligibility parameters are displayed under Scheduling Params\n    filterSystemParamsBeConfigItems(rootNodes) {\n      const schedulingParamNode = rootNodes.find(node => node.label === SCHEDULING_PARAMS); //for testcase failing\n\n      if (schedulingParamNode) {\n        schedulingParamNode.children = schedulingParamNode.children.filter(child => {\n          return !child.configItem.id.includes('BE');\n        });\n      }\n    },\n\n    //fix:NYAAR-18188: Update Service Needs Types configuration to show Description and Display Name only\n    removeNameAndIdForServiceNeedsTypes(rootNodes) {\n      const systemConfiguration = rootNodes.find(node => node.label === SYSTEM_CONFIGURATION); //for testcase failing\n\n      if (systemConfiguration) {\n        const serviceNeedsTypes = systemConfiguration.children.find(node => node.label === SERVICE_NEEDS_TYPES);\n\n        if (serviceNeedsTypes && serviceNeedsTypes.children) {\n          serviceNeedsTypes.children.forEach(child => {\n            child.children = child.children.filter(data => {\n              return !SERVICE_NEEDS_TYPES_VALUES.includes(data.label);\n            });\n          });\n        }\n      }\n    },\n\n    removeNameAndIdForTravelNeedsTypes(rootNodes) {\n      const systemConfiguration = rootNodes.find(node => node.label === SYSTEM_CONFIGURATION);\n\n      if (systemConfiguration) {\n        const travelNeedsTypes = systemConfiguration.children.find(node => node.label === TRAVEL_NEEDS_TYPES);\n        travelNeedsTypes.children.forEach(child => {\n          child.children = child.children.filter(data => {\n            return !TRAVEL_NEEDS_TYPES_VALUES.includes(data.label);\n          });\n        });\n      }\n    },\n\n    /**\n     * this will return ITP blockout dates example : [['fromDate','toDate'],..]\n     * @returns {*}\n     */\n    findItpBlockoutDates() {\n      const systemConfiguration = this.rootNodes.find(node => node.label === SYSTEM_CONFIGURATION);\n      const itpBlockoutDates = []; //for testcase failing\n\n      if (systemConfiguration) {\n        const itpBlockoutdate = systemConfiguration.children.find(node => node.label === ITP_BLOCKOUTDATE);\n        itpBlockoutdate.children.forEach(child => {\n          const blockoutdates = [];\n          const fromDate = child.children.filter(data => {\n            return FROM_DATE.includes(data.label);\n          });\n          blockoutdates.push(fromDate.get('firstObject.value'));\n          const toDate = child.children.filter(data => {\n            return TO_DATE.includes(data.label);\n          });\n          blockoutdates.push(toDate.get('firstObject.value'));\n          itpBlockoutDates.push(blockoutdates);\n        });\n      }\n\n      return itpBlockoutDates;\n    },\n\n    findConfigByCategory(categoryType) {\n      const eligibilityCategories = this.get('store').peekAll('cs-config-item').filter(configItem => {\n        return configItem.category === categoryType;\n      });\n      return eligibilityCategories;\n    },\n\n    findEligibilityCategories(type) {\n      const eligibilityCategories = this.findConfigByCategory(_csConfigCategory.CONFIG_ELIGIBILITY_CATEGORY);\n      const categories = eligibilityCategories.filter(category => {\n        const categoryType = category.value['type '] || category.value.type || category.value.Type;\n        return categoryType.toLowerCase() === type;\n      });\n      return categories;\n    },\n\n    isValidJSONString(str) {\n      try {\n        JSON.parse(str);\n      } catch (e) {\n        return false;\n      }\n\n      return true;\n    },\n\n    onRemoveConfigItem(node) {\n      //Regarding NYAAR-16202\n      const configItemCategory = node.get('configItem.category');\n      const travelNeedName = node.get('configItem.value.Name') && node.get('configItem.value.Name').replace(/\\s+|[,\\/]/g, '').toLowerCase();\n      const bookings = this.get('widget.futureBookings');\n      const subscriptions = this.get('widget.futureSubscriptions');\n\n      let bookingLegTravelNeeds = _lodash.default.flattenDeep(bookings.map(booking => {\n        return booking && booking.get('legs') && booking.get('legs').toArray();\n      })).map(leg => leg && leg.get('legTravelNeeds') && leg.get('legTravelNeeds').toArray());\n\n      bookingLegTravelNeeds = _lodash.default.flattenDeep(bookingLegTravelNeeds);\n      const bookingTravelNeedNames = bookingLegTravelNeeds.map(tr => {\n        return tr && tr.get('travelNeedTypeName') && tr.get('travelNeedTypeName').replace(/\\s+|[,\\/]/g, '').toLowerCase();\n      });\n\n      const subscriptionTravelNeeds = _lodash.default.flattenDeep(subscriptions.map(sub => sub.get('subscriptionTravelNeeds').toArray()));\n\n      const subscriptionTravelNeedNames = subscriptionTravelNeeds.map(str => {\n        return str && str.get('travelNeedTypeNameUppercase') && str.get('travelNeedTypeNameUppercase').replace(/\\s+|[,\\/]/g, '').toLowerCase();\n      });\n      const travelNeedNames = [...bookingTravelNeedNames, ...subscriptionTravelNeedNames].uniq();\n\n      if (configItemCategory === TRAVEL_NEED_CATEGORY && travelNeedNames.includes(travelNeedName)) {\n        const warningMessage = 'Unable to delete. There are future trips and/or subscriptions associated with this travel need';\n        this.showWarningPopup(warningMessage);\n      } else {\n        node.set('isRemoved', true);\n      }\n    },\n\n    showWarningPopup(warningMessage) {\n      this.get('tooltip').pushConfirmation({\n        title: 'System Configuration',\n        tip: warningMessage,\n        hasOverlay: true,\n        primaryActionText: 'OK',\n        primaryAction: () => {\n          return this.get('tooltip').reset();\n        }\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/text-measurer\", [\"exports\", \"ember-text-measurer/services/text-measurer\"], function (_exports, _textMeasurer) {\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 _textMeasurer.default;\n    }\n  });\n});","define(\"adept-iq/services/time-span\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend({\n    workspace: Ember.inject.service(),\n    minusValue: 0,\n    plusValue: 0,\n    intervalTimer: null,\n    timeInterval: 900000,\n    // 15 minutes\n    isTimeSpanRunning: Ember.computed.alias('intervalTimer'),\n\n    startInterval() {\n      // Run the update now.\n      this._updateWorkspace(); // Schedule the update to run every X minutes thereafter.\n\n\n      this.set('intervalTimer', setInterval(() => {\n        this._updateWorkspace();\n      }, this.get('timeInterval')));\n    },\n\n    stopInterval() {\n      clearInterval(this.get('intervalTimer'));\n      this.set('intervalTimer', null);\n    },\n\n    /* Input unit is hours. */\n    setSpan(minusValue, plusValue) {\n      this.set('minusValue', minusValue * 3600000);\n      this.set('plusValue', plusValue * 3600000);\n\n      this._resetSpan();\n    },\n\n    /* Input unit is milliseconds. */\n    setSpanMillis(minusValue, plusValue) {\n      this.set('minusValue', minusValue);\n      this.set('plusValue', plusValue);\n\n      this._resetSpan();\n    },\n\n    _updateWorkspace() {\n      const now = Date.now();\n      const startDate = new Date(now - this.get('minusValue'));\n      const endDate = new Date(now + this.get('plusValue'));\n      const changeSet = {};\n      changeSet.startDate = startDate;\n      changeSet.endDate = endDate;\n      Ember.run.scheduleOnce('afterRender', () => {\n        this.get('workspace').setProperties(changeSet);\n      });\n    },\n\n    _resetSpan() {\n      this.stopInterval();\n      this.startInterval();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/tooltip\", [\"exports\", \"ember-concurrency\"], function (_exports, _emberConcurrency) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    readOnly,\n    or\n  } = Ember.computed; // it does not matter what actions are placed into the three buttons,\n  // but when used together its good to know the location of each button\n  // button location as shown resembling the named variables third - secondary - primary\n\n  var _default = Ember.Service.extend({\n    confirmations: null,\n    tip: readOnly('confirmations.lastObject.tip'),\n    subTips: readOnly('confirmations.lastObject.subTips'),\n    title: readOnly('confirmations.lastObject.title'),\n    primaryActionText: readOnly('confirmations.lastObject.primaryActionText'),\n    secondaryActionText: readOnly('confirmations.lastObject.secondaryActionText'),\n    thirdActionText: readOnly('confirmations.lastObject.thirdActionText'),\n    primaryAction: readOnly('confirmations.lastObject.primaryAction'),\n    secondaryAction: readOnly('confirmations.lastObject.secondaryAction'),\n    thirdAction: readOnly('confirmations.lastObject.thirdAction'),\n    closeAction: readOnly('confirmations.lastObject.closeAction'),\n    hasOverlay: readOnly('confirmations.lastObject.hasOverlay'),\n    // covers interface so user must confirm or cancel\n    warning: readOnly('confirmations.lastObject.warning'),\n    errors: readOnly('confirmations.lastObject.errors'),\n    // array of errors to display\n    errorMainMessage: readOnly('confirmations.lastObject.errorMainMessage'),\n    // Message above the errors\n    isRunning: or('primaryActionTask.isRunning', 'secondaryActionTask.isRunning'),\n    isDisabled: readOnly('confirmations.lastObject.isDisabled'),\n    class: readOnly('confirmations.lastObject.class'),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('confirmations', []);\n    },\n\n    // `drop()` might be better than `enqueue()` here, but this ensures that\n    // tasks won't be cancelled by accident during messy transitions\n    primaryActionTask: (0, _emberConcurrency.task)(function* () {\n      const primaryAction = this.get('primaryAction');\n\n      if (primaryAction) {\n        try {\n          yield primaryAction();\n        } catch (e) {\n          // TODO: allow user to try again without reset\n          throw new Error(e);\n        }\n      }\n    }).enqueue(),\n    secondaryActionTask: (0, _emberConcurrency.task)(function* () {\n      const secondaryAction = this.get('secondaryAction');\n\n      if (secondaryAction) {\n        try {\n          yield secondaryAction();\n        } catch (e) {\n          // TODO: allow user to try again without reset\n          throw new Error(e);\n        }\n      }\n    }).enqueue(),\n    thirdActionTask: (0, _emberConcurrency.task)(function* () {\n      const thirdAction = this.get('thirdAction');\n\n      if (thirdAction) {\n        try {\n          yield thirdAction();\n        } catch (e) {\n          // TODO: allow user to try again without reset\n          throw new Error(e);\n        }\n      }\n    }).enqueue(),\n    closeActionTask: (0, _emberConcurrency.task)(function* () {\n      const closeAction = this.get('closeAction');\n      const primaryAction = this.get('primaryAction');\n      const secondaryAction = this.get('secondaryAction');\n\n      if (closeAction) {\n        try {\n          yield closeAction();\n        } catch (e) {\n          // TODO: allow user to try again without reset\n          throw new Error(e);\n        }\n      } else if (primaryAction && !secondaryAction) {\n        // if only one primaryAction, make close call the primaryAction.\n        try {\n          yield primaryAction();\n        } catch (e) {\n          // TODO: allow user to try again without reset\n          throw new Error(e);\n        }\n      }\n    }).enqueue(),\n\n    pushConfirmation(options) {\n      this.popConfirmation(); //to remove a previous confirmation object\n\n      this.get('confirmations').pushObject(options);\n    },\n\n    popConfirmation() {\n      const confirmations = this.get('confirmations');\n\n      if (confirmations && confirmations.length) {\n        return this.get('confirmations').popObject();\n      }\n    },\n\n    reset() {\n      this.setProperties({\n        confirmations: []\n      });\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/user\", [\"exports\", \"adept-iq/helpers/has-role\", \"adept-iq/classes/road-supervisor-api\", \"adept-iq/classes/road-supervisor-special-route-api\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/environment\"], function (_exports, _hasRole, _roadSupervisorApi, _roadSupervisorSpecialRouteApi, _mappedPermIds, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const SCHEDULER_ROLE = 'scheduler';\n  const SCHEDULER_MANAGER_ROLE = 'schedulemanager';\n  const SCHEDULER_SUPERVISOR_ROLE = 'schedulesupervisor';\n  const SCHEDULER_ADMIN_ROLE = 'scheduleadmin';\n\n  var _default = Ember.Service.extend({\n    session: Ember.inject.service(),\n    permissionLayer: Ember.inject.service(),\n    userId: Ember.computed.alias('session.data.authenticated.tokenInfo.userId'),\n    roles: Ember.computed.alias('session.data.authenticated.tokenInfo.roleNames'),\n\n    hasRole(roleName) {\n      return (0, _hasRole.hasRole)(this.roles, roleName);\n    },\n\n    isScheduler: Ember.computed('roles', function () {\n      const roleNames = this.get('roles');\n      return (0, _hasRole.hasRole)(roleNames, SCHEDULER_ROLE) || (0, _hasRole.hasRole)(roleNames, SCHEDULER_MANAGER_ROLE) || (0, _hasRole.hasRole)(roleNames, SCHEDULER_SUPERVISOR_ROLE) || (0, _hasRole.hasRole)(roleNames, SCHEDULER_ADMIN_ROLE);\n    }),\n    isRoadSupOnTablet: Ember.computed('roles', function () {\n      return this.isRoadSupEnable();\n    }),\n\n    isRoadSupEnable() {\n      let checkRoadSup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (!checkRoadSup) {\n        return false;\n      }\n\n      const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n      const roleName = _environment.default.APP.avlmLite ? _roadSupervisorApi.default.getRoleName() : _roadSupervisorSpecialRouteApi.default.getRoleName();\n      return isMobile && this.roles && (0, _hasRole.hasRole)(this.roles, roleName);\n    },\n\n    isDispatcher() {\n      return this.get('permissionLayer').permInUserHash(_mappedPermIds.default.accessDispatchWorkspace, null);\n    },\n\n    isRoadSupDesktop() {\n      const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n      const roleName = _environment.default.APP.avlmLite ? _roadSupervisorApi.default.getRoleName() : _roadSupervisorSpecialRouteApi.default.getRoleName();\n      return !isMobile && this.roles && (0, _hasRole.hasRole)(this.roles, roleName);\n    },\n\n    isAdmin() {\n      return (0, _hasRole.hasRole)(this.roles, 'admin');\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/websockets\", [\"exports\", \"ember-websockets/services/websockets\"], function (_exports, _websockets) {\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 _websockets.default;\n    }\n  });\n});","define(\"adept-iq/services/widget\", [\"exports\", \"adept-iq/config/api-urls\", \"adept-iq/config/environment\", \"adept-iq/classes/work-queue\", \"ember-concurrency\", \"lodash\", \"moment\", \"adept-iq/config/widget-events\"], function (_exports, _apiUrls, _environment, _workQueue, _emberConcurrency, _lodash, _moment, _widgetEvents) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.orRQL = _exports.neRQL = _exports.inRQL = _exports.eqRQL = _exports.default = _exports.andRQL = void 0;\n  // const QUEUED_THRESHOLD = 200;\n  const MAX_VEHICLE_LIMIT = 3000;\n  const MAX_DRIVER_LIMIT = 3000;\n  const LOCAL_STORAGE_KEY = 'dashboard-info';\n  const DAYS = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];\n\n  const andRQL = function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return `and(${args.join(',')})`;\n  };\n\n  _exports.andRQL = andRQL;\n\n  const inRQL = (p, values) => {\n    return `in(${p},(${values.join(',')}))`;\n  };\n\n  _exports.inRQL = inRQL;\n\n  const orRQL = function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return `or(${args.join(',')})`;\n  };\n\n  _exports.orRQL = orRQL;\n\n  const eqRQL = (p, v) => `eq(${p},${v})`;\n\n  _exports.eqRQL = eqRQL;\n\n  const neRQL = (p, v) => `ne(${p},${v})`;\n\n  _exports.neRQL = neRQL;\n  const CORE_WIDGET_MAPPING = {\n    'route': 'routeWidget',\n    'trip': 'tripWidget',\n    'stop-point': 'stopWidget',\n    'rider': 'riderWidget',\n    'driver': 'driverWidget',\n    'alert': 'alertWidget',\n    'avlm-canned-message': 'messageWidget'\n  };\n  const AVLM_CORE_WIDGET_MAPPING = {\n    'avlm-route': 'routeWidget',\n    'avlm-trip': 'tripWidget',\n    'avlm-stop-point': 'stopWidget',\n    'avlm-rider': 'riderWidget',\n    'avlm-driver': 'driverWidget',\n    'avlm-alert': 'alertWidget',\n    'avlm-canned-message': 'messageWidget'\n  };\n  const WIDGET_MODEL_MAP = {\n    vehicleWidget: 'vehicle',\n    stopWidget: 'stop-point',\n    routeWidget: 'dispatch-route',\n    tripWidget: 'trip',\n    alertWidget: 'avlm-alert',\n    messageWidget: 'avlm-canned-message',\n    driverWidget: 'driver'\n  };\n  const AVLM_WIDGET_MODEL_MAP = {\n    vehicleWidget: 'avlm-vehicle',\n    stopWidget: 'avlm-stop-point',\n    routeWidget: 'avlm-route',\n    tripWidget: 'avlm-trip',\n    alertWidget: 'avlm-alert',\n    messageWidget: 'avlm-canned-message',\n    driverWidget: 'avlm-driver',\n    riderWidget: 'avlm-rider'\n  };\n  const GLOBAL_WIDGET_INST = 'STORE_SELECTION';\n  const {\n    readOnly\n  } = Ember.computed; // you must register any model that is serialized to a config item here\n\n  const modelNameForCategory = {\n    'config-Scheduling-schedule_configurations': 'schedule-configuration',\n    'config-Scheduling-service_windows': 'service-window',\n    'config-Activity_Log_Types-trip': 'trip-activity-log-type',\n    'config-Activity_Log_Types-vehicle': 'vehicle-activity-log-type',\n    'config-Activity_Log_Types-route': 'route-activity-log-type',\n    'config-Activity_Log_Types-user': 'user-activity-log-type',\n    'config-System_Configuration-break_types': 'break-type',\n    'config-System_Configuration-cancel_types': 'cancel-type',\n    'config-System_Configuration-eligibility_types': 'eligibility-type',\n    'config-System_Configuration-eligibility_categories': 'eligibility-category',\n    'config-System_Configuration-fare_types': 'fare-type',\n    'config-System_Configuration-no_show_reason_codes': 'no-show-reason-code',\n    'config-System_Configuration-passenger_types': 'passenger-type',\n    'config-System_Configuration-place_category_types': 'place-category-type',\n    'config-System_Configuration-providers': 'provider',\n    'config-System_Configuration-travel_need_types': 'travel-need-type',\n    'config-System_Configuration-vehicle_capacity_configs': 'vehicle-capacity-config',\n    'config-System_Configuration-vehicle_capacity_types': 'vehicle-capacity-type',\n    'config-System_Configuration-vehicle_types': 'vehicle-type',\n    'config-System_Configuration-breakdown_types': 'breakdown-type',\n    'config-System_Configuration-zones': 'zone-type',\n    'config-System_Configuration-rider_place_types': 'rider-place-type',\n    'config-System_Configuration-no_show_reason_categories': 'no-sho-reason-category',\n    'config-System_Configuration-Activity_Log_Types-booking': 'booking-activity-log-type',\n    'config-System_Configuration-Activity_Log_Types-subscription': 'subscription-activity-log-type',\n    'config-System_Configuration-fare_categories': 'fare-category'\n  };\n  const FORMAT_WITH_DATE_AND_TIME = 'YYYY-MM-DDTHH:mm:ss.SSS';\n  const DATE_FORMAT = 'YYYY-MM-DD';\n  const TOMORROW = (0, _moment.default)().add(1, 'day').format(DATE_FORMAT);\n  const TODAY = (0, _moment.default)().format(DATE_FORMAT);\n\n  var _default = Ember.Service.extend(Ember.Evented, {\n    store: Ember.inject.service(),\n    ajax: Ember.inject.service(),\n    session: Ember.inject.service(),\n    socket: Ember.inject.service(),\n    user: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    work: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    fixedRouteEngine: Ember.inject.service(),\n    storeQueue: Ember.computed.alias('workspaceContext.storeQueue'),\n    normalizeQueue: Ember.computed.alias('workspaceContext.normalizeQueue'),\n    getCoreModelNameByWidgetRecord: Ember.computed.alias('activeContext.topActiveContext.getCoreModelNameByWidgetRecord'),\n    configData: null,\n    isConfigLoaded: false,\n    readyToLoadInitialData: false,\n    traversalFilters: null,\n    widgetPayLoadBatch: null,\n    coreEntityPayLoadBatch: null,\n    traversalFilterQueryDict: null,\n    startDate: null,\n    endDate: null,\n    providersList: Ember.computed.alias('workspaceContext._selectedProviders'),\n    allProviders: Ember.computed.alias('workspaceContext._allProviders'),\n    widgetEntityQueue: null,\n    avlEntityQueue: null,\n    isScheduleDashboard: readOnly('workspace.isScheduleDashboard'),\n    isDispatchDashboard: readOnly('workspace.isDispatchDashboard'),\n    futureBookings: null,\n    futureSubscriptions: null,\n    clusterEntityQueue: null,\n    widgetModelMap: WIDGET_MODEL_MAP,\n\n    setWidgetModelMap(widgetModel, coreModel) {\n      const defaultModelMap = _environment.default.APP.avlmLite ? AVLM_WIDGET_MODEL_MAP : WIDGET_MODEL_MAP;\n      const widgetModelMap = this.get('widgetModelMap') || defaultModelMap;\n\n      if (widgetModel && coreModel) {\n        widgetModelMap[widgetModel] = coreModel;\n      }\n\n      this.set('widgetModelMap', widgetModelMap);\n    },\n\n    init() {\n      this._super(...arguments);\n\n      this.widgetPayLoadBatch = [];\n      this.coreEntityPayLoadBatch = [];\n      this.set('traversalFilters', {});\n      this.set('traversalFilterQueryDict', {});\n      this.set('futureBookings', []);\n      this.set('futureSubscriptions', []);\n      this.loadConfig().then(data => {\n        this.set('configData', data);\n        this.set('isConfigLoaded', true);\n      });\n      const widgetEntityQueueOptions = Object.assign({}, _environment.default.work['widget-entity'], {\n        name: 'widget-entity',\n        perform: jobs => {\n          jobs.forEach(job => {\n            this._processWidgetEntity(job);\n          });\n        }\n      });\n\n      const widgetEntityQueue = _workQueue.default.extend({\n        isDisabled: false,\n        groupBy: 'payloadBatch'\n      }).create(widgetEntityQueueOptions);\n\n      this.get('work').registerQueue(widgetEntityQueue);\n      this.set('widgetEntityQueue', widgetEntityQueue);\n      const avlEntityQueueOptions = Object.assign({}, _environment.default.work['avl-entity'], {\n        name: 'avl-entity',\n        perform: jobs => {\n          jobs.forEach(job => {\n            this._processAvlEntity(job);\n          });\n        }\n      });\n\n      const avlEntityQueue = _workQueue.default.extend({\n        isDisabled: false\n      }).create(avlEntityQueueOptions);\n\n      this.get('work').registerQueue(avlEntityQueue);\n      this.set('avlEntityQueue', avlEntityQueue); // FRES has been disabled; commented out for a future FRES feature.\n      // this.getFixedRouteEngineParams();\n\n      this.setWidgetModelMap();\n      this.getFutureBookings();\n      this.getFutureSubscriptions();\n      const clusterEntityQueueOptions = Object.assign({}, _environment.default.work['cluster-entity'], {\n        name: 'cluster-entity',\n        perform: jobs => {\n          jobs.forEach(job => {\n            this._processClusterEntity(job);\n          });\n        }\n      });\n\n      const clusterEntityQueue = _workQueue.default.extend({\n        isDisabled: false\n      }).create(clusterEntityQueueOptions);\n\n      this.get('work').registerQueue(clusterEntityQueue);\n      this.set('clusterEntityQueue', clusterEntityQueue);\n      this.onActiveContextChanged();\n    },\n\n    async loadConfig() {\n      const session = this.get('session');\n      const configList = await this.get('ajax').request(`${_apiUrls.API.configService.host}/config/config`, {\n        method: 'GET',\n        contentType: 'application/json',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        }\n      }).catch(() => []);\n      const separatedData = Ember.makeArray(configList.data).reduce((obj, datum) => {\n        const [categoryId] = datum.id.split('/');\n        const modelName = modelNameForCategory[categoryId] || 'cs-config-item';\n\n        if (modelName) {\n          obj[modelName] = obj[modelName] || [];\n          obj[modelName].push(datum);\n        }\n\n        return obj;\n      }, {});\n      await this.get('workspaceContext').setupProviderList();\n      return separatedData;\n    },\n\n    onActiveContextChanged: Ember.observer('activeContext.topActiveContext', function () {\n      const context = this.get('activeContext.topActiveContext');\n\n      if (context) {\n        this.set('traversalFilters', {});\n        this.set('traversalFilterQueryDict', {});\n      }\n    }),\n    onReadyToLoad: Ember.observer('socket.isClientRegistered', 'isConfigLoaded', 'socket.isSocketConnected', 'workspace.{isScheduleDashboard,currentSchedule}', function () {\n      if (this.get('socket.isClientRegistered') && this.get('isConfigLoaded') && this.get('socket.isSocketConnected')) {\n        // This will be useful for components that come alive by clicking on the side drawer or for maximized component\n        this.get('loadAllVehicle').perform().catch(e => {\n          if (!(0, _emberConcurrency.didCancel)(e)) {\n            throw e;\n          }\n        });\n\n        if (!_environment.default.APP.avlmLite) {\n          this.get('loadAllDriver').perform().catch(e => {\n            if (!(0, _emberConcurrency.didCancel)(e)) {\n              throw e;\n            }\n          });\n        }\n\n        this.set('readyToLoadInitialData', true);\n        const dateQueryFields = this.getDateQueryFields();\n        const selectedProviders = this.getSelectedProviders();\n        this.updateGlobalFilter(dateQueryFields, selectedProviders);\n        this.trigger(_widgetEvents.INITIAL_WIDGET_LOAD_EVENT);\n      }\n    }),\n    loadAllVehicle: (0, _emberConcurrency.task)(function* () {\n      const modelName = 'vehicleWidget';\n      const limit = MAX_VEHICLE_LIMIT;\n      const sort = 'id';\n      const filterString = '';\n      const dateQueryFields = this.getDateQueryFields();\n      const selectedProviders = this.getSelectedProviders();\n      let offset = 0;\n      let records = [];\n\n      do {\n        records = yield this.loadData(GLOBAL_WIDGET_INST, modelName, filterString, offset, limit, sort, dateQueryFields, selectedProviders);\n\n        if (records.length > 0) {\n          this.updateAllCoreEntityStoreAction(modelName, records);\n          offset += records.length;\n        }\n      } while (records.length > 0);\n    }),\n    loadAllDriver: (0, _emberConcurrency.task)(function* () {\n      const modelName = 'driverWidget';\n      const limit = MAX_DRIVER_LIMIT;\n      const sort = 'id';\n      const filterString = '';\n      const dateQueryFields = this.getDateQueryFields();\n      const selectedProviders = this.getSelectedProviders();\n      let offset = 0;\n      let records = [];\n\n      do {\n        records = yield this.loadData(GLOBAL_WIDGET_INST, modelName, filterString, offset, limit, sort, dateQueryFields, selectedProviders);\n\n        if (records.length > 0) {\n          yield this.loadDriverAvailabilities(records);\n          this.updateAllCoreEntityStoreAction(modelName, records);\n          offset += records.length;\n        }\n      } while (records.length > 0);\n    }),\n    // minimize will create a new dashboard instance so trigger startDate/endDate update, but that will reset all widgets.\n    dateRangeFilterQuery: Ember.observer('workspace.{startDate,endDate}', function () {\n      const topActiveContext = this.get('activeContext.topActiveContext');\n      const activeContextNodes = topActiveContext.get('nodes') || [];\n      this.globalFilterChanged();\n      topActiveContext.clearCheckedItems();\n      activeContextNodes.reduce((obj, node) => {\n        this.get('workspaceContext').trigger('change', [node.modelName]);\n      });\n    }),\n\n    // providerObserver: observer('workspaceContext.providerUpdated', function() {\n    //   this.globalFilterChanged();\n    // }),\n    setTraversalFilterQuery(modelName, queryString) {\n      this.set('traversalFilterQueryDict', {\n        [modelName]: queryString\n      });\n    },\n\n    getTraversalFilterQuery(modelname) {\n      return this.get('traversalFilterQueryDict')[modelname] || '';\n    },\n\n    globalFilterChanged() {\n      const readyToLoadInitialData = this.get('readyToLoadInitialData');\n\n      if (readyToLoadInitialData) {\n        const dateQueryFields = this.getDateQueryFields();\n        const selectedProviders = this.getSelectedProviders();\n        this.updateGlobalFilter(dateQueryFields, selectedProviders);\n        this.get('widgetEntityQueue').clearJobs();\n      }\n    },\n\n    getSelectedProvidersDict() {\n      const selectedProviders = this.getSelectedProviders();\n      const selectedProvidersDict = selectedProviders.reduce((d, x) => ({ ...d,\n        [x]: true\n      }), {});\n      return selectedProvidersDict;\n    },\n\n    getSelectedProviders() {\n      const selectedProviders = this.get('providersList') || [];\n      let selectedProviderNames = selectedProviders.map(provider => provider.id);\n      const isRoadSupEnable = this.user.isRoadSupEnable();\n\n      if (isRoadSupEnable) {\n        const dashboardInfo = localStorage.getItem(LOCAL_STORAGE_KEY);\n        const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n        if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n          const accessDataObj = parsedDashboardInfo.accessData;\n          selectedProviderNames = [accessDataObj.provider];\n        }\n      }\n\n      return selectedProviderNames;\n    },\n\n    getAllProviders() {\n      const selectedProviders = this.get('store').peekAll('provider');\n      const selectedProviderNames = selectedProviders.map(provider => provider.id);\n      selectedProviderNames.push('UNASSIGNED');\n      return selectedProviderNames;\n    },\n\n    /**\n     * data received from socket will reach this place\n     * @param widgetData : {action , widgetInstanceId, widgetModelName, widgetEnitity}\n     */\n    receiveWidgetUpdate(payload) {\n      // DELETE action won't have provider in body.\n      if (this.get('readyToLoadInitialData')) {\n        // DELETE action won't have provider in body.\n        if (payload.header.action === 'DELETE' || this.matchesProvider(payload)) {\n          if (payload.body && payload.body.id) {\n            payload.body.data = payload.body.data || {};\n            payload.body.data.id = payload.body.id;\n            payload.body.data._key = payload.body.id;\n          }\n\n          const payLoadModelName = payload.header.widgetModelName;\n          const jobId = `${payLoadModelName}`;\n          const payloadBatch = Ember.isArray(payload) ? payload : [payload];\n          const job = {\n            payloadBatch,\n            jobId\n          };\n          this.get('widgetEntityQueue').mergeJob(job);\n          this.get('work').start();\n        }\n      }\n    },\n\n    /**\n     * Called from Socket Service when we get a CORE_ENTITY_UPDATE event\n     * @param payload\n     */\n    receiveCoreEntityUpdate(payload) {\n      if (this.get('readyToLoadInitialData')) {\n        if (payload.body && payload.body.data) {\n          const {\n            data\n          } = payload.body;\n\n          if (data.type === 'avl') {\n            this.get('avlEntityQueue').addJob({\n              data\n            });\n          }\n\n          if (data.type === 'schedule') {\n            const schedule = payload.body;\n            this.get('store').push(schedule);\n          }\n\n          if (data.type === 'cluster') {\n            this.get('clusterEntityQueue').addJob({\n              data\n            });\n          }\n        }\n      }\n    },\n\n    _processWidgetEntity(job) {\n      this.preWidgetRecordUpdate(job.payloadBatch);\n      this.trigger(_widgetEvents.WIDGET_DATA_ACTION, job.payloadBatch);\n      this.postWidgetRecordUpdate(job.payloadBatch);\n      this.updateMap();\n    },\n\n    _processAvlEntity(payload) {\n      const store = this.get('store');\n      const {\n        data\n      } = payload;\n      const {\n        id\n      } = data.attributes;\n      let {\n        lat,\n        lng,\n        speed,\n        heading,\n        odo,\n        timestamp\n      } = data.attributes;\n      lat = Ember.isPresent(lat) ? parseFloat(lat) : null;\n      lng = Ember.isPresent(lng) ? parseFloat(lng) : null;\n      heading = Ember.isPresent(heading) ? parseFloat(heading) : null;\n      speed = Ember.isPresent(speed) ? parseFloat(speed) : null;\n      odo = Ember.isPresent(odo) ? parseFloat(odo) : null;\n      timestamp = Ember.isPresent(timestamp) ? new Date(timestamp) : null;\n      const vehicle = store.peekRecord(_environment.default.APP.avlmLite ? 'avlm-vehicle' : 'vehicle', id);\n\n      if (vehicle) {\n        vehicle.set('avlLocation', {\n          lat,\n          lng,\n          heading,\n          speed,\n          odo,\n          timestamp\n        });\n      }\n    },\n\n    _processClusterEntity(payload) {\n      const store = this.get('store');\n      const {\n        data\n      } = payload;\n      const clusterId = data.id;\n      const storeQueue = this.get('storeQueue');\n      let dispatchRouteId = null;\n\n      if (!Ember.isNone(data.relationships)) {\n        dispatchRouteId = data.relationships.dispatchRoute ? data.relationships.dispatchRoute.data.id : null;\n      }\n\n      const cluster = store.peekRecord('cluster', clusterId); // If dispatchRoute changed then remove the relationship between cluster and dispatchRoute.\n\n      if (cluster && (!dispatchRouteId || cluster.get('dispatchRoute.id') !== dispatchRouteId)) {\n        cluster.set('dispatchRoute', null);\n        cluster.saveWithoutSubmit();\n      } else {\n        storeQueue.pushJob({\n          action: 'push',\n          payload\n        });\n      }\n    },\n\n    updateMap() {// throttle(this, this._internalUpdateMap, MAP_UPDATE_DEBOUNCE_INTERVAL);\n    },\n\n    _internalUpdateMap() {\n      this.get('workspaceContext').refreshMap();\n    },\n\n    /**\n     *\n     * Take any action  such as add/remove/update from store or update any other\n     * data held by other services\n     */\n    // eslint-disable-next-line no-unused-vars\n    preWidgetRecordUpdate(widgetRecordPayloads) {},\n\n    retriveWidgetRecordForStore(widgetRecord, widgetModelName) {\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      const isDispatchDashboard = this.get('isDispatchDashboard');\n\n      if (widgetModelName === 'stopWidget') {\n        // Following is copied from core entity populator, need refactor in future.\n        if (isScheduleDashboard) {\n          return {\n            id: widgetRecord.stopPointPk || widgetRecord.id,\n            //Garage Points do not have stopPointPk\n            routeId: widgetRecord.routeId,\n            status: widgetRecord.status,\n            perform: widgetRecord.perform || null,\n            arrivePerformedBy: widgetRecord.arrivePerformedBy,\n            departPerformedBy: widgetRecord.departPerformedBy,\n            actualArriveTime: widgetRecord.actualArriveTimestamp || null,\n            actualDepartTime: widgetRecord.actualDepartTimestamp || null,\n            type: widgetRecord.type,\n            tripStopId: widgetRecord.tripStopId,\n            actualArriveLat: widgetRecord.actualArriveLat || null,\n            actualArriveLng: widgetRecord.actualArriveLng || null,\n            actualDepartLat: widgetRecord.actualDepartLat || null,\n            actualDepartLng: widgetRecord.actualDepartLng || null,\n            polyline: widgetRecord.polyline,\n            stopType: widgetRecord.type,\n            scheduleOrdinal: widgetRecord.scheduleOrdinal,\n            plannedSlackTime: widgetRecord.plannedSlackTime,\n            eta: widgetRecord.eta,\n            segmentStopPhoneNumbers: widgetRecord.segmentStopPhoneNumbers,\n            scheduleStopStatus: widgetRecord.scheduleStopStatus\n          };\n        }\n\n        if (isDispatchDashboard) {\n          return {\n            id: widgetRecord.stopPointPk || widgetRecord.id,\n            //Garage Points do not have stopPointPk\n            routeId: widgetRecord.routeId,\n            status: widgetRecord.status,\n            perform: widgetRecord.perform || null,\n            arrivePerformedBy: widgetRecord.arrivePerformedBy,\n            departPerformedBy: widgetRecord.departPerformedBy,\n            actualArriveTime: widgetRecord.actualArriveTimestamp || null,\n            actualDepartTime: widgetRecord.actualDepartTimestamp || null,\n            type: widgetRecord.type,\n            tripStopId: widgetRecord.tripStopId,\n            actualArriveLat: widgetRecord.actualArriveLat || null,\n            actualArriveLng: widgetRecord.actualArriveLng || null,\n            actualDepartLat: widgetRecord.actualDepartLat || null,\n            actualDepartLng: widgetRecord.actualDepartLng || null,\n            polyline: widgetRecord.polyline,\n            slackInMinutes: widgetRecord.slack || 0,\n            odometerOnArrival: widgetRecord.odometerOnArrival,\n            stopType: widgetRecord.type,\n            widgetEta: widgetRecord.eta,\n            segmentStopPhoneNumbers: widgetRecord.segmentStopPhoneNumbers\n          };\n        }\n      }\n\n      return _lodash.default.cloneDeep(widgetRecord);\n    },\n\n    /**\n     * Called After widget records are updated on the grid\n     * Take any action  such as add/remove/update from store or update\n     * any other data held by other services\n     */\n    // Will come back to this function later to handle the multiple model's request\n    postWidgetRecordUpdate(widgetRecordPayloads) {\n      widgetRecordPayloads.forEach(async widgetRecordPayload => {\n        const {\n          header,\n          body\n        } = widgetRecordPayload;\n        const {\n          action,\n          widgetModelName\n        } = header;\n        const {\n          data\n        } = body;\n\n        if (this.canUpdateStore(action, widgetModelName)) {\n          const payload = this.retriveWidgetRecordForStore(data, widgetModelName);\n          await this.processWidgetRecordsForStore(widgetModelName, [payload]);\n        }\n      });\n    },\n\n    /**\n     * There is a delay between computing the selected provider list and WebSocket Global Filter setting\n     * This is to dicard widget record that doesnt match the current UI filter\n     * @param widgetRecordPayload\n     * @returns {boolean}\n     */\n    matchesProvider(widgetRecordPayload) {\n      const {\n        body\n      } = widgetRecordPayload;\n\n      if (body.data && body.data.provider) {\n        const providersDict = this.getSelectedProvidersDict();\n        return providersDict[body.data.provider];\n      }\n\n      return false;\n    },\n\n    canUpdateStore(action, modelName) {\n      if (modelName === 'messageWidget') {\n        return true;\n      }\n\n      if (modelName === 'alertWidget') {\n        return true;\n      }\n\n      if (action === 'UPDATE') {\n        return true;\n      }\n\n      return false;\n    },\n\n    // eslint-disable-next-line no-unused-vars\n    preCoreEntityUpdate(payload) {},\n\n    // eslint-disable-next-line no-unused-vars\n    postCoreEntityUpdate(payload) {},\n\n    /**\n     * if the widget record is in selected state, we need to push its corresponding\n     * core entity to Store by extracting fields from the widget Record\n     *\n     * This happens on two occassions. When user selects and when we receive a widget update action (subject to selected state)\n     * @param widgetModelName {string}\n     * @param primaryKey\n     * @returns {boolean}\n     */\n    isSelected(widgetModelName, primaryKey) {\n      // eslint-disable-next-line guard-for-in\n      for (const widgetInstance in this.traversalFilters) {\n        const filters = this.traversalFilters[widgetInstance];\n\n        for (const filter of filters) {\n          if (filter.model === widgetModelName) {\n            if (filter._key === primaryKey) {\n              return true;\n            }\n          }\n        }\n      }\n\n      return false;\n    },\n\n    /**\n     * Called when Maximized and Minimized\n     * @param targetInstanceId\n     * @param sourceInstanceId\n     */\n    transferTraversalFilterState(targetInstanceId, sourceInstanceId) {\n      const filters = this.traversalFilters[sourceInstanceId] || [];\n      this.traversalFilters[targetInstanceId] = filters;\n      this.traversalFilters[sourceInstanceId] = [];\n    },\n\n    async loadData(widgetInstanceId, modelName, filter, offset, limit, sort, dateQueryFields, selectedProviders) {\n      const data = await this.requestWidgetApi(widgetInstanceId, modelName, filter, offset, limit, sort, dateQueryFields, selectedProviders, null);\n      this.updateWidgetFilter(widgetInstanceId, modelName, filter, offset, limit, sort);\n      this.trigger(_widgetEvents.RECEIVE_DATA_LIST_EVENT, {\n        widgetInstanceId,\n        modelName,\n        data\n      });\n      return data;\n    },\n\n    async loadMoreData(widgetInstanceId, modelName, filter, offset, limit, sort, dateQueryFields, selectedProviders) {\n      const data = await this.requestWidgetApi(widgetInstanceId, modelName, filter, offset, limit, sort, dateQueryFields, selectedProviders, null);\n      this.updateWidgetFilter(widgetInstanceId, modelName, filter, offset, limit, sort);\n      this.trigger(_widgetEvents.LOAD_MORE_DATA_LIST_EVENT, {\n        widgetInstanceId,\n        modelName,\n        data\n      });\n      return data;\n    },\n\n    async requestWidgetApi(widgetInstanceId, modelName, filter, offset, limit, sort, dateQueryFields, selectedProviders, isLocked) {\n      const socketClient = this.get('socket').getSocketClientId();\n      let queryTerms;\n\n      if (this.get('workspace.isScheduleDashboard')) {\n        queryTerms = [`page[limit]=${limit}`, `page[offset]=${offset}`, `sort=${sort}`, `socket.clientId=${socketClient}`, `widgetInstanceId=${widgetInstanceId}`, `selectedProviders=${selectedProviders}`];\n\n        if (Ember.isPresent(dateQueryFields.startDateUTC)) {\n          queryTerms.push(`startDateUTC=${dateQueryFields.startDateUTC}`);\n        } // To prevent data display from previous schedule in case of no schedule generation\n\n\n        if (Ember.isPresent(dateQueryFields.scheduleId)) {\n          queryTerms.push(`scheduleId=${dateQueryFields.scheduleId}`);\n        }\n      } else {\n        queryTerms = [`page[limit]=${limit}`, `page[offset]=${offset}`, `sort=${sort}`, `socket.clientId=${socketClient}`, `widgetInstanceId=${widgetInstanceId}`, `startDate=${dateQueryFields.startDate}`, `endDate=${dateQueryFields.endDate}`, `startDateUTC= ${dateQueryFields.startDateUTC}`, `endDateUTC=${dateQueryFields.endDateUTC}`, `selectedProviders=${selectedProviders}`];\n      }\n\n      if (!_lodash.default.isEmpty(filter)) {\n        queryTerms.push(`data.filter=${filter}`);\n      }\n\n      if (!Ember.isNone(isLocked)) {\n        queryTerms.push(`isLocked=${isLocked}`);\n      }\n\n      const queryString = queryTerms.join('&');\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.iquxService.host}/${modelName}?${queryString}`;\n      let {\n        data\n      } = await this.get('ajax').request(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json'\n      });\n      data = data.map(function (jsonRecord) {\n        const record = jsonRecord.attributes;\n        record.id = jsonRecord.id;\n        record._key = jsonRecord.id;\n        return record;\n      });\n      return data;\n    },\n\n    addTraversalFilter(widgetInstanceId, modelName, records) {\n      let selectionFilter = this.traversalFilters[widgetInstanceId];\n\n      if (!selectionFilter) {\n        selectionFilter = [];\n        this.traversalFilters[widgetInstanceId] = selectionFilter;\n      }\n\n      records.forEach(record => {\n        const index = selectionFilter.findIndex(filter => filter._key === record._key);\n\n        if (index !== -1) {\n          selectionFilter[index] = {\n            model: modelName,\n            _key: record._key,\n            record\n          };\n        } else {\n          selectionFilter.push({\n            model: modelName,\n            _key: record._key,\n            record\n          });\n        }\n      });\n      this.trigger(_widgetEvents.ADD_TRAVERSAL_SELECTION_EVENT, widgetInstanceId, modelName); // Update the corresponding core entities in store by called\n\n      records.forEach(record => {\n        this.updateCoreEntityInStoreFromWidget(modelName, record);\n      });\n    },\n\n    /**\n     * store poluation entity, this need to be handled immediately to show data\n     * @param model\n     * @param widgetRecord\n     * @param id\n     */\n    async storePopulateEntity(model, widgetRecord, id) {\n      this.get('workspaceContext').manualStorePayload({\n        data: {\n          type: model,\n          attributes: widgetRecord,\n          id: id || widgetRecord.id\n        }\n      });\n    },\n\n    /**\n     * push payload to normalized queue\n     * @param model\n     * @param widgetRecord\n     * @param id\n     */\n    storeWidgetRecord(model, widgetRecord, id) {\n      if (!model) {\n        // eslint-disable-next-line no-console\n        console.error(widgetRecord);\n        return;\n      }\n\n      const storeRecord = _lodash.default.cloneDeep(widgetRecord);\n\n      const normalizeQueue = this.get('normalizeQueue');\n      const job = {\n        action: 'push',\n        payload: {\n          data: {\n            type: model,\n            id: id || storeRecord.id,\n            attributes: storeRecord\n          }\n        }\n      };\n      normalizeQueue.pushJob(job);\n      this.get('work').start();\n    },\n\n    /**\n     * Should be called after loading the core Entity Graph\n     * @param widgetModelName\n     * @param widgetRecord\n     */\n    updateCoreEntityInStoreFromWidget(widgetModelName, widgetRecord) {\n      let model = this.get('widgetModelMap')[widgetModelName];\n      model = this.get('getCoreModelNameByWidgetRecord')(model, widgetRecord);\n      this.storeWidgetRecord(model, widgetRecord);\n    },\n\n    /**\n     * update all core enity for widget records\n     * @param widgetModelName\n     * @param widgetRecord\n     */\n    updateAllCoreEntityStoreAction(widgetModelName, widgetRecords) {\n      const model = this.get('widgetModelMap')[widgetModelName];\n\n      _lodash.default.cloneDeep(widgetRecords).forEach(widgetRecord => {\n        this.storeWidgetRecord(model, widgetRecord);\n      });\n    },\n\n    removeTraversalFilter(widgetInstanceId, modelName, records) {\n      const selectionFilter = this.traversalFilters[widgetInstanceId];\n\n      if (selectionFilter) {\n        records.forEach(record => {\n          _lodash.default.remove(selectionFilter, item => item.model === modelName && item._key === record._key);\n        });\n        this.trigger(_widgetEvents.REMOVE_TRAVERSAL_SELECTION_EVENT, widgetInstanceId, modelName);\n      } // Update the corresponding core entities in store by called\n\n\n      records.forEach(record => {\n        this.updateCoreEntityInStoreFromWidget(modelName, record);\n      });\n    },\n\n    generateRQL(key, values) {\n      if (!values.length) {\n        return '';\n      }\n\n      const validValues = values.filter(data => !_lodash.default.isUndefined(data));\n      const compoundRQL = inRQL(key, validValues);\n      return compoundRQL;\n    },\n\n    combineInAndEqualFilters(inKey, values, equalFilters) {\n      if (!values.length && !equalFilters.length) {\n        return '';\n      }\n\n      let compoundInFiltersRQL = null;\n      let compoundEqualsFiltersRQL = null;\n\n      if (values) {\n        compoundInFiltersRQL = this.generateRQL(inKey, values);\n      }\n\n      if (equalFilters) {\n        const [firstQuery, ...rest] = equalFilters;\n        compoundEqualsFiltersRQL = rest.reduce((acc, current) => {\n          return orRQL(current, acc);\n        }, firstQuery);\n      }\n\n      const allFilterRQL = [];\n\n      if (compoundInFiltersRQL) {\n        allFilterRQL.push(compoundInFiltersRQL);\n      }\n\n      if (compoundEqualsFiltersRQL) {\n        allFilterRQL.push(compoundEqualsFiltersRQL);\n      }\n\n      if (!allFilterRQL) {\n        return '';\n      }\n\n      if (allFilterRQL.length === 1) {\n        return allFilterRQL[0];\n      }\n\n      return andRQL(allFilterRQL[0], allFilterRQL[1]);\n    },\n\n    async handleCoreEntitySelection(widgetModelName, field, ids) {\n      const filter = inRQL(field, ids);\n      const sortKey = 'id';\n      const widgetInstanceId = `${widgetModelName}_${GLOBAL_WIDGET_INST}`;\n      const dateQueryFields = this.getDateQueryFields();\n      const selectedProviders = this.getSelectedProviders();\n      const widgetRecords = await this.requestWidgetApi(widgetInstanceId, widgetModelName, filter, 0, ids.length, sortKey, dateQueryFields, selectedProviders, null);\n      const model = this.get('widgetModelMap')[widgetModelName];\n      widgetRecords.forEach(widgetRecord => {\n        this.storeWidgetRecord(model, widgetRecord);\n      });\n      this.updateWidgetFilter(widgetInstanceId, widgetModelName, filter, 0, ids.length, sortKey);\n    },\n\n    // This function store populate entities\n    async processWidgetRecordsForStore(widgetModelName, widgetRecords) {\n      const model = this.get('widgetModelMap')[widgetModelName];\n      const scheduleWorkspace = this.get('workspace.isScheduleDashboard');\n      widgetRecords.forEach(async widgetRecord => {\n        if (scheduleWorkspace && widgetModelName === 'stopWidget') {\n          if (widgetRecord.type === 'break') {\n            widgetRecord.id = widgetRecord.id.substr(1);\n          } else if (widgetRecord.type === 'pick' || widgetRecord.type === 'drop') {\n            widgetRecord.id = widgetRecord.tripStopId;\n          }\n        }\n\n        if (this.get('getCoreModelNameByWidgetRecord')) {\n          const coreModel = this.get('getCoreModelNameByWidgetRecord')(model, widgetRecord);\n\n          if (coreModel) {\n            await this.storePopulateEntity(coreModel, widgetRecord);\n          }\n        }\n      });\n      const modelArray = Ember.isArray(model) ? model : [model];\n      modelArray.forEach(m => {\n        this.get('workspaceContext').manualReloadContextByModel(m);\n      });\n    },\n\n    getEqualQuery(key, value) {\n      return eqRQL(key, [value]);\n    },\n\n    getExistedQuery(key) {\n      return neRQL(key, null);\n    },\n\n    async widgetsByFilterQuery(widgetModelName, filter) {\n      let maxPageLimit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 100;\n      const sortKey = 'id';\n      const widgetInstanceId = `${widgetModelName}_${GLOBAL_WIDGET_INST}`;\n      const dateQueryFields = this.getDateQueryFields();\n      const selectedProviders = this.getSelectedProviders();\n      const widgetRecords = await this.requestWidgetApi(widgetInstanceId, widgetModelName, filter, 0, maxPageLimit, sortKey, dateQueryFields, selectedProviders, null);\n      return widgetRecords;\n    },\n\n    /**\n     *\n     * @param filterKeyValues {routeId:[100,200], driverId:[2,3,4]}\n     * @returns {*}\n     */\n    generateRQLFromObjKeys(filterKeyValues) {\n      const allFilters = [];\n      Object.entries(filterKeyValues).forEach(_ref => {\n        let [field, values] = _ref;\n        allFilters.push(this.generateRQL(field, values));\n      });\n      const compoundFilter = allFilters.reduce((acc, current) => {\n        return andRQL(current, acc);\n      }, allFilters[0]);\n      return compoundFilter;\n    },\n\n    _computeStoreModelKeys() {\n      const store = this.get('store');\n      let coreWidgetMap = CORE_WIDGET_MAPPING;\n      const modelNameIds = {};\n\n      if (_environment.default.APP.avlmLite) {\n        coreWidgetMap = AVLM_CORE_WIDGET_MAPPING;\n      }\n\n      Object.keys(coreWidgetMap).map(modelName => {\n        const widgetName = coreWidgetMap[modelName];\n        modelNameIds[widgetName] = store.peekAll(modelName).mapBy('id');\n      });\n      return modelNameIds;\n    },\n\n    async updateUserSelection() {\n      // Unit test avoid sending request through web socket\n      if (_environment.default.APP.test || !_environment.default.APP.ENABLE_IQUX_USER_UPDATE) {\n        return;\n      }\n\n      const modelNameIdList = this._computeStoreModelKeys();\n\n      const data = JSON.stringify(modelNameIdList);\n      const session = this.get('session');\n      const socketClientId = this.get('socket').getSocketClientId();\n      const url = `${_apiUrls.API.iquxService.host}/entitySelection?socket.clientId=${socketClientId}`;\n      const response = await this.get('ajax').request(url, {\n        method: 'POST',\n        contentType: 'application/json',\n        dataType: 'text',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`,\n          'Content-Type': 'application/json'\n        },\n        data\n      }).catch(e => {\n        console.log(e); //eslint-disable-line no-console\n      });\n      return response;\n    },\n\n    maximizeWidget(widgetInstanceId) {\n      this.trigger(_widgetEvents.WIDGET_MAXIMIZE_EVENT, widgetInstanceId);\n    },\n\n    minimizeWidget(widgetInstanceId) {\n      this.trigger(_widgetEvents.WIDGET_MINIMIZE_EVENT, widgetInstanceId);\n    },\n\n    getDateQueryFields() {\n      // let startDate = new Date(\"08-28-2020\")\n      if (this.get('workspace.isScheduleDashboard')) {\n        const schedule = this.get('workspace.currentSchedule');\n        return {\n          // To prevent data display from previous schedule in case of no schedule generation\n          scheduleId: Ember.isPresent(schedule) ? schedule.get('id') : null\n        };\n      }\n\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const startMomentDate = (0, _moment.default)(startDate).format(FORMAT_WITH_DATE_AND_TIME);\n      const endMomentDate = (0, _moment.default)(endDate).format(FORMAT_WITH_DATE_AND_TIME);\n\n      const startDateUTC = _moment.default.utc(startDate).format(FORMAT_WITH_DATE_AND_TIME);\n\n      const endDateUTC = _moment.default.utc(endDate).format(FORMAT_WITH_DATE_AND_TIME);\n\n      return {\n        startDate: startMomentDate,\n        endDate: endMomentDate,\n        startDateUTC,\n        endDateUTC\n      };\n    },\n\n    async getTotalWidgetCount(widgetName, filter, dateQueryFields, selectedProviders) {\n      let queryTerms;\n\n      if (this.get('workspace.isScheduleDashboard')) {\n        queryTerms = [`widgetName=${Ember.String.capitalize(widgetName)}`, `scheduleId=${dateQueryFields.scheduleId}`, `selectedProviders=${selectedProviders}`];\n      } else {\n        queryTerms = [`widgetName=${Ember.String.capitalize(widgetName)}`, `startDate=${dateQueryFields.startDate}`, `endDate=${dateQueryFields.endDate}`, `startDateUTC= ${dateQueryFields.startDateUTC}`, `endDateUTC=${dateQueryFields.endDateUTC}`, `selectedProviders=${selectedProviders}`];\n      }\n\n      if (filter) {\n        queryTerms.push(`data.filter=${filter}`);\n      }\n\n      const queryString = queryTerms.join('&');\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.iquxService.host}/widgetRowCount?${queryString}`;\n      const {\n        count\n      } = await this.get('ajax').request(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json'\n      }).catch(e => {\n        console.error(e); //eslint-disable-line no-console\n      });\n      return count;\n    },\n\n    exportServerData(widgetModelName, filterQueryString, headerNames, fieldIds, configTitle) {\n      const queryString = this.getReportQuery(widgetModelName, filterQueryString);\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.iquxService.host}/widgetReport?${queryString}`;\n      return this.get('ajax').request(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json'\n      }).then(response => {\n        const data = response.map(widgetData => widgetData.data);\n        data.forEach(widgetRecord => {\n          if (widgetRecord.plannedBreaks) {\n            const objectLength = Object.keys(widgetRecord.plannedBreaks).length;\n            widgetRecord.plannedBreaksCount = objectLength;\n          }\n        });\n        this.downloadWidgetRecords(data, headerNames, fieldIds, configTitle);\n      });\n    },\n\n    downloadServerData(widgetModelName, filterQueryString) {\n      const queryString = this.getReportQuery(widgetModelName, filterQueryString);\n      const session = this.get('session');\n      const apiUrl = `${_apiUrls.API.iquxService.host}/widgetReport?${queryString}`;\n      return this.get('ajax').request(apiUrl, {\n        method: 'GET',\n        headers: {\n          'Authorization': `Bearer ${session.data.authenticated.token}`\n        },\n        contentType: 'application/json'\n      }).then(response => {\n        const data = response.map(widgetData => widgetData.data);\n        data.forEach(widgetRecord => {\n          if (widgetRecord.plannedBreaks) {\n            const objectLength = Object.keys(widgetRecord.plannedBreaks).length;\n            widgetRecord.plannedBreaksCount = objectLength;\n          }\n        });\n        return data;\n      });\n    },\n\n    getReportQuery(widgetName, filter) {\n      const dateQueryFields = this.getDateQueryFields();\n      const selectedProviders = this.getSelectedProviders();\n      const queryTerms = [`widgetName=${Ember.String.capitalize(widgetName)}`, `startDate=${dateQueryFields.startDate}`, `endDate=${dateQueryFields.endDate}`, `startDateUTC= ${dateQueryFields.startDateUTC}`, `endDateUTC=${dateQueryFields.endDateUTC}`, `selectedProviders=${selectedProviders}`];\n\n      if (Ember.isPresent(dateQueryFields.scheduleId)) {\n        queryTerms.push(`scheduleId=${dateQueryFields.scheduleId}`);\n      }\n\n      if (filter) {\n        queryTerms.push(`data.filter=${filter}`);\n      }\n\n      const queryString = queryTerms.join('&');\n      return queryString;\n    },\n\n    driverAvailibilityCheck(rowDataFieldName) {\n      const keys = Object.keys(rowDataFieldName.firstObject);\n      return keys.filter(availibility => {\n        if (DAYS.includes(availibility)) {\n          return rowDataFieldName.firstObject[availibility] === true;\n        }\n      });\n    },\n\n    downloadWidgetRecords(widgetRecords, headerNames, fieldIds, configTitle) {\n      // convert to csv string\n      const escapeCSV = cell => {\n        if (cell === null || typeof cell === 'undefined') return '';\n        const strCell = typeof cell === 'object' ? JSON.stringify(cell) : cell.toString();\n\n        if (strCell.replace(/ /g, '').match(/[\\s,\"]/)) {\n          return '\"' + strCell.replace(/\"/g, '\"\"') + '\"';\n        }\n\n        return strCell;\n      };\n\n      let csvData = widgetRecords.map(function (rowData) {\n        const csvRowStr = fieldIds.map(function (fieldName) {\n          return escapeCSV(rowData[fieldName]);\n        }).join(',');\n        return csvRowStr;\n      });\n      csvData.unshift(headerNames.join(',')); // add header column\n\n      csvData = csvData.join('\\r\\n'); // download csvData\n\n      const link = document.createElement('a');\n      const timestamp = (0, _moment.default)().format('YYYY-MM-DD_HH-mm-ss');\n      const filename = `${timestamp}_${configTitle}.csv`;\n      const blob = new Blob([csvData], {\n        type: 'text/csv;charset=utf-8;'\n      });\n      const url = URL.createObjectURL(blob);\n      link.setAttribute('href', url);\n      link.setAttribute('download', filename);\n      link.style.visibility = 'hidden';\n      document.body.appendChild(link);\n      link.click();\n      document.body.removeChild(link);\n    },\n\n    getSelectedWidgetRecordsByModel(modelName) {\n      const routeRecords = []; // eslint-disable-next-line guard-for-in\n\n      for (const widgetInstance in this.traversalFilters) {\n        const filters = this.traversalFilters[widgetInstance];\n\n        for (const filter of filters) {\n          if (filter.model === modelName) {\n            routeRecords.push(filter.record);\n          }\n        }\n      }\n\n      return routeRecords;\n    },\n\n    /**\n     * After filter is applied clear the old selection\n     * @param widgetInstance\n     */\n    clearTraversalRecords(widgetInstance) {\n      this.traversalFilters[widgetInstance] = [];\n    },\n\n    isMultiRecordsSelected(modelName) {\n      const widgetRecords = this.getSelectedWidgetRecordsByModel(modelName);\n      return widgetRecords.length > 1;\n    },\n\n    deselectAllWidgets() {\n      this.clearAllTraversalRecords();\n      this.trigger(_widgetEvents.DESELECT_ALL_WIDGET_EVENT);\n      this.updateUserSelection();\n      this.updateMap();\n    },\n\n    clearAllTraversalRecords() {\n      this.traversalFilters = {};\n    },\n\n    getSelectedWidgetRecordsByWidgetInstance(widgetInstanceId) {\n      const widgetInstancefilters = this.traversalFilters[widgetInstanceId] || [];\n      return widgetInstancefilters.map(filter => filter.record);\n    },\n\n    /**\n     * update global filter through socket\n     */\n    updateGlobalFilter(dateQueryFields, selectedProviders) {\n      if (this.get('readyToLoadInitialData')) {\n        this.get('socket').sendGlobalFilter(dateQueryFields.startDate, dateQueryFields.endDate, selectedProviders, dateQueryFields.startDateUTC, dateQueryFields.endDateUTC, dateQueryFields.scheduleId);\n      }\n    },\n\n    /**\n     * update widget filter through socket\n     */\n    // eslint-disable-next-line no-unused-vars\n    updateWidgetFilter(widgetInstanceId, modelName, filter, offset, limit, sort) {// Widget wise filter is done on UI, Provider and Data filter is done on Server\n\n      /* if (this.get('readyToLoadInitialData')) {\n         this.get('socket').sendWidgetFilter(widgetInstanceId, modelName, decodeURIComponent(filter), offset, limit, sort);\n       }*/\n    },\n\n    async getFixedRouteEngineParams() {\n      await this.get('fixedRouteEngine').fetchFixedRouteEngine();\n    },\n\n    async getFutureBookings() {\n      try {\n        const bookings = await this.store.query('booking', {\n          filter: `and(ge(legs.requestTime,${TOMORROW}),gt(legs.requestTime,${TODAY}))`\n        });\n        this.set('futureBookings', bookings.toArray());\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error(e.message);\n      }\n    },\n\n    async getFutureSubscriptions() {\n      try {\n        const subscriptions = await this.store.query('subscription', {\n          filter: `and(ge(endDate,${TOMORROW}),gt(endDate,${TODAY}))`\n        });\n        this.set('futureSubscriptions', subscriptions.toArray());\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error(e.message);\n      }\n    },\n\n    /**\n     * fetch driver availabilities by driver id when workspace ( dispatch, schedule ) is loaded\n     * @param driverRecords\n     * @returns {Promise<void>}\n     */\n    async loadDriverAvailabilities(driverRecords) {\n      try {\n        const driverIds = driverRecords.map(rec => rec.id);\n        const query = 'in(\\'driverId\\',(' + driverIds + '))&include=driver';\n        await this.store.query('driver-availability', {\n          filter: query\n        });\n      } catch (e) {\n        // eslint-disable-next-line no-console\n        console.error(e.message);\n      }\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/window-resize\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = Ember.Service.extend(Ember.Evented, {\n    debounceInterval: 250,\n\n    /*eslint-disable */\n    _onResize: undefined,\n\n    /*eslint-enable */\n    init() {\n      this._super(...arguments);\n\n      this._onResize = event => {\n        const debounceInterval = this.get('debounceInterval');\n        Ember.run.debounce(this, '_resizeHandler', event, debounceInterval);\n      };\n\n      this._initialiseResizeListener();\n    },\n\n    destroy() {\n      this._super(...arguments);\n\n      this._destroyResizeListener();\n    },\n\n    _initialiseResizeListener() {\n      window.addEventListener('resize', this._onResize);\n    },\n\n    _destroyResizeListener() {\n      window.removeEventListener('resize', this._onResize);\n    },\n\n    _resizeHandler(event) {\n      this.trigger('didResize', event);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/work\", [\"exports\", \"ember-concurrency\", \"adept-iq/config/environment\"], function (_exports, _emberConcurrency, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // chrome will show a warning if a timeout exceeds 50ms; this is non-critical\n  // but best to avoid if possible\n  const CHROME_TIMEOUT_WARNING_THRESHOLD = 50; // settings from `config/environment.js`; see comments for details\n\n  const DEFAULT_FPS = _environment.default.work.fps;\n  const DEFAULT_CYCLE_SHARE = _environment.default.work.cycleShare;\n  const DEFAULT_STARVATION = 10000; // 10s\n\n  var _default = Ember.Service.extend({\n    interaction: Ember.inject.service(),\n    fps: DEFAULT_FPS,\n    cycleShare: DEFAULT_CYCLE_SHARE,\n    maxLoopTime: Infinity,\n    _queues: null,\n    computeTime: Ember.computed('fps', 'cycleShare', function () {\n      const fps = this.get('fps');\n      const cycleShare = this.get('cycleShare');\n      const computeTime = Math.round(1000.0 * cycleShare / fps);\n\n      if (computeTime >= CHROME_TIMEOUT_WARNING_THRESHOLD) {\n        console.warn(`${computeTime}ms computeTime meets or exceeds ${CHROME_TIMEOUT_WARNING_THRESHOLD}ms warning threshold; increase fps or decrease cycleShare`); // eslint-disable-line no-console\n      }\n\n      if (computeTime < 1) {\n        console.warn('computeTime cannot be less than 1ms; increase cycle share or decrease fps'); // eslint-disable-line no-console\n\n        return 1;\n      }\n\n      return computeTime;\n    }),\n    sleepTime: Ember.computed('fps', 'cycleShare', function () {\n      const fps = this.get('fps');\n      const cycleShare = this.get('cycleShare');\n      const sleepTime = Math.round(1000.0 * (1 - cycleShare) / fps);\n\n      if (sleepTime < 1) {\n        console.warn('sleepTime cannot be less than 1ms; decrease cycleShare or fps'); // eslint-disable-line\n\n        return 1;\n      }\n\n      return sleepTime;\n    }),\n    queues: Ember.computed('_queues.@each.priority', function () {\n      return this.get('_queues').sortBy('priority');\n    }),\n\n    init() {\n      this._super(...arguments);\n\n      this.set('_queues', []);\n    },\n\n    destroy() {\n      this.get('_queues').clear();\n\n      this._super(...arguments);\n    },\n\n    registerQueue(queue) {\n      this.get('_queues').addObject(queue);\n    },\n\n    unregisterQueue(queue) {\n      this.get('_queues').removeObject(queue);\n    },\n\n    start() {\n      return this.get('_task').perform();\n    },\n\n    /* eslint-disable no-continue */\n    _task: (0, _emberConcurrency.task)(function* () {\n      const maxLoopTime = this.get('maxLoopTime');\n      const computeTime = this.get('computeTime');\n      const sleepTime = this.get('sleepTime');\n      const tInit = new Date().getTime();\n      let tStart = tInit;\n      let tRemaining;\n      let n = 0;\n\n      const findFn = q => n === 0 || q.getMinWorkTime() < tRemaining;\n\n      const starvationFn = q => q.getStarvationTime() > DEFAULT_STARVATION;\n\n      while (!this.get('queues').isEvery('isEmpty')) {\n        const tNow = new Date().getTime(); // break out of loop if we have exceeded maximum loop time\n\n        if (tNow - tInit > maxLoopTime) break;\n        tRemaining = Math.max(computeTime - (tNow - tStart), 0);\n        const viableQueues = this.get('queues').reject(q => {\n          return q.get('isEmpty') || q.get('isThrottled') || q.get('isDestroyed') || q.get('isDisabled');\n        });\n        const queue = viableQueues.find(starvationFn) || viableQueues.find(findFn) || viableQueues[0];\n\n        if (tRemaining === 0 || !queue || this.get('interaction.isBusy')) {\n          // out of time or UI in use; sleep for remainder of cycle\n          yield (0, _emberConcurrency.timeout)(tRemaining + sleepTime); // begin a new cycle\n\n          tStart = new Date().getTime();\n          n = 0;\n          continue;\n        }\n\n        const t0 = new Date().getTime();\n        const count = yield queue.start(tRemaining);\n        const tDiff = new Date().getTime() - t0;\n\n        if (_environment.default.APP.DEBUG_QUEUES && tDiff >= CHROME_TIMEOUT_WARNING_THRESHOLD) {\n          console.warn(`${queue.name} took ${tDiff}ms for ${count} job(s) (given ${tRemaining}ms)`); // eslint-disable-line no-console\n        }\n\n        n += 1;\n      }\n    }).drop()\n    /* eslint-enable no-continue */\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/workspace-context\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/classes/work-queue\"], function (_exports, _environment, _workQueue) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // refresh widgets at least this often (if fresh data available)\n  const MIN_RELOAD_INTERVAL = 5000;\n  const LOCAL_STORAGE_KEY = 'dashboard-info';\n\n  var _default = Ember.Service.extend(Ember.Evented, {\n    session: Ember.inject.service(),\n    map: Ember.inject.service(),\n    socket: Ember.inject.service(),\n    store: Ember.inject.service(),\n    work: Ember.inject.service(),\n    workspace: Ember.inject.service(),\n    activeContext: Ember.inject.service(),\n    user: Ember.inject.service(),\n    audioAlert: Ember.inject.service(),\n    providerNames: Ember.computed.readOnly('session.data.authenticated.tokenInfo.providerNames'),\n    // work queues\n    normalizeQueue: null,\n    storeQueue: null,\n    reloadQueue: null,\n    nodeQueue: null,\n    // internal data structures\n    _structuredWorkspace: null,\n    _selectedProviders: null,\n    // all providers are selected in dropdown\n    _allProviders: true,\n    // used by dropdown-provider\n    providerTitle: 'All Providers',\n    // keeps track of records that have been (or are pending) deletion\n    _deletedLookup: null,\n    // keeps track of model types that may have been loaded or unloaded; used to\n    // refresh widgets\n    _dirtyModelNames: null,\n    // Serializer Dict\n    _serializerDict: null,\n\n    init() {\n      this._super(...arguments);\n\n      this.set('_deletedLookup', {});\n      this.set('_dirtyModelNames', []);\n      this.set('_serializerDict', {}); // this queue handles ember data normalization\n\n      const normalizeQueueOptions = Object.assign({}, _environment.default.work['wc-normalize'], {\n        name: 'wc-normalize',\n        perform: jobs => {\n          jobs.forEach(job => {\n            this._processNormalizeJob(job);\n          });\n        }\n      });\n\n      const normalizeQueue = _workQueue.default.create(normalizeQueueOptions);\n\n      this.get('work').registerQueue(normalizeQueue);\n      this.set('normalizeQueue', normalizeQueue); // this queue handles pushing records into ember store\n\n      const storeQueueOptions = Object.assign({}, _environment.default.work['wc-store'], {\n        name: 'wc-store',\n        perform: jobs => {\n          jobs.forEach(job => {\n            this._processStoreJob(job);\n          });\n        }\n      });\n\n      const storeQueue = _workQueue.default.create(storeQueueOptions);\n\n      this.get('work').registerQueue(storeQueue);\n      this.set('storeQueue', storeQueue); // this queue handles notifying the UI for refresh\n\n      const reloadQueueOptions = Object.assign({}, _environment.default.work['wc-reload'], {\n        name: 'wc-reload',\n        workspace: this.get('workspace'),\n        perform: jobs => {\n          jobs.forEach(job => this._processReloadJob(job));\n        }\n      });\n\n      const reloadQueue = _workQueue.default.extend({\n        isDisabled: false\n      }).create(reloadQueueOptions);\n\n      this.get('work').registerQueue(reloadQueue);\n      this.set('reloadQueue', reloadQueue);\n      const nodeQueueOptions = Object.assign({}, _environment.default.work['wc-node'], {\n        name: 'wc-node',\n        perform: jobs => {\n          jobs.forEach(job => {\n            this._processNodeJob(job);\n          });\n        }\n      });\n\n      const nodeQueue = _workQueue.default.extend({\n        isDisabled: false\n      }).create(nodeQueueOptions);\n\n      this.get('work').registerQueue(nodeQueue);\n      this.set('nodeQueue', nodeQueue);\n      this.loadAPIData(); // activates observer and triggers initial load\n\n      this.onDatesChange();\n    },\n\n    destroy() {\n      ['storeQueue', 'normalizeQueue', 'reloadQueue', 'nodeQueue'].forEach(queueName => {\n        const queue = this.get(queueName);\n        this.get('work').unregisterQueue(queue);\n        queue.destroy();\n      });\n      this.set('_deletedLookup', null);\n      this.get('_dirtyModelNames').clear();\n      this.set('_structuredWorkspace', null);\n\n      this._super(...arguments);\n    },\n\n    // flattened for easy binding & iteration\n    workspaceData: Ember.computed('_structuredWorkspace', function () {\n      const data = this.get('_structuredWorkspace');\n      return Object.entries(data).reduce((arr, _ref) => {\n        let [modelName, records] = _ref;\n        records.forEach(record => {\n          arr.push({\n            modelName,\n            record\n          });\n        });\n        return arr;\n      }, []);\n    }),\n    onScheduleChange: Ember.observer('workspace.currentSchedule', function () {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      const currentSchedule = this.get('workspace.currentSchedule');\n\n      if (isScheduleDashboard) {\n        if (Ember.isEmpty(currentSchedule)) return true;\n        Ember.run.scheduleOnce('afterRender', this, 'refreshWidget');\n      }\n    }),\n    onDatesChange: Ember.observer('workspace.{startDate,endDate}', 'activeContext.topActiveContext', function () {\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const topActiveContext = this.get('activeContext.topActiveContext');\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      if (!startDate || !endDate || !topActiveContext) return;\n      const startTime = startDate.getTime();\n      const endTime = endDate.getTime();\n\n      if (startTime < endTime) {\n        Ember.run.scheduleOnce('afterRender', this, 'resetAndConnect');\n      } // workspace dates change need to refresh the metric widgets\n\n\n      if (isScheduleDashboard) {\n        Ember.run.scheduleOnce('afterRender', this, 'refreshMetricWidget');\n      }\n    }),\n    onWorkspaceChange: Ember.observer('_structuredWorkspace', function () {\n      Ember.run.scheduleOnce('afterRender', this, 'refreshMap');\n      Ember.run.scheduleOnce('afterRender', this, 'refreshWidgets');\n    }),\n\n    resetAndConnect() {\n      this.get('reloadQueue').addJob('reload'); // reconnect to sockets\n\n      const startDate = this.get('workspace.startDate');\n      const endDate = this.get('workspace.endDate');\n      const startTime = startDate.getTime();\n      const endTime = endDate.getTime();\n      (true && !(startTime < endTime) && Ember.assert('workspace startTime must predate endTime', startTime < endTime)); // this will wait for any sync topics before resolving\n\n      this.get('socket').connect({\n        startDate,\n        endDate\n      });\n    },\n\n    refreshMetricWidget() {\n      const refreshTableContent = this.get('activeContext.topActiveContext.refreshTableContent');\n      refreshTableContent.perform(['metric']);\n    },\n\n    refreshWidget() {\n      const refreshTableContent = this.get('activeContext.topActiveContext.refreshTableContent');\n      refreshTableContent.perform(['subscription', 'zone']);\n    },\n\n    async fetchProviderList() {\n      const providers = await this.get('store').findAll('provider');\n      const activeProviders = providers.filter(provider => {\n        return !Ember.isEmpty(provider.get('name')) && !Ember.isEmpty(provider.get('id')) && provider.get('userCanAccessProvider');\n      });\n      this.set('providersList', activeProviders);\n    },\n\n    setupProviderList() {\n      if (Ember.isEmpty(this.get('providersList'))) {\n        this.fetchProviderList();\n      }\n\n      this.setSelectedProviders();\n    },\n\n    setSelectedProviders() {\n      const activeSelectedProviders = this.getCurrentProviderSelection();\n      this.set('_selectedProviders', activeSelectedProviders);\n      this.get('reloadQueue').addJob('refresh');\n    },\n\n    getCurrentProviderSelection() {\n      const isRoadSupEnable = this.user.isRoadSupEnable();\n      const dashboardInfo = localStorage.getItem(LOCAL_STORAGE_KEY);\n      const providers = this.get('providersList') || [];\n\n      if (_environment.default.APP.avlmLite) {\n        if (isRoadSupEnable && dashboardInfo) {\n          const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n          if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n            const accessDataObj = parsedDashboardInfo.accessData;\n            const provider = this.store.peekRecord('provider', accessDataObj.provider);\n\n            if (!provider) {\n              const newProvider = this.store.createRecord('provider', {\n                id: accessDataObj.provider,\n                name: accessDataObj.provider,\n                isChecked: true\n              });\n              providers.push(newProvider);\n            }\n          }\n        }\n      }\n\n      return providers.filter(record => {\n        if (isRoadSupEnable && (this.providerNames.includes('ALL') || this.providerNames.includes(record.id))) return true;\n        if (this._allProviders) return true;\n        return record.isChecked;\n      });\n    },\n\n    // loads static data at application start\n    loadAPIData() {\n      const user = this.get('user');\n      const store = this.get('store');\n      let promises = [];\n\n      if (user.isAdmin()) {\n        promises = [store.findAll('cs-config-category'), store.findAll('cs-config-item'), store.findAll('sso-role'), store.findAll('route-template'), store.findAll('zone')];\n      } else {\n        promises = [store.findAll('cs-config-category'), store.findAll('cs-config-item'), store.findAll('route-template'), store.findAll('zone')];\n      }\n\n      return Ember.RSVP.all(promises).then(async () => {\n        const audioAlert = this.get('audioAlert');\n        await audioAlert.loadConfig();\n      });\n    },\n\n    pushPayloads(payloads) {\n      payloads.forEach((payload, i) => {\n        this.pushPayload(payload, i === payloads.length - 1);\n      });\n    },\n\n    pushPayload(payload) {\n      let start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      const flattenedPayloads = this._flattenPayload(payload);\n\n      flattenedPayloads.forEach(flattenedPayload => {\n        if (_environment.default.APP.ENABLE_HIGH_PRIORITY_MODELS) {\n          if (_environment.default.APP.HIGH_PRIORITY_MODELS[flattenedPayload.data.type]) {\n            this.get('normalizeQueue').unshiftJob({\n              payload: flattenedPayload\n            });\n          } else {\n            this.get('normalizeQueue').pushJob({\n              payload: flattenedPayload\n            });\n          }\n        } else {\n          this.get('normalizeQueue').pushJob({\n            payload: flattenedPayload\n          });\n        }\n      });\n\n      if (start) {\n        this.get('work').start();\n      }\n    },\n\n    removeRecord(modelName, id) {\n      // this may not actually exist yet\n      const record = this.get('store').peekRecord(modelName, id);\n      const storeQueue = this.get('storeQueue');\n      storeQueue.pushJob({\n        action: 'remove',\n        modelName,\n        id,\n        record\n      });\n      this.get('work').start();\n    },\n\n    manualStorePayload(payload) {\n      const store = this.get('store');\n\n      const normalizedPayload = this._normalizePayload(payload);\n\n      const completedPayload = this._completePayload(normalizedPayload);\n\n      store.pushPayload(completedPayload);\n    },\n\n    async manualReloadContext() {\n      this._processReloadJob();\n\n      const nodeQueue = this.get('nodeQueue');\n      return nodeQueue.start();\n    },\n\n    manualReloadContextByModel(modelName) {\n      const activeContextNodes = this.get('activeContext.topActiveContext.nodes') || [];\n      const node = activeContextNodes.findBy('modelName', modelName);\n\n      if (node) {\n        this.get('nodeQueue').addJob({\n          node: activeContextNodes.findBy('modelName', modelName)\n        });\n        this.get('work').start();\n      }\n    },\n\n    refreshMap() {\n      this.get('map.mapContexts').forEach(mapContext => {\n        mapContext.trigger('refresh');\n      });\n    },\n\n    refreshWidgets() {\n      const activeContextNodes = this.get('activeContext.topActiveContext.nodes') || [];\n      const dirtyModelNames = this.get('_dirtyModelNames').slice(); // expand dirty model names\n\n      const expandedModelNames = dirtyModelNames.reduce((arr, modelName) => {\n        arr.addObject(modelName);\n        const sourceNode = activeContextNodes.findBy('modelName', modelName);\n        if (!sourceNode) return arr;\n        return arr;\n      }, []);\n      this.get('_dirtyModelNames').clear();\n      this.trigger('change', expandedModelNames);\n    },\n\n    _processNormalizeJob(job) {\n      const storeQueue = this.get('storeQueue');\n\n      const normalizedPayload = this._normalizePayload(job.payload);\n\n      if (!normalizedPayload) {\n        return;\n      }\n\n      if (_environment.default.APP.ENABLE_HIGH_PRIORITY_MODELS) {\n        if (_environment.default.APP.HIGH_PRIORITY_MODELS[normalizedPayload.data.type]) {\n          storeQueue.unshiftJob({\n            action: 'push',\n            payload: normalizedPayload\n          });\n        } else {\n          storeQueue.pushJob({\n            action: 'push',\n            payload: normalizedPayload\n          });\n        }\n      } else {\n        storeQueue.pushJob({\n          action: 'push',\n          payload: normalizedPayload\n        });\n      }\n    },\n\n    _processStoreJob(job) {\n      const store = this.get('store');\n      const dirtyModelNames = this.get('_dirtyModelNames');\n\n      switch (job.action) {\n        case 'push':\n          {\n            // complete at last second in case related entities have been loaded\n            if (job.payload.data.id !== '0') {\n              const completedPayload = this._completePayload(job.payload); // because it does not process `included` array the same way\n\n\n              try {\n                store.pushPayload(completedPayload);\n              } catch (e) {\n                // eslint-disable-next-line no-console\n                console.error(e, completedPayload);\n              }\n\n              dirtyModelNames.addObject(job.payload.data.type);\n            }\n\n            break;\n          }\n\n        case 'remove':\n          {\n            const record = job.record || store.peekRecord(job.modelName, job.id);\n\n            if (record && !record.get('isRemoved')) {\n              // this allow for faster filtering later\n              const key = `${record.constructor.modelName}:${record.get('id')}`;\n              record.set('isRemoved', true); // mark record as deleted so it will be excluded from widget refreshes\n\n              this._deletedLookup[key] = true;\n              Ember.run.scheduleOnce('afterRender', this, () => {\n                // deleted payload comes twice, only attempt unload once\n                if (!this._deletedLookup[key]) {\n                  // WATCHOUT for updating ember source these internal apis might be depreciated in future versions of EMBER\n                  // transitioning to deleted.save state, ember internal docs says this should update all other record associated belongsTo / hasMany\n                  record.get('_internalModel').transitionTo('deleted.saved'); // deleting the record client requires these two statements\n\n                  record.unloadRecord();\n\n                  store._removeFromIdMap(record._internalModel);\n                }\n              });\n            }\n\n            dirtyModelNames.addObject(job.modelName);\n            break;\n          }\n\n        default:\n          break;\n      }\n\n      const t = new Date();\n      const reloadQueue = this.get('reloadQueue');\n      const lastReloadAt = reloadQueue.get('lastRunAt'); // run when both queues clear, or at least every MIN_RELOAD_INTERVAL ms\n\n      if (this.get('storeQueue.length') === 0 && this.get('normalizeQueue.length') === 0 && this.get('reloadQueue.length') === 0) {\n        reloadQueue.addJob('reload');\n      } else if ((!lastReloadAt || t - lastReloadAt > MIN_RELOAD_INTERVAL) && this.get('reloadQueue.length') === 0) {\n        reloadQueue.addJob('reload');\n      }\n    },\n\n    _processReloadJob() {\n      const activeContextNodes = this.get('activeContext.topActiveContext.nodes') || [];\n      const isRoadSupEnable = this.user.isRoadSupEnable();\n      const dashboardInfo = localStorage.getItem(LOCAL_STORAGE_KEY);\n      const providers = this.get('providersList') || []; // FIXME: this should be done once elsewhere\n\n      if (_environment.default.APP.avlmLite) {\n        if (isRoadSupEnable && dashboardInfo) {\n          const parsedDashboardInfo = JSON.parse(dashboardInfo);\n\n          if (parsedDashboardInfo && parsedDashboardInfo.accessData) {\n            const accessDataObj = parsedDashboardInfo.accessData;\n            const provider = this.store.peekRecord('provider', accessDataObj.provider);\n\n            if (!provider) {\n              const newProvider = this.store.createRecord('provider', {\n                id: accessDataObj.provider,\n                name: accessDataObj.provider,\n                isChecked: true\n              });\n              providers.push(newProvider);\n            }\n          }\n        }\n      }\n\n      const providerDict = providers.reduce((acu, item) => {\n        acu[item.id] = item.isChecked;\n        return acu;\n      }, {});\n      this.set('_providerDict', providerDict);\n\n      if (this.get('workspace.isRoadSupervisorModeEnabled')) {\n        // When in navigation mode, only update avlm-message node.\n        this.get('nodeQueue').addJob({\n          node: activeContextNodes.findBy('id', 'avlm-message'),\n          forceRefresh: false\n        });\n        return;\n      }\n\n      activeContextNodes.forEach((node, i) => {\n        // trigger map & widget refresh after processing last node of this reload\n        const forceRefresh = i === activeContextNodes.length - 1;\n        this.get('nodeQueue').addJob({\n          node,\n          forceRefresh\n        });\n      });\n    },\n\n    _filterRecordsBySchedule(peekedRecords, node) {\n      const isScheduleDashboard = this.get('workspace.isScheduleDashboard');\n      const currentSchedule = this.get('workspace.currentSchedule');\n      const scheduleFilterKey = node.scheduleFilterKey || false;\n      if (!isScheduleDashboard || !currentSchedule || !scheduleFilterKey) return peekedRecords;\n      return peekedRecords.filter(record => {\n        const schedules = Ember.makeArray(record.get(scheduleFilterKey));\n        if (Ember.isEmpty(schedules)) return false;\n        return schedules.some(schedule => parseInt(schedule.get('id'), 10) === parseInt(currentSchedule.get('id'), 10));\n      });\n    },\n\n    _filterRecordsByProvider(node) {\n      // Perfomance mode do not need provider filters except for vehicle models (to render on Map Widgets)\n      const store = this.get('store');\n      const peekedRecords = store.peekAll(node.modelName).toArray() || [];\n\n      if (node.modelName === 'vehicle' && !Ember.isEmpty(this.get('_selectedProviders'))) {\n        const providerDict = this.get('_selectedProviders').reduce((acu, item) => {\n          acu[item.id] = true;\n          return acu;\n        }, {});\n        const filterRecords = peekedRecords.filter(record => {\n          return record.get(node.providerFilterKey) && providerDict[record.get(node.providerFilterKey).get('id')];\n        });\n        return filterRecords;\n      }\n\n      return peekedRecords;\n    },\n\n    _processNodeJob(job) {\n      const {\n        node,\n        forceRefresh\n      } = job;\n      const obj = this.get('_structuredWorkspace');\n      if (!obj) return {}; // structured workspace hasn't been made yet till active context bindings occur\n\n      const peekedRecords = this._filterRecordsByProvider(node);\n      /* eslint-enable no-continue */\n\n\n      obj[node.modelName] = obj[node.modelName] || [];\n      obj[node.modelName].splice(0, obj[node.modelName].length, ...peekedRecords);\n\n      if (forceRefresh) {\n        // only trigger observers if specifically instructed\n        this.notifyPropertyChange('_structuredWorkspace');\n      }\n    },\n\n    _isRecordRemoved(record) {\n      switch (record.constructor.modelName) {\n        case 'avlm-trip':\n          return record.get('status') === 'X';\n\n        case 'avlm-stop-point':\n          return record.get('status') === 'R';\n\n        case 'avlm-alert':\n          return record.get('state') === 'completed';\n\n        default:\n          return record.get('isRemoved');\n      }\n    },\n\n    // recursively unpacks included payloads into a flat array\n    _flattenPayload(payload) {\n      const q = [payload];\n      const flattened = [];\n\n      const handleIncludedPayload = data => {\n        if (data.included) {\n          // non-standard, but does happen in IQUX\n          delete data.included;\n          q.push({\n            data: data.included\n          });\n        } else {\n          q.push({\n            data\n          });\n        }\n      };\n\n      while (q.length) {\n        const p = q[q.length - 1];\n\n        if (p.included) {\n          p.included.forEach(handleIncludedPayload);\n          delete p.included;\n        } else {\n          flattened.push(p);\n          q.pop();\n        }\n      }\n\n      return flattened;\n    },\n\n    // processes a payload with its serializers' `normalize()` method\n    _normalizePayload(payload) {\n      const store = this.get('store');\n      const serializerDict = this.get('_serializerDict');\n\n      if (!serializerDict[payload.data.type]) {\n        try {\n          const modelClass = store.modelFor(payload.data.type);\n          const serializer = store.serializerFor(payload.data.type);\n\n          if (!modelClass || !serializer) {\n            console.error('no modelClass or serializer for ' + payload.data.id); //eslint-disable-line no-console\n          }\n\n          serializerDict[payload.data.type] = {\n            modelClass,\n            serializer\n          };\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          console.log(payload, e);\n        }\n      } // use normalizeResponse because some included part we need to handle\n\n\n      if (serializerDict[payload.data.type].serializer.normalizeWidgetRecord) {\n        try {\n          return serializerDict[payload.data.type].serializer.normalizeWidgetRecord(store, serializerDict[payload.data.type].modelClass, payload, payload.data.id, 'createRecord');\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          console.log(e, payload);\n        }\n      }\n    },\n\n    // adds placeholder models to payload's `included` hash for any related\n    // models that don't exist in store yet\n    _completePayload(payload) {\n      const store = this.get('store');\n      if (!payload.data) return payload;\n      payload.included = payload.included || []; // if included already contains data don't generate payload.\n\n      const includeDict = payload.included.reduce((dict, inc) => {\n        dict[inc.type] = true;\n        return dict;\n      }, {});\n\n      if (payload.data.relationships === {}) {\n        delete payload.data.relationships;\n      }\n\n      if (payload.data.relationships) {\n        Object.values(payload.data.relationships).forEach(rel => {\n          if (Array.isArray(rel.data)) {\n            rel.data.forEach(data => {\n              if (!store.peekRecord(data.type, data.id) || data.id !== '0') {\n                // sso-user need to query from sso services\n                // vehicle-type & provider from config service\n                if (data.type !== 'sso-user' && data.type !== 'vehicle-type' && data.type !== 'provider' && !includeDict[data.type]) {\n                  payload.included.push(data);\n                }\n              }\n            });\n          } else if (rel.data) {\n            if (!store.peekRecord(rel.data.type, rel.data.id) || rel.data.id !== '0') {\n              // sso-user need to query from sso services\n              // vehicle-type & provider from config service\n              if (rel.data.type !== 'sso-user' && rel.data.type !== 'vehicle-type' && rel.data.type !== 'provider' && !includeDict[rel.data.type]) {\n                payload.included.push(rel.data);\n              }\n            }\n          }\n        });\n      }\n\n      if (Ember.isEmpty(payload.included)) {\n        delete payload.included;\n      }\n\n      return payload;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/services/workspace\", [\"exports\", \"moment\", \"lodash\", \"adept-iq/config/environment\", \"adept-iq/config/mapped-permIds\", \"adept-iq/config/workspace-states\", \"adept-iq/utils/guid\", \"adept-iq/mixins/async-schedule-operation\", \"adept-iq/config/api-urls\", \"adept-iq/utils/flattenData\"], function (_exports, _moment, _lodash, _environment, _mappedPermIds, _workspaceStates, _guid, _asyncScheduleOperation, _apiUrls, _flattenData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const DEFAULT_SIZE = 'small';\n  const DEFAULT_TILE_SIZE = 100;\n  const DEFAULT_TILE_SPACING = 4;\n  const GENERAL_WIDGET_STATE = 'general';\n\n  const logger = () => null;\n\n  const STATE_MACHINE = {\n    defaultStateId: 'default',\n    // TODO\n    // it'd better to reduce the states into categorical states side-drawer, modal, etc... and then in push state object the correct item is rendered dynamically\n    // reduces the amount of adding states & reducing adding templates into the application.hbs\n    // reducing the amount of side-drawer ones unless they have a specific hook they need or something\n    states: _workspaceStates.default\n  };\n\n  var _default = Ember.Service.extend(_asyncScheduleOperation.default, {\n    activeContext: Ember.inject.service(),\n    router: Ember.inject.service(),\n    session: Ember.inject.service(),\n    scheduleGeneration: Ember.inject.service(),\n    store: Ember.inject.service(),\n    tooltip: Ember.inject.service(),\n    notifications: Ember.inject.service(),\n    workspaceContext: Ember.inject.service(),\n    ajaxService: Ember.inject.service('ajax'),\n    permissionLayer: Ember.inject.service(),\n    geocode: Ember.inject.service(),\n    widget: Ember.inject.service(),\n    socket: Ember.inject.service(),\n    size: DEFAULT_SIZE,\n    tileSize: DEFAULT_TILE_SIZE,\n    tileSpacing: DEFAULT_TILE_SPACING,\n    isLightMode: false,\n    isDragging: false,\n    isResizing: false,\n    isShowAbout: false,\n    isDrawerShrunken: false,\n    isEditingTimeline: false,\n    hasLockedSchedule: false,\n    reoptimizeInProgress: false,\n    systemConfigInProgress: false,\n    currentState: null,\n    operationType: null,\n    contentHeight: null,\n    contentWidth: null,\n    stack: null,\n    configPermissions: null,\n    _dashboardModel: null,\n    _dashboardInstance: null,\n    mappedPermIds: _mappedPermIds.default,\n    currentSchedule: null,\n    triggeredReoptimize: null,\n    // did user trigger reopt\n    ajax: Ember.computed.readOnly('ajaxService'),\n    isScheduleDashboard: Ember.computed.readOnly('dashboardModel.isScheduleDashboard'),\n    isDispatchDashboard: Ember.computed.readOnly('dashboardModel.isDispatchDashboard'),\n    isPlaybackDashboard: Ember.computed.readOnly('dashboardModel.isPlaybackDashboard'),\n    isReconcileDashboard: Ember.computed.readOnly('dashboardModel.isReconcileDashboard'),\n    isVehicleDriverDashboard: Ember.computed.readOnly('dashboardModel.isVehicleDriverDashboard'),\n    isRiderManagementDashboard: Ember.computed.readOnly('dashboardModel.isRiderManagementWorkspace'),\n    isBookingDashboard: Ember.computed.readOnly('dashboardModel.isBookingDashboard'),\n    isRoadSupervisorDashboard: Ember.computed.readOnly('dashboardModel.isRoadSupervisorDashboard'),\n    isPermissionsDashboard: Ember.computed.readOnly('dashboardModel.isPermissionsDashboard'),\n    isReportsDashboard: Ember.computed.readOnly('dashboardModel.isReportsDashboard'),\n    isAdhocReportsDashboard: Ember.computed.readOnly('dashboardModel.isAdhocReportsDashboard'),\n    sideDrawerComponent: Ember.computed.readOnly('stack.lastObject.sideDrawerComponent'),\n    playbackFilterSettingClosed: false,\n    playbackFilterSettingClosedofVehicleGrid: false,\n    helpSelectedTab: '',\n    isSideDrawerVisible: Ember.computed.alias('stack.lastObject.isSideDrawerVisible'),\n    topState: Ember.computed.alias('stack.lastObject.state'),\n    topStateDisplayName: Ember.computed.alias('stack.lastObject.options.displayName'),\n    topOptions: Ember.computed.alias('stack.lastObject.options'),\n    topActivityId: Ember.computed.alias('stack.lastObject.activityId'),\n    stackDepth: Ember.computed.alias('stack.length'),\n    isEditing: Ember.computed.or('isEditingWorkspace', 'isEditingPlayback'),\n    isEditingWorkspace: Ember.computed.equal('topState', 'editWorkspace'),\n    isEditingPlayback: Ember.computed.equal('topState', 'editPlayback'),\n    isEditingReconcile: Ember.computed.and('isEditingWorkspace', 'isReconcileDashboard'),\n    isGlobalSpinnerVisible: Ember.computed.alias('scheduleGeneration.isRunning'),\n    isDashboardPickerOpen: Ember.computed.equal('topState', 'openWorkspace'),\n    isDashboardSaveAsOpen: Ember.computed.equal('topState', 'saveWorkspaceAs'),\n    isReoptimizeOpen: Ember.computed.equal('topState', 'reoptimize'),\n    isScheduleGenerate: Ember.computed.equal('topState', 'schedule-generate'),\n    isClosingSchedule: Ember.computed.equal('topState', 'closeSchedule'),\n    isDashboardEditAsOpen: Ember.computed.equal('topState', 'editWorkspaceAs'),\n    isRoadSupervisorModeEnabled: Ember.computed.equal('topState', 'roadSupervisor'),\n    isExporting: Ember.computed.equal('operationType', 'export'),\n    generalWidgetState: Ember.computed('widgetStates', function () {\n      const widgetStates = this.get('widgetStates') || {};\n      const widgetState = widgetStates[GENERAL_WIDGET_STATE] || {};\n      return widgetState;\n    }),\n    showGrid: Ember.computed('generalWidgetState.showGrid', {\n      get() {\n        return this.get('generalWidgetState.showGrid') || false;\n      },\n\n      set(key, value) {\n        const generalWidgetState = { ...this.get(`dashboardInstance.widgetStates.${GENERAL_WIDGET_STATE}`)\n        };\n        generalWidgetState.showGrid = value;\n        this.set(`dashboardInstance.widgetStates.${GENERAL_WIDGET_STATE}`, generalWidgetState);\n        return value;\n      }\n\n    }),\n    isConnectionUnstable: Ember.computed('socket.socketReconnectCount', function () {\n      const count = this.get('socket.socketReconnectCount') || 0;\n\n      if (count > 0) {\n        return true;\n      }\n\n      return false;\n    }),\n    gridWidth: Ember.computed('contentWidth', 'tileSize', function () {\n      return Math.floor(this.get('contentWidth') / this.get('tileSize'));\n    }),\n    gridHeight: Ember.computed('contentHeight', 'tileSize', function () {\n      return Math.floor(this.get('contentHeight') / this.get('tileSize'));\n    }),\n    isExported: Ember.computed('currentSchedule.isExported', 'isScheduleDashboard', function () {\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      const isExported = this.get('currentSchedule.isExported');\n      return isExported && isScheduleDashboard;\n    }),\n    useWidgetLayoutWorkspace: Ember.computed('isBookingDashboard', 'isRiderManagementDashboard', 'isDispatchDashboard', 'isScheduleDashboard', 'isPlaybackDashboard', 'isReconcileDashboard', 'isRoadSupervisorDashboard', 'isReportsDashboard', 'isPermissionsDashboard', function () {\n      const isDispatchDashboard = this.get('isDispatchDashboard');\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      const isPlaybackDashboard = this.get('isPlaybackDashboard');\n      const isBookingDashboard = this.get('isBookingDashboard');\n      const isRiderManagementDashboard = this.get('isRiderManagementDashboard');\n      const isReconcileDashboard = this.get('isReconcileDashboard');\n      const isRoadSupervisorDashboard = this.get('isRoadSupervisorDashboard');\n      const isPermissionsDashboard = this.get('isPermissionsDashboard');\n      const isReportsDashboard = this.get('isReportsDashboard'); //before defining the dashboard attributes  useWidgetLayoutWorkspace should be true\n\n      if ((0, _lodash.isUndefined)(isBookingDashboard) && (0, _lodash.isUndefined)(isDispatchDashboard) && (0, _lodash.isUndefined)(isScheduleDashboard) && (0, _lodash.isUndefined)(isPlaybackDashboard) && (0, _lodash.isUndefined)(isReconcileDashboard) && (0, _lodash.isUndefined)(isRoadSupervisorDashboard) && (0, _lodash.isUndefined)(isReportsDashboard) && (0, _lodash.isUndefined)(isPermissionsDashboard)) {\n        return true;\n      }\n\n      return isDispatchDashboard || isScheduleDashboard || isPlaybackDashboard || isReconcileDashboard || isBookingDashboard || isRiderManagementDashboard || isRoadSupervisorDashboard || isReportsDashboard || isPermissionsDashboard;\n    }),\n    // @FIXME: using an observer is a band aid, and there could be a way to refactor this, but it might need to ask the back-end for help\n    // due to schedule not having distinct states\n    currentScheduleStateChange: Ember.observer('isScheduleDashboard', 'currentSchedule.status', 'isExporting', function () {\n      const isScheduleDashboard = this.get('isScheduleDashboard');\n      const triggeredReoptimize = this.get('triggeredReoptimize');\n      const isGenerated = this.get('currentSchedule.isGenerated');\n      const isExporting = this.get('isExporting');\n\n      if (isScheduleDashboard && isExporting) {\n        this._enableReoptimizeInProgressModal();\n\n        return;\n      }\n\n      if (isScheduleDashboard && !triggeredReoptimize && isGenerated) this._enableReoptimizeInProgressModal();\n    }),\n\n    _enableReoptimizeInProgressModal() {\n      const currentSchedule = this.get('currentSchedule');\n      this.set('reoptimizeInProgress', true);\n      this.get('pollScheduleOperationState').perform(currentSchedule).then(res => {\n        if (res.state === 'failure') this.resetReoptimizeInProgressModal();\n        if (res.operationType === 'generate' && (res.progress >= 100 || res.isJobSuccess)) this.resetReoptimizeInProgressModal();else if (res.operationType === 'export' && res.isJobSuccess) this.resetReoptimizeInProgressModal();\n      }).catch(() => {\n        this.resetReoptimizeInProgressModal();\n      });\n    },\n\n    resetReoptimizeInProgressModal() {\n      setTimeout(() => {\n        this.set('reoptimizeInProgress', false);\n        this.set('operationType', null);\n      }, 1000);\n    },\n\n    onDatesChange: Ember.observer('endDate', function () {\n      this.validateTimeLineForLockedSchedule();\n    }),\n\n    async findCurrentScheduleOrCreate(schedules) {\n      const {\n        startDate\n      } = this.getProperties('startDate');\n      const isScheduleDashboard = this.get('isScheduleDashboard'); // if (isEmpty(schedule)) {\n      // create schedule if not found\n      // Fix NYAAR-9286 need to handle while merge with R5\n      //   schedule = await this.createSchedule();\n      // }\n\n      if (isScheduleDashboard) {\n        const scheduleName = (0, _moment.default)(startDate).format('YYYY-MM-DD');\n        const schedule = schedules.find(currSchedule => {\n          return currSchedule.get('name') === scheduleName;\n        });\n        this.set('currentSchedule', schedule);\n\n        if (Ember.isEmpty(schedule)) {\n          this.get('notifications').warning('System unable to generate a schedule for the selected date. Please contact an administrator.');\n        }\n      }\n    },\n\n    async createSchedule() {\n      const {\n        startDate,\n        endDate\n      } = this.getProperties('startDate', 'endDate');\n      let scheduleConfiguration = await this.get('store').findAll('schedule-configuration');\n\n      if (scheduleConfiguration) {\n        scheduleConfiguration = scheduleConfiguration.get('firstObject');\n      } // ensure name is unique\n\n\n      const baseName = (0, _moment.default)(startDate).format('YYYY-MM-DD');\n      const ssSchedule = this.get('store').createRecord('schedule', {\n        start: startDate,\n        end: endDate,\n        name: baseName,\n        status: 'unscheduled',\n        scheduleConfiguration\n      });\n      return ssSchedule.save();\n    },\n\n    requestWootricSurvey(eventName) {\n      const enableWootric = this.get('store').peekRecord('cs-config-item', 'config-System_Configuration-Wootric_Configuration/enableWootricSurvey');\n      const dashboard = this.get('dashboardModel.role');\n\n      if (enableWootric && enableWootric.value) {\n        Ember.$.getScript('https://disutgh7q0ncc.cloudfront.net/beacon.js', function () {\n          // eslint-disable-next-line camelcase\n          window.wootricSettings.event_name = eventName;\n          window.wootricSettings.properties.workspace = dashboard; // eslint-disable-next-line no-undef\n\n          WootricSurvey.run(window.wootricSettings);\n        });\n      }\n    },\n\n    // @TODO Fix when new Domain Shift for Schedule Service\n    validateTimeLineForLockedSchedule() {\n      const startDate = (0, _moment.default)(this.get('startDate'));\n      const endDate = (0, _moment.default)(this.get('endDate'));\n      const session = this.get('session');\n      const filterQuery = 'eq(type,\\'primary\\')';\n\n      if (!_environment.default.APP.avlmLite && session.isAuthenticated) {\n        this.store.query('schedule', {\n          filter: filterQuery\n        }, {\n          reload: true\n        }).then(SSchedules => {\n          this.findCurrentScheduleOrCreate(SSchedules.sortBy('id'));\n          this.store.findAll('dispatch-schedule', {\n            reload: true\n          }).then(schedules => {\n            schedules.forEach(schedule => {\n              if (schedule.get('locked')) {\n                const scheduleStart = (0, _moment.default)(schedule.get('schedule.start'));\n                const scheduleEnd = (0, _moment.default)(schedule.get('schedule.end'));\n\n                if (startDate.isBetween(scheduleStart, scheduleEnd) || endDate.isBetween(scheduleStart, scheduleEnd) || scheduleStart.isBetween(startDate, endDate) || scheduleEnd.isBetween(startDate, endDate)) {\n                  this.get('notifications').info('The current timeline contains at least one day with a closed schedule. In order to edit data, you must be viewing day(s) where the schedule is not closed.');\n                }\n              }\n            });\n          }).then(() => {\n            const workspaceContext = this.get('workspaceContext');\n            const isScheduleDashboard = this.get('isScheduleDashboard'); // workspace dates change need to refresh the metric widgets\n\n            if (isScheduleDashboard) {\n              Ember.run.scheduleOnce('afterRender', workspaceContext, 'refreshMetricWidget');\n            }\n          });\n        });\n      }\n    },\n\n    isDiagnosticToolShown: Ember.computed('dashboardInstance.widgets.[]', function () {\n      const widgets = this.get('dashboardInstance.widgets');\n      return widgets.some(widget => widget.get('typeId') === 'scatter-chart');\n    }),\n    isTimelineSpanMultipleDays: Ember.computed('startDate', 'endDate', function () {\n      const startDate = (0, _moment.default)(this.get('startDate'));\n      const endDate = (0, _moment.default)(this.get('endDate'));\n      const singleDate = (0, _moment.default)(startDate);\n      let isMultipleDays = false;\n\n      if (!(startDate.isSameOrAfter(singleDate.startOf('day')) && endDate.isSameOrBefore(singleDate.endOf('day')))) {\n        isMultipleDays = true;\n      }\n\n      return isMultipleDays;\n    }),\n    startDate: Ember.computed('dashboard.{startDate,referenceDate}', {\n      get() {\n        const startDate = this.get('dashboard.startDate') || 0;\n        const referenceDate = this.get('dashboard.referenceDate') || 0;\n        return (0, _moment.default)().startOf('day').add(startDate - referenceDate, 'ms').toDate();\n      },\n\n      set(key, value) {\n        const referenceDate = (0, _moment.default)().startOf('day').toDate();\n        this.set('dashboard.startDate', value);\n        this.set('dashboard.referenceDate', referenceDate);\n        return value;\n      }\n\n    }),\n    endDate: Ember.computed('dashboard.{endDate,referenceDate}', {\n      get() {\n        const endDate = this.get('dashboard.endDate') || 0;\n        const referenceDate = this.get('dashboard.referenceDate') || 0;\n        return (0, _moment.default)().startOf('day').add(endDate - referenceDate, 'ms').toDate();\n      },\n\n      set(key, value) {\n        const referenceDate = (0, _moment.default)().startOf('day').toDate();\n        this.set('dashboard.endDate', value);\n        this.set('dashboard.referenceDate', referenceDate);\n        return value;\n      }\n\n    }),\n    // for backward compatibility; it's better to use `dashboardInstance` or\n    // `dashboardModel` expclitily\n    dashboard: Ember.computed.alias('dashboardInstance'),\n    // this is a DashboardInstance class; it is decoupled from the model.\n    // you can replace this to update local state without persisting\n    dashboardInstance: Ember.computed('_dashboardInstance', {\n      get() {\n        return this.get('_dashboardInstance');\n      },\n\n      set(key, value) {\n        (true && !(value.constructor.modelName !== 'dashboard') && Ember.assert('cannot set workspace dashboard instance to be dashboard model', value.constructor.modelName !== 'dashboard'));\n        this.set('_dashboardInstance', value);\n        return value;\n      }\n\n    }),\n    dashboardModel: Ember.computed('_dashboardModel', {\n      get() {\n        return this.get('_dashboardModel');\n      },\n\n      set(key, value) {\n        this.set('_dashboardModel', value);\n        this.set('widgetStates', (0, _lodash.cloneDeep)(value.get('widgetStates')));\n\n        if (value) {\n          this.resetForDashboardChange(true);\n          this.set('dashboardInstance', value.makeInstance()); // IQUX-Perf fix: workspace changed can cause startDate/endDate changed.\n\n          this.get('widget').globalFilterChanged();\n        } else {\n          this.set('dashboardInstance', null);\n        }\n\n        return value;\n      }\n\n    }),\n\n    async init() {\n      this._super(...arguments);\n\n      this.set('stack', ['default']);\n      this.validateTimeLineForLockedSchedule();\n    },\n\n    async initUserRecord() {\n      let isAuthenticated = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      const session = this.get('session');\n      const permissionLayer = this.get('permissionLayer');\n      let result = [];\n      let ssoUserResult = null;\n      let shouldCheckForPasswordExpiry = false;\n      let isNewUser = false;\n\n      if (session.isAuthenticated) {\n        const userId = session.data.authenticated.userId;\n        localStorage.setItem('currentUserId', userId);\n        await this.get('ajaxService').request(`${_apiUrls.API.ssoService.host}/user/${userId}`, {\n          contentType: 'application/json',\n          dataType: 'text',\n          method: 'GET',\n          headers: {\n            'Authorization': `Bearer ${session.data.authenticated.token}`\n          }\n        }).then(response => {\n          ssoUserResult = JSON.parse(response);\n          shouldCheckForPasswordExpiry = ssoUserResult && ssoUserResult.basicLogin[0] && ssoUserResult.adept4Login.length === 0;\n\n          if (shouldCheckForPasswordExpiry) {\n            if (ssoUserResult.basicLogin[0].passwordUpdatedAt === null) {\n              session.set('isNewUser', 'true');\n              isNewUser = true;\n              return null;\n            }\n\n            return this.get('store').findRecord('cs-config-item', 'config-UserAccounts-Passwords/passwordExpirationLimit');\n          }\n\n          return null;\n        }).then(passwordExpireDays => {\n          if (shouldCheckForPasswordExpiry) {\n            if (isNewUser) {\n              return result;\n            }\n\n            if (passwordExpireDays) {\n              const duration = _moment.default.duration((0, _moment.default)().diff((0, _moment.default)(ssoUserResult.basicLogin[0].passwordUpdatedAt)));\n\n              const days = duration.asDays();\n\n              if (days > Number(passwordExpireDays.value) && !isAuthenticated) {\n                session.set('passwordExpired', 'true');\n                return result;\n              }\n            }\n          }\n\n          if (userId) {\n            result = this.get('store').findRecord('sso-user', userId);\n            session.set('isNewUser', 'false');\n            permissionLayer.getPermissions();\n            return result;\n          }\n        }).catch(error => {\n          if (error && error.message.includes('authorization failed')) {\n            this.get('session').invalidate();\n          }\n        });\n      }\n\n      return result;\n    },\n\n    reset() {\n      this.setProperties({\n        isLightMode: false,\n        size: DEFAULT_SIZE,\n        tileSize: DEFAULT_TILE_SIZE\n      });\n      this.resetForDashboardChange(false);\n    },\n\n    // get default dashboard for this category\n    async getDefaultDashboardModel() {\n      const dashboardModel = this.get('dashboardModel');\n      const role = dashboardModel.get('role');\n      const defaultDashboards = await this.get('store').query('dashboard', {}).catch(() => {\n        return [];\n      });\n      const defaultDashboard = defaultDashboards.filter(board => board.isDefaultWorkspace && board.role === role);\n      return defaultDashboard[0];\n    },\n\n    resetForDashboardChange() {\n      let resetAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      this.setProperties({\n        isDragging: false,\n        isResizing: false\n      }); // close everything except for system configuration\n\n      const saveState = !resetAll ? this.get('stack').find(currStack => {\n        return currStack.state === 'editSystemConfiguration';\n      }) : null;\n      this.set('stack', [{\n        state: 'default'\n      }]);\n\n      if (Ember.isPresent(saveState)) {\n        this.get('stack').pushObject(saveState);\n      }\n    },\n\n    // save temporary dashboard state via filter settings etc...\n    saveTempDashboardState() {\n      const dashboard = this.get('dashboard');\n      const dashboardModel = this.get('dashboardModel');\n      dashboardModel.commitInstance(dashboard);\n    },\n\n    pushState(newStateId) {\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      let pushOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      const previousStateId = this.get('topState');\n      const previousState = STATE_MACHINE.states.findBy('id', previousStateId);\n      logger('covering', previousStateId); // TODO: allow for promise actions\n\n      if (previousState) {\n        Ember.makeArray(previousState.hooks).filter(_ref => {\n          let {\n            to\n          } = _ref;\n          return to === newStateId || to === '*';\n        }).forEach(_ref2 => {\n          let {\n            action\n          } = _ref2;\n          action.call(this, this);\n        });\n      } // TODO: check if we are allowed to push state based on top state\n\n\n      const newState = STATE_MACHINE.states.findBy('id', newStateId);\n      /*eslint-disable */\n\n      if (!newState) throw `unknown state with id '${newStateId}'`;\n      /*eslint-enable */\n      // Calculate an \"activity id\" for tracing related calls for this new state\n      //   do this here so we can restore the old id if we're pushing the same state with different options\n\n      const activityIdGuid = (0, _guid.guid)();\n      let activityIdValue = `AIQ-CLI-${activityIdGuid}:${newStateId}`; // allow a state to replace itself with new options\n\n      if (newStateId === previousStateId && pushOptions.replaceSelf) {\n        activityIdValue = this.get('topActivityId');\n        this.popState(previousStateId);\n      }\n\n      logger('pushing', newStateId);\n      Ember.makeArray(newState.hooks).filter(_ref3 => {\n        let {\n          from\n        } = _ref3;\n        return from === previousStateId || from === '*';\n      }).forEach(_ref4 => {\n        let {\n          action\n        } = _ref4;\n        action.call(this, this);\n      }); // Combine options from state machine with options passed in when\n      // calling `pushState`\n\n      Object.assign(options, newState.options);\n      this.get('stack').pushObject({\n        state: newStateId,\n        isSideDrawerVisible: newState.isSideDrawerVisible,\n        sideDrawerComponent: newState.sideDrawerComponent,\n        options,\n        activityId: activityIdValue\n      }); // added a new drawer. make sure it is not shrunken\n\n      this.set('isDrawerShrunken', false);\n      this.get('ajaxService').setActivityId(activityIdValue);\n      return Ember.RSVP.Promise.resolve();\n    },\n\n    popState(stateId) {\n      if (this.get('stackDepth') === 0) {\n        /*eslint-disable */\n        throw `cannot pop state: stack is empty`;\n        /*eslint-enable */\n      }\n\n      const previousStateId = this.get('topState');\n      const previousState = STATE_MACHINE.states.findBy('id', previousStateId);\n\n      if (Ember.isPresent(stateId) && stateId !== previousStateId) {\n        /*eslint-disable */\n        throw `cannot pop state ${stateId}: top state is ${previousStateId}`;\n        /*eslint-enable */\n      }\n\n      logger('popping', previousStateId);\n      this.get('stack').popObject();\n      const newStateId = this.get('topState');\n      const newState = STATE_MACHINE.states.findBy('id', newStateId); // TODO: allow for promise actions\n\n      Ember.makeArray(previousState.hooks).filter(_ref5 => {\n        let {\n          to\n        } = _ref5;\n        return to === newStateId || to === '*';\n      }).forEach(_ref6 => {\n        let {\n          action\n        } = _ref6;\n        action.call(this, this);\n      });\n      logger('uncovering', newStateId); // TODO: allow for promise actions\n\n      if (newState) {\n        Ember.makeArray(newState.hooks).filter(_ref7 => {\n          let {\n            from\n          } = _ref7;\n          return from === previousStateId || from === '*';\n        }).forEach(_ref8 => {\n          let {\n            action\n          } = _ref8;\n          action.call(this, this);\n        });\n      }\n\n      const activityIdValue = this.get('topActivityId');\n      this.get('ajaxService').setActivityId(activityIdValue);\n      return Ember.RSVP.Promise.resolve();\n    },\n\n    buildPervNextTrip(validBreakTimeInfo) {\n      const {\n        trips,\n        breakEndTime,\n        pickKey,\n        dropKey,\n        plannedEta\n      } = validBreakTimeInfo;\n      let pervTripDrop, nextTripPick;\n      trips.forEach((trip, index) => {\n        const pTripDrop = trip.get(dropKey);\n        const nextTrip = trips[index + 1];\n        const nTripPick = nextTrip ? nextTrip.get(pickKey) : null;\n        const isBetweenBreakTime = nTripPick && breakEndTime.isBetween((0, _moment.default)(pTripDrop.get(plannedEta)), (0, _moment.default)(nTripPick.get(plannedEta)));\n\n        if (isBetweenBreakTime && !pervTripDrop && !nextTripPick) {\n          pervTripDrop = pTripDrop;\n          nextTripPick = nTripPick;\n        }\n      });\n      return {\n        pervTripDrop,\n        nextTripPick\n      };\n    },\n\n    isValidBreakTime(validBreakTimeInfo) {\n      const {\n        breakEndTime,\n        nextTravelTime,\n        plannedEta\n      } = validBreakTimeInfo;\n      let validTime = 0;\n      const {\n        pervTripDrop,\n        nextTripPick\n      } = this.buildPervNextTrip(validBreakTimeInfo);\n\n      if (pervTripDrop && nextTripPick) {\n        const plannedTravelTimeToNext = parseInt(pervTripDrop.get(nextTravelTime) || 0, 10);\n        breakEndTime.set('minute', breakEndTime.get('minute') + plannedTravelTimeToNext);\n        validTime = nextTripPick.get(plannedEta) - breakEndTime.toDate();\n      }\n\n      return validTime >= 0;\n    },\n\n    // The break start time has to fall in an empty gap on the route.\n    // Empty gap means that there are no passengers on-board in the middle of the trip\n    isBreakInMiddleOfTrip(validMiddleBreakInfo) {\n      const {\n        trips\n      } = validMiddleBreakInfo;\n      let passangerCount = 0;\n      let stopPoints = trips.map(t => t.get('stopPoints'));\n      stopPoints = (0, _flattenData.flattenData)(stopPoints).map(st => st.record);\n      stopPoints.forEach(stopPoint => {\n        if (stopPoint.get('isPick')) {\n          passangerCount++;\n        } else if (stopPoint.get('isDrop')) {\n          passangerCount--;\n        }\n      }); // Disable checking breakTime because we use slack for adding break now.\n\n      const isBetweenBreakTime = false;\n      return passangerCount > 0 || isBetweenBreakTime;\n    },\n\n    async validaBreakPlace(validPlaceBreakInfo) {\n      const {\n        breakPlace,\n        breakEndTime,\n        plannedEta\n      } = validPlaceBreakInfo;\n      let validTime = 0;\n      const {\n        pervTripDrop,\n        nextTripPick\n      } = this.buildPervNextTrip(validPlaceBreakInfo);\n\n      if (pervTripDrop && nextTripPick) {\n        const destLngLatList = [{\n          lat: pervTripDrop.get('lat'),\n          lng: pervTripDrop.get('lng')\n        }, {\n          lat: breakPlace.get('location.lat'),\n          lng: breakPlace.get('location.lng')\n        }, {\n          lat: nextTripPick.get('lat'),\n          lng: nextTripPick.get('lng')\n        }];\n        const travelTimeInfo = await this.get('geocode').retriveTravelTime(destLngLatList);\n        const plannedTravelTimeToNext = Math.round(travelTimeInfo.duration.value / 60);\n        breakEndTime.set('minute', breakEndTime.get('minute') + plannedTravelTimeToNext);\n        validTime = nextTripPick.get(plannedEta) - breakEndTime.toDate();\n      }\n\n      return validTime >= 0;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/session-stores/application\", [\"exports\", \"ember-simple-auth/session-stores/adaptive\"], function (_exports, _adaptive) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _adaptive.default.extend();\n\n  _exports.default = _default;\n});","define(\"adept-iq/templates/components/ember-popper-targeting-parent\", [\"exports\", \"ember-popper/templates/components/ember-popper-targeting-parent\"], function (_exports, _emberPopperTargetingParent) {\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 _emberPopperTargetingParent.default;\n    }\n  });\n});","define(\"adept-iq/templates/components/ember-popper\", [\"exports\", \"ember-popper/templates/components/ember-popper\"], function (_exports, _emberPopper) {\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 _emberPopper.default;\n    }\n  });\n});","define(\"adept-iq/tests/factories/address\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('address', {\n    sequences: {\n      externalIds: num => num,\n      premises: () => _faker.default.address.secondaryAddress(),\n      streetNumbers: () => _faker.default.address.streetPrefix(),\n      streetAddresses: () => _faker.default.address.streetAddress(),\n      localities: () => _faker.default.address.city(),\n      subLocalities: () => _faker.default.address.citySuffix(),\n      subRegions: () => _faker.default.address.county(),\n      postalCodes: () => _faker.default.address.zipCode()\n    },\n    default: {\n      alias: 'home',\n      premise: _emberDataFactoryGuy.default.generate('premises'),\n      streetNumber: _emberDataFactoryGuy.default.generate('streetNumbers'),\n      streetAddress: _emberDataFactoryGuy.default.generate('streetAddresses'),\n      locality: _emberDataFactoryGuy.default.generate('localities'),\n      subLocality: _emberDataFactoryGuy.default.generate('subLocalities'),\n      subRegion: _emberDataFactoryGuy.default.generate('subRegions'),\n      region: 'NY',\n      postOfficeBoxNumber: null,\n      postalCode: _emberDataFactoryGuy.default.generate('postalCodes'),\n      country: 'United States of America',\n      notes: 'Some Place'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avl-location\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('avl-location', {\n    default: {\n      lat: () => _faker.default.address.latitude(),\n      lng: () => _faker.default.address.longitude(),\n      heading: () => _faker.default.random.number({\n        min: 0,\n        max: 359,\n        precision: 0\n      }),\n      speed: () => _faker.default.random.number({\n        min: 0,\n        max: 100,\n        precision: 0\n      }),\n      odo: () => _faker.default.random.number({\n        min: 0,\n        max: 100000,\n        precision: 0\n      }),\n      timestamp: () => _faker.default.date.past(1, date)\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-address\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  const locs = [// stops-pick-P207494508 lat: 40.65954 lng: -73.93221\n  {\n    lat: 40.65954,\n    lng: -73.93221\n  }, // stops-drop-D207494508 lat: 40.64108 lng: -73.9456\n  {\n    lat: 40.64108,\n    lng: -73.9456\n  }, // stops-drop-D207493009 lat: 40.66288 lng: -73.9325\n  {\n    lat: 40.66288,\n    lng: -73.9325\n  }, // stops-pick-P207493009 lat: 40.74082 lng: -73.9838\n  {\n    lat: 40.74082,\n    lng: -73.9838\n  }, // stops-drop-D207494359 lat: 40.68936 lng: -73.97942\n  {\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207494359 lat: 40.68448 lng: -73.94628\n  {\n    lat: 40.68448,\n    lng: -73.94628\n  }, // stops-pick-P207496170 lat: 40.61552 lng: -73.96913\n  {\n    lat: 40.61552,\n    lng: -73.96913\n  }, // stops-drop-D207496170 lat: 40.61545 lng: -73.96126\n  {\n    lat: 40.61545,\n    lng: -73.96126\n  }, // stops-pick-P207496912 lat: 40.68431 lng: -73.79013\n  {\n    lat: 40.68431,\n    lng: -73.79013\n  }, // stops-drop-D207496912 lat: 40.70408 lng: -74.01318\n  {\n    lat: 40.70408,\n    lng: -74.01318\n  }, // stops-pick-P207493284 lat: 40.689 lng: -73.79482\n  {\n    lat: 40.689,\n    lng: -73.79482\n  }, // stops-drop-D207493284 lat: 40.70988 lng: -74.01277\n  {\n    lat: 40.70988,\n    lng: -74.01277\n  }, // stops-drop-D207495587 lat: 40.68936 lng: -73.97942\n  {\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207495587 lat: 40.63737 lng: -73.94329\n  {\n    lat: 40.63737,\n    lng: -73.94329\n  }];\n\n  _emberDataFactoryGuy.default.define('avlm-address', {\n    sequences: {\n      premises: () => _faker.default.address.secondaryAddress(),\n      streetNumbers: () => _faker.default.address.streetPrefix(),\n      streetNames: () => _faker.default.address.streetAddress(),\n      localities: () => _faker.default.address.city(),\n      subRegions: () => _faker.default.address.county(),\n      postalCodes: () => _faker.default.address.zipCode()\n    },\n    default: {\n      description: 'home',\n      premise: _emberDataFactoryGuy.default.generate('premises'),\n      streetNumber: _emberDataFactoryGuy.default.generate('streetNumbers'),\n      streetAddress: _emberDataFactoryGuy.default.generate('streetNames'),\n      locality: _emberDataFactoryGuy.default.generate('localities'),\n      subRegion: _emberDataFactoryGuy.default.generate('subRegions'),\n      region: 'NY',\n      postalCode: _emberDataFactoryGuy.default.generate('postalCodes'),\n      country: 'United States of America',\n      latitude: _emberDataFactoryGuy.default.generate(i => locs[i % locs.length].lat),\n      longitude: _emberDataFactoryGuy.default.generate(i => locs[i % locs.length].lng)\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-alert\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const messages = ['Some Route is Super Late Bruh', 'Arthur Rojas is the Death Reckoning', 'Have you seen Jose?'];\n  const CATEGORY_EMERGENCY = 'emergency';\n  const ACTIVE_EMERGENCY = 'active';\n\n  _emberDataFactoryGuy.default.define('avlm-alert', {\n    sequences: {\n      messages: num => messages[num % messages.length]\n    },\n    default: {\n      timestamp: new Date(),\n      body: _emberDataFactoryGuy.default.generate('messages'),\n      category: 'Normal',\n      state: 'active'\n    },\n    traits: {\n      emergency: {\n        category: CATEGORY_EMERGENCY,\n        state: ACTIVE_EMERGENCY\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-attribute\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  /* eslint-disable no-use-before-define */\n  _emberDataFactoryGuy.default.define('avlm-attribute', {\n    sequences: {\n      types: num => attributeTypes[num % attributeTypes.length].type\n    },\n    default: {\n      type: _emberDataFactoryGuy.default.generate('types')\n    }\n  });\n\n  const attributeTypes = [{\n    type: 'ambulatory'\n  }, {\n    type: 'wheelchair'\n  }];\n});","define(\"adept-iq/tests/factories/avlm-canned-message-template\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const messages = ['Clarify Message', 'Return to base', 'Go to Light Speed'];\n\n  _emberDataFactoryGuy.default.define('avlm-canned-message-template', {\n    sequences: {\n      messages: num => messages[num % messages.length]\n    },\n    default: {\n      body: _emberDataFactoryGuy.default.generate('messages'),\n      messageNr: '1',\n      status: 'A',\n      type: 'E'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-canned-message\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const messages = ['Emergency', 'Bruh you safe yet?', 'Drop that foo at the bar he needs a drank'];\n  const responseTypes = ['Yes', 'None', 'Acknowledge'];\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('avlm-canned-message', {\n    sequences: {\n      messages: num => messages[num % messages.length],\n      responseTypes: num => responseTypes[num % responseTypes.length]\n    },\n    default: {\n      body: _emberDataFactoryGuy.default.generate('messages'),\n      messageNr: '2',\n      replyToMsgId: '1',\n      priority: 'normal',\n      createdTime: date,\n      deliveredTime: date,\n      readTime: null,\n      deletedTime: null,\n      responseType: null,\n      responseTypeText: _emberDataFactoryGuy.default.generate('responseTypes'),\n      responseMessage: 'Responding...',\n      ackTime: date,\n      driverEndPointType: 'Recieved' // create driver object dynamically\n\n    },\n    traits: {\n      recieved: {\n        driverEndPointType: 'Sender'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-cluster\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-cluster', {\n    sequences: {\n      startTimes: () => (0, _moment.default)().startOf('day').toDate(),\n      endTimes: () => (0, _moment.default)().startOf('day').add(8, 'hours').toDate()\n    },\n    default: {\n      startTime: _emberDataFactoryGuy.default.generate('startTimes'),\n      endTime: _emberDataFactoryGuy.default.generate('endTimes'),\n      clusterindex: '1',\n      status: 'A'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-driver-app\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-driver-app', {\n    default: {}\n  });\n});","define(\"adept-iq/tests/factories/avlm-driver-state-event\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-driver-state-event', {\n    default: {}\n  });\n});","define(\"adept-iq/tests/factories/avlm-driver\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-driver', {\n    sequences: {\n      firstNames: () => _faker.default.name.firstName(),\n      lastNames: () => _faker.default.name.lastName(),\n      middleNames: () => _faker.default.name.firstName(),\n      badgeNumbers: num => num\n    },\n    default: {\n      badgeNumber: _emberDataFactoryGuy.default.generate('badgeNumbers'),\n      firstName: _emberDataFactoryGuy.default.generate('firstNames'),\n      lastName: _emberDataFactoryGuy.default.generate('lastNames'),\n      middleName: _emberDataFactoryGuy.default.generate('middleNames'),\n      email: 'test@test.com'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-emergency-message\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const messages = ['emergency', 'acknowledged'];\n  const responseTypes = ['Yes', 'None', 'Acknowledge'];\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('avlm-emergency-message', {\n    sequences: {\n      messages: num => messages[num % messages.length],\n      responseTypes: num => responseTypes[num % responseTypes.length]\n    },\n    default: {\n      body: _emberDataFactoryGuy.default.generate('messages'),\n      messageNr: '2',\n      replyToMsgId: '1',\n      priority: 'E',\n      createdTime: date,\n      deliveredTime: date,\n      readTime: null,\n      deletedTime: null,\n      responseType: null,\n      responseTypeText: _emberDataFactoryGuy.default.generate('responseTypes'),\n      responseMessage: 'Responding...',\n      ackTime: date,\n      driverEndPointType: 'Recieved' // create driver object dynamically\n\n    },\n    traits: {\n      emergency: {\n        body: 'emergency'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-phone-number\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('rider-phone-number', {\n    sequences: {\n      areaCodes: () => _faker.default.phone.phoneNumber('###'),\n      phoneNumbers: () => _faker.default.phone.phoneNumber('###-####'),\n      extensions: () => _faker.default.phone.phoneNumber('###')\n    },\n    default: {\n      areaCode: _emberDataFactoryGuy.default.generate('areaCodes'),\n      phoneNumber: _emberDataFactoryGuy.default.generate('phoneNumbers'),\n      extension: _emberDataFactoryGuy.default.generate('extensions'),\n      type: 'cell'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-rider-event\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const date = (0, _moment.default)().startOf('day').add(8, 'hours');\n  const ahead = (0, _moment.default)().startOf('day').add(9, 'hours');\n\n  _emberDataFactoryGuy.default.define('avlm-rider-event', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    default: {\n      anchor: 'Y',\n      type: 'D',\n      noteForDriver: 'Enter from the Back',\n      scheduledTime: date.toDate(),\n      promisedTime: date.toDate(),\n      serviceStartTime: date.toDate(),\n      serviceEndTime: ahead.toDate()\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-rider\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-rider', {\n    sequences: {\n      firstNames: () => _faker.default.name.firstName(),\n      lastNames: () => _faker.default.name.lastName(),\n      middleNames: () => _faker.default.name.firstName()\n    },\n    default: {\n      firstName: _emberDataFactoryGuy.default.generate('firstNames'),\n      lastName: _emberDataFactoryGuy.default.generate('lastNames'),\n      middleName: _emberDataFactoryGuy.default.generate('middleNames'),\n      email: 'test@test.com',\n      passengerTypeName: 'client'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-route-break\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const date = (0, _moment.default)();\n  const ahead = (0, _moment.default)().add(30, 'minute');\n  const evening = (0, _moment.default)().startOf('day').add(16, 'hours');\n\n  _emberDataFactoryGuy.default.define('avlm-route-break', {\n    default: {\n      plannedStartTime: date.toDate(),\n      plannedEndTime: evening.toDate(),\n      routeIndex: '3',\n      scheduledTime: date.toDate(),\n      promisedTime: date.toDate(),\n      serviceStartTime: date.toDate(),\n      serviceEndTime: ahead.toDate(),\n      eta: date.toDate(),\n      status: 'L'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-route-vehicle-driver\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const normalStart = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const evening = (0, _moment.default)().startOf('day').add(13, 'hours');\n  const night = (0, _moment.default)().startOf('day').add(18, 'hours');\n  const normalEnd = (0, _moment.default)().startOf('day').add(26, 'hours');\n\n  _emberDataFactoryGuy.default.define('avlm-route-vehicle-driver', {\n    default: {\n      startTime: normalStart.toDate(),\n      endTime: normalEnd.toDate()\n    },\n    traits: {\n      evening: {\n        startTime: evening.toDate()\n      },\n      night: {\n        startTime: night.toDate()\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-route\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const date = (0, _moment.default)().startOf('day').add(8, 'hours');\n  const evening = (0, _moment.default)().startOf('day').add(16, 'hours');\n\n  _emberDataFactoryGuy.default.define('avlm-route', {\n    sequences: {\n      names: num => `${num}0-${num}`\n    },\n    default: {\n      status: 'Not Started',\n      otp: 'L',\n      otpValue: 300,\n      trackingId: _emberDataFactoryGuy.default.generate('names'),\n      timestamp: (0, _moment.default)().startOf('day').toDate(),\n      actualStartTime: (0, _moment.default)().startOf('day').toDate(),\n      actualEndTime: null,\n      plannedStartTime: date.toDate(),\n      plannedEndTime: evening.toDate(),\n      providerId: 'EPC',\n      alertId: '8605499635271922'\n    },\n    traits: {\n      pullout: {\n        status: 'Pullout',\n        actualStartTime: date.toDate()\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-schedule\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const date = (0, _moment.default)();\n\n  _emberDataFactoryGuy.default.define('avlm-schedule', {\n    default: {\n      startTime: date.toDate(),\n      endTime: date.toDate(),\n      name: date.format('YYYY-MM-DD')\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-stop-point\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const stops = [// stops-pick-P207494508 lat: 40.65954 lng: -73.93221\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-09T01:12:14.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 14,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.65954,\n    lng: -73.93221\n  }, // stops-drop-D207494508 lat: 40.64108 lng: -73.9456\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-09T01:27:59.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 15,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.64108,\n    lng: -73.9456\n  }, // stops-drop-D207493009 lat: 40.66288 lng: -73.9325\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-09T01:03:32.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 13,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.66288,\n    lng: -73.9325\n  }, // stops-pick-P207493009 lat: 40.74082 lng: -73.9838\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-08T23:48:51.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 10,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.74082,\n    lng: -73.9838\n  }, // stops-drop-D207494359 lat: 40.68936 lng: -73.97942\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-08T21:12:27.962Z').toDate(),\n    actualArrival: '2019-07-08T21:12:26.265Z',\n    actualDepart: '2019-07-08T21:12:27.962Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 4,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207494359 lat: 40.68448 lng: -73.94628\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-08T21:07:56.449Z').toDate(),\n    actualArrival: '2019-07-08T21:07:52.537Z',\n    actualDepart: '2019-07-08T21:07:56.449Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 2,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68448,\n    lng: -73.94628\n  }, // stops-pick-P207496170 lat: 40.61552 lng: -73.96913\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-09T00:28:04.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 11,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.61552,\n    lng: -73.96913\n  }, // stops-drop-D207496170 lat: 40.61545 lng: -73.96126\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-09T00:37:40.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 12,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.61545,\n    lng: -73.96126\n  }, // stops-pick-P207496912 lat: 40.68431 lng: -73.79013\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-08T22:09:29.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 5,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68431,\n    lng: -73.79013\n  }, // stops-drop-D207496912 lat: 40.70408 lng: -74.01318\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-08T23:12:48.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 7,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.70408,\n    lng: -74.01318\n  }, // stops-pick-P207493284 lat: 40.689 lng: -73.79482\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-08T22:18:43.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 6,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.689,\n    lng: -73.79482\n  }, // stops-drop-D207493284 lat: 40.70988 lng: -74.01277\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-08T23:24:55.848Z').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 8,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.70988,\n    lng: -74.01277\n  }, // stops-drop-D207495587 lat: 40.68936 lng: -73.97942\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)('2019-07-08T21:12:22.542Z').toDate(),\n    actualArrival: '2019-07-08T21:12:20.628Z',\n    actualDepart: '2019-07-08T21:12:22.542Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 3,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207495587 lat: 40.63737 lng: -73.94329\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)('2019-07-08T20:55:48.884Z').toDate(),\n    actualArrival: '2019-07-08T20:53:00.623Z',\n    actualDepart: '2019-07-08T20:55:48.884Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 1,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.63737,\n    lng: -73.94329\n  }];\n\n  _emberDataFactoryGuy.default.define('avlm-stop-point', {\n    sequences: {\n      etas: num => stops[num % stops.length].eta,\n      ordinals: num => stops[num % stops.length].ordinal,\n      plannedTimes: num => stops[num % stops.length].plannedTime,\n      types: num => stops[num % stops.length].type\n    },\n    default: {\n      otp: 'L',\n      otpValue: '4',\n      odometer: '24234',\n      parentType: 'trip',\n      status: 'active',\n      ordinal: 0,\n      // when making stops through factoreis create index based on a passed hash options\n      eta: _emberDataFactoryGuy.default.generate('etas'),\n      routeIndex: '1',\n      otpStatus: 'L',\n      dwellTime: '234',\n      clusterIndex: '1',\n      arriveLat: null,\n      arriveLng: null,\n      departLat: null,\n      departLng: null,\n      actualArriveTime: null,\n      actualDepartTime: null\n    },\n    traits: {\n      Break: {\n        parentType: 'break',\n        stopType: 'break'\n      },\n      pick: {\n        stopType: 'pick'\n      },\n      drop: {\n        stopType: 'drop'\n      },\n      pullinGarage: {\n        parentType: 'break'\n      },\n      pulloutGarage: {\n        parentType: 'break'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-trip-rider-attribute\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-trip-rider-attribute', {\n    default: {\n      attributeCount: 1\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-trip-rider\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-trip-rider', {\n    default: {\n      status: 'A'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-trip\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const tripStatus = ['A', 'Waitlisted'];\n\n  _emberDataFactoryGuy.default.define('avlm-trip', {\n    sequences: {\n      requestTimes: () => (0, _moment.default)().startOf('day').add(8, 'hours').toDate(),\n      tripStatuses: num => tripStatus[num % tripStatus.length],\n      externalIds: num => num\n    },\n    default: {\n      requestedTime: _emberDataFactoryGuy.default.generate('requestTimes'),\n      status: _emberDataFactoryGuy.default.generate('tripStatuses'),\n      otp: 'L',\n      otpValue: 234,\n      fare: '3',\n      noShowCodeId: '234',\n      externalId: _emberDataFactoryGuy.default.generate('externalIds'),\n      otpStatus: 'Late'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-vehicle-event\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  /* eslint-disable no-use-before-define */\n  _emberDataFactoryGuy.default.define('avlm-vehicle-event', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      ids: num => avlmVehicleEvents[num % avlmVehicleEvents.length].id,\n      Types: num => avlmVehicleEvents[num % avlmVehicleEvents.length].type,\n      EventTypes: num => avlmVehicleEvents[num % avlmVehicleEvents.length].eventType,\n      VehicleIds: num => avlmVehicleEvents[num % avlmVehicleEvents.length].vehicleId,\n      Lats: num => avlmVehicleEvents[num % avlmVehicleEvents.length].lat,\n      Lngs: num => avlmVehicleEvents[num % avlmVehicleEvents.length].lng,\n      Headings: num => avlmVehicleEvents[num % avlmVehicleEvents.length].heading,\n      Odos: num => avlmVehicleEvents[num % avlmVehicleEvents.length].odo,\n      ReceivedAts: num => avlmVehicleEvents[num % avlmVehicleEvents.length].receivedAt,\n      Timestamps: num => avlmVehicleEvents[num % avlmVehicleEvents.length].timestamp,\n      Route: num => avlmVehicleEvents[num % avlmVehicleEvents.length].route,\n      StopType: num => avlmVehicleEvents[num % avlmVehicleEvents.length].stopType,\n      StopAddress: num => avlmVehicleEvents[num % avlmVehicleEvents.length].stopAddress,\n      PassengerLName: num => avlmVehicleEvents[num % avlmVehicleEvents.length].passengerLName,\n      PassengerFName: num => avlmVehicleEvents[num % avlmVehicleEvents.length].passengerFName,\n      PassengerId: num => avlmVehicleEvents[num % avlmVehicleEvents.length].passengerId\n    },\n    default: {\n      id: _emberDataFactoryGuy.default.generate('ids'),\n      type: _emberDataFactoryGuy.default.generate('Types'),\n      eventType: _emberDataFactoryGuy.default.generate('EventTypes'),\n      vehicleId: _emberDataFactoryGuy.default.generate('VehicleIds'),\n      lat: _emberDataFactoryGuy.default.generate('Lats'),\n      lng: _emberDataFactoryGuy.default.generate('Lngs'),\n      heading: _emberDataFactoryGuy.default.generate('Headings'),\n      odo: _emberDataFactoryGuy.default.generate('Odos'),\n      receivedAt: _emberDataFactoryGuy.default.generate('ReceivedAts'),\n      timestamp: _emberDataFactoryGuy.default.generate('Timestamps'),\n      route: _emberDataFactoryGuy.default.generate('Route'),\n      stopType: _emberDataFactoryGuy.default.generate('StopType'),\n      stopAddress: _emberDataFactoryGuy.default.generate('StopAddress'),\n      passengerLName: _emberDataFactoryGuy.default.generate('PassengerLName'),\n      passengerFName: _emberDataFactoryGuy.default.generate('PassengerFName'),\n      passengerId: _emberDataFactoryGuy.default.generate('PassengerId')\n    }\n  });\n\n  const avlmVehicleEvents = [{\n    id: 453,\n    type: 'avl',\n    eventType: 'GPS Ping',\n    vehicleId: 513,\n    lat: 49.13161,\n    lng: -123.10324,\n    heading: 1,\n    odo: 0,\n    receivedAt: '2020-06-23T18:32:23.813Z',\n    timestamp: '2020-06-23T18:32:22.456Z',\n    route: 351,\n    stopType: 'pick up',\n    stopAddress: 's2-428 sector 12',\n    passengerLName: 'Jackson',\n    passengerFName: 'Micheal',\n    passengerId: 121\n  }, {\n    id: 454,\n    type: 'avl',\n    eventType: 'stop',\n    vehicleId: 513,\n    lat: 49.13161,\n    lng: -123.10324,\n    heading: 1,\n    odo: 0,\n    receivedAt: '2020-06-23T18:32:23.813Z',\n    timestamp: '2020-06-23T18:32:22.456Z',\n    route: 351,\n    stopType: 'drop off',\n    stopAddress: 's142 sector 11',\n    passengerLName: 'Jackson',\n    passengerFName: 'Micheal',\n    passengerId: 121\n  }, {\n    id: 455,\n    type: 'avl',\n    eventType: 'brake',\n    vehicleId: 513,\n    lat: 49.13161,\n    lng: -123.10324,\n    heading: 1,\n    odo: 0,\n    receivedAt: '2020-06-23T18:32:23.813Z',\n    timestamp: '2020-06-23T18:32:22.456Z',\n    route: 351,\n    stopType: 'pick up',\n    stopAddress: 'buckingam palace sector 9',\n    passengerLName: 'Sharma',\n    passengerFName: 'Chirage',\n    passengerId: 122\n  }, {\n    id: 456,\n    type: 'avl',\n    eventType: 'GPS Ping',\n    vehicleId: 513,\n    lat: 49.13161,\n    lng: -123.10324,\n    heading: 1,\n    odo: 0,\n    receivedAt: '2020-06-23T18:32:23.813Z',\n    timestamp: '2020-06-23T18:32:22.456Z',\n    route: 351,\n    stopType: 'drop off',\n    stopAddress: 'church gate sector 20',\n    passengerLName: 'Sharma',\n    passengerFName: 'Chirage',\n    passengerId: 122\n  }, {\n    id: 457,\n    type: 'avl',\n    eventType: 'GPS Ping',\n    vehicleId: 513,\n    lat: 49.13161,\n    lng: -123.10324,\n    heading: 1,\n    odo: 0,\n    receivedAt: '2020-06-23T18:32:23.813Z',\n    timestamp: '2020-06-23T18:32:22.456Z',\n    route: 351,\n    stopType: 'pick up',\n    stopAddress: '437 baker street',\n    passengerLName: 'Homes',\n    passengerFName: 'Sherlock',\n    passengerId: 123\n  }];\n});","define(\"adept-iq/tests/factories/avlm-vehicle-info\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-vehicle-info', {\n    default: {\n      deviceType: 'Android',\n      deviceVersion: '2.1.1.3.4',\n      token: 'f4KZnGWgMRU:APA91bEnGrtcc0ifPc3jOifDYjZ7dFBVNWUb08H8K2jZJ-BDKZ3zATVQALAUIj1iVxCs7pMs9vp1nPAZvKudCbg7BRCSYEexvJ_FInDe1iV8msNOuE-S7CSE-uKYdWWnD-rosH9j6Kh_',\n      appVersion: '1.0.181',\n      deviceHardwareId: 'd8bfafd8d7282801',\n      cellularProvider: 'telus',\n      cellularType: '3G'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-vehicle\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('avlm-vehicle', {\n    sequences: {\n      badgeNumbers: num => Math.floor(Math.random() * num + 1000)\n    },\n    default: {\n      callSign: _emberDataFactoryGuy.default.generate('badgeNumbers'),\n      otp: 'L'\n    }\n  });\n});","define(\"adept-iq/tests/factories/avlm-zone\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const names = ['Zone 1', 'Zone 2', 'Zone 3', 'Zone 4', 'Zone 5', 'Zone 6', 'Zone 7', 'Zone 8'];\n  const types = [{\n    type: 'Burrough'\n  }, {\n    type: 'AAR'\n  }, {\n    type: 'User'\n  }];\n\n  _emberDataFactoryGuy.default.define('avlm-zone', {\n    sequences: {\n      zoneNames: num => names[num % names.length],\n      zoneTypes: num => types[num % types.length].type\n    },\n    polymorphic: false,\n    default: {\n      name: _emberDataFactoryGuy.default.generate('zoneNames'),\n      type: _emberDataFactoryGuy.default.generate('zoneTypes')\n    }\n  });\n});","define(\"adept-iq/tests/factories/booking\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('booking', {\n    default: {}\n  });\n});","define(\"adept-iq/tests/factories/break-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('break-type', {\n    default: {\n      name: 'fixed',\n      defaultDuration: 15,\n      isPaid: true,\n      isRecognized: true,\n      category: 'generic fixed break'\n    },\n    traits: {\n      floating: {\n        name: 'floating'\n      },\n      fixed: {\n        name: 'fixed'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/cancel-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('cancel-type', {\n    default: {\n      code: 'C',\n      externalCode: 'C',\n      description: 'Cancel',\n      name: 'Generic Cancel Option'\n    }\n  });\n});","define(\"adept-iq/tests/factories/cancellation\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('cancellation', {\n    default: {\n      notes: 'generic cancel notes'\n    }\n  });\n});","define(\"adept-iq/tests/factories/cluster\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('cluster', {\n    default: {\n      routeOrdinal: 0 // similar to avlm-stop-points must pass an options hash to create the correct ordinal\n\n    }\n  });\n});","define(\"adept-iq/tests/factories/cs-config-category\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const categories = [{\n    id: 'config-Canned_Messages',\n    name: 'Canned_Messages',\n    listAction: 'full-json',\n    displayName: 'Canned Messages',\n    path: 'config-Canned_Messages',\n    canDisplay: true,\n    canAdd: false,\n    canDelete: false,\n    depth: 1\n  }, {\n    id: 'config-Canned_Messages-to_dispatch',\n    name: 'to_dispatch',\n    listAction: 'full-json',\n    displayName: 'To Dispatch',\n    path: 'config-Canned_Messages-to_dispatch',\n    canDisplay: true,\n    canAdd: true,\n    canDelete: true,\n    minimumItem: 1,\n    depth: 1\n  }, {\n    id: 'config-Canned_Messages-to_driver',\n    name: 'to_driver',\n    listAction: 'full-json',\n    displayName: 'To Driver',\n    path: 'config-Canned_Messages-to_driver',\n    canDisplay: true,\n    canAdd: true,\n    canDelete: true,\n    minimumItem: 1,\n    depth: 1\n  }, {\n    id: 'config-Driver_App_Look',\n    name: 'Driver_App_Look',\n    listAction: 'full-json',\n    displayName: 'Driver App Look',\n    path: 'config-Driver_App_Look',\n    canDisplay: true,\n    canAdd: false,\n    canDelete: false,\n    depth: 1\n  }, {\n    id: 'config-Passwords',\n    name: 'Passwords',\n    listAction: 'full-json',\n    displayName: 'Passwords',\n    path: 'config-Passwords',\n    canDisplay: false,\n    canAdd: false,\n    canDelete: false,\n    depth: 1\n  }];\n\n  _emberDataFactoryGuy.default.define('cs-config-category', {\n    sequences: {\n      ids: num => categories[num % categories.length].id,\n      names: num => categories[num % categories.length].name,\n      listActions: num => categories[num % categories.length].listAction,\n      displayNames: num => categories[num % categories.length].displayName,\n      paths: num => categories[num % categories.length].path,\n      canDisplays: num => categories[num % categories.length].canDisplay,\n      canAdds: num => categories[num % categories.length].canAdd,\n      canDeletes: num => categories[num % categories.length].canDelete,\n      depths: num => categories[num % categories.length].depth\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('names'),\n      id: _emberDataFactoryGuy.default.generate('ids'),\n      listActions: _emberDataFactoryGuy.default.generate('listActions'),\n      displayName: _emberDataFactoryGuy.default.generate('displayNames'),\n      path: _emberDataFactoryGuy.default.generate('paths'),\n      canDisplay: _emberDataFactoryGuy.default.generate('canDisplays'),\n      canAdd: _emberDataFactoryGuy.default.generate('canAdds'),\n      canDelete: _emberDataFactoryGuy.default.generate('canDeletes'),\n      depth: 1\n    },\n    traits: {\n      parent: {\n        id: 'config',\n        name: 'config',\n        listAction: 'full-json',\n        displayName: 'Config',\n        path: 'config',\n        depth: 0,\n        canDisplay: true,\n        canAdd: false,\n        canDelete: false\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/cs-config-item\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  /* eslint-disable no-use-before-define */\n  _emberDataFactoryGuy.default.define('cs-config-item', {\n    sequences: {\n      ids: num => csConfigItems[num % csConfigItems.length].id,\n      names: num => csConfigItems[num % csConfigItems.length].name,\n      categories: num => csConfigItems[num % csConfigItems.length].category,\n      values: num => csConfigItems[num % csConfigItems.length].value,\n      displayNames: num => csConfigItems[num % csConfigItems.length].displayName\n    },\n    default: {\n      id: _emberDataFactoryGuy.default.generate('ids'),\n      name: _emberDataFactoryGuy.default.generate('names'),\n      displayName: _emberDataFactoryGuy.default.generate('displayNames'),\n      category: _emberDataFactoryGuy.default.generate('categories'),\n      value: _emberDataFactoryGuy.default.generate('values')\n    }\n  });\n\n  const csConfigItems = [\n  /* Config Travel Need Type Fixtures */\n  {\n    id: 'config-System_Configuration-travel_need_types/ambulatory',\n    name: 'travel_need_types',\n    displayName: 'Ambulatory',\n    category: 'config-System_Configuration-travel_need_types',\n    value: JSON.stringify({\n      id: 1,\n      name: 'ambulatory',\n      vehicleCapacityType: 'ambulatory',\n      vehicleCapacityCount: 1,\n      loadTime: 240,\n      unloadTime: 60,\n      displayName: 'Ambulatory',\n      displayOrder: 1,\n      description: 'Description for Ambulatory'\n    })\n  }, {\n    id: 'config-System_Configuration-travel_need_types/serviceAnimal',\n    name: 'travel_need_types',\n    displayName: 'Service Animal',\n    category: 'config-System_Configuration-travel_need_types',\n    value: JSON.stringify({\n      id: 5,\n      name: 'serviceAnimal',\n      vehicleCapacityType: 'serviceAnimal',\n      vehicleCapacityCount: 1,\n      loadTime: 60,\n      unloadTime: 60,\n      displayName: 'Service Animal',\n      displayOrder: 5,\n      description: 'Description for Service Animal'\n    })\n  }, {\n    id: 'config-System_Configuration-travel_need_types/wheelchair',\n    name: 'travel_need_types',\n    displayName: 'Wheelchair',\n    category: 'config-System_Configuration-travel_need_types',\n    value: JSON.stringify({\n      id: 3,\n      name: 'wheelchair',\n      vehicleCapacityType: 'wheelchair',\n      vehicleCapacityCount: 1,\n      loadTime: 420,\n      unloadTime: 240,\n      displayName: 'Wheelchair',\n      displayOrder: 3,\n      description: 'Description for Wheelchair'\n    })\n  }, {\n    id: 'config-System_Configuration-travel_need_types/wideAmbulatory',\n    name: 'travel_need_types',\n    displayName: 'Wide Wheelchair',\n    category: 'config-System_Configuration-travel_need_types',\n    value: JSON.stringify({\n      id: 2,\n      name: 'wideAmbulatory',\n      vehicleCapacityType: 'wideAmbulatory',\n      vehicleCapacityCount: 1,\n      loadTime: 420,\n      unloadTime: 240,\n      displayName: 'Wide Ambulatory',\n      displayOrder: 2,\n      description: 'Description for Wide Ambulatory'\n    })\n  }, {\n    id: 'config-System_Configuration-travel_need_types/wideWheelchair',\n    name: 'travel_need_types',\n    displayName: 'Wide Wheelchair',\n    category: 'config-System_Configuration-travel_need_types',\n    value: JSON.stringify({\n      id: 4,\n      name: 'wideWheelchair',\n      vehicleCapacityType: 'wheelchair',\n      vehicleCapacityCount: 2,\n      loadTime: 420,\n      unloadTime: 240,\n      displayName: 'Wide Wheelchair',\n      displayOrder: 4,\n      description: 'Description for Wide Wheelchair'\n    })\n  },\n  /* Config Passenger Type Fixtures */\n  {\n    id: 'config-System_Configuration-passenger_types/client',\n    name: 'passenger_types',\n    displayName: 'Client',\n    category: 'config-System_Configuration-passenger_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-passenger_types/client',\n      name: 'client'\n    })\n  }, {\n    id: 'config-System_Configuration-passenger_types/companion',\n    name: 'passenger_types',\n    displayName: 'Companion',\n    category: 'config-System_Configuration-passenger_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-passenger_types/companion',\n      name: 'companion'\n    })\n  }, {\n    id: 'config-System_Configuration-passenger_types/pca',\n    name: 'passenger_types',\n    displayName: 'PCA',\n    category: 'config-System_Configuration-passenger_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-passenger_types/pca',\n      name: 'pca'\n    })\n  },\n  /* Config Vehicle types Fixtures */\n  {\n    id: 'config-System_Configuration-vehicle_types/largeBus',\n    name: 'vehicle_types',\n    displayName: 'Large Bus',\n    category: 'config-System_Configuration-vehicle_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-vehicle_types/largeBus',\n      name: 'largeBus'\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_types/smallBus',\n    name: 'vehicle_types',\n    displayName: 'Small Bus',\n    category: 'config-System_Configuration-vehicle_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-vehicle_types/smallBus',\n      name: 'smallBus'\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_types/standard',\n    name: 'vehicle_types',\n    displayName: 'Standard',\n    category: 'config-System_Configuration-vehicle_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-vehicle_types/standard',\n      name: 'standard'\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_types/taxi',\n    name: 'vehicle_types',\n    displayName: 'Taxi',\n    category: 'config-System_Configuration-vehicle_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-vehicle_types/taxi',\n      name: 'taxi'\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_types/cab',\n    name: 'vehicle_types',\n    displayName: 'Cab',\n    category: 'config-System_Configuration-vehicle_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-vehicle_types/cab',\n      name: 'cab'\n    })\n  },\n  /* Config Fare Type Fixtures */\n  {\n    id: 'config-System_Configuration-fare_types/cash',\n    name: 'fare_types',\n    displayName: 'Cash',\n    category: 'config-System_Configuration-fare_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-fare_types/cash',\n      name: 'cash'\n    })\n  }, {\n    id: 'config-System_Configuration-fare_types/creditCard',\n    name: 'fare_types',\n    displayName: 'Credit Card',\n    category: 'config-System_Configuration-fare_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-fare_types/creditCard',\n      name: 'creditCard'\n    })\n  }, {\n    id: 'config-System_Configuration-fare_types/smartCard',\n    name: 'fare_types',\n    displayName: 'Smart Card',\n    category: 'config-System_Configuration-fare_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-fare_types/smartCard',\n      name: 'smartCard'\n    })\n  },\n  /* Config break type Fixtures */\n  {\n    id: 'config-System_Configuration-break_types/fixed',\n    name: 'break_types',\n    displayName: 'Fixed',\n    category: 'config-System_Configuration-break_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-break_types/fixed',\n      name: 'fixed',\n      displayName: 'Fixed Breaks',\n      defaultDuration: 0,\n      isPaid: false,\n      isRecognized: false,\n      serviceWindowName: 'fixedBreak'\n    })\n  }, {\n    id: 'config-System_Configuration-break_types/floating',\n    name: 'break_types',\n    displayName: 'Floating',\n    category: 'config-System_Configuration-break_types',\n    value: JSON.stringify({\n      type: 'configItem',\n      id: 'config-System_Configuration-break_types/floating',\n      name: 'floating',\n      displayName: 'Floating Breaks',\n      defaultDuration: 0,\n      isPaid: false,\n      isRecognized: false,\n      serviceWindowName: 'floatingBreak'\n    })\n  },\n  /* Config Vehicle Capacity Fixtures */\n  {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig00',\n    name: 'vehicles_capacity_configs',\n    displayName: 'vehicleCapConfig00',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'standard',\n      vehicleCapacityType: 'ambulatory',\n      group: 1,\n      count: 20\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig01',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'standard',\n      vehicleCapacityType: 'wheelchair',\n      group: 1,\n      count: 2\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig02',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'standard',\n      vehicleCapacityType: 'serviceAnimal',\n      group: 1,\n      count: 1\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig03',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'standard',\n      vehicleCapacityType: 'wideAmbulatory',\n      group: 1,\n      count: 0\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig04',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'taxi',\n      vehicleCapacityType: 'ambulatory',\n      group: 1,\n      count: 1\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig05',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'taxi',\n      vehicleCapacityType: 'wheelchair',\n      group: 1,\n      count: 1\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig06',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'taxi',\n      vehicleCapacityType: 'serviceAnimal',\n      group: 1,\n      count: 0\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig07',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'taxi',\n      vehicleCapacityType: 'wideAmbulatory',\n      group: 1,\n      count: 0\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig08',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'smallBus',\n      vehicleCapacityType: 'ambulatory',\n      group: 1,\n      count: 20\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig09',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'smallBus',\n      vehicleCapacityType: 'wheelchair',\n      group: 1,\n      count: 2\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig10',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'smallBus',\n      vehicleCapacityType: 'serviceAnimal',\n      group: 1,\n      count: 2\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig11',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'smallBus',\n      vehicleCapacityType: 'wideAmbulatory',\n      group: 1,\n      count: 2\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig12',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'largeBus',\n      vehicleCapacityType: 'ambulatory',\n      group: 1,\n      count: 40\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig13',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'largeBus',\n      vehicleCapacityType: 'wheelchair',\n      group: 1,\n      count: 4\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig14',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'largeBus',\n      vehicleCapacityType: 'serviceAnimal',\n      group: 1,\n      count: 4\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_configs/vehicleCapConfig15',\n    name: 'vehicles_capacity_configs',\n    category: 'config-System_Configuration-vehicle_capacity_configs',\n    value: JSON.stringify({\n      vehicleType: 'largeBus',\n      vehicleCapacityType: 'wideAmbulatory',\n      group: 1,\n      count: 4\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_types/ambulatory',\n    name: 'vehicle_capacity_types',\n    category: 'config-System_Configuration-vehicle_capacity_types',\n    value: JSON.stringify({\n      displayName: 'Ambulatory',\n      description: 'Ambulatory seat',\n      engineId: 'A',\n      engineName: 'ambulatory',\n      constrainedByLIFO: false,\n      dwellFactor: 90\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_types/serviceAnimal',\n    name: 'vehicle_capacity_types',\n    category: 'config-System_Configuration-vehicle_capacity_types',\n    value: JSON.stringify({\n      displayName: 'Service Animal',\n      description: 'Service animal space',\n      engineId: 'N',\n      engineName: 'serviceanimal',\n      constrainedByLIFO: false,\n      dwellFactor: 100\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_types/wheelchair',\n    name: 'vehicle_capacity_types',\n    category: 'config-System_Configuration-vehicle_capacity_types',\n    value: JSON.stringify({\n      displayName: 'Wheelchair',\n      description: 'Wheelchair space',\n      engineId: 'W',\n      engineName: 'wheelchair',\n      constrainedByLIFO: false,\n      dwellFactor: 50\n    })\n  }, {\n    id: 'config-System_Configuration-vehicle_capacity_types/wideAmbulatory',\n    name: 'vehicle_capacity_types',\n    category: 'config-System_Configuration-vehicle_capacity_types',\n    value: JSON.stringify({\n      displayName: 'Wide Ambulatory',\n      description: 'Wide Ambulatory space',\n      engineId: 'B',\n      engineName: 'wideambulatory',\n      constrainedByLIFO: false,\n      dwellFactor: 50\n    })\n  }, {\n    id: 'config-Canned_Messages-to_dispatch/clarifyAddress',\n    displayName: 'Clarify Address',\n    name: 'clarifyAddress',\n    category: 'config-Canned_Messages-to_dispatch',\n    value: {\n      message: 'Clarify address'\n    },\n    defaultValue: ''\n  }, {\n    id: 'config-Canned_Messages-to_dispatch/requestBreak',\n    displayName: 'Request Break',\n    name: 'requestBreak',\n    category: 'config-Canned_Messages-to_dispatch',\n    value: {\n      message: 'Request break'\n    },\n    defaultValue: ''\n  }, {\n    id: 'config-Canned_Messages-to_dispatch/supervisorNeeded',\n    displayName: 'Supervisor Needed',\n    name: 'supervisorNeeded',\n    category: 'config-Canned_Messages-to_dispatch',\n    value: {\n      message: 'Supervisor needed'\n    },\n    defaultValue: ''\n  }, {\n    id: 'config-Canned_Messages-to_driver/callDispatchWhenSafe',\n    name: 'callDispatchWhenSafe',\n    displayName: 'Call Dispatch When Safe',\n    category: 'config-Canned_Messages-to_driver',\n    value: {\n      message: 'Call dispatch when safe'\n    },\n    defaultValue: ''\n  }, {\n    id: 'config-Canned_Messages-to_driver/collectFareAtDestination',\n    name: 'collectFareAtDestination',\n    displayName: 'Collect Fare At Destination',\n    category: 'config-Canned_Messages-to_driver',\n    value: {\n      message: 'Collect fare at destination'\n    },\n    defaultValue: ''\n  }, {\n    id: 'config-Canned_Messages-to_driver/waitForPassenger',\n    name: 'collectFareAtDestiwaitForPassengernation',\n    displayName: 'Wait For Passenger',\n    category: 'config-Canned_Messages-to_driver',\n    value: {\n      message: 'Wait for passenger'\n    },\n    defaultValue: ''\n  }, {\n    id: 'config-UI_restrictions/restrictions/admin',\n    description: 'This JSON payload is described in and used by the UX to determine what controls should be accessible to the user',\n    unit: '',\n    type: 'object',\n    defaultValue: '',\n    name: 'restrictions',\n    category: 'config-UI_restrictions',\n    value: JSON.stringify({\n      headerFunctions: ['configureWorkspace', 'saveWorkspace', 'saveAsWorkspace', 'deleteWorkspace', 'openWorkspace', 'generateSchedule', 'closeSchedule', 'systemConfiguration', 'resetPassword', 'logout'],\n      timeline: ['fullAccess'],\n      trips: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['assignRoute', 'noShow', 'waitlist', 'cancelTrip', 'edit', 'activityLog']\n      },\n      stops: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['arrive', 'depart', 'noShow', 'addDriverBreak', 'deleteDriverBreak', 'editDriverBreak', 'startBreak', 'endBreak', 'reorderStops']\n      },\n      routes: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newRoute', 'print'],\n        singleActions: ['sendMessage', 'startRoute', 'endRoute', 'activityLog', 'deleteRoute']\n      },\n      map: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: ['edit']\n      },\n      alerts: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: ['print']\n      },\n      drivers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newDriver', 'print'],\n        singleActions: ['sendMessage', 'edit']\n      },\n      vehicles: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newVehicle', 'print'],\n        singleActions: ['sendMessage', 'edit', 'resetDevice']\n      },\n      passengers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newPassenger', 'print'],\n        singleActions: ['addTrip', 'edit']\n      },\n      messages: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['showAll', 'print'],\n        singleActions: ['read', 'hide', 'send-message']\n      },\n      subscriptions: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['edit']\n      },\n      users: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newUser', 'print'],\n        singleActions: ['edit']\n      },\n      zones: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: [],\n        singleActions: []\n      },\n      metrics: {\n        show: true\n      },\n      gauge: {\n        show: true\n      },\n      box: {\n        show: true\n      },\n      'donut-chart': {\n        show: true\n      },\n      'bar-chart': {\n        show: true\n      }\n    })\n  }, {\n    id: 'config-UI_restrictions/restrictions/avlm',\n    description: 'This JSON payload is described in and used by the UX to determine what controls should be accessible to the user',\n    unit: '',\n    type: 'object',\n    defaultValue: '',\n    name: 'restrictions',\n    category: 'config-UI_restrictions',\n    value: JSON.stringify({\n      headerFunctions: ['configureWorkspace', 'saveWorkspace', 'saveAsWorkspace', 'deleteWorkspace', 'openWorkspace', 'generateSchedule', 'closeSchedule', 'systemConfiguration', 'resetPassword', 'logout'],\n      timeline: ['fullAccess'],\n      trips: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['assignRoute', 'noShow', 'waitlist', 'cancelTrip', 'edit', 'activityLog']\n      },\n      stops: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['arrive', 'depart', 'noShow', 'addDriverBreak', 'deleteDriverBreak', 'editDriverBreak', 'startBreak', 'endBreak', 'reorderStops']\n      },\n      routes: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newRoute', 'print'],\n        singleActions: ['sendMessage', 'startRoute', 'endRoute', 'activityLog', 'deleteRoute']\n      },\n      map: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: []\n      },\n      alerts: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: ['print']\n      },\n      drivers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newDriver', 'print'],\n        singleActions: ['sendMessage', 'edit']\n      },\n      vehicles: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newVehicle', 'print'],\n        singleActions: ['sendMessage', 'edit', 'resetDevice']\n      },\n      passengers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newPassenger', 'print'],\n        singleActions: ['addTrip', 'edit']\n      },\n      messages: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['showAll', 'print'],\n        singleActions: ['read', 'hide']\n      },\n      subscriptions: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['edit']\n      },\n      users: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newUser', 'print'],\n        singleActions: ['edit']\n      },\n      zones: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: [],\n        singleActions: []\n      },\n      metrics: {\n        show: true\n      },\n      gauge: {\n        show: true\n      },\n      box: {\n        show: true\n      },\n      'donut-chart': {\n        show: true\n      },\n      'bar-chart': {\n        show: true\n      }\n    })\n  }];\n});","define(\"adept-iq/tests/factories/cs-config-permission\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const adminCSConfigPermission = {\n    name: 'restrictions',\n    category: 'config-UI_restrictions',\n    value: {\n      headerFunctions: ['configureWorkspace', 'saveWorkspace', 'saveAsWorkspace', 'deleteWorkspace', 'openWorkspace', 'generateSchedule', 'closeSchedule', 'systemConfiguration', 'resetPassword', 'logout'],\n      timeline: ['fullAccess'],\n      trips: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['assignRoute', 'noShow', 'approveNoShowRequest', 'denyNoShowRequest', 'waitlist', 'cancelTrip', 'edit', 'activityLog', 'tripTransfer']\n      },\n      stops: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['arrive', 'depart', 'noShow', 'addDriverBreak', 'deleteDriverBreak', 'editDriverBreak', 'startBreak', 'endBreak', 'reorderStops', 'perform']\n      },\n      routes: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newRoute', 'print'],\n        singleActions: ['sendMessage', 'startRoute', 'endRoute', 'activityLog', 'deleteRoute']\n      },\n      map: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: ['edit']\n      },\n      alerts: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: ['print']\n      },\n      drivers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newDriver', 'print'],\n        singleActions: ['sendMessage', 'edit']\n      },\n      vehicles: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newVehicle', 'print'],\n        singleActions: ['sendMessage', 'edit', 'resetDevice', 'emergencyAcknowledge', 'emergencyCancel', 'emergencyResolve']\n      },\n      passengers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newPassenger', 'print'],\n        singleActions: ['addTrip', 'edit']\n      },\n      messages: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['showAll', 'print'],\n        singleActions: ['read', 'hide']\n      },\n      subscriptions: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['edit']\n      },\n      users: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newUser', 'print'],\n        singleActions: ['edit']\n      },\n      zones: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: [],\n        singleActions: []\n      },\n      metrics: {\n        show: true\n      },\n      gauge: {\n        show: true\n      },\n      box: {\n        show: true\n      },\n      'donut-chart': {\n        show: true\n      },\n      'bar-chart': {\n        show: true\n      }\n    }\n  };\n  const avlmCSConfigPermission = {\n    name: 'restrictions',\n    category: 'config-UI_restrictions',\n    value: {\n      headerFunctions: ['configureWorkspace', 'saveWorkspace', 'saveAsWorkspace', 'deleteWorkspace', 'openWorkspace', 'generateSchedule', 'closeSchedule', 'systemConfiguration', 'resetPassword', 'logout'],\n      timeline: ['fullAccess'],\n      trips: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['assignRoute', 'noShow', 'waitlist', 'cancelTrip', 'approveNoShowRequest', 'denyNoShowRequest', 'edit', 'activityLog']\n      },\n      stops: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['arrive', 'depart', 'noShow', 'addDriverBreak', 'deleteDriverBreak', 'editDriverBreak', 'perform', 'startBreak', 'endBreak', 'reorderStops']\n      },\n      routes: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newRoute', 'print'],\n        singleActions: ['sendMessage', 'startRoute', 'endRoute', 'activityLog', 'deleteRoute']\n      },\n      map: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: []\n      },\n      alerts: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        singleActions: ['print']\n      },\n      drivers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newDriver', 'print'],\n        singleActions: ['sendMessage', 'edit']\n      },\n      vehicles: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newVehicle', 'print'],\n        singleActions: ['sendMessage', 'edit', 'resetDevice']\n      },\n      passengers: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newPassenger', 'print'],\n        singleActions: ['addTrip', 'edit']\n      },\n      messages: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['showAll', 'print'],\n        singleActions: ['read', 'hide']\n      },\n      subscriptions: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['print'],\n        singleActions: ['edit']\n      },\n      users: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: ['newUser', 'print'],\n        singleActions: ['edit']\n      },\n      zones: {\n        show: true,\n        filterAllowed: true,\n        searchAllowed: true,\n        cellEditAllowed: true,\n        tableActions: [],\n        singleActions: []\n      },\n      metrics: {\n        show: true\n      },\n      gauge: {\n        show: true\n      },\n      box: {\n        show: true\n      },\n      'donut-chart': {\n        show: true\n      },\n      'bar-chart': {\n        show: true\n      }\n    }\n  };\n\n  _emberDataFactoryGuy.default.define('cs-config-permission', {\n    default: {\n      name: null,\n      category: null,\n      value: null\n    },\n    traits: {\n      avlm: f => {\n        f.name = avlmCSConfigPermission.name;\n        f.category = avlmCSConfigPermission.category;\n        f.value = avlmCSConfigPermission.value;\n      },\n      admin: f => {\n        f.name = adminCSConfigPermission.name;\n        f.category = adminCSConfigPermission.category;\n        f.value = adminCSConfigPermission.value;\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/dashboard\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('dashboard', {\n    default: {\n      name: null,\n      role: null,\n      category: null\n    }\n  });\n});","define(\"adept-iq/tests/factories/dispatch-route\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('dispatch-route', {\n    default: {\n      lockedForOptimization: false\n    }\n  });\n});","define(\"adept-iq/tests/factories/dispatch-schedule\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('dispatch-schedule', {\n    default: {\n      locked: false\n    }\n  });\n});","define(\"adept-iq/tests/factories/driver-attribute\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('driver-attribute', {\n    default: {\n      key: 'Attribute key used to compare vehicles attributes to Rider\\'s requirements.',\n      name: 'Name of the Attribute'\n    }\n  });\n});","define(\"adept-iq/tests/factories/driver-availability\", [\"ember-data-factory-guy\", \"faker\", \"moment\"], function (_emberDataFactoryGuy, _faker, _moment) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('driver-availability', {\n    sequences: {\n      randomBoolean: () => _faker.default.random.boolean(),\n      randomStartTime: () => _faker.default.date.past(1, date),\n      randomEndTime: () => _faker.default.date.future(3, date),\n      randomShiftStart: () => (0, _moment.default)().startOf('day').add(6, 'hours').format('HH:mm'),\n      randomShiftEnd: () => (0, _moment.default)().endOf('day').subtract(6, 'hours').format('HH:mm')\n    },\n    default: {\n      startTime: _emberDataFactoryGuy.default.generate('randomStartTime'),\n      endTime: _emberDataFactoryGuy.default.generate('randomEndTime'),\n      shiftStart: _emberDataFactoryGuy.default.generate('randomShiftStart'),\n      shiftEnd: _emberDataFactoryGuy.default.generate('randomShiftEnd'),\n      sunday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      monday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      tuesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      wednesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      thursday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      friday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      saturday: _emberDataFactoryGuy.default.generate('randomBoolean')\n    },\n    traits: {\n      always: {\n        shiftStart: '00:00',\n        shiftEnd: '23:59',\n        sunday: true,\n        monday: true,\n        tuesday: true,\n        wednesday: true,\n        thursday: true,\n        friday: true,\n        saturday: true\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/driver-phone-number\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('driver-phone-number', {\n    sequences: {\n      areaCodes: () => _faker.default.phone.phoneNumber('###'),\n      phoneNumbers: () => _faker.default.phone.phoneNumber('###-####'),\n      extensions: () => _faker.default.phone.phoneNumber('###')\n    },\n    default: {\n      areaCode: _emberDataFactoryGuy.default.generate('areaCodes'),\n      phoneNumber: _emberDataFactoryGuy.default.generate('phoneNumbers'),\n      extension: _emberDataFactoryGuy.default.generate('extensions')\n    }\n  });\n});","define(\"adept-iq/tests/factories/driver\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const names = ['Arthur', 'Haze', 'Joseph', 'mcWhiny', 'Dick', 'Grayson', 'Lisa', 'Mayberry'];\n  const phoneNumbers = ['234-345-4356', '555-564-6456', '234-565-3452'];\n\n  _emberDataFactoryGuy.default.define('driver', {\n    sequences: {\n      firstNames: num => names[num % names.length],\n      phoneNumbers: num => phoneNumbers[num % phoneNumbers.length],\n      externalIds: num => num\n    },\n    default: {\n      driverId: _emberDataFactoryGuy.default.generate('externalIds'),\n      firstName: _emberDataFactoryGuy.default.generate('firstNames'),\n      middleName: _emberDataFactoryGuy.default.generate('firstNames'),\n      lastName: _emberDataFactoryGuy.default.generate('firstNames'),\n      travelTimeAdjustment: 5,\n      active: true,\n      notes: 'some notes',\n      preferredVehicles: _emberDataFactoryGuy.default.generate('externalIds'),\n      phoneNumber: _emberDataFactoryGuy.default.generate('phoneNumbers')\n    }\n  });\n});","define(\"adept-iq/tests/factories/eligibility-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  /* eslint-disable no-use-before-define */\n  _emberDataFactoryGuy.default.define('eligibility-type', {\n    sequences: {\n      names: num => eligibilityTypes[num % eligibilityTypes.length].name\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('names')\n    }\n  });\n\n  const eligibilityTypes = [\n  /* Config Elgibility Type Fixtures */\n  {\n    name: 'disability'\n  }, {\n    name: 'medical'\n  }, {\n    name: 'senior'\n  }];\n});","define(\"adept-iq/tests/factories/etanav-route\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('etanav-route', {\n    default: {\n      secondsToNext: '234',\n      inService: 'true',\n      version: '8e3ec40f-76b0-4509-8a1e-eb935d0d3124'\n    }\n  });\n});","define(\"adept-iq/tests/factories/etanav-stop-point\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const stops = [// stops-pick-P207494508 lat: 40.65954 lng: -73.93221\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(8, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 14,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.65954,\n    lng: -73.93221\n  }, // stops-drop-D207494508 lat: 40.64108 lng: -73.9456\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(9, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 15,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.64108,\n    lng: -73.9456\n  }, // stops-drop-D207493009 lat: 40.66288 lng: -73.9325\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(9, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 13,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.66288,\n    lng: -73.9325\n  }, // stops-pick-P207493009 lat: 40.74082 lng: -73.9838\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(10, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 10,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.74082,\n    lng: -73.9838\n  }, // stops-drop-D207494359 lat: 40.68936 lng: -73.97942\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(11, 'hours').toDate(),\n    actualArrival: '2019-07-08T21:12:26.265Z',\n    actualDepart: '2019-07-08T21:12:27.962Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 4,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207494359 lat: 40.68448 lng: -73.94628\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(12, 'hours').toDate(),\n    actualArrival: '2019-07-08T21:07:52.537Z',\n    actualDepart: '2019-07-08T21:07:56.449Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 2,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68448,\n    lng: -73.94628\n  }, // stops-pick-P207496170 lat: 40.61552 lng: -73.96913\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(13, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 11,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.61552,\n    lng: -73.96913\n  }, // stops-drop-D207496170 lat: 40.61545 lng: -73.96126\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(14, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 12,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.61545,\n    lng: -73.96126\n  }, // stops-pick-P207496912 lat: 40.68431 lng: -73.79013\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(15, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 5,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68431,\n    lng: -73.79013\n  }, // stops-drop-D207496912 lat: 40.70408 lng: -74.01318\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(16, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 7,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.70408,\n    lng: -74.01318\n  }, // stops-pick-P207493284 lat: 40.689 lng: -73.79482\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(17, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 6,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.689,\n    lng: -73.79482\n  }, // stops-drop-D207493284 lat: 40.70988 lng: -74.01277\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(12, 'hours').toDate(),\n    actualArrival: null,\n    actualDepart: null,\n    note: null,\n    odo: null,\n    polyline: null,\n    ordinal: 8,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.70988,\n    lng: -74.01277\n  }, // stops-drop-D207495587 lat: 40.68936 lng: -73.97942\n  {\n    isDelete: false,\n    type: 'drop',\n    eta: (0, _moment.default)().startOf('day').add(9, 'hours').toDate(),\n    actualArrival: '2019-07-08T21:12:20.628Z',\n    actualDepart: '2019-07-08T21:12:22.542Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 3,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207495587 lat: 40.63737 lng: -73.94329\n  {\n    isDelete: false,\n    type: 'pick',\n    eta: (0, _moment.default)().startOf('day').add(11, 'hours').toDate(),\n    actualArrival: '2019-07-08T20:53:00.623Z',\n    actualDepart: '2019-07-08T20:55:48.884Z',\n    note: null,\n    odo: '593847',\n    polyline: null,\n    ordinal: 1,\n    providerId: 'EPC',\n    plannedTime: (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n    stopStatus: 'Active',\n    lat: 40.63737,\n    lng: -73.94329\n  }];\n\n  _emberDataFactoryGuy.default.define('etanav-stop-point', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      etas: num => stops[num % stops.length].eta,\n      ordinals: num => stops[num % stops.length].ordinal,\n      plannedTimes: num => stops[num % stops.length].plannedTime,\n      types: num => stops[num % stops.length].type\n    },\n    default: {\n      eta: _emberDataFactoryGuy.default.generate('etas'),\n      notBefore: _emberDataFactoryGuy.default.generate('plannedTimes'),\n      status: 'performed',\n      travelTimeToNext: '465',\n      type: 'stop'\n    },\n    traits: {\n      break: {\n        type: 'break'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/fare-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const fareTypes = [\n  /* Config Elgibility Type Fixtures */\n  {\n    name: 'credit'\n  }, {\n    name: 'cash'\n  }, {\n    name: 'bits'\n  }];\n\n  _emberDataFactoryGuy.default.define('fare-type', {\n    sequences: {\n      names: num => fareTypes[num % fareTypes.length].name\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('names')\n    }\n  });\n});","define(\"adept-iq/tests/factories/generated-subscription-booking\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('generated-subscription-booking', {\n    default: {}\n  });\n});","define(\"adept-iq/tests/factories/group\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('group', {\n    sequences: {\n      groupIds: num => num\n    },\n    default: {\n      groupId: _emberDataFactoryGuy.default.generate('groupIds'),\n      description: 'It\\'s a group of Arthur Rojas ahhhhh!!!!!!!'\n    }\n  });\n});","define(\"adept-iq/tests/factories/leg-travel-need\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('leg-travel-need', {\n    default: {\n      count: 1\n    }\n  });\n});","define(\"adept-iq/tests/factories/leg\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const purposeArray = ['work', 'medical', 'school'];\n\n  _emberDataFactoryGuy.default.define('leg', {\n    sequences: {\n      requestTimes: () => (0, _moment.default)().startOf('day').add(8, 'hours').toDate(),\n      purposes: num => purposeArray[num % purposeArray.length]\n    },\n    default: {\n      requestTime: _emberDataFactoryGuy.default.generate('requestTimes'),\n      anchor: 'pick',\n      // default pick anchor\n      purpose: _emberDataFactoryGuy.default.generate('purposes'),\n      notes: 'some notes'\n    },\n    traits: {\n      drop: {\n        // eslint-disable-next-line no-return-assign\n        anchor: f => f.anchor = 'drop'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/location\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const locs = [// stops-pick-P207494508 lat: 40.65954 lng: -73.93221\n  {\n    lat: 40.65954,\n    lng: -73.93221\n  }, // stops-drop-D207494508 lat: 40.64108 lng: -73.9456\n  {\n    lat: 40.64108,\n    lng: -73.9456\n  }, // stops-drop-D207493009 lat: 40.66288 lng: -73.9325\n  {\n    lat: 40.66288,\n    lng: -73.9325\n  }, // stops-pick-P207493009 lat: 40.74082 lng: -73.9838\n  {\n    lat: 40.74082,\n    lng: -73.9838\n  }, // stops-drop-D207494359 lat: 40.68936 lng: -73.97942\n  {\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207494359 lat: 40.68448 lng: -73.94628\n  {\n    lat: 40.68448,\n    lng: -73.94628\n  }, // stops-pick-P207496170 lat: 40.61552 lng: -73.96913\n  {\n    lat: 40.61552,\n    lng: -73.96913\n  }, // stops-drop-D207496170 lat: 40.61545 lng: -73.96126\n  {\n    lat: 40.61545,\n    lng: -73.96126\n  }, // stops-pick-P207496912 lat: 40.68431 lng: -73.79013\n  {\n    lat: 40.68431,\n    lng: -73.79013\n  }, // stops-drop-D207496912 lat: 40.70408 lng: -74.01318\n  {\n    lat: 40.70408,\n    lng: -74.01318\n  }, // stops-pick-P207493284 lat: 40.689 lng: -73.79482\n  {\n    lat: 40.689,\n    lng: -73.79482\n  }, // stops-drop-D207493284 lat: 40.70988 lng: -74.01277\n  {\n    lat: 40.70988,\n    lng: -74.01277\n  }, // stops-drop-D207495587 lat: 40.68936 lng: -73.97942\n  {\n    lat: 40.68936,\n    lng: -73.97942\n  }, // stops-pick-P207495587 lat: 40.63737 lng: -73.94329\n  {\n    lat: 40.63737,\n    lng: -73.94329\n  }];\n\n  _emberDataFactoryGuy.default.define('location', {\n    default: {\n      lat: _emberDataFactoryGuy.default.generate(i => locs[i % locs.length].lat),\n      lng: _emberDataFactoryGuy.default.generate(i => locs[i % locs.length].lng),\n      geoNode: 5444\n    }\n  });\n});","define(\"adept-iq/tests/factories/lock\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('lock', {\n    default: {\n      entityType: 'dispatchRoute',\n      entityId: '1',\n      timeToLive: 10,\n      // for testing purposes locks will be very short, use traits to extend a lock\n      status: 'unLocked',\n      expirationTime: (0, _moment.default)().add(8, 'hours').toDate(),\n      persist: false\n    },\n    traits: {\n      locked: {\n        status: 'locked'\n      },\n      acquired: {\n        status: 'acquired'\n      },\n      acquiredNormal: {\n        status: 'acquired',\n        timeToLive: 180\n      },\n      acquiredLong: {\n        status: 'acquired',\n        timeToLive: 1800\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/metric\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('metric', {\n    // all attributes can be change based on a passed options hash\n    default: {\n      routes: 10,\n      unusedRoutes: 10,\n      scheduledTrips: 10,\n      breakTrips: 10,\n      manualTrips: 10,\n      brokerTrips: 10,\n      waitlistedTrips: 10,\n      riders: 10,\n      revenueHours: 10,\n      revenueMiles: 10,\n      totalHours: 10,\n      totalMiles: 10,\n      percentageTripsRiderSharing: 10,\n      percentageTimeEmpty: 10,\n      percenageTimeOnBreak: 10,\n      averageRiderTimePerTrip: 10\n    }\n  });\n});","define(\"adept-iq/tests/factories/no-show-reason-code\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('no-show-reason-code', {\n    default: {\n      code: 'C',\n      externalCode: 'C',\n      description: 'Generic Cancel'\n    }\n  });\n});","define(\"adept-iq/tests/factories/no-show\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('no-show', {\n    default: {\n      notes: 'Some notes about no showing'\n    }\n  });\n});","define(\"adept-iq/tests/factories/passenger-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  /* eslint-disable no-use-before-define */\n  _emberDataFactoryGuy.default.define('passenger-type', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      types: num => passengerTypes[num % passengerTypes.length].type,\n      names: num => passengerTypes[num % passengerTypes.length].name\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('names'),\n      type: _emberDataFactoryGuy.default.generate('types')\n    },\n    traits: {\n      client: {\n        name: 'client',\n        type: 'configItem'\n      }\n    }\n  });\n\n  const passengerTypes = [\n  /* Config Passenger Type Fixtures */\n  {\n    type: 'configItem',\n    id: 'config-System_Configuration-passenger_types/client',\n    name: 'client'\n  }, {\n    type: 'configItem',\n    id: 'config-System_Configuration-passenger_types/companion',\n    name: 'companion'\n  }, {\n    type: 'configItem',\n    id: 'config-System_Configuration-passenger_types/pca',\n    name: 'pca'\n  }];\n});","define(\"adept-iq/tests/factories/place-category-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('place-category-type', {\n    default: {}\n  });\n});","define(\"adept-iq/tests/factories/place-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('place-type', {\n    default: {}\n  });\n});","define(\"adept-iq/tests/factories/place\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const placeTypes = ['primary', 'favorite'];\n\n  _emberDataFactoryGuy.default.define('place', {\n    sequences: {\n      placeTypes: num => placeTypes[num % placeTypes.length]\n    },\n    default: {\n      placeCategoryTypeName: _emberDataFactoryGuy.default.generate('placeTypes'),\n      geoCodingMethod: null\n    }\n  });\n});","define(\"adept-iq/tests/factories/polyline\", [\"ember-data-factory-guy\", \"@mapbox/polyline\"], function (_emberDataFactoryGuy, _polyline) {\n  \"use strict\";\n\n  const stopPolylines = [{\n    polyline: _polyline.default.decode('aidwFl{fbMgETCu@Ao@EaBfAGDApG[x@En@CrAGzCQ`BKtAIdBI~@EpAGxCSjAGrBKvESnAIfBIrBMhBKdBGb@CpDSbAE\\\\Ad@Ed@CfEUbAGtAG|DUJAl@Ch@CJjEJtDLbEJ`EJzDJ~DH`EJzDFhC@v@J~DLzDHzDJvDJbEL~DHzDJ`ElMq@')\n  }, {\n    polyline: _polyline.default.decode('aetwFt}pbMDBzBvAbCdBjAwDTs@b@{Al@eB\\\\eAPo@FO@ALc@FWPe@n@mBfAqDh@_BL_@Tw@j@iBl@cBH]Rm@r@sBZcAX_AHUn@uBp@uBX?J?hB[hBY`Dg@pB]t@ObF{@LC`@GZGP]N[hBeCd@y@vBmCl@WhBe@bBA|@JzDZh@DXD~A\\\\p@XbI~DHH^R|EjCzCnA~B\\\\b@B`@@\\\\BdFZbEVn@DdAJxDn@rEvAr@Z~B~@^PPFh@TDBD@HBDDD@DBHBh@VPDzErBFBLDjDxAr@d@`BfBbApBHXZfAXfBJz@PdFDlAPbGB~@PvE@\\\\BT@TRhDNpCh@xIRrDBTdAlNBV@XBT@FFr@l@pIr@lKF`ABd@h@dF\\\\bBj@bBz@rBFLBFBFDBr@~AxEbLBFnAdCZn@BDb@z@`AbB^p@xFhKrA`CXj@tAhCDJP\\\\bAhBjAzBR\\\\z@`CNl@PpA`@rC^pCD\\\\BNDNDb@Lx@ZtBDxAA`@E`@MdA[jAEFU^GJEFm@t@MPq@v@GJEDk@b@cAh@kA^eCR{DTK?UAKAa@KgEiAYIgA]sAm@Be@Ly@R]JMr@QfABx@Nz@TPDp@PlAZPDbB\\\\x@Nh@HrANd@DrC?r@Ah@ITChB[FAJALCLCxEsAbSmFpT_G|Cy@`Bc@jBm@|F}CfD_CrQcNJGhAq@p@]vIaEj@Oz@QtBe@zAi@zBcAFEXMjAe@lAw@z@k@\\\\Yz@cATYVYv@u@RMFIl@i@PODCDGFEfCqBDEh@_@`DuB~@k@tBiAnAs@TOh@WHEtAu@xAu@lBgAFCz@c@FC|CyA`B{@p@_@hBcAtAu@FALKx@c@tC}AXOdB}@t@a@bAg@`Ai@f@UlDiAvAy@NO`@o@~@kBXi@`DoGn@oAFQT_@FSpB}DpB}DVg@v@uAfBsCzCwCdKyGFCHIdAu@fCqCtBsDR_@PYfCeFfAsBTe@lA}BhA_C`AkBn@mA~D_IlAoBLOlCmChA{@fAu@b@UpCmArDaB^OpHcDHEFA`@O@ANENCdAWp@MVEpC[vEi@tAOvGw@JAn@Kd@EdD_@PQ`@ExH{@v@IlBSbBSj@GlD_@t@IhBSzASp@IdD_@bAMdBSbBQl@GdGm@`AKbCWhAM|@M^EPAb@EdBUdAMXCr@In@IVEnAMlBUd@E|@KfAOhBQzAOZCp@K`@EzAOnAOTCz@IlCY`@GjCY|BWp@KpHw@vGs@v@KhC[~BU\\\\GrC[j@G~BW@JBj@fCW^ERCPAlAOD?')\n  }, {\n    polyline: _polyline.default.decode('}u`wFdoibMKaEK{DkMp@M_EKcEKwDI{DM{DK_EAw@GiCK{DIaEK_EK{DKaEMcEKuDKkEEuAEqBKwDKeEK_ECaBA[?GAKCSaCYuBW{@IkAK{AQ_BOsBQe@Ea@GoDu@sCs@gA[oBo@mA[}Bk@eAYSEcDaAiAq@_@MmA[GaAGkB?[@sB@i@BwC@aAFcCDuCDaFBmBDqB@s@HgH@yA@gA@aB?g@CoE?q@Ck@KsAOoB[wDOoBImAMsAMeBYkDQoBQ}B[eEWoC_@aA}@cBaDuFgBoBMSKu@CUCYAME]Jq@Zs@h@i@p@Gt@F`Af@p@f@Q}CAOAKAMWaD[wD[wDe@mBq@oBxCqBDCbCkB~@]rFuDmAaDCG')\n  }, {\n    polyline: _polyline.default.decode('{diwFdsibMNtCjAjStA|Un@pLb@xHXbFqC\\\\qCb@qCXsCXqC\\\\oCZuC\\\\cBRk@HuC\\\\mCZHxARjDBZDv@@P@ZVvEBd@B^DfAFh@@x@FrB@RZvDV`EV`ECjEInEGdEEjEIbEAb@E|CEfEEbEGbE?TAVEvBAZCfBAL@FAxA?PA~@bBO')\n  }, {\n    polyline: _polyline.default.decode('_~dwF`}fbMHXf@dAAfALbFnCMjCOrCQhH_@~COMcGGsBkFTQ@E?')\n  }, {\n    polyline: _polyline.default.decode('mu{vFxplbMOsCImBIiAIaB?GAG?IG}@S_EW_ES_EUaFAKrOcBnKkAtAQVC_@yDCSGe@QcBBMC]_@}BKSO_@eBsBg@m@kByBg@m@W_@}AkCiAiBYg@OWqBgDeAcBm@cAkAgBw@mAY]{BkCaBsAa@]cDoC_Au@qDyCUYOS@IAOUi@KM{@a@E?M?MBWIg@_@k@m@]c@a@o@y@mBW}@y@uDOm@UaAK]SgAi@mBs@}AQY_@]_EsA[UoAaBeDyDeAsAGECEEEEGqD_DoAi@}ADS?cAJoBTeAHmEDg@IMI_@[}@gAmAuA]_@QQa@g@oBkBcAcA_@_@cAaAgAcAuBsBcAgA_B{AoAkAaAaA}BuA_@SQM}A}@cFaAu@E]AIAWGs@KiCW_AEiAGgAOqCW{D]kAKkFo@wCYoAIaCYuBW{@IkAK{AQ_BOsBQe@Ea@GoDu@sCs@gA[oBo@mA[}Bk@eAYSEcDaAqBi@cAYQGo@UEAERKLgCtCyAbBi@l@{@`AkC|CeAlAw@z@{BjCaAhAm@p@oAvAIJcDvDcCnC]b@s@x@qDfEiCjCs@x@_@r@?N|@vCBH')\n  }, {\n    polyline: _polyline.default.decode('}ciwFhckaMMHwBtAwBtAyBvAkD|B}BzAsBfAwBnAaBfARbBr@zB')\n  }, {\n    polyline: _polyline.default.decode('ucnwFvrvbMm@UnA}DnBcFnAsD\\\\q@pDaFfBcDvAeCvBwCo@aA}AgCuB}D_@_@a@c@{@y@_@e@{BuCwB_DMKIGEEOMGE@KD[Fs@bAwAX[NMb@MVELAFAPG^MPOXa@LY@GH_@?MAUASQs@aAqCMq@{@}FWyCa@aFIs@McAE{@o@iJAIASEYCWgA{NSwDg@wIQqCS_E?IAQEWMwECaAQ_GCy@M}EKsAAGUyAg@mBoAeCyA_BgAs@s@Y}BaAKE}EsBy@]GCGCECGAEEGCECcAa@g@S{Ak@eBs@aCu@eF_A}AO_@CsLq@YAu@K_AI}Bk@cIcEa@U}EkCkDwAUGuAWMAu@GqBO_AIUAmA]q@EcBP]LsBnAoBnCuBzBUVABATE^Ib@mFbAy@L]DgEr@o@LuBRa@Am@IEAa@C@JAXK`@q@tBo@tBITY~@[bAs@rBSl@I\\\\m@bBk@hBUv@M^i@~AgApDo@lBQd@GVMb@A@GNQn@]dAm@dBcCyAyByAkAy@q@c@{BuAi@hBINsAfEzBvAvBrA')\n  }, {\n    polyline: _polyline.default.decode('q~_wFt`ibMg@BMDETFzADz@BDL?fESIyDMaEqMp@kCLgCJyBLcAFmMr@kERiDPiAHsBHgCLuBLsCN_@BaAFeADCc@Cq@A}@Cm@MBsI`@}Jd@EwDEyBCaAKyDG_CC_A_@@wG\\\\_GVeCPc@By@DoBKUgIK}E{CNaDNmCNoAD}@FkCPuCNmBFq@OoB_@qDMwAKyAEyAGwAKwACyAIcDOuCMc@CS?YCQ?aCMeDMiBKiAGsDKqDOqDMqDU{CM{CMoCOK?E?E?KAyBIIAqAc@oCmCs@m@iA]eANoCXuC\\\\qCZqCZqC\\\\qCZsC^t@zMJlBz@fOFj@~@vPn@|K')\n  }, {\n    polyline: _polyline.default.decode('k_mwFjuvbMF}HxA@T?p@~DP|A@FKrGwAEi@G[E}@Ks@IIBADQRENCPUrA}FoBYUUc@CIk@}@k@c@[OWOkC_BiEaCg@YQKo@a@w@`CUp@a@O')\n  }, {\n    polyline: _polyline.default.decode('_v{vF`bnbMxDe@Ci@AMCw@WyEWuEU{DQwDWyDAUEeBMyAQwDEe@')\n  }, {\n    polyline: _polyline.default.decode('ocjwFpbpbM~Ec@jAyDbAiDdAsDZ_Az@uCrAqEpAkEJ]Lg@^iAd@_BTDf@?LE`DWbFs@NKx@BVDBOTaBZcCBY^cDPkAVoBL_Ab@sDf@uDh@wEL}@^sCBSJaA^oCJy@LeAt@cGz@}GHw@RwAd@wD~AoM^qCp@aFHi@F_@^{CL{@JcCXqMH{EBeANeG@OFsDTeJBkBBsAHgDFkC@w@H}CFsCJsFD{A@e@?O@k@FkB@s@BkAB{@BeARiKF}CBeAT}IFcC@s@PkJ@u@DuAByABgBRqH@s@DsBDuAHaE@_@@o@DsBD_BBmAHiDHkDDqDBI?o@@e@B_BHyD@}@@]ByAFmB@gABk@FsCF_EJgD@w@FgCFyDH{B@s@F_E?[N{JLcGVcG@QJsADe@Bm@V{DJcE?_E?aAC{BAs@A{B?i@CaAGaBOqEUsDSmDAKWsDYyD]qDM_AUqBa@qDc@qDg@kDi@kDg@_DMs@]mBk@}CQ{@[_BSiA[aBWsAY{AEQScAY_BYwAY{AMo@Gc@YwAe@yBMy@WsAQgAI]WoAU{AEm@Ai@@w@ToBh@wBFKnAuBlCmBr@c@ZUPORYp@gARg@VkAf@cCBMP}@^oBBQLw@H[F_@BSDSDKLi@H]v@yCJYF]ZiALg@DQFSJc@Tw@XiALg@J]VcAH_@\\\\mAH]^uAVeAT{@n@gCLi@BODSH]XkAd@eCn@yCz@{D|@sEn@_DLm@ZcBD]pAoInDgPl@aDbAuE`AyD^wAd@wB`@oBZ}AH]XaBDOHe@DOh@eC\\\\aB`@_Ej@uFj@qCTeANu@Jg@fAgDJW|BoFzAgERg@FSFQH[f@yAd@cD~AoLdB_M@I@K@KRcA@MJMl@_Dh@eCF[x@cDAI\\\\uDC{BAUEo@[cBCQGYYqBUgCEsBNqIHcD?{@FsHMqGE{@Y{AY_CsAkH_BuGUeAkAeHYcE?{JHeHBkBBsAp@oJ?QVcIb@qMDs@@e@RiK~@aPG{Go@eP?oBFuFPmFCu@s@KQCKAYA[CGAOAUA_AIYEm@Go@GaBQkAKUEeC[mC_@YGuASyDm@OAAAmDe@a@Ca@GcAMMCg@IM@KJ}@hAaDlDmCfBq@ZuB|@aC`AaCx@YHi@PUFi@NKB_@He@Ns@PiCt@oA\\\\qCj@iCd@kCf@sCb@?UCUoBaGwB{GiBlA')\n  }, {\n    polyline: _polyline.default.decode('eajwFp`laMNb@n@~Bh@|An@jBbAfDfA`DdAdDfAbD^pA`@tAj@dB\\\\dAf@xBNv@f@lCHd@p@lDn@nDDVj@vCa@PsC|AgHjDcAd@mFbCgClAiFjCcCnAOJiCnAc@R{ApAgCnA}Ax@e@`@g@^GB[LqJxEsDlBSLaClAYLE@GDE@GDGBEBMDOHGD]NqIpDSJeA`@_@LyHlC[JsFnB[LUHoDpAeDxA]N]PSHmB`Ac@PiCvAiAj@mB`AGDeBx@]P_@Pq@b@SJIFkAz@YZyB~BkDrEOTk@j@y@vAcCpBkAz@{AbAeD`CcCjCSVUVMTW\\\\EHa@n@g@z@O^y@xCAFCHGRE\\\\{@bH]lB_@jAk@bBcBpCyF`GgC|B_CrBmHrFSNu@d@oHlEk@V}ClAkBj@aA\\\\eC|@iEpBwAv@iGlE[VmCfCsEbFeEdEg@`@aAr@iF|CqAj@}C`AcEv@cBG}CF{BBuI|@YDG@G@UDMB]D_@FwAVa@BkAJECWKOSQg@C]Dq@JSV_@RM\\\\Gb@BTHv@bAT\\\\d@lAL^DHL^R`@HXh@rAb@jAvApDzEzLNh@|@tD^lBR|@DTF`@Jn@PjA|@hJpAbJ\\\\lB`BfIH^BHF`@fA~Ej@vClErTNp@BLHb@j@jCxCzMH^Lf@Jb@H^HXF\\\\H\\\\HVFX`B~HNn@Lv@BJNn@XrA\\\\hBb@rB`@tBPx@Jj@t@nD@HBLDJ~@zE|AfGRn@\\\\dAJ\\\\fAlDj@fCb@dDXbG`@`LXlFD\\\\j@hDr@vCl@dBzBzEpCpFXr@Z|@\\\\lAXfAR`Ah@zERnFAHI|DAb@QtD[tHQjEUlFShFQ~DWvFALIzAg@pDmAdFqBbFQZOZoI`PO^mAnDk@dCIVsCpQs@dEQz@sAlHMt@_BlFCFGNWh@W^aD|EQRINW\\\\y@fAKPKJOVoAdBOTGHCFEDCDEJEBCF_B|CKVkAzC{AxGSx@eAxIc@`EcBxNAH[|DEv@KlAEf@OjBEh@M`Ae@hEOfACd@QbCGr@Ef@AV]|DIl@]dCy@vDUx@_ArCkAhDi@dB_AvC_AvCqAzEEHMr@oAnJO~AcAhIGn@Ep@ANAH?F?HAzCFxAHn@TtC@ZB|AAz@EnACxAA|@?`@?H?b@At@GlB?Po@rHCZETEf@YfCGj@]|Cy@tEADSn@g@~AO\\\\EFENGLm@jAyWdb@[h@_B`DCNENABAJGNETCVQnCN~BLl@`AnBFNxB~Av@h@|@~@X^DJTp@P|@Ff@?`@?ZA`@Kf@Sr@c@tA@^]~@gAnDERAn@Hj@FNVXv@j@bAt@nBsGt@b@pAx@v@cC`AaDlAsDdAeDh@cBHDJFtBv@lDl@~BTbA?dALxBXfCt@nCzAvAbArAz@PJJFj@^FDNHjBh@r@Hn@AhBOtAUpEq@hASnEu@dCa@vAa@TOdAo@fEeFlAeAl@WhBe@bBA|@JzDZh@DXD~A\\\\p@XbI~DHH^R|EjCzCnA~B\\\\b@B`@@\\\\BdFZbEVn@DdAJxDn@rEvAr@Z~B~@^PPFh@TDBD@HBDDD@DBHBh@VPDzErBFBLDjDxAr@d@`BfBbApBHXZfAXfBJz@PdFDlAPbGB~@PvE@\\\\BT@TRhDNpCh@xIRrDBTdAlNBV@XBT@FFr@l@pIr@lKF`ABd@h@dF\\\\bBj@bBz@rBFLBFBFDBr@~AxEbLBFnAdCZn@BDb@z@`AbB^p@xFhKrA`CXj@tAhCDJP\\\\bAhBjAzBR\\\\z@`CNl@E|@ZhB@PD^k@J}Dv@eBPU?yAAs@C{ACo@C@L@HEbEArCxAM`BM?I')\n  }, {\n    polyline: _polyline.default.decode('ocjwFpbpbM??')\n  }];\n\n  _emberDataFactoryGuy.default.define('polyline', {\n    sequences: {\n      polylines: num => stopPolylines[num % stopPolylines.length].polyline\n    },\n    default: {\n      coords: _emberDataFactoryGuy.default.generate('polylines')\n    }\n  });\n});","define(\"adept-iq/tests/factories/provider\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const providerNames = ['MAC', 'EPC', 'AMG'];\n\n  _emberDataFactoryGuy.default.define('provider', {\n    sequences: {\n      names: num => providerNames[num % providerNames.length]\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('names')\n    }\n  });\n});","define(\"adept-iq/tests/factories/rider-eligibility\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('rider-eligibility', {\n    sequences: {\n      froms: () => _faker.default.date.past(1, date),\n      tos: () => _faker.default.date.future(3, date)\n    },\n    default: {\n      from: _emberDataFactoryGuy.default.generate('froms'),\n      to: _emberDataFactoryGuy.default.generate('tos')\n    }\n  });\n});","define(\"adept-iq/tests/factories/rider-phone-number\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('rider-phone-number', {\n    sequences: {\n      areaCodes: () => _faker.default.phone.phoneNumber('###'),\n      phoneNumbers: () => _faker.default.phone.phoneNumber('###-####'),\n      extensions: () => _faker.default.phone.phoneNumber('###')\n    },\n    default: {\n      areaCode: _emberDataFactoryGuy.default.generate('areaCodes'),\n      phoneNumber: _emberDataFactoryGuy.default.generate('phoneNumbers'),\n      extension: _emberDataFactoryGuy.default.generate('extensions'),\n      description: 'none',\n      mobileCarrier: 't-mobile',\n      useForSMSNotifications: false,\n      useForVoiceNotifications: false\n    }\n  });\n});","define(\"adept-iq/tests/factories/rider-place-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('rider-place-type', {\n    default: {},\n    traits: {\n      favorite: {\n        id: 'favorite'\n      },\n      primary: {\n        id: 'primary'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/rider-place\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('rider-place', {\n    default: {\n      name: 'Home'\n    }\n  });\n});","define(\"adept-iq/tests/factories/rider-travel-need\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('rider-travel-need', {\n    default: {\n      count: 2\n    }\n  });\n});","define(\"adept-iq/tests/factories/rider\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('rider', {\n    sequences: {\n      externalIds: num => num,\n      firstNames: () => _faker.default.name.firstName(),\n      lastNames: () => _faker.default.name.lastName(),\n      middleNames: () => _faker.default.name.firstName(),\n      dateOfBirths: () => _faker.default.date.past(30, date)\n    },\n    default: {\n      externalId: _emberDataFactoryGuy.default.generate('externalIds'),\n      // TRA-255 related; riderId can't be null because kafka takes the new rider before we update the actual riderId as the database Id\n      riderId: _emberDataFactoryGuy.default.generate('externalIds'),\n      firstName: _emberDataFactoryGuy.default.generate('firstNames'),\n      lastName: _emberDataFactoryGuy.default.generate('lastNames'),\n      middleName: _emberDataFactoryGuy.default.generate('middleNames'),\n      dateOfBirth: _emberDataFactoryGuy.default.generate('dateOfBirths'),\n      loadTime: 23,\n      unloadTime: 45,\n      notes: 'notes'\n    }\n  });\n});","define(\"adept-iq/tests/factories/route-break\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const dayMoment = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const eveningMoment = (0, _moment.default)().startOf('day').add(14, 'hours');\n  const nightMoment = (0, _moment.default)().startOf('day').add(18, 'hours');\n\n  _emberDataFactoryGuy.default.define('route-break', {\n    default: {\n      state: 'planned',\n      plannedRouteOrdinal: 0,\n      // change based on options hash\n      requestTime: dayMoment.toDate(),\n      promisedStart: dayMoment.toDate(),\n      estimatedStart: dayMoment.format('HH:mm'),\n      estimatedEnd: dayMoment.add(30, 'minutes').format('HH:mm'),\n      plannedDuration: 30,\n      notes: 'Some Route Break Notes'\n    },\n    traits: {\n      morning: {\n        promisedStart: dayMoment.toDate(),\n        estimatedStart: dayMoment.format('HH:mm'),\n        estimatedEnd: dayMoment.add(30, 'minutes').format('HH:mm')\n      },\n      evening: {\n        promisedStart: eveningMoment.toDate(),\n        requestTime: eveningMoment.toDate(),\n        estimatedStart: eveningMoment.format('HH:mm'),\n        estimatedEnd: eveningMoment.add(30, 'minutes').format('HH:mm')\n      },\n      night: {\n        promisedStart: nightMoment.toDate(),\n        requestTime: nightMoment.toDate(),\n        estimatedStart: nightMoment.format('HH:mm'),\n        estimatedEnd: nightMoment.add(30, 'minutes').format('HH:mm')\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/route-template\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('route-template', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      routeNames: num => num\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('routeNames'),\n      schedulingMode: 'automatic',\n      type: 'regular',\n      notes: 'some notes',\n      tripLimit: 9,\n      distanceLimit: 99,\n      active: true,\n      optimizationFlags: 0,\n      // bit field\n      affinities: '[1,2,3,4]' // string array ex \"[1,2,3,4]\"\n\n    },\n    traits: {}\n  });\n});","define(\"adept-iq/tests/factories/route-vehicle-driver\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const normalStart = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const evening = (0, _moment.default)().startOf('day').add(13, 'hours');\n  const night = (0, _moment.default)().startOf('day').add(18, 'hours');\n  const normalEnd = (0, _moment.default)().startOf('day').add(26, 'hours');\n\n  _emberDataFactoryGuy.default.define('route-vehicle-driver', {\n    default: {\n      startTime: normalStart.toDate(),\n      endTime: normalEnd.toDate()\n    },\n    traits: {\n      evening: {\n        startTime: evening.toDate()\n      },\n      night: {\n        startTime: night.toDate()\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/route\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const normalStart = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const evening = (0, _moment.default)().startOf('day').add(13, 'hours');\n  const night = (0, _moment.default)().startOf('day').add(18, 'hours');\n\n  _emberDataFactoryGuy.default.define('route', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      routeNames: num => num\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('routeNames'),\n      plannedStartTime: normalStart.toDate(),\n      plannedEndTime: night.toDate(),\n      timestamp: normalStart.toDate(),\n      status: 'normal',\n      otp: 'L',\n      type: 'route',\n      schedulingMode: 'automatic'\n    },\n    traits: {\n      evening: {\n        startTime: evening.toDate()\n      },\n      night: {\n        startTime: night.toDate()\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/schedule-configuration\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('schedule-configuration', {\n    default: {\n      displayName: 'Default configuration',\n      name: 'default',\n      description: 'This is a default scheduling configuration',\n      isReadOnly: true\n    }\n  });\n});","define(\"adept-iq/tests/factories/schedule\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const normalStart = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const normalEnd = (0, _moment.default)().startOf('day').add(18, 'hours');\n\n  _emberDataFactoryGuy.default.define('schedule', {\n    sequences: {\n      scheduleNames: num => `schedule ${num}`,\n      engineDatasetIds: num => num\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('scheduleNames'),\n      start: normalStart.toDate(),\n      end: normalEnd.toDate(),\n      engineDatasetId: _emberDataFactoryGuy.default.generate('engineDatasetIds'),\n      dispatchSchedule: _emberDataFactoryGuy.default.belongsTo('dispatch-schedule')\n    }\n  });\n});","define(\"adept-iq/tests/factories/segment-stop-phone-number\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('segment-stop-phone-number', {\n    sequences: {\n      areaCodes: () => _faker.default.phone.phoneNumber('###'),\n      phoneNumbers: () => _faker.default.phone.phoneNumber('###-####'),\n      extensions: () => _faker.default.phone.phoneNumber('###')\n    },\n    default: {\n      areaCode: _emberDataFactoryGuy.default.generate('areaCodes'),\n      phoneNumber: _emberDataFactoryGuy.default.generate('phoneNumbers'),\n      extension: _emberDataFactoryGuy.default.generate('extensions')\n    }\n  });\n});","define(\"adept-iq/tests/factories/segment-stop\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('segment-stop', {\n    polymorphic: false,\n    default: {\n      type: 'pick',\n      notes: 'stop notes',\n      plannedTime: (0, _moment.default)().startOf('day').add(8, 'hours').toDate(),\n      onboardCount: 2\n    },\n    traits: {\n      break: {\n        parentType: 'break',\n        stopType: 'break'\n      },\n      pick: {\n        type: 'pick'\n      },\n      drop: {\n        type: 'drop',\n        plannedTime: (0, _moment.default)().startOf('day').add(16, 'hours').toDate()\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/segment\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('segment', {\n    default: {\n      promiseTime: (0, _moment.default)().startOf('day').add(1, 'day').add(8, 'hours').toDate(),\n      anchor: 'pick',\n      fare: 2,\n      travelMode: 'bus',\n      segmentType: 1,\n      noSharing: 0,\n      legOrdinal: 1\n    }\n  });\n});","define(\"adept-iq/tests/factories/service-window\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const serviceWindowTypes = [{\n    name: 'Floating Break',\n    serviceType: '9',\n    searchWindowStart: 30,\n    searchWindowEnd: 30,\n    promiseWindowStart: 30,\n    promiseWindowEnd: 30,\n    dropWindowStart: 60,\n    dropWindowEnd: 60,\n    scheduleConfigurationName: 'default'\n  }, {\n    name: 'Fixed Break',\n    serviceType: '8',\n    searchWindowStart: 30,\n    searchWindowEnd: 30,\n    promiseWindowStart: 30,\n    promiseWindowEnd: 30,\n    dropWindowStart: 60,\n    dropWindowEnd: 60,\n    scheduleConfigurationName: 'default'\n  }, {\n    name: 'Appointment Anchored Trips',\n    serviceType: '2',\n    searchWindowStart: 30,\n    searchWindowEnd: 30,\n    promiseWindowStart: 30,\n    promiseWindowEnd: 30,\n    dropWindowStart: 20,\n    dropWindowEnd: -5,\n    scheduleConfigurationName: 'default'\n  }];\n\n  _emberDataFactoryGuy.default.define('service-window', {\n    default: {},\n    traits: {\n      float: f => {\n        f.name = serviceWindowTypes[0].name;\n        f.serviceType = serviceWindowTypes[0].serviceType;\n        f.searchWindowStart = serviceWindowTypes[0].searchWindowStart;\n        f.searchWindowEnd = serviceWindowTypes[0].searchWindowEnd;\n        f.promiseWindowStart = serviceWindowTypes[0].promiseWindowStart;\n        f.promiseWindowEnd = serviceWindowTypes[0].promiseWindowEnd;\n        f.dropWindowStart = serviceWindowTypes[0].dropWindowStart;\n        f.dropWindowEnd = serviceWindowTypes[0].dropWindowEnd;\n      },\n      fixed: f => {\n        f.name = serviceWindowTypes[1].name;\n        f.serviceType = serviceWindowTypes[1].serviceType;\n        f.searchWindowStart = serviceWindowTypes[1].searchWindowStart;\n        f.searchWindowEnd = serviceWindowTypes[1].searchWindowEnd;\n        f.promiseWindowStart = serviceWindowTypes[1].promiseWindowStart;\n        f.promiseWindowEnd = serviceWindowTypes[1].promiseWindowEnd;\n        f.dropWindowStart = serviceWindowTypes[1].dropWindowStart;\n        f.dropWindowEnd = serviceWindowTypes[1].dropWindowEnd;\n      },\n      appointment: f => {\n        f.name = serviceWindowTypes[2].name;\n        f.serviceType = serviceWindowTypes[2].serviceType;\n        f.searchWindowStart = serviceWindowTypes[2].searchWindowStart;\n        f.searchWindowEnd = serviceWindowTypes[2].searchWindowEnd;\n        f.promiseWindowStart = serviceWindowTypes[2].promiseWindowStart;\n        f.promiseWindowEnd = serviceWindowTypes[2].promiseWindowEnd;\n        f.dropWindowStart = serviceWindowTypes[2].dropWindowStart;\n        f.dropWindowEnd = serviceWindowTypes[2].dropWindowEnd;\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/shift-break\", [\"ember-data-factory-guy\", \"faker\", \"moment\"], function (_emberDataFactoryGuy, _faker, _moment) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('shift-break', {\n    sequences: {\n      randomBoolean: () => _faker.default.random.boolean(),\n      randomStartTime: () => _faker.default.date.past(1, date),\n      randomEndTime: () => _faker.default.date.future(3, date),\n      randomShiftStart: () => (0, _moment.default)().startOf('day').add(6, 'hours').format('HH:mm A'),\n      randomShiftEnd: () => (0, _moment.default)().endOf('day').subtract(6, 'hours').format('HH:mm A')\n    },\n    default: {\n      state: 'planned',\n      promisedStart: _emberDataFactoryGuy.default.generate('randomStartTime'),\n      plannedDuration: 15,\n      notes: 'Shift break notes',\n      startTime: _emberDataFactoryGuy.default.generate('randomStartTime'),\n      endTime: _emberDataFactoryGuy.default.generate('randomEndTime'),\n      estimatedStart: _emberDataFactoryGuy.default.generate('randomShiftStart'),\n      estimatedEnd: _emberDataFactoryGuy.default.generate('randomShiftEnd'),\n      sunday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      monday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      tuesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      wednesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      thursday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      friday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      saturday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      promisedEnd: _emberDataFactoryGuy.default.generate('randomEndTime')\n    }\n  });\n});","define(\"adept-iq/tests/factories/sso-permission\", [\"ember-data-factory-guy\", \"adept-iq/config/mapped-permIds\"], function (_emberDataFactoryGuy, _mappedPermIds) {\n  \"use strict\";\n\n  const Categories = ['Route', 'Trip', 'Workspace', 'Stop', 'Messages', 'Vehicle'];\n  const operations = Object.keys(_mappedPermIds.default); // console.log(operationHash);\n\n  _emberDataFactoryGuy.default.define('sso-permission', {\n    sequences: {\n      categories: num => Categories[num % Categories.length],\n      description: num => `${operations[num % operations.length]} ${Categories[num % Categories.length]}`\n    },\n    default: {\n      category: _emberDataFactoryGuy.default.generate('categories'),\n      description: _emberDataFactoryGuy.default.generate('description')\n    }\n  });\n});","define(\"adept-iq/tests/factories/sso-role\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('sso-role', {\n    sequences: {\n      ids: num => num\n    },\n    default: {\n      roleName: 'user',\n      name: 'user',\n      status: 'active',\n      id: _emberDataFactoryGuy.default.generate('ids')\n    },\n    traits: {\n      admin: {\n        roleName: 'admin',\n        name: 'Admin',\n        displayName: 'Admin'\n      },\n      user: {\n        roleName: 'user',\n        name: 'User',\n        displayName: 'User'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/sso-user\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('sso-user', {\n    default: {\n      email: 'some-random@email.com',\n      userId: 'abc',\n      firstName: 'some',\n      lastName: 'random',\n      status: 'active',\n      lastLoginAt: new Date(),\n      roleNames: ['admin']\n    },\n    traits: {\n      otherUser: {\n        email: 'other-random@email.com',\n        userId: 'def',\n        firstName: 'other',\n        lastName: 'random',\n        status: 'active',\n        lastLoginAt: new Date(),\n        roleNames: ['admin']\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/stop-point\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('stop-point', {\n    default: {\n      stopType: 'pick',\n      parentType: 'trip',\n      waypointType: 'fixed',\n      waypointSource: 'address',\n      waypoint: '1',\n      // id for segment stop's place or vehicle id dependent on waypoint type\n      onBoardCount: 2,\n      routeOrdinal: 1,\n      clusterOrdinal: 2,\n      // use the options hash to create correct ordinals\n      lockedForOptimization: false\n    },\n    traits: {\n      Break: {\n        parentType: 'break',\n        stopType: 'break',\n        onBoardCount: 0\n      },\n      OnBreak: {\n        stopType: 'break'\n      },\n      pick: {\n        stopType: 'pick'\n      },\n      drop: {\n        stopType: 'drop'\n      },\n      pullinGarage: {\n        stopType: 'pullinGarage',\n        status: 'pending',\n        parentType: 'pullinGarage'\n      },\n      pulloutGarage: {\n        stopType: 'pulloutGarage',\n        status: 'performed',\n        parentType: 'pulloutGarage'\n      },\n      noshow: {\n        status: 'No Show'\n      },\n      noshowdrop: {\n        status: 'No Show'\n      },\n      pickArrive: {\n        stopType: 'pick',\n        status: 'Arrive'\n      },\n      dropArrive: {\n        stopType: 'drop',\n        status: 'Arrive'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/subscription-exclusion\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('subscription-exclusion', {\n    sequences: {\n      randomStartDate: () => (0, _moment.default)().startOf('day').add(7, 'hours').toDate(),\n      randomEndDate: () => (0, _moment.default)().startOf('day').add(16, 'hours').toDate()\n    },\n    default: {\n      startDate: _emberDataFactoryGuy.default.generate('randomStartDate'),\n      endDate: _emberDataFactoryGuy.default.generate('randomEndDate')\n    }\n  });\n});","define(\"adept-iq/tests/factories/subscription-group\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('subscription-group', {\n    sequences: {\n      groupIds: num => num\n    },\n    default: {\n      groupId: _emberDataFactoryGuy.default.generate('groupIds'),\n      description: 'It\\'s a group of Arthur Rojas ahhhhh!!!!!!!'\n    }\n  });\n});","define(\"adept-iq/tests/factories/subscription-recurrence-pattern\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('subscription-recurrence-pattern', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      randomBoolean: () => _faker.default.random.boolean()\n    },\n    default: {\n      type: 'daily',\n      separationCount: 1,\n      sunday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      monday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      tuesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      wednesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      thursday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      friday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      saturday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      dayOfMonth: null,\n      weekOfMonth: null,\n      monthOfYear: null,\n      everyweekday: null,\n      pattern: null,\n      recurring: true\n    }\n  });\n});","define(\"adept-iq/tests/factories/subscription-travel-need\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('subscription-travel-need', {\n    default: {\n      count: 1\n    }\n  });\n});","define(\"adept-iq/tests/factories/subscription\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const dayMoment = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const eveningMoment = (0, _moment.default)().startOf('day').add(14, 'hours');\n  const nightMoment = (0, _moment.default)().startOf('day').add(18, 'hours');\n  const purposeArray = ['work', 'medical', 'school'];\n\n  _emberDataFactoryGuy.default.define('subscription', {\n    sequences: {\n      purposes: num => purposeArray[num % purposeArray.length]\n    },\n    default: {\n      requestTime: dayMoment.toDate(),\n      anchor: 'pick',\n      purpose: _emberDataFactoryGuy.default.generate('purposes'),\n      fare: 2,\n      originNotes: 'Some origin Notes',\n      destinationNotes: 'Some Destination notes',\n      startDate: dayMoment.toDate(),\n      endDate: nightMoment.toDate(),\n      maximumOccurrences: 0,\n      serviceWindowName: 'default',\n      remainingOccurrences: 0\n    },\n    traits: {\n      morning: {\n        requestTime: dayMoment.toDate()\n      },\n      evening: {\n        requestTime: eveningMoment.toDate()\n      },\n      night: {\n        requestTime: nightMoment.toDate()\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/travel-need-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  /* eslint-disable no-use-before-define */\n  _emberDataFactoryGuy.default.define('travel-need-type', {\n    polymorphic: false,\n    // manually flag this model as NOT polymorphic\n    sequences: {\n      ids: num => travelNeedTypes[num % travelNeedTypes.length].id,\n      Names: num => travelNeedTypes[num % travelNeedTypes.length].name,\n      vehicleCapacityCounts: num => travelNeedTypes[num % travelNeedTypes.length].vehicleCapacityCount,\n      vehicleCapacityTypes: num => travelNeedTypes[num % travelNeedTypes.length].vehicleCapacityType,\n      loadTimes: num => travelNeedTypes[num % travelNeedTypes.length].loadTime,\n      unloadTimes: num => travelNeedTypes[num % travelNeedTypes.length].unloadTime,\n      displayNames: num => travelNeedTypes[num % travelNeedTypes.length].displayName,\n      displayOrders: num => travelNeedTypes[num % travelNeedTypes.length].displayOrder,\n      descriptions: num => travelNeedTypes[num % travelNeedTypes.length].description\n    },\n    default: {\n      id: _emberDataFactoryGuy.default.generate('ids'),\n      name: _emberDataFactoryGuy.default.generate('Names'),\n      vehicleCapacityCount: _emberDataFactoryGuy.default.generate('vehicleCapacityCounts'),\n      vehicleCapacityType: _emberDataFactoryGuy.default.generate('vehicleCapacityTypes'),\n      loadTime: _emberDataFactoryGuy.default.generate('loadTimes'),\n      unloadTime: _emberDataFactoryGuy.default.generate('unloadTimes'),\n      displayName: _emberDataFactoryGuy.default.generate('displayNames'),\n      displayOrder: _emberDataFactoryGuy.default.generate('displayOrders'),\n      description: _emberDataFactoryGuy.default.generate('descriptions')\n    },\n    traits: {\n      ambulatory: {\n        name: 'ambulatory',\n        vehicleCapacityType: 'ambulatory',\n        vehicleCapacityCount: 1,\n        loadTime: 240,\n        unloadTime: 60,\n        displayName: 'Ambulatory',\n        displayOrder: 1,\n        description: 'Description for Ambulatory'\n      }\n    }\n  });\n\n  const travelNeedTypes = [{\n    id: 'ambulatory',\n    name: 'ambulatory',\n    vehicleCapacityType: 'ambulatory',\n    vehicleCapacityCount: 1,\n    loadTime: 240,\n    unloadTime: 60,\n    displayName: 'Ambulatory',\n    displayOrder: 1,\n    description: 'Description for Ambulatory'\n  }, {\n    id: 'wideAmbulatory',\n    name: 'wideAmbulatory',\n    vehicleCapacityType: 'wideAmbulatory',\n    vehicleCapacityCount: 1,\n    loadTime: 420,\n    unloadTime: 240,\n    displayName: 'Wide Ambulatory',\n    displayOrder: 2,\n    description: 'Description for Wide Ambulatory'\n  }, {\n    id: 'wheelchair',\n    name: 'wheelchair',\n    vehicleCapacityType: 'wheelchair',\n    vehicleCapacityCount: 1,\n    loadTime: 420,\n    unloadTime: 240,\n    displayName: 'Wheelchair',\n    displayOrder: 3,\n    description: 'Description for Wheelchair'\n  }, {\n    id: 'wideWheelchair',\n    name: 'wideWheelchair',\n    vehicleCapacityType: 'wheelchair',\n    vehicleCapacityCount: 2,\n    loadTime: 420,\n    unloadTime: 240,\n    displayName: 'Wide Wheelchair',\n    displayOrder: 4,\n    description: 'Description for Wide Wheelchair'\n  }, {\n    id: 'serviceAnimal',\n    name: 'serviceAnimal',\n    vehicleCapacityType: 'serviceAnimal',\n    vehicleCapacityCount: 1,\n    loadTime: 60,\n    unloadTime: 60,\n    displayName: 'Service Animal',\n    displayOrder: 5,\n    description: 'Description for Service Animal'\n  }];\n});","define(\"adept-iq/tests/factories/trim-slack-contract-management\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const minRouteLength = '';\n  const minRoute = '930';\n  const characterMinRoute = 'as:as';\n\n  _emberDataFactoryGuy.default.define('trim-slack-contract-management', {\n    default: {\n      startRouteName: '57000',\n      endRouteName: '57004',\n      trimSlack: true,\n      adjustMins: '10',\n      minRouteLength: 140,\n      pullOutMinCap: false,\n      pullOutMaxCap: '1',\n      pullInMinCap: '1',\n      pullInMaxCap: '1',\n      providerName: 'MVT'\n    },\n    traits: {\n      minRouteLength: {\n        minRouteLength\n      },\n      minRoute: {\n        minRoute\n      },\n      characterMinRoute: {\n        characterMinRoute\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/trip-route-assignment\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const dayMoment = (0, _moment.default)().startOf('day').add(6, 'hours');\n\n  _emberDataFactoryGuy.default.define('trip-route-assignment', {\n    sequences: {\n      ordinals: num => `${num}`\n    },\n    default: {\n      ordinal: _emberDataFactoryGuy.default.generate('ordinals'),\n      context: 'dispatching',\n      user: '',\n      timestamp: dayMoment.toDate()\n    }\n  });\n});","define(\"adept-iq/tests/factories/trip-stop\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const dayMoment = (0, _moment.default)().startOf('day').add(6, 'hours');\n\n  _emberDataFactoryGuy.default.define('trip-stop', {\n    default: {\n      plannedDistanceToNext: 5,\n      // in miles\n      plannedTravelTimeToNext: 5,\n      // in minutes\n      plannedEta: dayMoment.toDate(),\n      plannedRouteOrdinal: 2\n    }\n  });\n});","define(\"adept-iq/tests/factories/trip\", [\"ember-data-factory-guy\", \"moment\"], function (_emberDataFactoryGuy, _moment) {\n  \"use strict\";\n\n  const normalStart = (0, _moment.default)().startOf('day').add(6, 'hours');\n  const evening = (0, _moment.default)().startOf('day').add(13, 'hours');\n  const night = (0, _moment.default)().startOf('day').add(18, 'hours');\n  const tripStatus = ['waitlisted'];\n\n  _emberDataFactoryGuy.default.define('trip', {\n    sequences: {\n      tripIds: num => `${num}`,\n      tripStatuses: num => tripStatus[num % tripStatus.length]\n    },\n    default: {\n      tripId: _emberDataFactoryGuy.default.generate('tripIds'),\n      status: _emberDataFactoryGuy.default.generate('tripStatuses'),\n      promiseTime: normalStart.toDate()\n    },\n    traits: {\n      morning: {\n        promiseTime: normalStart.toDate()\n      },\n      evening: {\n        promiseTime: evening.toDate()\n      },\n      night: {\n        promiseTime: night.toDate()\n      },\n      noshowRequest: {\n        status: 'noshowRequest'\n      }\n    }\n  });\n});","define(\"adept-iq/tests/factories/vehicle-availability\", [\"ember-data-factory-guy\", \"faker\", \"moment\"], function (_emberDataFactoryGuy, _faker, _moment) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('vehicle-availability', {\n    sequences: {\n      randomBoolean: () => _faker.default.random.boolean(),\n      randomStartTime: () => _faker.default.date.past(1, date),\n      randomEndTime: () => _faker.default.date.future(3, date),\n      randomShiftStart: () => (0, _moment.default)().startOf('day').add(6, 'hours').format('HH:mm'),\n      randomShiftEnd: () => (0, _moment.default)().endOf('day').subtract(6, 'hours').format('HH:mm')\n    },\n    default: {\n      startTime: _emberDataFactoryGuy.default.generate('randomStartTime'),\n      endTime: _emberDataFactoryGuy.default.generate('randomEndTime'),\n      shiftStart: _emberDataFactoryGuy.default.generate('randomShiftStart'),\n      shiftEnd: _emberDataFactoryGuy.default.generate('randomShiftEnd'),\n      sunday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      monday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      tuesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      wednesday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      thursday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      friday: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      saturday: _emberDataFactoryGuy.default.generate('randomBoolean')\n    }\n  });\n});","define(\"adept-iq/tests/factories/vehicle-capacity-config\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const vehicleCounts = [100, 200, 40, 15, 5];\n  const vehicleCategories = ['Revenge', 'DeadReckoning', 'Bus', 'Taxi', 'Car'];\n\n  _emberDataFactoryGuy.default.define('vehicle-capacity-config', {\n    sequences: {\n      vehicleTypeNames: num => vehicleCategories[num % vehicleCategories.length],\n      counts: num => vehicleCounts[num % vehicleCounts.length]\n    },\n    default: {\n      count: _emberDataFactoryGuy.default.generate('counts'),\n      name: _emberDataFactoryGuy.default.generate('vehicleTypeNames'),\n      group: _emberDataFactoryGuy.default.generate(i => i)\n    }\n  });\n});","define(\"adept-iq/tests/factories/vehicle-capacity-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  _emberDataFactoryGuy.default.define('vehicle-capacity-type', {\n    default: {\n      name: 'ambulatory',\n      engineId: '1',\n      engineName: 'some engine name',\n      constrainedByLIFO: false,\n      dwellFactor: 5,\n      description: 'some description'\n    }\n  });\n});","define(\"adept-iq/tests/factories/vehicle-type\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const vehicleCategories = ['Revenge', 'DeadReckoning', 'Bus', 'Taxi', 'Car'];\n\n  _emberDataFactoryGuy.default.define('vehicle-type', {\n    sequences: {\n      vehicleTypes: num => vehicleCategories[num % vehicleCategories.length]\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('vehicleTypes')\n    }\n  });\n});","define(\"adept-iq/tests/factories/vehicle\", [\"ember-data-factory-guy\", \"faker\"], function (_emberDataFactoryGuy, _faker) {\n  \"use strict\";\n\n  const date = new Date();\n\n  _emberDataFactoryGuy.default.define('vehicle', {\n    sequences: {\n      randomMileage: () => _faker.default.random.number({\n        min: 0,\n        max: 94830\n      }),\n      randomBoolean: () => _faker.default.random.boolean(),\n      nums: num => `vehicle ${num}`\n    },\n    default: {\n      name: _emberDataFactoryGuy.default.generate('nums'),\n      mobileId: _emberDataFactoryGuy.default.generate(i => `${i}`),\n      xmin: 'xmin',\n      serviceStatus: 'some service status',\n      lastGpsPing: date,\n      mileage: _emberDataFactoryGuy.default.generate('randomMileage'),\n      // added for vehicleWidget streaming topic\n      active: _emberDataFactoryGuy.default.generate('randomBoolean'),\n      status: 'some status',\n      // routeNames: attr('object'),\n      lat: _faker.default.address.latitude(),\n      lng: _faker.default.address.longitude()\n    }\n  });\n});","define(\"adept-iq/tests/factories/zone\", [\"ember-data-factory-guy\"], function (_emberDataFactoryGuy) {\n  \"use strict\";\n\n  const names = ['Zone 1', 'Zone 2', 'Zone 3', 'Zone 4', 'Zone 5', 'Zone 6', 'Zone 7', 'Zone 8'];\n  const types = [{\n    type: 'Burrough'\n  }, {\n    type: 'AAR'\n  }, {\n    type: 'User'\n  }]; //const points = [{\"1\":{\"lat\":\"49.27346100\",\"lng\":\"-123.18567000\"},\"2\":{\"lat\":\"49.28296200\",\"lng\":\"-123.22336900\"},\"3\":{\"lat\":\"49.27876100\",\"lng\":\"-123.25342800\"},\"4\":{\"lat\":\"49.26502700\",\"lng\":\"-123.27129500\"},\"5\":{\"lat\":\"49.23626600\",\"lng\":\"-123.23204100\"},\"6\":{\"lat\":\"49.23028700\",\"lng\":\"-123.22474400\"},\"7\":{\"lat\":\"49.22398600\",\"lng\":\"-123.21077800\"},\"8\":{\"lat\":\"49.21542200\",\"lng\":\"-123.17608500\"},\"9\":{\"lat\":\"49.21507100\",\"lng\":\"-123.16768200\"},\"10\":{\"lat\":\"49.21174300\",\"lng\":\"-123.15802100\"},\"11\":{\"lat\":\"49.20491600\",\"lng\":\"-123.14964600\"},\"12\":{\"lat\":\"49.20305700\",\"lng\":\"-123.14750600\"},\"13\":{\"lat\":\"49.20147700\",\"lng\":\"-123.14348100\"},\"14\":{\"lat\":\"49.19910200\",\"lng\":\"-123.13466000\"},\"15\":{\"lat\":\"49.20104100\",\"lng\":\"-123.12323900\"},\"16\":{\"lat\":\"49.20184900\",\"lng\":\"-123.11654400\"},\"17\":{\"lat\":\"49.20136400\",\"lng\":\"-123.10938400\"},\"18\":{\"lat\":\"49.20007200\",\"lng\":\"-123.10620000\"},\"19\":{\"lat\":\"49.19894100\",\"lng\":\"-123.08891700\"},\"20\":{\"lat\":\"49.20136400\",\"lng\":\"-123.08564400\"},\"21\":{\"lat\":\"49.20475800\",\"lng\":\"-123.06998200\"},\"22\":{\"lat\":\"49.20524200\",\"lng\":\"-123.06502400\"},\"23\":{\"lat\":\"49.20459600\",\"lng\":\"-123.06405000\"},\"24\":{\"lat\":\"49.20411100\",\"lng\":\"-123.04774000\"},\"25\":{\"lat\":\"49.20378800\",\"lng\":\"-123.04255500\"},\"26\":{\"lat\":\"49.20298000\",\"lng\":\"-123.03762900\"},\"27\":{\"lat\":\"49.20055700\",\"lng\":\"-123.02334800\"},\"28\":{\"lat\":\"49.20249600\",\"lng\":\"-123.02329900\"},\"29\":{\"lat\":\"49.20685800\",\"lng\":\"-123.02343500\"},\"30\":{\"lat\":\"49.29362600\",\"lng\":\"-123.02345300\"},\"31\":{\"lat\":\"49.29610500\",\"lng\":\"-123.05051000\"},\"32\":{\"lat\":\"49.29210100\",\"lng\":\"-123.07688100\"},\"33\":{\"lat\":\"49.30439200\",\"lng\":\"-123.11908900\"},\"34\":{\"lat\":\"49.31936100\",\"lng\":\"-123.15375800\"},\"35\":{\"lat\":\"49.30804400\",\"lng\":\"-123.16059000\"},\"36\":{\"lat\":\"49.29109100\",\"lng\":\"-123.15839400\"},\"37\":{\"lat\":\"49.27545800\",\"lng\":\"-123.15729600\"}},{\"1\":{\"lat\":\"49.19570900\",\"lng\":\"-122.86769700\"},\"2\":{\"lat\":\"49.19167000\",\"lng\":\"-122.86781200\"},\"3\":{\"lat\":\"49.18973100\",\"lng\":\"-122.86762100\"},\"4\":{\"lat\":\"49.17696600\",\"lng\":\"-122.86798500\"},\"5\":{\"lat\":\"49.16258600\",\"lng\":\"-122.86814800\"},\"6\":{\"lat\":\"49.16258600\",\"lng\":\"-122.85974700\"},\"7\":{\"lat\":\"49.16258600\",\"lng\":\"-122.85678200\"},\"8\":{\"lat\":\"49.16274700\",\"lng\":\"-122.85307100\"},\"9\":{\"lat\":\"49.16274700\",\"lng\":\"-122.84565800\"},\"10\":{\"lat\":\"49.19150800\",\"lng\":\"-122.84531800\"},\"11\":{\"lat\":\"49.19199300\",\"lng\":\"-122.84530400\"},\"12\":{\"lat\":\"49.19409300\",\"lng\":\"-122.84524300\"},\"13\":{\"lat\":\"49.19490100\",\"lng\":\"-122.84522000\"},\"14\":{\"lat\":\"49.19619400\",\"lng\":\"-122.84518200\"},\"15\":{\"lat\":\"49.19700200\",\"lng\":\"-122.84515900\"},\"16\":{\"lat\":\"49.19764800\",\"lng\":\"-122.84514000\"},\"17\":{\"lat\":\"49.19877900\",\"lng\":\"-122.84584900\"},\"18\":{\"lat\":\"49.19894100\",\"lng\":\"-122.86463700\"},\"19\":{\"lat\":\"49.19926400\",\"lng\":\"-122.86759600\"}},{\"1\":{\"lat\":\"48.99389500\",\"lng\":\"-123.28128100\"},\"2\":{\"lat\":\"48.98676000\",\"lng\":\"-121.58081200\"},\"3\":{\"lat\":\"49.00480900\",\"lng\":\"-120.73298900\"},\"4\":{\"lat\":\"48.03535500\",\"lng\":\"-120.73298900\"},\"5\":{\"lat\":\"48.03535500\",\"lng\":\"-124.89281100\"},\"6\":{\"lat\":\"50.38344500\",\"lng\":\"-124.89281100\"},\"7\":{\"lat\":\"50.36596000\",\"lng\":\"-120.73298900\"},\"8\":{\"lat\":\"49.83357300\",\"lng\":\"-120.73298900\"},\"9\":{\"lat\":\"49.89486100\",\"lng\":\"-122.19594300\"},\"10\":{\"lat\":\"49.43339200\",\"lng\":\"-122.21761000\"},\"11\":{\"lat\":\"49.39540500\",\"lng\":\"-122.21114300\"},\"12\":{\"lat\":\"49.37289400\",\"lng\":\"-122.31798900\"},\"13\":{\"lat\":\"49.36966800\",\"lng\":\"-122.58525900\"},\"14\":{\"lat\":\"49.40196500\",\"lng\":\"-122.56125000\"},\"15\":{\"lat\":\"49.40294400\",\"lng\":\"-122.76309300\"},\"16\":{\"lat\":\"49.38964800\",\"lng\":\"-122.88542800\"},\"17\":{\"lat\":\"49.37481000\",\"lng\":\"-122.93175500\"},\"18\":{\"lat\":\"49.37185300\",\"lng\":\"-123.02071800\"},\"19\":{\"lat\":\"49.37840700\",\"lng\":\"-123.04600800\"},\"20\":{\"lat\":\"49.40220600\",\"lng\":\"-123.07510300\"},\"21\":{\"lat\":\"49.38109200\",\"lng\":\"-123.11295400\"},\"22\":{\"lat\":\"49.39730300\",\"lng\":\"-123.26210700\"},\"23\":{\"lat\":\"49.39291700\",\"lng\":\"-123.28459200\"},\"24\":{\"lat\":\"49.38763800\",\"lng\":\"-123.31941500\"},\"25\":{\"lat\":\"49.31642200\",\"lng\":\"-123.27978600\"},\"26\":{\"lat\":\"49.26372700\",\"lng\":\"-123.28495800\"},\"27\":{\"lat\":\"49.22751100\",\"lng\":\"-123.25053200\"},\"28\":{\"lat\":\"49.16976400\",\"lng\":\"-123.21336400\"},\"29\":{\"lat\":\"49.13036800\",\"lng\":\"-123.21168100\"}},{\"1\":{\"lat\":\"49.43339200\",\"lng\":\"-122.21761000\"},\"2\":{\"lat\":\"49.38701900\",\"lng\":\"-121.81222600\"},\"3\":{\"lat\":\"49.31786300\",\"lng\":\"-121.79415300\"},\"4\":{\"lat\":\"49.30025100\",\"lng\":\"-121.83766300\"},\"5\":{\"lat\":\"49.25000000\",\"lng\":\"-121.94015800\"},\"6\":{\"lat\":\"49.23578100\",\"lng\":\"-121.96780600\"},\"7\":{\"lat\":\"49.22350100\",\"lng\":\"-121.95625700\"},\"8\":{\"lat\":\"49.19247800\",\"lng\":\"-121.98141900\"},\"9\":{\"lat\":\"49.16775600\",\"lng\":\"-122.03276700\"},\"10\":{\"lat\":\"49.14658900\",\"lng\":\"-122.07642700\"},\"11\":{\"lat\":\"49.00229900\",\"lng\":\"-122.08626800\"},\"12\":{\"lat\":\"48.99826000\",\"lng\":\"-121.58329900\"},\"13\":{\"lat\":\"49.00480900\",\"lng\":\"-120.73298900\"},\"14\":{\"lat\":\"49.83357300\",\"lng\":\"-120.73298900\"},\"15\":{\"lat\":\"49.89486100\",\"lng\":\"-122.19594300\"}}]\n\n  /*eslint-disable */\n\n  const points = [[{\n    \"lat\": \"40.65909\",\n    \"lng\": \"-73.96696\"\n  }, {\n    \"lat\": \"40.66677\",\n    \"lng\": \"-73.96619\"\n  }, {\n    \"lat\": \"40.67289\",\n    \"lng\": \"-73.95993\"\n  }, {\n    \"lat\": \"40.66809\",\n    \"lng\": \"-73.9503\"\n  }], [{\n    \"lat\": \"49.43339200\",\n    \"lng\": \"-122.21761000\"\n  }, {\n    \"lat\": \"49.38701900\",\n    \"lng\": \"-121.81222600\"\n  }, {\n    \"lat\": \"49.31786300\",\n    \"lng\": \"-121.79415300\"\n  }, {\n    \"lat\": \"49.30025100\",\n    \"lng\": \"-121.83766300\"\n  }, {\n    \"lat\": \"49.25000000\",\n    \"lng\": \"-121.94015800\"\n  }, {\n    \"lat\": \"49.23578100\",\n    \"lng\": \"-121.96780600\"\n  }, {\n    \"lat\": \"49.22350100\",\n    \"lng\": \"-121.95625700\"\n  }, {\n    \"lat\": \"49.19247800\",\n    \"lng\": \"-121.98141900\"\n  }, {\n    \"lat\": \"49.16775600\",\n    \"lng\": \"-122.03276700\"\n  }, {\n    \"lat\": \"49.14658900\",\n    \"lng\": \"-122.07642700\"\n  }, {\n    \"lat\": \"49.00229900\",\n    \"lng\": \"-122.08626800\"\n  }, {\n    \"lat\": \"48.99826000\",\n    \"lng\": \"-121.58329900\"\n  }, {\n    \"lat\": \"49.00480900\",\n    \"lng\": \"-120.73298900\"\n  }, {\n    \"lat\": \"49.83357300\",\n    \"lng\": \"-120.73298900\"\n  }, {\n    \"lat\": \"49.89486100\",\n    \"lng\": \"-122.19594300\"\n  }], [{\n    \"lat\": \"48.99389500\",\n    \"lng\": \"-123.28128100\"\n  }, {\n    \"lat\": \"48.98676000\",\n    \"lng\": \"-121.58081200\"\n  }, {\n    \"lat\": \"49.00480900\",\n    \"lng\": \"-120.73298900\"\n  }, {\n    \"lat\": \"48.03535500\",\n    \"lng\": \"-120.73298900\"\n  }, {\n    \"lat\": \"48.03535500\",\n    \"lng\": \"-124.89281100\"\n  }, {\n    \"lat\": \"50.38344500\",\n    \"lng\": \"-124.89281100\"\n  }, {\n    \"lat\": \"50.36596000\",\n    \"lng\": \"-120.73298900\"\n  }, {\n    \"lat\": \"49.83357300\",\n    \"lng\": \"-120.73298900\"\n  }, {\n    \"lat\": \"49.89486100\",\n    \"lng\": \"-122.19594300\"\n  }, {\n    \"lat\": \"49.43339200\",\n    \"lng\": \"-122.21761000\"\n  }, {\n    \"lat\": \"49.39540500\",\n    \"lng\": \"-122.21114300\"\n  }, {\n    \"lat\": \"49.37289400\",\n    \"lng\": \"-122.31798900\"\n  }, {\n    \"lat\": \"49.36966800\",\n    \"lng\": \"-122.58525900\"\n  }, {\n    \"lat\": \"49.40196500\",\n    \"lng\": \"-122.56125000\"\n  }, {\n    \"lat\": \"49.40294400\",\n    \"lng\": \"-122.76309300\"\n  }, {\n    \"lat\": \"49.38964800\",\n    \"lng\": \"-122.88542800\"\n  }, {\n    \"lat\": \"49.37481000\",\n    \"lng\": \"-122.93175500\"\n  }, {\n    \"lat\": \"49.37185300\",\n    \"lng\": \"-123.02071800\"\n  }, {\n    \"lat\": \"49.37840700\",\n    \"lng\": \"-123.04600800\"\n  }, {\n    \"lat\": \"49.40220600\",\n    \"lng\": \"-123.07510300\"\n  }, {\n    \"lat\": \"49.38109200\",\n    \"lng\": \"-123.11295400\"\n  }, {\n    \"lat\": \"49.39730300\",\n    \"lng\": \"-123.26210700\"\n  }, {\n    \"lat\": \"49.39291700\",\n    \"lng\": \"-123.28459200\"\n  }, {\n    \"lat\": \"49.38763800\",\n    \"lng\": \"-123.31941500\"\n  }, {\n    \"lat\": \"49.31642200\",\n    \"lng\": \"-123.27978600\"\n  }, {\n    \"lat\": \"49.26372700\",\n    \"lng\": \"-123.28495800\"\n  }, {\n    \"lat\": \"49.22751100\",\n    \"lng\": \"-123.25053200\"\n  }, {\n    \"lat\": \"49.16976400\",\n    \"lng\": \"-123.21336400\"\n  }, {\n    \"lat\": \"49.13036800\",\n    \"lng\": \"-123.21168100\"\n  }]];\n  /*eslint-disable */\n\n  _emberDataFactoryGuy.default.define('zone', {\n    sequences: {\n      zoneNames: num => names[num % names.length],\n      zoneTypes: num => types[num % types.length].type,\n      pointses: num => points[num % points.length]\n    },\n    polymorphic: false,\n    default: {\n      name: _emberDataFactoryGuy.default.generate('zoneNames'),\n      type: _emberDataFactoryGuy.default.generate('zoneTypes'),\n      points: _emberDataFactoryGuy.default.generate('pointses')\n    }\n  });\n});","define(\"adept-iq/topic-transforms/avlm-alert\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload, ENV) {\n    // remove for now. don't need it.\n    delete payload.data.relationships.source;\n    delete payload.data.attributes.scheduleId;\n    payload.included = payload.included.filter(p => p.type !== 'avlm-alert-source');\n    payload.data.attributes.isNewEmergencyReceived = true; // adding new field for default sorting by priority column\n\n    if (payload.data.attributes.priority) {\n      if (payload.data.attributes.priority.toLowerCase() === 'critical') {\n        payload.data.attributes.priorityId = 'A';\n      } else if (payload.data.attributes.priority.toLowerCase() === 'high') {\n        payload.data.attributes.priorityId = 'B';\n      } else if (payload.data.attributes.priority.toLowerCase() === 'medium') {\n        payload.data.attributes.priorityId = 'C';\n      } else if (payload.data.attributes.priority.toLowerCase() === 'low') {\n        payload.data.attributes.priorityId = 'D';\n      }\n    }\n\n    if (ENV.APP.avlmLite && !payload.data.relationships.hasOwnProperty('route')) {\n      if (payload.data.attributes.routeId) {\n        let routeData = {\n          type: 'avlmRoute',\n          id: payload.data.attributes.routeId\n        };\n        routeData = {\n          'data': routeData\n        };\n        payload.data.relationships.avlmRoute = routeData;\n      }\n    }\n\n    if (ENV.APP.avlmLite && !payload.data.relationships.hasOwnProperty('vehicle')) {\n      if (payload.data.attributes.vehicleId) {\n        let vehicleData = {\n          type: 'avlmVehicle',\n          id: payload.data.attributes.vehicleId\n        };\n        vehicleData = {\n          'data': vehicleData\n        };\n        payload.data.relationships.avlmVehicle = vehicleData;\n      }\n    }\n\n    if (!ENV.APP.avlmLite && !payload.data.relationships.hasOwnProperty('route')) {\n      if (payload.data.attributes.routeId) {\n        let routeData = {\n          type: 'route',\n          id: payload.data.attributes.routeId\n        };\n        routeData = {\n          'data': routeData\n        };\n        payload.data.relationships.route = routeData;\n      }\n    }\n\n    if (!ENV.APP.avlmLite && !payload.data.relationships.hasOwnProperty('vehicle')) {\n      if (payload.data.attributes.vehicleId) {\n        let vehicleData = {\n          type: 'vehicle',\n          id: payload.data.attributes.vehicleId\n        };\n        vehicleData = {\n          'data': vehicleData\n        };\n        payload.data.relationships.vehicle = vehicleData;\n      }\n    }\n\n    if (!ENV.APP.avlmLite && !payload.data.relationships.hasOwnProperty('driver')) {\n      if (payload.data.attributes.driverId) {\n        let driverData = {\n          type: 'driver',\n          id: payload.data.attributes.driverId\n        };\n        driverData = {\n          'data': driverData\n        };\n        payload.data.relationships.driver = driverData;\n      }\n    }\n\n    return payload;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-event\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    const {\n      vehicle,\n      alert,\n      driver,\n      route,\n      schedule\n    } = payload.data.relationships;\n\n    if (vehicle) {\n      payload.data.relationships.avlmVehicle = vehicle;\n      delete payload.data.relationships.vehicle;\n    }\n\n    if (driver) {\n      payload.data.relationships.avlmDriver = driver;\n      delete payload.data.relationships.driver;\n    }\n\n    if (alert) {\n      payload.data.relationships.avlmAlert = alert;\n      delete payload.data.relationships.alert;\n    }\n\n    if (route) {\n      payload.data.relationships.avlmRoute = route;\n      delete payload.data.relationships.route;\n    }\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-message\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.EMERGENCY_PRIORITY_CODE = _exports.CANNED_RESPONSE_TYPES = void 0;\n  _exports.default = transform;\n  // these must be kept in sync with `models/avlm-emergency-message.js`\n  const CANNED_RESPONSE_TYPES = {\n    'X': 'None',\n    'A': 'Acknowledge',\n    'Y': 'Yes/No',\n    'C': 'Cancel',\n    'R': 'Resolve'\n  };\n  _exports.CANNED_RESPONSE_TYPES = CANNED_RESPONSE_TYPES;\n  const EMERGENCY_PRIORITY_CODE = 'E';\n  _exports.EMERGENCY_PRIORITY_CODE = EMERGENCY_PRIORITY_CODE;\n\n  function transform(payload, ENV) {\n    payload.data.type = 'avlm-canned-message';\n    const transformedPayloads = [];\n    const {\n      replyToMessage\n    } = payload.data.relationships;\n\n    if (payload.data.attributes.priority === EMERGENCY_PRIORITY_CODE) {\n      payload.data.type = 'avlm-emergency-message';\n    }\n\n    if (replyToMessage) {\n      delete payload.data.relationships.replyToMessage;\n      payload.data.attributes.replyToMsgId = replyToMessage.data.id;\n    } else {\n      payload.data.attributes.replyToMsgId = payload.data.id;\n    }\n\n    payload.data.attributes.isNewMessageReceived = true;\n    payload.data.attributes.responseType = {\n      status: CANNED_RESPONSE_TYPES[payload.data.attributes.responseType]\n    };\n\n    if (payload.data.relationships) {\n      if (payload.data.attributes.ackTime && payload.data.attributes.responseMessage === null) {\n        payload.data.attributes.responseMessage = 'Acknowledged';\n      }\n\n      if (!payload.data.attributes.ackTime && !payload.data.attributes.responseMessage && payload.data.attributes.responseType.status !== 'None') {\n        payload.data.attributes.responseMessage = 'None';\n      }\n\n      if (ENV.APP.avlmLite) {\n        if (payload.data.relationships.route) {\n          const {\n            route\n          } = payload.data.relationships;\n          payload.data.relationships.avlmRoute = route;\n          delete payload.data.relationships.route;\n        }\n\n        if (payload.data.relationships.driver) {\n          const {\n            driver\n          } = payload.data.relationships;\n          payload.data.relationships.avlmDriver = driver;\n          delete payload.data.relationships.driver;\n        }\n\n        if (payload.data.relationships.vehicle) {\n          const {\n            vehicle\n          } = payload.data.relationships;\n          payload.data.relationships.avlmVehicle = vehicle;\n          delete payload.data.relationships.route;\n        }\n\n        if (payload.data.relationships.trip) {\n          const {\n            trip\n          } = payload.data.relationships;\n          payload.data.relationships.avlmTrip = trip;\n          delete payload.data.relationships.trip;\n        }\n\n        if (payload.data.relationships.routeVehicleDriver) {\n          const {\n            routeVehicleDriver\n          } = payload.data.relationships;\n          payload.data.relationships.avlmRouteVehicleDriver = routeVehicleDriver;\n          delete payload.data.relationships.routeVehicleDriver;\n        }\n      }\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-rider-event\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    const {\n      rider,\n      stopPoint,\n      schedule\n    } = payload.data.relationships;\n    payload.data.attributes.otp = payload.data.attributes.otpStatus; // create placeholders so ember won't do a get\n\n    if (rider) {\n      payload.data.relationships.avlmRider = rider;\n      delete payload.data.relationships.rider;\n    }\n\n    if (stopPoint) {\n      // this is coming in as 'avlm-stopPoint' for some reason\n      stopPoint.data.type = 'avlm-stop-point';\n      payload.data.relationships.avlmStopPoint = stopPoint;\n      delete payload.data.relationships.stopPoint;\n    }\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-route-break\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    const {\n      route,\n      schedule,\n      address\n    } = payload.data.relationships; // create placeholders so ember won't do a get\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    if (route) {\n      payload.data.relationships.avlmRoute = route;\n      delete payload.data.relationships.route;\n    }\n\n    if (address) {\n      payload.data.relationships.avlmAddress = address;\n      delete payload.data.relationships.address;\n    }\n\n    transformedPayloads.push({\n      data: {\n        id: payload.data.id,\n        type: 'avlm-route-break'\n      }\n    });\n    transformedPayloads.push({\n      data: {\n        id: `B${payload.data.id}`,\n        type: 'avlm-stop-point',\n        attributes: payload.data.attributes,\n        relationships: {\n          stopRoute: {\n            data: {\n              type: 'avlm-route',\n              id: route.data.id\n            }\n          },\n          routeBreak: {\n            data: {\n              type: 'avlm-route-break',\n              id: payload.data.id\n            }\n          }\n        }\n      }\n    });\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-route-exec-event\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  // don't want to use Ember imports here\n  const isPresent = x => typeof x !== 'undefined' && x !== null;\n\n  const TYPE_CONVERT = {\n    N: 'No Show',\n    R: 'Arrive',\n    O: 'OnStop',\n    L: 'Depart',\n    C: 'Complete',\n    A: 'Accept',\n    D: 'Reject',\n    B: 'OnBreak',\n    F: 'OffBreak',\n    W: 'work',\n    E: 'ETA',\n    V: 'AVL',\n    T: 'Pullout',\n    I: 'Pullin',\n    Q: 'noShowRequest',\n    Y: 'noShowAccepted',\n    X: 'noShowDeclined',\n    S: 'noShowCancelled',\n    Z: 'removed',\n    U: 'added',\n    P: 'otpStatus',\n    G: 'emergency',\n    H: 'resolved',\n    J: 'canceled',\n    K: 'acknowledged',\n    '1': 'preCheckDone',\n    '2': 'postCheckDone',\n    '3': 'altPath',\n    '4': 'lateCancel'\n  };\n\n  function transform(payload, ENV) {\n    const prefix = ENV.APP.avlmLite ? 'avlm-' : '';\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.relationships || !payload.data.attributes) return transformedPayloads;\n    payload.data.type = 'route-exec-event';\n    const {\n      route,\n      trip,\n      routeBreak,\n      vehicle,\n      stopPoint\n    } = payload.data.relationships;\n    const routeId = route ? route.data.id : null;\n    const tripId = trip ? trip.data.id : null;\n    const breakId = routeBreak ? routeBreak.data.id : null;\n    const vehicleId = vehicle ? vehicle.data.id : null;\n    const stopId = stopPoint ? stopPoint.data.id : null;\n    let {\n      type\n    } = payload.data.attributes;\n    const {\n      deletedAt\n    } = payload.data.attributes;\n    const routeAttributes = {};\n    const tripAttributes = {};\n    const stopAttributes = {};\n    const vehicleAttributes = {};\n    const routeBreakAttributes = {};\n    type = TYPE_CONVERT[type];\n\n    switch (type) {\n      case 'No Show':\n        {\n          const {\n            createdAt,\n            receivedAt,\n            source\n          } = payload.data.attributes;\n\n          if (deletedAt) {\n            if (ENV.APP.avlmLite) {\n              tripAttributes.status = null;\n            }\n\n            stopAttributes.status = null;\n            stopAttributes.noShowTime = null;\n            stopAttributes.arrivePerformedBy = null;\n          } else {\n            if (ENV.APP.avlmLite) {\n              tripAttributes.status = type;\n            }\n\n            stopAttributes.status = type;\n            stopAttributes.noShowTime = receivedAt || createdAt;\n            stopAttributes.arrivePerformedBy = source;\n          }\n\n          break;\n        }\n\n      case 'Arrive':\n        {\n          const {\n            lat,\n            lng,\n            receivedAt,\n            createdAt,\n            source\n          } = payload.data.attributes;\n\n          if (deletedAt) {\n            stopAttributes.arriveLat = null;\n            stopAttributes.arriveLng = null;\n            stopAttributes.arriveStatus = '';\n            stopAttributes.actualArriveTime = null;\n            stopAttributes.arrivePerformedBy = null;\n          } else {\n            stopAttributes.arriveLat = lat;\n            stopAttributes.arriveLng = lng;\n            stopAttributes.arriveStatus = type;\n            stopAttributes.actualArriveTime = receivedAt || createdAt;\n            stopAttributes.arrivePerformedBy = source;\n\n            if (!ENV.APP.avlmLite) {\n              routeAttributes.status = type;\n            }\n          }\n\n          break;\n        }\n\n      case 'Depart':\n        {\n          const {\n            lat,\n            lng,\n            receivedAt,\n            createdAt,\n            source\n          } = payload.data.attributes;\n\n          if (deletedAt) {\n            stopAttributes.departLat = null;\n            stopAttributes.departLng = null;\n            stopAttributes.status = '';\n            stopAttributes.actualDepartTime = null;\n            stopAttributes.departPerformedBy = null;\n          } else {\n            stopAttributes.departLat = lat;\n            stopAttributes.departLng = lng;\n            stopAttributes.status = type;\n            stopAttributes.actualDepartTime = receivedAt || createdAt;\n            stopAttributes.departPerformedBy = source;\n\n            if (!ENV.APP.avlmLite) {\n              routeAttributes.status = type;\n            }\n          }\n\n          break;\n        }\n\n      case 'Accept':\n        {\n          if (!deletedAt) {\n            stopAttributes.status = '';\n            stopAttributes.arriveStatus = '';\n            stopAttributes.noShowTime = null;\n            stopAttributes.arrivePerformedBy = '';\n            stopAttributes.departPerformedBy = '';\n            routeBreakAttributes.arriveLat = null;\n            routeBreakAttributes.arriveLng = null;\n            routeBreakAttributes.status = '';\n            routeBreakAttributes.actualArriveTime = null;\n            routeBreakAttributes.actualDepartTime = null;\n          }\n\n          break;\n        }\n\n      case 'removed':\n        {\n          // IQUX-1860 because of an issue in ESS to sent delete record from\n          // a cancel or trip transfer, we are just hiding the trip and stop\n          // for now. Post avlm, we will show the trip/stop and just have a status\n          // of Cancelled.\n          if (ENV.APP.avlmLite) {\n            stopAttributes.status = 'Removed';\n            tripAttributes.status = 'Removed';\n          } else {\n            stopAttributes.status = 'Cancelled';\n            tripAttributes.status = 'Cancelled';\n          }\n\n          break;\n        }\n\n      case 'noShowCancelled':\n      case 'noShowDeclined':\n        {\n          tripAttributes.status = ENV.APP.avlmLite ? 'A' : 'scheduled'; // Currently the status should revert back to its previous status; need to talk to Paul or Ladya\n\n          break;\n        }\n\n      case 'noShowAccepted':\n        {\n          break;\n        }\n\n      case 'noShowRequest':\n        {\n          const {\n            noShowCode\n          } = payload.data.attributes;\n          tripAttributes.status = type;\n          tripAttributes.statusReason = noShowCode;\n          break;\n        }\n\n      case 'Reject':\n      case 'OnBreak':\n        {\n          const {\n            lat,\n            lng,\n            receivedAt,\n            createdAt,\n            source\n          } = payload.data.attributes;\n\n          if (deletedAt) {\n            routeBreakAttributes.arriveLat = null;\n            routeBreakAttributes.arriveLng = null;\n            routeBreakAttributes.arriveStatus = '';\n            routeBreakAttributes.actualArriveTime = null;\n            routeBreakAttributes.arrivePerformedBy = null;\n\n            if (!ENV.APP.avlmLite) {\n              routeAttributes.status = 'OffBreak';\n            }\n          } else {\n            routeBreakAttributes.arriveLat = lat;\n            routeBreakAttributes.arriveLng = lng;\n            routeBreakAttributes.arriveStatus = type;\n            routeBreakAttributes.actualArriveTime = receivedAt || createdAt;\n            routeBreakAttributes.arrivePerformedBy = source;\n\n            if (!ENV.APP.avlmLite) {\n              routeAttributes.status = type;\n            }\n          }\n\n          break;\n        }\n\n      case 'OffBreak':\n        {\n          const {\n            lat,\n            lng,\n            receivedAt,\n            createdAt,\n            source\n          } = payload.data.attributes;\n\n          if (deletedAt) {\n            routeBreakAttributes.departLat = null;\n            routeBreakAttributes.departLng = null;\n            routeBreakAttributes.status = '';\n            routeBreakAttributes.actualDepartTime = null;\n            routeBreakAttributes.departPerformedBy = null;\n\n            if (!ENV.APP.avlmLite) {\n              routeAttributes.status = 'OnBreak';\n            }\n          } else {\n            routeBreakAttributes.departLat = lat;\n            routeBreakAttributes.departLng = lng;\n            routeBreakAttributes.status = type;\n            routeBreakAttributes.actualDepartTime = receivedAt || createdAt;\n            routeBreakAttributes.departPerformedBy = source;\n\n            if (!ENV.APP.avlmLite) {\n              routeAttributes.status = type;\n            }\n          }\n\n          break;\n        }\n      // these are currently defined but unused\n\n      case 'OnStop':\n      case 'Complete':\n        {\n          routeAttributes.status = type;\n          break;\n        }\n\n      case 'work': // TODO: check if this should be capitalized\n\n      case 'ETA':\n      case 'AVL':\n      case 'Pullout':\n        {\n          const {\n            receivedAt\n          } = payload.data.attributes;\n          stopAttributes.status = type;\n\n          if (!ENV.APP.avlmLite) {\n            routeAttributes.status = type;\n          }\n\n          routeAttributes.actualStartTimestamp = receivedAt;\n          break;\n        }\n\n      case 'Pullin':\n        {\n          const {\n            receivedAt\n          } = payload.data.attributes;\n          stopAttributes.status = type;\n\n          if (!ENV.APP.avlmLite) {\n            routeAttributes.status = type;\n          }\n\n          routeAttributes.actualEndTimestamp = receivedAt;\n          vehicleAttributes.otp = '';\n          break;\n        }\n\n      default:\n        break;\n    } // don't update related route, trip, or vehicle for deleted arrive or onBreak\n\n\n    if (!deletedAt) {\n      if (routeId) {\n        const {\n          odo,\n          otpRouteStatus,\n          otpRouteValue\n        } = payload.data.attributes;\n\n        if (isPresent(otpRouteStatus)) {\n          routeAttributes.otp = otpRouteStatus;\n        }\n\n        if (isPresent(otpRouteValue)) {\n          routeAttributes.otpValue = otpRouteValue;\n        }\n\n        routeAttributes.odometer = odo;\n        const routePayload = {\n          data: {\n            id: routeId,\n            type: `${prefix}route`,\n            attributes: routeAttributes\n          }\n        };\n        transformedPayloads.push(routePayload);\n      }\n\n      if (tripId) {\n        const {\n          otpTripStatus,\n          otpTripValue\n        } = payload.data.attributes;\n\n        if (isPresent(otpTripStatus)) {\n          tripAttributes.otp = otpTripStatus;\n        }\n\n        if (isPresent(otpTripValue)) {\n          tripAttributes.otpValue = otpTripValue;\n        }\n\n        const tripPayload = {\n          data: {\n            id: tripId,\n            type: `${prefix}trip`,\n            attributes: tripAttributes\n          }\n        };\n        transformedPayloads.push(tripPayload);\n      }\n\n      if (vehicleId) {\n        const {\n          otpRouteStatus\n        } = payload.data.attributes;\n\n        if (isPresent(otpRouteStatus)) {\n          vehicleAttributes.otp = otpRouteStatus;\n        } else {\n          vehicleAttributes.otp = null;\n        }\n\n        const vehiclePayload = {\n          data: {\n            id: vehicleId,\n            type: `${prefix}vehicle`,\n            attributes: vehicleAttributes\n          }\n        };\n        transformedPayloads.push(vehiclePayload);\n      }\n    } else {\n      if (routeId) {\n        // eslint-disable-line no-lonely-if\n        const routePayload = {\n          data: {\n            id: routeId,\n            type: `${prefix}route`,\n            attributes: routeAttributes\n          }\n        };\n        transformedPayloads.push(routePayload);\n      }\n    }\n\n    if (stopId) {\n      // don't update OTP or odo for deleted event, but do update other stopAttributes set above\n      if (!deletedAt) {\n        const {\n          odo,\n          otpStopStatus,\n          otpStopValue\n        } = payload.data.attributes;\n\n        if (isPresent(otpStopStatus)) {\n          stopAttributes.otp = otpStopStatus;\n        }\n\n        if (isPresent(otpStopValue)) {\n          stopAttributes.otpValue = otpStopValue;\n        } // we don't want to include odometer with otpStatus type because\n        // It is always set to the route start and this comes after the stop\n        // performs.\n\n\n        if (!isPresent(otpStopValue)) {\n          stopAttributes.odometer = odo;\n        }\n      }\n\n      const stopPayload = {\n        data: {\n          id: stopId,\n          type: `${prefix}stop-point`,\n          attributes: stopAttributes\n        }\n      };\n      transformedPayloads.push(stopPayload);\n    }\n\n    if (breakId) {\n      // don't update odo for deleted onBreak, but do update other routeBreakAttributes set above\n      if (!deletedAt) {\n        const {\n          odo\n        } = payload.data.attributes;\n        routeBreakAttributes.odometer = odo;\n      }\n\n      const routeBreakPayload = {\n        data: {\n          id: `${breakId}`,\n          type: `${prefix}route-break`,\n          attributes: routeBreakAttributes\n        }\n      };\n      transformedPayloads.push(routeBreakPayload);\n    }\n\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-route\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    const {\n      schedule,\n      alert\n    } = payload.data.relationships;\n    payload.data.attributes.otp = payload.data.attributes.otpStatus;\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    if (alert) {\n      payload.data.relationships.avlmAlert = alert;\n      delete payload.data.relationships.alert;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-stop-point\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload, ENV) {\n    const transformedPayloads = [];\n\n    if (ENV.APP.avlmLite) {\n      delete payload.data.attributes.status;\n    }\n\n    const {\n      schedule,\n      trip,\n      cluster,\n      address\n    } = payload.data.relationships;\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    if (cluster) {\n      payload.data.relationships.avlmCluster = cluster;\n      delete payload.data.relationships.cluster;\n    }\n\n    if (trip) {\n      payload.data.relationships.avlmTrip = trip;\n      delete payload.data.relationships.trip;\n    }\n\n    if (address) {\n      payload.data.relationships.avlmAddress = address;\n      delete payload.data.relationships.address;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-trip-rider\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    const {\n      schedule,\n      trip,\n      rider\n    } = payload.data.relationships;\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    if (rider) {\n      payload.data.relationships.avlmRider = rider;\n      delete payload.data.relationships.rider;\n    }\n\n    if (trip) {\n      payload.data.relationships.avlmTrip = trip;\n      delete payload.data.relationships.trip;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/avlm-trip\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    const {\n      schedule,\n      route\n    } = payload.data.relationships;\n    payload.data.attributes.otp = payload.data.attributes.otpStatus;\n\n    if (schedule) {\n      payload.data.relationships.avlmSchedule = schedule;\n      delete payload.data.relationships.schedule;\n    }\n\n    if (route) {\n      payload.data.relationships.avlmRoute = route;\n      delete payload.data.relationships.route;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/driver\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.relationships) return transformedPayloads;\n    const {\n      availabilities,\n      attributes\n    } = payload.data.relationships;\n\n    if (availabilities) {\n      // rename key availabilities -> driverAvailabilities\n      delete payload.data.relationships.availabilities;\n      payload.data.relationships.driverAvailabilities = availabilities;\n    }\n\n    if (attributes) {\n      delete payload.data.relationships.attributes;\n      payload.data.relationships.driverAttributes = attributes;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/eta-route\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  // TODO: CLEAN\n  // helper for building `stop-point` and `avlm-stop-point` payloads\n  const buildStopPointPayload = function (etanavStopPoint, route) {\n    let avlm = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    return {\n      data: {\n        id: etanavStopPoint.id,\n        type: avlm ? 'avlm-stop-point' : 'stop-point',\n        attributes: etanavStopPoint.attributes,\n        relationships: {\n          stopRoute: {\n            data: {\n              type: avlm ? 'avlm-route' : 'route',\n              id: route.data.id\n            }\n          },\n          etaNavStopPoint: {\n            data: {\n              type: 'etanav-stop-point',\n              id: etanavStopPoint.id\n            }\n          }\n        }\n      }\n    };\n  };\n\n  function transform(payload, ENV) {\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.relationships) return transformedPayloads;\n    const {\n      route,\n      stopPoints,\n      vehicle,\n      routeBreaks\n    } = payload.data.relationships;\n\n    if (payload.included) {\n      delete payload.data.relationships.etaStops;\n      payload.included.filter(etanavStopPoint => {\n        return etanavStopPoint.type === 'etanav-stop-point';\n      }).forEach(etanavStopPoint => {\n        etanavStopPoint.relationships.etaNavRoute = {\n          data: {\n            type: 'etanav-route',\n            id: payload.data.id\n          }\n        };\n        transformedPayloads.push({\n          data: etanavStopPoint\n        });\n        const {\n          stopPoint\n        } = etanavStopPoint.relationships;\n\n        if (ENV.APP.avlmLite) {\n          // rename relationship to 'avlmStopPoint'\n          delete etanavStopPoint.relationships.stopPoint;\n          etanavStopPoint.relationships.avlmStopPoint = stopPoint;\n        } // handle id prefix\n\n\n        const [idPrefix] = etanavStopPoint.id.match(/^([A-Z])+/) || [''];\n\n        switch (idPrefix) {\n          case '':\n          case 'P':\n          case 'D':\n            // pick or drop; include relationship placeholder only\n            transformedPayloads.push(stopPoint);\n            break;\n\n          case 'GD':\n            {\n              // garage pullin\n              etanavStopPoint.attributes.stopType = 'pullinGarage';\n              etanavStopPoint.attributes.parentType = 'pullinGarage'; // need to build [avlm-]stop-point\n\n              const stopPointPayload = buildStopPointPayload(etanavStopPoint, route, ENV.APP.avlmLite);\n              transformedPayloads.push(stopPointPayload);\n              break;\n            }\n\n          case 'GP':\n            {\n              // garage pullout\n              etanavStopPoint.attributes.stopType = 'pulloutGarage';\n              etanavStopPoint.attributes.parentType = 'pulloutGarage';\n              etanavStopPoint.attributes.routeOrdinal = '0'; // need to build [avlm-]stop-point\n\n              const stopPointPayload = buildStopPointPayload(etanavStopPoint, route, ENV.APP.avlmLite);\n              transformedPayloads.push(stopPointPayload);\n              break;\n            }\n\n          case 'B':\n            {\n              // break stop\n              etanavStopPoint.stopType = 'break';\n              etanavStopPoint.parentType = 'break'; // need to build [avlm-]stop-point\n\n              const stopPointPayload = buildStopPointPayload(etanavStopPoint, route, ENV.APP.avlmLite);\n\n              if (stopPointPayload.data.attributes.status) {\n                delete stopPointPayload.data.attributes.status;\n              }\n\n              transformedPayloads.push(stopPointPayload);\n              break;\n            }\n\n          case 'DP':\n            {\n              // TODO: what is this? do we need special handling here?\n              // need to build [avlm-]stop-point\n              const stopPointPayload = buildStopPointPayload(etanavStopPoint, route, ENV.APP.avlmLite);\n              transformedPayloads.push(stopPointPayload);\n              break;\n            }\n\n          default:\n            throw new Error(`unhandled etanavStopPoint id prefix '${idPrefix}'`);\n        }\n      });\n      payload.included.filter(etaNavRouteBreak => {\n        return etaNavRouteBreak.type === 'etanav-route-break';\n      }).forEach(etaNavRouteBreak => {\n        etaNavRouteBreak.relationships.etaNavRoute = {\n          data: {\n            type: 'etanav-route',\n            id: payload.data.id\n          }\n        };\n\n        if (ENV.APP.avlmLite && etaNavRouteBreak.relationships.routeBreak) {\n          const avlmRouteBreak = etaNavRouteBreak.relationships.routeBreak;\n          delete etaNavRouteBreak.relationships.routeBreak;\n          etaNavRouteBreak.relationships.avlmRouteBreak = avlmRouteBreak;\n        }\n\n        transformedPayloads.push({\n          data: etaNavRouteBreak\n        });\n      });\n      delete payload.included;\n    }\n\n    if (route && ENV.APP.avlmLite) {\n      delete payload.data.relationships.route;\n      payload.data.relationships.avlmRoute = route; // prevent API requests\n\n      transformedPayloads.push({\n        data: {\n          id: route.data.id,\n          type: 'avlm-route'\n        }\n      });\n    }\n\n    if (vehicle && ENV.APP.avlmLite) {\n      delete payload.data.relationships.vehicle;\n      payload.data.relationships.avlmVehicle = vehicle;\n    }\n\n    if (stopPoints) {\n      delete payload.data.relationships.stopPoints;\n      payload.data.relationships.etaStops = stopPoints;\n    }\n\n    if (routeBreaks) {\n      delete payload.data.relationships.routeBreaks;\n      payload.data.relationships.etaRouteBreaks = routeBreaks;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/lock\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.relationships) return transformedPayloads;\n    const {\n      dispatchRoute\n    } = payload.data.relationships;\n    const {\n      attributes\n    } = payload.data;\n\n    if (dispatchRoute) {\n      attributes.entityType = 'dispatchRoute';\n      transformedPayloads.push(dispatchRoute);\n\n      if (attributes) {\n        payload.data.id = dispatchRoute.data.id;\n        attributes.entityId = dispatchRoute.data.id;\n        attributes.owner = payload.data.attributes.user;\n\n        if (!attributes.expirationTime) {\n          attributes.persist = true;\n        }\n      }\n    }\n\n    if (attributes.owner) {\n      const owner = {\n        data: {\n          type: 'sso-user',\n          id: attributes.owner\n        }\n      };\n      payload.data.relationships.owner = owner;\n    }\n\n    const {\n      route\n    } = payload.data.relationships;\n\n    if (route) {\n      attributes.entityType = 'route';\n\n      if (attributes) {\n        attributes.entityId = route.data.id;\n\n        if (!attributes.expirationTime) {\n          attributes.persist = true;\n        }\n      }\n    }\n\n    if (attributes.user) {\n      const owner = {\n        data: {\n          type: 'sso-user',\n          id: attributes.user\n        }\n      };\n      payload.data.relationships.owner = owner;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/polyline\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload, ENV) {\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.relationships) return transformedPayloads;\n    const {\n      route,\n      stopPoint\n    } = payload.data.relationships;\n\n    if (route && ENV.APP.avlmLite) {\n      delete payload.data.relationships.route;\n      payload.data.relationships.avlmRoute = route;\n    }\n\n    if (stopPoint && ENV.APP.avlmLite) {\n      delete payload.data.relationships.stopPoint;\n      payload.data.relationships.avlmStopPoint = stopPoint;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/rider\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    if (!payload.data || !payload.data.relationships) return payload;\n    payload.data.type = 'rider';\n    const {\n      eligibilities,\n      travelNeeds,\n      phoneNumbers,\n      places\n    } = payload.data.relationships;\n\n    if (eligibilities) {\n      delete payload.data.relationships.eligibilities;\n      payload.data.relationships.riderEligibilities = eligibilities;\n    }\n\n    if (travelNeeds) {\n      delete payload.data.relationships.travelNeeds;\n      payload.data.relationships.riderTravelNeeds = travelNeeds;\n    }\n\n    if (phoneNumbers) {\n      delete payload.data.relationships.phoneNumbers;\n      payload.data.relationships.riderPhoneNumbers = phoneNumbers;\n    }\n\n    if (places) {\n      delete payload.data.relationships.places;\n      payload.data.relationships.riderPlaces = places;\n    }\n\n    return payload;\n  }\n});","define(\"adept-iq/topic-transforms/stop-point\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.attributes) return transformedPayloads;\n\n    if (payload.data.attributes.parentType === 'break') {\n      payload.data.attributes.stopType = 'break'; // dispatch driver break created by default is 'pick' needs to convert the pick to a break stop type\n    }\n\n    if (payload.data.attributes.parentType === 'waypoint' && payload.data.attributes.waypoint) {\n      const place = {\n        data: {\n          type: 'place',\n          id: payload.data.attributes.waypoint\n        }\n      };\n      payload.data.relationships.place = place;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/subscription\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    if (!payload.data || !payload.data.relationships) return payload;\n    const {\n      originPlace,\n      destinationPlace,\n      travelNeeds\n    } = payload.data.relationships;\n    payload.data.type = 'subscription';\n\n    if (originPlace) {\n      delete payload.data.relationships.originPlace;\n      payload.data.relationships.origin = originPlace;\n    }\n\n    if (destinationPlace) {\n      delete payload.data.relationships.destinationPlace;\n      payload.data.relationships.destination = destinationPlace;\n    }\n\n    if (travelNeeds) {\n      delete payload.data.relationships.travelNeeds;\n      payload.data.relationships.subscriptionTravelNeeds = travelNeeds;\n    }\n\n    return payload;\n  }\n});","define(\"adept-iq/topic-transforms/trip\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    const transformedPayloads = [];\n    if (!payload.data || !payload.data.attributes) return transformedPayloads;\n\n    if (payload.data.attributes.reason) {\n      payload.data.attributes.statusReason = payload.data.attributes.reason;\n    }\n\n    transformedPayloads.push(payload);\n    return transformedPayloads;\n  }\n});","define(\"adept-iq/topic-transforms/user\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    payload.data.type = 'sso-user';\n    return payload;\n  }\n});","define(\"adept-iq/topic-transforms/vehicle\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = transform;\n\n  function transform(payload\n  /*, ENV*/\n  ) {\n    if (!payload.data || !payload.data.relationships) return payload;\n    const {\n      availabilities,\n      startGaragePlace,\n      endGaragePlace\n    } = payload.data.relationships;\n\n    if (availabilities) {\n      // rename key availabilities -> vehicleAvailabilities\n      delete payload.data.relationships.availabilities;\n      payload.data.relationships.vehicleAvailabilities = availabilities;\n    }\n\n    if (startGaragePlace) {\n      delete payload.data.relationships.startGaragePlace;\n      payload.data.relationships.startGarage = startGaragePlace;\n    }\n\n    if (endGaragePlace) {\n      delete payload.data.relationships.endGaragePlace;\n      payload.data.relationships.endGarage = endGaragePlace;\n    }\n\n    return payload;\n  }\n});","define(\"adept-iq/transforms/array\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  // Converts centigrade in the JSON to fahrenheit in the app\n  var _default = _emberData.default.Transform.extend({\n    deserialize: function (serialized) {\n      return Array.isArray(serialized) ? serialized : [];\n    },\n    serialize: function (deserialized) {\n      if (Array.isArray(deserialized)) {\n        return deserialized;\n      } else if (typeof deserialized === 'string') {\n        return deserialized.split(',').map(function (item) {\n          return Ember.$.trim(item);\n        });\n      }\n\n      return [];\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/fragment-array\", [\"exports\", \"ember-data-model-fragments/transforms/fragment-array\"], function (_exports, _fragmentArray) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _fragmentArray.default;\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/fragment\", [\"exports\", \"ember-data-model-fragments/transforms/fragment\"], function (_exports, _fragment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = _fragment.default;\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/guidance\", [\"exports\", \"ember-data\", \"pako\"], function (_exports, _emberData, _pako) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _emberData.default.Transform.extend({\n    deserialize(serialized) {\n      if (!serialized) return null;\n      const arr = atob(serialized).split(',');\n\n      const inflated = _pako.default.inflate(arr);\n\n      const guidanceJSON = String.fromCharCode.apply(null, inflated);\n\n      try {\n        return JSON.parse(guidanceJSON);\n      } catch (e) {\n        // bad json\n        return null;\n      }\n    },\n\n    serialize() {\n      return null;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/iso-date\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _emberData.default.DateTransform.extend({\n    serialize(date) {\n      if (Ember.isEmpty(date)) return null;\n      return (0, _moment.default)(date).toISOString();\n    },\n\n    deserialize(serialized) {\n      if (Ember.isEmpty(serialized)) return null;\n      return (0, _moment.default)(serialized).toDate();\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/nested\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const {\n    Transform\n  } = _emberData.default; // function copy(source) {\n  //     let keys = Object.keys(source);\n  //     let dest = {};\n  //     for(let i = 0; i < keys.length; i++) {\n  //         if(keys[i].charAt(0) !== '_') {\n  //             dest[keys[i]] = source[keys[i]];\n  //         }\n  //     }\n  //     return dest;\n  // }\n\n  var _default = Transform.extend({\n    deserialize: function (serialized) {\n      return serialized;\n    },\n    serialize: function (deserialized) {\n      return deserialized;\n    }\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/object\", [\"exports\", \"ember-data\"], function (_exports, _emberData) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _emberData.default.Transform.extend({\n    deserialize(serialized) {\n      return serialized;\n    },\n\n    serialize(deserialized) {\n      return deserialized;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/polyline\", [\"exports\", \"ember-data\", \"@mapbox/polyline\"], function (_exports, _emberData, _polyline) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  var _default = _emberData.default.Transform.extend({\n    deserialize(serialized) {\n      if (Ember.isEmpty(serialized)) return null;\n      return _polyline.default.decode(serialized);\n    },\n\n    serialize(deserialized) {\n      if (Ember.isEmpty(deserialized)) return null;\n      return _polyline.default.encode(deserialized);\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/transforms/ss-date\", [\"exports\", \"ember-data\", \"moment\"], function (_exports, _emberData, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  // scheduling API uses a slightly different date format\n  const DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ssZZ';\n\n  var _default = _emberData.default.DateTransform.extend({\n    serialize(date) {\n      if (date instanceof Date && !isNaN(date)) {\n        return (0, _moment.default)(date).format(DATE_FORMAT);\n      }\n\n      return null;\n    }\n\n  });\n\n  _exports.default = _default;\n});","define(\"adept-iq/utils/availability\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.solveAvailability = void 0;\n  // TODO: change this to UTC when NY data is correct\n  const DEFAULT_SYSTEM_TZ = 'America/Los_Angeles'; // TODO: get from config service (or change EST when NY data is correct)\n  // const DEFAULT_USER_TZ = 'America/Los_Angeles';\n  // determines if a set of availabilities covers an arbitrary time window\n  //\n  // The old strategy here broke the window down into per-day segments and then attempted to apply availability to each day (but had trouble with supporting multiple availabilities covering a timerange)\n  // The new strategy here is similar... break the window down into per-day segments... but after that, mark parts of each day (or partial day) as matched by a particular availability.\n  //   After iterating over all the availabilities, all the time segments should have been converted into one or more partial-day segments that can be covered by a specific availability.\n  //   A solution is one that has no remaining un-matched segments.\n\n  const solveAvailability = function (start, end, availabilities) {\n    let opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    // Need time zone because availabilities have time fields that do not have a timezone, and specify days of the week (each of which start at midnight in the local timezone)\n    //  As a result, we'll just use system time for everything\n    const systemTz = opts.systemTz || DEFAULT_SYSTEM_TZ;\n    const startTz = start.clone().tz(systemTz);\n    const endTz = end.clone().tz(systemTz); // Array that will start with the per-day time ranges and will get modified as we go\n\n    let intervals = []; // Initially populate the array with one element per system-timezone-day\n\n    let intervalStart = startTz;\n\n    do {\n      const intervalStartPlusOneDay = intervalStart.clone().add('1', 'day').startOf('day');\n      const intervalEnd = endTz.isBefore(intervalStartPlusOneDay) ? endTz : intervalStartPlusOneDay;\n      intervals.push({\n        start: intervalStart,\n        end: intervalEnd,\n        matchingAvailability: null\n      });\n      intervalStart = intervalEnd;\n    } while (intervalStart.isBefore(endTz)); // Now iterate over each availability to update the interval list\n\n\n    availabilities.forEach(availability => {\n      const modifiedIntervals = []; // For each interval in the list, we will do one of a few things:\n      // * If there's no overlap between the availability and the interval, copy the interval to the \"modified\" array without modifications\n      // * If there's 100% overlap between the availalbility and the interval, copy the interval to the \"modified\" array, but mark the matchingAvailability\n      // * If the availability matches the beginning or the end, create two new intervals, one of which will be marked as matching this availalility\n      // * If the availability is within the interval, then create three new intervals where the start and end intervals are unmatched, and the middle one is matched.\n\n      intervals.forEach(interval => {\n        // Only need to process this interval if it hasn't been matched yet\n        if (!interval.matchingAvailability) {\n          // get the day-of-the-week\n          const intervalWeekdayName = interval.start.format('dddd').toLowerCase();\n          const availabilityStart = (0, _moment.default)(availability.get('startTime'));\n          const availabilityEnd = (0, _moment.default)(availability.get('endTime'));\n\n          if (!availability.get(intervalWeekdayName) || availabilityStart.isAfter(interval.end) || availabilityEnd.isBefore(interval.start)) {\n            modifiedIntervals.push(interval);\n          } else {\n            const intervalStartOfDay = interval.start.startOf('day');\n\n            const availabilityStartAsDuration = _moment.default.duration(availability.get('shiftStart'));\n\n            const availabilityEndAsDuration = _moment.default.duration(availability.get('shiftEnd'));\n\n            if (availabilityStartAsDuration.milliseconds() === availabilityEndAsDuration.milliseconds()) {\n              availabilityEndAsDuration.add(1, 'day');\n            }\n\n            const actualAvailabilityStart = _moment.default.max(intervalStartOfDay.clone().add(availabilityStartAsDuration), availabilityStart);\n\n            const actualAvailabilityEnd = _moment.default.min(intervalStartOfDay.clone().add(availabilityEndAsDuration), availabilityEnd);\n\n            if (actualAvailabilityEnd.isBefore(interval.start) || actualAvailabilityStart.isAfter(interval.end)) {\n              modifiedIntervals.push(interval);\n            } else {\n              // If the availability starts after the start of the interval, we'll need to create an unmatched-interval record\n              if (actualAvailabilityStart.isAfter(interval.start)) {\n                modifiedIntervals.push({\n                  start: interval.start,\n                  end: actualAvailabilityStart,\n                  matchingAvailability: null\n                }); // overwrite the interval start with the start of the availability to make the next part easier to calculate\n\n                interval.start = actualAvailabilityStart;\n              }\n\n              if (actualAvailabilityEnd.isAfter(interval.end)) {\n                // this interval is covered by this availability (note that it could be just part of the interval after the beginning was examined)\n                interval.matchingAvailability = availability;\n                modifiedIntervals.push(interval);\n              } else {\n                // Need to push two intervals -- the first one is matched by this availability, and the second is still unmatched\n                modifiedIntervals.push({\n                  start: interval.start,\n                  end: actualAvailabilityEnd,\n                  matchingAvailability: availability\n                });\n                interval.start = actualAvailabilityEnd;\n                modifiedIntervals.push(interval);\n              }\n            }\n          }\n        }\n      }); // Now at least one record has been added to modifiedIntervals for each interval.  Swap it for the next availability to work on\n\n      intervals = modifiedIntervals;\n    }); // Now if there are any intervals without a matching availability, return null (indicating no solution)\n\n    if (intervals.some(interval => !interval.matchingAvailability)) {\n      return null;\n    } // To make it clean, merge adjacent intervals that are satisfied by the same availability\n\n\n    const reducedIntervals = intervals.reduce((reducedArray, currentInterval) => {\n      if (reducedArray.length === 0 || reducedArray.lastObject.matchingAvailability !== currentInterval.matchingAvailability) {\n        reducedArray.push(currentInterval);\n      } else {\n        reducedArray.lastObject.end = currentInterval.end;\n      }\n\n      return reducedArray;\n    }, []);\n    return reducedIntervals;\n  };\n\n  _exports.solveAvailability = solveAvailability;\n});","define(\"adept-iq/utils/batch-load-riders\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = batchLoadRiders;\n\n  /**\n   * Load multiple riders in ONE request instead of N per-rider findRecords.\n   *\n   * Replaces the recurring N+1 pattern\n   *   Promise.all(stops.map(s => fetchRecord.perform('rider', s.riderId, {reload: true})))\n   * which fires one (forced-network, uncached) request per stop. `store.query` always\n   * hits the network, so it gives the same freshness as `{reload: true}` in a single\n   * round-trip. Mirrors the `in(riderId,(…))` rider query already used in api-context.js.\n   *\n   * @param {DS.Store} store\n   * @param {Array<string|number>} riderIds  rider ids (may contain dupes / blanks)\n   * @returns {Promise} resolves to the loaded riders (empty array if no ids)\n   */\n  function batchLoadRiders(store, riderIds) {\n    const ids = [...new Set((riderIds || []).filter(Ember.isPresent).map(id => String(id)))];\n\n    if (!ids.length) {\n      return Promise.resolve([]);\n    }\n\n    const idsClause = ids.map(id => `'${id}'`).join(',');\n    return store.query('rider', {\n      filter: `in(riderId,(${idsClause}))`\n    });\n  }\n});","define(\"adept-iq/utils/calculate-position\", [\"exports\", \"ember-basic-dropdown/utils/calculate-position\"], function (_exports, _calculatePosition) {\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 _calculatePosition.default;\n    }\n  });\n});","define(\"adept-iq/utils/compute-ordered-ids\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n\n  /**\n   * Returns a sorted list of ids from a partially indexed collection.\n   *\n   * @param {Array} items\n   * @param {string} idKey\n   * @param {string} indexKey\n   */\n  function _default(items) {\n    let idKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'id';\n    let indexKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'index';\n    const orderedIds = [];\n    items.forEach(item => {\n      const id = item[idKey];\n      const index = item[indexKey]; // no index specified; pass\n\n      if (!Ember.isPresent(index)) return;\n\n      if (!Number.isInteger(index)) {\n        /*eslint-disable */\n        throw `item with id='${id}' has invalid index '${index}'`;\n        /*eslint-enable */\n      }\n\n      if (Ember.isPresent(orderedIds[index])) {\n        /*eslint-disable */\n        throw `item with id='${id}' has duplicate index '${index}'`;\n        /*eslint-enable */\n      }\n\n      orderedIds[index] = id;\n    }); // interleave other items\n\n    let i = 0;\n    items.reject(item => orderedIds.includes(item[idKey])).forEach(item => {\n      while (Ember.isPresent(orderedIds[i])) i++;\n\n      orderedIds[i] = item[idKey];\n    }); // remove any spaces that are left\n\n    return orderedIds.compact();\n  }\n});","define(\"adept-iq/utils/config-validator\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.validateNode = validateNode;\n\n  /*eslint-disable */\n  const isValueNumeric = value => {\n    return /^-?\\d+$/.test(value);\n  };\n  /*eslint-enable */\n\n\n  function validateNode(node) {\n    const validator = node.validator;\n    if (Ember.isEmpty(validator) || Ember.isEmpty(validator.validation)) return true;\n    const validation = validator.validation;\n    const type = validation.type;\n    const value = node.value;\n    let retval = false;\n\n    if (type === 'int') {\n      const number = Number(value);\n\n      if (isValueNumeric(value) && number >= validation.min && number <= validation.max) {\n        retval = true;\n      }\n    }\n\n    return retval;\n  }\n});","define(\"adept-iq/utils/convertDateTime\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.convertTo33Hour = _exports.convert33HourToDateTime = void 0;\n\n  function pad(num, size) {\n    let numString = num.toString();\n\n    while (numString.length < size) numString = '0' + numString;\n\n    return numString;\n  }\n\n  const convertTo33Hour = requestTime => {\n    const requestTimeMoment = (0, _moment.default)(requestTime);\n    const hours = requestTimeMoment.hours();\n    const minutes = requestTimeMoment.minutes();\n    const currentDay = (0, _moment.default)().startOf('day');\n    requestTimeMoment.startOf('day');\n    const diff = requestTimeMoment.diff(currentDay, 'days');\n    const multiplier = diff > 0 ? diff - 1 : 0;\n    const convertedHours = hours + multiplier * 24;\n    return `${pad(convertedHours, 2)}:${pad(minutes, 2)}`;\n  };\n\n  _exports.convertTo33Hour = convertTo33Hour;\n\n  const convert33HourToDateTime = requestTime => {\n    const timeArray = requestTime.split(':');\n    const today = (0, _moment.default)().startOf('day');\n    today.add(timeArray[0], 'hours');\n    today.add(timeArray[1], 'minutes');\n    return today.toISOString();\n  };\n\n  _exports.convert33HourToDateTime = convert33HourToDateTime;\n});","define(\"adept-iq/utils/convertDistance\", [\"exports\", \"adept-iq/config/environment\"], function (_exports, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.convertMilesToMeters = _exports.convertMetersToMiles = _exports.AVLM_ODOMETER_MILES_RESTRICTION = _exports.AVLM_ODOMETER_METER_RESTRICTION = void 0;\n  const AVLM_ODOMETER_METER_RESTRICTION = 9999999999;\n  _exports.AVLM_ODOMETER_METER_RESTRICTION = AVLM_ODOMETER_METER_RESTRICTION;\n  const distanceUnit = _environment.default.APP.distanceUnit || 'mi';\n\n  const convertMetersToMiles = distanceInMeters => {\n    const odometer = parseInt(distanceInMeters, 10);\n    const unit = distanceUnit;\n\n    if (unit === 'mi') {\n      return (odometer * 0.000621371).toFixed(0);\n    } else if (unit === 'km') {\n      return (odometer * 0.001).toFixed(0);\n    }\n\n    return odometer;\n  };\n\n  _exports.convertMetersToMiles = convertMetersToMiles;\n\n  const convertMilesToMeters = odometerString => {\n    const odometer = parseInt(odometerString, 10);\n\n    if (_environment.default.APP.distanceUnit === 'mi') {\n      return odometer * 1609.344;\n    } else if (_environment.default.APP.distanceUnit === 'km') {\n      return odometer * 1000;\n    }\n\n    return odometer;\n  };\n\n  _exports.convertMilesToMeters = convertMilesToMeters;\n  const AVLM_ODOMETER_MILES_RESTRICTION = convertMetersToMiles(AVLM_ODOMETER_METER_RESTRICTION);\n  _exports.AVLM_ODOMETER_MILES_RESTRICTION = AVLM_ODOMETER_MILES_RESTRICTION;\n});","define(\"adept-iq/utils/css-transitions/has-transitions\", [\"exports\", \"ember-modal-service/utils/css-transitions/has-transitions\"], function (_exports, _hasTransitions) {\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 _hasTransitions.default;\n    }\n  });\n});","define(\"adept-iq/utils/css-transitions/index\", [\"exports\", \"ember-modal-service/utils/css-transitions\"], function (_exports, _cssTransitions) {\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 _cssTransitions.default;\n    }\n  });\n});","define(\"adept-iq/utils/css-transitions/on-transition-end\", [\"exports\", \"ember-modal-service/utils/css-transitions/on-transition-end\"], function (_exports, _onTransitionEnd) {\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 _onTransitionEnd.default;\n    }\n  });\n});","define(\"adept-iq/utils/datetime-filters\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.buildDateFilter = buildDateFilter;\n  _exports.buildTimeFilter = buildTimeFilter;\n\n  const dateContainsTime = givenDate => (0, _moment.default)(givenDate).format('HH:mm') !== '00:00';\n\n  function dateBetweenForEqualAndNotEqual(filternode) {\n    const givenDate = filternode.local.values[0];\n    const isTimeGiven = dateContainsTime(givenDate);\n\n    if (isTimeGiven) {\n      const startDate = (0, _moment.default)(givenDate).utc().startOf('minute').toDate();\n      const endDate = (0, _moment.default)(givenDate).utc().endOf('minute').toDate();\n      filternode.local.values[0] = startDate;\n      filternode.local.values[1] = endDate;\n    } else {\n      const startDay = (0, _moment.default)(givenDate).startOf('day').utc().toDate();\n      const endDay = (0, _moment.default)(givenDate).endOf('day').utc().toDate();\n      filternode.local.values[0] = startDay;\n      filternode.local.values[1] = endDay;\n    }\n  }\n\n  function dateEqualFilter(filternode) {\n    filternode.type = 'dateBetween';\n    dateBetweenForEqualAndNotEqual(filternode);\n  }\n\n  function dateStrNotEqualFilter(filternode) {\n    filternode.type = 'dateStrNotBetween';\n    dateBetweenForEqualAndNotEqual(filternode);\n  }\n\n  function dateNotEqualFilter(filternode) {\n    filternode.type = 'dateNotBetween';\n    dateBetweenForEqualAndNotEqual(filternode);\n  }\n\n  function dateLessThanConverter(filternode) {\n    const givenDate = filternode.local.values[0];\n    const isTimeGiven = dateContainsTime(givenDate);\n\n    if (isTimeGiven) {\n      filternode.local.values[0] = _moment.default.utc(givenDate).toDate();\n    } else {\n      filternode.local.values[0] = (0, _moment.default)(givenDate).startOf('day').utc().toDate();\n    }\n  }\n\n  function dateLessThanEqualConverter(filternode) {\n    const givenDate = filternode.local.values[0];\n    const isTimeGiven = dateContainsTime(givenDate);\n\n    if (isTimeGiven) {\n      filternode.local.values[0] = _moment.default.utc(givenDate).endOf('minute').toDate();\n    } else {\n      filternode.local.values[0] = (0, _moment.default)(givenDate).endOf('day').utc().toDate();\n    }\n  }\n\n  function dateGreaterThanConverter(filternode) {\n    const givenDate = filternode.local.values[0];\n    const isTimeGiven = dateContainsTime(givenDate);\n\n    if (isTimeGiven) {\n      filternode.local.values[0] = _moment.default.utc(givenDate).endOf('minute').toDate();\n    } else {\n      filternode.local.values[0] = (0, _moment.default)(givenDate).endOf('day').utc().toDate();\n    }\n  }\n\n  function dateGreaterThanEqualConverter(filternode) {\n    const givenDate = filternode.local.values[0];\n    const isTimeGiven = dateContainsTime(givenDate);\n\n    if (isTimeGiven) {\n      filternode.local.values[0] = _moment.default.utc(givenDate).toDate();\n    } else {\n      filternode.local.values[0] = (0, _moment.default)(givenDate).endOf('day').utc().toDate();\n    }\n  }\n\n  function dateBetweenThanConverter(filternode) {\n    const givenDate = filternode.local.values[0];\n    const isTimeGiven = dateContainsTime(givenDate);\n\n    if (isTimeGiven) {\n      const startDate = (0, _moment.default)(filternode.local.values[0]).subtract(1, 'minutes').utc().toDate();\n      const endDate = (0, _moment.default)(filternode.local.values[1]).add(1, 'minutes').utc().toDate();\n      filternode.local.values[0] = startDate;\n      filternode.local.values[1] = endDate;\n    } else {\n      const startDay = (0, _moment.default)(filternode.local.values[0]).startOf('day').utc().toDate();\n      const endDay = (0, _moment.default)(filternode.local.values[1]).endOf('day').utc().toDate();\n      filternode.local.values[0] = startDay;\n      filternode.local.values[1] = endDay;\n    }\n  }\n\n  function defaultDateConverter(filternode) {\n    const utcValues = filternode.local.values.map(givenDate => {\n      return _moment.default.utc(givenDate).toDate();\n    });\n    filternode.local.values = utcValues;\n    filternode.rql.values = utcValues;\n  }\n\n  function buildDateFilter(filternode) {\n    switch (filternode.type) {\n      case 'dateStrEq':\n        return dateEqualFilter(filternode);\n\n      case 'dateStrNe':\n        return dateStrNotEqualFilter(filternode);\n\n      case 'dateNe':\n        return dateNotEqualFilter(filternode);\n\n      case 'dateLt':\n        return dateLessThanConverter(filternode);\n\n      case 'dateLte':\n        return dateLessThanEqualConverter(filternode);\n\n      case 'dateGt':\n      case 'datGte':\n        return dateGreaterThanConverter(filternode);\n\n      case 'dateBetween':\n        return dateBetweenThanConverter(filternode);\n\n      default:\n        return defaultDateConverter(filternode);\n    }\n  }\n\n  function buildTimeFilter(filternode) {\n    switch (filternode.type) {\n      case 'timeEq':\n        return dateEqualFilter(filternode);\n\n      case 'timeLt':\n        return dateLessThanConverter(filternode);\n\n      case 'timeLte':\n        return dateLessThanEqualConverter(filternode);\n\n      case 'timeGt':\n        return dateGreaterThanConverter(filternode);\n\n      case 'timeGte':\n        return dateGreaterThanEqualConverter(filternode);\n\n      case 'timeBetween':\n        return dateBetweenThanConverter(filternode);\n\n      default:\n        return defaultDateConverter(filternode);\n    }\n  }\n});","define(\"adept-iq/utils/dds-map\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.absolutizeStyle = absolutizeStyle;\n  _exports.autocomplete = autocomplete;\n  _exports.autocompleteAddresses = autocompleteAddresses;\n  _exports.fetchStyle = fetchStyle;\n  _exports.formatMatchedAddress = formatMatchedAddress;\n  _exports.geocodeSearch = geocodeSearch;\n  _exports.getDdsMapApiKey = getDdsMapApiKey;\n  _exports.getDdsMapAutocompleteLimit = getDdsMapAutocompleteLimit;\n  _exports.getDdsMapHost = getDdsMapHost;\n  _exports.mergeReverseMatch = mergeReverseMatch;\n  _exports.radiusFromBoundingBox = radiusFromBoundingBox;\n  _exports.reverseGeocode = reverseGeocode;\n  _exports.suggestionToCandidate = suggestionToCandidate;\n  _exports.toAddressResult = toAddressResult;\n  const STYLE_PATH = '/v1/tiles/style.json';\n  const SEARCH_PATH = '/v1/geocode/search';\n  const REVERSE_PATH = '/v1/geocode/reverse';\n  const AUTOCOMPLETE_PATH = '/v1/geocode/autocomplete';\n\n  function getDdsMapHost() {\n    const host = _apiUrls.API.ddsMap && _apiUrls.API.ddsMap.host || '';\n    return host.replace(/\\/+$/, '');\n  }\n\n  function getDdsMapApiKey() {\n    return _apiUrls.API.ddsMap && _apiUrls.API.ddsMap.mapTileApiKey || '';\n  }\n\n  function getDdsMapAutocompleteLimit() {\n    return _apiUrls.API.ddsMap && _apiUrls.API.ddsMap.autocompleteLimit || null;\n  }\n\n  function buildUrl(path) {\n    let params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const query = Object.keys(params).filter(key => Ember.isPresent(params[key])).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join('&');\n    return `${getDdsMapHost()}${path}${query ? `?${query}` : ''}`;\n  }\n\n  async function request(path, params) {\n    const host = getDdsMapHost();\n    const apiKey = getDdsMapApiKey();\n    if (!host) throw new Error('DDS map host is not configured (API.ddsMap.host)');\n    if (!apiKey) throw new Error('DDS map API key is not configured (API.ddsMap.mapTileApiKey)');\n    const response = await fetch(buildUrl(path, params), {\n      method: 'GET',\n      headers: {\n        'Accept': 'application/json',\n        'Authorization': `Bearer ${apiKey}`\n      }\n    });\n\n    if (!response.ok) {\n      let message = `${response.status}`;\n\n      try {\n        const body = await response.json();\n        message = body && body.error && body.error.message || JSON.stringify(body);\n      } catch (e) {// non-JSON error body; keep the status code\n      }\n\n      const error = new Error(`DDS map request failed (${path}): ${message}`);\n      error.status = response.status;\n      throw error;\n    }\n\n    return response.json();\n  }\n  /**\n   * Make the tile / sprite / glyph URLs in a style absolute. The style is handed\n   * to MapLibre as an object rather than a URL, so MapLibre cannot resolve\n   * relative URLs itself. Mutates and returns the style.\n   */\n\n\n  function absolutizeStyle(style, host) {\n    const resolve = template => {\n      // not `new URL()`: it would percent-encode the {z}/{x}/{y} placeholders\n      if (/^https?:\\/\\//i.test(template)) return template;\n      return `${host}${template.startsWith('/') ? '' : '/'}${template}`;\n    };\n\n    const sources = style && style.sources || {};\n    Object.keys(sources).forEach(id => {\n      const source = sources[id];\n\n      if (source && Array.isArray(source.tiles)) {\n        source.tiles = source.tiles.map(resolve);\n      }\n    });\n    if (typeof style.sprite === 'string') style.sprite = resolve(style.sprite);\n    if (typeof style.glyphs === 'string') style.glyphs = resolve(style.glyphs);\n    return style;\n  }\n  /**\n   * Fetch the basemap style for one map session. Every call mints a new\n   * short-lived tile session token (and is the billed \"map load\"), so call it\n   * once per map instance and never cache the result across maps.\n   *\n   * @returns {Promise<{style: object, attribution: string}>}\n   */\n\n\n  async function fetchStyle() {\n    const style = await request(STYLE_PATH);\n    const sources = style && style.sources || {};\n    const tileSource = Object.keys(sources).map(id => sources[id]).find(source => source && Array.isArray(source.tiles) && source.tiles.length);\n\n    if (!tileSource) {\n      throw new Error('DDS map style response did not include a tile URL template');\n    }\n\n    absolutizeStyle(style, getDdsMapHost());\n    return {\n      style,\n      attribution: tileSource.attribution || ''\n    };\n  }\n\n  function clean(value) {\n    return Ember.isNone(value) ? '' : `${value}`.trim();\n  }\n\n  function joinPresent(parts, separator) {\n    return parts.map(clean).filter(part => part.length > 0).join(separator);\n  }\n  /**\n   * Human readable one-line address, e.g. \"350 5 Avenue, New York, NY 10118, USA\".\n   */\n\n\n  function formatMatchedAddress() {\n    let matched = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    return joinPresent([joinPresent([matched.house_number, matched.street], ' '), matched.city, joinPresent([matched.state, matched.postcode], ' '), matched.country], ', ');\n  }\n  /**\n   * Convert a Seamless Maps `matched` address block (+ coordinate) into the\n   * address/position shape the rest of ADEPT IQ already consumes for TomTom /\n   * Google / BeNomad results (see geocode service `geoCodingTomTomResult`).\n   *\n   * @param {object} matched  MatchedAddress from the API (fields may be null)\n   * @param {number} lat\n   * @param {number} lon\n   * @param {object} [extra]  { alias }\n   */\n\n\n  function toAddressResult(matched, lat, lon) {\n    let extra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const address = matched || {};\n    const streetNumber = clean(address.house_number);\n    const streetName = clean(address.street);\n    const city = clean(address.city);\n    const state = clean(address.state);\n    const country = clean(address.country);\n    const postalCode = clean(address.postcode);\n    const freeformAddress = formatMatchedAddress(address);\n    return {\n      address: {\n        freeformAddress,\n        beNomadAddress: freeformAddress,\n        state,\n        city,\n        street: streetName,\n        streetName,\n        streetNameAndNumber: joinPresent([streetNumber, streetName], ' '),\n        streetNumber,\n        localName: city,\n        municipality: city,\n        country,\n        countryCodeISO3: country,\n        countrySubdivisionName: state,\n        countrySecondarySubdivision: city,\n        locality: city,\n        postalCode,\n        alias: clean(extra.alias)\n      },\n      position: {\n        lat: parseFloat(lat),\n        lon: parseFloat(lon)\n      }\n    };\n  }\n\n  function candidateToResult(candidate) {\n    if (Ember.isNone(candidate) || Ember.isNone(candidate.lat) || Ember.isNone(candidate.lon)) return null;\n    const poi = candidate.poi;\n    const alias = poi && typeof poi === 'object' ? poi.name : poi;\n    return toAddressResult(candidate.matched, candidate.lat, candidate.lon, {\n      alias\n    });\n  } // Reverse matches farther than this from the search hit are not trusted to\n  // describe the same place (a POI's civic address is normally within a few\n  // tens of metres; interpolated range hits sit on the same block).\n\n\n  const BACKFILL_MAX_DISTANCE_M = 250; // primary + alternates asked from the reverse endpoint when backfilling\n\n  const BACKFILL_REVERSE_LIMIT = 5;\n\n  function normalizeStreet(street) {\n    return clean(street).toLowerCase().replace(/\\s+/g, ' ');\n  }\n\n  function hasCandidateAddressGaps(candidate) {\n    const matched = candidate && candidate.matched || {};\n    return !clean(matched.street) || !clean(matched.postcode);\n  }\n\n  function isFullPostcode(postcode) {\n    return clean(postcode).replace(/\\s+/g, '').length >= 5;\n  } // primary + alternates of a reverse response, nearest first, within the cap\n\n\n  function reverseMatchesByDistance(reverseResponse) {\n    if (!reverseResponse) return [];\n    const entries = [reverseResponse].concat(reverseResponse.alternates || []);\n    return entries.filter(entry => entry && entry.matched && (Ember.isNone(entry.distance_m) || entry.distance_m <= BACKFILL_MAX_DISTANCE_M)).sort((a, b) => (Ember.isNone(a.distance_m) ? 0 : a.distance_m) - (Ember.isNone(b.distance_m) ? 0 : b.distance_m)).map(entry => entry.matched);\n  }\n  /**\n   * Fill the gaps in a search hit's `matched` block from the addresses returned\n   * by `/v1/geocode/reverse` at the same point.\n   *\n   * Search hits regularly lack fields ADEPT IQ requires before an address can\n   * be booked (the booking forms reject an address without a street or a\n   * postal code):\n   *   - POI hits (`method: \"poi\"`) carry the POI name but no street/number\n   *   - interpolated (`range_*`), `street_centroid` and even some\n   *     `address_point` hits carry no postcode\n   * The reverse lookup at the hit's coordinate has them, if not on its primary\n   * match (often the very same address point) then on one of its alternates a\n   * few metres away on the same street.\n   *\n   * Pure: takes the raw API objects, returns a new `matched` block (or the\n   * original when nothing usable is close enough). Exported for unit tests.\n   *\n   * @param {object} matched          MatchedAddress from the search hit\n   * @param {object} reverseResponse  GeocodeReverseResponse for the hit's lat/lon\n   * @returns {object} merged MatchedAddress\n   */\n\n\n  function mergeReverseMatch(matched, reverseResponse) {\n    const original = matched || {};\n    const nearby = reverseMatchesByDistance(reverseResponse);\n\n    if (!clean(original.street)) {\n      // POI / locality hit: adopt the civic address of the nearest building\n      const nearest = nearby.find(entry => clean(entry.street));\n      if (!nearest) return original;\n      const merged = Object.assign({}, original);\n      merged.street = nearest.street;\n      merged.house_number = nearest.house_number; // eslint-disable-line camelcase\n\n      if (!clean(merged.city)) merged.city = nearest.city;\n      if (!clean(merged.state)) merged.state = nearest.state;\n      if (!clean(merged.country)) merged.country = nearest.country;\n      if (!clean(merged.postcode)) merged.postcode = nearest.postcode;\n      return merged;\n    }\n\n    if (clean(original.postcode)) return original;\n    const sameStreet = nearby.filter(entry => {\n      return clean(entry.postcode) && normalizeStreet(entry.street) === normalizeStreet(original.street);\n    }); // prefer a full postal code (e.g. \"V7T 2Z3\") over a bare forward sortation\n    // area (\"V7T\") even when the latter is a few metres closer\n\n    const donor = sameStreet.find(entry => isFullPostcode(entry.postcode)) || sameStreet[0];\n    if (!donor) return original;\n    return Object.assign({}, original, {\n      postcode: donor.postcode\n    });\n  }\n\n  async function backfillCandidate(candidate) {\n    if (!hasCandidateAddressGaps(candidate)) return candidate;\n    let reverseResponse;\n\n    try {\n      reverseResponse = await request(REVERSE_PATH, {\n        lat: candidate.lat,\n        lng: candidate.lon,\n        limit: BACKFILL_REVERSE_LIMIT\n      });\n    } catch (error) {\n      console.warn('dds_map: could not backfill address from reverse geocode', error); // eslint-disable-line no-console\n\n      return candidate;\n    }\n\n    return Object.assign({}, candidate, {\n      matched: mergeReverseMatch(candidate.matched, reverseResponse)\n    });\n  }\n  /**\n   * Freeform address search.\n   *\n   * Hits missing a street or postal code are completed from a reverse lookup at\n   * their coordinate (see `mergeReverseMatch`); pass `backfill: false` to skip\n   * that when only coordinates are needed.\n   *\n   * @param {string} query\n   * @param {object} [options]  { lat, lng, limit, fuzziness, backfill }\n   * @returns {Promise<Array>} results in the shared address/position shape, best first\n   */\n\n\n  async function geocodeSearch(query) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const response = await request(SEARCH_PATH, {\n      q: query,\n      lat: options.lat,\n      lng: options.lng,\n      fuzziness: options.fuzziness\n    });\n    let candidates = [response.primary].concat(response.alternates || []).filter(candidate => !Ember.isNone(candidate) && !Ember.isNone(candidate.lat) && !Ember.isNone(candidate.lon));\n    if (options.limit) candidates = candidates.slice(0, options.limit);\n\n    if (options.backfill !== false) {\n      candidates = await Promise.all(candidates.map(backfillCandidate));\n    }\n\n    return candidates.map(candidateToResult).filter(result => !Ember.isNone(result));\n  }\n  /**\n   * Reverse geocode. A missing postcode is completed from the closest\n   * same-street alternate (see `mergeReverseMatch`).\n   *\n   * @param {number} lat\n   * @param {number} lng\n   * @param {object} [options]  { limit }\n   * @returns {Promise<object|null>} best match in the shared address/position shape\n   */\n\n\n  async function reverseGeocode(lat, lng) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    // ask for alternates as well: the nearest match is regularly an address\n    // point without a postcode while its neighbours on the same street have one\n    const response = await request(REVERSE_PATH, {\n      lat,\n      lng,\n      limit: options.limit || BACKFILL_REVERSE_LIMIT\n    });\n    const matched = mergeReverseMatch(response.matched || {}, response);\n    const hasMatch = Object.keys(matched).some(key => Ember.isPresent(matched[key]));\n    if (!hasMatch && Ember.isNone(response.lat)) return null;\n    const resultLat = Ember.isNone(response.lat) ? lat : response.lat;\n    const resultLon = Ember.isNone(response.lon) ? lng : response.lon;\n    return toAddressResult(matched, resultLat, resultLon);\n  }\n  /**\n   * Convert an autocomplete suggestion into the search-candidate shape\n   * ({lat, lon, matched, poi}) so it can share the backfill / result mapping of\n   * `geocodeSearch`. Suggestions carry a structured `address` block (live API,\n   * not yet in the published schema); state and country come from `ref`.\n   * Exported for unit tests.\n   *\n   * @param {object} suggestion  AutocompleteSuggestion from the API\n   * @returns {object|null}\n   */\n\n\n  function suggestionToCandidate(suggestion) {\n    if (Ember.isNone(suggestion) || Ember.isNone(suggestion.lat) || Ember.isNone(suggestion.lon)) return null;\n    const address = suggestion.address || {};\n    const ref = suggestion.ref || {};\n    const isPoi = suggestion.kind === 'poi'; // for streets `admin_label` is the city; for POIs it is the full civic address\n\n    const city = clean(address.city) || clean(address.municipality) || (isPoi ? '' : clean(suggestion.admin_label));\n    return {\n      lat: suggestion.lat,\n      lon: suggestion.lon,\n      poi: isPoi ? suggestion.label : null,\n      matched: {\n        house_number: clean(address.house_number) || clean(suggestion.house_number),\n        // eslint-disable-line camelcase\n        street: clean(address.street) || (isPoi ? '' : clean(suggestion.label)),\n        city,\n        state: clean(ref.a1),\n        postcode: clean(address.postcode),\n        country: clean(ref.country)\n      }\n    };\n  }\n\n  const EARTH_RADIUS_M = 6371008.8;\n\n  function toRadians(degrees) {\n    return degrees * Math.PI / 180;\n  } // great-circle distance in metres\n\n\n  function haversineDistance(lat1, lon1, lat2, lon2) {\n    const dLat = toRadians(lat2 - lat1);\n    const dLon = toRadians(lon2 - lon1);\n    const a = Math.sin(dLat / 2) ** 2 + Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2)) * Math.sin(dLon / 2) ** 2;\n    return 2 * EARTH_RADIUS_M * Math.asin(Math.sqrt(a));\n  }\n  /**\n   * Autocomplete radius (metres) that covers a site's bounding box: the distance\n   * from the center to the farthest corner, rounded up.\n   *\n   * @param {object} center       {lat, lon}, e.g. map service `center`\n   * @param {Array} boundingBox   [[lon, lat], ...], e.g. map service `boundingBox`\n   * @returns {number|null} null when either is missing\n   */\n\n\n  function radiusFromBoundingBox(center, boundingBox) {\n    if (Ember.isNone(center) || Ember.isNone(center.lat) || Ember.isNone(center.lon) || !Array.isArray(boundingBox)) return null;\n    const distances = boundingBox.filter(point => Array.isArray(point) && !Ember.isNone(point[0]) && !Ember.isNone(point[1])).map(_ref => {\n      let [lon, lat] = _ref;\n      return haversineDistance(center.lat, center.lon, lat, lon);\n    });\n    if (!distances.length) return null;\n    return Math.ceil(Math.max(...distances));\n  }\n  /**\n   * Typeahead address lookup: `/v1/geocode/autocomplete` suggestions in the\n   * shared address/position shape (same as `geocodeSearch`), for search-as-you-\n   * type fields such as the booking pickup / drop-off address.\n   *\n   * Suggestions missing a street or postal code are completed from a reverse\n   * lookup at their coordinate (see `mergeReverseMatch`); pass `backfill: false`\n   * to skip that.\n   *\n   * @param {string} query\n   * @param {object} [options]  { lat, lng, radius, limit, backfill }\n   * @returns {Promise<Array>} results in the shared address/position shape, best first\n   */\n\n\n  async function autocompleteAddresses(query) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const hasFocus = !Ember.isNone(options.lat) && !Ember.isNone(options.lng);\n    const response = await request(AUTOCOMPLETE_PATH, {\n      q: query,\n      lat: options.lat,\n      lng: options.lng,\n      // radius (metres) only means something around a focus point\n      radius: hasFocus ? options.radius : null,\n      limit: options.limit || getDdsMapAutocompleteLimit()\n    });\n    let candidates = (response.suggestions || []).map(suggestionToCandidate).filter(candidate => !Ember.isNone(candidate));\n\n    if (options.backfill !== false) {\n      candidates = await Promise.all(candidates.map(backfillCandidate));\n    }\n\n    return candidates.map(candidateToResult).filter(result => !Ember.isNone(result));\n  }\n  /**\n   * Address / POI suggestions for a partial query.\n   *\n   * @param {string} query\n   * @param {object} [options]  { lat, lng, limit }\n   * @returns {Promise<Array<{label: string, kind: string, position: {lat, lon}}>>}\n   */\n\n\n  async function autocomplete(query) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const response = await request(AUTOCOMPLETE_PATH, {\n      q: query,\n      lat: options.lat,\n      lng: options.lng,\n      limit: options.limit\n    });\n    return (response.suggestions || []).map(suggestion => {\n      return {\n        label: suggestion.label,\n        adminLabel: suggestion.admin_label || '',\n        kind: suggestion.kind,\n        position: {\n          lat: suggestion.lat,\n          lon: suggestion.lon\n        }\n      };\n    });\n  }\n});","define(\"adept-iq/utils/encoding\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.parseTime = _exports.parseString = _exports.parseNumber = _exports.parseInteger = _exports.parseDate = _exports.parseBoolean = _exports.isString = _exports.isNumber = _exports.isNonEmptyString = _exports.isEncodedTime = _exports.isEncodedNumber = _exports.isEncodedDate = _exports.isEncodedBoolean = _exports.isDate = _exports.TIME_PARSING_FORMATS = _exports.FORMAT_WITH_DATE_AND_TIME = void 0;\n  const TIME_PARSING_FORMATS = ['h:mm A', 'HH:mm'];\n  _exports.TIME_PARSING_FORMATS = TIME_PARSING_FORMATS;\n  const FORMAT_WITH_DATE_AND_TIME = 'YYYY-MM-DDTHH:mm:ss.SSS'; // strict type validations\n\n  _exports.FORMAT_WITH_DATE_AND_TIME = FORMAT_WITH_DATE_AND_TIME;\n\n  const isString = s => Ember.typeOf(s) === 'string';\n\n  _exports.isString = isString;\n\n  const isNumber = x => Ember.typeOf(x) === 'number' && !isNaN(x);\n\n  _exports.isNumber = isNumber;\n\n  const isDate = date => {\n    const prototypeString = Object.prototype.toString.call(date);\n    return prototypeString === '[object Date]' && !isNaN(date);\n  }; // used to check if a user-supplied string represents a valid filter value\n\n\n  _exports.isDate = isDate;\n\n  const isNonEmptyString = s => isString(s) && Ember.isPresent(s);\n\n  _exports.isNonEmptyString = isNonEmptyString;\n\n  const isEncodedBoolean = s => s === 'true' || s === 'false';\n\n  _exports.isEncodedBoolean = isEncodedBoolean;\n\n  const isEncodedNumber = s => isNonEmptyString(s) && !isNaN(parseFloat(s));\n\n  _exports.isEncodedNumber = isEncodedNumber;\n\n  const isEncodedDate = s => isNonEmptyString(s) && (0, _moment.default)(s).isValid();\n\n  _exports.isEncodedDate = isEncodedDate;\n\n  const isEncodedTime = s => {\n    return isNonEmptyString(s) && (0, _moment.default)(s, TIME_PARSING_FORMATS).isValid();\n  }; // use to coerce a string to the given type\n\n\n  _exports.isEncodedTime = isEncodedTime;\n\n  const parseString = str => str;\n\n  _exports.parseString = parseString;\n\n  const parseNumber = str => parseFloat(str);\n\n  _exports.parseNumber = parseNumber;\n\n  const parseInteger = str => parseInt(str, 10);\n\n  _exports.parseInteger = parseInteger;\n\n  const parseBoolean = str => str === 'true';\n\n  _exports.parseBoolean = parseBoolean;\n\n  const parseDate = str => (0, _moment.default)(str).toDate();\n\n  _exports.parseDate = parseDate;\n\n  const parseTime = (str, startDate) => {\n    if (startDate) {\n      const minutes = _moment.default.duration(str).asMinutes();\n\n      return (0, _moment.default)(startDate).startOf('day').add(minutes, 'minutes').toDate();\n    }\n\n    return (0, _moment.default)(str, TIME_PARSING_FORMATS).toDate();\n  };\n\n  _exports.parseTime = parseTime;\n});","define(\"adept-iq/utils/filter-functions\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stringStartsWithIFn = _exports.stringNeIFn = _exports.stringIncludesIFn = _exports.stringEqIFn = _exports.strictlyNotBetweenFn = _exports.strictlyBetweenFn = _exports.startsWithFn = _exports.nullFn = _exports.neFn = _exports.lteFn = _exports.ltFn = _exports.includesFn = _exports.gteFn = _exports.gtFn = _exports.eqFn = _exports.enumStNtEqIFn = _exports.enumStEqIFn = _exports.enumIncludesIFn = _exports.emptyFn = _exports.dateStrictlyBetweenFn = _exports.dateStrNeFn = _exports.dateNotBetweenFn = _exports.dateLteFn = _exports.dateIncludesLteFn = _exports.dateIncludesIFn = _exports.dateIncludesGteFn = _exports.dateGtFn = _exports.dateBetweenFn = _exports.dateAndTimeStrEqFn = _exports.dateAndTimeNeFn = _exports.dateAndTimeLteFn = _exports.dateAndTimeLtFn = _exports.dateAndTimeGteFn = _exports.dateAndTimeGtFn = _exports.dateAndTimeEqFn = _exports.betweenFn = void 0;\n\n  const nullFn = () => true;\n\n  _exports.nullFn = nullFn;\n  const emptyFn = Ember.isBlank;\n  _exports.emptyFn = emptyFn;\n\n  const eqFn = (a, _ref) => {\n    let [b] = _ref;\n    return a === b;\n  };\n\n  _exports.eqFn = eqFn;\n\n  const neFn = (a, _ref2) => {\n    let [b] = _ref2;\n    return a !== b;\n  };\n\n  _exports.neFn = neFn;\n\n  const includesFn = (a, _ref3) => {\n    let [b] = _ref3;\n\n    if (!a || !a.includes || !b) {\n      return false;\n    }\n\n    return a.includes(b);\n  };\n\n  _exports.includesFn = includesFn;\n\n  const startsWithFn = (a, _ref4) => {\n    let [b] = _ref4;\n\n    if (!a || !a.startsWith || !b) {\n      return false;\n    }\n\n    return a.startsWtih(b);\n  };\n\n  _exports.startsWithFn = startsWithFn;\n\n  const ltFn = (a, _ref5) => {\n    let [b] = _ref5;\n    return a < b;\n  };\n\n  _exports.ltFn = ltFn;\n\n  const lteFn = (a, _ref6) => {\n    let [b] = _ref6;\n    return a <= b;\n  };\n\n  _exports.lteFn = lteFn;\n\n  const gtFn = (a, _ref7) => {\n    let [b] = _ref7;\n    return a > b;\n  };\n\n  _exports.gtFn = gtFn;\n\n  const gteFn = (a, _ref8) => {\n    let [b] = _ref8;\n    return a >= b;\n  };\n\n  _exports.gteFn = gteFn;\n\n  const betweenFn = (a, _ref9) => {\n    let [b, c] = _ref9;\n    return b <= a && a <= c;\n  };\n\n  _exports.betweenFn = betweenFn;\n\n  const strictlyBetweenFn = (a, _ref10) => {\n    let [b, c] = _ref10;\n    return b < a && a < c;\n  };\n\n  _exports.strictlyBetweenFn = strictlyBetweenFn;\n\n  const strictlyNotBetweenFn = (a, _ref11) => {\n    let [b, c] = _ref11;\n    return b > a || a > c;\n  };\n\n  _exports.strictlyNotBetweenFn = strictlyNotBetweenFn;\n\n  function isValidDate(d1, d2) {\n    const momentA = (0, _moment.default)(d1);\n    const momentB = (0, _moment.default)(d2);\n    if (!momentA.isValid() && !momentB.isValid()) return false;\n    return true;\n  }\n\n  function toDate(a, b) {\n    const dateA = Ember.typeOf(a) === 'date' ? a : new Date(a);\n    const dateB = Ember.typeOf(b) === 'date' ? b : new Date(b);\n    return {\n      dateA,\n      dateB\n    };\n  }\n\n  const isCorrectDateFormat = (dateString, format) => {\n    return (0, _moment.default)(dateString, format, true).isValid();\n  };\n\n  const dateAndTimeEqFn = (a, _ref12) => {\n    let [b] = _ref12;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() === dateB.getTime();\n  };\n\n  _exports.dateAndTimeEqFn = dateAndTimeEqFn;\n\n  const dateAndTimeStrEqFn = (a, _ref13, format) => {\n    let [b] = _ref13;\n\n    if (Ember.isBlank(a) || Ember.isBlank(b)) {\n      return false;\n    }\n\n    if (Ember.typeOf(a) !== 'date' && !(0, _moment.default)(a).isValid()) {\n      return false;\n    }\n\n    const aStr = (0, _moment.default)(a).format(format);\n\n    if (!isCorrectDateFormat(b, format)) {\n      // eslint-disable-next-line no-use-before-define\n      return stringIncludesIFn(aStr, [b]);\n    }\n\n    const bStr = (0, _moment.default)(b, format).format(format); // handle any date inputs\n\n    return includesFn(aStr, [bStr]);\n  };\n\n  _exports.dateAndTimeStrEqFn = dateAndTimeStrEqFn;\n\n  const dateAndTimeNeFn = (a, _ref14) => {\n    let [b] = _ref14;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() !== dateB.getTime();\n  };\n\n  _exports.dateAndTimeNeFn = dateAndTimeNeFn;\n\n  const dateStrNeFn = (a, _ref15, format) => {\n    let [b] = _ref15;\n\n    if (Ember.isBlank(a) || Ember.isBlank(b)) {\n      return false;\n    }\n\n    if (Ember.typeOf(a) !== 'date') {\n      return false;\n    }\n\n    const aStr = (0, _moment.default)(a).format(format);\n\n    if (!isCorrectDateFormat(b, format)) {\n      return aStr !== b;\n    }\n\n    const bStr = (0, _moment.default)(b).format(format); // handle any date inputs\n\n    return aStr !== bStr;\n  };\n\n  _exports.dateStrNeFn = dateStrNeFn;\n\n  const dateAndTimeLtFn = (a, _ref16) => {\n    let [b] = _ref16;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() < dateB.getTime();\n  };\n\n  _exports.dateAndTimeLtFn = dateAndTimeLtFn;\n\n  const dateLteFn = (a, _ref17) => {\n    let [b] = _ref17;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() <= dateB.getTime();\n  };\n\n  _exports.dateLteFn = dateLteFn;\n\n  const dateGtFn = (a, _ref18) => {\n    let [b] = _ref18;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() > dateB.getTime();\n  };\n\n  _exports.dateGtFn = dateGtFn;\n\n  const dateAndTimeLteFn = (a, _ref19) => {\n    let [b] = _ref19;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() <= dateB.getTime();\n  };\n\n  _exports.dateAndTimeLteFn = dateAndTimeLteFn;\n\n  const dateAndTimeGtFn = (a, _ref20) => {\n    let [b] = _ref20;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() > dateB.getTime();\n  };\n\n  _exports.dateAndTimeGtFn = dateAndTimeGtFn;\n\n  const dateAndTimeGteFn = (a, _ref21) => {\n    let [b] = _ref21;\n    if (!isValidDate(a, b)) return false;\n    const {\n      dateA,\n      dateB\n    } = toDate(a, b);\n    return dateA && dateB && dateA.getTime() >= dateB.getTime();\n  };\n\n  _exports.dateAndTimeGteFn = dateAndTimeGteFn;\n\n  const dateBetweenFn = (t, _ref22) => {\n    let [t0, t1] = _ref22;\n    return dateAndTimeGteFn(t, [t0]) && dateAndTimeLteFn(t, [t1]);\n  };\n\n  _exports.dateBetweenFn = dateBetweenFn;\n\n  const dateStrictlyBetweenFn = (t, _ref23) => {\n    let [t0, t1] = _ref23;\n    return dateAndTimeGtFn(t, [t0]) && dateAndTimeLtFn(t, [t1]);\n  };\n\n  _exports.dateStrictlyBetweenFn = dateStrictlyBetweenFn;\n\n  const dateNotBetweenFn = (t, _ref24) => {\n    let [t0, t1] = _ref24;\n    return dateAndTimeLtFn(t, [t0]) || dateAndTimeGtFn(t, [t1]);\n  }; // case-insensitive string functions\n\n\n  _exports.dateNotBetweenFn = dateNotBetweenFn;\n\n  const stringEqIFn = (a, _ref25) => {\n    let [b] = _ref25;\n\n    if (Ember.typeOf(a) !== 'string' || Ember.typeOf(b) !== 'string') {\n      return false;\n    }\n\n    return eqFn(a.toLowerCase(), [b.toLowerCase()]);\n  };\n\n  _exports.stringEqIFn = stringEqIFn;\n\n  const stringNeIFn = (a, _ref26) => {\n    let [b] = _ref26;\n\n    if (Ember.typeOf(a) !== 'string' || Ember.typeOf(b) !== 'string') {\n      return false;\n    }\n\n    return neFn(a.toLowerCase(), [b.toLowerCase()]);\n  };\n\n  _exports.stringNeIFn = stringNeIFn;\n\n  const stringIncludesIFn = (a, _ref27) => {\n    let [b] = _ref27;\n\n    if (Ember.typeOf(a) !== 'string' || Ember.typeOf(b) !== 'string') {\n      return false;\n    }\n\n    return includesFn(a.toLowerCase(), [b.toLowerCase()]);\n  };\n\n  _exports.stringIncludesIFn = stringIncludesIFn;\n\n  const enumIncludesIFn = (a, _ref28) => {\n    let [b] = _ref28;\n\n    if (typeof a !== 'object' || typeof b !== 'string') {\n      return false;\n    }\n\n    return a.values().some(obj => includesFn(obj.value.toLowerCase(), [b.toLowerCase()]));\n  };\n\n  _exports.enumIncludesIFn = enumIncludesIFn;\n\n  const stringStartsWithIFn = (a, _ref29) => {\n    let [b] = _ref29;\n\n    if (Ember.typeOf(a) !== 'string' || Ember.typeOf(b) !== 'string') {\n      return false;\n    }\n\n    return startsWithFn(a.toLowerCase(), [b.toLowerCase()]);\n  };\n\n  _exports.stringStartsWithIFn = stringStartsWithIFn;\n\n  const enumStEqIFn = (a, _ref30) => {\n    let [b] = _ref30;\n\n    if (typeof a !== 'object' || typeof b !== 'string') {\n      return false;\n    }\n\n    return a.values().every(obj => eqFn(obj.value.toLowerCase(), [b.toLowerCase()]));\n  };\n\n  _exports.enumStEqIFn = enumStEqIFn;\n\n  const enumStNtEqIFn = (a, _ref31) => {\n    let [b] = _ref31;\n\n    if (typeof a !== 'object' || typeof b !== 'string') {\n      return false;\n    }\n\n    return a.values().every(obj => neFn(obj.value.toLowerCase(), [b.toLowerCase()]));\n  };\n\n  _exports.enumStNtEqIFn = enumStNtEqIFn;\n\n  const dateIncludesIFn = (a, _ref32, format) => {\n    let [b] = _ref32;\n\n    if (typeof a !== 'object' || typeof b !== 'string') {\n      return false;\n    }\n\n    const header = a.header || '';\n    return a.values().some(obj => dateAndTimeStrEqFn(obj.value, [b], format)) || dateAndTimeStrEqFn(header, [b], format);\n  };\n\n  _exports.dateIncludesIFn = dateIncludesIFn;\n\n  const dateIncludesGteFn = (a, _ref33) => {\n    let [b] = _ref33;\n\n    if (typeof a !== 'object' || typeof b !== 'string') {\n      return false;\n    }\n\n    const header = a.header || '';\n    return a.values().some(obj => dateAndTimeGteFn(obj.value, [b])) || dateAndTimeGteFn(header, [b]);\n  };\n\n  _exports.dateIncludesGteFn = dateIncludesGteFn;\n\n  const dateIncludesLteFn = (a, _ref34) => {\n    let [b] = _ref34;\n\n    if (typeof a !== 'object' || typeof b !== 'string') {\n      return false;\n    }\n\n    const header = a.header || '';\n    return a.values().some(obj => dateAndTimeLteFn(obj.value, [b])) || dateAndTimeLteFn(header, [b]);\n  };\n\n  _exports.dateIncludesLteFn = dateIncludesLteFn;\n});","define(\"adept-iq/utils/filters\", [\"exports\", \"adept-iq/config/filter-types\"], function (_exports, _filterTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.applyFilterByID = applyFilterByID;\n  _exports.applyFilterConversion = applyFilterConversion;\n  _exports.applyFilterConversionToID = applyFilterConversionToID;\n  _exports.buildCompoundFilterNode = void 0;\n  _exports.buildFilterFunction = buildFilterFunction;\n  _exports.buildValueFilterNode = void 0;\n  _exports.generateFilterName = generateFilterName;\n  _exports.testFilterValues = testFilterValues;\n\n  const alwaysTrue = () => true;\n\n  function testFilterValues(filterType, values) {\n    if (!filterType || filterType === _filterTypes.nullFilter) return false;\n    const {\n      arity,\n      isValue,\n      parseValue,\n      validateValues\n    } = filterType;\n\n    if (!values) {\n      if (arity === '+') return false;\n      if (Ember.typeOf(arity) === 'number' && arity > 0) return false;\n      if (validateValues) return validateValues([]);\n      return true;\n    }\n\n    if (arity === '+' && values.length === 0) return false;\n    if (Ember.typeOf(arity) === 'number' && values.length < arity) return false;\n    let args = values.slice(0, arity);\n    if (isValue && !args.every(isValue)) return false;\n\n    if (parseValue) {\n      args = args.map(parseValue);\n    }\n\n    if (validateValues) return validateValues(args);\n    return true;\n  }\n\n  const buildValueFilterNode = (filterType, path, values, dateFormat) => {\n    if (!filterType || filterType === _filterTypes.nullFilter) return null;\n    /*eslint-disable */\n\n    if (Ember.isNone(values)) {\n      values = [];\n    } else if (Ember.typeOf(values) !== 'array') {\n      values = [values];\n    }\n    /*eslint-enable */\n\n\n    const filterTypeFromHash = _filterTypes.filterTypesHash[filterType.id];\n    const isValue = filterTypeFromHash.isValue;\n    const parseValue = filterTypeFromHash.parseValue;\n\n    if (filterType.id === 'booleanEq') {\n      if (isValue(values[0])) {\n        const coercedValue = parseValue(values[0]); // eslint-disable-next-line no-param-reassign\n\n        values = [coercedValue];\n      }\n    }\n\n    if (filterType.id === 'numberEq') {\n      if (isValue(values[0])) {\n        const coercedValue = parseValue(values[0]); // eslint-disable-next-line no-param-reassign\n\n        values = [coercedValue];\n      }\n    }\n\n    return {\n      type: filterType.id,\n      rql: {\n        path,\n        values\n      },\n      local: {\n        dateFormat,\n        path,\n        values\n      }\n    };\n  };\n\n  _exports.buildValueFilterNode = buildValueFilterNode;\n\n  const buildCompoundFilterNode = (type, args) => {\n    if (Ember.isEmpty(args)) return null;\n    /*eslint-disable */\n\n    args = args.compact();\n    /*eslint-enable */\n\n    if (args.length === 0) return null;\n    if (args.length === 1) return args[0];\n    return {\n      type,\n      args\n    };\n  };\n\n  _exports.buildCompoundFilterNode = buildCompoundFilterNode;\n\n  const buildValueFilterFunction = node => {\n    if (!node || !node.local) return alwaysTrue;\n    const {\n      type,\n      local: {\n        dateFormat,\n        path,\n        values\n      }\n    } = node;\n    const filterType = _filterTypes.filterTypesHash[type];\n    const fn = filterType.fn;\n    const formatTargetValue = filterType.formatTargetValue;\n\n    const filterFunction = x => {\n      const value = x.get ? x.get(path) : x[path];\n      const targetValue = formatTargetValue ? formatTargetValue(value, dateFormat) : value;\n      return fn(targetValue, values, dateFormat);\n    };\n\n    return filterFunction;\n  };\n\n  const buildCompoundFilterFunction = _ref => {\n    let {\n      type,\n      args\n    } = _ref;\n    if (!args) return alwaysTrue;\n    /*eslint-disable */\n\n    const functions = args.map(buildFilterFunction).compact();\n    /*eslint-enable */\n\n    if (functions.length === 0) return alwaysTrue;\n    if (functions.length === 1) return functions[0];\n\n    switch (type) {\n      case 'and':\n        return x => functions.every(f => f(x));\n\n      case 'or':\n        return x => functions.any(f => f(x));\n\n      default:\n        /*eslint-disable */\n        throw 'invalid compound filter type';\n\n      /*eslint-enable */\n    }\n  };\n\n  function buildFilterFunction(node) {\n    if (!node) return alwaysTrue;\n\n    switch (node.type) {\n      case 'and':\n      case 'or':\n        return buildCompoundFilterFunction(node);\n\n      default:\n        return buildValueFilterFunction(node);\n    }\n  }\n\n  function generateFilterName(names) {\n    let filterName;\n    let foundName = false;\n    let index = 0;\n\n    do {\n      index = index + 1;\n      filterName = `Filter ${index}`;\n      foundName = !names.includes(filterName);\n    } while (!foundName);\n\n    return filterName;\n  }\n\n  function applyFilterConversion(filterValues, filterType, modelTypeMapper) {\n    const filterValue = filterValues[0].trim().toLowerCase();\n    const modelTypes = modelTypeMapper.filter(record => {\n      if (filterType === _filterTypes.enumEq.id) {\n        return record.displayName === filterValue;\n      }\n\n      if (filterType === _filterTypes.enumNotEq.id) {\n        return record.displayName === filterValue;\n      }\n\n      if (filterType === _filterTypes.enumContains.id) {\n        return record.displayName.includes(filterValue);\n      }\n\n      return null;\n    });\n    return modelTypes.map(object => object.id);\n  }\n\n  function applyFilterConversionToID(filterValues, filterType, modelTypeMapper) {\n    const filterValue = filterType === _filterTypes.enumStringEq.id ? filterValues[0] : filterValues[0].trim().toLowerCase();\n    const modelTypes = modelTypeMapper.filter(record => {\n      if (filterType === _filterTypes.enumStringEq.id) {\n        return filterValue.includes(record.name);\n      }\n\n      if (filterType === _filterTypes.enumEq.id) {\n        return record.displayName === filterValue;\n      }\n\n      if (filterType === _filterTypes.enumNotEq.id) {\n        return record.displayName === filterValue;\n      }\n\n      if (filterType === _filterTypes.enumContains.id) {\n        return record.displayName.includes(filterValue);\n      }\n\n      if (filterType === _filterTypes.stringEq.id) {\n        return record.displayName === filterValue;\n      }\n\n      if (filterType === _filterTypes.stringContains.id) {\n        return record.displayName.includes(filterValue);\n      }\n\n      if (filterType === _filterTypes.stringStartsWith.id) {\n        return record.displayName.startsWith(filterValue);\n      }\n\n      return null;\n    });\n    return modelTypes.map(object => object.id);\n  }\n\n  function applyFilterByID(filterValues, filterType, modelTypeMapper) {\n    const filterValue = filterType === _filterTypes.enumStringEq.id ? filterValues[0] : filterValues[0].trim().toLowerCase();\n    const modelTypes = modelTypeMapper.filter(record => {\n      if (filterType === _filterTypes.enumStringEq.id) {\n        return filterValue.includes(record.idLowerCase);\n      }\n\n      if (filterType === _filterTypes.enumEq.id) {\n        return record.idLowerCase === filterValue;\n      }\n\n      if (filterType === _filterTypes.enumNotEq.id) {\n        return record.idLowerCase === filterValue;\n      }\n\n      if (filterType === _filterTypes.enumContains.id) {\n        return record.idLowerCase.includes(filterValue);\n      }\n\n      if (filterType === _filterTypes.stringEq.id) {\n        return record.idLowerCase === filterValue;\n      }\n\n      if (filterType === _filterTypes.stringContains.id) {\n        return record.idLowerCase.includes(filterValue);\n      }\n\n      return null;\n    });\n    return modelTypes.map(object => object.id);\n  }\n});","define(\"adept-iq/utils/find-row-record\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.findRowElement = findRowElement;\n  _exports.findRowRecordByElement = findRowRecordByElement;\n\n  function findRowElement(targetElement) {\n    while (targetElement.tagName.toLowerCase() !== 'tr' && targetElement.tagName.toLowerCase() !== 'body') {\n      /*eslint-disable */\n      targetElement = targetElement.parentElement;\n      /*eslint-enable */\n    }\n\n    return targetElement.tagName.toLowerCase() === 'tr' ? targetElement : null;\n  }\n\n  function findRowRecordByElement(targetElement, tableRows) {\n    const rowElement = findRowElement(targetElement);\n\n    if (Ember.isBlank(rowElement)) {\n      return;\n    }\n\n    const node = rowElement.attributes.getNamedItem('data-row-id');\n\n    if (Ember.isBlank(node)) {\n      return;\n    }\n\n    return tableRows.findBy('rowId', node.value);\n  }\n});","define(\"adept-iq/utils/flattenData\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.flattenData = void 0;\n\n  const flattenData = data => {\n    return Object.entries(data).reduce((arr, _ref) => {\n      let [modelName, records] = _ref;\n      records.forEach(record => {\n        arr.push({\n          modelName,\n          record\n        });\n      });\n      return arr;\n    }, []);\n  };\n\n  _exports.flattenData = flattenData;\n});","define(\"adept-iq/utils/format-function\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.getDateRangeForSearch = _exports.formatTargetTimeValue = _exports.formatPhoneNumber = _exports.formatEnumValue = void 0;\n\n  const formatTargetTimeValue = (targetValue, dateFormat) => {\n    const targetDateStr = (0, _moment.default)(targetValue).format(dateFormat);\n    const targetDate = (0, _moment.default)(targetDateStr, dateFormat);\n    return targetDate.isValid() ? targetDate.toDate() : targetValue;\n  };\n\n  _exports.formatTargetTimeValue = formatTargetTimeValue;\n\n  const formatEnumValue = targetValue => {\n    if (typeof targetValue !== 'object') {\n      return targetValue;\n    }\n\n    const length = targetValue.values.filter(val => val.className === 'valueItem').length;\n    const value = `${length} ${targetValue.fieldName}`;\n    return value;\n  };\n\n  _exports.formatEnumValue = formatEnumValue;\n\n  const getDateRangeForSearch = (fromDt, toDt) => {\n    let finalFromDate = null;\n    let finalToDate = null;\n\n    if (fromDt) {\n      finalFromDate = (0, _moment.default)(fromDt).startOf('day');\n      finalToDate = toDt ? (0, _moment.default)(toDt).endOf('day') : (0, _moment.default)(fromDt).endOf('day');\n    }\n\n    return {\n      startDate: (0, _moment.default)(finalFromDate).toISOString(),\n      endDate: (0, _moment.default)(finalToDate).toISOString()\n    };\n  };\n\n  _exports.getDateRangeForSearch = getDateRangeForSearch;\n\n  const formatPhoneNumber = (areaCode, phoneNumber, extension) => {\n    const phone = phoneNumber.match(/\\d{3}(?=\\d{2,3})|\\d+/g).join('-');\n\n    if (extension) {\n      return `(${areaCode}) ${phone}-#${extension}`;\n    }\n\n    return `(${areaCode}) ${phone}`;\n  };\n\n  _exports.formatPhoneNumber = formatPhoneNumber;\n});","define(\"adept-iq/utils/format-text-extension\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.convertToPascalCase = _exports.convertToCapitalize = void 0;\n  _exports.formatTextExtension = formatTextExtension;\n\n  function formatTextExtension(className, value) {\n    return {\n      className: className,\n      value: value\n    };\n  }\n\n  const convertToPascalCase = str => {\n    if (str) {\n      return str.replace(/\\w\\S*/g, s => {\n        if (s) {\n          return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();\n        }\n      });\n    }\n\n    return null;\n  };\n\n  _exports.convertToPascalCase = convertToPascalCase;\n\n  const convertToCapitalize = str => {\n    if (typeof str !== 'string') return null;\n\n    if (str && str.trim()) {\n      return str.charAt(0).toUpperCase() + str.slice(1);\n    }\n\n    return null;\n  };\n\n  _exports.convertToCapitalize = convertToCapitalize;\n});","define(\"adept-iq/utils/generate-unique-id\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.uniqueId = uniqueId;\n\n  function uniqueId() {\n    let IdLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');\n    let filteredAlphabet = ALPHABET;\n    let res = '';\n    const {\n      usedChars\n    } = options;\n    if (usedChars) filteredAlphabet = ALPHABET.filter(char => !usedChars[char]);\n    if (!filteredAlphabet.length) return null;\n    filteredAlphabet = filteredAlphabet.join('');\n\n    for (let i = 0; i < IdLength; i++) {\n      res += filteredAlphabet.charAt(Math.floor(Math.random() * ALPHABET.length));\n    }\n\n    return res;\n  }\n});","define(\"adept-iq/utils/geolib\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.toGeolib = _exports.projectPointOnPolyline = _exports.projectPointOnLine = _exports.projectDistanceOnPolyline = _exports.getHeading = _exports.getDistance = _exports.geolib = _exports.fromGeolib = _exports.computePolylineSegments = _exports.computePolylineLength = void 0;\n  const EPSILON = 1.0e-10;\n  const geolib = window.geolib;\n  _exports.geolib = geolib;\n\n  const toGeolib = p => {\n    if (!p) return {\n      latitude: null,\n      longitude: null\n    };\n    const latitude = Array.isArray(p) ? p[0] : p.latitude || p.lat;\n    const longitude = Array.isArray(p) ? p[1] : p.longitude || p.lng || p.lon;\n    return {\n      latitude,\n      longitude\n    };\n  };\n\n  _exports.toGeolib = toGeolib;\n\n  const fromGeolib = p => [p.latitude, p.longitude];\n\n  _exports.fromGeolib = fromGeolib;\n\n  const getDistance = (a, b) => geolib.getDistance(a, b, EPSILON);\n\n  _exports.getDistance = getDistance;\n\n  const getHeading = (a, b) => {\n    return geolib.getRhumbLineBearing(toGeolib(a), toGeolib(b));\n  };\n\n  _exports.getHeading = getHeading;\n\n  const computePolylineLength = polyline => {\n    return geolib.getPathLength(polyline.map(toGeolib));\n  };\n\n  _exports.computePolylineLength = computePolylineLength;\n\n  const computePolylineSegments = polyline => {\n    const segments = [];\n    let start = 0;\n\n    for (let i = 0; i < polyline.length - 1; i++) {\n      const a = toGeolib(polyline[i]);\n      const b = toGeolib(polyline[i + 1]);\n      let length = 0;\n\n      if (a.latitude && a.longitude && b.latitude && b.longitude) {\n        length = geolib.getDistance(a, b, EPSILON);\n      }\n\n      segments.push({\n        points: [polyline[i], polyline[i + 1]],\n        bearing: geolib.getRhumbLineBearing(a, b),\n        length,\n        start,\n        stop: start + length,\n        isSegment: true\n      });\n      start += length;\n    }\n\n    segments.isSegmentArray = true;\n    return segments;\n  };\n\n  _exports.computePolylineSegments = computePolylineSegments;\n\n  const projectPointOnLine = (point, line) => {\n    const segment = line.isSegment ? line : computePolylineSegments(line)[0];\n    const gp = toGeolib(point);\n    const ga = toGeolib(segment.points[0]);\n\n    if (segment.length < EPSILON) {\n      return {\n        distance: geolib.getDistance(gp, ga),\n        offset: 0,\n        point: segment.points[0],\n        segment\n      };\n    }\n\n    const gb = toGeolib(segment.points[1]);\n    const d1 = geolib.getDistance(ga, gp, EPSILON);\n    const d2 = geolib.getDistance(gp, gb, EPSILON);\n    const d3 = segment.length;\n\n    if (d1 < EPSILON) {\n      return {\n        distance: 0,\n        offset: 0,\n        point: segment.points[0],\n        segment\n      };\n    }\n\n    if (d2 < EPSILON) {\n      return {\n        distance: 0,\n        offset: segment.length,\n        point: segment.points[1],\n        segment\n      };\n    }\n\n    const clamp = function (x) {\n      let a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n      let b = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      return Math.min(Math.max(x, a), b);\n    }; // alpha is the angle between the line from start to point, and from start to end\n\n\n    const x1 = clamp((d1 * d1 + d3 * d3 - d2 * d2) / (2 * d1 * d3));\n    const alpha = Math.acos(x1); // beta is the angle between the line from end to point and from end to start //\n\n    const x2 = clamp((d2 * d2 + d3 * d3 - d1 * d1) / (2 * d2 * d3));\n    const beta = Math.acos(x2); // if the angle is greater than 90 degrees, then the minimum distance is the\n    // line from the start to the point\n\n    if (alpha > Math.PI / 2) {\n      return {\n        distance: d1,\n        offset: 0,\n        point: segment.points[0],\n        segment\n      };\n    }\n\n    if (beta > Math.PI / 2) {\n      // same for the beta\n      return {\n        distance: d2,\n        offset: segment.length,\n        point: segment.points[1],\n        segment\n      };\n    } // otherwise the minimum distance is achieved through a line perpendicular\n    // to the start-end line, which goes from the start-end line to the point\n\n\n    const dx = Math.cos(alpha) * d1;\n    const dy = Math.sin(alpha) * d1;\n    const dest = geolib.computeDestinationPoint(ga, dx, segment.bearing);\n    return {\n      distance: dy,\n      offset: dx,\n      point: fromGeolib(dest),\n      segment\n    };\n  };\n\n  _exports.projectPointOnLine = projectPointOnLine;\n\n  const projectPointOnPolyline = (point, polyline) => {\n    const segments = polyline.isSegmentArray ? polyline : computePolylineSegments(polyline);\n    const results = segments.reduce((arr, segment) => {\n      const projection = projectPointOnLine(point, segment);\n      arr.push(projection);\n      return arr;\n    }, []);\n    const [best] = results.sortBy('distance');\n    if (!best) return null;\n    return {\n      point: best.point,\n      distance: best.distance,\n      segmentOffset: best.offset,\n      bearing: best.segment.bearing,\n      segments,\n      // this is the _total_ offset from beginning of polyline\n      offset: best.segment.start + best.offset\n    };\n  };\n  /**\n    * Returns point on polyline paramaterized by distance d\n    * @param {double} d - distance along polyline in km\n    * @param {Polyline} polyline - array of lat/lng pairs\n    */\n\n\n  _exports.projectPointOnPolyline = projectPointOnPolyline;\n\n  const projectDistanceOnPolyline = (d, polyline) => {\n    const segments = polyline.isSegmentArray ? polyline : computePolylineSegments(polyline);\n    const segment = segments.find(s => s.start <= d && s.stop > d) || segments[segments.length - 1];\n    const segmentOffset = d - segment.start;\n    const destination = geolib.computeDestinationPoint(toGeolib(segment.points[0]), segmentOffset, segment.bearing);\n    return {\n      point: fromGeolib(destination),\n      segment,\n      segmentOffset,\n      bearing: segment.bearing,\n      offset: d\n    };\n  };\n\n  _exports.projectDistanceOnPolyline = projectDistanceOnPolyline;\n});","define(\"adept-iq/utils/get-bearing\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = getBearing;\n\n  function toRadians(angle) {\n    return angle / 180 * Math.PI;\n  }\n\n  function toDegrees(angle) {\n    return angle / Math.PI * 180;\n  } // SOURCE: https://www.igismap.com/formula-to-find-bearing-or-heading-angle-between-two-points-latitude-longitude/\n\n\n  function getBearing(points) {\n    const X = Math.cos(toRadians(points[1][0])) * Math.sin(toRadians(points[1][1] - points[0][1]));\n    const Y = Math.cos(toRadians(points[0][0])) * Math.sin(toRadians(points[1][0])) - Math.sin(toRadians(points[0][0])) * Math.cos(toRadians(points[1][0])) * Math.cos(toRadians(points[1][1] - points[0][1]));\n    const bearing = toDegrees(Math.atan2(X, Y));\n    return bearing;\n  }\n});","define(\"adept-iq/utils/graph\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.breadthFirstSearch = breadthFirstSearch;\n\n  function breadthFirstSearch(params) {\n    const {\n      queue = [],\n      visited = [],\n      getNeighbours,\n      visitNode\n    } = params;\n\n    while (queue.length > 0) {\n      const v = queue.shift();\n      if (visitNode) visitNode(v);\n      visited.push(v);\n      getNeighbours(v).reject(w => visited.includes(w)).forEach(w => queue.push(w));\n    }\n  }\n});","define(\"adept-iq/utils/guid\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.guid = void 0;\n\n  const guid = () => {\n    const S4 = () => {\n      return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);\n    };\n    /*eslint-disable */\n\n\n    return S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4();\n    /*eslint-enable */\n  };\n\n  _exports.guid = guid;\n});","define(\"adept-iq/utils/help-page-redirect\", [\"exports\", \"adept-iq/config/api-urls\"], function (_exports, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.helpRedirect = helpRedirect;\n  _exports.pdfMapping = _exports.htmlPageMapping = void 0;\n  const htmlPageMapping = {\n    overview: 'Overview.htm',\n    resetPassword: 'Reset_Your_Password.htm',\n    driversWidget: 'Manage_Driver_Records.htm',\n    vehiclesWidget: 'Manage_Vehicle_Records.htm',\n    routesWidget: 'Manage_Routes.htm',\n    tripsWidget: 'Manage_Trips.htm',\n    stopsWidget: 'Manage_Stops.htm',\n    subscriptionsWidget: 'Manage_Trip_Subscriptions.htm',\n    mapWidget: 'Use_the_Map.htm',\n    alertsWidget: 'Manage_an_Emergency_Alarm.htm',\n    messagesWidget: 'Manage_Messages.htm',\n    passengersWidget: 'Manage_Passengers.htm',\n    zonesWidget: 'Manage_Zone.htm',\n    usersWidget: 'Manage_Users.htm',\n    rolesWidget: 'Manage_Roles.htm',\n    filterSidePanel: 'Filter_Data_in_Widgets.htm',\n    filterMap: 'Filter_Data_on_Map.htm',\n    generatePrintWidget: 'Generate_Print-Out_of_Data_in_Widgets.htm',\n    configureWorkspace: 'Work_with_Widgets.htm',\n    setupUserAccount: 'Set_Up_User_Accounts.htm',\n    systemConfigurations: 'Set_Up_Configurations_in_ADEPTIQ.htm',\n    bookTripPassenger: 'Book_Trip_for_Passenger.htm',\n    editTrip: 'Edit_Trip.htm',\n    cancelTrip: 'Cancel_Trip.htm',\n    noShowTrip: 'Update_Trip_to_NoShow.htm',\n    tripTransfer: 'Move_a_Trip.htm',\n    manualAssignTrip: 'Assign_Trip_to_Route_Manually.htm',\n    activityLogs: 'Activity_Logs.htm',\n    startRoute: 'Start_Route.htm',\n    endRoute: 'End_Route.htm',\n    createRoute: 'Create_Route.htm',\n    addBreak: 'Add_Break_to_Route.htm',\n    addVehicle: 'Add_a_Vehicle_Record.htm',\n    addDriver: 'Add_a_Driver_Record.htm',\n    sendCannedMessage: 'Send_Canned_Messages_to_Driver.htm',\n    configViewGaugeChart: 'Config_View_Gauge_Chart.htm',\n    configViewBoxChart: 'Config_View_Box_Chart.htm',\n    configViewDonutChart: 'Config_View_Donut_Chart.htm',\n    configViewBarChart: 'Config_View_Bar_Chart.htm',\n    performStop: 'Perform_Pick_Drop_Stops_Manually.htm',\n    assignDriverVehicleRoute: 'Assign_Driver_Vehicle_to_Route.htm',\n    vehicleBreakdown: 'Report_Vehicle_Breakdown_Info.htm',\n    breakdownReplacement: 'Add_Breakdown_Replacement_Route.htm',\n    rescueReplacement: 'Create_Rescue_Replacement_Route.htm'\n  };\n  _exports.htmlPageMapping = htmlPageMapping;\n  const pdfMapping = {\n    'Rider Management': 'RiderManagement.pdf',\n    'Booking': 'Booking.pdf',\n    'Schedule': 'Scheduling.pdf',\n    'Dispatch': 'Dispatch.pdf',\n    'Driver & Vehicle Management_driver': 'SystemConfigurationDrivers.pdf',\n    'Driver & Vehicle Management_vehicle': 'SystemConfigurationVehicles.pdf',\n    'Reconcile': 'Reconcile.pdf',\n    'Permissions': 'Permissions.pdf',\n    'Playback': 'Playback.pdf',\n    'Reports': 'Reports.pdf',\n    'SystemConfig_route-master': 'SystemConfigurationRouteMaster.pdf',\n    'SystemConfig_places': 'SystemConfigurationPlaces.pdf'\n  };\n  _exports.pdfMapping = pdfMapping;\n\n  function doesFileExist(urlToFile) {\n    const xhr = new XMLHttpRequest();\n    xhr.open('HEAD', urlToFile, false);\n    xhr.send();\n\n    if (xhr.status === 404) {\n      return false;\n    }\n\n    return true;\n  }\n\n  function helpRedirect(componentName) {\n    if (Ember.isEmpty(componentName)) return;\n    const fileName = pdfMapping[componentName];\n    const url = `${_apiUrls.API.helpPage.host}/${encodeURIComponent(fileName)}`;\n    const result = doesFileExist(url);\n\n    if (result === true) {\n      window.open(url, '_blank');\n    } else {\n      window.open('/help-files/under_construction.html', '_blank');\n    }\n  }\n});","define(\"adept-iq/utils/isRouteAssignable\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.isRouteAssignable = isRouteAssignable;\n\n  function isRouteAssignable(route\n  /*, time*/\n  ) {\n    if (Ember.isNone(Ember.get(route, 'assignedVehicle'))) {\n      return false;\n    }\n\n    if (Ember.isNone(Ember.get(route, 'assignedDriver'))) {\n      return false;\n    }\n\n    if (Ember.isNone(route.get('clusters')) || route.get('clusters').length === 0) {\n      return false;\n    } //TODO need to see how we can get promise date\n\n    /*if (!isEmpty(vehicleRoutes)) {\n        const currentVR = vehicleRoutes.find((vr) => {\n            const { plannedStartTime, plannedEndTime } = getProperties(\n                vr,\n                'plannedStartTime',\n                'plannedEndTime'\n            );\n             return moment(plannedEndTime).isAfter(time) && moment(plannedStartTime).isBefore(time);\n        });\n         if (currentVR) {\n            const driverShifts = get(currentVR, 'driverShifts');\n             if (!isEmpty(driverShifts)) {\n                const currentDS = driverShifts.find((ds) => {\n                    const { plannedStartTime, plannedEndTime } = getProperties(\n                        ds,\n                        'plannedStartTime',\n                        'plannedEndTime'\n                    );\n                     return (\n                        moment(plannedEndTime).isAfter(time) &&\n                        moment(plannedStartTime).isBefore(time)\n                    );\n                });\n                 if (!isEmpty(currentDS)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }*/\n\n\n    return true;\n  }\n});","define(\"adept-iq/utils/location-validation\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.getDistanceBetweenFromLatLon = getDistanceBetweenFromLatLon;\n\n  function deg2rad(deg) {\n    return deg * (Math.PI / 180);\n  } // return miles form two points\n\n\n  function getDistanceBetweenFromLatLon(lat1, lon1, lat2, lon2) {\n    const R = 6371; // Radius of the earth in km\n\n    const MILES = 0.621371; // default miles for 1 KM\n\n    const dLat = deg2rad(lat2 - lat1); // deg2rad below\n\n    const dLon = deg2rad(lon2 - lon1);\n    const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n    const dist = R * c; // Distance in km\n\n    return dist * MILES;\n  }\n});","define(\"adept-iq/utils/map-provider\", [\"exports\", \"adept-iq/config/environment\", \"adept-iq/config/api-urls\"], function (_exports, _environment, _apiUrls) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.TOMTOM_MAP_PROVIDER = _exports.GOOGLE_MAP_PROVIDER = _exports.DDS_MAP_PROVIDER = _exports.BENOMAD_MAP_PROVIDER = void 0;\n  _exports.getMapProvider = getMapProvider;\n  _exports.isDdsMapProvider = isDdsMapProvider;\n  const GOOGLE_MAP_PROVIDER = 'google';\n  _exports.GOOGLE_MAP_PROVIDER = GOOGLE_MAP_PROVIDER;\n  const BENOMAD_MAP_PROVIDER = 'benomad';\n  _exports.BENOMAD_MAP_PROVIDER = BENOMAD_MAP_PROVIDER;\n  const TOMTOM_MAP_PROVIDER = 'tomtom';\n  _exports.TOMTOM_MAP_PROVIDER = TOMTOM_MAP_PROVIDER;\n  const DDS_MAP_PROVIDER = 'dds_map';\n  /**\n   * Resolves the active map provider (tiles, search, geocoding, reverse geocoding).\n   *\n   * `MAP_PROVIDER` in `app/config/api-urls.js` wins; when it is empty the legacy\n   * `ENV.APP.mapGeocodeAPI` from `config/environment.js` is used, so existing\n   * deployments keep behaving exactly as before.\n   *\n   * @returns {string} 'google' | 'benomad' | 'tomtom' | 'dds_map'\n   */\n\n  _exports.DDS_MAP_PROVIDER = DDS_MAP_PROVIDER;\n\n  function getMapProvider() {\n    const provider = _apiUrls.MAP_PROVIDER || _environment.default.APP.mapGeocodeAPI || BENOMAD_MAP_PROVIDER;\n    return `${provider}`.trim().toLowerCase();\n  }\n  /**\n   * @returns {boolean} true when DDS Seamless Maps (dds_map) is the active provider\n   */\n\n\n  function isDdsMapProvider() {\n    return getMapProvider() === DDS_MAP_PROVIDER;\n  }\n});","define(\"adept-iq/utils/mime-types\", [\"exports\", \"ember-hifi/utils/mime-types\"], function (_exports, _mimeTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(_exports, \"getMimeType\", {\n    enumerable: true,\n    get: function () {\n      return _mimeTypes.getMimeType;\n    }\n  });\n});","define(\"adept-iq/utils/mobile\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.isTouchDevice = void 0;\n  const isTouchDevice = Boolean(!!window && 'ontouchstart' in window);\n  _exports.isTouchDevice = isTouchDevice;\n});","define(\"adept-iq/utils/name-parser\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.parse = parse;\n\n  /**\n   * File created by bbarnum on 2/26/16.\n   *\n   * based on PHP Name Parser by Josh Fraser (joshfraser.com)\n   * http://www.onlineaspect.com/2009/08/17/splitting-names/\n   * ported to JavaScript by Mark Pemburn (pemburnia.com)\n   * https://github.com/joshfraser/JavaScript-Name-Parser/blob/master/parse-names.js\n   * released under Apache 2.0 license\n   *\n   */\n\n  /* eslint-disable no-param-reassign */\n  function removeIgnoredChars(word) {\n    // ignore periods\n    return word ? word.replace('.', '') : '';\n  }\n\n  function isSalutation(word) {\n    word = removeIgnoredChars(word).toLowerCase(); // returns normalized values\n\n    if (word === 'mr' || word === 'master' || word === 'mister') {\n      return 'Mr.';\n    } else if (word === 'mrs') {\n      return 'Mrs.';\n    } else if (word === 'miss' || word === 'ms') {\n      return 'Ms.';\n    } else if (word === 'dr') {\n      return 'Dr.';\n    } else if (word === 'rev') {\n      return 'Rev.';\n    } else if (word === 'fr') {\n      return 'Fr.';\n    }\n\n    return false;\n  } //  detect and format common suffixes\n\n\n  function isSuffix(word) {\n    word = removeIgnoredChars(word).toLowerCase(); // these are some common suffixes - what am I missing?\n\n    const suffixArray = ['I', 'II', 'III', 'IV', 'V', 'Senior', 'Junior', 'Jr', 'Sr', 'PhD', 'APR', 'RPh', 'PE', 'MD', 'MA', 'DMD', 'CME', 'BVM', 'CFRE', 'CLU', 'CPA', 'CSC', 'CSJ', 'DC', 'DD', 'DDS', 'DO', 'DVM', 'EdD', 'Esq', 'JD', 'LLD', 'OD', 'OSB', 'PC', 'Ret', 'RGS', 'RN', 'RNC', 'SHCJ', 'SJ', 'SNJM', 'SSMO', 'USA', 'USAF', 'USAFR', 'USAR', 'USCG', 'USMC', 'USMCR', 'USN', 'USNR'];\n    const suffixIndex = suffixArray.map(function (suffix) {\n      return suffix.toLowerCase();\n    }).indexOf(word);\n\n    if (suffixIndex >= 0) {\n      return suffixArray[suffixIndex];\n    }\n\n    return false;\n  } // detect compound last names like \"Von Fange\"\n\n\n  function isCompoundLastName(word) {\n    word = word.toLowerCase(); // these are some common prefixes that identify a compound last names - what am I missing?\n\n    const words = ['vere', 'von', 'van', 'de', 'del', 'della', 'di', 'da', 'pietro', 'vanden', 'du', 'st.', 'st', 'la', 'lo', 'ter'];\n    return words.indexOf(word) >= 0;\n  } // single letter, possibly followed by a period\n\n\n  function isInitial(word) {\n    word = removeIgnoredChars(word);\n    return word.length === 1;\n  } // detect mixed case words like \"McDonald\"\n  // returns false if the string is all one case\n\n\n  function isCamelCase(word) {\n    var ucReg = /[A-Z]+/;\n    var lcReg = /[a-z]+/;\n    return ucReg.exec(word) && lcReg.exec(word);\n  } // helper for fixCase\n  // uppercase words split by the separator (ex. dashes or periods)\n\n\n  function safeUpperCaseFirst(separator, word) {\n    return word.split(separator).map(function (thisWord) {\n      if (isCamelCase(thisWord)) {\n        return thisWord;\n      }\n\n      return thisWord.substr(0, 1).toUpperCase() + thisWord.substr(1).toLowerCase();\n    }, this).join(separator);\n  } // ucfirst words split by dashes or periods\n  // ucfirst all upper/lower strings, but leave camelcase words alone\n\n\n  function fixCase(word) {\n    // uppercase words split by dashes, like \"Kimura-Fay\"\n    word = safeUpperCaseFirst('-', word); // uppercase words split by periods, like \"J.P.\"\n\n    word = safeUpperCaseFirst('.', word);\n    return word;\n  }\n  /* eslint-disable complexity */\n\n\n  function parse(fullLastName) {\n    if (fullLastName === null) {\n      return {\n        salutation: null,\n        firstName: null,\n        middleName: null,\n        lastName: null,\n        suffix: null\n      };\n    }\n\n    fullLastName = fullLastName.trim();\n    let lastName = '';\n    let firstName = '';\n    let middleName = '';\n    let j = 0;\n    let i = 0; // split into words\n    // completely ignore any words in parentheses\n\n    const nameParts = fullLastName.split(' ').filter(function (namePart) {\n      return namePart.indexOf('(') === -1;\n    });\n    const numWords = nameParts.length; // is the first word a title? (Mr. Mrs, etc)\n\n    const salutation = isSalutation(nameParts[0]);\n    const suffix = isSuffix(nameParts[numWords - 1]); // set the range for the middle part of the name (trim prefixes & suffixes)\n\n    const start = salutation ? 1 : 0;\n    const end = suffix ? numWords - 1 : numWords;\n    let word = nameParts[start]; // if we start off with an initial, we'll call it the first name\n\n    if (isInitial(word)) {\n      // if so, do a look-ahead to see if they go by their middle name\n      // for ex: \"R. Jason Smith\" => \"Jason Smith\" & \"R.\" is stored as an initial\n      // but \"R. J. Smith\" => \"R. Smith\" and \"J.\" is stored as an initial\n      if (isInitial(nameParts[start + 1])) {\n        firstName += ' ' + word.toUpperCase();\n      } else {\n        middleName += ' ' + word.toUpperCase();\n      }\n    } else {\n      firstName += ' ' + fixCase(word);\n    } // concat the first name\n\n\n    for (i = start + 1; i < end - 1; i++) {\n      word = nameParts[i]; // move on to parsing the last name if we find an indicator of a compound\n      // last name (Von, Van, etc)\n      // we do not check earlier to allow for rare cases where an indicator is actually\n      // the first name (like \"Von Fabella\")\n\n      if (isCompoundLastName(word)) {\n        break;\n      }\n\n      if (isInitial(word)) {\n        middleName += ' ' + word.toUpperCase();\n      } else {\n        firstName += ' ' + fixCase(word);\n      }\n    } // check that we have more than 1 word in our string\n\n\n    if (end - start > 1) {\n      // concat the last name\n      for (j = i; j < end; j++) {\n        lastName += ' ' + fixCase(nameParts[j]);\n      }\n    } // return the various parts in an array\n\n\n    return {\n      salutation: salutation || '',\n      firstName: firstName.trim(),\n      middleName: middleName.trim(),\n      lastName: lastName.trim(),\n      suffix: suffix || ''\n    };\n  }\n});","define(\"adept-iq/utils/name-split\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = splitName;\n\n  function splitName(fullName) {\n    const result = {\n      firstName: null,\n      middleName: null,\n      lastName: null\n    };\n\n    if (typeof fullName !== 'undefined' && fullName !== null) {\n      const middleName = [];\n      fullName.split(' ').forEach((namePart, index, collection) => {\n        if (index === 0) {\n          if (collection.length === 1) {\n            // only have last name\n            result.lastName = namePart;\n          } else {\n            // first namePart is firstName\n            result.firstName = namePart;\n          }\n        } else if (index + 1 < collection.length) {\n          // not the last namePart, add to middleName\n          middleName.push(namePart);\n        } else {\n          // the last part of the name, set as lastName\n          result.lastName = namePart;\n        }\n      });\n\n      if (middleName.length > 0) {\n        result.middleName = middleName.join(' ');\n      }\n    }\n\n    return result;\n  }\n});","define(\"adept-iq/utils/number-to-words\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stringifyNumber = stringifyNumber;\n  const special = ['Zeroth', 'First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth', 'Eleventh', 'Twelvth', 'Thirteenth', 'Fourteenth', 'Fifteenth', 'Sixteenth', 'Seventeenth', 'Eighteenth', 'Nineteenth'];\n  const deca = ['Twent', 'Thirt', 'Fourt', 'Fift', 'Sixt', 'Sevent', 'Eight', 'Ninet'];\n\n  function stringifyNumber(n) {\n    if (n < 20) return special[n];\n    if (n % 10 === 0) return deca[Math.floor(n / 10) - 2] + 'ieth';\n    return deca[Math.floor(n / 10) - 2] + 'y-' + special[n % 10];\n  }\n});","define(\"adept-iq/utils/number\", [\"exports\"], function (_exports) {\n  'use strict';\n  /**\n   * checks  the value is  number  and number of digits\n   * @param value\n   * @param decimal\n   * @returns {boolean}\n   */\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.validateNumber = _exports.validateDecimalNumber = _exports.isDecimalValue = _exports.isBetween = void 0;\n\n  const isDecimalValue = (value, decimal) => {\n    const degitRange = decimal ? `{0,${decimal}}` : '{0}';\n    const regexExpression = `^\\\\d+(\\\\.\\\\d${degitRange})?$`;\n    const regex = new RegExp(regexExpression);\n    return regex.test(value);\n  };\n\n  _exports.isDecimalValue = isDecimalValue;\n\n  const isBetween = (number, min, max) => {\n    return number >= min && number <= max;\n  };\n\n  _exports.isBetween = isBetween;\n\n  const validateNumber = (value, validation) => {\n    const number = Number(value);\n    const {\n      min,\n      max\n    } = validation;\n    return isBetween(number, min, max);\n  };\n\n  _exports.validateNumber = validateNumber;\n\n  const validateDecimalNumber = (value, validation) => {\n    const {\n      min,\n      max,\n      maxDecimalDigits\n    } = validation;\n    return isDecimalValue(value, maxDecimalDigits) && isBetween(Number(value), min, max);\n  };\n\n  _exports.validateDecimalNumber = validateDecimalNumber;\n});","define(\"adept-iq/utils/password-validator\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.isValidPassword = void 0;\n\n  /**\n   *\n   * @param {*} password\n   * @returns true if the password is valid, false if invalid\n   * True password meaning the password is not empty AND passes the regex constrians\n   */\n  const isValidPassword = password => {\n    const passwordRegex = /^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,20}$/;\n    return !Ember.isEmpty(password) && passwordRegex.test(password);\n  };\n\n  _exports.isValidPassword = isValidPassword;\n});","define(\"adept-iq/utils/promise-race\", [\"exports\", \"ember-hifi/utils/promise-race\"], function (_exports, _promiseRace) {\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 _promiseRace.default;\n    }\n  });\n});","define(\"adept-iq/utils/range\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = range;\n\n  function range(num) {\n    const arr = [];\n\n    for (let i = 0; i < num; i += 1) {\n      arr.push(0);\n    }\n\n    return arr;\n  }\n});","define(\"adept-iq/utils/regex-functions\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.REGEX_REMOVE_TEXT_FORMAT = _exports.REGEX_REMOVE_NUMBER_FORMAT = _exports.REGEX_REMOVE_DECIMAL_FORMAT = _exports.REGEX_ONLY_TEXT_FORMAT = _exports.REGEX_NUMBER = _exports.REGEX_HHMM = _exports.REGEX_FLOAT = _exports.REGEX_EMAIL = void 0;\n  const REGEX_HHMM = /^\\d?\\d?(:\\d?\\d?)?$/im;\n  _exports.REGEX_HHMM = REGEX_HHMM;\n  const REGEX_NUMBER = /^\\d*$/im;\n  _exports.REGEX_NUMBER = REGEX_NUMBER;\n  const REGEX_FLOAT = /^\\d*\\.*\\d*$/im;\n  _exports.REGEX_FLOAT = REGEX_FLOAT;\n  const REGEX_EMAIL = /([0-9a-z]+@[a-z.]+\\.[a-zA-Z0-9-.])\\w+/im;\n  _exports.REGEX_EMAIL = REGEX_EMAIL;\n  const REGEX_REMOVE_TEXT_FORMAT = /[^0-9.]+/; //remove alphabet\n\n  _exports.REGEX_REMOVE_TEXT_FORMAT = REGEX_REMOVE_TEXT_FORMAT;\n  const REGEX_REMOVE_DECIMAL_FORMAT = /[^0-9]/g; //remove alphabet and decimal(.)\n\n  _exports.REGEX_REMOVE_DECIMAL_FORMAT = REGEX_REMOVE_DECIMAL_FORMAT;\n  const REGEX_REMOVE_NUMBER_FORMAT = /\\d+/g; //remove numbers(0-9) form string\n\n  _exports.REGEX_REMOVE_NUMBER_FORMAT = REGEX_REMOVE_NUMBER_FORMAT;\n  const REGEX_ONLY_TEXT_FORMAT = /^[a-zA-Z]+$/; //remove numbers and special character form string\n\n  _exports.REGEX_ONLY_TEXT_FORMAT = REGEX_ONLY_TEXT_FORMAT;\n});","define(\"adept-iq/utils/remove-focus\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.cursorDefault = cursorDefault;\n  _exports.cursorWait = cursorWait;\n  _exports.removeFocus = removeFocus;\n\n  function removeFocus() {\n    Ember.$('.column-widget-search-box').blur();\n    Ember.$('.address-search-input').blur();\n    return true;\n  }\n\n  function cursorWait() {\n    Ember.$('html,body,.component-link').css('cursor', 'wait');\n  }\n\n  function cursorDefault() {\n    Ember.$('html,body,.component-link').css('cursor', 'default');\n  }\n});","define(\"adept-iq/utils/rql-generators\", [\"exports\", \"moment\", \"adept-iq/utils/encoding\"], function (_exports, _moment, _encoding) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.timeNeRQL = _exports.timeLteRQL = _exports.timeLtRQL = _exports.timeGteRQL = _exports.timeGtRQL = _exports.timeEqRQL = _exports.stringStartsWithRQL = _exports.stringNotLikeRQL = _exports.stringNeRQL = _exports.stringLtRQL = _exports.stringLikeRQL = _exports.stringIeqRQL = _exports.stringGtRQL = _exports.stringEqRQL = _exports.stringEnumRQL = _exports.stringBetweenRQL = _exports.strictlyNotBetweenRQL = _exports.strictlyBetweenRQL = _exports.orRQL = _exports.nullRQL = _exports.neRQL = _exports.lteRQL = _exports.ltRQL = _exports.inRQL = _exports.gteRQL = _exports.gtRQL = _exports.eqRQL = _exports.emptyRQL = _exports.dateStrictlyBetweenRQL = _exports.dateNotBetweenRQL = _exports.dateNeRQL = _exports.dateLteRQL = _exports.dateLtRQL = _exports.dateGteRQL = _exports.dateGtRQL = _exports.dateEqRQL = _exports.dateBetweenRQL = _exports.betweenRQL = _exports.andRQL = void 0;\n\n  // compound RQL generators\n  const andRQL = function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return `and(${args.join(',')})`;\n  };\n\n  _exports.andRQL = andRQL;\n\n  const orRQL = function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return `or(${args.join(',')})`;\n  }; // elementary RQL generators\n\n\n  _exports.orRQL = orRQL;\n\n  const nullRQL = () => null;\n\n  _exports.nullRQL = nullRQL;\n\n  const emptyRQL = p => `or(eq(${p},null),eq(${p},[]))`;\n\n  _exports.emptyRQL = emptyRQL;\n\n  const eqRQL = (p, _ref) => {\n    let [v] = _ref;\n    return `eq(${p},${v})`;\n  };\n\n  _exports.eqRQL = eqRQL;\n\n  const neRQL = (p, _ref2) => {\n    let [v] = _ref2;\n    return `ne(${p},${v})`;\n  };\n\n  _exports.neRQL = neRQL;\n\n  const ltRQL = (p, _ref3) => {\n    let [v] = _ref3;\n    return `lt(${p},${v})`;\n  };\n\n  _exports.ltRQL = ltRQL;\n\n  const lteRQL = (p, _ref4) => {\n    let [v] = _ref4;\n    return `le(${p},${v})`;\n  };\n\n  _exports.lteRQL = lteRQL;\n\n  const gtRQL = (p, _ref5) => {\n    let [v] = _ref5;\n    return `gt(${p},${v})`;\n  };\n\n  _exports.gtRQL = gtRQL;\n\n  const gteRQL = (p, _ref6) => {\n    let [v] = _ref6;\n    return `ge(${p},${v})`;\n  };\n\n  _exports.gteRQL = gteRQL;\n\n  const betweenRQL = (p, _ref7) => {\n    let [v, w] = _ref7;\n    return andRQL(gteRQL(p, [v]), lteRQL(p, [w]));\n  };\n\n  _exports.betweenRQL = betweenRQL;\n\n  const strictlyBetweenRQL = (p, _ref8) => {\n    let [v, w] = _ref8;\n    return andRQL(gtRQL(p, [v]), ltRQL(p, [w]));\n  };\n\n  _exports.strictlyBetweenRQL = strictlyBetweenRQL;\n\n  const strictlyNotBetweenRQL = (p, _ref9) => {\n    let [v, w] = _ref9;\n    return orRQL(ltRQL(p, [v]), gtRQL(p, [w]));\n  };\n\n  _exports.strictlyNotBetweenRQL = strictlyNotBetweenRQL;\n\n  const inRQL = (p, values) => {\n    return `in(${p},(${values.join(',')}))`;\n  }; // quoted values! API will break if types don't match\n\n\n  _exports.inRQL = inRQL;\n\n  const stringEqRQL = (p, _ref10) => {\n    let [v] = _ref10;\n    return `eq(${p},'${v}')`;\n  };\n\n  _exports.stringEqRQL = stringEqRQL;\n\n  const stringNeRQL = (p, _ref11) => {\n    let [v] = _ref11;\n    return `ne(${p},'${v}')`;\n  };\n\n  _exports.stringNeRQL = stringNeRQL;\n\n  const stringLtRQL = (p, _ref12) => {\n    let [v] = _ref12;\n    return `lt(${p},'${v}')`;\n  };\n\n  _exports.stringLtRQL = stringLtRQL;\n\n  const stringGtRQL = (p, _ref13) => {\n    let [v] = _ref13;\n    return `gt(${p},'${v}')`;\n  };\n\n  _exports.stringGtRQL = stringGtRQL;\n\n  const stringIeqRQL = (p, _ref14) => {\n    let [v] = _ref14;\n    return `ilike(${p},'${v}')`;\n  };\n\n  _exports.stringIeqRQL = stringIeqRQL;\n\n  const stringLikeRQL = (p, values) => {\n    if (values.length < 2) {\n      return `ilike(${p},'%${values[0]}%')`;\n    }\n\n    return orRQL(values.map(value => `ilike(${p},'%${value}%')`));\n  };\n\n  _exports.stringLikeRQL = stringLikeRQL;\n\n  const stringStartsWithRQL = (p, values) => {\n    if (values.length < 2) {\n      return `ilike(${p},'${values[0]}%')`;\n    }\n\n    return orRQL(values.map(value => `ilike(${p},'${value}%')`));\n  };\n\n  _exports.stringStartsWithRQL = stringStartsWithRQL;\n\n  const stringEnumRQL = (p, values) => {\n    return orRQL(values.map(value => `eq(${p},'${value}')`));\n  };\n\n  _exports.stringEnumRQL = stringEnumRQL;\n\n  const stringNotLikeRQL = (p, _ref15) => {\n    let [v] = _ref15;\n    return `notilike(${p},'%${v}%')`;\n  }; // need %...%\n\n\n  _exports.stringNotLikeRQL = stringNotLikeRQL;\n\n  const stringBetweenRQL = (p, _ref16) => {\n    let [v, w] = _ref16;\n    return andRQL(stringGtRQL(p, [v]), stringLtRQL(p, [w]));\n  };\n\n  _exports.stringBetweenRQL = stringBetweenRQL;\n\n  const dateGtRQL = (p, _ref17) => {\n    let [v] = _ref17;\n    return `gt(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.dateGtRQL = dateGtRQL;\n\n  const dateGteRQL = (p, _ref18) => {\n    let [v] = _ref18;\n    return `ge(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.dateGteRQL = dateGteRQL;\n\n  const dateLtRQL = (p, _ref19) => {\n    let [v] = _ref19;\n    return `lt(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.dateLtRQL = dateLtRQL;\n\n  const dateLteRQL = (p, _ref20) => {\n    let [v] = _ref20;\n    return `le(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.dateLteRQL = dateLteRQL;\n\n  const dateEqRQL = (p, _ref21) => {\n    let [v] = _ref21;\n    return `eq(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.dateEqRQL = dateEqRQL;\n\n  const dateNeRQL = (p, _ref22) => {\n    let [v] = _ref22;\n    return `ne(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.dateNeRQL = dateNeRQL;\n\n  const timeEqRQL = (p, _ref23) => {\n    let [v] = _ref23;\n    return `eq(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.timeEqRQL = timeEqRQL;\n\n  const timeGtRQL = (p, _ref24) => {\n    let [v] = _ref24;\n    return `gt(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.timeGtRQL = timeGtRQL;\n\n  const timeLteRQL = (p, _ref25) => {\n    let [v] = _ref25;\n    return `le(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.timeLteRQL = timeLteRQL;\n\n  const timeLtRQL = (p, _ref26) => {\n    let [v] = _ref26;\n    return `lt(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.timeLtRQL = timeLtRQL;\n\n  const timeNeRQL = (p, _ref27) => {\n    let [v] = _ref27;\n    return `ne(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.timeNeRQL = timeNeRQL;\n\n  const timeGteRQL = (p, _ref28) => {\n    let [v] = _ref28;\n    return `ge(${p},'${_moment.default.utc(v).format(_encoding.FORMAT_WITH_DATE_AND_TIME)}Z')`;\n  };\n\n  _exports.timeGteRQL = timeGteRQL;\n\n  const dateBetweenRQL = (p, _ref29) => {\n    let [v, w] = _ref29;\n    return andRQL(dateGteRQL(p, [v]), dateLteRQL(p, [w]));\n  };\n\n  _exports.dateBetweenRQL = dateBetweenRQL;\n\n  const dateStrictlyBetweenRQL = (p, _ref30) => {\n    let [v, w] = _ref30;\n    return andRQL(dateGtRQL(p, [v]), dateLtRQL(p, [w]));\n  };\n\n  _exports.dateStrictlyBetweenRQL = dateStrictlyBetweenRQL;\n\n  const dateNotBetweenRQL = (p, _ref31) => {\n    let [v, w] = _ref31;\n    return orRQL(dateLtRQL(p, [v]), dateGtRQL(p, [w]));\n  };\n\n  _exports.dateNotBetweenRQL = dateNotBetweenRQL;\n});","define(\"adept-iq/utils/rql\", [\"exports\", \"adept-iq/config/filter-types\"], function (_exports, _filterTypes) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.buildQueryParams = void 0;\n\n  const renderSortsRQL = sorts => {\n    const rqlFragments = sorts.map(_ref => {\n      let {\n        path,\n        asc\n      } = _ref;\n      const sign = asc ? '+' : '-';\n      return `${sign}${path}`;\n    });\n    return rqlFragments.uniq().join(',');\n  };\n\n  const renderCompoundFilter = (type, args) => {\n    if (!args) return null;\n    /*eslint-disable */\n\n    const renderedArgs = args.map(renderFilterRQL).compact();\n    /*eslint-enable */\n\n    if (renderedArgs.length === 0) return null;\n    if (renderedArgs.length === 1) return renderedArgs[0];\n    return `${type}(${renderedArgs.join(',')})`;\n  };\n\n  const renderFilterRQL = node => {\n    if (!node) return null; // allow pre-rendered fragments\n\n    if (Ember.typeOf(node) === 'string') return node;\n\n    switch (node.type) {\n      case 'and':\n      case 'or':\n        return renderCompoundFilter(node.type, node.args);\n\n      default:\n        {\n          const {\n            rql\n          } = _filterTypes.filterTypesHash[node.type];\n          return rql(node.rql.path, node.rql.values);\n        }\n    }\n  };\n\n  const renderIncludesRQL = includes => {\n    // TODO: handle configurable inner joins\n    return includes.sort().uniq().join(',');\n  };\n\n  const buildQueryParams = _ref2 => {\n    let {\n      sorts,\n      filter,\n      includes,\n      page\n    } = _ref2;\n    const query = {};\n\n    if (!Ember.isEmpty(sorts)) {\n      query.sort = renderSortsRQL(sorts);\n    }\n\n    if (filter) {\n      const filterRQL = renderFilterRQL(filter);\n\n      if (filterRQL) {\n        query.filter = filterRQL;\n      }\n    }\n\n    if (!Ember.isEmpty(includes)) {\n      query.include = renderIncludesRQL(includes);\n    }\n\n    if (Ember.isPresent(page)) {\n      query['page[offset]'] = page.offset;\n      query['page[limit]'] = page.limit;\n    }\n\n    return query;\n  };\n\n  _exports.buildQueryParams = buildQueryParams;\n});","define(\"adept-iq/utils/save-records\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = _default;\n\n  function _default(records) {\n    return Promise.all(records.map(record => record.save()));\n  }\n});","define(\"adept-iq/utils/shared-audio-access\", [\"exports\", \"ember-hifi/utils/shared-audio-access\"], function (_exports, _sharedAudioAccess) {\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 _sharedAudioAccess.default;\n    }\n  });\n});","define(\"adept-iq/utils/sorts\", [\"exports\", \"adept-iq/config/comparison-functions\"], function (_exports, _comparisonFunctions) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.buildCompareFunction = buildCompareFunction;\n  _exports.buildSimpleArrayCompareFunction = buildSimpleArrayCompareFunction;\n  _exports.buildSimpleCompareFunction = buildSimpleCompareFunction;\n\n  function buildCompareFunction(params) {\n    return (a, b) => {\n      const cmp = Ember.makeArray(params).reduce((acc, _ref) => {\n        let {\n          path,\n          asc,\n          compare\n        } = _ref;\n        if (acc !== 0) return acc;\n        const sign = asc ? 1 : -1;\n        const aValue = a.get ? a.get(path) : a[path];\n        const bValue = b.get ? b.get(path) : b[path];\n        return sign * compare(aValue, bValue);\n      }, 0); // tie breaker uses `guidFor`\n\n      if (cmp === 0) {\n        return (0, _comparisonFunctions.nullCompare)(a, b);\n      }\n\n      return cmp;\n    };\n  }\n\n  function buildSimpleCompareFunction(params) {\n    return (a, b) => {\n      const cmp = Ember.makeArray(params).reduce((acc, _ref2) => {\n        let {\n          path,\n          asc,\n          compare\n        } = _ref2;\n        if (acc !== 0) return acc;\n        const sign = asc ? 1 : -1;\n        const aValue = a.get ? a.get(path) : a[path];\n        const bValue = b.get ? b.get(path) : b[path];\n        return sign * compare(aValue, bValue);\n      }, 0);\n      return cmp;\n    };\n  }\n\n  function buildSimpleArrayCompareFunction(params) {\n    return (a, b) => {\n      const cmp = Ember.makeArray(params).reduce((acc, _ref3) => {\n        let {\n          path,\n          asc,\n          compare,\n          arraySortPath\n        } = _ref3;\n        if (acc !== 0) return acc;\n        const sign = asc ? 1 : -1;\n        let aValue = a.get ? a.get(path) : a[path];\n        let bValue = b.get ? b.get(path) : b[path];\n\n        if (arraySortPath && aValue) {\n          aValue = aValue.get ? aValue.get(arraySortPath) : aValue;\n        }\n\n        if (arraySortPath && bValue) {\n          bValue = bValue.get ? bValue.get(arraySortPath) : bValue;\n        }\n\n        return sign * compare(aValue, bValue);\n      }, 0);\n      return cmp;\n    };\n  }\n});","define(\"adept-iq/utils/status-error-code\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  var _default = {\n    '200': 'OK',\n    '201': 'Created',\n    '204': 'No Content',\n    '400': 'Bad Request',\n    '401': 'Unauthorized',\n    '403': 'Forbidden',\n    '404': 'Not Found',\n    '405': 'Method Not Allowed',\n    '408': 'Request Timed-out',\n    '409': 'Conflict',\n    '500': 'Internal Server Error',\n    '501': 'Not Implemented',\n    '502': 'Bad Gateway'\n  };\n  _exports.default = _default;\n});","define(\"adept-iq/utils/stringifyNumber\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.stringifyNumber = void 0;\n  const SPECIAL = ['zeroth', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth'];\n  const DECA = ['twent', 'thirt', 'fort', 'fift', 'sixt', 'sevent', 'eight', 'ninet'];\n\n  const stringifyNumber = number => {\n    if (number < 20) return SPECIAL[number];\n    if (number % 10 === 0) return DECA[Math.floor(number / 10) - 2] + 'ieth';\n    return `${DECA[Math.floor(number / 10) - 2]}y-${SPECIAL[number % 10]}`;\n  };\n\n  _exports.stringifyNumber = stringifyNumber;\n});","define(\"adept-iq/utils/titleize\", [\"exports\", \"ember-cli-string-helpers/utils/titleize\"], function (_exports, _titleize) {\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 _titleize.default;\n    }\n  });\n});","define(\"adept-iq/utils/turn-by-turn-icon\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.renderTurnByTurnIcon = _exports.MANEUVER_MAP = void 0;\n  const MANEUVER_MAP = {\n    'ARRIVE': '/arrows-icons/straight.svg',\n    'ARRIVE_LEFT': '/arrows-icons/straight.svg',\n    'ARRIVE_RIGHT': '/arrows-icons/straight.svg',\n    'DEPART': '/arrows-icons/straight.svg',\n    'STRAIGHT': '/arrows-icons/straight.svg',\n    'KEEP_RIGHT': '/arrows-icons/right1.svg',\n    'BEAR_RIGHT': '/arrows-icons/right2.svg',\n    'TURN_RIGHT': '/arrows-icons/right3.svg',\n    'SHARP_RIGHT': '/arrows-icons/right3.svg',\n    'KEEP_LEFT': '/arrows-icons/left1.svg',\n    'BEAR_LEFT': '/arrows-icons/left2.svg',\n    'TURN_LEFT': '/arrows-icons/left3.svg',\n    'SHARP_LEFT': '/arrows-icons/left3.svg',\n    'MAKE_UTURN': '/arrows-icons/uturn.svg',\n    'ENTER_MOTORWAY': '/arrows-icons/straight.svg',\n    'ENTER_FREEWAYIVE': '/arrows-icons/straight.svg',\n    'ENTER_FREEWAY': '/arrows-icons/straight.svg',\n    'ENTER_HIGHWAY': '/arrows-icons/straight.svg',\n    'TAKE_EXIT': '/arrows-icons/straight.svg',\n    'MOTORWAY_EXIT_LEFT': '/arrows-icons/straight.svg',\n    'MOTORWAY_EXIT_RIGHT': '/arrows-icons/straight.svg',\n    'TAKE_FERRY': '/arrows-icons/straight.svg',\n    'ROUNDABOUT_CROSS': '/arrows-icons/straight.svg',\n    'ROUNDABOUT_RIGHT': '/arrows-icons/right4.svg',\n    'ROUNDABOUT_LEFT': '/arrows-icons/left4.svg',\n    'ROUNDABOUT_BACK': '/arrows-icons/straight.svg',\n    'TRY_MAKE_UTURN': '/arrows-icons/straight.svg',\n    'FOLLOW': '/arrows-icons/straight.svg',\n    'SWITCH_PARALLEL_ROAD': '/arrows-icons/straight.svg',\n    'SWITCH_MAIN_ROAD': '/arrows-icons/straight.svg',\n    'ENTRANCE_RAMP': '/arrows-icons/straight.svg',\n    'WAYPOINT_LEFT': '/arrows-icons/straight.svg',\n    'WAYPOINT_RIGHT': '/arrows-icons/straight.svg',\n    'WAYPOINT_REACHED': '/arrows-icons/straight.svg'\n  };\n  _exports.MANEUVER_MAP = MANEUVER_MAP;\n\n  const renderTurnByTurnIcon = guidance => {\n    return MANEUVER_MAP[guidance.maneuver];\n  };\n\n  _exports.renderTurnByTurnIcon = renderTurnByTurnIcon;\n});","define(\"adept-iq/utils/turn-by-turn\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.renderTurnByTurnGuidance = _exports.MANEUVER_MAP = void 0;\n  const MANEUVER_MAP = {\n    'ARRIVE': 'You have arrived',\n    'ARRIVE_LEFT': 'You have arrived. Your destination is on the left',\n    'ARRIVE_RIGHT': 'You have arrived. Your destination is on the right',\n    'DEPART': 'Leave',\n    'STRAIGHT': 'Keep straight',\n    'KEEP_RIGHT': 'Keep right',\n    'BEAR_RIGHT': 'Bear right',\n    'TURN_RIGHT': 'Turn right',\n    'SHARP_RIGHT': 'Turn sharp right',\n    'KEEP_LEFT': 'Keep left',\n    'BEAR_LEFT': 'Bear left',\n    'TURN_LEFT': 'Turn left',\n    'SHARP_LEFT': 'Turn sharp left',\n    'MAKE_UTURN': 'Make a U-turn',\n    'ENTER_MOTORWAY': 'Take the motorway',\n    'ENTER_FREEWAYIVE': 'Take the freeway',\n    'ENTER_HIGHWAY': 'Take the highway',\n    'TAKE_EXIT': 'Take the exit',\n    'MOTORWAY_EXIT_LEFT': 'Take the left exit',\n    'MOTORWAY_EXIT_RIGHT': 'Take the right exit',\n    'TAKE_FERRY': 'Take the ferry',\n    'ROUNDABOUT_CROSS': 'Cross the roundabout',\n    'ROUNDABOUT_RIGHT': 'At the roundabout take the exit on the right',\n    'ROUNDABOUT_LEFT': 'At the roundabout take the exit on the left',\n    'ROUNDABOUT_BACK': 'Go around the roundabout',\n    'TRY_MAKE_UTURN': 'Try to make a U-turn',\n    'FOLLOW': 'Follow',\n    'SWITCH_PARALLEL_ROAD': 'Switch to the parallel road',\n    'SWITCH_MAIN_ROAD': 'Switch to the main road',\n    'ENTRANCE_RAMP': 'Take the ramp',\n    'WAYPOINT_LEFT': 'You have reached the waypoint. It is on the left',\n    'WAYPOINT_RIGHT': 'You have reached the waypoint. It is on the right',\n    'WAYPOINT_REACHED': 'You will reach the waypoint'\n  };\n  _exports.MANEUVER_MAP = MANEUVER_MAP;\n\n  const renderTurnByTurnGuidance = guidance => {\n    return MANEUVER_MAP[guidance.maneuver];\n  };\n\n  _exports.renderTurnByTurnGuidance = renderTurnByTurnGuidance;\n});","define(\"adept-iq/utils/unwrapProxy\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.unwrapProxy = void 0;\n\n  const isProxy = obj => {\n    return obj instanceof Ember.ObjectProxy || obj instanceof Ember.ArrayProxy;\n  };\n\n  const unwrapProxy = obj => {\n    if (!obj) return null;\n    if (isProxy(obj)) return obj.get('content');\n    return obj;\n  };\n\n  _exports.unwrapProxy = unwrapProxy;\n});","define(\"adept-iq/utils/validator\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.isEmailValid = void 0;\n\n  const isEmailValid = email => {\n    const result = String(email).toLowerCase().match(/^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\n    return !Ember.isEmpty(result);\n  };\n\n  _exports.isEmailValid = isEmailValid;\n});","define(\"adept-iq/utils/vehicle-info\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.vehicleInfoData = _exports.prepareVehicleInfoData = void 0;\n\n  const vehicleInfoData = () => {\n    const vehicleInfo = {\n      'data': {\n        'type': 'vehicleInfo',\n        'id': '',\n        'attributes': {\n          'state': 'active',\n          'callsign': '',\n          'device': {\n            'hardwareId': null,\n            'type': '',\n            'OS': '',\n            'appVersion': ''\n          }\n        }\n      }\n    };\n    return vehicleInfo;\n  };\n\n  _exports.vehicleInfoData = vehicleInfoData;\n\n  const prepareVehicleInfoData = (vehicleInfoJSON, record) => {\n    vehicleInfoJSON.data.id = record.get('name');\n    vehicleInfoJSON.data.attributes.callsign = record.get('name');\n    return vehicleInfoJSON;\n  };\n\n  _exports.prepareVehicleInfoData = prepareVehicleInfoData;\n});","define(\"adept-iq/utils/vehicleCapacity\", [\"exports\", \"adept-iq/models/travel-need-type\"], function (_exports, _travelNeedType) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.notEnoughSeatsTripInRoute = _exports.notEnoughCapacity = _exports.missingNonConsumable = _exports.isUnderCapacity = _exports.haveEnoughVehCapacity = _exports.currentStopCapacity = void 0;\n\n  // one type is capable then it is capable.\n  function flexSeatsIsCapable(travelNeed, flexSeats) {\n    return flexSeats.some(flexSeat => {\n      return Object.entries(travelNeed).every(_ref => {\n        let [travelNeedTypeName, travelNeedCount] = _ref;\n        const capacityCount = isNaN(flexSeat[travelNeedTypeName]) ? 0 : flexSeat[travelNeedTypeName];\n        const requestCount = isNaN(travelNeedCount) ? 0 : travelNeedCount;\n        return capacityCount >= requestCount;\n      });\n    });\n  }\n\n  const notEnoughCapacity = (travelNeedCounts, capacityCounts) => {\n    if (!capacityCounts) return false;\n    const notEnough = Object.entries(travelNeedCounts).some(_ref2 => {\n      let [travelNeedTypeName, travelNeedCount] = _ref2;\n      const capacityCount = isNaN(capacityCounts[travelNeedTypeName]) ? 0 : capacityCounts[travelNeedTypeName];\n      const requestCount = isNaN(travelNeedCount) ? 0 : travelNeedCount;\n      return capacityCount < requestCount;\n    });\n\n    if (notEnough) {\n      // Search flexSeats instead\n      if (capacityCounts.flexSeats && capacityCounts.flexSeats.length > 0) {\n        return !flexSeatsIsCapable(travelNeedCounts, capacityCounts.flexSeats);\n      }\n    }\n\n    return notEnough;\n  };\n\n  _exports.notEnoughCapacity = notEnoughCapacity;\n\n  const missingNonConsumable = (tripNonConsumables, vehicleNonConsumables, travelNeedTypes) => {\n    const missingArray = [];\n    if (Ember.isEmpty(tripNonConsumables)) return missingArray;\n    Object.entries(tripNonConsumables).forEach(_ref3 => {\n      let [travelNeedTypeName] = _ref3;\n      const travelNeedType = travelNeedTypes.find(obj => obj.id === travelNeedTypeName);\n\n      if (!vehicleNonConsumables.hasOwnProperty(travelNeedType.get('vehicleCapacityType.id'))) {\n        missingArray.push({\n          id: travelNeedTypeName,\n          displayName: travelNeedType.get('displayName')\n        });\n      }\n    });\n    return missingArray;\n  };\n  /**\n   * will travel need have enough capacity for this flex seat group\n   * @param travelNeed                //trip travel needs\n   * @param nonConsumableTravelNeeds  //trip travel non-consumable Needs\n   * @param flexSeat                  //vehicle flexible seats\n   * @param nonConsumables            //vehicle non-consumable equipments\n   * @returns {Boolean}\n   * @private\n   */\n\n\n  _exports.missingNonConsumable = missingNonConsumable;\n\n  function flexSeatHaveCapacity(travelNeed, nonConsumableTravelNeeds, flexSeat, nonConsumables) {\n    const haveCapacityCount = Object.entries(travelNeed).every(_ref4 => {\n      let [travelNeedTypeName, travelNeedCount] = _ref4;\n      const capacityCount = flexSeat[travelNeedTypeName] || 0;\n      return capacityCount >= travelNeedCount;\n    });\n    const haveNonConsumableEquipments = Object.entries(nonConsumableTravelNeeds).every(_ref5 => {\n      let [travelNeedTypeName] = _ref5;\n      const capacity = nonConsumables[travelNeedTypeName]; //noConsumable equipments would record under vehicle capacity group 0 and 0 count;\n\n      return capacity !== null && capacity >= 0;\n    });\n    return haveCapacityCount && haveNonConsumableEquipments;\n  }\n\n  const isUnderCapacity = (dispatchRoute, vehicleCapacityCounts) => {\n    const clusters = dispatchRoute.get('orderedClusters').toArray();\n    const flexSeats = vehicleCapacityCounts ? vehicleCapacityCounts.flexSeats : null;\n    const nonConsumables = vehicleCapacityCounts ? vehicleCapacityCounts.nonConsumables : null;\n    let haveCapacity = true;\n    if (clusters.length < 1) return !haveCapacity; // have to check max travel needs for each cluster with all possible flex seats\n\n    haveCapacity = clusters.every(cluster => {\n      const travelNeed = cluster.get('maxVehicleCapacityNeedCounts');\n      const nonConsumableTravelNeeds = cluster.get('nonConsumableTravelNeeds');\n      let haveFlexCapacity = false;\n      if (!travelNeed || !flexSeats || flexSeats.length < 1) return true;\n      haveFlexCapacity = flexSeats.some(flexSeat => {\n        return flexSeatHaveCapacity(travelNeed, nonConsumableTravelNeeds, flexSeat, nonConsumables);\n      });\n      return haveFlexCapacity;\n    });\n    return !haveCapacity;\n  }; // returns the current capacity available before stopPoint\n\n\n  _exports.isUnderCapacity = isUnderCapacity;\n\n  const currentStopCapacity = (stopPoint, dispatchRoute, vehicle) => {\n    const orderedStops = dispatchRoute.get('orderedStops');\n    const capacityCounts = vehicle ? vehicle.get('capacityCounts') : {};\n    const currentTravelNeedCapacity = {\n      ambulatory: capacityCounts.ambulatory || 0,\n      wheelchair: capacityCounts.wheelchair || 0\n    };\n\n    for (const stop of orderedStops) {\n      if (stop.id === stopPoint.get('id')) {\n        break;\n      }\n\n      const tripTravelNeedCounts = stop.get('trip.travelNeedCounts');\n\n      if (stop.get('isPick')) {\n        currentTravelNeedCapacity.ambulatory -= tripTravelNeedCounts.ambulatory;\n        currentTravelNeedCapacity.wheelchair -= tripTravelNeedCounts.wheelchair;\n      } else if (stop.get('isDrop')) {\n        currentTravelNeedCapacity.ambulatory += tripTravelNeedCounts.ambulatory;\n        currentTravelNeedCapacity.wheelchair += tripTravelNeedCounts.wheelchair;\n      }\n    }\n\n    return currentTravelNeedCapacity;\n  };\n\n  _exports.currentStopCapacity = currentStopCapacity;\n\n  const haveEnoughVehCapacity = travelNeeds => {\n    return travelNeeds.some(travelNeed => {\n      const type = travelNeed.get('travelNeedType.vehicleCapacityType');\n      return type === _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE || type === _travelNeedType.AMBULATORY_TRAVELNEED_TYPE;\n    });\n  }; // return trips not having enough seats given new travelNeedItems for stopPoint\n\n\n  _exports.haveEnoughVehCapacity = haveEnoughVehCapacity;\n\n  const notEnoughSeatsTripInRoute = (travelNeedItems, stopPoint, dispatchRoute, vehicle) => {\n    const ambulatoryTravelNeedItem = travelNeedItems.find(item => item.type === _travelNeedType.AMBULATORY_TRAVELNEED_TYPE);\n    const wheelchairTravelNeedItem = travelNeedItems.find(item => item.type === _travelNeedType.WHEELCHAIR_TRAVELNEED_TYPE);\n    const orderedStops = dispatchRoute.get('orderedStops');\n    const capacityCounts = vehicle ? vehicle.get('capacityCounts') : {};\n    const currentTripId = stopPoint.get('trip.tripId');\n    const flexSeats = capacityCounts.flexSeats;\n    let tripsInDanger = [];\n    let minimumTripsInDanger = []; // go through all the flex seats possibilities\n\n    const atLeastOnePass = flexSeats.some(flexSeat => {\n      const currentTravelNeedCapacity = {\n        ambulatory: flexSeat.ambulatory || 0,\n        wheelchair: flexSeat.wheelchair || 0\n      };\n      tripsInDanger = [];\n\n      for (const stop of orderedStops) {\n        const tripTravelNeedCounts = stop.get('trip.travelNeedCounts');\n        const stopTripId = stop.get('trip.tripId');\n\n        if (stopTripId === currentTripId) {\n          if (stop.get('isPick')) {\n            currentTravelNeedCapacity.ambulatory -= ambulatoryTravelNeedItem.count;\n            currentTravelNeedCapacity.wheelchair -= wheelchairTravelNeedItem.count;\n          } else if (stop.get('isDrop')) {\n            currentTravelNeedCapacity.ambulatory += ambulatoryTravelNeedItem.count;\n            currentTravelNeedCapacity.wheelchair += wheelchairTravelNeedItem.count;\n          }\n        } else if (stopTripId !== currentTripId) {\n          if (stop.get('isPick')) {\n            currentTravelNeedCapacity.ambulatory -= tripTravelNeedCounts.ambulatory;\n            currentTravelNeedCapacity.wheelchair -= tripTravelNeedCounts.wheelchair;\n          } else if (stop.get('isDrop')) {\n            currentTravelNeedCapacity.ambulatory += tripTravelNeedCounts.ambulatory;\n            currentTravelNeedCapacity.wheelchair += tripTravelNeedCounts.wheelchair;\n          }\n        }\n\n        if (stop.get('isPick')) {\n          if (currentTravelNeedCapacity.ambulatory < 0 || currentTravelNeedCapacity.wheelchair < 0) {\n            tripsInDanger.pushObject(stopTripId);\n          }\n        }\n      } // this flex seat fits. exit.\n\n\n      if (tripsInDanger.length === 0) {\n        return true;\n      } // does not fit for this flex seat. keep the best possibilities\n\n\n      if (minimumTripsInDanger.length === 0 || minimumTripsInDanger.length > tripsInDanger.length) {\n        minimumTripsInDanger = tripsInDanger;\n      }\n\n      return false;\n    });\n    if (atLeastOnePass) return [];\n    return minimumTripsInDanger;\n  };\n\n  _exports.notEnoughSeatsTripInRoute = notEnoughSeatsTripInRoute;\n});","define(\"adept-iq/utils/widget-placement\", [\"exports\"], function (_exports) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.computeMask = computeMask;\n  _exports.computeMaxSpacePairs = computeMaxSpacePairs;\n  _exports.computeWidgetPlacements = computeWidgetPlacements;\n\n  /**\n   * Computes a list of possible locations that will fit a widget of specified\n   * minimum width and height; scans left to right, then down the rows.\n   *\n   * @param {Dashboard} dashboard\n   * @param {integer} gridWidth\n   * @param {integer} minWidth\n   * @param {integer} minHeight\n   */\n\n  /**\n   * Computes max width and height for a widget placed at each location in mask.\n   *\n   * @param {Array} mask\n   */\n  function computeMaxSpacePairs(mask) {\n    const width = mask.length;\n    const pairs = [];\n\n    for (let i = width - 1; i >= 0; i--) {\n      const height = mask[i].length;\n      pairs[i] = [];\n\n      for (let j = height - 1; j >= 0; j--) {\n        let maxWidth, maxHeight;\n\n        if (mask[i][j]) {\n          maxWidth = 0;\n        } else if (i === width - 1) {\n          maxWidth = 1;\n        } else {\n          maxWidth = pairs[i + 1][j][0] + 1;\n        }\n\n        if (mask[i][j]) {\n          maxHeight = 0;\n        } else if (j === height - 1) {\n          maxHeight = Infinity;\n        } else {\n          maxHeight = pairs[i][j + 1][1] + 1;\n        }\n\n        pairs[i][j] = [maxWidth, maxHeight];\n      }\n    }\n\n    return pairs;\n  }\n  /**\n   * Computes an array mask with non-zero value iff grid location is occupied.\n   *\n   * @param {Dashboard} dashboard\n   * @param {integer} gridWidth\n   */\n\n\n  function computeMask(dashboard, gridWidth) {\n    const widgets = dashboard.get('widgets'); // find horiz limit of existing widgets\n\n    let xMax = widgets.reduce((max, widget) => {\n      const x = widget.get('x');\n      const width = widget.get('width');\n      return Math.max(max, x + width);\n    }, 0); // grid may be wider than right-most widget's edge\n\n    xMax = Math.max(xMax, gridWidth); // allow one extra row below bottom-most widget\n\n    const yMax = 1 + widgets.reduce((max, widget) => {\n      const y = widget.get('y');\n      const height = widget.get('height');\n      return Math.max(max, y + height);\n    }, 0); // allow one extra row in mask\n\n    const mask = [];\n\n    for (let i = 0; i < xMax; i++) {\n      mask[i] = [];\n\n      for (let j = 0; j < yMax; j++) {\n        mask[i][j] = 0;\n      }\n    } // shade values for existing widgets in layout\n\n\n    widgets.forEach(widget => {\n      const {\n        x,\n        y,\n        height,\n        width\n      } = widget.getProperties(['x', 'y', 'height', 'width']);\n\n      for (let i = x; i < x + width; i++) {\n        for (let j = y; j < y + height; j++) {\n          mask[i][j] = 1;\n        }\n      }\n    });\n    return mask;\n  }\n\n  function computeWidgetPlacements(dashboard, gridWidth, minWidth, minHeight) {\n    const mask = computeMask(dashboard, gridWidth);\n    const freeSpacePairs = computeMaxSpacePairs(mask);\n    const locations = [];\n    const height = mask[0].length;\n\n    for (let j = 0; j < height; j++) {\n      for (let i = 0; i < gridWidth; i++) {\n        const [maxWidth, maxHeight] = freeSpacePairs[i][j];\n\n        if (maxWidth >= minWidth && maxHeight >= minHeight) {\n          locations.push({\n            x: i,\n            y: j,\n            maxWidth,\n            maxHeight\n          });\n        }\n      }\n    }\n\n    return locations;\n  }\n});","define(\"adept-iq/utils/workspace-availability\", [\"exports\", \"moment\"], function (_exports, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.processTimeConstraints = processTimeConstraints;\n\n  function processTimeConstraints(leftTimeConstraint, rightTimeConstraint, startTime, endTime) {\n    let leftTime, rightTime;\n\n    if (leftTimeConstraint) {\n      const date = leftTimeConstraint;\n      if (!(date instanceof Date)) return false;\n      leftTime = Ember.isPresent(date) ? date.getTime() : null;\n    }\n\n    if (rightTimeConstraint) {\n      const date = rightTimeConstraint;\n      if (!(date instanceof Date)) return false;\n      rightTime = Ember.isPresent(date) ? date.getTime() : null;\n    }\n\n    if (Ember.isPresent(leftTime) && Ember.isPresent(rightTime)) {\n      if (leftTime <= (0, _moment.default)(endTime) && rightTime >= (0, _moment.default)(startTime)) return true;\n    }\n\n    return false;\n  }\n});","define(\"adept-iq/utils/zone-validation\", [\"exports\", \"adept-iq/config/zone-polygon\"], function (_exports, _zonePolygon) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.insideZone = insideZone;\n  _exports.isJsonString = isJsonString;\n  _exports.isPointInsidePolygon = isPointInsidePolygon;\n\n  function isPointInsidePolygon(point, polygon) {\n    const x = point[1];\n    const y = point[0];\n    let inside = false;\n    if (x === '' || y === '') return inside;\n    if (Ember.isEmpty(polygon)) return inside;\n\n    for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n      const xi = polygon[i][0];\n      const yi = polygon[i][1];\n      const xj = polygon[j][0];\n      const yj = polygon[j][1];\n      const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n      if (intersect) inside = !inside;\n    }\n\n    return inside;\n  }\n\n  function insideZone(point, bbox) {\n    // ray-casting algorithm based on\n    // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n    return isPointInsidePolygon(point, Ember.isPresent(bbox) ? bbox : _zonePolygon.default);\n  }\n\n  function isJsonString(str) {\n    try {\n      JSON.parse(str);\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  }\n});","define(\"adept-iq/validators/alias\", [\"exports\", \"ember-cp-validations/validators/alias\"], function (_exports, _alias) {\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 _alias.default;\n    }\n  });\n});","define(\"adept-iq/validators/belongs-to\", [\"exports\", \"ember-cp-validations/validators/belongs-to\"], function (_exports, _belongsTo) {\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 _belongsTo.default;\n    }\n  });\n});","define(\"adept-iq/validators/collection\", [\"exports\", \"ember-cp-validations/validators/collection\"], function (_exports, _collection) {\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 _collection.default;\n    }\n  });\n});","define(\"adept-iq/validators/confirmation\", [\"exports\", \"ember-cp-validations/validators/confirmation\"], function (_exports, _confirmation) {\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 _confirmation.default;\n    }\n  });\n});","define(\"adept-iq/validators/date\", [\"exports\", \"ember-cp-validations/validators/date\"], function (_exports, _date) {\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 _date.default;\n    }\n  });\n});","define(\"adept-iq/validators/dependent\", [\"exports\", \"ember-cp-validations/validators/dependent\"], function (_exports, _dependent) {\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 _dependent.default;\n    }\n  });\n});","define(\"adept-iq/validators/ds-error\", [\"exports\", \"ember-cp-validations/validators/ds-error\"], function (_exports, _dsError) {\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 _dsError.default;\n    }\n  });\n});","define(\"adept-iq/validators/exclusion\", [\"exports\", \"ember-cp-validations/validators/exclusion\"], function (_exports, _exclusion) {\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 _exclusion.default;\n    }\n  });\n});","define(\"adept-iq/validators/format\", [\"exports\", \"ember-cp-validations/validators/format\"], function (_exports, _format) {\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 _format.default;\n    }\n  });\n});","define(\"adept-iq/validators/has-many\", [\"exports\", \"ember-cp-validations/validators/has-many\"], function (_exports, _hasMany) {\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 _hasMany.default;\n    }\n  });\n});","define(\"adept-iq/validators/inclusion\", [\"exports\", \"ember-cp-validations/validators/inclusion\"], function (_exports, _inclusion) {\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 _inclusion.default;\n    }\n  });\n});","define(\"adept-iq/validators/length\", [\"exports\", \"ember-cp-validations/validators/length\"], function (_exports, _length) {\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 _length.default;\n    }\n  });\n});","define(\"adept-iq/validators/messages\", [\"exports\", \"ember-cp-validations/validators/messages\"], function (_exports, _messages) {\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 _messages.default;\n    }\n  });\n});","define(\"adept-iq/validators/number\", [\"exports\", \"ember-cp-validations/validators/number\"], function (_exports, _number) {\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 _number.default;\n    }\n  });\n});","define(\"adept-iq/validators/presence\", [\"exports\", \"ember-cp-validations/validators/presence\"], function (_exports, _presence) {\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 _presence.default;\n    }\n  });\n});","define(\"adept-iq/validators/unique-route-template-name\", [\"exports\", \"ember-cp-validations/validators/base\"], function (_exports, _base) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n\n  /* eslint-disable no-unused-vars */\n  const UniqueRouteTemplatename = _base.default.extend({\n    store: Ember.inject.service(),\n\n    validate(value, options, model) {\n      let routeTemplates = this.get('store').peekAll('route-template');\n      routeTemplates = routeTemplates.filter(r => Ember.isPresent(r.get('id')) && r.get('id') !== model.get('id'));\n      const routeNameMap = routeTemplates.reduce((acu, routeTemplate) => {\n        acu[routeTemplate.get('name')] = routeTemplate;\n        return acu;\n      }, {});\n      const duplicateRouteTemplate = routeNameMap[value];\n      return Ember.isPresent(duplicateRouteTemplate) ? options.message : true;\n    }\n\n  });\n\n  UniqueRouteTemplatename.reopenClass({\n    getDependentsFor(attribute, options) {\n      return [];\n    }\n\n  });\n  var _default = UniqueRouteTemplatename;\n  _exports.default = _default;\n});","define(\"adept-iq/validators/validate-date\", [\"exports\", \"ember-changeset-validations/utils/validation-errors\", \"ember-changeset-validations/utils/with-defaults\", \"moment\"], function (_exports, _validationErrors, _withDefaults, _moment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.validateDate = validateDate;\n  // Current version of ember changeset validations does not current contain validateDate function\n  // when we update our ember version and other relevant libraries we can remove this file\n  const errorFormat = 'MMM Do, YYYY';\n\n  function isValidDate(d) {\n    return d instanceof Date && !isNaN(d);\n  }\n\n  function validateDate() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // eslint-disable-next-line no-param-reassign\n    options = (0, _withDefaults.default)(options, {\n      allowBlank: false,\n      errorFormat: errorFormat\n    });\n    return (key, value) => {\n      const {\n        allowBlank\n      } = options;\n      let {\n        before,\n        onOrBefore,\n        after,\n        onOrAfter,\n        message\n      } = options;\n      let type = 'date';\n\n      if (allowBlank && (typeof value === 'undefined' || value === null)) {\n        return true;\n      }\n\n      const date = (0, _moment.default)(value).toDate();\n\n      if (!isValidDate(date)) {\n        return (0, _validationErrors.default)(key, {\n          type,\n          value: 'not a date',\n          context: {\n            value,\n            message\n          }\n        });\n      }\n\n      if (before) {\n        before = (0, _moment.default)(before).toDate();\n        message = message || `[BEFORE] date is NOT before ${value}`;\n        type = 'before';\n\n        if (date >= before) {\n          return (0, _validationErrors.default)(key, {\n            type,\n            value,\n            context: {\n              before,\n              message\n            }\n          });\n        }\n      }\n\n      if (onOrBefore) {\n        onOrBefore = (0, _moment.default)(onOrBefore).toDate();\n        message = message || `[ON OR BEFORE] date is NOT on or before ${value}`;\n        type = 'onOrBefore';\n\n        if (date > onOrBefore) {\n          return (0, _validationErrors.default)(key, {\n            type,\n            value,\n            context: {\n              onOrBefore,\n              message\n            }\n          });\n        }\n      }\n\n      if (after) {\n        after = (0, _moment.default)(after).toDate();\n        message = message || `[AFTER] date is NOT after ${value}`;\n        type = 'after';\n\n        if (date <= after) {\n          return (0, _validationErrors.default)(key, {\n            type,\n            value,\n            context: {\n              after,\n              message\n            }\n          });\n        }\n      }\n\n      if (onOrAfter) {\n        onOrAfter = (0, _moment.default)(onOrAfter).toDate();\n        message = message || `[ON OR AFTER] date is NOT on or after ${value}`;\n        type = 'onOrAfter';\n\n        if (date < onOrAfter) {\n          return (0, _validationErrors.default)(key, {\n            type,\n            value,\n            context: {\n              onOrAfter,\n              message\n            }\n          });\n        }\n      }\n\n      return true;\n    };\n  }\n});","define(\"adept-iq/validators/validate-duplicate-field\", [\"exports\", \"ember-changeset-validations/utils/validation-errors\"], function (_exports, _validationErrors) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.validateDuplicateField = validateDuplicateField;\n\n  function validateDuplicateField() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    return (key, value, oldValue, changes, content) => {\n      const {\n        message\n      } = options;\n      const description = value ? value : '';\n      const id = content.get('id');\n      const tableRef = content.get('tableRef.records') || []; //vallidation for duplicate description\n\n      const lookupRecord = tableRef.filter(record => {\n        const previousDescription = record.get(key) ? record.get(key) : '';\n        return previousDescription.toLowerCase() === description.toLowerCase();\n      }).find(rec => !id || rec.get('id') !== id);\n\n      if (lookupRecord) {\n        return (0, _validationErrors.default)(key, {\n          context: {\n            value,\n            message\n          }\n        });\n      }\n\n      return true;\n    };\n  }\n});","define(\"adept-iq/workers/avl-ping\", [], function () {\n  \"use strict\";\n\n  self.addEventListener('message', function (m) {\n    const {\n      vehicleId,\n      timestamp,\n      lat,\n      lng,\n      url,\n      token\n    } = m.data;\n    return fetch(url, {\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n        Authorization: `Bearer ${token}`\n      },\n      body: JSON.stringify({\n        data: {\n          type: 'avl',\n          attributes: {\n            vehicleId,\n            timestamp,\n            lat,\n            lng\n          }\n        }\n      })\n    });\n  }, false);\n});","define(\"adept-iq/workers/socket\", [\"adept-iq/topic-transforms/avlm-alert\", \"adept-iq/topic-transforms/avlm-message\", \"adept-iq/topic-transforms/avlm-route-exec-event\", \"adept-iq/topic-transforms/driver\", \"adept-iq/topic-transforms/eta-route\", \"adept-iq/topic-transforms/lock\", \"adept-iq/topic-transforms/polyline\", \"adept-iq/topic-transforms/rider\", \"adept-iq/topic-transforms/subscription\", \"adept-iq/topic-transforms/trip\", \"adept-iq/topic-transforms/vehicle\", \"adept-iq/topic-transforms/stop-point\", \"adept-iq/topic-transforms/user\", \"adept-iq/topic-transforms/avlm-rider-event\", \"adept-iq/topic-transforms/avlm-route\", \"adept-iq/topic-transforms/avlm-trip\", \"adept-iq/topic-transforms/avlm-stop-point\", \"adept-iq/topic-transforms/avlm-trip-rider\", \"adept-iq/topic-transforms/avlm-route-break\", \"adept-iq/topic-transforms/avlm-event\"], function (_avlmAlert, _avlmMessage, _avlmRouteExecEvent, _driver, _etaRoute, _lock, _polyline, _rider, _subscription, _trip, _vehicle, _stopPoint, _user, _avlmRiderEvent, _avlmRoute, _avlmTrip, _avlmStopPoint, _avlmTripRider, _avlmRouteBreak, _avlmEvent) {\n  \"use strict\";\n\n  /* global postMessage */\n\n  /* CORE + Required AVLM Topic Transforms */\n\n  /* AVLM Topic Transforms */\n  // worker will throw an error if it encounters any model type that isn't\n  // registered here; set to `null` if no transform required\n  // eslint-disable-next-line no-unused-vars\n  const TRANSFORMS = {\n    'address': null,\n    'avl': null,\n    'avlm-address': null,\n    'avlm-alert': _avlmAlert.default,\n    'avlm-canned-message-template': null,\n    'avlm-cluster': null,\n    'avlm-driver': null,\n    'avlm-driver-state-event': null,\n    'avlm-event': _avlmEvent.default,\n    'avlm-message': _avlmMessage.default,\n    'avlm-rider': null,\n    'avlm-rider-event': _avlmRiderEvent.default,\n    'avlm-route': _avlmRoute.default,\n    'avlm-route-exec-event': _avlmRouteExecEvent.default,\n    'avlm-route-update': null,\n    'avlm-trip': _avlmTrip.default,\n    'avlm-trip-payment': null,\n    'avlm-trip-rider': _avlmTripRider.default,\n    'avlm-trip-rider-attribute': null,\n    'avlm-schedule': null,\n    'avlm-route-break': _avlmRouteBreak.default,\n    'avlm-route-vehicle-driver': null,\n    'avlm-stop-point': _avlmStopPoint.default,\n    'avlm-vehicle': null,\n    'avlm-vehicle-info': null,\n    'avlm-zone': null,\n    'booking': null,\n    'cluster': null,\n    'dispatch-route': null,\n    'dispatch-schedule': null,\n    'driver': _driver.default,\n    'etanav-route': _etaRoute.default,\n    'stop-point': _stopPoint.default,\n    'leg': null,\n    'location': null,\n    'lock': _lock.default,\n    'no-show': null,\n    'place': null,\n    'polyline': _polyline.default,\n    'rider': _rider.default,\n    'route': null,\n    'route-vehicle-driver': null,\n    'route-break': null,\n    'segment': null,\n    'segment-stop': null,\n    'schedule': null,\n    'subscription': _subscription.default,\n    'trip': _trip.default,\n    'trip-stop': null,\n    'vehicle': _vehicle.default,\n    'vehicle-breakdown': null,\n    'user': _user.default,\n    'zone': null\n  };\n  const FLUSH_INTERVAL = 500;\n  const PING_TIMEOUT = 15000;\n  const PONG_TIMEOUT = 10000;\n  const HEARTBEAT_MSG = 'HEARTBEAT';\n  let mainQueue = {};\n  let avlQueue = {};\n  let lockQueue = {};\n  const sockets = {}; // eslint-disable-next-line no-unused-vars\n\n  let ENV, pingTimeoutId, pongTimeoutId;\n  const FILTER_TYPE = {\n    ADD_GLOBAL_FILTER: 'ADD_GLOBAL_FILTER',\n    ADD_WIDGET_FILTER: 'ADD_WIDGET_FILTER'\n  };\n\n  function setENV(env) {\n    ENV = env;\n  }\n\n  function handlePayloadData(data) {\n    let payloads;\n\n    try {\n      payloads = JSON.parse(data);\n    } catch (err) {\n      throw new Error(`bad topic json data: ${data}`);\n    }\n\n    if (!payloads) return [];\n    return payloads;\n  }\n\n  function sendGlobalFilter(data) {\n    const {\n      socketId,\n      startDate,\n      endDate,\n      selectedProviders,\n      startDateUTC,\n      endDateUTC,\n      scheduleId\n    } = data;\n    const socket = sockets[socketId];\n    sockets[socketId] = socket;\n    const request = {\n      action: FILTER_TYPE.ADD_GLOBAL_FILTER,\n      startDate,\n      endDate,\n      selectedProviders,\n      startDateUTC,\n      endDateUTC,\n      scheduleId\n    };\n    sockets[socketId].send(JSON.stringify(request));\n  }\n\n  function sendWidgetFilter(data) {\n    const {\n      socketId,\n      widgetInstanceId,\n      modelName,\n      filter,\n      offset,\n      limit,\n      sort\n    } = data;\n    const socket = sockets[socketId];\n    sockets[socketId] = socket;\n    const request = {\n      action: FILTER_TYPE.ADD_WIDGET_FILTER,\n      widgetInstanceId,\n      widgetModelName: modelName,\n      dataFilterQuery: filter,\n      pageOffset: offset,\n      pageLimit: limit,\n      sortField: sort\n    };\n    sockets[socketId].send(JSON.stringify(request));\n  }\n\n  function heartReset() {\n    clearTimeout(pingTimeoutId);\n    clearTimeout(pongTimeoutId);\n  }\n\n  function heartStart(socketId) {\n    const socket = sockets[socketId];\n    pingTimeoutId = setTimeout(() => {\n      const request = {\n        action: HEARTBEAT_MSG\n      };\n      socket.send(JSON.stringify(request));\n      pongTimeoutId = setTimeout(() => {\n        socket.close();\n      }, PONG_TIMEOUT);\n    }, PING_TIMEOUT);\n  }\n\n  function heartCheck(socketId) {\n    heartReset();\n    heartStart(socketId);\n  }\n\n  function connectSocket(socketId, url, token\n  /*startDate, endDate*/\n  ) {\n    if (sockets[socketId]) {\n      throw new Error(`socketId '${socketId}' already used`);\n    }\n\n    const socket = new WebSocket(url, [token]);\n    sockets[socketId] = socket;\n\n    socket.onopen = () => {\n      if (!sockets[socketId]) {\n        // this socket has been removed\n        socket.close();\n        return;\n      }\n\n      heartCheck(socketId);\n      postMessage({\n        action: 'open',\n        socketId\n      });\n    };\n\n    socket.onmessage = e => {\n      if (!sockets[socketId]) return; // parse & apply topic transforms\n\n      const payloads = handlePayloadData(e.data); // iqux service websocket TODO\n\n      if (payloads.header) {\n        postMessage({\n          action: 'data',\n          payloads,\n          socketId\n        }); // Any message comes in, we reset heartBeat check\n\n        heartCheck(socketId);\n        return;\n      }\n\n      payloads.forEach(payload => {\n        if (!payload.message) {\n          mainQueue[socketId] = mainQueue[socketId] || [];\n          mainQueue[socketId].push(payload);\n          return;\n        }\n        /* eslint-disable indent */\n\n\n        if (payload.message && payload.message.data && payload.message.data.type) {\n          switch (payload.message.data.type) {\n            case 'avl':\n              {\n                const {\n                  id\n                } = payload.message.data.relationships.vehicle.data;\n                avlQueue[socketId] = avlQueue[socketId] || {};\n                avlQueue[socketId][id] = payload;\n                break;\n              }\n\n            case 'lock':\n              {\n                const {\n                  id\n                } = payload.message.data.relationships.dispatchRoute.data;\n                lockQueue[socketId] = lockQueue[socketId] || {};\n                lockQueue[socketId][id] = payload;\n                break;\n              }\n\n            default:\n              {\n                mainQueue[socketId] = mainQueue[socketId] || [];\n                mainQueue[socketId].push(payload);\n                break;\n              }\n          }\n        }\n        /* eslint-enable indent */\n\n      });\n    };\n\n    socket.onerror = e => {\n      if (!sockets[socketId]) return;\n      postMessage({\n        action: 'error',\n        code: e.code,\n        socketId\n      });\n    };\n\n    socket.onclose = e => {\n      // clear out handlers\n      socket.onopen = null;\n      socket.onmessage = null;\n      socket.onerror = null;\n      socket.onclose = null;\n      postMessage({\n        action: 'close',\n        code: e.code,\n        socketId\n      });\n    };\n  }\n\n  function disconnectSocket(socketId) {\n    const socket = sockets[socketId]; // socket was probably already terminated\n\n    if (!socket) return;\n    heartReset();\n    socket.close();\n    delete sockets[socketId];\n  }\n\n  self.addEventListener('message', function (e) {\n    const {\n      action,\n      socketId,\n      startDate,\n      endDate\n    } = e.data;\n\n    switch (action) {\n      case 'connect':\n        return connectSocket(socketId, e.data.url, e.data.token, startDate, endDate);\n\n      case 'disconnect':\n        return disconnectSocket(socketId);\n\n      case 'setEnv':\n        return setENV(e.data.ENV);\n\n      case 'sendGlobalFilter':\n        return sendGlobalFilter(e.data);\n\n      case 'sendWidgetFilter':\n        return sendWidgetFilter(e.data);\n\n      default:\n        break;\n    }\n  }, false);\n  setInterval(() => {\n    Object.entries(mainQueue).forEach(_ref => {\n      let [socketId, payloads] = _ref;\n      postMessage({\n        action: 'data',\n        socketId,\n        payloads\n      });\n    });\n    mainQueue = {};\n  }, FLUSH_INTERVAL); // stagger avl flushes between main flushes\n\n  setTimeout(() => {\n    setInterval(() => {\n      Object.entries(avlQueue).forEach(_ref2 => {\n        let [socketId, queueHash] = _ref2;\n        const payloads = Object.values(queueHash);\n        postMessage({\n          action: 'data',\n          socketId,\n          payloads\n        });\n      });\n      avlQueue = {};\n    }, FLUSH_INTERVAL * 2);\n  }, FLUSH_INTERVAL / 2); // stagger lock flushes between the other main flushes\n\n  setTimeout(() => {\n    setInterval(() => {\n      Object.entries(lockQueue).forEach(_ref3 => {\n        let [socketId, queueHash] = _ref3;\n        const payloads = Object.values(queueHash);\n        postMessage({\n          action: 'data',\n          socketId,\n          payloads\n        });\n      });\n      lockQueue = {};\n    }, FLUSH_INTERVAL * 2);\n  }, 3 * FLUSH_INTERVAL / 2);\n});","\n","define('adept-iq/config/environment', [], function() {\n  var prefix = 'adept-iq';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(decodeURIComponent(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","\n          if (!runningTests) {\n            require(\"adept-iq/app\")[\"default\"].create({\"localFilteringEnabled\":true,\"paginationEnabled\":true,\"SUBSCRIPTION_TOPICS\":[{\"topic\":\"all\",\"loadAsync\":true}],\"PAYLOAD_CHUNK_SIZE\":1000000,\"avlmLite\":false,\"guy\":false,\"test\":false,\"distanceUnit\":\"mi\",\"mapValidationPolygon\":\"zone_polygon_nyct\",\"HIGH_PRIORITY_MODELS\":{\"ds-route\":true,\"stop-point\":true,\"trip\":true,\"etanav-route\":true,\"etanav-stop-point\":true},\"ENABLE_HIGH_PRIORITY_MODELS\":false,\"DEBUG_QUEUES\":false,\"ENABLE_IQUX_USER_UPDATE\":false,\"WOOTRIC_TOKEN\":\"\",\"byDistance\":false,\"mapGeocodeAPI\":\"tomtom\",\"name\":\"adept-iq\",\"version\":\"0.0.0+ba058e36\"});\n          }\n        \n"],"names":[],"mappings":"AAAA;AACA;AACA;;ACFA;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;;ACbA;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;;ACbA;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;;ACtBA;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;;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;;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;;AC1DA;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;;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;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;;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;;ACbA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACRA;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;;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;;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;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC1BA;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;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACtCA;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;;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;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;;ACRA;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;;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;;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;;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;;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;;AClGA;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;;AC1BA;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;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;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;;ACZA;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;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;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;;AC/IA;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;;ACZA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC5BA;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;;ACpBA;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;;ACRA;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;;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;;AC7BA;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;;ACtBA;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5EA;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;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;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;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;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;;AC7NA;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;;AC1BA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC3CA;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;;ACZA;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;;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;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACRA;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;;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;;ACZA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACZA;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;;ACZA;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;;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;;AC1BA;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;;ACZA;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;;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;;ACtGA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/xBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC3DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACx6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClgBA;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;;AC3UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxRA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC3BA;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;;ACtCA;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;;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;;AC1BA;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;;AC1BA;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;;AC9CA;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;;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;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3uBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;AACA;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;;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;;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;;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;;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;;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;;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;;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;;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;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;;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;;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;;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;;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;;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;;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;;ACnCA;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;;AC5BA;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;;ACzBA;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;;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;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;;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;;ACjWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjBA;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;;ACXA;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;;ACZA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACXA;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;;ACXA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACXA;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;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjsBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxiBA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACluBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACtCA;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;;ACDA;AACA;;ACDA;AACA;;ACDA;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;;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;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;;ACpCA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;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;;ACXA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;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;;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;;ACfA;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;ACjBA;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;;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;;ACxBA;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;;ACjBA;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;;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;;ACjBA;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;;ACjBA;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;;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;;AChBA;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;;ACjBA;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;;ACjBA;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;;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;;ACjBA;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;;ACpBA;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;;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;;AClDA;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnCA;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;;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;;ACjCA;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;;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;;ACzBA;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;;AC5BA;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;;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACrCA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1RA;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;;ACpBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACdA;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;;AC3KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;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;;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;;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;;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;;AC9BA;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;;ACvOA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpBA;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;;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;;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;;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;;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;;ACrNA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtOA;AACA;AACA;AACA;AACA;AACA;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;;ACnBA;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;;AChBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9BA;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;;ACbA;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;;ACXA;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;;ACbA;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;;ACbA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvwBA;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;;ACrBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC3BA;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;;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;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;;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;;AC3CA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACnEA;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;;AClBA;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;;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;;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;;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;;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;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;;AClBA;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;;ACpBA;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;;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;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;;ACrBA;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;;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;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;AClCA;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;;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;;AC5BA;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;;ACrCA;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;;ACbA;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;;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;;ACxBA;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;;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;;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;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;;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;;AC5BA;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;;AClBA;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;;ACrBA;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;;AChFA;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;;AC3DA;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;;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;;AC5CA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC7WA;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;;ACxBA;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;;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;;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;;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;;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;;AC3HA;AACA;AACA;AACA;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;;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;;AC1BA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrBA;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;;ACxBA;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;;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;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;;AC5BA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1RA;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;;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;;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;;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;;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;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;;ACrBA;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;;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;;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;;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;;ACzBA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;AC3BA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjBA;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;;ACnEA;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;;AC9CA;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACplBA;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;;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;;ACrHA;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;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;;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;;AC1BA;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;;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;;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;;ACjEA;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;AACA;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;;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;;ACzBA;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;;AClBA;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;;AC9IA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACvCA;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;;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;;AC1IA;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;;ACXA;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;;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;;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;;ACvEA;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;;AClBA;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;;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;;AC3DA;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;;ACrDA;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;;AC/DA;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;;ACzEA;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;;ACzFA;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;;ACnDA;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;;AC7IA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/MA;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;;ACzJA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpNA;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;;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;;ACzBA;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;;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;;ACnDA;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;;ACpBA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClQA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtQA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC1HA;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;;ACpBA;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;;AC5BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChSA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxEA;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;;ACnDA;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;;ACvBA;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;;AC1GA;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;;ACjEA;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;;ACxFA;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;;AC9DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/MA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjFA;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;;AChDA;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;;ACnFA;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;;ACjCA;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;;ACxEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACpDA;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;;ACrHA;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;;AClHA;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;;AClCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3WA;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;;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;;AC/CA;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;;AC7DA;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;;ACzBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC7BA;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;;ACtBA;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;;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;;AChEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/MA;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;;ACvCA;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;;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;;ACjJA;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;;ACzHA;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;;AC/DA;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;;AChBA;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;;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;;AChCA;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;;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;;AC1CA;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;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;;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;;ACjDA;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;;AClBA;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;;ACZA;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;;ACvCA;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;;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;;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;;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;;ACnCA;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;;ACZA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpgDA;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;;ACnBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxzCA;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;;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;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC39BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC7CA;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;;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;;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;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtsFA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxPA;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;;ACZA;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;;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;;AC7BA;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;;ACxCA;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;;ACZA;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;;AC7HA;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;;ACjKA;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;;ACvHA;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;;ACZA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClLA;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;;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;;AC1BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvhBA;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;;ACZA;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;;ACnIA;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;;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;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACtCA;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;;ACjJA;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;;AC9CA;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;;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;;ACnCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClQA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;AC/FA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;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;;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;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;;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;;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;;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;;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACnCA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACnGA;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;;ACxBA;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;;AC/IA;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;;AC1BA;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;;ACnCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzlDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrhCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtkBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxQA;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;;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChOA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChkBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AClDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACl5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3hBA;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;;ACzEA;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5DA;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;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC5FA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/nBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACbA;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;;ACjDA;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;;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;;AClCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACntEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxWA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACn2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrqEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnHA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;;AC3IA;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;;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;;AC7GA;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;;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;;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;AACA;AACA;AACA;;ACpGA;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;;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;;AClGA;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;;ACtBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpCA;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;;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnMA;AACA;AACA;AACA;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;;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;;ACrDA;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;;AChDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACZA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9GA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;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;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7UA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9rGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACt/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;;AChXA;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;;ACjEA;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;;ACZA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz+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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9TA;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;;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;;ACnVA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1NA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC7BA;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;;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;;ACrYA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9TA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7nBA;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;;AClGA;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;;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;;ACvcA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;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;;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;;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;;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;;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;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;ACtFA;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;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;AC3SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC5BA;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;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;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzTA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrTA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/RA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5QA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpCA;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;;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;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5DA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACnCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC15BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3QA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxNA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjWA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjVA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjaA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjKA;AACA;AACA;AACA;AACA;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;;ACxBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3SA;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;;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;;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;;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;;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;;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;;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;AACA;AACA;AACA;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;;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;;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;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;;AC3FA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxwCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3sCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtOA;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;;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;;AC9EA;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;;ACzBA;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;;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;;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;;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;;AC5FA;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;;AC3BA;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;;ACvBA;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;;AC1GA;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;;AClBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtBA;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;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9EA;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;;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;;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;;ACtEA;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;;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;;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;;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;;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;;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;;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;;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;;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;;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;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrEA;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;;AC/FA;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;;ACpDA;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;;ACjKA;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;;ACnEA;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;;ACpHA;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;;AC9IA;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;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AChJA;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;AACA;AACA;;ACbA;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;;AC9CA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9aA;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;;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;;ACpEA;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;;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;;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;;AC9BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC7DA;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;;ACrCA;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;;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;;ACnNA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC7BA;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;;ACpCA;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5yBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC9CA;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;;AC7GA;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;;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;;ACtIA;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;;AC1IA;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;;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;;ACtIA;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;;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;;AC1DA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnVA;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;;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;;ACxEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC7EA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;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;;ACpJA;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;;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9QA;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;;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;;AChMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACzBA;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;;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;;ACzBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1xBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrDA;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;;AChDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACntBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxvBA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9HA;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;;AC9BA;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;;ACvCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxiBA;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;;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;;ACtLA;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;;AC1HA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/pCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;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;;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;;ACnRA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtqCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC3LA;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;;AChHA;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;;AClBA;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;;ACvGA;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;;ACxBA;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;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxCA;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;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;;ACpBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClsBA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/ZA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3RA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;AC7qBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtOA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxiBA;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;AACA;AACA;;ACjLA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxPA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1NA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9JA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpOA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9PA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC5BA;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;;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;;AChDA;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;;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;;AClCA;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;;ACRA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjFA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;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;;AC9GA;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;AACA;AACA;AACA;AACA;;ACnLA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC/BA;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;;AChDA;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;;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;;AClCA;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;;ACRA;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;;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;;AC/DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/vBA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACj9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;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;;AC5BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC1CA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC/FA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7UA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;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;;ACrDA;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;;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;;ACnCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC7DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC5DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC16CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpYA;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;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1xCA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACroBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;AC3BA;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;;AC/CA;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;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC96DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvYA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChSA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACvJA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC9CA;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;;ACpFA;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;;AChBA;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;;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;;ACpCA;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;;AC7EA;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;;ACnDA;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;;ACrCA;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;;AChHA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/MA;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;;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;;ACrCA;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;;ACZA;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;;ACzCA;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;;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;;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;;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;;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;;AC9LA;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;AACA;AACA;AACA;AACA;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACzCA;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;;ACjCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrKA;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;;ACvHA;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;;ACvDA;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;;AC7BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;ACpDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9LA;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;;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;;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;;ACpDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpaA;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;;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;;ACvDA;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;;AC/FA;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;;AC9BA;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;;AC5DA;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;;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;;AC9KA;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;;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;;ACzEA;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;;ACbA;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;;AChBA;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;;ACvDA;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;;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;;ACvCA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;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;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;;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;;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;;AC5FA;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;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;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;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;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;;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;;AC3DA;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;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACnKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC7FA;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;;ACZA;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;;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;;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;;AC1BA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjDA;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;;AC3MA;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;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AClJA;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;;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;;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;;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;;AClCA;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;ACnCA;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;;ACZA;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;;ACZA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/BA;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;;ACZA;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;;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;;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;;AC/BA;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;;ACZA;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;;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;;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;;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;;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;;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;;ACtCA;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;;ACZA;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;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC/BA;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;;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;;AClGA;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;;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;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;;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;;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;;ACnEA;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;;ACZA;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;;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;;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;;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;;ACpCA;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;;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;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC9CA;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;;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;;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;;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;;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;;ACjIA;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;;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;;AC1DA;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;;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;;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;;AClDA;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;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AClEA;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;;ACtIA;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;;ACnGA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtNA;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;;AC5DA;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;;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;;AC1HA;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;;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;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;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;;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;;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;;AC3FA;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtQA;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;;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;;AC5CA;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;;ACZA;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;;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;;AChQA;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;;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;;ACrJA;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;;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;;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;;ACrEA;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;;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;;ACpFA;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;;ACpBA;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;;ACZA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;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;;ACzEA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtBA;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;;ACZA;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;;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;;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;;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;;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;;ACjlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1zHA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AChEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACRA;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;;ACXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/KA;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;;ACpXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1uCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxOA;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;;ACjCA;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;;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;;ACtaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACv5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxoBA;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;;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;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;;AC1DA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACt0CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACVA;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;;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;;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;;ACnFA;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;;ACjBA;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;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;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;;ACjCA;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;;AClBA;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;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;;AC7BA;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;;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;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;;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;;AClIA;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;;ACXA;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;;ACLA;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;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;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;;ACvCA;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;;ACvBA;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;;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;;AC1PA;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;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;;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;;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;;AC7BA;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;;ACTA;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;;ACrCA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;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;;ACxCA;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;;ACdA;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;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;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;;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;;ACtCA;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;;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;;AC/BA;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;;AClBA;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;;ACxBA;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;;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;;AC/BA;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;;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;;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;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;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;;AC1BA;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;;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;;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;;AC/BA;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;;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;;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;;AC1BA;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;;ACZA;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;;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;;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;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;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;;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;;ACxLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;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;;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;;ACnCA;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;;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;;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;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;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;;AC/BA;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;;AC7BA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AChCA;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;;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;;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;;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;;ACxCA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACjCA;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACtBA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACvCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzCA;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;;ACjDA;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;;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;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;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACVA;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;;AC7EA;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;;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;AACA;AACA;AACA;AACA;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;;AChDA;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;;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;;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;AACA;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC3CA;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;;ACXA;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;;ACXA;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;;ACXA;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;;ACXA;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;;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;;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;;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjWA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;","file":"adept-iq.js"}